ROS笔记(十八)Karto Hector

本文对比了KartoSLAM、GmappingSLAM和HectorSLAM三种SLAM算法的工作原理、计算图和服务。KartoSLAM和GmappingSLAM在输入上相似,但KartoSLAM的输出缺少位姿估计的分散程度。HectorSLAM仅依赖激光雷达数据,适用于手持设备,其效果受激光雷达频率影响。三种算法均提供了动态地图服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Karto

1. 计算图

Karto SLAM和Gmapping SLAM在工作方式上类似:
在这里插入图片描述

输入的Topic同样是/tf和/scan,其中/tf里有odom_frame和laser_frame,laser_frame和base_frame,与GmappingSLAM的完全一样。

唯一不同的是输出:slam_katro的输出比slam_gmapping的车、输出少了一个位子位姿估计的分散程度。

2. 服务

与Gmapping相同,提供/dynamic_map服务

3. 参数

test/param/katro_params.yaml:

# General Parameters
use_scan_matching: true
use_scan_barycenter: true
minimum_travel_distance: 0.2 
minimum_travel_heading: 0.174                  #in radians
scan_buffer_size: 70
scan_buffer_maximum_scan_distance: 20.0
link_match_minimum_response_fine: 0.8
link_scan_maximum_distance: 10.0
loop_search_maximum_distance: 4.0
do_loop_closing: true
loop_match_minimum_chain_size: 10
loop_match_maximum_variance_coarse: 0.4     # gets squared later
loop_match_minimum_response_coarse: 0.8
loop_match_minimum_response_fine: 0.8

# Correlation Parameters - Correlation Parameters
correlation_search_space_dimension: 0.3
correlation_search_space_resolution: 0.01
correlation_search_space_smear_deviation: 0.03

# Correlation Parameters - Loop Closure Parameters
loop_search_space_dimension: 8.0
loop_search_space_resolution: 0.05
loop_search_space_smear_deviation: 0.03

# Scan Matcher Parameters
distance_variance_penalty: 0.3              # gets squared later
angle_variance_penalty: 0.349                # in degrees (gets converted to radians then squared)
fine_search_angle_offset: 0.00349               # in degrees (gets converted to radians)
coarse_search_angle_offset: 0.349            # in degrees (gets converted to radians)
coarse_angle_resolution: 0.0349                # in degrees (gets converted to radians)
minimum_angle_penalty: 0.9
minimum_distance_penalty: 0.5
use_response_expansion: false

Hector

1. 计算图

Hector SLAM算法与Gmapping SLAM、Karto SLAM不同,Hector只需要激光雷达数据,不需要里程计数据,比价适合手持式激光雷达,并对激光雷达的扫描频率有一定的要求。

Hector算法的效果不如Gmapping、Karto,因为它仅仅用到激光雷达信息,这样的建图与定位的依据不如多传感结合的效果好,Hector更适合于手持移动或者本身没有里程计的机器人使用。

计算图:

在这里插入图片描述

中心的节点为hector_mapping,它的输入和其它SLAM类似,都包含了/tf和/scan另外Hector还订阅了一个/syscommanTopic,这是一个字符串型的topic,当接收到reset消息时,地图和机器人的位置都会初始化到最初的位置。

输出的topic,Hector多了一个/poseupdate和/slam_out_pose,前者是具有协方差的机器人位姿估计,后者是没有协方差的位姿估计。

2. 服务

与Gapping相同,提供/dynamic_map查询地图服务

3. 参数

test/launch/hector_demo.launch

<node pkg="hector_mapping" type="hector_mapping" name="hector_height_mapping" output="screen"> 
	<param name="scan_topic" value="scan"/>
	<param name="base_frame" value="base_link"/>
	<param name="odom_frame" value="odom"/>
	
	<param name="output_timing" value="false"/>
	<param name="advertise_map_service" value="true"/>
	<param name="use_tf_scan_transformation" value="true"/>
	<param name="use_tf_pose_start_estimate" value="false"/>
    <param name="pub_map_odom_transform" value="true"/>
    <param name="map_with_known_poses" value="false"/>

    <param name="map_pub_period" value="1"/>
    <param name="update_factor_free" value="0.45"/>

    <param name="map_update_distance_thresh" value="0.1"/>
    <param name="map_update_angle_thresh" value="0.05"/>
    
    <param name="map_resolution" value="0.05"/>
    <param name="map_size" value="1024"/>
    <param name="map_start_x" value="0"/>
    <param name="map_start_y" value="0"/>
 </node>
### ROS Karto SLAM 算法实现教程 #### 安装依赖库 为了在ROS环境中成功运行Karto SLAM,需确保已安装必要的软件包。具体来说,涉及三个主要的Git仓库: - `slam_karto`:提供SLAM功能的核心模块。 - `open_karto`:开放源码版的Karto库,负责处理底层的数据结构和算法逻辑。 - `sparse_bundle_adjustment`:用于优化视觉里程计中的特征匹配过程。 可以通过执行如下命令来获取这些资源[^3]: ```bash cd ~/catkin_ws/src/ git clone https://github.com/ros-perception/slam_karto.git git clone https://github.com/ros-perception/open_karto.git git clone https://github.com/ros-perception/sparse_bundle_adjustment.git ``` 完成克隆操作之后,记得编译整个工作区以便使新的程序可用: ```bash cd .. catkin_make source devel/setup.bash ``` #### 启动与配置 启动Karto SLAM节点前,建议先确认激光雷达设备已经正常连接并能被ROS识别。通常情况下,LaserScan话题会被命名为 `/scan` 。如果名称不同,则需要相应调整launch文件内的订阅者设置。 创建一个新的Launch文件夹,并在里面编写一个简单的启动脚本,例如名为`karto_slam.launch.xml`: ```xml <launch> <!-- 设置参数 --> <param name="odom_frame" value="/odom"/> <param name="base_frame" value="/base_link"/> <!-- 运行Karto Slam Nodelet Manager 和 Nodelets--> <node pkg="nodelet" type="nodelet" args="manager" output="screen" name="slam_karto_manager"/> <node pkg="nodelet" type="nodelet" args="load karto_slam/SlamNodelet slam_karto_manager" name="slam_karto"> <remap from="scan" to="/your_laser_topic_here"/> <!-- 替换成实际使用的laser topic --> </node> </launch> ``` 保存上述XML代码片段至指定路径后,在终端输入以下指令即可激活该配置: ```bash roslaunch your_package_name karto_slam.launch ``` 此时应该可以看到机器人开始收集环境信息并逐步绘制出周围的空间布局图。对于移动平台而言,还需额外开启一个窗口来进行遥控指挥,这可通过下面这条语句达成目的[^4]: ```bash rosrun teleop_twist_keyboard teleop_twist_keyboard.py ``` 通过这种方式,可以实时操控搭载有传感器的小车探索未知区域的同时构建精确的地图模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值