You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

是否存在适用于Ardupilot的MAVLink C++ SDK?——非ROS环境下控制Gazebo模拟器中的Ardupilot无人机需求

针对你想用C控制ArduPilot无人机(包括在Gazebo仿真环境中)、替代DroneKit的需求,有几个完全适配ArduPilot的C工具可以选择:

这是最直接、最适配的选择,因为它是ArduPilot项目原生维护的MAVLink实现:

  • 包含了所有ArduPilot支持的MAVLink消息和指令的C++头文件,你可以直接用它来构建自定义的控制逻辑。
  • 支持多种通信方式:UDP/TCP(适合Gazebo仿真,通常用UDP连接到SITL的MAVLink端口)、串口(适合硬件无人机)。
  • 使用步骤:
    1. 从ArduPilot的代码仓库中获取生成好的MAVLink消息头文件(或者用MAVLink官方的消息生成器生成适配ArduPilot的版本)。
    2. 编写C++代码,通过套接字或串口建立连接,发送MAVLink指令(比如MAV_CMD_NAV_TAKEOFF实现起飞),订阅无人机的状态消息(比如ATTITUDEGLOBAL_POSITION_INT)。

2. libmavconn(MAVROS的通信核心库)

虽然MAVROS主要是ROS生态的工具,但它的底层通信库libmavconn可以脱离ROS单独使用:

  • 它封装了MAVLink的通信细节,提供了简洁的C++ API来处理连接、消息发送和接收。
  • 完全兼容ArduPilot的MAVLink协议,支持UDP、TCP、串口等多种传输方式。
  • 你可以基于这个库快速搭建自己的控制程序,不用从头处理MAVLink的序列化/反序列化和通信连接。

如果你需要高度定制化的功能,可以直接使用MAVLink官方的消息生成器:

  • 从MAVLink官方仓库下载生成器,选择ArduPilot使用的消息集(比如ardupilotmega.xml),生成对应的C++代码。
  • 这种方式可以让你只包含自己需要的消息,减少代码体积,同时完全兼容ArduPilot的所有功能。

补充说明

关于你提到的MAVSDK:其实它的基础功能(比如连接、起飞、悬停、位置控制)在ArduPilot上也能正常工作,但部分PX4专属的功能(比如某些自定义指令)无法使用。如果你只需要通用的无人机控制功能,也可以尝试,但如果需要完全适配ArduPilot的所有特性,上面提到的几个工具会更合适。

内容的提问来源于stack exchange,提问作者Roy Amoyal

火山引擎 最新活动