6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署

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环境:

#安装hector-slam算法库
sudo apt-get install ros-noetic-hector-slam	
#部署算法到ROS工作目录	
cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
#编译程序
catkin_make

实现SLAM:

1.创建Slam启动运行文件
#创建Hector_Slam_Demo.launch的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
#开启A1雷达扫描
roslaunch rplidar_ros rplidar.launch 
#开始Hector_SLAM工作,自动开启Rviz建图
roslaunch rplidar_ros Hector_Slam_Demo.launch  
3.保存Map:
#安装map-server库
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里存放的是地图相关的信息

你可能感兴趣的:(ROS&PX4,算法,自动驾驶,人工智能)