3.在自己的bag上运行Cartographer ROS

1、验证自己的bag

cartographer ROS提供了一个工具cartographer_rosbag_validate来自动分析包中的数据。在尝试调试cartographer之前运行这个工具。

操作方式:

cartographer_rosbag_validate -bag_filename your_bag.bag

2.创建一个.lua配置文件

cartographer非常灵活且可以配置用于任何机器人上。机器人配置读取来自于一个options的数据结构,该数据结构必须定义在一个Lua脚本里面。配置例子定义在文件src/cartographer_ros/cartographer_ros/configuration_files,且安装在install_isolated/share/cartographer_ros/configuration_files/.

注意,理想情况下,一个.lua配置应该是具体机器人的而不是一个具体bag的。

可以通过复制例子中的一个,然后调整以适合自己的需求,

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_3d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua

下面去编辑my_robot.lua来适合于自己的机器人。在options块中定义的值定义了cartographer ros前端应当如何与你的bag进行交互。定义在options段后的值用于调试cartographer的内部信息。

你可能需要调整的值,需要提供环境的TF frame IDs,robot in map_frame, tracking_frame, published_frame and odom_frame.

You can either distribute your robot’s TF tree from a /tf topic in your bag or define it in a .urdf robot definition.

警告:应该信任你的位姿!在机器人和IMU或者LIDAR之间的小的offset可能会导致不相关的地图重构。cartographer通过可以纠正小的位姿误差,但并不是万能的。

需要修改的其他的值有,传感器的数量和类型:

a、num_laser_scans:你使用话题sensor_msgs.LaserScan的数量

b、num_multi_echo_laser_scans:话题num_multi_echo_laser_scans的数量

c、num_point_clouds:话题sensor_msgs/PointCloud2的数量

可以使用use_landmarks和use_nav_sat,来使能路标和GPS作为附加的定位源.在options块中的其他的变量通常保持不变。

然而,有一个全局变量需要调整来适用于自己的bag:

TRAJECTORY_BUILDER_3D.num_accumulated_range_data or TRAJECTORY_BUILDER_2D.num_accumulated_range_data

这个变量定义了构建一个完整激光的信息的数量(通常,是一个完整的分辨率)。如果听从工具cartographer_rosbag_validate的建议,没一帧激光使用100个ROS messages,可以设置这个变量为100。If you have two range finding sensors (for instance, two LIDARs) providing their full scans all at once, you should set this variable to 2.

Create.launch 文件用于自己的SLAM场景

例子中的.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参数来重放记录的数据.这个launch文件也会启动一个rviz窗口用于可视化cartographer的状态。

offline_my_robot.launch非常类似于demo_my_robot.launch,但它尝试执行SLAM尽可能的快.这使得地图构建非常快,它也可以用于多个bag文件的地图构建。

demo_my_robot_localication.launch非常类似于demo_my_robot.launch但是它期望一个load_state_filename参数来指出一个.pbstream,它记录了先前cartographer的执行。先前的记录将作为一个预先计算的地图,然后cartographer只会在这个地图上执行定位。

assets_writer_my_robot.launch用于提取.pstream中的数据,.pstream中记录了先前cartographer的执行。

Again, a few adaptations need to be made to those files to suit your robot.

  • Every parameter given to -configuration_basename should be adapted to point to my_robot.lua.
  • If you decided to use a .urdf description of your robot, you should place your description in install_isolated/share/cartographer_ros/urdf and adapt the robot_description parameter to point to your file name.
  • If you decided to use /tf messages, you can remove the robot_description parameter, the robot_state_publisher node and the lines statring with -urdf.
  • If the topic names published by your bag or sensors don’t match the ones expected by Cartographer ROS, you can use elements to redirect your topics. The expected topic names depend on the type of range finding devices you use.

注意:

  • The IMU topic is expected to be named “imu”
  • If you use only one sensor_msgs/LaserScan topic, it is expected to be named scan. If you have more, they should be named scan_1, scan_2 etc…
  • If you use only one sensor_msgs/MultiEchoLaserScan topic, it is expected to be named echoes. If you have more, they should be named echoes_1, echoes_2 etc…
  • If you use only one sensor_msgs/PointCloud2 topic, it is expected be named points2. If you have more, they should be named points2_1, points2_2, etc…

 

配置好之后,开始启动

roslaunch cartographer_ros my_robot.launch bag_filename:=/path/to/your_bag.bag

 

转载于:https://www.cnblogs.com/gary-guo/p/10419630.html

你可能感兴趣的:(3.在自己的bag上运行Cartographer ROS)