从零搭建ROS-Gazebo仿真环境:以Husky机器人为例实践多SLAM算法评估 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算法LOAMLidar 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版本新版本可能会有兼容性问题。安装GTSAMgit 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-SAMmkdir -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-LOAMLOAM的简化实现A-LOAM是港科大实现的简化版LOAM代码更简洁但性能不打折。安装前需要先装Ceres Solver这里有个小技巧安装前确保系统有glog库。安装Ceres Solversudo 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可能是最佳选择。