是否存在适用于Ardupilot的MAVLink C++ SDK?——非ROS环境下控制Gazebo模拟器中的Ardupilot无人机需求
适用于ArduPilot的MAVLink C++ SDK推荐
针对你想用C控制ArduPilot无人机(包括在Gazebo仿真环境中)、替代DroneKit的需求,有几个完全适配ArduPilot的C工具可以选择:
1. ArduPilot官方MAVLink C++库
这是最直接、最适配的选择,因为它是ArduPilot项目原生维护的MAVLink实现:
- 包含了所有ArduPilot支持的MAVLink消息和指令的C++头文件,你可以直接用它来构建自定义的控制逻辑。
- 支持多种通信方式:UDP/TCP(适合Gazebo仿真,通常用UDP连接到SITL的MAVLink端口)、串口(适合硬件无人机)。
- 使用步骤:
- 从ArduPilot的代码仓库中获取生成好的MAVLink消息头文件(或者用MAVLink官方的消息生成器生成适配ArduPilot的版本)。
- 编写C++代码,通过套接字或串口建立连接,发送MAVLink指令(比如
MAV_CMD_NAV_TAKEOFF实现起飞),订阅无人机的状态消息(比如ATTITUDE、GLOBAL_POSITION_INT)。
2. libmavconn(MAVROS的通信核心库)
虽然MAVROS主要是ROS生态的工具,但它的底层通信库libmavconn可以脱离ROS单独使用:
- 它封装了MAVLink的通信细节,提供了简洁的C++ API来处理连接、消息发送和接收。
- 完全兼容ArduPilot的MAVLink协议,支持UDP、TCP、串口等多种传输方式。
- 你可以基于这个库快速搭建自己的控制程序,不用从头处理MAVLink的序列化/反序列化和通信连接。
3. 自定义基于官方MAVLink C++生成器的实现
如果你需要高度定制化的功能,可以直接使用MAVLink官方的消息生成器:
- 从MAVLink官方仓库下载生成器,选择ArduPilot使用的消息集(比如
ardupilotmega.xml),生成对应的C++代码。 - 这种方式可以让你只包含自己需要的消息,减少代码体积,同时完全兼容ArduPilot的所有功能。
补充说明
关于你提到的MAVSDK:其实它的基础功能(比如连接、起飞、悬停、位置控制)在ArduPilot上也能正常工作,但部分PX4专属的功能(比如某些自定义指令)无法使用。如果你只需要通用的无人机控制功能,也可以尝试,但如果需要完全适配ArduPilot的所有特性,上面提到的几个工具会更合适。
内容的提问来源于stack exchange,提问作者Roy Amoyal




