了解PX4
前言搭建PX4仿真环境对于纯小白来说是一个有挑战性的过程,我在搭建PX4仿真环境的时候,不知道Linux、ROS、git,语言也只会一个C语言,没有任何无人机基础,纯小白一个,靠着自学与网上的各种教程,花了一两个月才搭好基本的仿真环境框架。那时候还是古法编程的时代,没有现在AI编程这么方便。
概念介绍
在搭建环境之前还是希望大家能看看这些概念,避免大家概念模糊。
- PX4
所谓无人机的飞控,就是无人机的飞行控制系统。无人机飞控能够稳定无人机飞行姿态,并能控制无人机自主或半自主飞行,是无人机的大脑。而PX4是自动驾驶仪软件(或称为固件),基于Nuttx实时操作系统开发的,可以驱动无人机或无人车。它是Pixhawk 的原生固件,虽然起步比APM晚。它与地面站(地面控制站)在一起组成一个完全独立的自动驾驶系统。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考文档 (这里建议可以多看看)。(最近几年为了跟上人工智能的潮流,官方也添加了端到端学习的特性,不过还在实验中)
- QGC
QGC地面站是Dronecode地面控制站称为QGC地面站 。它是基于 Qt 开发的。如果使用的是 PX4固件 ,建议使用QGC地面站 。使用者可以用QGroundControl将PX4固件加载(烧写)到飞行器控制硬件上,可以设置飞行器,更改不同参数,获取实时飞行信息以及创建和执行完全自主的任务,如航点规划等。QGroundControl是跨平台的,可以在Windows,Android,MacOS或Linux上运行。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考文档
- MAVSDK
MAVSDK 基于Mavlink协议的sdk包,可以使机载电脑与MAVLink协议兼容的无人机通信,从而控制无人机。多用于PX4固件 ,它最初是使用C++写的,经过发展,现在已经支持Python、Java、C#、Rust、Swift、Go、JavaScript,适合多平台开发。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考 文档
- APM
Ardupilot Mega或称为APM 也是一款自驾仪软件,是早在2007年由DIY无人机社区(DIY Drones)推出的飞控产品。APM刚开始是基于Arduino的开源平台,后来软件代码不断状大,原来的硬件不能胜任最新代码,再后来开发者就把Ardupilot代码转移到了Pixhawk平台上,基于Nuttx实时操作系统,兼容了Pixhawh硬件平台。目前主要是支持的5种设备的目录包括ArduPlane(固定翼)、ArduCopter(直升机/多旋翼)、APMrover2、AntennaTracker、ArduSub。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考文档 。
- MP
Misson Planner简称MP ,是Windows 平台运行的一款APM/PIX的专属地面站,基于 C# 开发的,对于Windows 兼容更好,其他平台也可以运行,但兼容性不是很好。如果使用 APM固件 ,建议使用MP地面站 。它的基本功能与 QGC 是一样的,虽然功能强大多样,但是太冗余。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考文档
- Dronekit
DroneKit 是一款Python语言的无人机开发库,同样基于Mavlink协议,可以对使用MAVLink通讯协议的ArduPilot和PX4无人机进行控制,多用于ArduPilot固件 。它最初是使用Python编写的,后面也支持了Java,跨平台性没有MAVSDK好,但个人觉得更容易上手。它是一个在GitHub上开源的一个项目,项目地址 ,还有官方参考 文档
- MAVROS
MAVROS是一个ROS(Robot Operating System)软件包 ,它提供了一组ROS节点,可以将ROS系统与MAVLink协议兼容的无人机(例如Pixhawk)集成在一起,支持ROS1和ROS2,所以不管是什么固件,只要是支持MAVLink协议,都可以用MAVROS。通过MAVROS,ROS系统可以与无人机通信,接收和发送MAVLink消息,控制无人机的姿态、速度和位置等。MAVROS也提供了许多其他功能,例如姿态解算、飞行模式切换、航点导航和状态反馈等。
MAVROS的设计旨在使它易于与ROS系统集成,它提供了一组简单的ROS服务和ROS消息,可以用于机载电脑与无人机进行通信和控制无人机 ,实现无人机的自主飞行。此外,MAVROS还提供了一组C++ API和Python API,使开发人员可以轻松地编写自己的ROS节点,使用MAVLink协议控制无人机。项目地址 文档
- Micro XRCE-DDS Agent
Micro XRCE-DDS Agent 是一个实现了 OMG(对象管理组织)DDS-XRCE 标准协议的软件包,用C++开发的。它提供了一个高性能的代理服务器,可以将极度资源受限的设备(如微控制器)与 DDS(数据分发服务)生态系统无缝集成在一起。所以不管是什么硬件平台,只要运行了 Micro XRCE-DDS Client 库,都可以通过 Agent 接入 DDS 网络。**它是 micro-ROS(ROS 2 官方微控制器扩展)的默认中间件,也是 PX4 等主流无人机飞控系统与 ROS 2 通信的标准桥梁。**通过 Micro XRCE-DDS Agent,资源受限设备可以像标准 DDS 参与者一样,在 DDS 全局数据空间中发布和订阅主题,执行远程过程调用(RPC)。Micro XRCE-DDS Agent 也提供了许多其他功能,例如客户端连接管理、DDS 实体代理创建、多传输协议支持、消息路由和状态反馈等。
Micro XRCE-DDS Agent 的设计旨在使它易于与 DDS 和 ROS 2 系统集成,它提供了一组简单易用的命令行接口(CLI),可以用于快速部署和配置通信链路,实现微控制器与上位机或机载电脑之间的实时数据交换。此外,Micro XRCE-DDS Agent 还提供了 C++ API,使开发人员可以轻松地编写自定义的 Agent 应用程序,满足特定的通信需求。项目地址 官方文档
环境建议
大家安装的时候可能会碰到跟教程的步骤一样但是运行出错的问题,这大概率就是环境问题,只要环境选好了,就会少很多麻烦。
-
Ubuntu:
对于新手直接用在虚拟机里装 ubuntu 就可以,或者对于命令行操作很熟练也可以用WSL。如果后续对仿真的性能有要求,可以在自己的笔记本上装双系统,或者组个Linux主机也行。至于 ubuntu 的版本推荐 20.04(ROS1 noetic) 和 22.04(ROS2 humble) 。PX4 官方目前的最新稳定版是 v1.17.0,可以支持 ubuntu 24.04 ,并不是说新版 PX4就不支持 20.04+ROS1 仿真了,实测使用起来毫无压力。对于新手来说,现在 ROS2 的一些资料不如 ROS1 多,大家可以根据自己需要自行选择。
-
依赖安装:
在正式安装之前还需要安装很多依赖,官方也提供了一个安装脚本,里面包括需要的 python包、软件库、交叉编译器,gazebo等 ,脚本会根据你的 ubuntu 的版本自行选择安装。建议大家使用他提供的脚本就行,使用方法可以看这篇文章

ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建
-
交叉编译器:
交叉编译器可以将宿主机上的程序编译后,能够在目标机上运行。一般是在 x86架构 的平台上写好程序,然后用交叉编译器编译,再将可执行文件烧到 arm架构 的平台上。如果想自己编译飞控固件烧到飞控上,就需要安装交叉编译器。
参考
Introduction · MAVSDK Guide (mavlink.io)
DroneKit-Python’s documentation
Plane documentation (ardupilot.org)
PX4(Pixhawk)和Audupilot(APM)的区别与联系
ArduPilot与Pixhawk什么关系? - 知乎 (zhihu.com)
3 个帖子 - 3 位参与者