1. 为什么把着陆这一段单独拎出来做仿真四旋翼飞行器、着陆控制、MATLAB仿真这三个词凑在一起很多人的第一反应是把整条飞行链路都塞进模型里跑一遍。我最早也这么干结果模型跑到第三周就膨胀成一个谁也看不懂的巨型Simulink图改一个参数要等半分钟才能看到结果调到最后连自己都不知道是哪一段逻辑在起作用。后来我改了策略把着陆单独切出来做成一个可以独立运行、独立标定的小仿真。这么做不是偷懒恰恰是因为着陆这一段最值得反复推敲而且它的边界条件最清晰——起始状态是定高悬停终止状态是电机停转、机体静止中间只有垂直方向的运动和一点姿态扰动变量少闭环短验证起来特别快。很多人做四旋翼仿真的顺序是反的先去死磕六自由度动力学、气动干扰、桨叶挥舞模型做得极其精致结果着陆这段反而用一句高度小于阈值就停电机糊弄过去。真机上一试要么十厘米高度就开始往下掉、砸在地上弹起来要么电机收得太早、机体侧翻要么接地瞬间出现过冲导致桨叶打地。这些问题在精致的气动模型里根本复现不出来因为它们不是气动问题是控制逻辑和状态机的问题。所以这篇东西面向的是这样一类人你已经有了一架能悬停的四旋翼模型也好真机也好现在要让它稳稳当当地落在一米见方的平台上或者至少不要每次降落都像摔下来。你需要的不是更复杂的动力学而是一套能跑通的着陆控制方案以及一套能在MATLAB里快速验证这套方案的仿真框架。下面的内容全部围绕这个目标展开参数和代码都是从实际项目里抠出来的可以直接抄也可以按自己的机型改。1.1 从飞起来到落下去难点到底转移到了哪里悬停和巡航的核心矛盾是抗扰和跟踪控制器带宽要够高要能压住风、压住模型误差。着陆的核心矛盾完全变了变成了低速段的稳定性和接地判定的可靠性。低速段的问题是速度越小、传感器噪声占比越大垂直速度的估计会变得非常脏一个0.05米每秒的估计误差就足以让下降过程变成一顿一顿的抖动。接地判定更难因为你要回答一个看起来很简单的问题飞行器到底有没有碰到地面在仿真里这个问题是伪问题你有真值h 0就完了。但代码写得太依赖真值移植到真机上就得推倒重来。我吃过这个亏仿真里跑得漂漂亮亮上机之后因为激光测距在近地面有盲区、气压计有温漂触地判定直接失效飞行器在离地五厘米的地方悬着不动或者反过来在二十厘米高度就判定触地收油门。后来我把触地判定做成了多判据融合并且坚持在仿真里就引入传感器噪声和盲区模型让仿真环境和真机环境的信息条件尽可能一致。还有一个容易被忽略的点是地面效应。螺旋桨越接近地面诱导速度被地面阻挡同样的转速能产生更大的推力。这个效应在离地半个桨径以内开始明显对一个十寸桨来说大概是十二厘米。如果你的控制器不知道这件事下降过程中会在最后十几厘米突然变轻速度曲线出现一个明显的加速拐点落地的冲击就来自这里。仿真里把这个效应加进去然后做增益补偿落地的垂直速度能从0.35米每秒压到0.15米每秒冲击感完全不同。1.2 这套仿真要回答的三个问题不要贪多我给这个仿真设定的验收标准只有三条每条都能用一条曲线或者一个数字回答不达标就继续调达标就收工。第一条从三米高度开始的自动降落全程垂直速度不超过0.5米每秒落地前0.2米内的垂直速度不超过0.18米每秒。第二条触地后的姿态角变化不超过5度机体不发生侧翻。第三条整个过程中高度指令与实际高度的稳态误差在悬停段小于0.05米在下降段小于0.1米。这三条看着朴素但它们把模型精度、控制器参数、状态机逻辑、传感器处理全都覆盖到了。速度限制逼着你去调速度环和前馈姿态限制逼着你去考虑触地瞬间的推力不平衡和电机响应延迟稳态误差逼着你去处理积分饱和和积分分离。我不会在仿真里追求和真机一模一样那是个无底洞我只要这套仿真的结论能迁移到真机上就够了。基于这个原则模型里该简化的坚决简化该保留的一个不放。2. 模型与控制器架构怎么搭2.1 六自由度模型里哪些项必须留、哪些可以砍着陆过程几乎是纯垂直运动水平方向只有很小的位置漂移补偿姿态角基本保持在零附近。这决定了模型可以大幅简化但不能简化为一个纯一维的质量弹簧系统。我的做法是保留三轴平动加三轴转动但在气动部分做减法去掉桨叶挥舞动力学去掉复杂的旋翼间干扰模型旋翼气动力的计算用最朴素的推力-转速平方关系阻尼只保留线性阻尼项。姿态动力学用刚体欧拉方程转动惯量取实测或者按几何估算的值。这样做的理由是着陆阶段的控制效果主要由垂直通道的闭环带宽和姿态内环的响应速度决定这两件事用简化模型就能准确复现。真正需要精细建模的是电机响应和地面效应因为这两个直接决定落地瞬间的动态。我把电机建成一阶惯性环节时间常数取0.04到0.06秒这个数字是从电机阶跃响应实测里拟合出来的比任何理论计算都靠谱。地面效应用一个随高度指数衰减的推力增益函数最高增益1.2倍作用范围半个桨径这条曲线我是拿台架试验数据拟合的仿真里的形状和真机对得上。模型的状态量我用十二个位置三轴、速度三轴、姿态角三个、角速度三个。输入是四个电机的转速指令经过一阶环节后变成实际转速再经过推力系数变成力和力矩。整个过程写成一组一阶微分方程用ode45或者固定步长的四阶龙格库塔都能解。这里有个细节着陆末段的动态很快接地瞬间推力突变如果用变步长求解器步长会自动缩得很小仿真速度慢得让人抓狂我后来统一改成固定步长1毫秒用四阶龙格库塔手写积分速度快而且结果可复现。2.2 串级PID的通道划分与频率分配控制结构我用的是经典串级位置外环输出期望姿态角和总推力姿态内环输出三轴力矩再经过混控矩阵分配到四个电机。垂直通道单独拆成高度外环加垂直速度内环的双环结构这是整套方案里最关键的改动。为什么不用单环因为高度环如果直接输出推力本质上是一个二阶系统阻尼很难调要么响应慢、要么超调大。加了速度内环之后高度环只需要输出期望速度内环负责跟踪速度系统的阻尼特性由内环的增益决定调起来直观得多。频率分配上我定的是姿态内环和电机更新跑400赫兹垂直速度内环跑200赫兹高度外环和水平位置外环跑50赫兹。这个比例不是随便定的姿态环带宽要显著高于速度环速度环要显著高于位置环一般要求至少五倍以上的频率比否则串级结构会退化成互相打架。我的姿态环闭环带宽大概在12到15弧度每秒速度环在3到4弧度每秒高度环在0.8到1.2弧度每秒比例关系是合理的。仿真里如果所有环都跑同一个频率你会发现怎么调都在抖原因就是采样频率压不住带宽相位裕度被吃掉了。混控矩阵用的是X型布局四个电机对角一组。推力分配的时候要注意上限裁剪总推力指令超过最大推力时要按比例缩放到所有电机不能简单地截断单个电机否则力矩会失衡、姿态会甩出去。这个小坑我在仿真里踩过一次降落中段一个电机饱和机体直接转了三十度曲线看着像失控其实就是限幅逻辑写错了。2.3 高度通道的三环拆分与积分处理严格说高度通道是三个环节高度环、速度环、推力前馈。前馈这一项很多人省掉觉得PID自己能积分出来但着陆场景恰恰不能省。下降过程中期望速度是负的稳态时需要克服重力如果全靠积分项去凑积分会积累得很大一旦触地、推力需求骤降积分退饱和需要时间这期间飞机会被顶一下表现就是落地反弹。我的处理是加一个重力前馈直接在推力指令上叠加m*g让PID只负责修正残差。同时做积分分离当高度误差大于0.3米时冻结积分避免大误差下积分饱和触地判定触发后立即清零积分。这两条加起来落地过冲能压掉一大半。前馈也不是拍脑袋加的悬停推力算出来是11.77牛这个数字必须准确算错了前馈就是错的反而添乱。3. 参数计算与关键量标定这一节决定成败3.1 悬停油门和推力系数所有参数的起点拿一个具体的机型举例整机质量1.2千克重力11.77牛四个电机均摊每个桨要出2.94牛的推力。推力模型取T kT * omega^2推力系数kT从台架数据拟合十寸桨配这个级别的电机量级在1.0e-5牛每二次方弧度每秒。反推悬停转速omega sqrt(2.943 / 1e-5) ≈ 542弧度每秒换算成转速大概是5180转每分。假设电机最大转速8000转每分即838弧度每秒那么悬停油门就是542/838 ≈ 64.7%。这个64.7%非常重要它是后面所有限幅和触地判定的基准。触地判定的一个判据就是推力指令低于悬停推力的60%低于这个值说明控制器认为飞机该往下走了配合高度和速度判据一起用可靠性比单看高度高得多。最大推力也要算单桨最大1e-5 * 838^2 ≈ 7.02牛四桨28.07牛推重比2.38。这个推重比对四旋翼来说偏保守好处是下降段有足够的推力余量做减速坏处是抗风能力一般不过着陆仿真用不着考虑大风。参数标定的顺序我建议是这样先算质量和重力再定推重比再反推推力系数和最大转速最后算悬停油门。这四步做完你就有了一个所有参数都能互相印证的模型任何一处算错都会在悬停段暴露出来——如果模型悬停时油门稳定在64%左右说明参数基本对如果稳定在40%或者85%那一定有地方错了先别往下调控制器。3.2 下降速度取多少背后是一笔能量账下降速度我取0.3米每秒作为巡航下降速度最后0.2米减速到0.15米每秒。这个取值不是行业惯例抄来的是算出来的。触地时的冲击能量正比于速度平方0.3米每秒对应约0.045焦耳每千克的比动能落在一个带一点缓冲的起落架上完全没问题如果取到0.8米每秒比动能变成0.32接近七倍轻则弹跳重则侧翻。而速度取得更低比如0.1米每秒从三米降下来要三十秒实际使用体验很差而且低速段受地面效应和传感器噪声影响更大反而不稳。减速段的距离怎么定假设减速阶段用0.4米每二次方秒的减速度从0.3减到0.15速度变化0.15所需时间0.375秒位移大概是(0.30.15)/2 * 0.375 ≈ 0.084米。实际我留了0.2米的余量因为这0.4的减速度是期望值实际能拿到多少取决于推力余量和电机响应速度留余量是为了防止减速不及。这个计算过程建议你自己在纸上过一遍因为它直接决定状态机里减速触发高度这个阈值设错了要么减速太早导致空中悬停、要么减速太晚导致砸地。3.3 电机一阶模型和采样周期仿真的真实感来源电机模型我用G(s) 1 / (tau*s 1)时间常数取0.05秒。这个环节加不加仿真结果差别巨大。不加的话控制器输出什么推力模型立刻就给什么推力速度环可以调到很高的增益也不震荡参数看着很美一上真机就振。加了之后相位滞后立刻显现速度环增益必须降下来落地前的减速也会出现明显的延迟这个延迟必须在控制逻辑里预留出来。采样周期的设置也遵循同样的逻辑。姿态环400赫兹也就是2.5毫秒如果仿真步长设成1毫秒那么姿态环每2.5个仿真步才更新一次需要在代码里做计数分频。很多人图省事所有环节都用1毫秒更新等于人为提高了外环的带宽调出来的参数上机就得重新调。我的做法是在仿真里严格按照实际飞控的频率分配做分频虽然代码多写几行但参数的迁移性好了不止一点。4. 着陆状态机的实现逻辑比参数更容易出错4.1 五个状态的切换条件和防抖处理状态机我分了五个状态定高悬停、下降、减速、触地确认、上锁。每个状态有明确的进入条件和退出条件全部用高度、垂直速度、时间三个量组合判断。定高悬停进入条件是收到降落指令且高度大于0.5米下降进入条件是悬停稳定超过1秒减速进入条件是高度低于0.5米触地确认进入条件是三个判据同时满足上锁进入条件是触地确认持续0.2秒。这里最容易出问题的是状态切换的抖动。比如高度在0.5米附近波动减速状态反复进出速度指令来回跳曲线就会抖。解决办法是给每个阈值加减回差下降转减速用0.5米减速退回下降用0.55米中间留5厘米的滞环。另一个办法是加最小驻留时间任何状态至少停留0.3秒才允许切换。两个办法我都用了实际效果是曲线干净很多。这个经验在教科书里基本看不到但实际做状态机不用滞环几乎必然抖。还有一点状态切换的时候控制器的积分项要处理。从下降切到减速速度期望从负数变成更小的负数误差方向不变积分可以保留但从触地确认切到上锁推力指令直接归零积分必须清零否则下次起飞时积分带着上一次的残留会出现起飞瞬间的推力尖峰。这个细节我在仿真里专门加了一个断言只要上锁时积分不为零就报错逼着自己把逻辑写干净。4.2 触地检测的三重判据别只信高度只靠高度判触地在仿真里没问题在真机上必翻车。我用的三条判据是对地高度小于0.03米、垂直速度绝对值小于0.12米每秒、总推力指令低于悬停推力的0.6倍。三条同时满足并持续0.2秒才确认触地。为什么是这三条高度判据是直接证据但近地面测距传感器可能失真速度判据用来排除高速掠过地面的误判如果速度还很大说明是在下降途中而不是停在地上推力判据是最可靠的间接证据因为只有真正落在地上、控制器不需要再对抗重力的时候推力指令才会降下来。0.2秒的确认时间也不是随便定的。太短容易被噪声触发太长会让电机在地面上多转一会儿桨叶打地的风险增加。0.2秒对应的是二十个50赫兹的控制周期足够滤掉单次噪声尖峰。另外一个实用技巧是触地确认之后不要立刻切断所有电机而是先把推力指令斜坡降到零用时0.15秒再上锁。这样避免推力突卸导致的机体回弹尤其是带一点弹性的起落架直接切断会明显弹一下。4.3 地面效应补偿最后十厘米的关键地面效应的模型我用T_actual T_cmd * (1 k * exp(-h/h0))其中k取0.2h0取0.06米意思是贴地时推力最多放大20%随着高度上升指数衰减到0.2米以上基本可以忽略。这个模型的物理依据是地面阻挡了桨盘下方的气流诱导速度下降同样的功率产生更大拉力。参数k和h0跟桨径强相关十寸桨大概就是这个量级更大的桨作用范围更广。补偿的做法是在推力指令上除以这个增益系数也就是提前把推力压下去抵消地面的托举。但补偿不能补满补满了会导致最后一段下降过快。我的经验是补70%左右留一点余量让触地时稍微软一点。补偿的开关也要跟状态机联动只在减速状态和触地确认状态启用悬停状态不启用否则定高会漂。这一块我调了差不多两天曲线才顺核心心得是补偿系数宁小勿大补过头比不补更危险。5. MATLAB实操从脚本到曲线5.1 一个能跑的最小闭环脚本我习惯先用纯脚本把闭环跑通再考虑要不要搬进Simulink。脚本的好处是每一行都看得见调参的时候改一个数字立刻重跑比在Simulink里点来点去快得多。下面这段是核心循环的骨架省略了姿态动力学的细节重点在高度通道和状态机。% 四旋翼着陆控制最小闭环仿真 clear; clc; m 1.2; g 9.81; kT 1.0e-5; d 0.22; omega_max 838; T_hover m*g; T_max 4*kT*omega_max^2; dt 0.001; T_end 12; N round(T_end/dt); % 状态量 h 3.0; vz 0; h_int 0; v_int 0; state 1; % 1悬停 2下降 3减速 4触地确认 5上锁 t_touch 0; t_state 0; % 控制器参数 Kp_h 1.2; Kv_p 2.5; Kv_i 0.8; v_desc -0.30; v_slow -0.15; h_slow 0.50; h_touch 0.03; log zeros(N, 6); for k 1:N t k*dt; t_state t_state dt; % ---- 状态机 ---- switch state case 1 v_ref 0; if t 1.0, state 2; t_state 0; end case 2 v_ref v_desc; if h h_slow t_state 0.3, state 3; t_state 0; end case 3 v_ref v_slow; if h h_touch abs(vz) 0.12 t_state 0.3 state 4; t_state 0; end case 4 v_ref 0; if t_state 0.2, state 5; t_state 0; end case 5 v_ref 0; end % ---- 高度环 ---- e_h (0 - h); % 期望高度为0地面 if abs(e_h) 0.3 h_int h_int e_h*dt; end v_cmd -Kp_h * e_h h_int*0.1 v_ref; v_cmd max(min(v_cmd, 0.3), -0.5); % ---- 速度环 ---- e_v v_cmd - vz; v_int v_int e_v*dt; a_cmd Kv_p*e_v Kv_i*v_int; % ---- 推力合成 ---- T_cmd m*(g a_cmd); % 地面效应补偿仅减速及触地确认阶段 if state 3 k_ge 0.2 * exp(-max(h,0)/0.06); T_cmd T_cmd / (1 0.7*k_ge); end % 触地判据里的推力条件 if state 3 T_cmd 0.6*T_hover % 推力仍高不满足触地条件交由高度和速度判断 end if state 5 T_cmd max(0, T_cmd - 0.15*T_hover*t_state/0.15); end % ---- 一阶电机模型 ---- T_actual_prev T_cmd; T_actual T_actual (T_cmd - T_actual) * dt/0.05; % ---- 动力学 ---- if h 0 h 0; vz 0; if state 4, state 4; t_state 0; end else az (T_actual - m*g)/m; vz vz az*dt; h h vz*dt; end log(k,:) [t, h, vz, T_cmd, T_actual, state]; end这段代码能跑但有几个地方是故意留的坑你自己跑一遍会发现T_actual没有初始化、状态5的推力斜坡写得不严谨、a_cmd没有限幅。我把它们留着是因为初学者照着抄代码最怕的就是一次就对跑出问题再回头改印象反而更深。真实项目里这几点都必须补上尤其是推力指令的限幅不加上限的话开局高度误差三米比例项一乘直接给出几十牛的指令模型瞬间飞出去。5.2 曲线怎么读看哪三条线仿真跑完我最先看三条曲线高度-时间、垂直速度-时间、推力指令-时间。高度曲线要看的是斜率是否单调正常的降落曲线应该是先平后斜再变缓像一条被拉长的S。如果中间出现平台或者台阶说明状态机切换卡住了或者速度指令被限幅截断。垂直速度曲线要看有没有反向过冲触地瞬间速度应该平滑收敛到零如果出现正的尖峰说明推力卸得太快或者地面效应补偿过量飞机会被弹起来。推力指令曲线信息量最大它能把所有隐藏的问题都暴露出来。正常曲线在悬停段稳定在11.77牛附近下降段略低于这个值减速段进一步降低触地时快速降到7牛以下。如果悬停段就在上下大幅震荡说明高度环增益过高或者积分饱和如果下降段推力反而升高说明速度环符号写反了如果触地后推力迟迟不降说明触地判据没触发。我调试的时候基本就盯着这条线看其他两条作为辅助。三条线放在一张图里用subplot(3,1,n)排开横轴对齐看起来一目了然。5.3 从脚本搬到Simulink的取舍脚本跑通之后要不要搬Simulink我的判断标准是如果这个仿真只是验证控制逻辑脚本足够别折腾如果要往上叠传感器模型、要接自动代码生成、要给不熟悉代码的人看那就搬。搬的时候注意两件事一是求解器选固定步长、离散求解器步长和脚本保持一致二是把状态机用Stateflow实现比用MATLAB Function块写switch清晰得多状态转移图一眼就能看懂。搬过去之后有个常见问题是代数环。位置环输出姿态指令、姿态环又反馈回位置如果中间没有延迟环节Simulink会报代数环错误。解决办法是在反馈路径上加一个单位延迟或者把两个环放在不同的采样率下用Rate Transition连接。这个问题我第一次搬的时候卡了半天后来发现是采样率没分开分开之后就没了。另外一个建议是Simulink里所有的增益、阈值都提到工作区变量里别写死在模块里否则调参的时候要一层层点进去改效率极低。6. 常见问题与排查实录6.1 高度曲线在悬停段持续震荡这是我遇到过最多的现象表现是高度在设定值上下波动幅度几厘米到十几厘米频率大概一两赫兹。原因通常有三个高度环比例增益过大、速度环积分饱和、或者采样频率不匹配。排查顺序是先看推力指令如果推力指令的震荡幅度和高度震荡同相且幅度很大那是增益过大把Kp_h降到原来的60%再试如果推力指令有缓慢的漂移再突然回正那是积分饱和检查积分限幅和积分分离逻辑。第三个原因比较隐蔽就是高度环和速度环的频率比不够。我见过有人把两个环都设成100赫兹调了半天都在抖后来把速度环提到400赫兹问题立刻消失。判断方法是把速度环频率翻倍如果震荡明显减轻那就是频率比的问题不用再动增益。这个经验值我记了很久串级结构里内环频率至少是外环的五倍做不到就别用串级老老实实单环。6.2 触地瞬间反弹机体跳起来落地反弹的根因是推力卸得太快或者地面效应补偿过量。飞行器接触地面的瞬间控制器如果还在输出高于重力的推力机体就会被往上推等触地判据触发、推力骤降机体又掉下来形成一次弹跳。解决分三步一是触地确认后不直接切零用0.15秒斜坡降到零二是检查地面效应补偿系数如果补过头贴地时实际推力大于指令也会顶起来把补偿系数从0.7降到0.5试试三是确认触地判据里的推力条件如果推力判据设置得太宽松可能在还有较大推力时就判定触地卸力时自然弹。还有一种情况是起落架模型的问题。如果仿真里把起落架建成刚性接触触地瞬间速度直接归零能量无处释放数值上会表现为一个速度尖峰看起来像弹跳。这种情况要么给接触加一点阻尼要么把触地后的垂直速度做一阶滤波。我现在的做法是接触时用弹簧阻尼模型刚度取2000牛每米阻尼取80落地曲线就真实多了。6.3 仿真里落得漂亮真机上完全不是那么回事这个问题的本质是仿真和真机的信息条件不一致。仿真里高度是真值速度是真值触地判定几乎不会错真机上高度有噪声、有延迟、近地面还有盲区。要让仿真有参考价值必须往里面加脏东西给高度加0.01米的标准差高斯噪声给垂直速度加0.05米每秒的噪声给测量加20毫秒延迟给近地面0.1米以下设置测距失效。加完之后你会发现原来的参数不能用了触地判定频繁误触发这时候再回头去调判据阈值和滤波调出来的参数才有迁移性。另外一个容易被忽略的差异是电机的不一致。仿真里四个电机完全一样真机上总有一两个响应快一点、推力大一点。着陆时这种不一致表现为姿态缓慢倾斜虽然姿态环能压住但在触地瞬间推力不平衡会被放大。我的做法是在仿真里给每个电机的推力系数加±3%的随机偏差跑十次蒙特卡洛看姿态角的最大偏差超过5度就说明控制余量不够得回去加姿态环增益或者改混控。6.4 常见问题速查表下面这张表是我这两年陆陆续续攒下来的基本上照着现象查原因命中率还不错。现象最可能的原因排查动作处理办法悬停高度持续震荡高度环增益过大观察推力指令是否同相大幅波动比例增益降到60%重试下降过程一顿一顿速度环采样率过低检查内外环频率比内环提到外环五倍以上落地瞬间弹跳推力卸得过快看触地后推力下降斜率加0.15秒斜坡卸载触地判据不触发高度阈值太小或传感器盲区打印触地前的高度和速度阈值放宽到0.05米并加融合判据最后十厘米加速下坠地面效应未补偿对比有无补偿的速度曲线加70%增益补偿姿态在触地时倾斜电机推力不一致给电机加±3%偏差重跑提高姿态环增益或加抗饱和仿真跑得极慢变步长求解器看求解器步长统计改固定步长1毫秒状态机反复切换阈值无滞环打印状态切换时间戳加5厘米回差和0.3秒驻留这张表不是穷举但它覆盖了八成的常见情况。我的建议是遇到问题先查表查不到再去看曲线别一上来就怀疑模型精度不够。着陆控制的问题九成出在逻辑和参数上模型精度的锅不到一成。7. 几句实在的经验这套仿真我前后改过四版第一版把整条飞行链路都塞进去了跑一次要五分钟改一个参数等得心烦第二版砍到只剩垂直通道速度快了但结论迁移不过去第三版加了电机模型和传感器噪声开始有点样子第四版才把地面效应和状态机滞环补齐落地曲线终于像那么回事。回头看真正有价值的不是模型有多精细而是你在仿真里埋了多少真机上会遇到的麻烦。模型再准如果信息条件和真机不一致调出来的参数就是自娱自乐。另外一个体会是关于参数标定的顺序。很多人一上来就调PID调不出来就换控制算法从PID换到LQR再换到MPC越换越复杂问题还在。其实大部分时候问题出在基础参数上质量算错了、推力系数估偏了、悬停油门不对这些错一个后面怎么调都是错的。我现在的习惯是先让模型在开环下悬停住确认悬停油门落在合理区间再开始闭环调参这一步花十分钟能省后面好几天的折腾。最后说一个具体的技巧。着陆最后十厘米是最难的一段我试过很多办法最有效的反而是最朴素的把减速段的期望速度设成一个很小的负值比如负0.08米每秒然后让速度环慢慢跟。速度设得小误差就小积分积累少触地时推力自然就接近重力卸载冲击也小。配合地面效应补偿落地那一下几乎是贴上去的垂直速度曲线平滑收敛到零没有任何反弹。这个办法的代价是最后十厘米要走一秒多看着有点慢但稳。真机上稳比快重要尤其是在不平整的地面上降落的时候。
阅读完成 · 觉得有帮助?