直线一级倒立摆我在实验室里前前后后折腾了快一个学期才把它驯服。这玩意儿看起来就是个能移动的小车顶着一根杆子但真正上手后才发现它几乎把现代控制理论里最核心的几个问题全占了非线性、欠驱动、不稳定平衡点。当年第一次看别人演示时觉得挺简单轮到自己写代码调参数才发现从建模到自起摆再到稳态平衡每一步都有无数坑在等着。这篇内容我按自己的实际调试顺序来写。先把建模这件事掰开揉碎讲清楚然后说LQR稳态控制怎么调Q/R矩阵再讲能量法自起摆的推导和控制律实现最后是起摆到平衡的切换以及从仿真移植到实物时那些文档里根本不会写的细节。适合正在做课程设计、毕设或者刚开始接触倒立摆的同学也适合那些仿真能跑通但一上实物就炸的兄弟。1. 为什么倒立摆是控制理论的“全部”建模是绕不开的第一步很多同学上来就想直接调控制器仿真里拖几个模块连一连参数随便填结果要么发散要么抖成筛子。我自己的经验是先把模型吃透后面所有问题都能在仿真里找到答案。1.1 倒立摆系统到底长什么样——先看清楚控制对象再动手直线一级倒立摆的物理结构其实很简单一条导轨上有个小车电机通过皮带或丝杠驱动小车左右移动小车上装了一根摆杆摆杆可以绕固定轴自由旋转。系统通过编码器测量小车位置和摆杆角度控制器输出直流电机的电压或力矩指令。它的难点在于两个根本特性。第一摆杆竖直向上是一个不稳定平衡点任意微小扰动都会让杆子倒下去而且倒下去的过程非常快留给控制器反应的时间往往只有零点几秒。第二系统是欠驱动的——你只能通过控制小车的水平加速度来间接影响摆杆摆杆本身没有直接的驱动装置。为了后面推导方便我先把模型参数的定义列出来这也是整个建模的起点。符号物理含义典型值M小车质量1.096 kgm摆杆质量0.109 kgb小车与导轨的摩擦系数0.1 N/(m/s)l摆杆质心到旋转轴的距离0.25 mI摆杆绕质心的转动惯量0.00223 kg·m²F施加在小车上的外力控制量x小车位移状态量θ摆杆与竖直向上的夹角状态量平衡时为0这些参数看着简单但实物调试时每一个都会给你“惊喜”。比如摆杆质量标称值和你实际秤出来的往往有偏差转动惯量更是不能直接套公式算因为摆杆不是均匀的上面还可能装了配重块。我建议在仿真阶段用标称参数到实物阶段再重新辨识。1.2 拉格朗日方程推导从物理过程到微分方程建模的方法很多牛顿力学也能推但我强烈推荐用拉格朗日方程。原因很实际——牛顿法在二维平面问题里要分析每个物体的受力容易遗漏而拉格朗日法只需要盯着系统的能量算就行逻辑上不容易出错。系统的动能由三部分组成小车的平动动能、摆杆的平动动能、摆杆的转动动能。设摆杆质心在笛卡尔坐标系中的位置为 (x l sinθ, l cosθ)则摆杆质心的水平速度为 ẋ lθ̇cosθ竖直速度为 -lθ̇sinθ。完整写出系统的动能 T 和势能 VT 1/2 M ẋ² 1/2 m[(ẋ lθ̇cosθ)² (lθ̇sinθ)²] 1/2 I θ̇²V m g l cosθ注意势能的参考点选在了旋转轴高度所以摆杆竖直向上时势能最大cosθ1竖直向下时势能最小cosθ-1。这是后面做能量法自起摆时非常重要的一个约定。拉格朗日量 L T - V代入拉格朗日方程d/dt(∂L/∂q̇) - ∂L/∂q Q_q其中广义坐标 q 分别取 x 和 θQ_x F - bẋ 是外力包括摩擦力Q_θ 0摆杆旋转轴上没有外加力矩。经过整理化简得到两个二阶非线性微分方程(M m) ẍ m l θ̈ cosθ - m l θ̇² sinθ b ẋ Fm l ẍ cosθ (I m l²) θ̈ - m g l sinθ 0这两个方程就是整个倒立摆的灵魂。可以看到方程里存在 θ̇² sinθ 和 cosθ 项这是典型的非线性项。仿真时可以直接用这两个非线性方程搭模型但设计线性控制器时必须做线性化处理。1.3 线性化与状态空间表达式在竖直向上工作点“展开”倒立摆的控制目标是让摆杆稳定在竖直向上位置所以工作点是 θ 0以竖直向上为角度零位。在这个工作点附近做小角度近似sinθ ≈ θcosθ ≈ 1θ̇² 视为二阶小量忽略。将近似代入非线性方程后得到线性方程组(M m) ẍ m l θ̈ b ẋ Fm l ẍ (I m l²) θ̈ - m g l θ 0选择状态向量 X [x, ẋ, θ, θ̇]ᵀ输入 u F输出 Y [x, θ]ᵀ整理成状态空间标准形Ẋ A X B uY C X D u其中A [[0, 1, 0, 0], [0, -(Iml²)b/Δ, m²gl²/Δ, 0], [0, 0, 0, 1], [0, -mlb/Δ, mgl(Mm)/Δ, 0]]B [0, (Iml²)/Δ, 0, ml/Δ]ᵀΔ (Mm)I Mml²C [[1, 0, 0, 0], [0, 0, 1, 0]]这里有个非常容易算错的细节。我在推导时发现由于小车位移和摆杆角度之间存在耦合A 矩阵的第三行第三列角度对角度的影响项会有一个较大的正数 mgl(Mm)/Δ这一项代表了系统的“不稳定性强度”。如果这一项算错了后面设计 LQR 时特征值分布就会完全不对。所以强烈建议把 Δ 展开后逐项核对别偷懒直接抄书上的矩阵形式。把前面的典型值代入我会得到一组数值化的矩阵A [[0, 1, 0, 0], [0, 0.0883, -0.6290, 0], [0, 0, 0, 1], [0, -0.2357, 27.8285, 0]]B [0, 0.8832, 0, 2.3566]ᵀ注意 A 矩阵中 27.83 这个数值它对应的就是摆杆倒向过程的“加速度系数”值越大说明系统越难控制。对比之下小车的位移和速度耦合项都相对较小。从这里就能直观感受到这个系统里面最难压住的是角度通道。模型建好了后面所有的控制设计才有了根基。到目前为止还只是准备工作接下来进入真正的控制算法设计。2. LQR稳态控制Q、R矩阵的调节才是核心稳态控制的目标很简单在摆杆已经接近竖直向上时通过反馈控制让小车和摆杆稳定在平衡状态。这个问题经典的解法是 LQR也就是线性二次型最优控制。但我先说明白LQR 不是说调一次参数就能一劳永逸它是一个需要反复手动试凑的过程核心工作量全在 Q 和 R 矩阵的选取上。2.1 为什么选LQR而不是根轨迹/PID全局最优与调参直觉也许你会问既然系统已经线性化了为什么不用 PID 或者根轨迹法我的回答是都能用但 LQR 在这个场景下的“心智负担”最小而且有明确的工程直觉。PID 的问题在于它是针对单输入单输出系统设计的而倒立摆是一个典型的多输入多输出问题。你可以把整个系统拆成两个回路分别用 PID 控制但角度回路和小车位置回路之间是强耦合的拆开后需要处理大量回路间的交互问题调试起来非常痛苦。LQR 的核心思想是把控制问题转化为一个优化问题在满足状态方程约束的前提下找到控制序列 u(t) 使性能指标最小。J ∫₀^∞ (xᵀQx uᵀRu) dtQ 是半正定对称矩阵用来惩罚状态偏离R 是正定矩阵用来惩罚控制量的大小。通过求解代数黎卡提方程得到最优反馈增益 K控制律为 u -Kx。LQR 最诱人的地方在于Q 和 R 的每一个对角线元素都有明确的物理含义。Q 里第一行第一列对应小车位置 x值越大说明越看重小车位置精度第三行第三列对应摆杆角度 θ值越大说明越看重角度稳定。这种“物理直觉”在工程调试时价值巨大比折腾 PID 的三个增益系数直观得多。当然也要说句公道话LQR 的最优性是在二次型指标意义下的最优实际工程里“最优”不一定等于“最好”。有时你为了追求更快的响应速度适当增大 Q代价是控制力变大可能在实物上限位打满甚至撞轨。所以调参不能只看仿真还要考虑执行器的物理约束。2.2 Q、R矩阵的工程调法从“先稳住角度”开始我刚开始做的时候走了不少弯路一上来就想让小车位置和摆杆角度同时快速收敛结果 Q 矩阵里每一个对角线元素都设得很大R 设得很小仿真出来的控制力曲线像一个疯狂痉挛的脉冲根本无法在实物上实现。后来总结出一套比较稳妥的调参顺序。先把目标聚焦在“角度稳定”上然后再去兼顾小车位置。具体操作是保持小车位置和速度的权重适中优先加大角度项的权重。以一个我自己验证过的初始参数为例Q diag([500, 10, 1000, 10])R 1解释一下我为什么这么设。小车位置权重 500——这个数不能太小否则小车会在大范围内漂移最终滑出轨道但也不能太大太大会把控制器的“注意力”全部吸引到位置通道上导致角度控制力度不够。角度权重 1000这是整套参数里最重要的一项它保证了系统对角度偏差非常“敏感”一旦摆杆偏离竖直位置控制器会迅速产生较大的反向力矩。速度项的权重设得很小原因在于速度项本身是阻尼性质的权重太大反而会让系统响应变慢。在 MATLAB 中求解增益的代码非常简单% 已定义好 A, B, Q, R K lqr(A, B, Q, R); % 计算出的典型结果: K [-70.71, -33.16, 105.10, 18.72]这里的 4 个数值分别对应状态 x、ẋ、θ、θ̇ 的反馈增益。注意角度增益 105.10 在所有分量里是最大的这正好对应了“优先稳住角度”的设计思路。如果算出来角度增益不是最大的说明你的 Q 矩阵设反了需要回去检查。2.3 仿真验证阶跃响应与特征值分析参数选定后别急着上实物先用闭环系统验证一下特征值分布。闭环系统矩阵是 A - BK其特征值直接决定了系统的响应特性。e eig(A - B*K); % 典型结果: -6.42 ± 6.20j, -7.87 ± 1.83j从特征值可以看出两个主导极点分别是 -6.42±6.20j 和 -7.87±1.83j实部都在左半平面系统稳定阻尼比约 0.72超调量适中时间常数约 1/6.42 ≈ 0.16 秒也就是大约 0.5 秒内能进入稳态。这里有个细节值得注意LQR 算出来的极点会自动满足“实部不要太大”的约束因为太大的实部意味着极大的控制增益会让执行器饱和。如果发现特征值实部的绝对值超过 15通常需要增大 R 来减小控制力度反之如果系统响应太慢就减小 R 或者增大 Q 中的角度项。仿真验证时我习惯加一个角度扰动比如初始角度设为 0.1 rad约 5.7°观察系统状态的过渡过程。在给定参数下摆杆角度会在约 0.4 秒内回归 0 附近小车位移最大偏移约 0.06 米控制力峰值约 12 N。这些数据可以作为实物调试的参考标尺——如果实物响应明显慢于这个速度多半是模型参数不准确或者摩擦力比预期大。到这里稳态控制就算完成了。但有个问题LQR 只有在摆杆“接近”竖直向上时才有效如果摆杆一开始是自然下垂的直接用 LQR 会产生巨大的角度偏差控制器瞬间饱和反而把摆杆推得更远。所以必须有自起摆环节。3. 能量法自起摆给摆杆“注能量”的完整推导自起摆swing-up正是倒立摆项目里最有意思的部分。目标很直白初始时摆杆自然下垂控制系统需要像“荡秋千”一样往复摆动小车逐步给摆杆注入足够的能量直到它摆到竖直向上附近然后切换成 LQR 稳态控制。3.1 为什么会有“自起摆”这个需求摆杆不会自己立起来从能量角度看摆杆自然下垂对应的是系统能量局部最小点。要把摆杆从竖直向下“翻”到竖直向上必须给它注入至少 2mgl 的能量差以旋转轴高度为零势能面竖直向下势能为 -mgl竖直向上势能为 mgl。而系统是欠驱动的你无法直接对摆杆轴施加力矩只能通过加速度作用在小车上间接地让摆杆获得能量。这个过程的物理直觉很像荡秋千。人坐在秋千上你不是直接用手去拉链条把秋千“提”上去而是通过身体的蹲起动作改变重心配合秋千的运动节奏一点点把振幅扩大。倒立摆的起摆原理一模一样——在小车运动的合适相位施加合适的加速度让摆杆的角度振幅逐渐增大。如何判断“合适的相位”这就需要把问题转化成能量误差的形式让我来推导一下。3.2 能量函数设计把“立起来”翻译成数学语言设摆杆相对竖直向上方向的角度为 θ竖直向上时 θ0竖直向下时 θπ。摆杆的机械能为E 1/2 (I ml²) θ̇² mgl(cosθ - 1)表达式的第一项是摆杆绕转动轴的动能第二项是势能相对于竖直向上点的差值。当摆杆静止在竖直向上时θ0、θ̇0所以 E0。当摆杆静止在竖直向下时θπE mgl(cosπ - 1) -2mgl这是全场的最小值。控制目标是把整杆的能量从 -2mgl 提拉到 0并且在到达 0 时角度和角速度同时满足“接近竖直且动能尽可能小”的条件。接下来对 E 求时间导数dE/dt (I ml²) θ̇ θ̈ (-mgl sinθ) θ̇ θ̇ [(I ml²) θ̈ - mgl sinθ]回看前面线性化之前的那个力矩方程(I ml²) θ̈ ml ẍ cosθ - mgl sinθ 0从方程中解出 (I ml²) θ̈ - mgl sinθ -ml ẍ cosθ代回能量导数表达式得到dE/dt -ml ẍ θ̇ cosθ注意这里 ẍ 是小车加速度。这个式子非常关键能量变化率正比于小车加速度、摆杆角速度和 cosθ 的乘积。小车加速度是我们能控制的量所以可以这么设计控制策略——当摆杆向下摆θ̇cosθ 为负时给小车一个向右的加速度ẍ 为正能量就会增加反之亦然。为了最大化能量注入效率小车加速度 ẍ 应该始终与 -sign(θ̇ cosθ) 同号并且幅值越大效率越高。但受限于电机力矩和轨道长度加速度不可能无限大这就引出了下面基于饱和函数的控制律。3.3 饱和非线性控制律与参数调节工程中最常用的自起摆控制律形式是带饱和限幅的能量反馈u sat(k_p · (E - E_ref) · sign(θ̇ · cosθ))其中 E_ref 0 是目标能量k_p 是起摆增益sat() 是饱和函数用来限制输出力的最大值。这里有个细节我要特别讲清楚为什么要乘一个 (E - E_ref) 而不是直接用常数因为随着摆杆能量逐渐接近目标如果还用一个很大的恒定力去推会“过冲”——摆杆到达竖直向上那一刻的角速度太大LQR 根本接不住。乘以能量误差项后越接近目标能量施加的控制力越小起摆过程自然趋于平缓这是一个非常优雅的软着陆机制。实际控制时控制量是力 F它与小车加速度的关系为 F ≈ (M m) ẍ忽略摩擦。所以完整的控制律写为F sat(k_p · (E - E_ref) · sign(θ̇ · cosθ))饱和上限的取值大家参考一个原则如果系统额定输出力是 20 N可以把饱和上限设为 10~15 N给稳态控制阶段留下余量。太小会起摆极慢甚至停滞太大则容易让小车高速撞击限位开关非常危险。参数 k_p 的调节也很有讲究。k_p 太小起摆过程中的能量增长速率过慢可能要花十几秒才能摆上去k_p 太大系统会表现出严重的“硬碰硬”行为小车猛烈撞击行程末端并且如果编码器读数有噪声巨大的控制增益会把噪声放大成高频振动。我实测下来一个合理的工作范围是 k_p 在 1~5 之间具体值结合你系统的质量参数和力饱和上限来试。能量法自起摆最让我觉得舒服的一点是它根本不需要知道摆杆当前的具体角度模式就靠一个能量误差信号配合相位符号来判断该往哪个方向加速。实现起来简洁、鲁棒并且和后续的 LQR 切换天然兼容。4. 起摆到平衡的切换工程实现中最容易翻车的一环我敢说十个人做倒立摆有七个能搞定单独的自起摆和独立的 LQR但真正让整体系统稳定工作的切换逻辑能把一大半人拦住。这部分在教科书里通常只有一句话——“当摆杆接近竖直时切换控制器”但实际做起来远比这句话复杂。4.1 切换时刻怎么确定角度、角速度与滞回区间最简单的切换条件是角度阈值当 |θ| θ_thresh 时从起摆模式切到 LQR。但如果你真的只用这一个条件大概率会在切换瞬间看到控制力突变系统猛地一抖然后倒下。原因在于起摆控制的输出力方向是基于能量误差计算的而 LQR 的输出力方向是基于状态偏差计算的两者在切换边界上的值往往相差很大。切换瞬间相当于控制量发生了一次阶跃这对不稳定系统来说是一个很强的扰动。我的做法是设置一个“捕获区间”加上滞回逻辑。捕获区间要求角度和角速度同时满足条件才允许切换|θ| 15° 且 |θ̇| 0.8 rad/s角度限 15° 是因为 LQR 在小角度范围内线性化误差足够小角速度限 0.8 rad/s 是为了确保摆杆到达竖直位置附近时还有足够的“余量”让 LQR 捕获。如果角速度太大即使角度进入了 15° 范围摆杆也会很快甩出去LQR 来不及反应。滞回逻辑用于防止切换后在两个控制器之间来回跳变。一旦切入 LQR 模式只有当角度偏差超过 30° 才允许退回起摆模式。这样即使 LQR 阶段出现小幅扰动也不会导致模式反复切换系统更稳定。4.2 控制量切换的平滑处理限幅与过渡即使满足条件切换控制量的突变仍然难免。我见过两种主流处理方案。第一种是简单的加权过渡在切换瞬间设定一个短暂的过渡窗口比如 0.1 秒期间实际输出力为两种控制器的加权平均。u (1-α)u_swingup αu_lqrα 从 0 线性过渡到 1。这个方案实现简单但会引入一个额外的时间参数调的时候多少有点经验成分。第二种是“控制量限幅匹配”。在起摆模式的饱和上限设得和 LQR 模式的最大输出一致这样即使切换瞬间控制量发生跳变跳变幅度也不至于太大。这个方案我从第二版开始一直用配合角度角速度双重条件切换冲击基本可以接受。我个人建议两种结合先让两个控制器的输出限幅保持一致再加一个非常短的过渡5~10 个控制周期加权平均。在 1 kHz 的控制频率下这个过渡窗口其实只有几毫秒不会明显影响动态性能但能把切换力矩突变削掉一大截。4.3 切换失败的表现及对策切换失败的症状其实很有规律。我归纳了几种常见情况。症状一切换后摆杆快速倒向一边。这通常是切换时角速度条件没满足LQR 捕获窗口太窄或者是 Q 矩阵里角度权重不足恢复力矩不够。对策是检查切换条件中的角速度阈值并把角度权重调大。症状二切换瞬间小车猛冲然后限位报警。这多半是起摆模式的最终力输出和 LQR 初始输出方向相反且幅值很大切换过渡处理没做好。对策是加过渡窗口或者检查起摆模式的饱和上限是否设置过大。症状三系统在两种模式之间反复横跳始终无法真正稳定。这是因为滞回逻辑没做或者切换后角度阈值设得太小稍微有点扰动就触发了回落条件。对策是加滞回带比如 LQR 模式下角度超过 30° 才允许退回起摆。实操中还有一个隐性细节——编码器安装零位。切换条件里的 θ 是相对“竖直向上”的角度但编码器的物理零位通常对应摆杆自然下垂状态需要在初始化时做个零位校准。校准的方法很简单让摆杆自然下垂记录此时编码器读数作为角度偏移量然后所有角度计算都减去这个偏移再加一个 π 的翻转。这个操作看似不起眼但忘了的话整个系统从第一秒起就是错乱的。切换调好之后整套系统的逻辑闭环就完整了起摆控制注入能量、捕获区间判定、LQR 维持稳定、异常回落重新起摆。下一步就是最关键的一步——把这个系统搬到实物上看它还能不能活。5. 从仿真到实物参数落地与调试踩坑记录仿真跑通了只是第一步实物调试才是真正让人成长的地方。仿真模型里忽略的摩擦力矩、编码器噪声、电机死区、导轨不水平全都会在实物上找上门来。我把这个过程中遇到的最典型的几个问题按调试顺序分享出来希望你少走弯路。5.1 仿真模型和现实世界的“误差账”仿真模型虽然用的是非线性微分方程但绝大多数参数都是理想化的摩擦力只考虑线性粘滞摩擦实际系统中还存在静摩擦和库仑摩擦电机被视为理想力矩源实际存在响应延迟并且电压和力矩之间有饱和非线性导轨的安装也不可能绝对水平微小的倾角相当于系统始终叠加上一个常值扰动。这些误差累计起来最直接的后果是按仿真最优参数设置的 LQR 增益在实物上往往不够用因为实际系统的阻尼比和固有频率都跟模型有偏差。我的心得是实物调试时把仿真算出的 LQR 增益当作初始值然后在现场继续微调典型的变化幅度在 30%~50% 左右。这里提供一个非常有效的办法先在 Simulink 里把摩擦模型升级为“粘滞摩擦 库仑摩擦 死区”的复合模型把参数调到和实物行为一致再用这个增强模型去调试控制器能让仿真到实物的鸿沟缩小很多。5.2 编码器噪声与速度估计实测最影响手感的部分角度和位置是编码器直接测量的噪声不大但速度必须通过对位置差分求得差分运算会将高频噪声放大。你可以想象一下位置信号叠加了幅度 0.001 mm 的白噪声差分后速度噪声可能达到几 mm/s 量级再乘上 LQR 里较大的速度增益控制量上就会叠加明显的毛刺。我的处理方式是角度差分得到角速度后经过截止频率约 30~50 Hz 的一阶低通滤波器。滤波会带来相位滞后但倒立摆的主要动态集中在 2~5 Hz30 Hz 的滤波截止频率引入的相位滞后很小可以接受。另一个很实用的做法是加快控制周期。同样的差分噪声在 1 kHz 控制频率下引起的速度估计相对误差远小于在 100 Hz 下。因为控制频率越高每个周期内位置变化的量越小是相对的差分噪声的功率被分散到更宽的频带上。我最初用 200 Hz 控制频率角度稳定时振幅在 ±2° 左右后来改成 1 kHz同等参数下振幅直接降到 ±0.5° 以内效果立竿见影。5.3 摩擦、限位与安全保护LQR 设计时默认控制量可以任意大但实物电机输出有限而且小车行程有限。所以代码里必须有这两层保护一是输出限幅我这里设的是 ±15 N超过就截断二是行程限位当 |x| 0.35 m轨道有效行程 0.8 m 左右时强制停机或自动切换到回中控制。摩擦力这块要单独说。我曾遇到过一个问题小车在速度接近零时由于静摩擦的存在微小控制力根本推不动小车形成了稳态误差。LQR 输出一个 1 N 的力但小车纹丝不动积分作用又不在 LQR 的框架内导致角度最终以微小偏差悬停。解决方法是加入静摩擦补偿检测到小车速度绝对值小于某个阈值且位置偏差存在时额外叠加一个方向与期望运动方向一致的补偿力。补偿力的大小通常取实测静摩擦的 80%~90%不宜全补。全补会导致系统在零速附近产生极限环振荡表现为小车周期性地向两边微动角度也跟随小幅度抖动。5.4 实测调试顺序和最终参数实物调试一定不要上来就全系统联调。我的调试验证顺序是先开环控制小车移动确认电机方向和编码器方向一致然后用手扶住摆杆接近竖直向上开启 LQR 看能不能稳定稳定后再测试小扰动下的抗干扰能力最后才启用自起摆逻辑。这个顺序每步都验证了前一步的基础正确性。特别是第二步用手扶住摆杆竖起来的时候心里要有准备——如果 LQR 参数不对摆杆会在 0.5 秒内倒下注意手别被打到。我建议你第一次测试时先把输出限幅调小比如 ±5 N这样即使控制方向反了力度也不至于砸伤人。最终在我这套实验平台上调试收敛后的一组参数供参考参数值备注LQRQdiag([500, 10, 1000, 10]), R1具体K值由lqr函数计算起摆增益 k_p2.5力饱和上限 12 N切换角度阈值15°角速度阈值 0.8 rad/s滞回回落阈值30°LQR模式下的回落条件控制频率1 kHz固定步长实时运行速度滤波截止频率40 Hz一阶低通这套参数对这台特定设备来说是工作的但不代表可以原样照搬到你的设备上。每个系统的质量、摩擦、电机特性都不一样正确做法是把这套参数作为起点按前面说的方法逐步调整。最后还有一个小经验。如果你发现切换后依然偶尔失败别急着调那些复杂的参数先看日志里的角度曲线。我遇到过最隐蔽的问题居然是角度零位偏移了 2°——因为长时间运行后摆杆底座发生了微小的机械松动。每隔一段时间重新做一次零位校准能省去很多不必要的怀疑和折腾。
阅读完成 · 觉得有帮助?