前言
本教程基于 ROS2,在搭建之前,需要把 ROS2、QGC 等基础环境安装配置完成。本次安装是以 px4 v1.14.0 为例,不适用之前的 px4 版本。
我的配置如下:
虚拟机 Ubuntu 22.04 (运行内存 4G、硬盘内存 80G) 、ROS2 Humble 。
建议:大部分命令都有先后顺序,上一个命令执行成功后才能执行下一个。对于不熟悉的命令建议查阅官方文档或 AI 辅助学习。建议使用虚拟机进行开发,利用快照功能保存当前状态,以便出现问题时快速回滚。网络下载资源时若速度较慢,可尝试多次执行命令或更换源。
1. 准备
1.1 下载 PX4 源码
从 Github 上下载:
sudo apt install git
git clone https://github.com/PX4/PX4-Autopilot.git # 下载源码
mv PX4-Autopilot PX4_Firmware # 更改目录名
cd PX4_Firmware
git checkout v1.14.0 # 切换版本
git submodule update --init --recursive # 更新子模块
1.2 安装仿真依赖
sudo apt install ros-dev-tools
cd ~/PX4_Firmware/Tools/setup
chmod +x ubuntu.sh
./ubuntu.sh --no-nuttx --no-sim-tools
说明:脚本执行时间跟个人网络有关。
--no-nuttx表示不安装交叉编译环境(如需自己编译飞控固件烧录则需安装),--no-sim-tools表示不安装仿真环境。安装完成后,重启 Ubuntu。
1.3 安装 Gazebo
Gazebo 是一款强大的 3D 仿真软件,主要用于机器人学的研究和开发。它提供了高度逼真的物理模拟环境,包括动力学、碰撞检测、传感器模型等。
Ubuntu 22.04 及以后的版本支持 Gazebo (原 Gazebo Ignition)。旧版 Gazebo Classic 已停止维护。
cd ~/PX4_Firmware/Tools/setup
./ubuntu.sh --no-nuttx # 这一步会安装仿真环境依赖,包括 gazebo
再运行一下 gazebo :
gz sim
成功后再重启 Ubuntu。
2. 安装 Micro XRCE-DDS Agent
在 ROS2 中 PX4 使用 uXRCE-DDS 中间件来允许在配套计算机上发布和订阅 uORB 消息,就像它们是 ROS2 话题一样。这提供了 PX4 和 ROS2 之间快速可靠的集成。
- 下载源码:
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
- 编译:
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
注意:
make的时候还会额外下载代码,跟个人网速有关,大概要 10-20 分钟。
如果出现错误:
![图片描述]
build 目录下执行下面命令,改完后再重新 make:
sed -i 's/checkout 2\.12\.x --/checkout v2.12.1 --/' ./fastdds/tmp/fastdds-gitclone.cmake
也可以用文本编辑器打开 fastdds-gitclone.cmake 文件,将 2.12.x 改为 v2.12.1 就行。
- 安装:
sudo make install
sudo ldconfig /usr/local/lib/ # 更新动态链接器的缓存
3. 编译 PX4
cd ~/PX4_Firmware
make px4_sitl gz_x500 # 这步可能有点慢
出现编译成功提示即表示成功。
常见问题:
-
OpenGL 版本降低错误:如果在虚拟机中遇到 OpenGL 相关错误,这是由于开启了 3D 图形加速导致系统的
OpenGL版本降低。参考 PX4 官方 Issue 解决方法,降低仿真使用的渲染引擎的版本。 打开文件:gedit ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator修改前:
if [ -z "${HEADLESS}" ]; then # HEADLESS not set, starting gui ${gz_command}${gz_sub_command} -g & fi修改后:
if [ -z "${HEADLESS}" ]; then # HEADLESS not set, starting gui ${gz_command}${gz_sub_command} -g --render-engine ogre & fi -
gz_bridge 启动超时:如果编译过程中出现类似
ERROR [gz_bridge] Service call timed out的错误,可能是gz_bridge启动超时。请参考相关技术社区解决方案调整参数后重新编译。
4. 通信测试
打开一个终端,启动 MicroXRCEAgent:
MicroXRCEAgent udp4 -p 8888
打开另一个终端,启动仿真:
cd ~/PX4_Firmware
make px4_sitl gz_x500
都启动后,可以看到通信成功。
5. 官方 offboard 程序
- 创建工作空间:
mkdir -p ~/ros2_ws/src
- 下载源码:
cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git -b release/1.14
git clone https://github.com/PX4/px4_ros_com.git -b release/v1.14
- 编译:
cd ~/ros2_ws
colcon build
- 更新环境:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc # 使环境生效
6. offboard 测试
先启动 QGC,然后执行下面命令。
- 终端一,启动 MicroXRCEAgent:
MicroXRCEAgent udp4 -p 8888
- 终端二,启动仿真:
cd ~/PX4_Firmware
make px4_sitl gz_x500
- 终端三,启动官方 offboard 案例(上升 5 米):
ros2 run px4_ros_com offboard_control
注:如果过了一段时间,无人机无法 offboard 起飞,程序都正常启动,这时可以尝试重新编译并 source 环境后再测试。
至此 PX4 无人机基本仿真环境就搭建完成了,大家可以基于此来拓展自己的仿真。
参考
ROS 2 用户指南 | PX4 Guide PX4 ROS 2 User Guide v1.14 PX4 documentation uXRCE-DDS Ubuntu Development Environment


