免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

PX4 CameraTrigger uORB 消息详解:相机触发信号的定义、生成与消费链路

PX4 CameraTrigger uORB 消息详解:相机触发信号的定义、生成与消费链路 嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载CameraTrigger 是 PX4 飞控中用于发布相机拍摄触发事件的核心 uORB 主题TOPIC 名为camera_trigger它贯穿相机触发驱动的输出、相机热靴反馈的采集以及 MAVLinkCAMERA_TRIGGER消息的下行转发。本文以 docs/en/msg_docs/CameraTrigger.md 中的消息定义为骨架结合 camera_trigger 驱动、camera_capture 驱动、camera_feedback 模块 与 MAVLink 流 的源码实现完整说明该消息的每个字段含义、生产/消费链路以及航测与地理标记geotagging场景下的实际配置方法。CameraTrigger 消息定义总览消息源文件为 msg/CameraTrigger.msg其完整定义如下uint64 timestamp # time since system start (microseconds) uint64 timestamp_utc # UTC timestamp uint32 seq # Image sequence number bool feedback # Trigger feedback from camera uint32 ORB_QUEUE_LENGTH 2消息共包含 4 个数据字段和 1 个队列长度常量原始字段表格见 docs/en/msg_docs/CameraTrigger.md。字段名类型单位/帧说明timestampuint64微秒系统启动以来的时间time since system start由hrt_absolute_time()获取timestamp_utcuint64微秒UTC 时间戳用于事后将航拍照片与地理/时间信息关联sequint32—图像序列号从 0 开始逐次递增用于对齐照片顺序feedbackbool—是否为来自相机的触发反馈Trigger feedback from camera该消息对应的生成头文件为uORB/topics/camera_trigger.h由构建系统从 .msg 自动生成uORB 发布端与订阅端分别使用ORB_ID(camera_trigger)引用该主题。ORB_QUEUE_LENGTH 常量的作用消息定义中uint32 ORB_QUEUE_LENGTH 2为 uORB 主题队列深度常量表示该主题的环形发布队列最多缓存 2 条历史消息。队列深度为 2 意味着即使消费者如 camera_feedback 模块 与 MAVLink 流处理稍慢也仍能读到最近的两条触发事件降低高触发频率下丢事件的概率从源码结构看camera_trigger在定时触发intervalometer模式下以TRIG_INTERVAL为周期持续产生消息较短队列深度配合快速消费端即可满足需求避免不必要的内存占用。谁在发布 CameraTrigger两种生产者从 PX4 Camera Architecture/Integration 的架构说明可以看出CameraTrigger主题存在两类生产者二者的区分标志正是feedback字段。生产者一camera_trigger 驱动指令侧触发feedbackfalsecamera_trigger 驱动 订阅VehicleCommand主题响应四类 MAVLink 触发命令MAV_CMD_DO_TRIGGER_CONTROL使能/暂停触发、复位序列号MAV_CMD_DO_DIGICAM_CONTROL单次拍摄MAV_CMD_DO_SET_CAM_TRIGG_DIST距离触发MAV_CMD_OBLIQUE_SURVEY倾斜摄影CAMPOS 模式当按时间间隔或距离阈值判定应触发时驱动通过engage()回调实际驱动相机接口GPIO/PWM/Seagull/MAVLink 后端随后发布camera_trigger消息。关键发布代码camera_trigger.cpp体现了几点实现细节// Send camera trigger message. This messages indicates that we sent // the camera trigger request. Does not guarantee capture. camera_trigger_s trigger{}; if (trig-_pps_hrt_timestamp 0) { // Current RTC time (RTC time captured by the PPS module elapsed time since capture) trigger.timestamp_utc trig-_pps_rtc_timestamp hrt_elapsed_time(trig-_pps_hrt_timestamp); } else { // No PPS capture received, use RTC clock as fallback timespec tv{}; px4_clock_gettime(CLOCK_REALTIME, tv); trigger.timestamp_utc ts_to_abstime(tv); } trigger.seq trig-_trigger_seq; trigger.feedback false; trigger.timestamp hrt_absolute_time(); orb_publish(ORB_ID(camera_trigger), trig-_trigger_pub, trigger); // increment frame count trig-_trigger_seq;该段代码对应的消息字段语义timestamp使用高分辨率定时器hrt_absolute_time()获取精度可达微秒级timestamp_utc优先采用 PPS 捕获模块pps_capture主题提供的 RTC 基准时间加上自捕获以来的流逝时间保证 UTC 时间与真实时刻严格对齐未收到 PPS 时回退到CLOCK_REALTIME系统时钟seq使用驱动内部的_trigger_seq计数器每次发布后自增通过MAV_CMD_DO_TRIGGER_CONTROL的 param2 可复位为 0feedback恒为false表示这是飞控发出了触发请求并不保证相机确实完成了曝光。此外驱动还实现了快门激活时间与最小间隔的防护engage()在距离上次触发不足TRIG_MIN_INTERVA时会直接放弃本次触发camera_trigger.cpp避免过快连拍压垮相机。生产者二camera_capture 驱动热靴反馈侧feedbacktruecamera_capture 驱动 监听飞控上的相机捕获引脚捕获引脚通过将某个 AUX 输出通道功能配置为Camera_Capture功能码 2032来启用见 camera_capture.cpp。当相机热靴实际触发边沿事件时该驱动发布CameraTrigger消息并将feedback置为truefeedback true的消息代表相机确认了拍摄动作可用于校正记录到的真实曝光时刻从而提升地理标记geotagging精度该功能由CAM_CAP_FBACK参数控制开关默认关闭。谁在消费 CameraTriggerMAVLink 转发、反馈与日志MAVLink CAMERA_TRIGGER 消息下行MAVLink 流 CAMERA_TRIGGER.hpp 订阅camera_trigger主题并将其映射为 MAVLink 的CAMERA_TRIGGER消息对外发送。其发送逻辑CAMERA_TRIGGER.hpp/* ensure that only active trigger events are sent and ignore camera capture feedback messages*/ if (camera_trigger.timestamp 0 !camera_trigger.feedback) { mavlink_camera_trigger_t msg{}; msg.time_usec camera_trigger.timestamp; msg.seq camera_trigger.seq; mavlink_msg_camera_trigger_send_struct(_mavlink-get_channel(), msg);两点值得注意feedback true的反馈消息不会被转发为CAMERA_TRIGGERMAVLink 消息即热靴反馈仅用于飞控内部时间校正不会与下行触发消息混淆同一处还会向所有相机组件MAV_COMP_ID_CAMERA起 6 个保留组件 ID发送MAV_CMD_IMAGE_START_CAPTURE与MAV_CMD_DO_DIGICAM_CONTROL指令实现简单 MAVLink 相机的触发协议Camera Protocol v1。camera_feedback 模块生成地理标记用的 CameraCapturecamera_feedback 模块 订阅camera_trigger主题无论feedback为false还是true都会结合全局位置、姿态以及云台姿态生成并发布CameraCapture主题CameraFeedback.cpp其中CameraCapture.timestamp、timestamp_utc、seq直接透传自CameraTrigger额外补充纬度/经度/高度、对地距离、四元数姿态以及result1 表示成功等字段字段定义见 msg/CameraCapture.msg当CAM_CAP_FBACK 1时模块会忽略feedback false的指令侧触发只依据真实的热靴反馈feedback true生成捕获记录CameraFeedback.cpp。CameraCapture会被记录到 ulog 日志见 logged_topics.cpp 中的add_optional_topic(camera_capture)航测完成后即可离线将照片与飞行数据对齐。日志记录camera_trigger与camera_capture均为可选记录主题logged_topics.cpp在正常飞行记录中默认包含便于事后回放分析触发时序。完整数据流从命令到照片结合 camera_architecture.md 与上述源码CameraTrigger消息的完整生命周期如下地面站下达命令或任务中出现相机航点 → navigator 将任务项转为VehicleCommanduORB 消息发布参见 navigator_main.cpp 中publish_vehicle_command的实现camera_trigger驱动订阅VehicleCommand按TRIG_MODE时间/距离/命令模式计算触发时机并驱动 GPIO/PWM 等接口输出触发信号驱动发布CameraTriggerfeedback false→ MAVLink 流将其转为下行CAMERA_TRIGGER消息并转发拍摄指令给相机若启用CAM_CAP_FBACK相机热靴触发后camera_capture驱动发布CameraTriggerfeedback truecamera_feedback模块消费两类消息生成带位置/姿态的CameraCapture供日志记录与地理标记。feedback字段是区分飞控发出触发请求与相机确认完成拍摄的关键信号也是各消费端决定是否采信、是否转发、是否生成捕获记录的核心判据。配套配置参数与模块命令CameraTrigger消息本身只描述事件触发行为由 camera_trigger_params.yaml 中的TRIG_*系列参数决定均在修改后需要重启飞控生效参数默认值说明TRIG_INTERFACE4触发接口1GPIO2Seagull MAP2PWM3MAVLinkCamera Protocol v14通用 PWMIR 触发器/舵机TRIG_MODE0触发模式0禁用1时间触发/命令控制2时间触发/始终开启3距离触发/始终开启4距离触发/命令控制航测模式TRIG_INTERVAL40.0 ms连续两次触发事件的时间间隔范围 4.0–10000.0 msTRIG_MIN_INTERVA1.0 ms相机支持的最小触发间隔范围 1.0–10000.0 ms驱动会以此限速TRIG_DISTANCE25.0 m距离触发模式下触发相机的飞行距离阈值TRIG_ACT_TIME40.0 ms触发引脚保持激活状态的时长范围 0.1–3000 msPWM 模式下最低会被强制到 40 ms以保证 50 Hz PWM 周期内脉冲完整见 camera_trigger.cppTRIG_POLARITY0触发极性0低电平有效1高电平有效仅 GPIO 接口相关TRIG_PWM_SHOOT/TRIG_PWM_NEUTRAL1900 / 1500 µsPWM 接口下触发/中位脉宽输出值相机反馈侧由 camera_capture_params.yaml 中的CAM_CAP_*参数控制如CAM_CAP_FBACK启用反馈、CAM_CAP_MODE/CAM_CAP_EDGE配置捕获引脚触发方式。模块以标准 PX4 驱动方式启动与查询命令入口camera_trigger_main见 camera_trigger.cppcamera_trigger start # 启动触发驱动 camera_trigger status # 打印触发使能/暂停状态、模式、间隔/距离、相机电源与激活时间 camera_trigger test # 触发一张测试图像不记录日志、不转发给地面站 camera_trigger test_power # 切换相机电源 camera_trigger stop # 停止驱动更多相机使用与配置说明可参考 docs/en/camera/index.md 与 fc_connected_camera.md。小结CameraTrigger是 PX4 相机子系统中承上启下的核心消息timestamp与timestamp_utc提供微秒级、可对齐到 UTC 的时刻基准seq维护连续的照片序列号feedback则明确区分触发请求与拍摄反馈两种事件来源。理解该消息的定义与生产/消费链路是掌握 PX4 航拍触发、相机协议转发与航测地理标记数据流的关键一步如需深入可直接阅读 CameraTrigger.msg、camera_trigger.cpp、CAMERA_TRIGGER.hpp 与 CameraFeedback.cpp 等源码文件。赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐如何快速上手tensorrt_demos10个步骤从零开始部署TensorRT模型如何快速上手tensorrt_demos10个步骤从零开始部署TensorRT模型 想要在NVIDIA Jetson平台上快速部署深度学习模型吗tensor嵌入式物联网机器人自动驾驶智能硬件SeleniumBase Desired Capabilities 完全指南远程 Selenium Grid 与云端浏览器配置实战SeleniumBase Desired Capabilities 完全指南远程 Selenium Grid 与云端浏览器配置实战 导读 本文基于 Selen嵌入式物联网机器人自动驾驶智能硬件PX4 uORB 消息 AirspeedValidatedV0 全解析字段语义、数据来源与下游消费链路PX4 uORB 消息 AirspeedValidatedV0 全解析字段语义、数据来源与下游消费链路 airspeed_validated_v0 是 PX4嵌入式物联网机器人自动驾驶智能硬件上一篇react-native-vector-icons 的 FontAwesome Pro Duotone Thin 字体包从 0.1.0 到 1.1.2 的演进、安装与使用指南下一篇Dgraph数据迁移后性能对比全面基准测试结果与优化指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表