1. 环境准备:从零搭建ROS-Gazebo基础平台
第一次接触ROS和Gazebo的朋友可能会觉得头大,其实只要跟着步骤一步步来,搭建环境并没有想象中那么难。我建议使用Ubuntu 18.04系统,这个版本对ROS Melodic的支持最稳定。安装完系统后,第一件事就是配置ROS环境。
安装ROS Melodic其实很简单,只需要几条命令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-melodic-desktop-full安装完成后,别忘了初始化rosdep,这个工具在后续安装依赖时会非常有用:
sudo rosdep init rosdep updateGazebo通常会随ROS一起安装,但很多人会遇到打不开的问题。这里有个小技巧:如果你用的是虚拟机,记得关闭3D图形加速选项。我在VMware上测试时发现,开启这个选项反而会导致Gazebo崩溃。另外,建议安装gazebo_ros_pkgs这个包,它提供了ROS和Gazebo之间的接口:
sudo apt install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control环境变量配置也很关键,我建议把这些命令加到.bashrc文件里,这样每次打开终端都会自动加载ROS环境:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc2. SLAM算法集成:四大主流方案实战
2.1 LOAM:经典激光SLAM算法
LOAM(Lidar Odometry and Mapping)可以说是激光SLAM领域的里程碑式算法。我在GitHub上试过很多实现版本,最终发现laboshinl维护的这个版本最稳定。安装过程如下:
首先创建工作空间并克隆代码:
mkdir -p ~/loam_ws/src cd ~/loam_ws/src git clone https://github.com/laboshinl/loam_velodyne.git编译时可能会遇到PCL库版本问题,这时可以尝试指定PCL版本:
cd ~/loam_ws catkin_make -DPCL_DIR=/usr/lib/x86_64-linux-gnu/cmake/pcl运行LOAM时,建议先检查激光雷达话题是否正确配置。我遇到过因为话题不匹配导致无法建图的情况,修改launch文件中的话题名即可解决。
2.2 LeGO-LOAM:轻量级地面优化方案
LeGO-LOAM在LOAM基础上做了很多优化,特别适合地面机器人。安装前需要先装GTSAM库,这里有个坑要注意:必须使用4.0.2版本,新版本可能会有兼容性问题。
安装GTSAM:
git clone https://bitbucket.org/gtborg/gtsam.git cd gtsam git checkout 4.0.2 mkdir build cd build cmake .. make -j4 sudo make installLeGO-LOAM的安装相对简单:
mkdir -p ~/lego_ws/src cd ~/lego_ws/src git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git cd ~/lego_ws catkin_make -j4运行时如果出现点云畸变,可以尝试调整laserCloudSurfLast和laserCloudEdgeLast的发布频率,这个参数在utility.h文件中。
2.3 LIO-SAM:紧耦合激光惯性方案
LIO-SAM是我个人最喜欢的算法,它融合了IMU数据,建图效果非常稳定。安装前同样需要GTSAM,步骤和上面一样。
安装LIO-SAM:
mkdir -p ~/lio_ws/src cd ~/lio_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd ~/lio_ws catkin_make -j4运行时常见的一个错误是"[lio_sam_imuPreintegration-2] process has died",这是因为libmetis.so库的位置问题。解决方法:
sudo mv /usr/local/lib/libmetis.so /opt/ros/melodic/lib/2.4 A-LOAM:LOAM的简化实现
A-LOAM是港科大实现的简化版LOAM,代码更简洁但性能不打折。安装前需要先装Ceres Solver,这里有个小技巧:安装前确保系统有glog库。
安装Ceres Solver:
sudo apt install libgoogle-glog-dev wget ceres-solver.org/ceres-solver-1.14.0.tar.gz tar xvf ceres-solver-1.14.0.tar.gz cd ceres-solver-1.14.0 mkdir build cd build cmake .. make -j4 sudo make installA-LOAM的安装:
mkdir -p ~/aloam_ws/src cd ~/aloam_ws/src git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git cd ~/aloam_ws catkin_make3. Husky机器人Gazebo仿真环境搭建
Clearpath Robotics的Husky是非常适合SLAM研究的移动机器人平台。在Gazebo中仿真Husky需要安装husky仿真包:
sudo apt install ros-melodic-husky-gazebo ros-melodic-husky-navigation创建测试环境:
mkdir -p ~/husky_ws/src cd ~/husky_ws/src git clone https://github.com/husky/husky.git cd ~/husky_ws catkin_make启动基础仿真环境:
roslaunch husky_gazebo husky_empty_world.launch如果想使用自定义场景,可以把.world文件放到husky_gazebo/worlds目录下,然后修改launch文件中的world_name参数。我测试时创建了一个包含多个房间和障碍物的场景,这对SLAM算法评估很有帮助。
4. 联合仿真与算法评估实战
4.1 多算法并行测试方案
为了公平比较不同SLAM算法,我设计了一套测试流程:
- 启动Gazebo仿真环境:
roslaunch husky_gazebo husky_playpen.launch- 启动键盘控制节点:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py- 分别启动不同SLAM算法(每个算法单独测试):
# LOAM roslaunch loam_velodyne loam_velodyne.launch # LeGO-LOAM roslaunch lego_loam run.launch # LIO-SAM roslaunch lio-sam run.launch # A-LOAM roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch4.2 评估指标设计
在实际测试中,我主要关注以下几个指标:
- 建图精度:通过回环检测和实际场景对比评估
- 计算资源占用:使用top命令监控CPU和内存使用率
- 实时性:检查算法处理频率是否跟得上激光雷达数据速率
- 鲁棒性:在快速转弯和复杂场景下的表现
4.3 实测结果分析
经过多次测试,我发现:
- LOAM建图效果最好但计算量最大,适合高性能平台
- LeGO-LOAM对地面特征利用充分,在平坦环境中表现优异
- LIO-SAM融合IMU数据后,在快速运动时更稳定
- A-LOAM代码简洁,适合算法学习和二次开发
建议初学者先从A-LOAM开始,了解基本原理后再尝试其他算法。在实际项目中,如果需要高精度建图,LIO-SAM可能是最佳选择。