0

我正在尝试通过 3DR Radio Telemetry 将 Mavlink(安装在 RPi 上)与 QGroundControl 连接,以便在不依赖 Ardupilot/Px4 飞行控制器的情况下从 RPi 传输遥测数据。我想用mavlink的消息格式实现GPS或Postion等数据的传输,不依赖ardupilot/PX4。

到目前为止,我已经从mavlink git 中获取了示例代码,并按照说明构建了代码。我启动 QGroundControl 并能够从 QGC 接收系统 ID 和组件 ID。我修改了代码以将心跳从 RPI-mavlink 传输到 QGroundControl。

mavlink_msg_heartbeat_pack(system_id, 200, &msg, MAV_TYPE_HELICOPTER, MAV_AUTOPILOT_GENERIC, MAV_MODE_GUIDED_ARMED, 0, MAV_STATE_ACTIVE);

int len_hb = write_message(msg);

构建并执行此代码后,我期待 QGroundControl 连接/显示收到的消息,但 QGroundControl 没有任何可用的信息。

我需要了解我正在做的事情是否正确,或者是否有预定义的方法来建立这种沟通。请帮助我提供可用于在没有 ardupilot/Px4 的情况下完成消息传输的文档(如果有)。如果有人可以在这个问题上指导我,那将非常有帮助。

谢谢

4

2 回答 2

1

如果您使用 RPi,则不需要 3DR 无线电遥测。您可以通过 WiFi 或 LTE 连接 RPi 以发送/接收 Mavlink 数据。你需要:

  1. 将 RPi 连接到飞控
  2. 在 QGroundControl 中设置 Mavlink 端口,让飞控将数据发送到遥测端口;
  3. mavlink-router安装到RPI;
  4. 设置mavlink-router发送数据到地面站
  5. 当你可以在地面站接收到mavlink数据时,你使用pymavlink发送mavlink消息。有一个示例代码
于 2020-12-01T13:06:30.897 回答
0

如果我正确理解了这个问题,那么您要做的是使用树莓派开发自己的飞行控制器。并且,您希望它在 QGC 中被检测为车辆。

您从 mavlink 存储库中引用的示例代码在地面站上用于接收来自飞行控制器的消息并向其发送命令消息。但是,您正在尝试从飞行控制器向地面站发送消息。

您首先要做的是继续以 1Hz 的速率发送心跳消息,如mavlink 文档页面上的心跳微服务中所述。如果 QGroundControl 接收到来自车辆的心跳,我猜它会检测到车辆持续大约 5 秒。之后您还必须继续以 1Hz 的频率发送心跳,否则即使您正在向其发送其他 mavlink 消息,QGC 也会显示通信丢失。

最重要的是,有许多 mavlink 消息对于不同的飞行控制器可以有不同的解释。因此,在某些时候,您要么必须在一定程度上将您的代码与现有的飞行控制器相匹配,要么您将不得不修改 QGC 以适应您实现飞行控制器的方式。

于 2021-06-18T15:39:30.817 回答