尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ROS2 Lyrical实验5导航Nav2

发布时间:2026/9/28 18:21:01

资讯中心
01
ARTICLE

ROS2 Lyrical实验5导航Nav2

ROS2 Lyrical实验5导航Nav2
初段实验5 移动导航实验纯官方示例零手写代码只敲终端命令环境ROS2 LyricalNav2TurtleBot3GazeboRViz2✅ 核心规则不编写任何C/Python源码、不新建功能包、不修改launch文件全部使用 nav2_bringup 自带官方示例tb3_simulation_launch.py仅在终端输入命令RViz可视化交互。实验分为两大阶段阶段1 SLAM建图保存地图阶段2 加载地图AMCL定位自主导航动态避障一、实验目的掌握Nav2官方TurtleBot3仿真一键启动命令理解slam:True/slam:False参数作用。学会SLAM-Toolbox实时建图使用自带map_saver_cli保存栅格地图。理解AMCL粒子滤波定位原理掌握RViz中2D Pose Estimate初始化机器人位姿。使用RViz2D Nav Goal下发导航目标观察全局/局部路径规划、代价地图、动态避障。理解Nav2导航系统数据流、TF树、激光/里程计对导航的作用。使用ROS2自带命令行Action工具下发导航目标不用自己写C代码。二、实验原理官方示例tb3_simulation_launch.py内部自动完成启动Gazebo仿真环境 TurtleBot3 Waffle机器人模型发布机器人TF坐标树map → odom → base_link → base_scan启动激光雷达、里程计发布/scan、/odom话题可选择开启SLAM-Toolbox实时建图或者加载静态地图AMCL定位Nav2导航栈Nav2组件map_server、AMCL定位、全局规划器、DWB局部规划器、bt_navigator行为树导航服务器。导航四大必备条件官方示例已经全部配置好完整TF树、激光/scan、里程计/odom、底盘接收/cmd_vel速度指令。三、前置准备只需要安装官方包不写代码打开终端执行安装sudoaptupdatesudoaptinstallros-lyrical-turtlebot3* ros-lyrical-nav2-bringup ros-lyrical-slam-toolbox配置TurtleBot3模型环境变量echoexport TURTLEBOT3_MODELwaffle~/.bashrcsource~/.bashrc四、实验步骤全程只输入终端命令无任何代码编写阶段1SLAM建图构建并保存地图slam:True作用机器人在未知环境中依靠激光里程计实时构建栅格地图。终端1启动官方仿真SLAM建图ros2 launch nav2_bringup tb3_simulation_launch.py headless:False slam:True参数说明headless:False弹出Gazebo图形窗口slam:True启动SLAM-Toolbox实时建图不加载静态地图启动成功自动打开Gazebo仿真窗口 RViz2预配置Nav2视图终端2启动键盘遥控控制小车扫图新开终端启动官方teleop键盘遥控包系统自带无需编写ros2 run teleop_twist_keyboard teleop_twist_keyboard操作i前进,后退j左转l右转k停止缓慢移动小车遍历整个仿真房间RViz里观察地图逐步构建灰色未知区域黑色障碍物白色可通行区域⚠️ 小车不能开太快否则地图畸变。终端3保存建好的地图官方map_saver_cli工具环境全部扫描完成新开终端执行地图保存到家目录ros2 run nav2_map_server map_saver_cli-f~/tb3_map生成两个文件~/tb3_map.pgm栅格图像、~/tb3_map.yaml地图配置文件可选检查命令验证TF树无代码ros2 run rqt_tf_tree rqt_tf_tree观察TF链map → odom → base_link → base_scan建图完成关闭所有终端窗口。阶段2加载静态地图Nav2自主导航slam:False使用上一步保存好的地图AMCL做全局定位Nav2实现自主导航。终端1启动仿真导航加载刚才保存的地图ros2 launch nav2_bringup tb3_simulation_launch.py headless:False slam:False map:/home/$USER/tb3_map.yamlslam:False关闭实时SLAM启用map_server加载静态地图启动AMCL定位。map:xxx.yaml指定地图文件路径自动打开Gazebo RViz2。此时AMCL粒子云分散机器人不知道自身位置。步骤2RViz初始化定位2D Pose Estimate快捷键PRViz工具栏点击2D Pose Estimate在地图上Gazebo小车对应的真实位置鼠标拖拽箭头箭头方向代表小车朝向现象红色AMCL粒子云快速收敛聚集到机器人位置定位成功。如果粒子一直散开初始位姿点选位置错误。步骤3RViz交互下发导航目标2D Nav Goal快捷键GRViz工具栏点击2D Nav Goal在地图上点击目标位置拖拽箭头设置目标朝向观察现象绿色线条全局规划路径Global Plan蓝色线条局部规划轨迹Local Plan彩色区域代价地图障碍物安全膨胀区域TurtleBot3自动沿路径行驶到达目标停止。多次设置不同目标点测试定点导航。步骤4动态障碍物避障测试在Gazebo窗口使用Gazebo自带菜单Insert → Cube在小车规划路径中间插入立方体障碍物。观察RViz代价地图立刻识别新增障碍物Nav2重新规划路径小车自动绕行避开障碍物删除立方体路径恢复。步骤5ROS2命令行直接下发导航目标不写任何C代码使用ros2 action call 命令行工具调用NavigateToPose Action直接下发导航目标替代手写Action客户端。新开终端修改x,y坐标为你仿真环境合适目标点直接执行ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose{pose: {header: {frame_id: map}, pose: {position: {x: 2.0, y:0.5, z:0.0}, orientation: {x:0.0,y:0.0,z:0.0,w:1.0}}}}执行效果无需鼠标在RViz点目标机器人自动驶向目标点终端直接输出导航成功/失败结果。这一步完全满足“程序下发导航目标”的实验要求零代码。五、可选观测工具全部官方自带无代码查看节点图ros2 run rqt_graph rqt_graph查看话题数据ros2 topicecho/cmd_vel ros2 topicecho/scan动态参数调优ros2 run rqt_reconfigure rqt_reconfigure六、实验现象记录报告直接复制TF树截图map → odom → base_link → base_scan完整坐标变换链。SLAM建图RViz截图完整栅格地图。AMCL定位截图粒子云从分散→收敛。RViz导航截图绿色全局路径、蓝色局部路径、代价地图。动态障碍物对比截图放置障碍物前后导航路径。ros2 action send_goal 终端输出日志导航到达/失败。七、思考题启动命令中slam:True和slam:False的区别两个模式分别启动哪些核心节点不执行2D Pose Estimate直接下发导航目标会出现什么现象原因是什么全局代价地图、局部代价地图的作用分别是什么rolling_window属于哪个代价地图在Gazebo添加动态障碍物为什么SLAM建图阶段不会记录这个障碍物导航阶段却可以避障如果/odom里程计话题丢失导航系统会出现什么问题八、实验小结报告用本实验全程使用Nav2官方TurtleBot3仿真示例无需编写任何代码仅通过终端命令和RViz交互完成移动导航实验。使用slam:True模式启动SLAM-Toolbox键盘遥控遍历环境完成栅格地图构建使用map_saver_cli保存地图。使用slam:False加载静态地图AMCL粒子滤波实现机器人定位需要通过2D Pose Estimate提供初始位姿。通过RViz的2D Nav Goal实现人机交互导航在Gazebo中添加动态障碍物Nav2依靠局部代价地图实时感知障碍物重新规划路径实现避障。使用ros2 action send_goal命令行工具直接调用NavigateToPose动作服务自动下发导航目标验证Nav2 Action接口。验证Nav2导航依赖完整TF树、激光雷达、里程计、底盘速度指令定位效果直接决定导航能否正常工作。九、常见故障排查Gazebo小车不动检查TURTLEBOT3_MODELwaffle环境变量是否生效。AMCL粒子一直发散2D Pose Estimate初始位姿点选错误地图yaml文件路径错误。无法规划路径目标点落在障碍物或者代价地图膨胀区域内。action命令报错确认tb3_simulation_launch.py完全启动bt_navigator正常运行。建图地图重影小车移动速度过快降低键盘遥控的移动速度。中段实验5 移动导航实验基于官方TB3仿真ros2 launch nav2_bringup tb3_simulation_launch.py headless:False环境ROS2LyricalTurtleBot3Nav2‑BringupGazeboRViz2直接使用Nav2官方示例不需要自己写URDF、Gazebo插件、Nav2底层启动逻辑实验简洁聚焦SLAM建图、地图保存、定位、自主导航、避障、代码调用导航目标。一、实验目的理解Nav2导航系统组成掌握TurtleBot3仿真环境启动。掌握使用Nav2的SLAM工具完成环境建图、保存地图。理解AMCL粒子滤波定位原理学会初始化机器人2D位姿。掌握RViz2下发导航目标实现机器人定点自主导航、动态避障。理解全局规划器、局部DWB规划器、全局/局部代价地图作用。编写C Action客户端程序自动下发导航目标点实现自动导航。分析常见故障理解TF、激光、里程计对导航的影响。二、实验原理TurtleBot3仿真官方已经封装好差速底盘、激光雷达、里程计、TF树。SLAM利用激光雷达里程计构建2D栅格地图map_saver_cli保存地图。Nav2架构map_server加载静态栅格地图amcl蒙特卡洛粒子滤波定位修正里程计漂移global_planner全局路径规划规划从起点到目标的全局路径dwb_controller局部规划器做速度输出、避障、跟踪全局路径bt_navigator行为树管理导航流程接收NavigateToPoseAction目标导航必备条件完整TF树map → odom → base_link → base_scan激光话题/scan里程计话题/odom底盘接收速度指令/cmd_vel本实验直接复用官方tb3_simulation_launch.py自动启动Gazebo、TurtleBot3模型、RViz2、Nav2全部节点。三、实验环境Ubuntu ROS2依赖包安装如未安装先执行sudo apt update sudo apt install ros-${ROS_DISTRO}-turtlebot3* ros-${ROS_DISTRO}-nav2-bringup ros-${ROS_DISTRO}-slam-toolbox环境变量必须设置TURTLEBOT3_MODEL一般是waffleecho export TURTLEBOT3_MODELwaffle ~/.bashrc source ~/.bashrc四、实验内容与步骤实验分为两大模块模块1SLAM建图构建环境地图并保存模块2加载已有地图 AMCL定位 Nav2自主导航 避障 代码控制导航模块1SLAM建图实验tb3_simulation_launch.py可以同时启动Gazebo仿真 SLAM模式。步骤1启动TB3仿真SLAM建图终端1export TURTLEBOT3_MODELwaffle ros2 launch nav2_bringup tb3_simulation_launch.py headless:False slam:True参数说明headless:False弹出Gazebo图形窗口slam:True启动SLAM‑Toolbox进行实时建图而不是加载静态地图导航启动成功后会同时打开Gazebo仿真室内环境TurtleBot3小车RViz2预配置好Nav2界面可以看到激光、TF、正在构建的地图。步骤2键盘遥控小车遍历环境新开终端2启动键盘遥控ros2 run teleop_twist_keyboard teleop_twist_keyboard使用键盘 i j k l , 控制小车缓慢移动旋转慢速遍历整个房间把全部墙壁、障碍物扫描到地图中RViz中观察Map话题灰色未知黑色障碍物白色可通行区域。注意不要高速移动高速会导致地图畸变、重影。步骤3保存建好的地图当整个环境扫描完成新开终端3执行保存地图ros2 run nav2_map_server map_saver_cli -f ~/my_tb3_map会在用户家目录生成两个文件my_tb3_map.pgm地图图像my_tb3_map.yaml地图配置文件分辨率、原点、阈值建图完成关闭所有终端准备导航实验。可选检查工具ros2 run rqt_tf_tree rqt_tf_tree观察TF变换链map → odom → base_link → base_scan是否完整。模块2加载地图Nav2自主导航实验使用刚才保存的my_tb3_map.yaml启动仿真导航不再做SLAM。步骤1启动TB3仿真导航slam:False加载静态地图终端1设置地图路径启动官方仿真launchexport TURTLEBOT3_MODELwaffle ros2 launch nav2_bringup tb3_simulation_launch.py headless:False slam:False map:/home/$USER/my_tb3_map.yamlslam:False关闭SLAM启用map_server加载静态地图启动AMCL定位。启动后打开Gazebo与RViz2。此时Gazebo中小车位置是仿真初始位置RViz地图已经加载但是AMCL粒子云是散开的机器人不知道自己在哪。步骤22D Pose Estimate初始化定位在RViz工具栏点击2D Pose Estimate快捷键P在地图上Gazebo小车对应的真实位置点击拖拽箭头箭头方向为小车朝向。现象大量红色AMCL粒子云几秒后粒子收敛聚集到小车真实位置定位完成。如果粒子一直散开初始位姿点错激光话题异常地图与实际环境不匹配。步骤3RViz下发导航目标点2D Nav Goal交互导航RViz工具栏点击2D Nav Goal快捷键G在地图上选择目标位置拖拽箭头设置目标朝向。观察现象绿色线条全局规划路径Global Plan从起点到目标的全局路径蓝色线条局部规划轨迹Local PlanDWB局部规划输出彩色色块代价地图障碍物、膨胀安全区域TurtleBot3小车自动运动沿着路径向目标行驶到达目标停止。多次设置不同目标点测试定点导航。步骤4动态障碍物避障测试在Gazebo界面插入Cube立方体障碍物放到小车规划路径中间观察RViz代价地图立刻识别出新障碍物Nav2重新规划路径小车绕行避开障碍物将障碍物移走路径恢复。记录有障碍物和移除障碍物的导航行为对比。步骤5编写C Action客户端程序自动下发导航目标使用Nav2标准nav2_msgs/action/NavigateToPose不用鼠标代码自动发送导航目标。5‑1 创建功能包cd ~/ros2_ws/src ros2 pkg create --build-type ament_cmake nav2_send_goal --dependencies rclcpp nav2_msgs rclcpp_action geometry_msgs cd nav2_send_goal mkdir src5‑2 src/send_nav_goal.cpp#include rclcpp/rclcpp.hpp #include rclcpp_action/rclcpp_action.hpp #include nav2_msgs/action/navigate_to_pose.hpp #include geometry_msgs/msg/pose_stamped.hpp using NavigateToPose nav2_msgs::action::NavigateToPose; using GoalHandle rclcpp_action::ClientGoalHandleNavigateToPose; class NavGoalClient : public rclcpp::Node { public: NavGoalClient() : Node(send_nav_goal) { client_ rclcpp_action::create_clientNavigateToPose(this, navigate_to_pose); } void send_goal(double x, double y, double yaw) { if (!client_-wait_for_action_server(std::chrono::seconds(5))) { RCLCPP_ERROR(get_logger(), Action Server未上线); return; } auto goal_msg NavigateToPose::Goal(); goal_msg.pose.header.frame_id map; goal_msg.pose.header.stamp this-get_clock()-now(); goal_msg.pose.pose.position.x x; goal_msg.pose.pose.position.y y; // 简单设置朝向 goal_msg.pose.pose.orientation.w 1.0; auto send_goal_options rclcpp_action::ClientNavigateToPose::SendGoalOptions(); send_goal_options.result_callback [this](const GoalHandle::WrappedResult result) { if(result.code rclcpp_action::ResultCode::SUCCEEDED) { RCLCPP_INFO(this-get_logger(), 导航目标到达); }else{ RCLCPP_ERROR(this-get_logger(), 导航失败); } rclcpp::shutdown(); }; client_-async_send_goal(goal_msg, send_goal_options); } private: rclcpp_action::ClientNavigateToPose::SharedPtr client_; }; int main(int argc, char** argv) { rclcpp::init(argc, argv); auto node std::make_sharedNavGoalClient(); // 修改为你的仿真环境中合适的目标点坐标 node-send_goal(2.0, 0.5, 0.0); rclcpp::spin(node); rclcpp::shutdown(); return 0; }5‑3 修改CMakeLists.txtfind_package(rclcpp REQUIRED) find_package(nav2_msgs REQUIRED) find_package(rclcpp_action REQUIRED) find_package(geometry_msgs REQUIRED) add_executable(send_goal src/send_nav_goal.cpp) ament_target_dependencies(send_goal rclcpp nav2_msgs rclcpp_action geometry_msgs) install(TARGETS send_goal DESTINATION lib/${PROJECT_NAME} )5‑4 package.xml添加依赖dependrclcpp/depend dependnav2_msgs/depend dependrclcpp_action/depend dependgeometry_msgs/depend5‑5 编译运行cd ~/ros2_ws colcon build --packages-select nav2_send_goal source install/setup.bash前提已经启动tb3_simulation_launch.py并且已经做2D Pose Estimate初始化定位成功新开终端执行客户端ros2 run nav2_send_goal send_goal现象不需要鼠标机器人自动驶向代码中设置的(x,y)目标点终端打印到达/失败信息。五、实验现象记录实验报告可直接复制TF树截图map → odom → base_link → base_scan完整变换链。SLAM建图RViz截图建图完成的栅格地图。AMCL定位截图初始化后粒子云从分散收敛。RViz导航截图绿色全局路径、蓝色局部路径、代价地图。动态障碍物放置障碍物前后路径对比截图。Action客户端终端输出导航到达或失败日志。六、思考题tb3_simulation_launch.py中参数slam:True与slam:False有什么区别如果不做2D Pose Estimate初始化定位直接下发2D Nav Goal会发生什么全局代价地图与局部代价地图分别作用rolling_window参数在哪种代价地图开启AMCL粒子数目调大对定位效果和CPU负载有什么影响动态障碍物为什么SLAM建图时不会出现但是导航时可以识别并避障如果话题/odom丢失导航系统会出现什么现象七、实验小结报告用使用Nav2官方tb3_simulation_launch.py快速启动TurtleBot3仿真slam:True完成SLAM‑Toolbox建图通过map_saver_cli保存栅格地图。设置slam:False加载静态地图AMCL粒子滤波实现机器人定位需要2D Pose Estimate提供初始位姿。通过RViz的2D Nav Goal实现人机交互导航在路径上增加动态障碍物Nav2可以实时感知障碍物并重新规划路径实现避障。编写Action客户端调用NavigateToPose接口程序自动下发导航目标理解Nav2行为树Action接口。导航依赖完整TF树、激光、里程计、底盘速度指令定位质量直接决定导航能否正常运行。代价地图膨胀参数、规划器速度参数影响避障与运动性能。常见故障排查Gazebo小车不动检查/cmd_vel话题是否有速度输出确认TURTLEBOT3_MODEL环境变量。AMCL粒子始终发散2D Pose Estimate点的位置不对地图yaml与实际环境不一致/scan激光数据异常。导航规划不出路径机器人被代价地图膨胀层包围目标点落在障碍物或未知区域。Action客户端提示Action Server未上线确认tb3_simulation_launch.py完整启动bt_navigator正常运行。建图地图重影小车运动速度太快降低键盘遥控速度。高段实验5 移动导航实验ROS2‑Lyrical Nav2参考资料ROS2 Lyrical第5章导航前置、第6章Nav2自主导航环境Ubuntu26.04 ROS2‑Lyrical Gazebo Garden差速四轮小车仿真平台一、实验目的理解Nav2导航四大前置条件差速底盘、完整TF2坐标树、2D激光雷达、标准里程计Odometry掌握导航数据流传感器→定位→规划→控制→底盘执行完整链路。掌握TF2广播、监听理解标准坐标链map → odom → base_footprint → laser_link。掌握gmapping完成SLAM栅格建图、地图保存(map_saver)与加载(map_server)。掌握Nav2配置代价地图全局/局部、AMCL粒子滤波定位、DWB局部规划器参数配置。掌握RViz2导航工具2D Pose Estimate初始化定位、2D Nav Goal下发导航目标实现定点自主导航、动态避障。编写Action客户端C代码实现程序自动下发导航目标点。二、实验原理TF2坐标变换维护机器人各连杆、传感器坐标系之间平移旋转关系导航中激光雷达数据需要通过TF转换到底盘、地图坐标系下参与代价地图计算URDF/Xacrorobot_state_publisher自动广播连杆TF变换。传感器数据LaserScan2D激光雷达输出测距数据话题/scan为SLAM、代价地图提供障碍物观测。Odometry里程计输出机器人相对odom坐标系位姿、线角速度Gazebo差速驱动插件积分生成里程实体机器人通过编码器速度积分得到里程。/cmd_velTwist消息Nav2规划器输出速度指令控制差速底盘运动。gmapping‑SLAM粒子滤波SLAM输入激光里程计TF输出占用栅格地图/map地图保存生成.pgm图像和.yaml配置文件。Nav2导航栈map_server加载静态栅格地图发布/map话题。AMCL2自适应蒙特卡洛粒子滤波基于已知地图激光里程实现全局定位输出机器人在map坐标系位姿。全局代价地图global_costmap基于静态地图做长距离全局路径规划。局部代价地图local_costmap滑动窗口跟随机器人实时处理动态障碍物。DWB局部规划器接收全局路径结合运动约束输出/cmd_vel速度指令替代ROS1 DWA规划器。Nav2强制4个前提缺一不可①差速底盘接收Twist/cmd_vel②完整TF2坐标树③2D激光LaserScan④Odometry里程计话题输出。三、实验设备/环境软件Ubuntu26.04ROS2‑LyricalGazebo GardenRViz2colcon编译工具仿真模型四轮差速小车Xacro模型搭载2D激光雷达Gazebo室内仿真世界willowgarage_world四、实验内容与步骤分为两大部分PartA SLAM建图第5章PartB Nav2自主导航第6章PartA SLAM建图导航前置步骤1编译功能包启动建图仿真工作空间~/ros2_ws/src放置chapter5_tutorials源码编译cd~/ros2_ws colcon build --packages-select chapter5_tutorialssourceinstall/setup.bash启动Gazebo仿真、机器人、gmapping建图、RViz2ros2 launch chapter5_tutorials gazebo_mapping.launch.py model:$(ament_index_get_resource robot1_description urdf/robot1_base_04.xacro)键盘遥控包安装新开终端启动键盘遥控控制小车遍历全部室内环境sudoaptinstallros‑lyrical‑teleop‑twist‑keyboard ros2 run teleop_twist_keyboard teleop_twist_keyboard操作键盘上下左右控制小车缓慢遍历整个房间RViz2中OccupancyGrid实时观察生成栅格地图白色可通行黑色障碍物灰色未知区域。步骤2保存建好的地图遍历完成环境全部扫描完毕执行map_saver保存地图ros2 run map_server map_saver-fmy_map生成两个文件my_map.pgm栅格灰度地图图像my_map.yaml分辨率、原点、阈值配置文件后续map_server加载使用。检查rqt_tf_tree查看TF树是否完整map → odom → base_footprint → laser_linkros2 run rqt_tf_tree rqt_tf_treePartB Nav2自主导航实验步骤1创建Nav2功能包chapter6_tutorialscd~/ros2_ws/src ros2 pkg create --build‑type ament_cmake chapter6_tutorials\rclcpp nav2_bringup nav2_amcl nav2_costmap_2d nav2_planner nav2_dwb_controller\tf2_ros gazebo_ros xacro map_server rviz2 rqt_reconfigure目录结构chapter6_tutorials/ ├── launch/ # Python launch、yaml参数 ├── maps/ # 将PartA生成my_map.pgm、my_map.yaml复制到此目录 ├── src/ # send_goal.cpp Action客户端代码 ├── CMakeLists.txt └── package.xml复制4套yaml参数文件costmap_common_params.yaml代价地图公共参数设置机器人footprint轮廓障碍物膨胀半径inflation_radiusglobal_costmap_params.yaml全局代价地图参数static_map:true加载静态地图local_costmap_params.yaml局部代价地图开启rolling_window:true滑动窗口dwb_local_planner_params.yamlDWB规划器速度加速度约束差速小车holonomic_robot: falseamcl_params.yamlAMCL粒子滤波参数设置最小最大粒子数、激光观测模型。步骤2编写一体化启动文件 nav2_full.launch.py功能一键启动Gazebo仿真、机器人模型、map_server加载地图、AMCL定位、Nav2 bringup、RViz2导航预设界面。编译功能包cd~/ros2_ws colcon build --packages-select chapter6_tutorialssourceinstall/setup.bash完整启动命令ros2 launch chapter6_tutorials nav2_full.launch.py步骤3 RViz2交互导航操作2D Pose Estimate快捷键P初始化定位点击工具栏2D Pose Estimate在地图上小车真实位置拖拽箭头指定机器人初始位姿。AMCL粒子云从分散逐渐聚拢代表定位收敛。现象红色粒子云收敛到机器人真实位置定位成功。下发导航目标点2D Nav Goal快捷键G点击2D Nav Goal在地图上选择目标位置拖拽确定朝向Nav2生成绿色全局路径Global Plan、蓝色局部Local Plan小车自动行驶前往目标同时局部代价地图实时显示障碍物和膨胀安全区。动态障碍物避障测试Gazebo界面插入立方体障碍物放到规划路径中间观察RViz局部代价地图更新障碍物Nav2重新规划路径小车自动绕行避开障碍。动态参数调优ros2 run rqt_reconfigure rqt_reconfigure在线修改DWB最大速度、AMCL粒子数量、障碍物膨胀半径不需要重启节点观察导航行为变化。步骤4C Action客户端自动下发导航目标编译send_goal.cpp调用NavigateToPose Action接口程序自动给定点导航。ros2 run chapter6_tutorials send_goal现象无需鼠标操作机器人自动驶向代码指定的(x,y,yaw)目标点。五、实验现象记录TF树检查rqt_tf_tree截图记录完整坐标链map‑odom‑base_footprint‑laser_link。SLAM建图RViz OccupancyGrid截图记录建好的室内栅格地图。AMCL定位粒子云分散→收敛截图。RViz导航截图全局绿色路径、局部蓝色轨迹、局部代价地图彩色障碍物膨胀区域。动态障碍物放置障碍物前后路径对比截图观察绕行效果。Action客户端运行终端输出记录导航到达/失败状态。六、思考题1 Nav2导航必须的4个前置条件是什么如果缺少/odom里程计话题会出现什么现象2 TF坐标变换链map→odom→base_footprint→laser_link每个变换分别由哪个节点发布3 全局代价地图与局部代价地图的区别rolling_window参数作用是什么4 AMCL粒子数量min_particles/max_particles调大定位和CPU占用会如何变化5 DWB规划器中holonomic_robot: false含义麦克纳姆轮全向机器人该如何设置6 里程计存在漂移误差AMCL如何利用激光与地图匹配修正里程计漂移七、实验报告参考小结本实验完成仿真差速小车环境gmapping‑SLAM建图得到室内栅格地图掌握map_saver/map_server地图存取。验证TF2坐标变换树确认Nav2四大前置条件全部满足。基于Nav2实现AMCL粒子滤波定位DWB局部规划器完成定点导航实现动态障碍物避障。通过RViz2交互Action客户端两种方式下发导航目标理解map_server‑AMCL‑costmap‑planner‑controller‑/cmd_vel‑底盘完整数据流。代价地图footprint轮廓、inflation_radius膨胀半径直接影响机器人碰撞安全性AMCL粒子数量平衡定位精度与计算资源DWB参数约束机器人速度、加速度防止运动失控。常见故障排查1 RViz2红色报错TF变换超时检查TF树确认完整map‑odom‑base_footprint‑laser_link链条。2 AMCL粒子云不收敛2D Pose Estimate初始位姿偏差过大检查激光话题/scan是否正常AMCL参数激光观测模型配置。3 机器人原地不动不导航检查/cmd_vel是否有速度输出DWB最大速度是否设置为0footprint轮廓大于可行通道导致无可行路径。4 建图地图扭曲小车运动过快激光扫描跟不上降低键盘遥控移动速度。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。