1.建图步骤

运行cartographer后缓慢移动机器人 运行ros2 launch cartographer_ros backpack_2d.launch.py

路径为/workspace/carto_ws/install/cartographer_ros/share/cartographer_ros/configuration_files/backpack_2d.lua

可在rviz2查看扫图可视化,若rviz显示显示器权限不足。运行如下指令:

xhost +local:docker   #给docker授权屏幕

2.存图步骤

扫图完成后首先执行停止测图指令:

ros2 service call /finish_trajectory cartographer_ros_msgs/srv/FinishTrajectory "trajectory_id: 0"

出现如下效果即成功:

root@5090x2:/workspace# ros2 service call /finish_trajectory cartographer_ros_msgs/srv/FinishTrajectory "trajectory_id: 0"
waiting for service to become available...
requester: making request: cartographer_ros_msgs.srv.FinishTrajectory_Request(trajectory_id=0)

response:
cartographer_ros_msgs.srv.FinishTrajectory_Response(status=cartographer_ros_msgs.msg.StatusResponse(code=0, message='Finished trajectory 0.'))

保存为cartographer文件:

mkdir -p /workspace/maps && chmod 777 /workspace/maps
# 确保保存目录权限正常(已创建过可忽略,执行一次更稳妥)
ros2 service call /write_state cartographer_ros_msgs/srv/WriteState "filename: '/workspace/maps/carto_map.pbstream'"
# 调用 WriteState 服务保存地图状态

将 cartographer的pbstream 文件转换成 ROS 通用的 .pgm + .yaml 地图格式:

ros2 run cartographer_ros cartographer_pbstream_to_ros_map \
  -pbstream_filename /workspace/maps/carto_map.pbstream \
  -map_filestem /workspace/maps/my_map \
  -resolution 0.05

3.在cartographer的rviz可视化中加载已保存的地图:

source /opt/ros/humble/setup.bash
# 加载 ROS 2 环境
ros2 run cartographer_ros cartographer_node \
  -configuration_directory /workspace/carto_ws/install/cartographer_ros/share/cartographer_ros/configuration_files \
  -configuration_basename backpack_2d.lua \
  -load_state_filename /workspace/maps/carto_map.pbstream \
  -start_trajectory_with_default_topics false &
# 启动 Cartographer 纯定位(后台运行)
ros2 run cartographer_ros cartographer_occupancy_grid_node -resolution 0.05 &
# 启动地图发布节点(后台运行)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐