Ubuntu 20.04与ROS Noetic下,从零部署PX4+XTDrone仿真与3D激光SLAM实战
1. 环境准备与一键安装在Ubuntu 20.04系统上搭建PX4XTDrone仿真环境最快捷的方式就是使用官方提供的一键安装脚本。这个脚本会自动帮你完成ROS Noetic、PX4固件、Gazebo 11以及XTDrone仿真环境的安装。我实测下来整个过程大约需要30-60分钟具体时间取决于你的网络速度和硬件配置。执行安装脚本前建议先检查系统架构是否为x86/amd64。打开终端输入uname -m如果显示x86_64就可以继续。脚本运行后会生成三个关键文件夹catkin_wsROS工作空间后续编译SLAM算法都在这里PX4_Firmware包含PX4飞控固件和Gazebo仿真模型XTDrone通信和控制相关脚本这里有个坑要注意脚本会自动将你原有的catkin_ws重命名为catkin_ws_back。如果你之前有重要的ROS工程记得提前备份。安装完成后需要设置环境变量我建议把这些命令加到~/.bashrc里echo source ~/catkin_ws/devel/setup.bash ~/.bashrc echo export GAZEBO_MODEL_PATH~/PX4_Firmware/Tools/sitl_gazebo/models:$GAZEBO_MODEL_PATH ~/.bashrc source ~/.bashrc2. 基础功能验证2.1 仿真环境测试安装完成后先用简单命令验证基础功能是否正常。启动室内仿真环境roslaunch px4 indoor1.launch成功的话你会看到Gazebo界面弹出里面有房屋模型和一台无人机。常见问题是只有房子没有无人机这通常是因为环境变量没配置好。检查PX4_Firmware路径是否正确如果还是不行可以尝试重新编译cd ~/PX4_Firmware make px4_sitl_default gazebo2.2 通信与控制测试新开一个终端先启动通信节点cd ~/XTDrone/communication python multirotor_communication.py solo 0再开第三个终端启动键盘控制cd ~/XTDrone/control/keyboard python multirotor_keyboard_control.py solo 1 vel控制指令很简单按i设置垂直速度按b然后t解锁电机w/s控制前后a/d控制左右s悬停x降落如果无人机能正常起飞和移动说明基础环境搭建成功。我在第一次测试时遇到控制无响应的问题后来发现是通信脚本的机型参数和launch文件不匹配导致的。3. 3D激光SLAM集成3.1 A-LOAM编译与配置现在进入重头戏——集成3D激光SLAM。XTDrone已经提供了A-LOAM的代码我们需要将其复制到ROS工作空间编译cp -r ~/XTDrone/sensing/slam/laser_slam/A-LOAM ~/catkin_ws/src/ cp -r ~/XTDrone/sitl_config/gazebo_plugin/velodyne/* ~/catkin_ws/src/ cd ~/catkin_ws catkin build编译过程中可能会缺少依赖常见的有sudo apt install libeigen3-dev libsuitesparse-dev编译完成后一定要检查环境变量这是最容易出错的地方。如果使用自定义工作空间名称需要相应修改source命令。我建议直接用默认的catkin_ws避免麻烦。3.2 launch文件修改XTDrone提供的launch文件需要根据实际情况调整。主要修改点包括确保world文件路径正确检查无人机模型是否带激光雷达iris_3d_gpu_lidar确认MAVROS的通信端口配置这里有个实用技巧可以先启动基础仿真环境然后用rostopic list查看是否有/iris_0/velodyne_points话题确认激光雷达数据是否正常发布。3.3 完整SLAM流程启动顺序很关键建议按这个步骤首先启动仿真环境roslaunch px4 outdoor1.launch新终端启动A-LOAMroslaunch aloam_velodyne aloam_velodyne_HDL_32.launch转换位姿数据到MAVROScd ~/XTDrone/sensing/slam/laser_slam/script python laser_transfer.py iris 0 aloam最后启动通信和控制节点如果一切正常你应该能在Rviz中看到实时构建的点云地图。我在测试时发现建图效果不稳定后来调整了A-LOAM的scan_registration.cpp中的参数才解决。4. 常见问题排查4.1 环境变量问题90%的问题都出在环境变量上。除了基础的ROS环境还要特别注意export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo可以用echo $ROS_PACKAGE_PATH检查路径是否包含PX4相关目录。4.2 话题通信问题如果SLAM节点收不到激光雷达数据先用rostopic list检查话题列表。常见问题包括激光雷达插件未正确编译无人机模型未加载激光雷达传感器话题命名空间不匹配如/iris_0/velodyne_points4.3 性能优化建议仿真对硬件要求较高如果感觉卡顿可以关闭Gazebo界面gui:false降低激光雷达的扫描频率使用轻量级的世界模型在catkin build时添加-j2参数限制编译线程数这套环境搭建确实会遇到各种问题但一旦跑通就能进行各种无人机自主导航实验。我后来在这个基础上又集成了VINS-Fusion做视觉惯性里程计效果很不错。