十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

MATEKH743飞控MAVLink对接实战:从硬件接口到软件配置全解析

MATEKH743飞控MAVLink对接实战:从硬件接口到软件配置全解析 玩飞控这些年我经手过的板子从早期的Pixhawk、CUAV再到后来的各种F7/H7核心板数量不算少。但要说哪个板子让我在“MAVLink接口对接”这件事上花的时间最多、踩的坑最值得拎出来讲那肯定是MATEKH743。这块板子性能强资源丰富原生就是为ArduPilot优化的但越是资源多的板子接口定义和软件配置的复杂度就越高稍不留神就会在软硬件对接上卡壳。这篇文章不打算给你念芯片手册我会从实战角度把MATEKH743的硬件接口、MAVLink协议的软件配置、机载电脑对接、常见坑位一次讲清楚。无论你是刚入手H743准备刷固件的萌新还是已经在做无人机二次开发、准备往机载电脑上报数据的老手这篇文章应该都能给你省下几天的摸索时间。1. 为什么选 MATEKH743 做 MAVLink 对接先看清这块板子的底子1.1 H7 核心带来的算力余量MATEKH743 用的是 STM32H743VIH6 这颗料Cortex-M7 内核主频能跑到 480MHz内置 2MB Flash、1MB RAM。对比老一代的 F4/F7 飞控这颗芯片的算力优势是碾压级的。在实际使用中最直观的感受是同时开启多个高频率 MAVLink 数据流如 IMU 200Hz、姿态 100Hz、GPS 50Hz时CPU 负载仍然很低不会出现像 F4 上那种“数据流开多了就卡死”的情况。运行 ArduPilot 固件时可以同时支持更复杂的姿态控制算法、多个传感器的并行读取以及充足的串口资源分配。哪怕你在串口上挂了 OSD、数传、机载电脑三个串口同时跑不同速率的数据芯片的 DMA 和中断处理也能轻松扛住。简单说做 MAVLink 软硬件对接H743 这颗芯给了你很大的挥霍空间你不需要像在 F4 上那样精打细算串口和 CPU 占用率。1.2 板载资源盘点串口、CAN、USB 一个不少MATEKH743 真正让我满意的地方在于它的外设资源。具体来说10 路 UART其中部分为双向、部分单向对飞控来说非常充裕2 路 CAN 总线可以进行 CAN 外设扩展也支持 DroneCAN 协议板载 USBType-C 接口可以直接作为 MAVLink 通道免去 USB-TTL 转换的麻烦支持 microSD 卡用于数据记录和日志存储板载 OSD 芯片模拟图传场景下可以在视频上叠加飞行数据多个 PWM 输出、RGB LED、蜂鸣器等常规接口。这些资源叠加在一起让 MATEKH743 特别适合做“飞控 机载电脑 数传 外设”的多设备联合调试。这里的重点在于MAVLink 的对接并不只是“插个串口”那么简单你需要根据外设的类型去选择合适的物理通道。UART、USB、CAN 在 MAVLink 的角色完全不同。1.3 固件兼容性ArduPilot 与 Betaflight 的差异化选择MATEKH743 同时支持 ArduPilot 和 Betaflight 两套固件但做 MAVLink 对接时几乎没有悬念应该选择 ArduPilot。原因在于MAVLink 本身就是 ArduPilot 的“母语”其消息定义、参数体系、心跳机制几乎是原生配套的Betaflight 虽然也支持 MSP 协议但它的 MAVLink 支持是阉割版或需要额外移植不适合做正经的机载对接ArduPilot 在 H743 平台上有非常完整的板级支持MatekF743/MatekH743 目标外设配置、串口映射都经过大量用户验证。所以本文后续的软件配置部分默认以 ArduPilot 固件为基准来操作。如果你刷的是 Betaflight那这篇文章里的串口映射部分帮助不大建议先去搞清楚 MSP 和 MAVLink 的差异再做决定。2. 硬件侧对接从引脚定义到接线方案的完整拆解2.1 关键接口的物理层定义先看接口物理层。MATEKH743 板载接口主要有这几类JST-GH 插头用于串口、CAN、电源等、标准排针PWM 输出等、USB Type-C、microSD 卡槽、模拟图传接口等。做 MAVLink 对接时最常用的是串口UART和 USB。每个串口在丝印层都有标注例如 UART1、UART2、UART3……一直到 UART10。但这里有一个经验丝印标注只是告诉你物理位置真正的功能映射是需要通过 ArduPilot 参数来配置的。以我常用的接法为例机载电脑通过 UART4 连接飞控数传模块接 UART1GPS 接 UART2。这里 UART4 是 TELEM 口板子上标注为“TELEM2”物理上是 JST-GH 6-pin 插头其中就包含 TX、RX、GND、VCC5V引线。接线时最需要注意的是共地问题。飞控和机载电脑之间除了接 TX、RX一定要把 GND 接上。有些朋友第一次接只接 TX 和 RX 不接 GND结果数据完全不通或者乱码就是因为地电位不一致导致信号电平漂移。2.2 串口电平问题3.3V 与 5V 的匹配MATEKH743 的串口 TX/RX 是 3.3V 电平。如果你的外设模块比如某些老款数传、单片机系统是 5V 电平那么直接相连轻则通信异常重则烧毁飞控引脚。正确的做法是查看外设模块的手册确认 UART 电平标准若外设是 5V 电平需用电平转换模块如 TXS0108E或选择专门的 3.3V 兼容模块飞控的 VCC 输出通常是 5V可以给外设供电但如果你同时从飞控取电又外接供电需要避免共电源冲突。MATEKH743 大部分串口是双向通信少数单向口只支持 RX 或 TX。在做对接之前我建议你去官网或者板级手册里把每个 UART 的类型查清楚。在 ArduPilot 里有一个参数 SERIALn_PROTOCOL其中 -1 表示禁用、10 表示 MAVLink1、2 表示 MAVLink2最新的 ArduPilot 把 MAVLink2 设为 2设置正确后串口才会初始化 MAVLink 协议栈。2.3 USB 接口作为 MAVLink 通道的优势MATEKH743 板载 Type-C USB这不仅仅是刷固件用的它本身就是一个 MAVLink 通道。在 ArduPilot 中USB 口默认的协议就是 MAVLink2插入电脑后地面站Mission Planner / QGroundControl可以直接识别并连接。我的个人习惯是调试阶段优先用 USB 连接地面站因为 USB 转串口芯片通常是板载的 STM32 或独立 USB-UART已经做好了电平匹配不需要额外接线也不会出现波特率不对导致的乱码问题。飞行或机载对接时则使用 UART 串口因为机载电脑如树莓派、NUC需要的是串口设备而非 USB 设备。USB 接口做 MAVLink 通道还有一个额外好处供电。当连接 USB 时飞控会通过 USB 口获得临时供电这在刷固件、地面站参数调试时非常方便不需要额外接电池或电源模块。但要注意USB 口供电通常只有 500mA 左右大规模的外设如多个传感器、舵机测试不要指望它来带。2.4 CAN 总线与 DroneCAN 外设的扩展思路除了 UARTMATEKH743 的两路 CAN 总线也值得重点关注。如果你将来要挂载 DroneCAN 协议的传感器如空速计、GPS、温度传感器或者使用 CAN 接口的电调那么这些外设的 MAVLink 数据会通过 CAN-FD 总线汇聚到飞控再由飞控统一通过串口或 USB 转发给地面站。CAN 的优势在于双线差分传输抗干扰强且一棵总线上可以挂多个设备地址自动分配。我在一次多旋翼项目中就是把两个 DroneCAN GPS 和一个空速计挂在同一条 CAN 总线上飞控自动识别完全不需要逐一配置串口。这在传统 UART 方案中是不可想象的——3个设备至少要3个串口。简单总结一下物理层的选择逻辑外设类型推荐接口原因GPS / 数传UART简单成熟兼容性好机载电脑UART 或 USBUART 更稳定USB 更方便DroneCAN 设备CAN双差分抗干扰可挂多个模拟图传 OSDOSD 接口直接叠加 MAVLink 数据调试刷固件USB免串口速度稳定接好线意味着物理链路通了。但如果你直接在串口上插了机载电脑却发现系统不识别 MAVLink 数据那多半问题出在软件配置——也就是下一部分的内容。3. 软件侧对接ArduPilot 下 MAVLink 参数配置的完整链路3.1 串口角色分配SERIALn_PROTOCOL 到底怎么设这是整个对接过程中最容易被搞混的环节。ArduPilot 里每一个物理串口都有一个编号SERIAL0~SERIAL10每个编号对应一组参数SERIALn_PROTOCOL协议类型1MAVLink12MAVLink2SERIALn_BAUD波特率SERIALn_OPTIONS附加选项如 DMA、流控等以我常用的 UART4TELEM2接树莓派为例树莓派使用 3.3V UART所以可以直接接飞控的 3.3V 串口。参数设置如下SERIAL4_PROTOCOL 2 SERIAL4_BAUD 921注意ArduPilot 的 BAUD 参数用的是“波特率/1000”的单位所以 921 表示 921600。如果你写成了 921600那实际波特率就变成了一个天文数字通信必然失败。这是一个非常经典的坑。MAVLink1 和 MAVLink2 的区别在于MAVLink2 支持签名、扩展消息 ID 和更长的载荷现在默认都选 MAVLink2除非你对接的旧设备只能识别 MAVLink1。3.2 数据流控制SRn_ 系列参数和消息节流配好协议和波特率之后如果发现地面站能连接但看不到数据或者数据刷新很慢那就是数据流参数没设好。在 ArduPilot 中每个串口的 MAVLink 数据流频率由 SRn_ 参数控制n 为串口号。比如SR4_EXTRA1姿态和 IMU 数据流默认 4Hz可调至 10~15HzSR4_EXTRA2VFR_HUD 数据包含空速、地速、高度等SR4_EXTRA3辅助消息如 GPS 状态、电池状态SR4_POSITION位置消息SR4_RAW_SENSORS原始传感器数据如果你用榻米电脑做视觉导航需要高频的位置和姿态数据建议把 SR4_EXTRA1 开到 20Hz 以上SR4_POSITION 开到 10Hz 以上。调太高会导致串口带宽占满造成消息延迟加大反而影响实控。铣一个具体的计算逻辑921600 波特率下理论有效带宽约 92KB/s。一条 ATTITUDE 消息MAVLink2 格式大约 30 字节加上协议头、校验、填充约 35 字节。100Hz 的 ATTITUDE 就需要 3.5KB/s占带宽不到 4%。所以高波特率下开高频数据流完全没问题。但如果你用 57600 波特率总带宽才 5.7KB/s这时候同时开 100Hz 姿态和 50Hz GPS基本就会卡死。这就是为什么我强烈建议做机载对接时把波特率设在 921600 或至少 115200 以上。3.3 USB 口的 MAVLink 初始化配置USB 口通常是 SERIAL0在 ArduPilot 中默认就是 MAVLink2理论上不需要额外配置。但是有一个隐藏点如果你把 USB 的协议改成了其他比如改成 GCS 或别的协议之后插 USB 就无法识别了。解决办法是进入 DFU 模式重新刷固件或者通过其他串口如果有数传才能改回参数。所以我的建议是USB 口永远保持默认的 MAVLink2不要因为“暂时用不到”就去改协议。否则很容易出现“刷完固件后 USB 连不上”的尴尬局面。3.4 SYSID 与目标系统匹配MAVLink 协议中每个源系统有一个 SYSID系统 ID默认飞控是 1。机载电脑和地面站作为“地面控制端”也有自己的 SYSID通常地面站是 255。如果机载电脑端发送的命令里目标系统 ID 没有指向飞控的 SYSID飞控会直接忽略。在做对接时我一般会在机载电脑的代码里先读心跳HEARTBEAT从心跳里获取飞控的 SYSID 和 COMPID再以此为模板去构造后续的所有消息。不要写死目标 ID因为不同飞控默认值可能不一样写死容易出问题。4. 打通 MAVLink 数据链路地面站、机载电脑、自定义消息三层实践4.1 Mission Planner / QGroundControl 连接验证配置完参数后第一件事不是写代码而是先用地面站验证链路。这是一个非常有效的排错思路先用地面站这个“已知可用”的 MAVLink 终端去确认飞控侧没问题再上自己的程序把问题域隔离开来。操作步骤使用 USB 连接飞控和电脑打开 Mission Planner右上角端口选自动或手动指定 COM 口波特率自动点击 Connect观察 HUD 是否出现姿态数据若成功再断开 USB用 USB-TTL 或机载电脑的串口连接测试确定新串口通道是否正常。如果 USB 连接正常而串口连接失败重点检查波特率是否匹配特别是 BAUD 参数的“千单位”换算TX/RX 是否接反GND 是否共地串口的协议是否设置为 MAVLink2SERIALn_PROTOCOL2。4.2 Pymavlink 读取飞控数据的实操示例地面站通了之后就可以在机载电脑上写脚本了。Python 的 pymavlink 是我最常用的库因为它封装了 MAVLink 的报文编解码不用自己拼二进制。一个最基础的心跳连接和读取姿态数据的示例from pymavlink import mavutil # 串口连接波特率与飞控 SERIALn_BAUD 对应 master mavutil.mavlink_connection(/dev/ttyAMA0, baud921600) master.wait_heartbeat() print(Heartbeat from system (system %u component %u) % (master.target_system, master.target_component)) # 请求数据流设置 ATTITUDE 和 GPS_RAW_INT 频率 master.mav.request_data_stream_send( master.target_system, master.target_component, mavutil.mavlink.MAV_DATA_STREAM_POSITION, 10, # 10 Hz 1 ) while True: msg master.recv_match(type[ATTITUDE, GPS_RAW_INT], blockingTrue) if msg.get_type() ATTITUDE: print(fRoll: {msg.roll:.2f} Pitch: {msg.pitch:.2f} Yaw: {msg.yaw:.2f}) elif msg.get_type() GPS_RAW_INT: print(fLat: {msg.lat / 1e7:.7f} Lon: {msg.lon / 1e7:.7f} Alt: {msg.alt / 1e3:.2f})注意两点/dev/ttyAMA0是树莓派默认串口设备名不同板子可能不同。如果用的是 USB-TTL通常打的是/dev/ttyUSB0或/dev/ttyACM0。request_data_stream_send是请求消息流的方式之一但 ArduPilot 更推荐通过设置MAV_CMD_SET_MESSAGE_INTERVAL命令来精确控制单条消息的发送频率。用命令控制单个消息间隔的方式如下master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_SET_MESSAGE_INTERVAL, 0, mavutil.mavlink.MAVLINK_MSG_ID_ATTITUDE, 100000, # 100000 微秒即 10Hz 0, 0, 0, 0, 0 )这种方式比 request_data_stream 更精细不会把一堆不需要的消息也拉高频率省带宽、省CPU。4.3 从飞控发自定义 MAVLink 消息到机载电脑ArduPilot 允许你通过 Lua 脚本或自定义固件来发送 MAVLink 消息。但如果你不想动固件比较务实的方案是利用已有的通用消息通道如 STATUSTEXT来传自定义文本信息或者利用 MAV_CMD 命令来触发特定行为。比如通过 Lua 脚本发送 STATUSTEXT-- 在ArduPilot Lua脚本中 local MAV_SEVERITY_INFO 6 gcs:send_text(MAV_SEVERITY_INFO, Custom message from Lua)机载电脑端可以用 pymavlink 接收msg master.recv_match(typeSTATUSTEXT, blockingTrue) print(msg.text)如果你真的需要自定义二进制消息那就需要改 MAVLink 协议库并刷自定义固件成本较高非必要不建议折腾。大部分应用场景用现成的标准消息组合完全能覆盖。4.4 航点任务上传与执行从机载电脑控制飞控除了读数据MAVLink 对接更常见的场景是“机载电脑规划任务并上传给飞控”。使用 pymavlink 上传航点任务的核心流程如下发送MISSION_COUNT告诉飞控要上传多少个航点飞控回复MISSION_REQUEST或MISSION_REQUEST_INT收到请求后发送MISSION_ITEM_INT全部发送完毕后飞控返回MISSION_ACK。示例代码片段from pymavlink import mavutil master mavutil.mavlink_connection(/dev/ttyAMA0, baud921600) master.wait_heartbeat() wp_count 2 master.mav.mission_count_send(master.target_system, master.target_component, wp_count) for seq in range(wp_count): msg master.recv_match(type[MISSION_REQUEST, MISSION_REQUEST_INT], blockingTrue) lat -35.3627 seq * 0.001 lon 149.1652 seq * 0.001 master.mav.mission_item_int_send( master.target_system, master.target_component, seq, mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, 0, 0, # current, autocontinue 0, 0, 0, # param1~param3 0, # param4 int(lat * 1e7), int(lon * 1e7), 50 # 高度 50m ) ack master.recv_match(typeMISSION_ACK, blockingTrue) print(fMission ACK: {ack.type})这里最容出问题的地方在于“协议版本”ArduPilot 现在默认使用 MISSION_ITEM_INT带整型经纬度而不是老的 MISSION_ITEM浮点型。如果你发的是老版本飞控也兼容但会降低精度。实际测试中INT 版本更可靠尤其是经纬度精度要求高时浮点传输容易产生毫米级偏差这对测绘类任务是不能接受的。4.5 数据链路架构设计建议在多设备协同场景下我不建议让所有设备都直接连飞控串口。推荐的中心化架构是飞控 → UART → 机载电脑 → 网络/数传 → 地面站机载电脑作为 MAVLink 路由器例如运行 MAVProxy从飞控读取数据再通过以太网或 WiFi 转发给地面站。这样好处是地面站不直接占用飞控串口资源机载电脑可以缓存日志、做数据融合后续扩展新传感器时不用重新改飞控配置。MAVProxy 的转发命令很简单mavproxy.py --master/dev/ttyAMA0,921600 --outudp:192.168.1.100:14550这个模式下机载电脑变成了一个透明的 MAVLink 网桥地面站可以连接机载电脑的 UDP 端口而飞控只认机载电脑这一个串口对端架构非常干净。5. 调试排错实录MATEKH743 对接 MAVLink 的 5 个典型坑5.1 坑一波特率参数的“千单位”陷阱前面提过一次但值得再强调ArduPilot 的 SERIALn_BAUD 单位是“kbps”所以 921600 要写成 921115200 写成 11557600 写成 57。如果你在参数列表里填了 921600飞控实际用的波特率会是 921600000这个数值远超串口硬件能力通信必然失败。我见过不少人在群里问“我设了 921600 为什么连不上”一问参数截图果然是填了完整数值。这个坑太低级但出现频率极高。建议每次改完参数后重启飞控再用地面站读取一下实际参数值确认。5.2 坑二TX/RX 接反和共地缺失串口对接 TX 接 RX、RX 接 TX这是基础中的基础但实际中仍然常有人弄反。尤其是当你用一个没有丝印标注的转接板时非常容易搞混。快速排查方法用万用表量飞控 TX 引脚任务模式下应该能测到 3.3V 左右的电平跳动把飞控和机载电脑都接地后再接 TX/RX如果还是不通可以尝试用逻辑分析仪抓串口波形看是否真的有数据脉冲。共地缺失的问题更隐蔽。现象是偶尔能收到几个字节但很快断连或者数据全是乱码。这是因为两个系统之间地电位不一致导致信号电平判断出错。5.3 坑三USB 口协议被误改导致无法连接我自己就踩过这个坑。有一次为了测试某个外设把 SERIAL0_PROTOCOL 改成了其他协议后来忘了改回来结果 USB 连不上地面站只能通过数传口远程把参数改回来。如果你也遇到这种情况解决办法如果有数传模块连接用数传口连上地面站把 SERIAL0_PROTOCOL 改回 2如果没有数传只能用 DFU 模式重新刷固件但注意刷固件会清空参数需提前导出备份进阶做法在刷完固件后通过 Mission Planner 的“加载参数文件”恢复备份。所以强烈建议每次修改串口协议参数前先记录原始值或者导出参数文件。千万不要把 USB 口当试验田。5.4 坑四消息频率设置过高导致数据拥堵做视觉导航的朋友容易犯这个错。为了拿到高频姿态数据把 SR4_EXTRA1 设到 50HzGPS 频率也调高结果整个 MAVLink 链路一卡一卡的地面站画面都开始掉帧。原因很简单串口带宽是有限的所有消息共享同一条链路。正确的做法是明确自己需要哪几条消息用 SET_MESSAGE_INTERVAL 精确控制而不是全量拉高机载电脑端用 pymavlink 时可以只订阅需要的消息类型过滤掉无关数据如果确实需要多路高频数据考虑用 USB 或双串口方案分流。从计算角度举个例子921600 波特率下理论每秒可以传输约 92160 字节。一条 GPS_RAW_INT 消息约 50 字节一条 ATTITUDE 约 35 字节100Hz ATTITUDE 50Hz GPS 加起来约 6000 字节/秒只占 6.5%很轻松。但如果 SR4_EXTRA1 拉到 50Hz大部分消息没人在意占了带宽还没用。所以精调消息类型比盲目拉频率更重要。5.5 坑五机载电脑侧设备节点不稳定Linux 下USB-TTL 的设备节点可能不稳定有时是/dev/ttyUSB0重新插拔后变成/dev/ttyUSB1。如果你在代码里写死了设备路径就会出现找不到设备的报错。推荐方案使用/dev/serial/by-id/路径它是基于 USB 设备序列号的固定链接或者使用 udev 规则给特定 USB 设备固定别名或者写代码时先扫描 ls /dev/ttyUSB* 和 /dev/ttyACM*再根据设备 VID/PID 匹配。ls -l /dev/serial/by-id/运行这个命令可以看到类似usb-FTDI_FT232R_USB_UART_A50285BI这样的固定名称代码里直接用这个路径即可。6. 从能用到用好的进阶技巧让 MAVLink 对接更稳定可靠6.1 消息签名与安全认证的配置如果你的无人机运行在公共无线环境中MAVLink2 的消息签名功能值得开启。签名机制确保消息来源可信防止恶意注入或篡改。ArduPilot 中启用 MAVLink2 签名的步骤确保链路协议为 MAVLink2SERIALn_PROTOCOL2在地面站中为对应链路生成密钥在飞控的 MAV_OPTIONS 参数中启用签名要求机载电脑端在 pymavlink 中配置对应的签名密钥。签名密钥是一个 32 字节的 base64 编码密钥需要同时在飞控和机载端配置。一旦启用签名未签名或签名错误的消息会被直接丢弃。这个功能在实验室环境容易忽略一旦涉及户外长距离飞行、图传和数传同频段干扰的复杂场景开启签名能显著提高安全性。不过要注意签名会增加约 13 字节的消息开销低波特率下要合理评估。6.2 使用 SLCAN 或 MAVLink-over-CAN 做串口扩展如果你发现飞控的串口不够用了C AN 总线是一个良好的扩展方向。ArduPilot 支持 MAVLink over CAN即通过 CAN 总线透传 MAVLink 消息。这样在机载设备和飞控之间连接一条 CAN 线就可以在总线上挂多个设备用不同 Node ID 区分。具体做法是在机载端使用一个 CAN-to-UART 适配器如 DroneCAN 的 CAN-Pixhawk 适配器飞控的 CAN1/CAN2 口与适配器连接适配器的串口端接外部设备。这样可以有效解决机载电脑串口不足的问题。6.3 日志与回放用 Flight Review 定位 MAVLink 问题当链路出现间歇性断连或丢包时光靠实验很难定位。ArduPilot 的飞行日志*.bin里记录了 MAVLink 链路的状态、消息错误计数、丢包统计等信息。机载电脑端也可以开启自己的日志记录用 pymavlink 把接收到的原始报文存盘之后对比飞控日志和机载日志就能精确定位是飞控没发还是机载端没收到还是中间传输丢包。具体操作飞控侧地面站下载 logs检查MAV相关的数据机载侧用mavlogdump.py解析保存的 MAVLink 二进制日志截图关键消息的时间戳与飞控日志比对。6.4 与未来 AI 载荷结合的一点思考最后聊一点更远的话题。现在很多项目开始把 AI 计算模块如 Jetson、Raspberry Pi NPU接到飞控上通过 MAVLink 获取姿态和传感器数据融合视觉感知做避障或物体追踪。MATEKH743 的算力和接口资源加上 MAVLink 的灵活性让这种架构落地非常顺手。我自己的下一步计划里就把一个视觉识别节点挂到 CAN 总线上用 DroneCAN 协议把它接入飞控体系同时通过 UDP 通道把图像和数据一并回传地面站。MAVLink 作为控制面的“神经”, 和数据面的图像链路天然分离整个系统各司其职调试起来清晰很多。这条路能不能走通取决于你对 MATEKH743 的了解深浅也取决于你对 MAVLink 协议栈的掌握程度。希望这篇文章能帮你少走几步弯路把更多时间花在真正有趣的功能上。
返回列表