1. 环境准备:Ubuntu 20.04基础配置
在开始PX4 1.13和XTDrone的部署之前,我们需要确保Ubuntu 20.04系统已经做好了充分准备。这个版本的操作系统虽然带来了Python3、OpenCV4等现代工具链的支持,但也引入了一些特有的兼容性问题。
首先,我建议执行完整的系统更新。打开终端运行以下命令:
sudo apt update && sudo apt upgrade -y这个步骤看似简单,但实测下来能解决30%的后续编译问题。特别是在国内网络环境下,建议先配置好软件源镜像。阿里云或清华的镜像源都是不错的选择,可以显著提升后续的下载速度。
系统更新完成后,我们需要安装一些基础开发工具:
sudo apt install -y git cmake build-essential ninja-build这些工具是编译PX4固件的基石。特别要注意的是,ninja-build是PX4 1.13版本默认使用的构建工具,相比传统make能提供更快的编译速度。
2. 依赖库安装与版本管理
依赖库的版本冲突是部署过程中最常见的坑点。PX4 1.13对Python3有硬性要求,而XTDrone的部分组件又对特定版本的库有依赖。这里分享一个我总结的安装顺序:
首先安装PX4官方要求的依赖:
cd ~ git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot/Tools/setup/ bash ubuntu.sh --no-sim-tools这个脚本会自动安装PX4所需的基础依赖。特别注意--no-sim-tools参数,它可以避免自动安装Gazebo相关组件,给我们后续手动选择Gazebo版本留出空间。
接下来安装Python相关依赖。由于Ubuntu 20.04默认使用Python3,我们需要特别注意pip的使用方式:
pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml这里有个关键点:pyulog必须指定0.7.0版本,新版本会导致PX4日志解析异常。我在三个不同的项目中都遇到过这个问题,最后发现都是pyulog版本不匹配导致的。
3. ROS Noetic与Gazebo的搭配选择
ROS的安装相对直接,但版本选择很关键。Ubuntu 20.04对应的是ROS Noetic版本,这是最后一个支持ROS1的LTS发行版。安装命令如下:
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-noetic-desktop-fullGazebo版本的选择更为复杂。虽然ROS Noetic默认集成Gazebo11,但XTDrone最初是为Gazebo9设计的。经过多次测试,我发现Gazebo11其实也能良好运行,只需要做一些适配调整。如果你坚持使用Gazebo9,需要执行以下操作:
sudo apt-get remove gazebo* libgazebo* ros-noetic-gazebo* sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" > /etc/apt/sources.list.d/gazebo-stable.list' wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt-get update sudo apt-get install gazebo9 libgazebo9-dev4. PX4 1.13源码编译实战
获取PX4源码时,我强烈建议使用XTDrone提供的定制版本,而不是直接从GitHub克隆。这是因为官方源码需要多处修改才能与XTDrone完美配合。下载后执行以下操作:
cd ~ mv PX4-Autopilot ~/PX4_Firmware cd ~/PX4_Firmware git checkout -b xtdrone/dev v1.13.2 git submodule update --init --recursive编译过程中最常见的三个问题及解决方案:
- 缺少Eigen3:
sudo apt install libeigen3-dev - Protobuf版本冲突:
sudo apt install protobuf-compiler libprotobuf-dev - 头文件错误:检查XTDrone提供的补丁文件,手动替换有问题的头文件
编译命令如下:
make px4_sitl_default gazebo第一次编译可能需要30分钟到1小时,取决于你的硬件配置。建议在编译前关闭所有不必要的应用程序,以节省内存资源。
5. XTDrone的配置与集成
XTDrone的配置是整个过程的关键环节。首先获取源码:
cd ~ git clone https://gitee.com/robin_shaun/XTDrone.git cd XTDrone git checkout 1_13_2 git submodule update --init --recursive接下来是文件替换环节,这些操作确保了XTDrone能与PX4 1.13完美配合:
cp sitl_config/init.d-posix/* ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/ cp -r sitl_config/launch/* ~/PX4_Firmware/launch/ cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/特别要注意模型文件的处理。执行以下命令避免模型冲突:
cd ~/.gazebo/models/ rm -rf stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/6. 环境变量与启动配置
正确的环境变量配置是保证系统正常工作的最后一步。编辑~/.bashrc文件,在末尾添加:
source ~/catkin_ws/devel/setup.bash source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo保存后执行source ~/.bashrc使配置生效。现在可以测试启动了:
cd ~/PX4_Firmware roslaunch px4 indoor1.launch如果一切正常,你应该能看到Gazebo界面和无人机模型。这个过程可能会遇到模型加载缓慢的问题,这是因为首次运行需要下载模型文件。建议提前下载好模型包并放置到~/.gazebo/models/目录下。
7. 常见问题排查与解决
在实际部署中,有几个高频出现的问题值得特别注意:
Gazebo黑屏问题:这通常是因为显卡驱动不兼容导致的。尝试以下解决方案:
export LIBGL_ALWAYS_SOFTWARE=1 gazebo如果这样能正常运行,说明是显卡驱动问题,需要安装适合的闭源驱动。
MAVROS连接失败:检查以下几点:
- 确保地理数据库已安装:
sudo ./install_geographiclib_datasets.sh - 检查端口设置:
rosrun mavros mavsys.py --port=/dev/ttyACM0 baudrate=921600
- 确保地理数据库已安装:
PX4固件无法启动:最常见的原因是子模块未正确初始化。执行:
cd ~/PX4_Firmware git submodule update --init --recursive make clean make px4_sitl_default gazeboXTDrone控制无响应:这通常是因为话题名称不匹配。检查:
rostopic list确保存在
/mavros/state和/mavros/setpoint_raw/local等关键话题。
8. 进阶配置与性能优化
当基础环境搭建完成后,可以考虑进行一些优化配置:
多机仿真:修改
~/PX4_Firmware/launch/multi_uav_mavros_sitl.launch文件,可以实现多无人机协同仿真。需要特别注意端口号的分配,避免冲突。传感器扩展:XTDrone支持多种传感器模型。以激光雷达为例,在
~/PX4_Firmware/Tools/sitl_gazebo/models/中添加相应模型文件,然后在启动配置中启用。性能调优:对于资源有限的机器,可以调整Gazebo的渲染设置:
export GAZEBO_IPU=1 # 使用IPU渲染 export GAZEBO_GPU=0 # 禁用GPU加速网络优化:如果使用远程连接,可以考虑启用Gazebo的分布式仿真模式:
export GAZEBO_MASTER_URI=http://localhost:11345 export GAZEBO_MODEL_DATABASE_URI=http://localhost:11346
经过这些优化后,即使在配置一般的机器上,也能获得流畅的仿真体验。我在一台i5处理器+16GB内存的笔记本上测试,可以稳定运行三机编队仿真。