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

  • Post author:
  • Post category:其他


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


    <remap>


    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