如何使用自己录制的bag包来运行Cartographer ROS

如何使用自己录制的bag包来运行Cartographer ROS

参考Cartographer_ros官方教程

当运行 cartographer_ros 时,你需要先运行 source install_isolated/setup.bash 来配置 ROS 环境(如果你的 shell 是 zsh,请将 bash 替换为 zsh)

验证数据包的有效性

Cartographer ROS 提供了一个名为 cartographer_rosbag_validate 的工具来自动分析包中的数据。 在尝试针对不正确的数据调整 Cartographer 的参数之前运行此工具通常是一个好主意。

它受益于 Cartographer 作者的经验,可以检测bag数据包中常见的各种错误。 例如,如果检测到 sensor_msgs/Imu 消息,该工具将确保重力矢量尚未从 IMU 测量中移除,因为 Cartographer 使用重力的模值来确定地面方向。

该工具还可以提供有关如何提高数据质量的提示。 例如,对于 Velodyne 激光雷达,建议传感器发送的每个 UDP 数据包有一条`` sensor_msgs/PointCloud2 消息,而不是激光雷达每转动一个角度就发送一次扫描消息。 有了这个间隔,Cartographer 就能够去除由机器人运动引起的点云变形,从而实现更好的重建。

如果已配置好 Cartographer ROS 环境,则可以简单地运行该工具,如下所示:

cartographer_rosbag_validate -bag_filename your_bag.bag

创建.lua配置文件

Cartographer 高度灵活,可以配置为在各种机器人上工作。 机器人配置是从option数据结构中读取的,该数据结构必须从 Lua 脚本中定义。 示例配置在 src/cartographer_ros/cartographer_ros/configuration_files 中定义并安装在 install_isolated/share/cartographer_ros/configuration_files/中。

理想情况下,.lua 配置应该是针对于机器人配置的,而不是针对于具体的数据包配置的。

您可以先复制其中一个示例,然后根据自己的需要进行调整。 如果要使用 3D SLAM:

cp install_isolated/share/cartographer_ros/configuration_files/backpack_3d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua

如果想要使用2D SLAM:

cp install_isolated/share/cartographer_ros/configuration_files/backpack_2d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua

然后您可以编辑 my_robot.lua 以满足您的机器人的需要。 options参数块中定义的值定义了 Cartographer ROS 前端应如何与数据包交互。 在options参数块之后定义的值用于调整 Cartographer 的内部工作。

具体的参数含义请参考另外两篇文章Cartographer_ros配置文件参数讲解

在需要调整的值中,可能必须中根据环境和机器人的设置下列坐标系map_frametracking_framepublished_frameodom_frame

可以从包中的 /tf 消息发布机器人的 TF 树,也可以在 .urdf 机器人描述文件中定义它。

你应该相信你提供的位姿闭环! 机器人与 IMU 或 LIDAR 之间的连接上的小偏移可能会导致地图重建不一致。 Cartographer通常可以纠正小的位姿错误,但不是所有的!

需要定义的其他值与要使用的传感器的数量和类型有关

  • num_laser_scans:你将会使用的sensor_msgs/LaserScan 类型的传感器消息的数量。
  • num_multi_echo_laser_scans: 你将会使用的sensor_msgs/MultiEchoLaserScan 类型的传感器消息的数量。
  • num_point_clouds: 你将会使用的sensor_msgs/PointCloud2 类型的传感器消息的数量。

还可以设置use_landmarksuse_nav_sat 启用地标和 GPS 作为附加定位源来使用。 options块中的其余变量通常应保持不变。

即使使用 2D SLAM,地标也是 3D 对象,如果仅在 2D 平面上查看,由于它们的第三维,可能会对你产生误导。

但是,有一个全局变量你需要修改来适应你的数据包的需求:TRAJECTORY_BUILDER_3D.num_accumulated_range_dataTRAJECTORY_BUILDER_2D.num_accumulated_range_data。 此变量定义构建完整扫描(通常为完整旋转)所需的消息数。 如果遵循 cartographer_rosbag_validate 的建议并对每次扫描使用 100 条 ROS 消息来发送,则可以将此变量设置为 100。如果您有两个测距传感器(例如,两个 LIDAR)同时提供全部扫描,则应将此变量设置为 2 。

注意,一般我们使用的雷达不会提供完整扫描的拆分功能,所以这里一般设置为1

为你的SLAM 场景创建 .launch 文件

Cartographer 的推荐用法是为每个机器人和 SLAM 类型提供一个自定义的 .launch 文件。.launch 文件的示例放在src/cartographer_ros/cartographer_ros/launch中并安装在 install_isolated/share/cartographer_ros/launch/ 中。

首先复制提供的示例之一:

cp install_isolated/share/cartographer_ros/launch/backpack_3d.launch install_isolated/share/cartographer_ros/launch/my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d.launch install_isolated/share/cartographer_ros/launch/demo_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/offline_backpack_3d.launch install_isolated/share/cartographer_ros/launch/offline_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d_localization.launch install_isolated/share/cartographer_ros/launch/demo_my_robot_localization.launch
cp install_isolated/share/cartographer_ros/launch/assets_writer_backpack_3d.launch install_isolated/share/cartographer_ros/launch/assets_writer_my_robot.launch
  • my_robot.launch 用于在机器人上使用真实传感器数据在线(实时)执行 SLAM。
  • demo_my_robot.launch 旨在从开发机器使用,并期望提供bag_filename 参数从记录中重放数据。 此启动文件还会生成一个 rviz 窗口,该窗口配置为可视化 Cartographer 的状态。
  • offline_my_robot.launchdemo_my_robot.launch 非常相似,但尝试尽可能快地执行 SLAM。 这可以显著地加快地图构建速度。 此启动文件还可以使用通过bag_filenames参数提供的多个包文件。
  • demo_my_robot_localization.launchdemo_my_robot.launch非常相似,但需要一个 load_state_filename参数指向之前 Cartographer 执行所提供的.pbstream 记录文件。 之前的记录文件将用作预先计算的地图,Cartographer 将仅在此地图上执行定位。
  • assets_writer_my_robot.launch用于从先前 Cartographer 执行提供的.pbstream记录文件中提取数据。

同样,需要对这些文件进行一些修改以适合您的机器人。

  • 赋予 -configuration_basename的每个参数都应调整为指向 my_robot.lua
  • 如果决定使用您的机器人的 .urdf描述文件,您应该将您的描述文件放在 install_isolated/share/cartographer_ros/urdf并调整 robots_description参数以指向您的描述文件名。
  • 如果决定使用 /tf消息,可以删除 robots_description 参数、robot_state_publisher 节点和以 -urdf 开头的行。
  • 如果您的数据包或传感器发布的消息名称与 Cartographer ROS 预期的名称不匹配,可以使用<remap> 来重定向传感器提供的消息。 预期的主题名称取决于使用的测距设备类型。
  • IMU消息期望命名为imu
  • 如果仅使用一个·sensor_msgs/LaserScan 类型的消息,则应将其命名为 scan。 如果你有更多,它们应该被命名为 scan_1scan_2 等等。
  • 如果仅使用一个sensor_msgs/MultiEchoLaserScan 类型的消息,它应该被命名为echoes。 如果你有更多,它们应该被命名为 echoes_1echoes_2 等等。
  • 如果仅使用一个 sensor_msgs/PointCloud2 类型的消息,则应将其命名为 points2。 如果你有更多,它们应该被命名为 points2_1points2_2 等等。

使用你的配置

一切都设置好了! 现在可以使用以下命令启动 Cartographer:

roslaunch cartographer_ros my_robot.launch bag_filename:=/path/to/your_bag.bag
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值