尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ROS2与aiSim实时孪生:构建高保真自主导航仿真环境实战

ROS2与aiSim实时孪生:构建高保真自主导航仿真环境实战 如果你正在学习ROS2想实现小车的自主导航却苦于没有实体机器人或者担心在真实环境中测试成本高、风险大那么这篇文章正是为你准备的。很多开发者卡在从“跑通Demo”到“实现自主导航”这一步不是因为算法有多难而是缺少一个能快速验证、反复试错的仿真环境。传统的Gazebo仿真虽然强大但配置复杂且与真实世界的传感器数据、物理特性存在差距导致仿真中跑得飞起的算法一上真车就“翻车”。本文将带你深入一个更高效的解决方案基于ROS2和aiSim实时孪生平台构建一个从虚拟到现实无缝衔接的自主导航实战项目。这不是一个简单的概念介绍而是一个完整的、可复现的工程实践。你将清晰地看到如何利用aiSim创建一个高保真的虚拟环境让ROS2导航栈Navigation2在其中进行SLAM建图与路径规划并理解这种“虚实共生”模式如何真正降低机器人开发的门槛和风险。读完本文你将能理解ROS2导航栈与仿真平台结合的核心价值与工作流程。亲手搭建一个包含aiSim仿真环境和ROS2 Nav2的完整开发环境。掌握让虚拟小车在仿真世界中完成建图、定位和自主导航的全套操作。获得从仿真验证到真机部署的清晰路径和避坑指南。我们不止步于“是什么”更要讲清楚“为什么”要这么做以及在实际项目中“如何做”才能高效可靠。1. 为什么需要“实时孪生”仿真从Gazebo到aiSim的演进在机器人开发中仿真为什么不可或缺答案很简单成本、效率和安全性。一台配备激光雷达、IMU、深度相机的移动机器人底盘价格不菲更别提在复杂、动态的真实场景中反复测试导航算法可能带来的硬件损坏风险。因此仿真是算法开发、集成测试的必经阶段。传统的ROS/ROS2仿真多依赖于Gazebo。Gazebo是一个功能强大的物理仿真引擎但它更偏向于“物理模拟”。对于自动驾驶、移动机器人等高阶感知和决策算法开发开发者往往需要更多高保真传感器模拟不仅仅是简单的激光射线而是能模拟真实激光雷达的点云分布、噪声、运动畸变以及相机图像的色彩、畸变、动态范围等。丰富的场景库快速构建办公室、仓库、家庭、城市道路等多种场景而不是从零开始建模。与真实数据的对齐仿真中产生的点云、图像数据其格式、坐标系、特性应尽可能接近真实传感器减少算法从仿真迁移到实车的适配工作。可重复与可控制能精确复现某个复杂交通场景或传感器故障情况用于测试算法的极端鲁棒性。这就是aiSim这类专注于自动驾驶和机器人仿真的平台出现的背景。aiSim通常提供了高精度的传感器模型物理准确的激光雷达、相机、毫米波雷达、IMU/GPS仿真。程序化生成的大规模场景通过算法快速生成大量、多样化的训练和测试场景。实时性能够与ROS2等机器人中间件进行实时数据交互形成闭环。云原生与协作支持在云端运行仿真方便团队共享场景和结果。“实时孪生”在这里的含义是仿真环境虚拟世界与机器人算法决策世界之间进行实时、高频率的数据交换传感器数据→控制指令形成一个动态的、闭环的测试系统。这比跑一个开环的、预录数据的仿真要更有价值因为它能真实检验整个系统的反馈与控制能力。对于ROS2小车自主导航这个具体任务使用aiSim等高级仿真平台意味着你可以在一个无限接近真实的虚拟仓库里让小车用模拟的激光雷达建图再用这个地图进行定位和导航整个过程与在真机上开发几乎一致但代价却小得多。2. 核心概念厘清ROS2 Navigation2 与仿真器如何协作在开始实战前必须理清几个核心概念及其在系统中的作用否则很容易在配置时迷失方向。ROS2 (Robot Operating System 2): 机器人中间件提供节点通信、消息传递、服务调用等基础设施。它是我们整个系统的“神经系统”。Navigation2 (Nav2): ROS2的官方导航框架。它不是一个单一的算法而是一个由多个节点组成的行为树Behavior Tree系统主要完成三件事SLAM (Simultaneous Localization and Mapping): 即时定位与地图构建。小车一边移动一边用传感器如激光雷达感知环境同时估算自身位置并绘制环境地图。常用工具如slam_toolbox。Localization (定位): 在已有地图中根据当前传感器数据确定小车在地图中的精确位姿。常用算法如AMCL自适应蒙特卡洛定位。Path Planning (路径规划): 根据目标点在地图中规划出一条从当前位置到目标位置的无碰撞路径。包括全局规划Global Planner和局部规划Local Planner后者负责动态避障。aiSim (或其他仿真器如Gazebo): 它是虚拟世界的“上帝”。它负责模拟物理环境墙壁、桌椅、斜坡的几何与物理属性。模拟传感器发布虚拟激光雷达的/scan话题虚拟相机的/image_raw话题等。模拟机器人模型接收来自ROS2导航系统发出的/cmd_vel速度控制指令话题并据此在仿真中移动机器人模型。提供可视化让我们能看到小车在虚拟世界中的一举一动。它们如何协作整个系统的数据流形成了一个清晰的闭环感知aiSim生成虚拟激光雷达数据通过/scan话题发布。决策ROS2中的SLAM节点订阅/scan进行建图或定位。规划Nav2中的规划器根据地图、定位信息和目标点计算出速度指令/cmd_vel。执行aiSim订阅/cmd_vel驱动虚拟小车模型运动从而改变其在环境中的位置。反馈小车运动后aiSim生成新的传感器数据回到第1步。这个闭环是“实时孪生”的核心。我们的任务就是正确配置ROS2和aiSim让这个环路畅通无阻地运转起来。3. 环境准备搭建ROS2与aiSim基础平台在开始编码之前我们需要一个干净、兼容的开发环境。以下步骤假设你使用Ubuntu 22.04 LTS操作系统这是目前ROS2 Humble Hawksbill长期支持版本的推荐系统。3.1 安装ROS2 Humble如果已经安装可以跳过此步。使用官方推荐的一键安装脚本是最稳妥的方式。# 1. 设置语言环境确保支持UTF-8 sudo apt update sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 # 2. 添加ROS2软件源 sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 3. 安装ROS2基础包Desktop版包含GUI工具 sudo apt update sudo apt install ros-humble-desktop # 4. 配置环境变量每次打开新终端都需要执行或写入~/.bashrc source /opt/ros/humble/setup.bash echo source /opt/ros/humble/setup.bash ~/.bashrc # 5. 安装一些常用工具和依赖 sudo apt install python3-colcon-common-extensions python3-rosdep2 python3-argcomplete -y sudo rosdep init rosdep update安装完成后打开一个新终端运行ros2 doctor检查安装是否成功。3.2 获取aiSim仿真环境aiSim通常由厂商提供特定的安装包或Docker镜像。这里我们以获取一个类似的、开源的、高保真仿真环境为例进行说明因为具体的aiSim安装可能涉及商业许可。一个优秀的替代方案是使用AWS DeepRacer 或 Carla Simulator的ROS2桥接但为了更贴近“小车导航”我们选择使用Nav2官方提供的TurtleBot3 Gazebo仿真作为基础并强调其与高级仿真平台如aiSim集成的通用接口原理。我们将安装TurtleBot3的仿真包它包含了机器人模型、Gazebo世界和与Nav2的集成。# 1. 安装Gazebo如果尚未安装 sudo apt install gazebo11 libgazebo11-dev -y # 2. 创建ROS2工作空间 mkdir -p ~/nav2_ws/src cd ~/nav2_ws/src # 3. 克隆TurtleBot3相关软件包 git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b humble-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git # 4. 克隆Navigation2主仓库及其依赖 git clone -b humble https://github.com/ros-planning/navigation2.git git clone -b ros2 https://github.com/ros-planning/navigation_msgs.git git clone -b humble https://github.com/ros/geometry2.git # 5. 安装依赖并编译 cd ~/nav2_ws rosdep install -i --from-path src --rosdistro humble -y colcon build --symlink-install关键点无论使用aiSim、Gazebo还是其他仿真器其与ROS2的接口本质上是通过ROS话题Topic和服务Service进行通信。只要仿真器能发布标准的传感器消息如sensor_msgs/msg/LaserScan并订阅标准的控制消息如geometry_msgs/msg/Twist它就能与Nav2无缝对接。后续的配置主要就是确保这些话题名称和坐标系TF正确关联。4. 项目实战让虚拟小车在仿真世界中自主导航现在我们进入核心实战环节。目标是在一个仿真办公室环境中让TurtleBot3小车先构建地图然后实现自主点对点导航。4.1 启动仿真世界与机器人首先我们启动一个包含TurtleBot3机器人的Gazebo仿真环境。# 1. 设置TurtleBot3型号我们使用带激光雷达的Burger模型 echo export TURTLEBOT3_MODELburger ~/.bashrc source ~/.bashrc # 2. 启动仿真环境在新终端中 source ~/nav2_ws/install/setup.bash ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py执行后Gazebo客户端会打开你会看到一个TurtleBot3 Burger小车在一个有障碍物的简单世界中。4.2 启动Navigation2并进行SLAM建图接下来我们启动Nav2的所有节点并开启SLAM模式来创建地图。# 在新终端中启动Nav2并加载SLAM配置 source ~/nav2_ws/install/setup.bash ros2 launch nav2_bringup tb3_simulation_launch.py slam:True这个命令做了很多事情启动了Nav2的生命周期管理器。加载了针对TurtleBot3仿真环境的参数配置nav2_params.yaml。启动了SLAM工具箱节点因为slam:True。启动了机器人状态发布器Robot State Publisher和TF转换。启动了RViz可视化工具。此时RViz会打开。你需要添加一些显示项点击Add - By topic添加/scan(LaserScan) 来查看激光雷达数据。添加/map(Map) 来查看正在构建的地图。添加TF来查看坐标系关系。4.3 手动控制小车建图现在你需要通过键盘遥控小车在仿真世界中移动让SLAM算法看到整个环境。# 在新终端中启动键盘遥控节点 source ~/nav2_ws/install/setup.bash ros2 run turtlebot3_teleop teleop_keyboard根据终端提示Use arrow keys to move the turtlebot.使用方向键控制小车缓慢、平稳地遍历整个地图区域。在RViz中你会看到灰色未知、黑色障碍、白色自由的地图被逐渐绘制出来。建图技巧尽量让小车走“之”字形确保激光雷达扫描到所有角落。避免过快移动防止SLAM丢失跟踪。尝试让小车回到起点附近形成闭环以优化地图精度。4.4 保存地图当地图构建完整后将其保存到磁盘。# 在新终端中使用map_saver节点保存地图 source ~/nav2_ws/install/setup.bash cd ~/nav2_ws ros2 run nav2_map_server map_saver_cli -f ./src/turtlebot3/turtlebot3_navigation2/map/map这会在指定目录下生成map.pgm地图图像和map.yaml地图元数据两个文件。4.5 切换至定位与导航模式关闭之前的SLAM启动命令按CtrlC。现在我们使用刚才保存的地图让小车知道自己在哪并执行导航任务。# 1. 首先确保仿真环境仍在运行。如果关闭了重新运行第4.1步。 # 2. 启动Nav2但这次使用保存的地图进行定位AMCL和导航。 source ~/nav2_ws/install/setup.bash ros2 launch nav2_bringup tb3_simulation_launch.py slam:False map:./src/turtlebot3/turtlebot3_navigation2/map/map.yaml这次启动Nav2会加载已有的地图并启动AMCL定位算法。在RViz中你会看到一堆绿色的小箭头粒子它们代表了AMCL对小车位置的估计。随着小车移动和传感器数据更新这些粒子会逐渐收敛到小车真实位置附近。4.6 发送导航目标在RViz中你可以通过点击2D Pose Estimate按钮然后在地图上点击并拖拽一个方向来告诉AMCL小车初始的大概位置如果你觉得定位不准。然后点击Nav2 Goal按钮在地图上任意一个白色可通行区域点击并拖拽一个方向作为目标位姿。见证奇迹的时刻小车会自动规划出一条全局路径绿色线并开始沿着路径移动同时进行局部避障红色箭头代表局部规划器计算的代价黄色线是局部规划的轨迹。最终它会精确地到达你指定的目标点。5. 核心配置文件解析理解Nav2如何工作仅仅跑通Demo是不够的。要真正掌握必须理解背后的配置。Nav2的行为由一系列YAML参数文件控制。我们来看最关键的两个。5.1 机器人模型URDF与仿真器配置turtlebot3_burger.urdf.xacro文件定义了机器人的物理属性、关节、连杆和传感器激光雷达的链接。仿真器Gazebo通过加载这个文件来生成虚拟机器人。关键部分是激光雷达的Gazebo插件配置它定义了如何将仿真数据发布为ROS话题。!-- 文件片段turtlebot3_burger.urdf.xacro -- !-- 激光雷达Gazebo插件配置 -- gazebo referencebase_scan sensor typeray namelds_lfcd_sensor pose0 0 0 0 0 0/pose visualizefalse/visualize update_rate5/update_rate ray scan horizontal samples360/samples !-- 360度扫描 -- resolution1/resolution min_angle0/min_angle max_angle6.28319/max_angle /horizontal /scan range min0.12/min !-- 最小探测距离 -- max3.5/max !-- 最大探测距离 -- resolution0.01/resolution /range /ray plugin namegazebo_ros_lds_lfcd_controller filenamelibgazebo_ros_ray_sensor.so ros namespace//namespace argument~/out:scan/argument !-- 发布的话题名 -- /ros output_typesensor_msgs/LaserScan/output_type !-- 消息类型 -- frame_namebase_scan/frame_name !-- 坐标系 -- /plugin /sensor /gazebo解读这个配置告诉Gazebo在base_scan这个连杆上附加一个激光雷达传感器以5Hz频率发布360度的扫描数据范围是0.12到3.5米最终以sensor_msgs/LaserScan消息类型发布到/scan话题上。这就是Nav2获取环境感知数据的源头。5.2 Nav2核心参数配置nav2_params.yaml文件是Nav2的大脑它配置了所有节点的行为。我们看几个关键部分。# 文件片段nav2_params.yaml amcl: ros__parameters: min_particles: 500 # 粒子滤波的最小粒子数 max_particles: 2000 # 最大粒子数 transform_tolerance: 0.2 # TF转换容忍时间秒 # 激光雷达模型参数影响定位精度 laser_model_type: likelihood_field laser_likelihood_max_dist: 2.0 bt_navigator: ros__parameters: # 行为树XML文件路径定义了导航状态机逻辑 bt_xml_filename: navigate_w_replanning_and_recovery.xml controller_server: ros__parameters: # 局部规划器配置负责生成速度指令 FollowPath: plugin: nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController desired_linear_vel: 0.15 # 期望线速度 max_linear_vel: 0.22 lookahead_dist: 0.6 # 前瞻距离 planner_server: ros__parameters: # 全局规划器配置负责计算全局路径 GridBased: plugin: nav2_navfn_planner/NavfnPlanner tolerance: 0.5 # 目标点容差 smoother_server: ros__parameters: # 路径平滑器配置 smoother_plugins: [simple_smoother] behavior_server: ros__parameters: # 恢复行为配置如旋转、后退 Spin: plugin: nav2_behaviors/Spin解读这个文件定义了从定位(AMCL)、规划(全局/局部)、控制到恢复行为的完整流水线。例如desired_linear_vel调大小车就跑得快lookahead_dist调小转弯就更灵活但也可能更震荡。理解这些参数是性能调优的基础。6. 从仿真到真机关键步骤与思维转变在仿真中跑通后如何迁移到真实的TurtleBot3或其他小车上这不仅仅是换一个启动文件那么简单需要思维和配置上的转变。6.1 硬件接口替换仿真中控制指令/cmd_vel由Gazebo插件接收并驱动虚拟模型。在真机上你需要一个机器人底座驱动节点来订阅/cmd_vel并将其转换为电机能理解的协议如PWM、CAN命令。# 伪代码示例一个简单的ROS2节点订阅/cmd_vel并控制电机 import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist # 假设有一个硬件控制库 import my_motor_driver_lib class RobotDriver(Node): def __init__(self): super().__init__(robot_driver) self.subscription self.create_subscription( Twist, cmd_vel, self.cmd_vel_callback, 10) self.motor_driver my_motor_driver_lib.MotorDriver() def cmd_vel_callback(self, msg): # 将Twist消息中的线速度和角速度转换为左右轮速 linear msg.linear.x angular msg.angular.z left_speed linear - angular * WHEEL_BASE / 2.0 right_speed linear angular * WHEEL_BASE / 2.0 # 调用硬件驱动 self.motor_driver.set_wheel_speed(left_speed, right_speed)6.2 传感器数据源替换仿真中的/scan来自Gazebo插件。真机上你需要一个激光雷达驱动节点从真实的激光雷达硬件如RPLIDAR、YDLIDAR读取数据并发布为标准格式的/scan话题。通常雷达厂商会提供ROS2驱动包。6.3 坐标系TF校准这是最容易出错的一步。在仿真中URDF文件明确定义了base_link车体中心、base_scan激光雷达中心等坐标系之间的静态变换。在真机上你必须通过测量或标定来确定这些变换关系并通过robot_state_publisher或static_transform_publisher正确发布这些TF关系。如果TF树错误定位和导航将完全失效。6.4 参数重调优仿真环境和真实世界存在差异传感器噪声真实激光雷达有噪声、遮挡和镜面反射问题。可能需要调整AMCL的laser_model_type和相关噪声参数。运动模型真实小车的电机响应、滑移与仿真模型不同。需要调整局部规划器如RegulatedPurePursuitController的控制参数如max_linear_acc最大线加速度和max_angular_acc最大角加速度。地图精度仿真地图完美真实地图可能有畸变。建图时需更仔细并可能需要对地图进行后期处理。最佳实践在真机上先单独测试驱动节点和传感器节点确保/cmd_vel能控制小车移动/scan能正常发布数据。然后再逐步集成定位和导航功能。7. 常见问题与排查思路在实践过程中你几乎一定会遇到下面这些问题。这里提供系统的排查思路。问题现象可能原因排查方式解决方案Gazebo启动后世界是空的或模型丢失模型路径未设置或Gazebo模型库未下载1. 检查终端警告信息。2. 运行echo $GAZEBO_MODEL_PATH。3. 运行gz model --list。1. 设置环境变量export GAZEBO_MODEL_PATH$HOME/.gazebo/models:/usr/share/gazebo-11/models。2. 手动下载模型wget -P ~/.gazebo/models/ http://models.gazebosim.org/...。RViz中看不到激光雷达扫描数据(/scan)话题未发布或TF变换缺失1.ros2 topic list查看是否有/scan。2.ros2 topic echo /scan查看数据。3.ros2 run tf2_tools view_frames生成TF树图。1. 检查仿真启动launch文件确认激光雷达插件已加载。2. 检查URDF中激光雷达的frame_name与TF树中名称是否一致。SLAM建图时地图不更新或全是灰色激光雷达数据坐标系错误或SLAM参数不当1. 在RViz中确认/scan数据是否在正确位置显示。2. 检查SLAM节点是否收到数据ros2 topic info /scan。3. 查看SLAM节点日志ros2 topic echo /slam_toolbox/feedback。1. 校正TF变换确保base_scan到odom或map的变换正确。2. 调整SLAM参数如map_update_interval。发送导航目标后小车不动或规划失败全局/局部规划器参数问题或代价地图配置错误1. 在RViz中查看全局/局部规划器是否输出了路径绿色线/黄色线。2. 检查/global_costmap和/local_costmap话题看障碍物是否被正确标记。3. 查看controller_server和planner_server节点的日志。1. 调整规划器参数如inflation_radius膨胀半径。2. 检查传感器话题是否正确配置在代价地图的observation_sources中。3. 确保目标点在自由空间白色区域。AMCL定位粒子发散小车位置漂移初始位姿估计不准或里程计误差大1. 使用RViz的2D Pose Estimate按钮给一个更准确的初始位姿。2. 检查/odom话题数据是否正常。3. 调整AMCL参数增加min_particles和max_particles。1. 在已知特征点如墙角附近初始化定位。2. 校准机器人里程计减小滑移误差。3. 考虑使用更先进的定位算法如robot_localization包融合IMU数据。仿真运行缓慢卡顿严重图形渲染负担重或物理引擎计算量大1. 使用top或htop查看CPU/内存占用。2. 尝试在Gazebo中关闭阴影、降低渲染质量。1. 使用headless模式运行Gazebo无GUI在launch文件中设置headless:True。2. 考虑使用性能更好的机器或简化仿真场景。8. 最佳实践与进阶方向掌握了基础流程后以下实践能让你的项目更加健壮和专业。8.1 工程化建议使用Launch文件组织系统不要手动开十几个终端。将仿真器、机器人状态发布、Nav2等所有节点整合到一个launch文件中实现一键启动。参数配置外部化将所有可调参数机器人尺寸、控制器增益、代价地图参数放在YAML配置文件中与代码分离便于管理和版本控制。善用RViz插件Nav2提供了专用的RViz插件可以方便地设置目标、查看规划路径和代价地图比手动添加Display更高效。日志与诊断合理使用ROS2的日志级别DEBUG, INFO, WARN, ERROR。对于关键数据可以录制bag包ros2 bag record用于事后分析和复现问题。8.2 性能与鲁棒性优化多传感器融合仅靠激光雷达在长廊、玻璃门等场景容易失效。集成IMU进行航迹推算或使用相机进行视觉辅助定位如rtabmap。动态障碍物处理标准Nav2代价地图主要处理静态障碍。对于动态障碍如行人需要配置obstacle_layer的observation_keep_time参数或使用social_nav2等扩展包。恢复行为定制默认的恢复行为旋转、后退可能不够。可以根据业务逻辑定制新的恢复行为并集成到Nav2的行为树中。8.3 迈向aiSim等高级仿真当你需要更逼真的传感器模型、更复杂的场景如雨天、夜间或进行大规模的算法测试时就需要转向如aiSim这样的专业平台。迁移工作的核心是接口适配确保aiSim发布的传感器话题名称、消息类型与你的ROS2导航栈预期一致。这通常通过编写或配置一个“桥接”节点来实现。坐标系统一确保aiSim中的机器人模型、传感器坐标系与你的URDF定义完全对齐。时间同步确保仿真时间与ROS2系统时间同步避免因时间戳问题导致的数据处理异常。利用其独特优势使用aiSim的场景编辑功能创建针对性测试用例利用其传感器模型验证你的感知算法在噪声下的表现利用其云仿真能力进行大规模回归测试。从Gazebo到aiSim仿真的保真度和效率在提升但基于ROS2的导航算法栈的核心逻辑是不变的。掌握了本文所述的“仿真-算法”闭环构建方法你就拥有了对接任何仿真平台的能力。本文从开发者的真实痛点出发详细拆解了如何利用ROS2 Navigation2和仿真环境构建一个完整的自主导航系统。我们不仅完成了在Gazebo中从建图到导航的全流程实操更深入分析了配置文件的含义、仿真与真机差异的根源并提供了系统的问题排查指南和进阶建议。这套方法论的價值在于其通用性——无论你最终使用的是TurtleBot3、DIY小车还是接入aiSim这样的高保真仿真平台核心的ROS2节点通信、坐标变换、参数配置和系统集成思想都是相通的。建议你将本文作为手边参考在遇到具体问题时按照“数据流-坐标系-参数”的路径进行排查。下一步你可以尝试更换不同的全局/局部规划器算法集成视觉SLAM或者挑战更复杂的动态环境从而深化对机器人自主导航的理解与实践能力。
返回列表