本节主要记录运行ROS自带的SLAM建模包hector_slam方法,为后续理解这些代码,建立自己的SLAM算法打下基础。
- 高斯牛顿法
- 二维栅格地图
- 不需要里程计信息
1.通过命令行安装hector_slam包
sudo apt-get install ros-kinetic-hector-slam
2.配置hector_slam节点
<?xml version="1.0"?>
<launch>
<node pkg = "hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<!-- Frame names -->
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="odom" />
<!-- Tf use -->
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>
<!-- Map size / start point -->
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="2048"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
<param name="map_multi_res_levels" value="2" />
<param name="map_pub_period" value="2" />
<param name="laser_min_dist" value="0.4" />
<param name="laser_max_dist" value="5.5" />
<param name="output_timing" value="false" />
<param name="pub_map_scanmatch_transform" value="true" />
<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.7" />
<param name="map_update_distance_thresh" value="0.2"/>
<param name="map_update_angle_thresh" value="0.06" />
<!-- Advertising config -->
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>
</launch>
3.运行gazebo模型及hector_slam节点
4.打开rviz
在建模初期,图像不稳定,等机器人运动起来之后,由于内部激光里程计工作的原因,图像会稳定很多。
5.移动小车,建立模型
在建立模型的过程中,由于环境比较单一,可能是算法不太容易形成回环,并且激光里程计的误差,只要速度稍微快一些,或者转向快一些,就会出现定位漂移,导致建立的地图失真。
6.查看各个节点的坐标转换关系
rosrun rqt_tf_tree rqt_tf_tree
参考文献:
1:深蓝学院-ROS理论与实践