hector_slam功能包使用高斯牛顿方法,不需要里程计数据,只根据激光信息便可构建地图。 所以他的总体框架如下:
hector-slam功能包
hector_slam的核心节点是hector_mapping,它订阅“/scan”话题以获取SLAM所需的激光数据。与gmapping相同的是,hector_mapping节点也会发布map话题,提供构建完成的地图信息;不同的是,hector_mapping节点还会发布slam_out_pose和poseupdate这两个话题,提供当前估计的机器人位姿。 在ROS的软件源中已经集成了hector-slam相关的功能包,可以使用如下命令安装:
<code class="prism language-bash has-numbering">$ <span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> ros-kinetic-hector-slam </code>
下面先来了解hector_slam功能包的各种接口。 话题和服务 hector_mapping节点中发布/订阅的话题和提供的服务如表所示。
坐标变换 hector_mapping节点提供的坐标变换如表所示。
参数 参数默认就可以,学习后可以根据自己的要求修改~
hector_mapping节点的配置与运行
依然无需关注hector_mapping节点的内部实现,使用其提供的接口即可实现SLAM功能。 1.hector.launch 与gmapping节点一样,hector_mapping节点也有不少参数需要设置,单独实现一个my_robot_navigation/launch/hector.launch文件完成节点的启动,代码如下:
<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="base_link" />
<!—— 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>
hector_demo.launch 然后创建一个用于演示hector_slam的my_robot_navigation/launch/hector_demo.launch文件,启动hector_mapping节点和rviz可视化界面,代码如下:
<launch>
<include file="$(find my_robot_navigation)/launch/hector.launch"/>
<!—— 启动rviz——>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find my_robot_navigation)/rviz/gmapping.rviz"/>
</launch>
然后启动自己的小车底盘和雷达,再启动hector-slam的launch文件,就可以建图了。 个人感觉虽然不用里程计和imu模块,但是建图效果并不差!