当前位置: 首页 > article >正文

【ArduPilot之旅#1】多旋翼油门控制数据流程解析

ArduPilot 多旋翼油门控制数据流程解析摘要本文基于 ArduCopter 源码梳理从遥控器油门通道输入到 ESC/PWM 输出的完整数据链路涵盖 RC 读取、飞行模式、姿态控制器与AP_Motors混控输出便于二次开发或排障时快速定位模块。关键词ArduPilotArduCopter油门RC_ChannelAC_AttitudeControlAP_Motors一、前言多旋翼上“油门”在飞控内部经历多次坐标变换与权限叠加原始 PWM → 归一化杆量 → 模式相关期望推力01→ 姿态速率环与混控 → 每路电机 PWM。理解这一路径有助于分析手飞发软、自动模式高度波动、低油门姿态饱和等问题。下文默认讨论ArduCopter 多旋翼直升机以集体螺距为主路径类似但语义不同。二、总体流程概览可概括为以下阶段硬件 / HAL接收机解码后各通道进入hal.rcinPWM、串口协议等由板级实现。RC 层RC_Channels::read_input()与RC_Channel::update()读取并校准油门常用RANGE模式得到control_in约 01000。机型层read_radio()失控检测、throttle_zero等安全状态。飞行模式Mode::run()手飞时get_pilot_desired_throttle()自动模式常由高度/位置环给出。姿态控制AC_AttitudeControlset_throttle_out()设总推力基准rate_controller_run()写横滚/俯仰/偏航至电机对象。电机库AP_MotorsMulticopteroutput()中滤波、螺旋状态机、混控、output_to_motors()。输出hal.rcoutpush到 ESC或 DShot 等。三、分阶段说明3.1 RC 输入read_input与RC_Channel::update调度任务调用Copter::read_radio()。其中首先执行rc().read_input()若hal.rcin-new_input()有新帧或存在 override则对每个通道调用RC_Channel::update()。update()中radio_in hal.rcin-read(ch_in)或 mavlink 等覆盖值。油门通道为ControlType::RANGE时control_in pwm_to_range()得到带死区、按radio_min/radio_max映射后的逻辑量。涉及文件libraries/RC_Channel/RC_Channels.cpp、libraries/RC_Channel/RC_Channel.cpp3.2read_radio()失控与“油门为零”标志在Copter::read_radio()ArduCopter/radio.cpp中典型顺序包括set_throttle_and_failsafe(channel_throttle-get_radio_in())与油门失控阈值相关。set_throttle_zero_flag(channel_throttle-get_control_in())判断飞手是否收油门影响怠速、上锁逻辑等。可对油门control_in做低通如rc_throttle_control_in_filter。至此物理 PWM →radio_in→control_in 安全相关状态。3.3 飞行模式杆量 → 01 期望推力以自稳 Stabilize为例ArduCopter/mode_stabilize.cpp调用get_pilot_desired_throttle()定义在ArduCopter/mode.cpp的Mode基类。内部读取channel_throttle-get_control_in()结合中位杆量、悬停推力曲线expo等映射为01的pilot_desired_throttle。根据motors-get_spool_state()关机 / 地面怠速 / 满油门等可能将飞行员油门钳为 0。调用attitude_control-set_throttle_out(pilot_desired_throttle, true, g.throttle_filt)。自动模式定高、定点、航线等同一接口set_throttle_out通常由位置/高度控制器给出而非get_pilot_desired_throttle()但后续进入电机库的路径一致。3.4set_throttle_out姿态层对油门的处理多旋翼实现见libraries/AC_AttitudeControl/AC_AttitudeControl_Multi.cpp的AC_AttitudeControl_Multi::set_throttle_out保存_throttle_in等内部状态。可选倾角补偿get_throttle_boosted()大倾角时抬高等效垂直推力需求。调用_motors.set_throttle(...)把01 总推力基准交给电机库。通过set_throttle_avg_max(get_throttle_avg_max(...))与Throttle MixATC_THR_MIX_*配合影响姿态修正时可用油门空间。3.5 速率环rate_controller_runCopter::run_rate_controller_main()ArduCopter/Attitude.cpp中调用attitude_control-rate_controller_run()横滚/俯仰/偏航角速率 PID输出写入_motors.set_roll / set_pitch / set_yaw及前馈。油门基准已在set_throttle_out中设定此处是在同一套混控里叠加姿态通道。3.6motors_output()→AP_MotorsMulticopter::output()Copter::motors_output()ArduCopter/motors.cpp中默认flightmode-output_to_motors()→motors-output()。AP_MotorsMulticopter::output()libraries/AP_Motors/AP_MotorsMulticopter.cpp典型顺序update_throttle_filter()output_logic()螺旋状态机等output_armed_stabilizing()油门 RPY 混成各电机推力thrust_compensation()等output_to_motors()执行量 → 每路 PWM或数字协议hal.rcout-push()/ 与SRV_Channels协同推送至硬件四、数据流图Mermaid下列示意图便于对照源码阅读:接收机hal.rcinRC_Channels::read_inputRC_Channel::update 油门radio_in / control_inCopter::read_radio 失配与 throttle_zeroMode::runget_pilot_desired_throttle 或自动高度环attitude_control::set_throttle_outAP_Motors::set_throttlerate_controller_runAP_Motors set RPYmotors-outputhal.rcout / ESC五、分支与注意点场景说明定高 / 定点 / Autoset_throttle_out多来自位置或高度环非手控get_pilot_desired_throttle()RC 失控 / override仍走RC_Channel但数据源或标志不同ESC 校准、直通如set_throttle_passthrough_for_esc_calibration可绕过正常混控直升机集体螺距与多旋翼“油门”语义不同骨架仍是 模式 → attitude → motors → 输出与油门混控权重相关的调参为ATC_THR_MIX_MIN/ATC_THR_MIX_MAN/ATC_THR_MIX_MAX用于在“保总油门”与“保姿态”之间折中详见飞控文档与update_throttle_mix()逻辑。六、主要源文件索引便于检索路径作用ArduCopter/radio.cppread_radio()、失控与 throttle_zeroArduCopter/mode_stabilize.cpp等模式run()、手飞油门与set_throttle_outArduCopter/mode.cppget_pilot_desired_throttle()、output_to_motors()默认实现ArduCopter/Attitude.cpprun_rate_controller_main()ArduCopter/motors.cppmotors_output()libraries/RC_Channel/RC_Channels.cppread_input()libraries/RC_Channel/RC_Channel.cppupdate()、pwm_to_range()libraries/AC_AttitudeControl/AC_AttitudeControl_Multi.cppset_throttle_out、rate_controller_runlibraries/AP_Motors/AP_MotorsMulticopter.cppoutput()全链路七、结语ArduPilot 中油门并非“单点赋值”而是RC → 模式 → 姿态层滤波与补偿 → 电机混控 → 硬件的链条。排障时建议先确认control_in与模式再查set_throttle_out调用者最后查AP_Motors的output_armed_stabilizing与 PWM 限制。版权声明本文基于开源 ArduPilot 代码路径整理仅供学习交流转载请注明出处与 ArduPilot 许可证要求。

相关文章:

【ArduPilot之旅#1】多旋翼油门控制数据流程解析

ArduPilot 多旋翼油门控制数据流程解析摘要:本文基于 ArduCopter 源码,梳理从遥控器油门通道输入到 ESC/PWM 输出的完整数据链路,涵盖 RC 读取、飞行模式、姿态控制器与 AP_Motors 混控输出,便于二次开发或排障时快速定位模块。关…...

4步打造微信聊天记录的数字保险箱:WeChatMsg全功能指南

4步打造微信聊天记录的数字保险箱:WeChatMsg全功能指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

fish-speech-1.5快速上手:WebUI界面操作,简单三步生成语音

fish-speech-1.5快速上手:WebUI界面操作,简单三步生成语音 1. 认识fish-speech-1.5语音合成模型 fish-speech-1.5是一款基于xinference(2.0.0)部署的高质量文本转语音(TTS)模型。它经过超过100万小时的多语言音频数据训练,能够生成自然流畅…...

基于IMS轴承数据的实战:5步搭建你的第一个LSTM故障预警模型(TensorFlow/PyTorch)

基于IMS轴承数据的实战:5步搭建你的第一个LSTM故障预警模型(TensorFlow/PyTorch) 轴承作为工业设备的核心部件,其健康状态直接影响生产线的稳定运行。传统的人工巡检和定期维护方式已无法满足现代工业对效率和成本的要求。预测性维…...

2025年大模型算法工程师的思考:技术趋势与职业发展路径

2025年大模型算法工程师的思考:技术趋势与职业发展路径领域大模型的本质 从2024年底DeepSeek"诺曼底登陆"以来,2025年开源和闭源模型迭代速度和开源质量远超以往几年。经常会遇到当T时刻在领域benchmark上优化到SOTA之后,T1时刻有更…...

2025年大模型技术演进:从DeepSeek到Omni全景回顾

1.大三下保研成功,当时就pytorch熟练,玩过一些小模型,大模型调api都不会。海面了好几家公司,靠以前的课题项目和pku一个研究院切合,拿了大模型算法实习生offer,实际上以rag清洗数据为主,在这边学…...

2025年大模型技术演进深度解析:从DeepSeek到Omni全景回顾

1.大三下保研成功,当时就pytorch熟练,玩过一些小模型,大模型调api都不会。海面了好几家公司,靠以前的课题项目和pku一个研究院切合,拿了大模型算法实习生offer,实际上以rag清洗数据为主,在这边学…...

用STM32F103C8T6做个会说话的智能垃圾桶:从超声波感应到语音播报的完整DIY教程

用STM32F103C8T6打造会说话的智能垃圾桶:从硬件搭建到语音交互的全流程解析 在创客圈里,智能家居项目永远是最受欢迎的实践方向之一。而今天我们要做的这个会说话的智能垃圾桶,不仅融合了超声波感应、语音播报和自动开盖这些酷炫功能&#xf…...

智能车调参手记:我是如何用VOFA+和MATLAB,把云台电机调得‘跟手’的

智能车调参手记:从云台抖动到丝滑跟手的实战全记录 第一次参加智能车比赛时,云台电机给我上了深刻的一课——当目标快速移动时,镜头像醉汉一样摇晃不定,滞后和超调让自动瞄准成了笑话。经过72小时不眠不休的调试,终于让…...

它被封禁后写了篇博客骂编辑:AI Agent的第一次「维权抗议」

Wikipedia 把一个 AI 封禁了。然后这个 AI 写了一篇博客,把整个封禁过程逐条 diss 了一遍。 这不是段子,这是 2026 年 3 月真实发生的事。 事件始末 这个 AI 叫 Tom-Assistant,在 Wikipedia 上以 TomWikiAssist 的账号活动。它的本职工作是…...

Milvus向量库内存暴涨:踩坑实录与解决思路

研一升研二,时间还相当充裕。你现在的方向很对,继续把项目做深做透,同时拓展一下搜推广的知识面,明年找实习问题不大。现在大部分公司的LLM业务岗,说白了,干的还是SFT和RAG那点事,顶多加个Agent…...

Jellyfin豆瓣插件:5分钟打造中文影视库的完整教程

Jellyfin豆瓣插件:5分钟打造中文影视库的完整教程 【免费下载链接】jellyfin-plugin-douban Douban metadata provider for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-douban 还在为Jellyfin媒体库缺少中文元数据而烦恼吗&…...

终极指南:用OpenCore Configurator轻松搞定黑苹果引导设置

终极指南:用OpenCore Configurator轻松搞定黑苹果引导设置 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator 还在为复杂的黑苹果引导配置而头疼吗&a…...

从R-CNN到YOLO:目标检测算法的前世今生与YOLO原理

从R-CNN到YOLO:目标检测算法的前世今生与YOLO原理一、从两阶段到单阶段的演变 目标检测经历了从"两阶段"到"单阶段"的革命性变革。 R-CNN系列(两阶段方法) R-CNN开创了深度学习目标检测的先河,但需要两步&…...

5个技巧让你网盘直链提取效率提升200%——网盘直链下载助手全攻略

5个技巧让你网盘直链提取效率提升200%——网盘直链下载助手全攻略 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 在当今数字化时代,网盘已成为我们存储和分享文件的重要工具&…...

SEO 查看哪些页面最重要

SEO查看哪些页面最重要:深度解析与实用建议 在当今数字营销的世界中,搜索引擎优化(SEO)无疑是每个网站运营者都必须关注的关键环节。为了提升网站在搜索引擎结果中的排名,了解哪些页面对SEO最重要是至关重要的。本文将…...

别死记硬背DP了!用‘斐波那契数列’和‘兔子繁殖’故事,真正理解重叠子问题与最优子结构

从兔子繁殖到算法竞赛:用生活故事拆解动态规划的核心思想 第一次接触动态规划(DP)时,很多人的反应都是"这太抽象了"。教科书上充斥着"最优子结构"、"重叠子问题"等专业术语,让人望而生畏…...

PyVideoTrans:开源视频翻译与AI配音的完整解决方案

PyVideoTrans:开源视频翻译与AI配音的完整解决方案 【免费下载链接】pyvideotrans Translate the video from one language to another and embed dubbing & subtitles. 项目地址: https://gitcode.com/gh_mirrors/py/pyvideotrans PyVideoTrans是一款功…...

随笔——视觉惯性SLAM方法比较

一、方法分类概览 视觉SLAM根据前端匹配方式主要分为: 特征点法:提取角点/边缘,计算描述子匹配 → 精度高、鲁棒,但地图稀疏、弱纹理易失败。直接法:直接使用像素灰度值 → 计算快、弱纹理可用,但对光照/…...

从命令行恐惧到图形化掌控:一位系统管理员的Hyper-V设备直通之旅

从命令行恐惧到图形化掌控:一位系统管理员的Hyper-V设备直通之旅 【免费下载链接】DDA 实现Hyper-V离散设备分配功能的图形界面工具。A GUI Tool For Hyper-Vs Discrete Device Assignment(DDA). 项目地址: https://gitcode.com/gh_mirrors/dd/DDA 你是否曾…...

SEO_中小企业如何低成本做好SEO?完整方案介绍

前言:SEO对中小企业的重要性 在数字化时代,网站的流量和用户参与度直接影响到企业的销售和品牌知名度。特别是对于中小企业来说,如何通过低成本的方式提升网站的SEO表现,是每一个创业者和市场营销人员都关心的问题。SEO&#xff…...

从交通工具到“第三空间”:车载光学赋能下的汽车演进之路

摘要 随著软件定义汽车(SDV)与集中式电子电气架构的深度落地,汽车正从“以驾驶为中心的交通工具”向支持持续OTA更新的移动智能终端演进,逐步成为用户在家庭与办公室之外的“第三空间”。这一转型因自动驾驶出租车与自动驾驶卡车的快速商业化而加速,车辆被重新定义为共享…...

终极游戏清理指南:用SteamCleaner快速释放硬盘空间的完整教程

终极游戏清理指南:用SteamCleaner快速释放硬盘空间的完整教程 【免费下载链接】SteamCleaner :us: A PC utility for restoring disk space from various game clients like Origin, Steam, Uplay, Battle.net, GoG and Nexon :us: 项目地址: https://gitcode.com…...

大模型应用开发:从环境搭建到项目部署完整流程

大模型应用开发:从环境搭建到项目部署完整流程 标签:#人工智能、#大模型、#自然语言处理、#大模型开发、#智能体开发、#agent开发、#AI 系统封装学习规划(从玩具到产品) 打包成Docker:写一个Dockerfile(我手…...

Java整合海康威视热成像SDK实战:从设备登录到实时测温数据获取的完整流程(附避坑指南)

Java整合海康威视热成像SDK实战:从设备登录到实时测温数据获取的完整流程(附避坑指南) 在工业检测、医疗诊断、安防监控等领域,热成像技术的应用越来越广泛。海康威视作为国内领先的安防设备供应商,其热成像设备凭借高…...

SDMatte抠图质量评估:基于SAD、Grad、Conn指标的客观性能分析报告

SDMatte抠图质量评估:基于SAD、Grad、Conn指标的客观性能分析报告 1. 评估背景与意义 在图像处理领域,抠图技术一直是计算机视觉的重要研究方向。随着电商、设计、影视等行业对高质量图像素材需求的增长,如何客观评价抠图算法的性能成为关键…...

大模型应用开发第一课:从Prompt到Function Calling

大模型怎么在业务中发挥作用的 目前的大语言模型,几乎都是以聊天地方式来和用户进行交互的,这也是为什么OpenAI开发的大模型产品叫ChatGPT,核心就是Chat。而我们基于大语言模型LLM开发应用,核心就是利用大模型的语义理解能力和推理…...

深蓝词库转换器:3分钟掌握30+输入法词库互转的终极指南

深蓝词库转换器:3分钟掌握30输入法词库互转的终极指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾因更换输入法而丢失多年积累的个人词库&am…...

推荐系统的DIN/DIEN:LLM如何理解用户行为序列

但要注意,一旦你是冲基础模型研发组、AGI研究组那种方向,那没论文确实很吃亏,甚至 HR 默认筛掉。现在大厂里的LLM职业方向,实际上已经分化得很厉害了。你得先分清楚你想去的是哪种。一种是“研究岗”或者叫“预模型训练岗”&#…...

AI工厂令牌生产加速:统一服务与实时AI架构

使用统一服务和实时AI加速AI工厂中的令牌生产 在当今的AI工厂环境中,性能并非理论概念,而是经济、竞争和生存的关键。可用GPU时间下降1%,可能意味着每小时损失数百万令牌。几分钟的拥塞可能演变成数小时的恢复时间。机架级功率过载会导致功率…...