UGV Rover PI ROS2 7. 导航与 SLAM 建图
| ||||||||||||||||||||||
|
7. 导航与 SLAM 建图
本教程介绍了如何将 Nav2 与 SLAM 结合使用。以下步骤向您展示了如何生成占用栅格地图并使用 Nav2 移动机器人。默认您已根据第一章 UGV Rover PI ROS2 1. 准备工作里的内容已结束主程序且远程连接上 Docker 容器。
在 Docker 容器中,启动机器人的 RViz 界面和导航:
ros2 luanch ugv_nav slam_nav.launch.py use_rviz:=true
7.1 手动探索
在 RViz 界面中可以手动发布导航点进行探索。使用 Nav2 Goal 工具向机器人发送目标位置和目标方向。在 RViz 界面中指出机器人想要探索的位置(目标点),绿色箭头的方向是机器人云台向前所面对的方向。
同时,也可以使用键盘、手柄进行遥控探索,在一个新的 Docker 容器终端中,运行手柄控制或键盘控制节点任意一个,具体可参考 UGV Rover PI ROS2 3. 使用手柄或键盘控制章节的内容:
#手柄控制(确保手柄接收器插入树莓派中) ros2 launch ugv_tools teleop_twist_joy.launch.py #键盘控制(保持运行键盘控制节点处于激活状态) ros2 run ugv_tools keyboard_ctrl
或者,通过 Web 端控制控制机器人移动进行探索,具体可参考 UGV Rover PI ROS2 9. Web 端控制工具章节的内容。
这样,你就能控制底盘移动,来实现对周边环境的探索了,随着你对底盘的移动控制,在 RViz 界面中会逐渐显示机器人所移动过的地图。
7.2 自动探索
除了手动探索之外,还可以直接让机器人自动探索地图。注意:自动探索需要在封闭规则区域内才能进行。一般建议在封闭的小房间内进行自动探索,或者通过在 Gazebo 仿真地图中进行自动探索,具体可参考 UGV Rover PI ROS2 11. Gazebo 仿真调试中的内容。
保持机器人 RViz 界面和导航指令的运行,再在一个新的 Docker 容器中,运行自动探索的指令:
ros2 launch explore_lite explore.launch.py
运行后,机器人会在该封闭规则区域内进行移动探索,同时,所探索的区域也会显示在 RViz 界面上。
7.3 保存地图
导航探索完,可以在一个新的 Docker 容器终端进行地图保存。打开一个新的 Docker 容器终端,点击左边侧栏中的“⭐”符号,双击打开 Docker 的远程终端,输入用户名:root,密码:ws。
在容器中,进入该产品 ROS 2 项目的工作空间:
cd /home/ws/ugv_ws
给地图保存脚本增加可执行权限:
chmod +x ./save_2d_gmapping_map.sh
接着运行地图保存脚本,如下图即地图保存成功:
./save_2d_gmapping_map.sh
该脚本里的具体内容为:
cd /home/ws/ugv_ws/src/ugv_main/ugv_nav/maps ros2 run nav2_map_server map_saver_cli -f ./map
执行完上述脚本文件后,会保存一个命名为 map 的 2D 栅格地图,该地图是保存于 /home/ws/ugv_ws/src/ugv_main/ugv_nav/maps 目录下,可以在上述目录里看见有两个文件生成,一个是 map.pgm,一个是 map.yaml。
- map.pgm:这是地图的栅格图(通常是灰度图像文件);
- map.yaml:这是地图的配置文件。