zoukankan      html  css  js  c++  java
  • 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 <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
  • 相关阅读:
    【解决方案】如何通过RTSP协议安防视频直播平台EasyNVR打造智慧校园监控联网解决方案?
    【开发记录】网络摄像头RTSP协议视频流媒体平台EasyNVR服务演示模式的直播限时设定
    关于RTSP/GB28181协议视频平台EasyNVR/EasyGBS调取指定时间录像播放或下载接口时间说明
    【操作说明】新版网络摄像头RTSP协议视频平台EasyNVR中的直播秒开设置及应用说明
    RTSP协议外网视频直播监控方案EasyNVR+EasyNVS无法播放WS-FLV视频流如何解决?
    通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口步骤概览
    络摄像头RTSP协议安防视频可视化平台网页无插件直播平台EasyNVR录像如何存储不同磁盘上——windows版
    网络摄像头RTSP协议视频安防可视化平台EasyNVR录像如何存储不同磁盘上——Linux版
    【解决方案】基于RTSP协议实时视频播放平台EasyNVR为基础的应急平台中EasyNVS管理系统有什么作用?
    网络摄像头RTSP协议视频平台EasyNVR临时授权时间不显示在EasyNVS云管理平台上的原因排查?
  • 原文地址:https://www.cnblogs.com/gary-guo/p/10419630.html
Copyright © 2011-2022 走看看