在上章跑通r2000例程后,利用hector算法实现纯激光雷达建图
第一步
在gui_example.lauch文件中屏蔽dummy_slam_broadcaster和rvizLocal节点,并着重修改参数scanner_ip和frame_id。完整代码如下
<?xml version="1.0"?>
<launch>
<node pkg="pepperl_fuchs_r2000" type="r2000_node" name="r2000_driver_node" output="screen">
<param name="scanner_ip" value="192.168.1.19"/>
<param name="frame_id" value="laser_link"/>
<param name="scan_frequency" value="35"/>
<param name="samples_per_scan" value="3600"/>
</node>
<!--<node pkg="dummy_slam_broadcaster" type="dummy_slam_broadcaster_node" name="dummy_slam_broadcaster"/>
<node name="rvizLocal" pkg="rviz" type="rviz" respawn="false" output="screen" args="-d $(find pepperl_fuchs_r2000)/rviz/test.rviz" required="true"/>-->
</launch>
第二步
下载hector算法
sudo apt-get install ros-kinetic-hector-slam
第三步
创建hectorlaunch文件
着重修改最后的参数scan_topic,需要和激光雷达节点发布的话题相同,可通过启动激光雷达节点后输入rostopic list命令查看
详细参数意义可参考:https://blog.csdn.net/weixin_41459903/article/details/102795148
然后还要修改tf节点的的最后激光雷达坐标系名称,即下面代码中的laser_link,需要与gui_example.launch文件的frame_id参数名称一致
<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0.105 0 0 0 /base_link /laser_link 100"/>
完整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="512"/>
<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" />
<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->
<!-- 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="/r2000_driver_node/scan"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0.105 0 0 0 /base_link /laser_link 100"/>
<node pkg="rviz" type="rviz" name="rviz"
args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
</launch>
效果如下