二维激光SLAM(HectorSLAM)
HectorSLAM安装
ROS自带有HectorSLAM,因此可以apt安装
sudo apt install ros-melodic-hector-slam*
安装map server用于保存地图
sudo apt install ros-melodic-map-server
复制相关文件
roscd hector_slam_launch
sudo cp ~/XTDrone/sensing/slam/laser_slam/hector_slam/hector_slam_xtdrone.launch launch/
sudo cp ~/XTDrone/sensing/slam/laser_slam/hector_slam/mapping_xtdrone.rviz rviz_cfg/mapping_xtdrone.rviz
roscd hector_imu_attitude_to_tf/
sudo cp ~/XTDrone/sensing/slam/laser_slam/hector_slam/hector_imu_xtdrone.launch launch/
roscd hector_mapping/
sudo cp ~/XTDrone/sensing/slam/laser_slam/hector_slam/hector_mapping_xtdrone.launch launch/
HectorSLAM使用
启动仿真环境(记得把indoor3.launch里的sdf设为iris_2d_lidar)
cd ~/PX4_Firmware/launch/
gedit indoor3.launch
在新终端运行
roslaunch px4 indoor3.launch
启动HectorSLAM(在一开始那个终端运行,也就是在下图的目录下运行。因为一开始我在新终端运行一直报错找不到路径
)
cd /opt/ros/melodic/share/hector_mapping
roslaunch hector_slam_launch hector_slam_xtdrone.launch
启动通信脚本
cd ~/XTDrone/communication/
python multirotor_communication.py iris 0
将HectorSLAM输出的2D位姿和高度值(由1D激光测距仪获得),转换为mavros话题
cd ~/XTDrone/sensing/slam/laser_slam/script/
python laser_transfer.py iris 0 hector
启动键盘控制脚本,控制无人机飞行,注意不能飞太高,导致激光雷达扫不到围墙。
cd ~/XTDrone/control/keyboard/
python multirotor_keyboard_control.py iris 1 vel
绕场地飞一圈,建立完整的地图,而后保存地图,用于后需要运动规划使用。(不知道为啥,每次控制无人机的时候就会报错,然后就没办法继续控制无人机飞行了)
下图是我控制无人机飞行建立的部分地图,后面无人机就没办法飞行了,没办法画完整的地图(这里没有用下面的命令保存,怕把完整的地图覆盖了)
rosrun map_server map_saver -f ~/XTDrone/motion_planning/2d/map/indoor3
完整的地图应该是下图这样的