UGV Rover PI ROS2 7. 导航与 SLAM 建图

来自Waveshare Wiki
跳转至: 导航搜索
UGV Rover
{{{name2}}}
{{{name3}}}
功能简介
特性 UGV Rover ROS2 小车
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 I2C UART

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 界面中指出机器人想要探索的位置(目标点),绿色箭头的方向是机器人云台向前所面对的方向。

ROS2 slam.png

同时,也可以使用键盘、手柄进行遥控探索,在一个新的 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

ROS2 savegmapping.png

该脚本里的具体内容为:

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:这是地图的配置文件。