Skip to content

PX4 相机架构/集成

本主题简要概述了 PX4 相机支持功能是如何 实现 的。

INFO

有关 使用 相机的信息,请参阅 相机

综述

PX4 集成了三种类型的相机:

所有这些相机都需要响应通过 MAVLink 接收到的或在任务中找到的 MAVLink 命令(具体协议取决于相机类型)。

下面将介绍所使用的总体架构。

除了 将任务中的相机指令重新作为命令发出 之外,PX4 对于 支持相机协议 v2 的 MAVLink 相机 没有特定的处理方式。

地面站需要直接与这些相机进行通信以发送命令。 如果需要,必须配置 PX4 以便在相机和地面站之间路由 MAVLink 通信流量。

INFO

camera_triggercamera_capturecamera_feedback 模块不适用于此类相机。

连接到飞行控制器的相机

连接到飞行控制器输出端口的相机 需要 PX4 激活输出端口以触发相机,并且可能需要 PX4 检测 相机拍摄引脚 是否已被相机热靴触发(以便更准确地记录相机拍摄时间)。

这项工作由三个 PX4 组件处理:camera_trigger 驱动程序camera_capture 驱动程序camera-feedback 模块

camera_trigger 订阅 VehicleCommand 主题,并监控其 支持的命令 的更新情况。 当通过 MAVLink 接收到命令,或者在 任务中到达相机指令位置时,就会发生这些更新。

这些命令用于启用和禁用触发功能,并按时间和距离间隔配置触发。 该驱动程序会跟踪这些间隔,并在需要时触发输出端口。 驱动程序会发布一个 CameraTrigger 主题(feedback 字段设置为 false),这会导致发出 CAMERA_TRIGGER MAVLink 消息。

如果启用了 camera_capture 驱动程序,它会监控相机拍摄引脚,并在触发时发布一个 CameraTrigger 主题(feedback 字段设置为 true),这同样会导致发出 CAMERA_TRIGGER MAVLink 消息。

camera_feedback 模块监控 CameraTrigger 主题的更新,并针对来自 camera_triggercamera_captureCameraTrigger 更新发布一个 CameraCapture 主题。 所使用的信息取决于相机拍摄引脚是否启用以及 CameraTrigger.feedback 字段的值。 这个 CameraCapture 主题会被记录下来,可用于获取拍摄时间。

支持旧版相机协议 v1 的 MAVLink 相机 的集成方式与 连接到飞行控制器的相机 非常相似。

camera_trigger 订阅 VehicleCommand 主题,并监控其 支持的命令 的更新情况。 当通过 MAVLink 接收到命令,或者在 任务中找到相机指令时,就会发生这种情况。

这些命令用于启用和禁用触发功能,并按时间和距离间隔配置触发。 该驱动程序会跟踪这些间隔,但使用 “MAVLink 后端” 时,实际上不需要触发任何输出端口(因为命令会被转发到相机)。 当相机会触发时,驱动程序会发布一个 CameraTrigger 主题(feedback 字段设置为 false),这会导致发出 CAMERA_TRIGGER MAVLink 消息。 然后 camera_feedback 模块应该记录相应的 CameraCapture 主题。

任务中的相机命令

对于所有支持的 相机协议 v2相机协议 v1 命令,PX4 会将任务中找到的相机指令重新作为 MAVLink 命令发出。 发出的命令的系统 ID 与自动驾驶仪的 ID 相同。 命令的组件 ID 可能会有所不同,但通常会发送到 MAV_COMP_ID_CAMERA (100)MAV_COMP_ID_ALL(有关每种情况下使用的 ID,请参阅各个相机文档)。

只要有可用于发送的 MAVLink 通道,无论是否连接了任何类型的相机,都会发出这些命令。

INFO

更一般地说,PX4 会重新发出所有可能被外部 MAVLink 组件(如云台)使用的任务命令。 航路点和条件行为的命令不会被发出。

以下部分突出了代码库中一些值得关注的部分:

任务中支持的命令

任务中支持的命令(包括相机命令)在以下方法中展示:

重新发出任务中相机命令的流程

MAVLink 流代码会监控 VehicleCommand 主题的变化,并通过 MAVLink 发布这些变化。 无论相机是 MAVLink 相机还是连接到飞行控制器的相机,都会发送 MAVLink 命令。

如果启用了 camera_trigger 驱动程序,它也会监控 VehicleCommand 的变化。 如果为连接到飞行控制器输出端口的相机配置了后端,它将适当地触发这些输出端口。

日志

CameraTrigger 发生更新时,会记录 CameraCapture 主题。 记录的主题将取决于相机拍摄引脚是否启用。

请注意,使用 支持相机协议 v2 的 MAVLink 相机 时,不会记录相机拍摄事件,因为相应的触发事件不会在 PX4 内部生成。

另请参阅