星海图机器人使用cartographer建图存图
·
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 &
# 启动地图发布节点(后台运行)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)