6.ROS&PX4–无人机A1激光雷达SLAM部署
一、常见2D SLAM算法
Gmapping
Hector_SLAM
Cartographer
Gmapping
基于粒子滤波的2D激光雷达SLAM,构建二维栅格地图。融合里程计信息,没有回环检测。优点是在小场景中,计算量小,速度较快。缺点是每个粒子都携带一幅地图,无法应对大场景(内存和计算量巨大);如果里程不准或标定参数不准,在长回廊等环境中容易把图建歪。
Hector_Slam
基于优化的算法(解最小二乘问题),优缺点:不需要里程计,但对于雷达帧率要求很高40Hz,估计6自由度位姿,可以适应空中或者地面不平坦的情况。初值的选择对结果影响很大,所以要求雷达帧率较高。
Cartographer
cartographerr是google推出的一套基于图优化的SLAM算法,累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。
二、测试A1:
cd catkin_ws/src
git clone https://github.com/slamtec/rplidar_ros.git
cd ..
catkin_make
roslaunch rplidar_ros view_rplidar.launch
出现Rviz激光雷达点云界面,产品正常
三、部署Hector_Slam
创建hector_slam环境:
sudo apt-get install ros-noetic-hector-slam
cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
catkin_make
实现SLAM:
1.创建Slam启动运行文件
touch ~/catkin_ws/src/rplidar_ros/launch/Hector_Slam_Demo.launch
Hector_Slam_Demo.launch代码:
<launch>
<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<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" />
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>
<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" />
<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" />
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
</launch>
2.运行Hector_Slam
roslaunch rplidar_ros rplidar.launch
roslaunch rplidar_ros Hector_Slam_Demo.launch
3.保存Map:
sudo apt-get install ros-noetic-map-server
rosrun map_server map_saver -f ~/my_map
此时,我们可以在根目录下获得两个文件,分别是my_map.pgm和my_map.yaml;点击my_map.pgm即可查看刚刚建成的地图,my_map.yaml里存放的是地图相关的信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)