ROS_Kinetic_27 在ROS中使用Cartographer进行SLAM

本文介绍如何在ROS_Kinetic环境下安装和配置Cartographer SLAM工具,并提供详细的步骤指导及常见问题解决方案。

ROS_Kinetic_27 在ROS中使用Cartographer进行SLAM


Cartographer是谷歌新開源的通用的2D和3D定位與構圖同步的SLAM工具,並提供ROS接口。

论文Real-Time Loop Closure in 2D LIDAR SLAM下载地址:

http://download.youkuaiyun.com/detail/zhangrelay/9648192

资料汇总请参考:http://blog.youkuaiyun.com/zhangrelay/article/details/52748648

视频: 1 http://v.youku.com/v_show/id_XMTc1MzI1MTYyNA

            2 http://v.youku.com/v_show/id_XMTc1MzI1MDQwNA

            3 http://v.youku.com/v_show/id_XMTc1MzI1MDgyMA

1. 編譯和安裝:

官網提供了基於Ubuntu 14.04(Trusty)和ROS(indigo)測試和安裝說明,這裏在Ubuntu 16.04(Xenial)和ROS(Kinetic)安裝並測試。建議使用wstool和rosdep,並在編譯時使用Ninja。注意這裏是cartographer_ros

如果只使用cartographer,請参考: https://google-cartographer.readthedocs.io/en/latest/

安裝wstoolrosdep

~$ sudo apt-get install -y python-wstool python-rosdep ninja-build

 

新建工作空間,這裏使用catkin_ctg:

~$ mkdir catkin_ctg

~$ cd catkin_ctg

~/catkin_ctg$ wstool init src

 

從github下載,當然也可以使用:

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall

Github下載地址: https://github.com/googlecartographer

 

~/catkin_ctg$ wstool update -t src

~/catkin_ctg$ rosdep install --from-paths src --ignore-src --rosdistro=${kinetic} -y

#All required rosdeps installedsuccessfully

 

~/catkin_ctg$ catkin_make_isolated --install --use-ninja

編譯需要10分鍾以上,休息一下。





如果報錯,如下:


確保網絡正常後,重試。也可以手動安裝ceres_solver非線性優化庫, https://github.com/ceres-solver/ceres-solver

編譯完成後不要忘記source:

~/catkin_ctg$ source install_isolated/setup.bash

到這裏,編譯和安裝就基本結束了。

2. 測試demo:

在保證cartographer和cartographer_ros都安裝好,可以下載數據記錄包,啓動demo,

這裏只測試了1(493.4MB)和3(3.2MB),2和4數據記錄包太大了,分別爲8GB和3GB,有興趣可以下載測試。

使用roslaunch會自動啓動roscore和rviz。


~$ roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/cartographer_paper_deutsches_museum.bag


~$ roslaunch cartographer_ros demo_revo_lds.launch bag_filename:=${HOME}/cartographer_paper_revo_lds.bag




附原汁原味的论文:

-End-

 

 

 

 

 

 


<think>我们首先需要整合关于在ROS1中使用laser_scan_matcher的信息。根据提供的引用,laser_scan_matcher是一个增量激光扫描配准工具,它使用PLICP算法,并基于CSM实现。它能够处理连续的LaserScan消息,并输出姿态估计(Pose2D或tf变换)。用户的问题集中在使用教程、配置和示例上。我们将分步骤说明:1.安装和编译2.配置参数3.运行示例根据引用[4]和[5],在ROSKinetic中编译时可能会遇到找不到csm包的问题。解决方案是修改头文件路径,将`#include<csm/csm_all.h>`替换为具体的本地路径(例如`#include"/home/ocean/ros_ws/csm_ws/src/csm/sm/csm/csm_all.h"`)。但注意,这种方法不够通用,更好的做法是确保csm被正确安装在系统中,或者设置CMakeLists.txt来正确找到csm。但用户可能更关注如何使用,所以我们将重点放在配置和使用上。步骤1:安装假设用户已经安装了ROS1(如Kinetic或Melodic),可以通过以下步骤安装laser_scan_matcher:方法一:从源码安装```#创建ROS工作空间(如果已有可跳过)mkdir-p~/catkin_ws/srccd~/catkin_ws/src#克隆scan_tools包(包含laser_scan_matcher)gitclonehttps://github.com/ros-perception/scan_tools.git#安装依赖(特别是csm)sudoapt-getinstallros-<distro>-csm#如果找不到csm包,也可以从源码安装csmgitclonehttps://github.com/AndreaCensi/csm.git#然后编译整个工作空间cd~/catkin_wscatkin_make```注意:在编译laser_scan_matcher时,如果出现头文件找不到的错误,可以按照引用[4]和[5]的方法修改头文件路径,但更推荐的方法是设置include目录。可以在CMakeLists.txt中增加csm的include路径,或者使用ROS的find_package机制。但是,由于csm可能不是标准的ROS包,所以我们可能需要手动在CMakeLists.txt中设置。例如,在`laser_scan_matcher`的CMakeLists.txt中,确保包含:```include_directories(include${catkin_INCLUDE_DIRS}${YOUR_CSM_INCLUDE_DIR}#例如:/home/yourname/catkin_ws/src/csm/sm)```步骤2:配置参数根据引用[2],我们可以配置一些参数。参数通常通过ROS参数服务器设置,可以在launch文件中设置。主要参数包括:-`max_iterations`:最大迭代次数(默认10)-`kf_dist_linear`:关键帧的线性距离阈值(默认0.05米)-`kf_dist_angular`:关键帧的角度阈值(默认0.0087弧度,约0.5度)-`use_odom`:是否使用里程计(默认false)-`use_imu`:是否使用IMU(默认false)-`use_alpha_beta`:是否使用alpha-beta滤波器(默认false)-`publish_tf`:是否发布tf变换(默认true)-`base_frame`:机器人基座坐标系(例如"base_link")-`odom_frame`:里程计坐标系(例如"odom")一个典型的launch文件(例如`laser_scan_matcher_example.launch`)可能如下:```xml<launch><nodepkg="laser_scan_matcher"type="laser_scan_matcher_node"name="laser_scan_matcher_node"output="screen"><paramname="max_iterations"value="10"/><paramname="kf_dist_linear"value="0.05"/><paramname="kf_dist_angular"value="0.0087"/><paramname="use_odom"value="false"/><paramname="use_imu"value="false"/><paramname="use_alpha_beta"value="false"/><paramname="publish_tf"value="true"/><paramname="base_frame"value="base_link"/><paramname="odom_frame"value="odom"/><paramname="fixed_frame"value="odom"/><!--或者"map",如果已经建图--><remapfrom="scan"to="/scan"/><!--输入的话题,假设为/scan--></node></launch>```步骤3:运行示例假设已经有一个激光雷达发布`/scan`话题,运行上面的launch文件:```roslaunchyour_packagelaser_scan_matcher_example.launch```然后,可以通过rviz查看机器人姿态估计的结果,或者通过rostopic查看发布的位姿话题:-如果没有使用里程计,该节点将仅根据激光扫描提供姿态估计(即基于扫描匹配的里程计)。-默认发布的话题:`/pose2D`(geometry_msgs/Pose2D)和tf变换(从odom_frame到base_frame的变换)。注意:如果要与其他系统(如导航包)一起使用,通常需要发布从odom_frame到base_frame的tf变换。示例:测试数据如果你没有现成的机器人,可以使用rosbag数据包进行测试。例如,使用turtlebot的rosbag记录文件。总结:在ROS1中使用laser_scan_matcher的步骤包括安装依赖、编译、配置参数和运行节点。配置时需要注意输入的话题名称和坐标系设置。相关问题:1.如何将laser_scan_matcher与IMU或里程计数据融合使用?2.如何处理laser_scan_matcher在长时间运行中的漂移问题?3.laser_scan_matcher与其他激光SLAM(如gmapping、cartographer)有何不同?</think> ### ROS1 Laser_Scan_Matcher 使用指南 #### 1. **核心功能** Laser_scan_matcher 是 ROS1 的增量激光扫描匹配工具: - 基于 PLICP(点对线迭代最近点)算法 - 处理连续 `sensor_msgs/LaserScan` 数据流 - 输出姿态估计(`geometry_msgs/Pose2D` 或 TF 变换) - 核心依赖 Andrea Censi 的 CSM(规范扫描匹配器)库[^1][^3] #### 2. **安装配置** ```bash # 创建工作空间 mkdir -p ~/lidar_ws/src cd ~/lidar_ws/src # 克隆源码 git clone https://github.com/ros-perception/scan_tools.git git clone https://github.com/AndreaCensi/csm.git # 解决路径错误(常见问题[^4][^5]) sed -i 's|<csm/csm_all.h>|"$(pwd)/csm/sm/csm/csm_all.h"|' \ scan_tools/laser_scan_matcher/include/laser_scan_matcher/laser_scan_matcher.h # 编译安装 cd ~/lidar_ws catkin_make source devel/setup.bash ``` #### 3. **参数配置示例(launch 文件)** ```xml <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" name="laser_match"> <!-- 核心参数 --> <param name="fixed_frame" value="odom"/> <param name="base_frame" value="base_link"/> <param name="use_alpha_beta" value="true"/> <!-- 精度控制 --> <param name="max_iterations" value="50"/> <param name="kf_dist_linear" value="0.1"/> <param name="kf_dist_angular" value="0.175"/> <!-- 约10度 --> <!-- 输入输出设置 --> <remap from="scan" to="/hokuyo_scan"/> <param name="publish_tf" value="true"/> <param name="publish_pose" value="true"/> </node> ``` #### 4. **运行与验证** ```bash # 启动节点 roslaunch your_pkg laser_matcher.launch # 可视化验证 rosrun tf view_frames # 生成TF树PDF rosrun rviz rviz -d $(rospack find laser_scan_matcher)/demo/demo.rviz ``` #### 5. **关键性能调优参数** | 参数 | 默认值 | 优化建议 | |------|--------|----------| | `max_iterations` | 10 | 增加可提高精度(>30),但增加计算负载 | | `kf_dist_linear` | 0.05m | 增大可降低关键帧频率 | | `kf_dist_angular` | 0.0087rad | 根据机器人旋转速度调整 | | `sigma` | 0.01 | 增大对噪声更鲁棒 | #### 6. **数据流示例** ```mermaid graph LR A[LaserScan /scan] --> B(laser_scan_matcher) B --> C[Pose2D /pose2D] B --> D[TF base_frame→fixed_frame] ``` #### 7. **适用场景** 1. 无里程计情况下的位姿估计 2. 激光里程计辅助导航栈 3. 低计算资源环境下的SLAM前端 4. 多传感器融合的辅助校正源
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值