机器人操作系统ROS | 您所在的位置:网站首页 › ros激光雷达数据与地图不匹配怎么处理 › 机器人操作系统ROS |
主流的激光SLAM算法有hector、gmapping、karto、cartographer。很多同学使用ROS默认自带的gmapping、hector等比较多,这次带大家一起尝试下传说中的google cartographer,看看效果差别有多大。 Cartographer主要是通过闭环检测来消除构图过程中产生的累积误差。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。 主要由 Local SLAM 和 Global SLAM 两部分组成: Local SLAM: 利用里程计(Odometry)和IMU数据进行轨迹推算,给出小车位姿估计值 将位姿估计值作为初值,对雷达数据进行匹配,并更新位姿估计器的值 雷达一帧帧数据经过运动滤波后,进行叠加,形成子图(submap)Global SLAM: 回环检测 后端优化,全部子图形成一张完整可用的地图二、cartographer安装 Google开源的代码包含两个部分:cartographer和cartographer_ros。cartographer主要负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建,是cartographer理论的底层实现。cartographer_ros则基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理结果发布用于显示或保存,是基于cartographer的上层应用。 源码: https://github.com/cartographer-project/cartographer https://github.com/cartographer-project/cartographer_ros接下来我们安装cartographer+cartographer_ros,环境为ubuntu20.04+noetic+pi4b: # 1.安装编译工具wstool、rosdep、ninjd sudo apt update # on Noetic sudo apt install -y python3-wstool python3-rosdep ninja-build stow # other distribution sudo apt-get install -y python-wstool python-rosdep ninja-build stow # 2.下载cartographer_ros源码 mkdir ~/catkin_ws_carto && cd ~/catkin_ws_carto wstool init src wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src # 3.安装依赖包proto3、deb等 sudo rosdep init #如果执⾏报错,可以直接忽略 rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y ./src/cartographer/scripts/install_debs_cmake.sh #req libs ./src/cartographer/scripts/install_abseil.sh #abseil ./src/cartographer/scripts/install_proto3.sh #proto3 ./src/cartographer/scripts/install_ceres.sh #ceres-solver 如果代码下不下来,修改.sh里git clone https://github.com/ceres-solver/ceres-solver.git # 4.修改配置 vim ~/catkin_ws_carto/src/cartographer_ros/cartographer_ros/configuration_files/revo_lds.lua tracking_frame = "base_footprint", #底盘坐标frame published_frame = "odom", #机器人odom frame(tf关联关系:cartographer map -> odom -> base_footprint -> base_laser_link) provide_odom_frame = false, #是否使用cartographer提供的坐标系 use_odometry = true, #是否使用机器人的odom # 5.编译和安装cartographer_ros整个项⽬⼯程 cd ~/catkin_ws_carto catkin_make_isolated --install --use-ninja source install_isolated/setup.bash下方是tf关联关系示例(使用带底盘的机器人): ![]() *注:如果你只是pc直接接上激光雷达进行测试,那么就只把revo_lds.lua里的tracking_frame、published_frame改为laser的frame_id即可。 三、Bag测试 # 2D bag 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 # revo_lds bag wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/revo_lds/cartographer_paper_revo_lds.bag roslaunch cartographer_ros demo_revo_lds.launch bag_filename:=${HOME}/Downloads/cartographer_paper_revo_lds.bag 四、实车测试 1.配置cartographer slam vim cartographer.launch 2.SLAM建图测试 2.1.2D雷达建图 # 无地图场景导航并建图 roslaunch robot_navigation robot_slam_laser.launch slam_methods:=cartographer # pc端 roslaunch robot_navigation navigation_rviz.launch rosrun teleop_twist_keyboard teleop_twist_keyboard.py # 保存地图 roscd robot_navigation/maps rosrun map_server map_saver -f map # 使用地图 roslaunch robot_navigation robot_navigation.launch roslaunch robot_navigation navigation_rviz.launch![]() 五、结论 从实际测试来看,与gmapping/hector必须控制移动速度并且容易出现衔接问题相比,cartographer即使在非常快速的移动时,建出的图还原度依然很高,基本都是一次到位,形状非常规整,不同区域衔接的地方做的很好,同时建图速度很快,地图文件很小,实在是slam建图的利器!
yan 22.5.29 0:58
参考: Compiling Cartographer ROS Google Docs » Cartographer SLAM建图与自主避障导航——google-cartographer 欢迎关注下方“非著名资深码农“公众号进行交流~![]() |
CopyRight 2018-2019 实验室设备网 版权所有 |