跳转到内容

建图示例

本示例使用高翔博士团队在 Github 上发布的 SLAM Mapping(faster-lio)方案。主要操作流程和数据流图如下:

faster-lio 数据流(ROS1)

建图包位于 ~/lite_cog/slam/src 路径下,包含三个包:faster-lio、pcd_2_gridmap 和 map_server。faster-lio 包负责构建 3D 点云地图(.pcd),pcd_2_gridmap 包负责将 3D 点云地图(.pcd)转换为栅格地图(.pgm)并发布,map_server 包负责保存栅格地图(.pgm)。

注意: 建图前请检查 /home/ysc/lite_cog/system/map 文件夹中是否有之前创建的地图。如果有,请将其移动到其他文件夹以避免覆盖。

注意: 建图需要较多计算资源,请先关闭 App 上的所有 AI 选项。

  1. 打开终端,输入以下命令启动雷达驱动(三选一):
Terminal window
cd /home/ysc/lite_cog/system/scripts/lidar
./start_lslidar.sh # 镭神雷达
./start_livox.sh # Livox 雷达
./start_rslidar.sh # 速腾雷达

如果雷达驱动节点启动失败,使用以下命令检查雷达是否已连接到感知主机:

Terminal window
ping 192.168.1.201

LiDAR 驱动启动终端

注意: 建图期间此终端应保持运行。

  1. 启动建图程序:

a) 启动建图程序的脚本 start_slam.sh 位于 /home/ysc/lite_cog/system/scripts/slam 路径下,内容如下:

#!/bin/sh
# 打开建图程序
gnome-terminal -x bash -c "source /home/ysc/lite_cog/slam/devel/setup.bash; roslaunch faster_lio mapping_c16.launch; read -p 'Press any key to exit...'"
# 打开用于生成栅格地图的终端
gnome-terminal -x bash -c "bash /home/ysc/lite_cog/system/scripts/slam/gridmap.sh; read -p 'Press any key to exit...'"
# 打开用于保存栅格地图的终端
gnome-terminal -x bash -c "bash /home/ysc/lite_cog/system/scripts/slam/save_map.sh; read -p 'Press any key to exit...'"

b) 使用 NoMachine 登录感知主机桌面并远程控制机器人起立后,打开终端输入以下命令启动建图程序:

Terminal window
cd /home/ysc/lite_cog/system/scripts/slam
./start_slam.sh

c) 执行上述命令后,将启动 RViz 可视化工具,并在运行 start_slam.sh 的终端中生成三个标签页,分别运行 faster-lio、生成栅格地图和保存栅格地图。

RViz 与建图终端界面

  1. 操作机器人,引导其在指定区域周围移动以构建地图。转弯时请减速,并注意雷达的盲区,保持机器人与墙壁至少 0.5 米的距离。

  2. 完成指定区域扫描后,在 RViz 中检查点云地图是否与实际环境匹配。

  3. 完成地图扫描后,找到 faster-lio 程序对应的标签页,按 Ctrl+C 停止建图,程序将自动将 3D 点云文件(.pcd)保存到 ~/lite_cog/system/map 目录,并显示平均处理时间(仅供参考)。按回车关闭该标签页。

输入 1 生成栅格地图(ROS1 faster-lio)

  1. 成功保存 3D 点云文件(.pcd)后,找到如下图所示的标签页,输入 1 并按回车。稍后 pcd_2_gridmap 包将被调用,将点云地图转换为栅格地图,当 RViz 窗口弹出并显示栅格地图时即可进行下一步。

RViz 中显示的栅格地图(ROS1 faster-lio)

输入 2 保存栅格地图(ROS1 faster-lio)

  1. 保存栅格地图:选择显示 “when you want to save the grid map” 的终端,输入 2 并按回车调用 map_server。地图文件将保存到 /home/ysc/lite_cog/system/map,包括 .yaml 文件、.pgm 文件和 .pcd 文件。 输入 2 保存栅格地图(ROS1 faster-lio)

  2. 如果栅格地图(.pgm)与实际环境不完全一致,或需要手动划定可通行区域,可使用 GIMP Image Editor 进行编辑。打开终端输入 gimp 打开 GIMP Image Editor,将栅格地图(.pgm)拖入其中。

GIMP 编辑栅格地图

  • 如果未显示工具箱,可在顶部菜单栏选择 [Windows] – [New Toolbox] 打开。
  • 前景色(Foreground Color)指定铅笔颜色,背景色(Background Color)指定橡皮擦颜色。在栅格地图中,黑色区域不可通行,白色区域可通行,灰色区域未知。用户可使用铅笔或橡皮擦擦除噪声或添加虚拟墙。
  • 点击 [File] – [Overwrite usr_map.pgm] 保存修改后的地图以覆盖原文件,关闭编辑器时无需再次保存。
  1. 完成所有操作后,请使用 Ctrl+C 关闭所有终端,以免影响后续流程。

  2. 地图文件默认保存在 /home/ysc/lite_cog/system/map 目录。如果更改了地图文件的路径或名称,请按以下步骤操作以确保定位和导航程序能正确调用地图:

a) 更新对应 .yaml 文件中地图文件(.pgm)的路径,并修改 .yaml 文件名使其与 .pgm 文件名一致:

image: /home/ysc/lite_cog/system/map.pgm # 地图文件(.pgm)路径
resolution: 0.050000
...

b) 进入 ~/lite_cog/nav/src/hdl_localization/launch 目录,在 local_rslidar_imu.launch 文件中配置地图文件的名称和路径:

<arg name="map_name" default="lite3" /> <!-- 定义地图文件名 -->
...
<node name="MapServer" pkg="map_server" type="map_server"
args="/home/ysc/lite_cog/system/map/$(arg map_name).yaml"/>
...
<param name="globalmap_pcd" value="/home/ysc/lite_cog/system/map/$(arg map_name).pcd" />
...

本示例使用日本丰桥技术科学大学 Kenji Koide 在 Github 上发布的 6DOF SLAM(hdl_graph_slam)方案。主要操作流程如下:

hdl_graph_slam 操作流程

对应的数据流图如下:

hdl_graph_slam 数据流

/home/ysc/lite_cog/slam
├── build
── devel
├── src
│ ├── CMakeLists.txt
│ ├── fast_gicp
│ ├── hdl_graph_slam
│ ├── map_server
│ └── ndt_omp
└── version

hdl_graph_slam 包负责构建地图。

注意: 建图前请检查 /home/ysc/lite_cog/system/map 文件夹中是否有之前创建的地图。如果有,请将其移动到其他文件夹以避免覆盖。

注意: 建图需要较多计算资源,请先关闭 App 上的所有 AI 选项。

  1. 打开终端,输入以下命令启动雷达驱动(三选一):
Terminal window
cd /home/ysc/lite_cog/system/scripts/lidar
./start_lslidar.sh # 镭神雷达
./start_livox.sh # Livox 雷达
./start_rslidar.sh # 速腾雷达

如果雷达驱动节点启动失败,使用以下命令检查雷达是否已连接到感知主机:

Terminal window
ping 192.168.1.201 # 雷达 IP 均为 192.168.1.201
  1. 启动建图程序:

a) 启动建图程序的脚本 start_slam.sh 位于 /home/ysc/lite_cog/system/scripts/slam 路径下,内容如下:

#!/bin/sh
# 打开 rviz
gnome-terminal -x bash -c "cd /home/ysc/lite_cog/slam; source devel/setup.bash; roslaunch hdl_graph_slam mapping_rslidar_indoor.launch;"
# 打开 rviz
gnome-terminal -x bash -c "bash /home/ysc/lite_cog/system/scripts/slam/rviz.sh"
# 打开用于生成栅格地图的终端
gnome-terminal -x bash -c "bash /home/ysc/lite_cog/system/scripts/slam/gridmap.sh"
# 打开用于保存地图的终端
gnome-terminal -x bash -c "bash /home/ysc/lite_cog/system/scripts/slam/save_map.sh"

b) 使用 NoMachine 登录感知主机桌面并远程控制机器人起立后,打开终端输入以下命令启动建图程序:

Terminal window
cd /home/ysc/lite_cog/system/scripts/slam
./start_slam.sh

c) 执行上述命令后,将生成五个终端窗口,分别为运行建图脚本的终端、建图程序运行的终端、RViz 开启终端、生成栅格地图的终端、保存地图的终端(下图中左侧为雷达驱动程序窗口,右侧为建图程序脚本窗口):

LiDAR 驱动与建图脚本终端

  1. 若要在建图过程中实时看到建图效果,找到 RViz 可视化节点对应的终端(如下图所示),输入数字 1 并按回车键,此时会打开 RViz 可视化界面(打开此界面会降低建图性能,若后面对建图效果不满意,请尝试不打开可视化,并在建图时关闭 NoMachine 远程界面,减少算力资源占用)。

打开 RViz 终端提示

  1. 操作机器人,引导其在指定区域周围移动以构建地图。转弯时请减速,并注意雷达的盲区,保持机器人与墙壁至少 0.5 米的距离。

  2. 完成指定区域扫描后,查看建立的点云地图是否与真实环境符合(若之前未打开 RViz 可视化界面,则在此时打开)。若地图较大或存在回环(例如绕了房子一圈),请查看回环处的地图是否重合,若不重合,可以再绕一圈,使程序进一步完成回环检测。

  3. 点云地图扫描完成后,找到 grid map 节点对应的终端(如下图所示),输入 2 并按回车键后稍等一会,此时会调用 octomap 功能包将点云地图转化为栅格地图。

输入 2 生成栅格地图(ROS1 hdl_graph_slam)

  1. 在点云地图转化为栅格地图之后,找到 save map 对应的节点终端(如下图所示),输入数字 3 并按回车键后稍等一会,此时会调用 map_server 功能包保存栅格地图,相关文件将保存到 /home/ysc/lite_cog/system 目录下的 map 文件夹中(包括 .yaml 文件、.pgm 文件以及 .pcd 文件)。

输入 3 保存栅格地图(ROS1 hdl_graph_slam)

  1. 如果栅格地图(.pgm)与实际环境不完全一致,或需要手动划定可通行区域,可使用 GIMP Image Editor 进行编辑。打开终端输入 gimp 打开它,将栅格地图(.pgm)拖入 GIMP Image Editor。

GIMP 编辑栅格地图

  • 如果未显示工具箱,可在顶部菜单栏选择 [Windows] – [New Toolbox] 打开。
  • 前景色(Foreground Color)指定铅笔颜色,背景色(Background Color)指定橡皮擦颜色。在栅格地图中,黑色区域不可通行,白色区域可通行,灰色区域未知。用户可使用铅笔或橡皮擦擦除噪声或添加虚拟墙。
  • 点击 [File] – [Overwrite usr_map.pgm] 保存修改后的地图以覆盖原文件,关闭编辑器时无需再次保存。
  1. 完成所有操作后,请使用 Ctrl+C 关闭所有终端,以免影响后续流程。

  2. 地图文件默认保存在 /home/ysc/lite_cog/system/map。如果更改了地图文件的路径或名称,请按以下步骤操作以确保定位和导航程序能正确调用地图:

a) 更新对应 .yaml 文件中地图文件(.pgm)的路径,并修改 .yaml 文件名使其与 .pgm 文件名一致:

image: /home/ysc/lite_cog/system/map.pgm # 地图文件(.pgm)路径
resolution: 0.050000
...

b) 进入 ~/lite_cog/nav/src/hdl_localization/launch 目录,在 local_rslidar_imu.launch 文件中配置地图文件的名称和路径:

<arg name="map_name" default="lite3" /> <!-- 定义地图文件名 -->
...
<node name="MapServer" pkg="map_server" type="map_server"
args="/home/ysc/lite_cog/system/map/$(arg map_name).yaml"/>
...
<param name="globalmap_pcd" value="/home/ysc/lite_cog/system/map/$(arg map_name).pcd" />
...

本示例使用高翔博士团队在 Github 上发布的 SLAM Mapping(faster-lio)方案。主要操作流程和数据流图如下:

faster-lio 数据流(ROS2)

ysc@lite:~/lite_cog_ros2/slam/src$ tree .
.
├── faster-lio
├── map_server
└── pcd2grid

faster-lio 包负责构建 PCD 地图,pcd2grid 包负责将 PCD 地图转换为栅格地图并发布,map_server 包负责保存栅格地图。

注意: 建图前请检查 /home/ysc/lite_cog_ros2/system/map 文件夹中是否有之前创建的地图。如果有,请将其移动到其他文件夹以避免覆盖。

注意: 建图需要较多计算资源,请先关闭 App 上的所有 AI 选项。

  1. 打开终端,输入以下命令启动雷达驱动(三选一):
Terminal window
cd ~/lite_cog_ros2/system/scripts/lidar
./start_lslidar.sh # 镭神雷达
./start_livox.sh # Livox 雷达
./start_rslidar.sh # 速腾雷达

如果雷达驱动节点启动失败,使用以下命令检查雷达是否已连接到感知主机:

Terminal window
ping 192.168.1.201 # 雷达 IP 均为 192.168.1.201

注意: 建图期间此终端应保持运行。

  1. 启动建图程序:

a) 启动建图程序的脚本 start_slam.sh 位于 ~/lite_cog_ros2/system/scripts/slam 目录,内容如下:

#!/bin/sh
# start rviz
gnome-terminal -x bash -c "source /home/ysc/lite_cog_ros2/slam/install/setup.bash; ros2 launch faster_lio mapping_c16.launch.py; read -p 'Press Enter to exit...'"
# start a terminal for generating grid_map
gnome-terminal -x bash -c "bash /home/ysc/lite_cog_ros2/system/scripts/slam/gridmap.sh; read -p 'Press Enter to exit...'"
# Open a terminal for Saving Map
gnome-terminal -x bash -c "bash /home/ysc/lite_cog_ros2/system/scripts/slam/save_map.sh; read -p 'Press any key to exit...'; read -p 'Press Enter to exit...'"

b) 使用 NoMachine 登录感知主机桌面并远程控制机器人起立后,打开终端输入以下命令启动建图程序:

Terminal window
cd ~/lite_cog_ros2/system/scripts/slam
./start_slam.sh

c) 执行上述命令后,将生成四个终端窗口,分别为运行建图脚本的终端、建图程序运行的终端、生成栅格地图的终端、保存地图的终端(下图中左侧为雷达驱动程序窗口,右侧为建图程序脚本窗口):

启动建图后终端界面(ROS2)

  1. 操作机器人,引导其在指定区域周围移动以构建地图。转弯时请减速,并注意雷达的盲区,保持机器人与墙壁至少 0.5 米的距离。

  2. 完成指定区域扫描后,检查点云地图是否与实际环境匹配。

  3. 点云地图扫描完成后,找到 faster-lio 程序对应的终端输入 Ctrl+C 停止建图,程序将自动保存 PCD 文件到 ~/lite_cog_ros2/system/map 目录下,并显示统计得到的平均处理耗时(耗时仅供参考,具体数值可能有所浮动),再次按下回车键可退出终端。

停止建图后终端输出(ROS2)

  1. PCD 文件保存成功后,找到 grid map 节点对应的终端(如下图所示),输入 1 并按回车键后稍等一会,此时会调用 pcd2grid 功能包将点云地图转化为栅格地图,当弹出 RViz 窗口显示栅格地图时可进行下一步。

输入 1 生成栅格地图(ROS2)

RViz 中显示的栅格地图(ROS2)

  1. 在点云地图转化为栅格地图之后,找到 save map 对应的节点终端(如下图所示),输入数字 2 并按回车键后稍等一会,此时会调用 map_server 功能包保存栅格地图,文件将保存到 /home/ysc/lite_cog_ros2/system 目录下的 map 文件夹中(包括 .yaml 文件、.pgm 文件)。

输入 2 保存栅格地图(ROS2)

  1. 如果栅格地图(.pgm)与实际环境不完全一致,或需要手动划定可通行区域,可使用 GIMP Image Editor 进行编辑。打开终端输入 gimp 打开 GIMP Image Editor,将栅格地图(.pgm)拖入其中。

GIMP 编辑栅格地图

  • 如果未显示工具箱,可在顶部菜单栏选择 [Windows] – [New Toolbox] 打开。
  • 前景色(Foreground Color)指定铅笔颜色,背景色(Background Color)指定橡皮擦颜色。在栅格地图中,黑色区域不可通行,白色区域可通行,灰色区域未知。用户可使用铅笔或橡皮擦擦除噪声或添加虚拟墙。
  • 点击 [File] – [Overwrite usr_map.pgm] 保存修改后的地图以覆盖原文件,关闭编辑器时无需再次保存。
  1. 完成所有操作后,请使用 Ctrl+C 关闭所有终端,以免影响后续流程。

  2. 地图文件默认保存在 /home/ysc/lite_cog_ros2/system/map 目录。如果更改了地图文件的路径或名称,请按以下步骤操作以确保定位和导航程序能正确调用地图:

a) 更新对应 .yaml 文件中地图文件(.pgm)的路径,并修改 .yaml 文件名使其与 .pgm 文件名一致:

image: /home/ysc/lite_cog_ros2/system/map.pgm # 地图文件(.pgm)路径
resolution: 0.050000
...

b) 进入 ~/lite_cog_ros2/nav/src/hdl_localization/launch 目录,在 lite_localization.launch.py 文件中配置地图文件的名称和路径:

declare_map_server_config_file_cmd = DeclareLaunchArgument(
'map_server_config_file',
default_value=os.path.join(
'/home/ysc/lite_cog_ros2/system/map/lite3.yaml'
)
)
...
parameters=[
{"globalmap_pcd": "/home/ysc/lite_cog_ros2/system/map/lite3.pcd"},
...