ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

QGroundControl Mock Link 完全指南:无需硬件即可模拟多架无人机,测试任务、参数与多机界面

QGroundControl Mock Link 完全指南:无需硬件即可模拟多架无人机,测试任务、参数与多机界面 无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载Mock Link 是 QGroundControlQGC调试版内置的虚拟 MAVLink 链路它能在不连接任何真实无人机的情况下创建并停止与多架模拟飞机之间的通信连接用于测试任务上传/下载、参数读写、设置页面以及多机 UI。本文以仓库内开发指南 tools/mock_link.md 为主线结合 MockLink.cc 与 MockConfiguration.h 等源码实现带你从操作到原理完整掌握这一开发者利器并学会利用其故障注入接口为单元测试构造真实错误场景。Mock Link 是什么Mock Link模拟链路是 QGC 调试构建Debug Build中专用的测试工具它在 QGC 进程内部模拟一个或多个无人机通过完整的 MAVLink 协议与 QGC 自身的链路管理、任务管理、参数管理等模块交互让开发者像操作真机一样操作虚拟飞机。需要注意它的边界——模拟不包含飞行能力。它无法测试实际飞行动力学、飞行控制器固件等飞行相关功能但可以方便地测试任务上传Mission Upload与任务下载Mission Download查看和修改参数Parameters大多数设置页面Setup Pages多车辆 UIMultiple Vehicle UIs特别值得一提的是它非常适合为任务上传/下载的错误处理流程做单元测试例如中途断链、ACK 丢失、参数读取失败等异常场景详见下文故障注入一节。环境准备构建 Debug 版本Mock Link 仅存在于 Debug调试构建中。从源码构建的通用方式可参考仓库根目录的 README.md其中包含各平台支持的构建方式开发者的单元测试指南见 contribute/unit_tests.md。与单元测试相关的要点单元测试构建使用debug模式并定义QGC_UNITTEST_BUILD宏单元测试随 Debug 构建自动包含运行时 QGC 在测试框架控制下启动而非正常启动命令行启动方式支持--unittest:name运行指定单元测试不带:name则运行全部以及--unittest-stress:name连续运行 20 次详见 command_line_options.md。即便不写单元测试普通 Debug 构建同样可以通过界面直接使用 Mock Link。在界面中使用 Mock Link操作路径非常直观准备好 Debug 构建点击顶部工具栏的Application Settings应用设置图标在侧边栏选择Mock Link进入模拟链路面板面板中列出若干创建车辆连接按钮点击对应按钮即可创建对应类型的虚拟飞机链路每次点击都会新建一条连接不会覆盖已有连接当存在多于一条连接时QGC 会自动切换为多车辆 UI点击Stop one Mock Link按钮停止当前活动的虚拟飞机连接。之后对 Mock Link 虚拟飞机的操作与操作任何真实车辆基本一致切换模式、读写参数、加载任务等唯一的区别是模拟不支持飞行。面板选项详解启动面板位于 src/AppSettings/MockLink.qml其可配置项与底层参数一一对应面板选项说明对应源码实现Send status text voice模拟车辆周期性发送各严重级别的 STATUS_TEXT 消息及语音提示OptionSendStatusText消息内容见 MockLink.cc 中_sendStatusTextMessages()Enable camera启用模拟相机含拍照/录像/变焦/跟踪等能力标志OptionEnableCamera能力标志见 MockConfiguration.hEnable gimbal启用模拟云台滚转/俯仰/偏航/跟随/锁定等能力标志OptionEnableGimbal能力标志同上Enable proximity sensors启用临近传感器测距数据流OptionEnableProximity对应_sendDistanceSensors()Start with fresh firmware parameters (setup required)APM 机型专用以全新固件、未校准状态启动需要重新走一遍设置流程OptionAPMStartFreshParams对应_applyAPMFreshFlashState()Vehicle Type选择模拟机型PX4 / APM 多旋翼 / 固定翼 / 潜航器 / 无人车 / Generic见下文支持的机型与固件Served Video Stream选择模拟相机对外提供的视频流格式仅启用相机时可见VideoStreamType枚举见下文视频流选项与枚举值VideoStreamType一一对应MockConfiguration.h 中注释明确要求与下拉框顺序一致VideoStreamNone—— Disabled不提供视频流VideoStreamRtpUdpH264—— RTP/UDP H.264udp://VideoStreamRtpUdpH265—— RTP/UDP H.265udp265://VideoStreamRtspH264—— RTSP H.264rtsp://VideoStreamMpegTsUdp—— MPEG-TS over UDPmpegts://VideoStreamMpegTsTcp—— MPEG-TS over TCPtcp://点击Start MockLink后MockLink.qml 会根据机型选择调用QGroundControl.startPX4MockLink(...)、QGroundControl.startAPMArduCopterMockLink(...)等 QML 桥接接口点击Stop One MockLink调用QGroundControl.stopOneMockLink()。支持的机型与固件从 MockLink.cc 的工厂方法可以看出Mock Link 支持以下组合配置名、固件类型与 MAVLink 机型类型均为源码硬编码工厂方法配置名固件类型MAV 机型类型startPX4MockLink()PX4 MultiRotor MockLinkMAV_AUTOPILOT_PX4MAV_TYPE_QUADROTORstartAPMArduCopterMockLink()ArduCopter MockLinkMAV_AUTOPILOT_ARDUPILOTMEGAMAV_TYPE_QUADROTORstartAPMArduPlaneMockLink()ArduPlane MockLinkMAV_AUTOPILOT_ARDUPILOTMEGAMAV_TYPE_FIXED_WINGstartAPMArduSubMockLink()ArduSub MockLinkMAV_AUTOPILOT_ARDUPILOTMEGAMAV_TYPE_SUBMARINEstartAPMArduRoverMockLink()ArduRover MockLinkMAV_AUTOPILOT_ARDUPILOTMEGAMAV_TYPE_GROUND_ROVERstartGenericMockLink()Generic MockLinkMAV_AUTOPILOT_GENERICMAV_TYPE_QUADROTOR另有面向测试的变体startPX4MockLinkWithMission()以 PX4 多旋翼身份启动并通过OptionPreloadMission预载入一个简单的多旋翼任务起飞、航点、RTL方便快速测试任务流程startNoInitialConnectMockLink()以 PX4 固件 通用机型启动模拟初始连接流程相关场景如 test/UnitTestFramework/BaseClasses/VehicleTest.cc 中MAV_AUTOPILOT_INVALID分支的使用。不同 APM 机型拥有各自独立的飞行模式列表源码中分别维护_apmCopterAvailableFlightModes、_apmPlaneAvailableFlightModes、_apmRoverAvailableFlightModes、_apmSubAvailableFlightModes模拟车辆会根据机型上报对应的可用飞行模式。面板与工厂方法均遵循支持的固件优先、Generic 兜底的排序原则PX4/APM 固件是否可用由构建配置决定QML 侧通过QGroundControl.px4ProFirmwareSupported/QGroundControl.apmFirmwareSupported判断。从源码看 Mock Link 的工作原理Mock Link 不是一个独立进程而是 QGC 内部的一个虚拟链路其核心是MockLink类——它继承自LinkInterfaceMockLink.h因此与 UDP、串口等真实链路一样被 LinkManager.cc链接管理器统一管理。链路创建流程见MockLink::_startMockLinkWorker()与_startMockLink()依据参数构造MockConfiguration继承自LinkConfiguration逐一设置固件类型、机型类型、状态文本、相机、云台、临近传感器、视频流、故障模式等mockConfig-setDynamic(true)标记为动态配置通过LinkManager::instance()-addConfiguration()注册配置调用LinkManager::instance()-createConnectedLink()创建并连接链路返回MockLink实例。多车辆支持源码中_nextVehicleSystemId是一个静态原子计数器MockConfiguration::incrementVehicleId默认开启因此每次创建的新虚拟飞机会获得递增的 MAVLink 系统 ID这正是界面中每点一次按钮新增一条连接、多连接时出现多车辆 UI的底层原因。周期数据仿真MockLinkWorkerMockLinkWorker.h在独立线程中运行三个周期定时任务1 Hz 任务电池状态、系统状态、ADS-B 车辆、测距传感器、遥控器状态等10 Hz 任务心跳Heartbeat、GPS、全局位置等500 Hz每 2 ms任务参数列表批发送、日志下载数据块、可用模式流等。从_sendStatusTextMessages()的实现可以看到模拟状态文本覆盖MAV_SEVERITY的全部级别EMERGENCY/ALERT/CRITICAL/ERROR/WARNING/NOTICE/INFO/DEBUG并包含分块chunked状态文本与缺失分块的异常用例专门用于验证 QGC 的分块状态文本重组逻辑。协议与参数行为Mock Link 实现了完整的 MAVLink 交互包括心跳与飞行模式设置、PARAM_REQUEST_LIST/PARAM_SET/PARAM_REQUEST_READ及参数哈希校验_HASH_CHECK、任务交互由 MockLinkMissionItemHandler.h 处理、文件传输协议 FTPMockLinkFTP.h、日志下载、NuttX ShellNSH、MAVLink 签名、PX4 校准流程MockLinkPX4Calibration.h等。参数初始值来源于仓库内自带的参数清单文件如 PX4MockLink.params 与 GenericMockLink.params。模拟车辆位置默认位置位于苏黎世附近47.397, 8.5455海拔约 488 m源码注释说明这是刻意贴近默认 Gazebo 仿真车辆的位置便于真实 Gazebo 车辆 Mock Link 车辆的多机混合测试开启QGC_MOCKLINK_TERRAIN_TEST_HOME编译宏时则切换到更适合地形测试的华盛顿州位置MockLink.h。调试构建限制QML 桥接层QGroundControlQmlGlobal.cc中的startPX4MockLink、startGenericMockLink、startAPMArduCopterMockLink及stopOneMockLink等接口全部包裹在#ifdef QT_DEBUG中非 Debug 构建下这些调用被编译为空操作——这正是Mock Link 只在 Debug 构建中可用的强制保证。故障注入与单元测试实践Mock Link 最具价值的场景是单元测试中的故障注入。MockLink暴露了大量测试专用接口MockLink.h用于模拟真实硬件几乎无法复现的异常任务相关setMissionItemFailureMode(failureMode, failureAckResult)可注入任务项无响应ACK 错误任务项丢失等失败模式并可发送意外的MISSION_ACK/MISSION_ITEM/MISSION_REQUEST参数相关setParamSetFailureMode()可模拟PARAM_SET无 ACK、首次尝试无 ACK、返回PARAM_ERRORsetParamRequestReadFailureMode()可模拟PARAM_REQUEST_READ无响应等链路相关setCommLost()、simulateConnectionRemoved()、setDuplicateResponses()同一消息重复发送模拟双链路收到相同流量其它startAPMStaleFailedMagCalReportStreaming()模拟 ArduPilot 罗盘校准失败后持续上报、setAPMMagCalStartFailureMode()、setRequestMessageNoResponse()对指定消息 ID 静默丢弃请求等。仓库测试代码中的典型用法test/MissionManager/MissionManagerTest.cc 通过_mockLink-setMissionItemFailureMode(failureMode, failureAckResult)构造任务上传/下载的各种失败路径验证MissionManager的重试与错误上报逻辑test/FactSystem/ParameterManagerTest.cc 使用setParamSetFailureMode()注入参数设置失败验证ParameterManager的 ACK 超时与重试行为测试结束再恢复为FailParamSetNonetest/QmlUITests/AppCloseWarningUITest.cc 使用runWithMockLinkMockLink::startPX4MockLinkWithMission()验证带任务连接时的关闭告警 UI。MockLink还提供了一系列计数器式断言接口例如receivedMavCommandCount(MAV_CMD)、receivedMavlinkMessageCount(messageId)、lastReceivedMavlinkMessage()、hashCheckRequestCount()等测试可以据此精确断言QGC 确实发送了某条命令/消息、且发送次数符合预期而不只是观察 UI 表现。与其它调试工具的搭配Mock Link 常与 QGC 的其他开发者工具配合使用配合单元测试框架Mock Link 是绝大多数自动化测试的基础设施test/UnitTestFramework/BaseClasses/VehicleTest.cc 中根据固件类型创建对应 Mock Link 实例配合日志回放Log Replay可先通过 Mock Link 产生典型数据再对比真实日志回放的行为差异配合MAVLink Inspector分析页查看模拟车辆发出的原始 MAVLink 消息流核对各消息频率与字段是否符合预期配合MAVLink Console分析页通过模拟车辆提供的 NSH 类控制台体验命令行交互。使用注意事项仅 Debug 构建可用Release/发布版构建中 Mock Link 入口与相关接口均被编译排除不支持飞行请勿用它验证任何与飞行控制、姿态控制相关的逻辑连接数即车辆数每点一次创建按钮就新增一架虚拟飞机测试完记得用Stop one Mock Link逐架清理避免链路堆积干扰后续测试机型绑定固件PX4 系列只提供多旋翼模拟APM 系列才覆盖多旋翼/固定翼/潜航器/无人车Generic 是最后的兜底选项参数重置语义勾选 APM 的fresh firmware parameters后模拟车辆会处于未校准状态需要重新完成设置流程才能正常起飞相关测试这是刻意为之的行为。总结Mock Link 把无人机地面站开发调试从硬件依赖中解放出来日常开发中你可以在无飞机的情况下快速验证任务收发、参数读写与多机界面在自动化测试中它更是故障注入的关键载体让任务上传/下载等错误处理路径得以被稳定、可重复地验证。掌握它等于掌握了 QGC 链路层与协议层调试的最快捷入口。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐QGroundControl无人机地面站软件完整安装指南QGroundControl无人机地面站软件完整安装指南 快速开始三分钟上手无人机控制 想要快速掌握无人机飞行控制技术吗QGroundControl作为业界无人机智能硬件QGroundControl无人机地面站软件完整安装指南QGroundControl无人机地面站软件完整安装指南 快速开始你的无人机控制之旅 QGroundControl是一款功能强大的跨平台无人机地面站软件支持A无人机智能硬件QGroundControl无人机地面站软件完全安装教程QGroundControl无人机地面站软件完全安装教程 开篇为什么你需要这款专业飞行控制工具 作为无人机操作者和飞行爱好者的必备软件QGroundCont无人机智能硬件上一篇MXNet Symbol 稀疏 API 深度指南基于 mxnet.symbol.sparse 的符号式稀疏计算下一篇CANN ops-nn 同步 BatchNorm 反向归约算子 SyncBatchNormBackwardReduce 深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表