news 2026/10/5 1:52:55

QGroundControl 飞行视图相机工具(Camera Tools)完全指南:拍照、录像与相机配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QGroundControl 飞行视图相机工具(Camera Tools)完全指南:拍照、录像与相机配置
  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载

本文以 QGroundControl 用户指南中的 Camera Tools 文档 为核心骨架,结合仓库内相机控制与视频管理的真实源码实现,系统讲解飞行视图(Fly View)中相机工具的完整能力:如何拍摄静态照片、录制视频、通过面板配置相机参数,以及视频流页面的启用、显示与本地录制。读完本文,你将掌握从连接相机、识别相机能力到完成拍照、录像、参数配置的完整操作链路,并理解这些操作在底层如何通过 MAVLink 命令落地。

一、相机工具能做什么

QGroundControl 的相机工具(Camera Tools)是飞行视图内的一个核心功能区,用于三件事:

  1. 拍摄静态图像(Still Image)——单击拍照,或按设定时间间隔进行定时连拍(Time Lapse);
  2. 录制视频(Video)——开始/停止机载录像,或在地面站本地录制视频流;
  3. 配置相机(Configure Camera)——通过面板齿轮图标打开配置项,调整曝光、白平衡、分辨率等参数。

需要特别强调的是:相机捕获与配置选项完全取决于当前连接的相机,不是所有选项在所有相机上都会出现。这也是理解相机工具的第一原则。

二、相机能力由连接方式决定

QGC 支持的相机接入方式有两类,能力差异明显:

  • 简单机载相机(Simple autopilot-connected camera):只暴露最基本的功能,配置项有限;
  • 支持 MAVLink Camera Protocol 的相机:QGC 可以额外使用该协议提供的所有服务。例如,若相机支持视频模式,你就可以在静态拍摄与视频模式之间切换,并开始/停止录制。

这套能力路由在 src/Camera/VehicleCameraControl.cc 中有清晰的实现痕迹:takePhoto()会先检查_mavlinkCameraInfo.flags(如CAMERA_CAP_FLAGS_CAPTURE_IMAGE、CAMERA_CAP_FLAGS_CAPTURE_VIDEO、CAMERA_CAP_FLAGS_CAN_CAPTURE_VIDEO_IN_IMAGE_MODE),据此决定走 MAVLink 命令路径还是降级路径;startVideoRecording()中同样以CAMERA_CAP_FLAGS_CAPTURE_VIDEO标志判断是发送MAV_CMD_VIDEO_START_CAPTURE还是直接调用本地VideoManager录制(VehicleCameraControl.cc#L527-L541)。

三、相机配置面板:齿轮图标与 Camera Definition File

配置面板通过面板上的齿轮图标打开。面板中展示的大多数设置项并非写死在地面站里,而是由相机自己定义的——它们来自相机的MAVLink Camera Definition File(相机定义文件)。也就是说,相机厂商把「我有哪些参数、每个参数有哪些取值」以 XML 形式发布,QGC 读取后动态生成配置界面。

仓库中提供了一个完整的示例定义文件:src/Camera/camera_definition_example.xml,其结构如下:

  • <definition>:相机型号与厂商(示例中为 Super Dupper Industries 的 SD II);
  • <parameters>:一组<parameter>定义,每个参数含name、type(如uint32、float、bool)、default值和<options>枚举项;
  • 参数之间存在联动约束(<exclusions>与<parameterranges>),例如:
    • CAM_MODE设为 Photo(value=0)时,排除视频类参数CAM_VIDRES、CAM_VIDFMT、CAM_AUDIOREC;
    • 设为 Video(value=1)时,排除照片类参数CAM_PHOTOFMT、CAM_PHOTOQUAL、CAM_PHOTORES,且CAM_ISO只保留部分档位(camera_definition_example.xml#L8-L38);
  • 示例中还定义了 ISO、曝光补偿、快门速度、光圈、白平衡、测光模式、色彩模式、照片/视频分辨率、图像格式(Jpeg/Raw/Jpeg+Raw)等常见项(camera_definition_example.xml#L39-L245);
  • <videostreams>可声明多个视频流(如可见光 + 热成像),exclusive="0"表示各流可同时运行,exclusive="1"表示用户只能选择其一(camera_definition_example.xml#L247-L259);
  • <localization>用于多语言显示,运行时将原始描述替换为对应语言翻译(camera_definition_example.xml#L260-L299)。

四、末尾的硬编码通用设置

与相机定义文件动态生成的参数不同,配置面板末尾的几个通用设置是 QGC 硬编码的,对所有相机几乎都可用:

设置项可选值说明
Photo ModeSingle / Time Lapse单张拍摄或定时连拍
Photo Interval(仅 Time Lapse 时显示)相邻两张照片的间隔秒数
Reset Camera Defaults—向相机发送重置命令,恢复出厂默认设置
Format(storage)—格式化相机存储卡

这些设置对应 src/Camera/VehicleCameraControl.cc 中的真实实现:

  • Photo Mode / Photo Interval:setPhotoCaptureMode()与setPhotoLapse()将选择持久化到QSettings(键分别为kPhotoMode与kPhotoLapse),并在拍照时读取(VehicleCameraControl.cc#L378-L394);
  • Reset Camera Defaults:resetSettings()发送MAV_CMD_RESET_CAMERA_SETTINGS命令,参数1表示执行重置(VehicleCameraControl.cc#L628-L639);
  • Format:formatCard(id)发送MAV_CMD_STORAGE_FORMAT,参数依次为存储 ID(1为第一张卡,2为第二张)与1(执行格式化)(VehicleCameraControl.cc#L641-L654)。

一个值得注意的实现细节:执行重置或格式化期间,_resetting标志会阻止其他拍摄/录制操作,避免并发冲突。

五、拍照:从单击快门到定时连拍

takePhoto()是拍照的入口(VehicleCameraControl.cc#L440-L487),其行为按相机能力分两条路径:

  1. MAVLink 路径(相机支持CAMERA_CAP_FLAGS_CAPTURE_IMAGE,且当前不在视频模式、或支持拍照模式下录像):发送MAV_CMD_IMAGE_START_CAPTURE,参数含义为——
    • 参数 1:相机编号(0表示所有相机);
    • 参数 2:连拍间隔秒数(_photoLapse;单张模式下为0,被忽略);
    • 参数 3:总拍摄张数(定时连拍时为_photoLapseCount,0表示不限张数)。
  2. 本地降级路径:不支持 MAVLink 拍照的相机,单张模式直接调用VideoManager::instance()->grabImage()抓取视频帧作为照片;定时连拍在这种相机上不支持,QGC 会弹窗提示。

定时连拍进行中,可调用stopTakePhoto()发送MAV_CMD_IMAGE_STOP_CAPTURE提前结束序列(VehicleCameraControl.cc#L489-L511)。

拍照/录像模式之间的切换由toggleCameraMode()完成:当前为 Photo/Survey 模式则切到 Video,当前为 Video 模式则切回 Photo(VehicleCameraControl.cc#L414-L423);若相机定义文件中有CAM_MODE参数则直接写参数值,否则发送MAV_CMD_SET_CAMERA_MODE(0:photo,1:video)。

六、视频录制:机载录制与本地录制

startVideoRecording()/stopVideoRecording()同样区分两条路径(VehicleCameraControl.cc#L513-L572):

  • 相机支持CAMERA_CAP_FLAGS_CAPTURE_VIDEO时,发送MAV_CMD_VIDEO_START_CAPTURE/MAV_CMD_VIDEO_STOP_CAPTURE,将录制指令交给机载相机/飞控;
  • 否则,调用VideoManager::instance()->startRecording()/stopRecording(),由 QGC 在地面站本地对收到的视频流进行编码落盘。

每次操作前,QGC 都会检查_resetting状态与当前的captureVideoState(Idle/Capturing/Disabled),避免重复开始或无效停止。视频流本身在 src/VideoManager/VideoManager.cc 中管理,通过aspectRatio()等属性向界面暴露视频宽高比信息(VideoManager.cc#L409-L423)。

七、视频流页面(Video Stream)

视频流页面(页面锚点#video_instrument_page)用于启用/禁用视频流。启用之后,你可以进行以下操作:

  1. 开始/停止视频流:在页面内切换视频流的接收与停止;
  2. 启用网格叠加层(Grid Overlay):在视频画面上叠加网格线,便于目视对齐航线或目标;
  3. 更改图像适配屏幕的方式:控制视频画面如何填充显示区域;
  4. 用 QGC 本地录制视频:将收到的视频流直接录制到地面站本地磁盘。

7.1 视频显示的底层配置

视频显示相关的所有设置都在 src/Settings/Video.SettingsGroup.json 中定义,关键项包括:

配置项类型默认值说明
videoSourcestring空视频流来源:UDP、TCP、RTSP 或 UVC 相机
udpUrlstring0.0.0.0:5600UDP 视频流绑定地址与端口
rtspUrlstring空RTSP 视频流地址,如rtsp://192.168.42.1:554/live
tcpUrlstring空TCP 视频流地址与端口
aspectRatiofloat1.777777视频宽高比(宽/高),设为 0 表示自动探测
gridLinesboolfalse是否在视频视图上叠加网格线
videoFituint321画面适配方式(见下表)
showRecControlbooltrue是否在界面显示录制控制按钮
recordingFormatuint322本地录制文件格式:2=mp4、1=mov、0=mkv
maxVideoSizeuint3210240 MB(移动端 2048)视频录制最大占用磁盘空间
enableStorageLimitboolfalse(移动端 true)超限时自动删除最旧录像
streamEnabledbooltrue视频流默认启用开关
disableWhenDisarmedboolfalse解锁(disarmed)时关闭视频流以节省带宽
lowLatencyModeboolfalse关闭 RTP 播放缓冲与重传恢复以降低延迟

其中videoFit的四种适配模式(Video.SettingsGroup.json#L68-L76):

枚举值含义
0Fit Width(按宽度适配)
1Fit Height(按高度适配,默认)
2Fill(填满画面,可能裁切)
3No Crop(不裁切)

这些设置在 QML 界面中的实际消费点可见于 src/FlyView/FlightDisplayViewVideo.qml:_showGrid读取videoSettings.gridLines.rawValue控制网格线可见性(FlightDisplayViewVideo.qml#L18),_fitMode读取videoSettings.videoFit.rawValue决定fillMode(Image.PreserveAspectCrop等)与画面布局(FlightDisplayViewVideo.qml#L25),aspectRatio则从QGroundControl.videoManager.aspectRatio获取用于计算画面尺寸(FlightDisplayViewVideo.qml#L17)。

7.2 视频流来源配置

视频流页面显示的画面上游由videoSource决定,常见组合:

  • UDP:地面站绑定0.0.0.0:5600接收飞控转发来的 MPEG-TS 视频流(默认最常用);
  • RTSP:直接连接相机自带的 RTSP 服务地址;
  • TCP:某些图传设备以 TCP 推流;
  • UVC:通过 USB 直连的摄像头。

八、操作建议与适用范围

  • 面板中「哪些设置项可见、有哪些档位」完全由相机的 Camera Definition File 决定,不同相机(乃至同型号不同固件)展示的配置界面可能不同,这属于正常现象;
  • 「Photo Mode / Photo Interval / Reset / Format」四项为 QGC 硬编码的通用设置,不依赖相机定义文件;
  • 定时连拍功能需要相机具备 MAVLink 静态拍摄能力;仅靠视频流抓帧的降级路径不支持定时连拍;
  • 本地录制(VideoManager 路径)适用于地面站侧录制视频流,录制格式、存储上限、超限自动清理等策略均可通过 Video.SettingsGroup.json 对应的设置页配置;
  • 若视频画面比例异常,可检查aspectRatio(0为自动探测)与videoFit的组合;若需要在画面上辅助对齐,可打开gridLines。

延伸阅读

  • 相机控制的底层实现:src/Camera/VehicleCameraControl.cc(拍照、录像、重置、格式化、变焦、对焦的 MAVLink 命令封装)与 src/Camera/VehicleCameraControl.h
  • 相机定义文件完整示例:src/Camera/camera_definition_example.xml(参数、联动约束、视频流声明、本地化)
  • 视频管理与接收:src/VideoManager/VideoManager.cc(视频流属性、本地录制)
  • 视频显示界面:src/FlyView/FlightDisplayViewVideo.qml(网格线、适配模式、宽高比)
  • 视频设置项定义:src/Settings/Video.SettingsGroup.json(全部视频相关配置及默认值)
  • 相机管理器与接口:src/Camera/QGCCameraManager.cc、src/Camera/QGCCameraIO.cc(相机枚举与 IO 调度)
  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载

相关推荐

上一篇:NextStep-1:140亿参数自回归模型改写图像生成规则,连续令牌技术突破传统瓶颈
下一篇:归藏提示词库微缩模型创作:玻璃瓶微缩地点模型的7个实用技巧

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 1:51:12

Himalaya 打包规范解析:从 Cargo 特性门控到发布产物的工程实践

CLI 【免费下载链接】himalaya CLI to manage emails 项目地址&#xff1a; https://gitcode.com/gh_mirrors/hi/himalaya 点击查看 免费下载 Himalaya&#xff08;CLI to manage emails&#xff09;作为 Pimalaya 技术栈顶层的应用层&#xff0c;其打包策略决定了二进制产物的…

作者头像 李华
网站建设 2026/10/5 1:50:32

如何实现Nano ID可观测性:日志与指标集成的完整指南

如何实现Nano ID可观测性&#xff1a;日志与指标集成的完整指南 【免费下载链接】nanoid A tiny (118 bytes), secure, URL-friendly, unique string ID generator for JavaScript 项目地址: https://gitcode.com/GitHub_Trending/na/nanoid Nano ID作为一款轻量级&…

作者头像 李华
网站建设 2026/10/5 1:37:56

MobileViG实战:轻量图神经网络图像分类从训练到部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 1:37:51

OpenBMC开发环境构建实战:Yocto与BitBake从入门到落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华