ALOAM与3D激光雷达插件编译
ALOAM与3D激光雷达插件编译
先安装ALOAM链接中提到的依赖,然后编译ALOAM
1、依赖安装
参考博客“XTDrone仿真平台示例解析(四)——三维激光SLAM”里面安装依赖,但其实这些依赖似乎在视觉SLAM和视觉惯性里程计(VIO)里面都安装过
sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
tar zxf ceres-solver-2.2.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.2.0
make -j
sudo make install
2.编译ALOAM
cp -r ~/XTDrone/sensing/slam/laser_slam/A-LOAM ~/catkin_ws/src/
cp -r ~/XTDrone/sitl_config/gazebo_plugin/velodyne/* ~/catkin_ws/src/ #这里是3D激光雷达插件
cd ~/catkin_ws
catkin_make #或catkin build,取决于您的编译工具
再次强调,一定要在.bashrc里source ~/catkin_ws/devel/setup.bash,否则3D激光雷达插件无法在仿真环境中启用。
这段话我没看懂,但是似乎不影响后续操作
启动仿真
机械激光雷达包括3d_lidar和3d_gpu_lidar,前者使用CPU计算,后者使用GPU计算,其他没有区别,您可以根据您的需要选择。在模型中可以设置激光雷达的线数,以3d_gpu_lidar.sdf为例,本教程用的是32线,您可以修改为其他线数,其他参数也都可以修改。注意刷新率不能改的太高,否则ALOAM算不过来。
修改后的outdoor1_1.launch文件如下
<?xml version="1.0"?>
<launch>
<!-- MAVROS posix SITL environment launch script -->
<!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle -->
<!-- vehicle model and world -->
<arg name="est" default="ekf2"/>
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor1_light.world"/>
<!-- gazebo configs -->
<arg name="gui" default="true"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="true"/>
<arg name="paused" default="false"/>
<!-- Gazebo sim -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="gui" value="$(arg gui)"/>
<arg name="world_name" value="$(arg world)"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="verbose" value="$(arg verbose)"/>
<arg name="paused" value="$(arg paused)"/>
</include>
<!-- iris_0 -->
<group ns="iris_0">
<!-- MAVROS and vehicle configs -->
<arg name="ID" value="0"/>
<arg name="ID_in_group" value="0"/>
<arg name="fcu_url" default="udp://:24540@localhost:34580"/>
<!-- PX4 SITL and vehicle spawn -->
<include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch">
<arg name="x" value="0"/>
<arg name="y" value="0"/>
<arg name="z" value="0"/>
<arg name="R" value="0"/>
<arg name="P" value="0"/>
<arg name="Y" value="0"/>
<arg name="vehicle" value="iris"/>
<arg name="sdf" value="iris_3d_gpu_lidar"/>
<arg name="mavlink_udp_port" value="18570"/>
<arg name="mavlink_tcp_port" value="4560"/>
<arg name="ID" value="$(arg ID)"/>
<arg name="ID_in_group" value="$(arg ID_in_group)"/>
</include>
<!-- MAVROS -->
<include file="$(find mavros)/launch/px4.launch">
<arg name="fcu_url" value="$(arg fcu_url)"/>
<arg name="gcs_url" value=""/>
<arg name="tgt_system" value="$(eval 1 + arg('ID'))"/>
<arg name="tgt_component" value="1"/>
</include>
</group>
</launch>
<!--the launch file is generated by XTDrone multi-vehicle generator.py -->
启动仿真文件
roslaunch px4 outdoor1.launch
启动ALOAM,由于本教程给激光雷达设置的是32线,因此启动对应32线的launch文件
roslaunch aloam_velodyne aloam_velodyne_HDL_32.launch
然后使用laser_transfer.py将ALOAM发布的位姿数据通过mavros发布
cd ~/XTDrone/sensing/slam/laser_slam/script
python laser_transfer.py iris 0 aloam
然后建立通信,键盘控制起飞即可
cd ~/XTDrone/communication
python multirotor_communication.py iris 0
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel
三维激光SLAM
我这里飞的乱七八糟,如果飞行路线正确,可以得到下图