跳转到内容

建图示例

在开始建图前,请依照远程登录进入 106 主机,并在终端输入 dpkg -l slam 查看 slam 包版本。本节所述的地图部署方法适用于 slam(<2.1.0)。若版本为 v2.1.0 或更新版本,请参考地图部署(v2.1.0 及之后)。

  1. 建图过程中,请勿操控机器狗剧烈运动,请勿遮挡激光雷达,否则可能导致建图失败。
  2. 开始建图前,打开终端输入 top 命令检查计算资源,如果有其它程序使用过多计算资源需要输入以下命令行将其关闭:sudo kill [PID]。

检查计算资源

检查结果

  1. 确保未开启建图功能,若已开启建图功能,请先按下方建图流程完成保存地图、关闭程序的操作。确保未启动定位导航程序,若已开启定位导航程序,请在终端中输入以下命令行杀死定位导航程序:
    Terminal window
    bash ~/jy_cog/system/scripts/kill_nav.sh
  2. 启动建图程序前,需检查 /jy_cog/system/map 文件夹中是否已有建好的地图。建图程序启动后,该文件夹会被清空,如有需要,请提前把建好的地图移动到其它文件夹中,再次使用时将其移回即可。
  3. 狭窄楼梯、室外极空旷区域以及超大型场地建图暂未支持。

本版本建图程序适用于面积不超过 200m × 100m 的室内场景。

请在机器狗静止站立状态下开启建图程序。

  1. 打开终端,输入以下命令以启动室内建图脚本:
    Terminal window
    cd ~/jy_cog/system/scripts
    bash start_mapping.sh
  2. 开启建图程序后请先保持机器狗静止站立 5~8 秒,然后遥控机器狗在需要建图的区域中平稳匀速行走。扫描过程中可在 RViz 中查看机器狗定位是否正常,点云图像是否漂移。

RViz建图界面

  1. 当机器狗扫描完建图区域之后,在打开建图程序的终端中按下 Ctrl+C 以关闭建图程序,同时程序将自动生成栅格地图并保存到 /jy_cog/system/map 文件夹中;如果在扫描过程中需要预览栅格地图,可在新的终端中输入以下命令:
    Terminal window
    cd ~/jy_cog/system/scripts
    bash pub_save_occ_map.sh

如果无法顺利关闭建图程序,请在终端中运行以下命令杀死建图进程:

Terminal window
cd ~/jy_cog/system/scripts
bash kill_mapping.sh

若按照上述步骤未能得到栅格地图,可以在关闭建图程序后,运行以下指令将扫描得到的点云地图离线转换为栅格地图:

Terminal window
cd ~/jy_cog/system/scripts
./trans_save_occ_map.sh

离线栅格转换

栅格地图示例

如果对得到的栅格地图不满意,用户可在 jy_cog/system/conf/slam/pcd2map 文件夹中的 params.yaml 文件中配置栅格地图参数。

参数含义数据类型
minh截取点云的高度不低于 minh,minh 可以为负double
maxh截取点云的高度不高于 maxh,maxh 可以为负double
leaf_size点云的分辨率,值越大,生成栅格地图速度越快,生成的地图越稀疏double

如果依然建图失败,请联系技术支持人员。

请在机器狗静止站立状态下开启建图程序。

多楼层建图不使用单楼层建图的 start_mapping.sh 脚本启动,因为此脚本会同时启动建点云图和建栅格图的程序,而多楼层建图需要分别启动两个程序。

  1. 打开终端,输入以下命令以开启建点云图的程序:

    Terminal window
    bash ~/jy_cog/slam/scripts/mapping.sh indoor true livox

    命令末尾携带的参数 true 表示需要开启 Rviz,若无需开启 Rviz,可将其改为 false。

    此命令开启建点云图程序,需保持到所有楼层建图完毕才可关闭,中途请勿随着下面建栅格地图程序启停而同时启停本程序。

  2. 开启建点云图的程序后请先保持机器狗静止站立 5~8 秒。

  3. 每当开始扫描一个新的楼层时,需要开启建栅格图的程序,并指明地图文件名:

    Terminal window
    bash ~/jy_cog/slam/scripts/occupancy_mapping.sh gridmapName

    命令末尾携带一个参数,以空格与命令分隔,指明本次构建的栅格地图的文件名称。当需要构建多张栅格地图时,需要为每张栅格地图指定不同的文件名。

    建议将机器狗导航启动层的栅格地图文件名称指定为 “jueying”,因为导航启动时会默认加载名称为 “jueying” 的地图。

    必须在已开启建点云图程序的情况下才可构建栅格地图。

  4. 开启建栅格地图的程序后,遥控机器狗扫描本层的环境。每层扫描结束,在准备建下一层地图时,ctrl+c 关闭建栅格图的程序,本层栅格地图会自动保存。然后在原地再次开启建栅格图程序(注意指明地图文件名,文件名不要重复),即可开始建下一层的栅格地图。

    建议在衔接两个楼层的楼梯平台上关闭并重启建栅格地图的程序,并且确保该平台在两张栅格图上都是可达的。

  5. 建完全部楼层后,ctrl+c 关闭栅格地图程序和点云地图程序,最后一层的栅格地图和完整的点云地图均会自动保存。

打开终端输入下面的命令打开 PCD viewer,查看建好的三维点云地图:

Terminal window
cd ~/jy_cog/system/map
pcl_viewer jueying.pcd

PCD viewer 基础操作:

  • 滑动滚轮控制点云模型的缩放
  • 拖拽左键控制点云模型的旋转
  • 拖拽滑轮控制点云模型的平移
  • 数字按键 (1~5) 选择点云模型的显示模式

PCD viewer

若栅格地图不完全符合实际环境或需要人为划定可通行区域,可以使用 GNU Image Manipulation Program 对 .pgm 文件进行修图:右击 .pgm 文件,选择 open with Other Application,然后选中 GNU Image Manipulation Program,并点击 Select 键。

若 GNU Image Manipulation Program 未显示两侧的工具栏,可单击 Tab 键显示工具栏。工具栏提供了前景色与背景色工具,前景色设置画笔工具的颜色,背景色设置橡皮擦工具的颜色。栅格地图中规定黑色为障碍物(即不可通行区域),白色为可通行区域,灰色为未知区域。您可以使用画笔工具或橡皮擦工具添加或擦除黑色区域。按住 shift 键后单击鼠标左端可画直线,按住 ctrl 键后单击鼠标左键可吸取颜色。

如果是多楼层建图,修图时需确保两张栅格地图的衔接平台在两张栅格图上都是可达的。若地图中包含需要通过的楼梯或斜坡,在建图时可能会被识别为障碍物,在地图中显示为黑色,修图时应当将楼梯或斜坡的可通行区域修改成白色。

修图工具

工具栏

栅格地图修图示例

修改完成后在上方菜单栏选择 File - Overwrite jueying_map.pgm 对原文件进行覆盖(请勿选择 File - Save 保存),关闭该软件时会再次出现保存提示,此时点击 Discard Changes 即可。

对于多楼层建图,在构建完栅格地图后,需要进入 ~/jy_cog/system/conf 路径下的 broker 或 robot_server 文件夹,修改配置文件 map.toml:根据所建的各楼层的栅格图,按照格式对地图列表进行增减,后续在下发导航任务时,将使用地图编号来标识各楼层的栅格地图。

地图部署(适用于 v2.1.0 及之后)

Section titled “地图部署(适用于 v2.1.0 及之后)”

该版本建图功能会同步构建点云及 2D 栅格地图。多楼层场景构建多张栅格地图,则需在楼层变化时手动指定。该版本建图程序支持单层室内小场景(50m50m)、多层室内小场景(50m50m10层)和单层大场景(500m500m)的地图构建。

建图效果1

建图效果2

  1. 建图过程中,请勿操控机器狗剧烈运动,请勿遮挡激光雷达,否则可能导致建图失败。
  2. 开始建图前,打开终端输入 top 命令检查计算资源,如果有其它程序使用过多计算资源需要输入以下命令行将其关闭:sudo kill [PID]。
  3. 确保未开启建图功能,若已开启建图功能,请先按下方建图流程完成保存地图、关闭程序的操作。确保未启动定位导航程序,若已开启定位导航程序,请在终端中输入以下命令行杀死定位导航程序:
    Terminal window
    bash ~/jy_cog/system/scripts/kill_nav.sh
  4. 暂不支持室内外混合大场景、光滑隧道、光滑长走廊、较空旷场景(取决于雷达型号)、高动态环境、极度振动或剧烈运动、长距离无回环(或很少回环)的场景。

该版本建图程序包含三种建图模式:

  1. fast:快速构建点云与栅格地图(包含多层栅格地图构建,不包含回环检测,不包含关键帧地图生成)
  2. indoor:室内多层、狭窄或小范围场景构建点云与栅格地图(包含回环检测,包含关键帧地图生成)
  3. outdoor:室外较为空旷大范围场景构建点云与栅格地图(包含回环检测,包含关键帧地图生成)

该版本的建图程序会在 /home/ysc/jy_cog/system/maps 下,为每一个三维点云地图对应的场景新建一个文件。文件夹命名方式为 [自定义命名]-日期-时间,文件夹内包含一张完整的点云地图(jueying.pcd),默认栅格地图(jueying.pgm)及参数文件(jueying.yaml)。若该场景有多份栅格地图,以 jueying 为前缀,后跟从 1 开始的序号,如 jueying1 等(仍然保留 jueying.pgm 与 jueying.yaml)。还有可能留存关键帧地图(包含各关键帧点云与其位姿文件),均存放在 details 文件夹下。

目录结构

定位导航程序会默认调用 /home/ysc/jy_cog/system/map 路径下的地图,map 文件夹是指向某个具体地图文件夹的软链接。如需更改软链接指向的地址,可删除原有的 map 文件夹,然后在终端中按照下述命令行进行操作:

Terminal window
cd ~/jy_cog/system # 进入目录(可忽略)
ln -s maps/文件夹名 map # 文件夹名按实际情况替换,此命令作用为创建一个名为 map 的软链接,指向 maps 下的某一个文件夹

本版本建图程序适用于面积不超过 50m × 50m 的室内场景和面积不超过 500m × 500m 的大场景。

请在机器狗静止站立状态下开启建图程序。

  1. 打开终端,输入以下命令以启动建图脚本:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/start_mapping.sh [地图名称] [是否立即生效] [建图模式] [是否打开RViz]

    该命令行中,末尾可以跟随四个参数:

    参数名称参数功能参数值及含义
    地图名称指定该地图文件夹名称中的 [自定义命名] 部分,默认为 “ProjectName-LocationName”/
    是否立即生效指定是否在建图结束后立即使用该地图定位导航,若立即生效,则会把 map 文件夹软链接指向该地图文件夹,默认为立即生效y=立即生效;n=不立即生效
    建图模式指定本次使用的建图模式,默认为 fast 模式fast/indoor/outdoor
    是否打开 RViz指定是否在启动建图的同时打开 Rviz 界面,默认为打开true=打开 RViz;false=不打开 RViz

    例如:

    Terminal window
    # 示例 1
    bash /home/ysc/jy_cog/system/scripts/start_mapping.sh substationB y outdoor true
    # 示例 1 执行结果:采用 outdoor 模式进行建图,建图结果存放在 maps 下的 "substationB-日期-时间" 文件夹下,建图后立即用于定位导航,建图过程打开 RViz
    # 示例 2
    bash /home/ysc/jy_cog/system/scripts/start_mapping.sh
    # 示例 2 执行结果:末尾参数省略,则采用默认的 fast 模式进行建图,建图结果存放在 maps 下的 "ProjectName-LocationName-日期-时间" 文件夹下,且建图后默认立即用于定位导航,建图过程默认打开 RViz

    末尾参数只能从最后开始省略,不能跳过某个参数,程序会依照顺序对参数进行读取。

  2. 开启建图程序后请先保持机器狗静止站立 10 秒,然后遥控机器狗在需要建图的区域中平稳匀速行走。扫描过程中可在 RViz 中查看机器狗定位是否正常,点云图像是否漂移。

  3. 当机器狗扫描完建图区域之后,在打开建图程序的终端中按下 Ctrl+C 以关闭建图程序。若建图时使用的是 fast 模式,此时程序将自动生成栅格地图并保存到对应的地图文件夹中;若使用的是 indoor/outdoor 模式,此时地图文件夹中只保存了若干关键帧点云及其对应的位姿,还需在终端中输入下述命令行,分别启动构建完整点云地图程序和构建栅格地图程序:

    RViz界面

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/construct_full_map.sh # 构建完整点云地图程序
    bash /home/ysc/jy_cog/system/scripts/construct_occ_map.sh # 构建栅格地图程序
  4. fast 模式下,如需在扫描过程中预览栅格地图(indoor/outdoor 模式下不支持),可在新的终端中输入以下命令:

    Terminal window
    cd ~/jy_cog/system/scripts
    bash pub_save_occ_map.sh

如果无法顺利关闭建图程序,请在终端中运行以下命令杀死建图进程:

Terminal window
cd ~/jy_cog/system/scripts
bash kill_mapping.sh

请在机器狗静止站立状态下开启建图程序。

多楼层建图会根据每一层的点云数据生成多张对应不同楼层的栅格地图。操控机器狗扫描环境的过程中,随着楼层的切换,需使用 save_and_restart_occ_mapping.sh 脚本将已扫描楼层的点云数据转换为栅格地图并重启建栅格地图程序。

  1. 打开终端,输入以下命令以开启建点云图的程序:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/start_mapping.sh [地图名称] [是否立即生效] [建图模式] [是否打开RViz] # 末尾参数的说明请参考上方单楼层建图

    离线转换

    此命令开启建点云图程序,需保持到所有楼层建图完毕才可关闭,中途请勿随着下面建栅格地图程序重启而同时启停由此命令开启的进程。

  2. 开启建图程序后请先保持机器狗静止站立 10 秒,然后遥控机器狗在需要建图的区域中平稳匀速行走。

  3. 每当开始扫描一个新的楼层时,需在该层的起始位置手动运行如下命令行(若终端中已在运行 save_and_restart_occ_mapping.sh 脚本,则需要先 Ctrl+C 终止进程),以保存上一楼层的栅格地图,并重启构建栅格地图程序,以开始构建一张新的栅格地图:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/save_and_restart_occ_mapping.sh

    建图起始楼层的栅格地图和参数文件默认保存为 jueying.pgm 与 jueying.yaml。后续每次运行 save_and_restart_occ_mapping.sh 脚本时构建的新栅格地图,其命名默认为前缀 jueying+序号,序号从 1 开始,如 jueying1.pgm。

    必须在已开启建点云图程序的情况下才可构建栅格地图。

    建议在衔接两个楼层的楼梯平台上关闭并重启建栅格地图的程序,并且确保该平台在两张栅格图上都是可达的。

  4. 重启建栅格地图的程序后,可遥控机器狗扫描新楼层的环境。全部扫描结束后,按下 ctrl+c,则建图程序会停止并自动完成点云及栅格地图的保存。

    终端中按下 ctrl+c 只能按下一次,否则会下发杀掉程序的信号,导致地图无法保存。

请在机器狗静止站立状态下开启建图程序。

多楼层建图会根据每一层的点云数据生成多张对应不同楼层的栅格地图。操控机器狗扫描环境的过程中,随着楼层的切换,需使用 set_floor_label.sh 脚本来切分楼层,同时指定楼层序号。

  1. 打开终端,输入以下命令以开启建点云图的程序:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/start_mapping.sh [地图名称] [是否立即生效] [建图模式] [是否打开RViz] # 末尾参数的说明请参考上方单楼层建图

    此命令开启建点云图程序,需保持到所有楼层建图完毕才可关闭。

  2. 开启建图程序后请先保持机器狗静止站立 10 秒,然后遥控机器狗在需要建图的区域中平稳匀速行走。

  3. indoor/outdoor 模式下构建多楼层栅格地图时,需要在到达新的楼层的起始位置时,指定新楼层的序号:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/set_floor_label.sh [楼层序号]

    上述命令带有一个参数 [楼层序号],具体的参数含义如下:

    • 省略该参数:表示采用默认的楼层序号值 0
    • 取值为 0、1、2 等自然数:指定新楼层的序号
    • 取值为 -1:表示不对该新楼层构建栅格地图
    • 取值为 -2:表示新楼层的序号在前序楼层的序号基础上 +1

    最终生成的栅格地图会命名为 “jueying+楼层序号”,如 jueying1.pgm 等。序号为 0 的栅格地图命名为 jueying.pgm。

    地图文件中的楼层序号不一定与实际楼层序号一一对应。

    建议将机器狗导航启动层的栅格地图文件名称指定为 “jueying”,因为导航启动时会默认加载名称为 “jueying” 的地图。

    必须在已开启建点云图程序的情况下才可构建栅格地图。

    建议在衔接两个楼层的楼梯平台上关闭并重启建栅格地图的程序,并且确保该平台在两张栅格图上都是可达的。

  4. 指定新楼层序号后,可遥控机器狗对新楼层环境进行扫描。全部扫描结束后,在启动建图的终端中按下 ctrl+c,则建图程序会停止,此时地图文件夹中只保存了若干关键帧点云及其对应的位姿,还需分别启动构建完整点云地图程序和构建栅格地图程序:

    Terminal window
    bash /home/ysc/jy_cog/system/scripts/construct_full_map.sh # 构建完整点云地图程序
    bash /home/ysc/jy_cog/system/scripts/construct_occ_map.sh # 构建栅格地图程序

本版本建图程序提供了一个简单的 GUI 工具。

  1. 输入以下命令以开启建图 GUI 工具:
    Terminal window
    bash /home/ysc/jy_cog/system/scripts/GUI_mapping.sh
    此命令会打开建图 GUI 界面,指定地图名称、建图模式等参数后,即可点击开始建图。
  2. 开启建图程序后请先保持机器狗静止站立 10 秒,然后遥控机器狗在需要建图的区域中平稳匀速行走。
  3. 若要构建多层栅格地图,则需要在到达新楼层的起始位置时进行下述操作:
    • 如果是 fast 模式:点击界面中的 [新楼层] 按钮,新楼层栅格地图及参数文件会命名为 “jueying+楼层序号”,如 jueying1.pgm/jueying1.yaml 等。新楼层序号会基于前序楼层序号自动 +1,序号为 0 的栅格地图及参数文件则直接以 jueying 命名。

      GUI新楼层按钮

      GUI界面

    • 如果是 indoor/outdoor 模式:在文本框中填写新楼层的序号,然后点击界面中的 [指定新楼层] 按钮,新楼层的栅格地图及参数文件会命名为 “jueying+指定的新楼层序号”,如填写新楼层序号为 4,则将保存为 jueying4.pgm/jueying4.yaml 等。序号为 0 的栅格地图及参数文件则命名为 jueying.pgm/jueying.yaml。若点击 [不指定楼层],则将不会为该楼层创建栅格地图。

  4. GUI 界面中按下结束建图,即可自动执行保存地图、构建完整点云地图、构建栅格地图等操作。等待全部执行完毕后,窗口会出现一个关闭按钮,按下后会完全退出 GUI 程序。

用户可进入需要查看的目标地图文件夹路径下,参照上方查看点云地图(v2.1.0 之前)的步骤使用 PCD viewer 来查看建好的三维点云地图。

用户可进入需要查看的目标地图文件夹路径下,参照上方栅格地图修改(v2.1.0 之前)的步骤来修改栅格地图。

栅格地图修改

对于多楼层建图,在构建完栅格地图后,需要进入 ~/jy_cog/system/conf 路径下的 broker 或 robot_server 文件夹,修改配置文件 map.toml,具体步骤请参考上方地图配置(v2.1.0 之前)。

针对较大的场景,该版本建图程序无法保证建图一次成型,需要录制数据包,调整参数后反复构建以得到最佳质量的地图。

  1. 开始录制数据包:

    Terminal window
    bash ~/jy_cog/rosbag_recorder/scripts/start_record.sh

    执行上述指令后,需等待约 5 秒完成频率检查:检查结果正常后则会自动开始录制。若频率检查有问题,则不会开始录制。

    录制状态

    录制提示

  2. 操控机器狗对录制区域进行扫描,完成扫描后,执行下述命令行结束录制:

    Terminal window
    bash ~/jy_cog/rosbag_recorder/scripts/stop_record.sh

    录制下来的点云数据存放在 ~/jy_cog/system/record/bags/mapping 路径下。

    如需进行多楼层建图,请在各个新楼层的起始位置停留一段时间,为后续建图步骤中运行切分楼层的脚本预留操作时间。

  3. 在使用录制的数据包进行建图之前,需要先杀死传感器驱动:

    Terminal window
    rosnode kill /livox_lidar_publisher2
    rosnode kill /yesense_imu_node
  4. 然后参照之前所述的建图操作,启动建图程序。

  5. 建图启动后,打开一个新的终端,进入数据包存放路径,播放数据包:

    Terminal window
    rosbag play ~/jy_cog/system/record/bags/mapping/数据包名

    如果进行多楼层建图,可以在数据包播放到新楼层入口的位置时,运行 set_floor_label.sh 脚本。

  6. 数据包播放完毕后,可按照之前所述的建图操作结束并保存建图。