使用cartographer_ros(在线/离线)构建地图后保存地图的方法

本文介绍了如何在使用cartographer_ros构建地图后进行保存。首先,详细阐述了在Ubuntu 18.04的Melodic版本中安装cartographer的步骤。接着,重点讲解了保存地图的两种方法:2.1 使用cartographer服务将在线建图的pbstream文件转换为yaml和png格式;2.2 通过map_server尝试保存地图,但此方法效果可能不佳。

1,安装cartographer

请看我写的这篇文章虽然我使用的是ubuntu18.04的melodic版本的ROS,但是ROS是兼容的,即你的ROS版本和系统和我的不同,也可以使用这篇文章的方法正确的安装。

2,使用cartographer构建号地图后怎么保存成yaml和png文件呢?

关于cartographer_ros的文档,官方有提供,请看这里

2.1 保存地图

  1. 当使用cartographer在线建图时,cartographer不知道什么时候结束,所以要先调用服务来关闭传感器数据的接收。
rosservice call /finish_trajectory 0
  1. 将当前地图信息的快照保存为后缀名为.pbstream
# Ask Cartographer to serialize its current state.
# (press tab to quickly expand the parameter syntax)
rosserv
### 启动 Cartographer ROS 的 2D 背包演示 要启动 `cartographer_ros` 的 2D 背包演示 `.launch` 文件并指定袋文件路径,可以按照以下方法操作: 通过命令行执行以下指令来下载袋文件并启动对应的 `.launch` 文件: ```bash wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag ``` 此命令会完成两个主要功能:一是从指定 URL 下载所需的袋文件到用户的 Downloads 目录下;二是利用该袋文件作为输入数据源运行 `demo_backpack_2d.launch` 文件[^1]。 如果遇到错误提示 `[FATAL] [timestamp]: Error reading from file: wanted X bytes, read Y bytes` 或者 RVIZ 界面未正常显示过程,则可能是由于以下几个原因造成的: - **ROS 版本兼容性问题**:确保当前使用ROS 发布版本与 `cartographer_ros` 所需的依赖项完全匹配。例如,在 Melodic 中可能存在某些已知的问题[^5]。 - **Bag 文件损坏或不完整**:重新尝试下载袋文件以排除因网络中断等原因导致的数据丢失情况。 - **环境变量配置不当**:确认所有必要的环境变量均已正确设置,特别是关于 Gazebo 和 Rviz 插件加载的部分。 对于解决这些问题的具体措施包括但不限于更新至最新稳定版软件包以及仔细检查日志输出中的其他潜在警告信息。 ### 注意事项 当您希望进一步测试局部重定位能力时,可参照如下方式构建离线地图后再进行在线定位实验: ```bash roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag roslaunch cartographer_ros demo_backpack_2d_localization.launch \ load_state_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag.pbstream \ bag_filename:=${HOME}/Downloads/b2-2016-04-27-12-31-41.bag ``` 这里的第一条命令用于生成 PBStream 格式的地图文件,而第二条则基于前述的地图实现新的轨迹跟踪[^4]。
### 如何使用 ROS2 和 Cartographer 进行离线地图构建 要实现基于 ROS2 的 Cartographer 离线地图构建功能,可以按照以下方法操作: #### 1. 安装依赖项 首先需要安装必要的软件包。这包括 `cartographer` 及其对应的 ROS 软件包 `cartographer_ros`。可以通过 GitHub 或 Gitee 下载这些库并编译[^2]。 ```bash git clone https://gitee.com/mirrors/cartographer.git git clone https://gitee.com/mirrors/cartographer_ros.git ``` 完成克隆后,在 Catkin 工作空间中进行编译: ```bash cd ~/catkin_ws/src/ colcon build --symlink-install source install/setup.bash ``` #### 2. 配置文件设置 对于三维环境的地图构建,需指定相应的 Lua 配置文件路径。通常情况下,默认的配置文件位于 `/home/nvidia/catkin_ws/install_isolated/share/cartographer_ros/configuration_files/` 文件夹下[^3]。如果需要自定义参数,则可以在该目录创新的 `.lua` 文件来调整扫描匹配器、子分辨率以及其他重要选项。 例如,以下是典型的背包机器人使用的三维度量单位制配置片段: ```lua options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, } TRAJECTORY_BUILDER.pure_localization_trimmer.min_submaps_to_keep = 3 POSE_GRAPH.optimization_problem.huber_scale = 1e2 return options ``` 此部分代码设置了优化过程中 Huber 函数的比例因子以及纯定位模式下的修剪策略。 #### 3. 数据记录与回放 为了支持离线流程,先运行数据采集阶段并将传感器消息保存至袋文件(Bag File)。启动实际设备或者模拟节点时附加如下命令行参数即可开启录制服务: ```bash ros2 bag record /scan /imu /odom ``` 当收集足够的样本后停止录影过程,并切换到重播状态加载先前存储的数据流作为输入源供给 SLAM 系统处理[^4]: ```bash ros2 launch cartographer_ros offline_backpack_3d.launch \ bag_filenames:=<path-to-your-bag-file> ``` 这里 `<path-to-your-bag-file>` 替换为你本地磁盘上的具体路径名字符串表示形式。 #### 4. 地图导出 最后一步是从内部结构化表达转换成外部可读取的标准格式比如 PGM 像加 YAML 描述文档组合体或者是二进制 Protobuf 序列化对象等等。执行下面指令序列能够提取最终成果物出来供后续应用层调用消费: ```bash rosrun map_server map_saver -f my_map_file_name ``` 上述脚本会自动寻找当前活动话题中的 OccupancyGrid 类型实例进而持久化存档下来形成静态快照副本[^1]. ```python import rclpy from nav_msgs.msg import OccupancyGrid def save_map_callback(msg:OccupancyGrid): with open('my_offline_map.pgm', 'wb') as f: f.write(bytes([int(x) for x in msg.data])) rclpy.init() node = rclpy.create_node('map_exporter') sub = node.create_subscription(OccupancyGrid, '/map', save_map_callback , qos_profile=10) try: while True: rclpy.spin_once(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() ``` 以上 Python 片段展示了另一种方式通过订阅主题获取栅格网格信息并且手动写入文件系统之中去. ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值