资讯详情

资讯详情

空中机器人入门:四旋翼原理与旋转矩阵学习笔记

直接写正文。两周刷完Aerial Robotics前两章趁着热乎劲把课程笔记和作业里踩过的坑一起整理出来。这门课是空中机器人领域的入门基石前两周的内容设计得很聚焦第一周带你把四旋翼的机械结构和飞行原理吃透第二周开始上数学工具把坐标变换、旋转矩阵、欧拉角这些飞控算法底层的硬核东西讲明白。既适合刚接触机器人学的初学者也适合已经写过简单飞控但想补理论体系的开发者。下面按我实际学习时的顺序把核心知识点、推导细节、作业解答和经验教训一次说完。1. 空中机器人的基础概念与课程定位1.1 为什么从四旋翼入手讲空中机器人空中机器人范围很广——固定翼、直升机、多旋翼、扑翼但课程前两周把所有精力都集中在四旋翼上。这个选型非常实际四旋翼结构简单但动力学特性完整既能体现飞行的基本物理原理又足够复杂到需要严肃数学建模是做研究和新手入门的黄金折中点。固定翼升力来自机翼相对气流的速度滑翔也能飞行控制方式主要靠舵面偏转直升机靠主旋翼变桨距产生升力和姿态力矩机械结构复杂对装配精度要求极高。四旋翼采用固定桨距、电机转速差的方案四个螺旋桨的转速变化就能完成全部控制动作机械结构简化到极致——两根电机座、四个电调、一块飞控板就能跑起来。课堂上提到的一个观点很关键四旋翼实际上是个欠驱动系统它只有4个输入四个电机的转速但要控制6个自由度三维位置加三维姿态这就意味着位置和姿态无法独立解耦控制必须靠姿态变化产生的合外力来移动位置。这个认知是理解后面所有控制算法的基础。课程第一周还花了相当篇幅讲垂直飞行器的历史进退。从早期直升机原型到现代无人机核心难点始终绕不开稳定性。直升机操纵舵面多、动力学非线性强驾驶员需要极高技巧而四旋翼虽然飞行效率不如直升机但依靠现代电子飞控和反馈控制算法把不稳定的开环系统变得容易操控。这里面有个容易被忽略的技术点四旋翼必须通过对角电机转速差来抵消反向扭矩否则机身会在偏航方向打转。具体来说1号和3号电机顺时针旋转2号和4号逆时针旋转两组螺旋桨对机身产生的反扭矩相互抵消才能实现稳定的偏航控制。看似简单的布局其实是整个机械设计的精髓。1.2 前两周内容在整个机器人学体系中的位置这门课是某大学机器人学专项课程的第一门前两周打基础的性质非常明显。第一周偏工程直觉建立对四旋翼飞行器的感性认识第二周开始系统引入刚体运动学的数学表达——这是后续研究路径规划、状态估计、控制设计的地基。我自己之前用某开源飞控调过参数当时只知道调P、I、D系数能改变飞行手感但对为什么内环要快于外环为什么偏航响应比横滚慢等问题只能靠试错。刷完前两周内容再回头看很多试错经验都能用数学模型解释了飞控内环控制的是角速度外环控制的是姿态角两者通过旋转矩阵建立关系内环带宽必须足够高才能让外环的假设成立。这种原来如此的顿悟感是这门课最大的价值所在。课程配套的课后习题质量也很高不是简单的概念问答而是需要真正动手推导的数学题——尤其是旋转矩阵、角速度坐标变换这类需要扎实线性代数功底的内容。下面我把每部分知识点按学习路径展开讲。2. 第一周核心内容四旋翼的机械原理与飞行控制2.1 四旋翼的升力产生机制四旋翼的升力来源本质上是动量定理——螺旋桨加速空气向下流动空气就反过来给飞机一个向上的反作用力。课程里用动量理论做了简化建模螺旋桨产生的升力 (T)推力与转速平方成正比写成 (T k_T \omega^2)其中 (\omega) 是螺旋桨角速度(k_T) 是取决于桨形、直径、空气密度的推力系数同样地旋转的螺旋桨还会给机身一个反扭力矩 (M k_M \omega^2)。这里有个重要的比例关系推力和反扭矩都正比于转速平方但系数不同。四个螺旋桨分别产生推力 (F_1, F_2, F_3, F_4)它们的合力决定升力大小。要控制滚转就增大一侧电机的推力并减小另一侧要控制俯仰就增大前侧推力并减小后侧要控制偏航则让对角两组电机转速产生差值破坏原有扭矩平衡。课程用了一个极简但非常清晰的表格来总结四个通道与四个电机转速的映射关系我在这里也整理一份控制通道电机1电机2电机3电机4物理效果高度/总距整体升力升降滚转横滚--绕机体X轴转动俯仰--绕机体Y轴转动偏航--绕机体Z轴转动表中表示增大转速-表示减小转速。比如产生滚转力矩时左侧两个电机1和4同时加力右侧两个2和3同时卸力机身就会向右侧倾斜。注意这种操作是成对出现的——只需要用电机转速差的组合就能解耦三个旋转轴这是四旋翼能被四大类控制算法稳定驾驭的机械前提。实际做题时有个容易混淆的点螺旋桨旋转方向如果标反了上面的正负号表就全错了。课程给定的通用布局是电机1和3顺时针电机2和4逆时针从上方俯视的角度看。习题里经常给出不同的编号方式顺着对角线转向一致的原则判断即可别死记绝对方向。2.2 电机转速与飞行姿态的关系课堂内容把飞行分层拆解成了三个层次期望轨迹 → 期望姿态 → 期望转速。最顶层是位置控制器根据当前位置和目标位置输出期望的滚转、俯仰角中间层是姿态控制器根据期望姿态角输出机体三个轴的期望角速度底层是转速映射把角速度需求转化为四个电机的具体PWM值。第二周课程结束前这个关系会被完整地模型化但第一周只需要建立通过改变转速差来改变姿态的直觉。实际飞四轴时如果你把飞机拿在手上解锁并推动油门能明显感觉到四个电机转速不同——推油门时四个电机同时增速机身会有一个轻微的反向转动趋势这正是反扭矩在起作用。如果某个电机略脏或电调响应稍慢飞机会出现难以查明的抖动这个我在后面的问题排查部分细讲。2.3 第一周作业常见考点第一周的作业相对友好但有一个题值得提判断四旋翼机构图上的电机转向。我的方法是先固定一个基准电机转向然后按对角同向、相邻反向的规则补齐。这个规则背后的物理原因就是对角电机共同承担同一个方向的扭矩抵消任务一旦转向反了就无法抵消反扭矩飞机会原地打转。另一个题是给定电机推力和力臂长度的数值计算产生特定滚转力矩时两侧电机的推力差。这个纯属基础物理——力矩等于力乘以力臂——但要注意坐标轴正方向的定义是在机体坐标系下计算的。这其实是在预演第二周坐标变换的内容我当时没意识到这点做作业时绕了弯路所以建议你在学第一周时就把坐标系的意识建立起来。3. 第二周核心内容刚体运动学与坐标变换3.1 三个坐标系从哪里来第二周开篇的坐标系定义非常关键但老师的讲解风格平缓容易被低估。整个空中机器人系统里有三种参考系惯性系地面固定坐标系(A)系、机体坐标系固定在飞机上(B)系、以及描述飞机朝向的欧拉角系统。之后的课程中绝大多数的公式推导都在这几个坐标系之间来回变换。为什么不能只在惯性系里描述一切因为传感器IMU、GPS各自有自己的测量基准——加速度计测量的是机体坐标系内的比力陀螺仪测量的是机体角速度GPS给出的是世界坐标系位置。把这些数据融合之前必须统一到同一个坐标系下做变换。这个需求贯穿整门课甚至延伸到了第三、四周的状态估计与控制。作为参考我建议你现在就记住一个结论飞行器动力学方程通常在世界坐标系下写位置与速度在机体坐标系下写角速度然后通过旋转矩阵挂钩。后面所有公式推导都是这个总原则的反复演绎。3.2 旋转矩阵的构建与性质三个轴方向的单位向量在世界坐标系中的投影合起来就得到旋转矩阵 (R)。具体构造方法是把机体坐标系的三个基向量在惯性系下分别写为 (b_1, b_2, b_3)每个都是3x1列向量旋转矩阵写为[ R \begin{bmatrix} b_1 b_2 b_3 \end{bmatrix} ]这个矩阵的列向量两两正交且单位长度是正交矩阵所以 (R^T R I)且 (R^{-1} R^T)。这个性质最实用的价值就是求逆变换只需要转置不需要算矩阵逆能省不少计算量。另外旋转矩阵的行列式为1这决定了它不会引入镜像反射。课程用绕Z轴旋转 (\theta) 的例子推导了基础旋转矩阵[ R_z(\theta) \begin{bmatrix} \cos\theta -\sin\theta 0 \ \sin\theta \cos\theta 0 \ 0 0 1 \end{bmatrix} ]绕X轴的 (R_x(\phi)) 和绕Y轴的 (R_y(\psi)) 也有同样的结构只是正负号出现的位置不同。一个重点坐标变换和向量旋转的矩阵结构相同你既可以理解成坐标系被旋转了也可以理解成向量被旋转了但二者对点的具体作用相反。做题时确定自己用的是哪一种解释别混着来。3.3 欧拉角从姿态到矩阵再到解算飞行器的姿态最终要用三个角度表达——横滚 (\phi)、俯仰 (\theta)、偏航 (\psi)。欧拉角绕法的组合方式很多课程使用的是ZYX顺序先绕世界Z轴转 (\psi)偏航再绕新的Y轴转 (\theta)俯仰最后绕最新的X轴转 (\phi)横滚。整体旋转矩阵是三个基础矩阵的乘积[ R R_z(\psi) R_y(\theta) R_x(\phi) ]注意这里是矩阵连乘的顺序先执行的旋转放在右边。我当时理解错了一次直觉上以为先偏航后俯仰那就是 (R_x R_y R_z)结果答案是反的。正确写法是[ R \begin{bmatrix} c_\psi c_\theta c_\psi s_\theta s_\phi - s_\psi c_\phi c_\psi s_\theta c_\phi s_\psi s_\phi \ s_\psi c_\theta s_\psi s_\theta s_\phi c_\psi c_\phi s_\psi s_\theta c_\phi - c_\psi s_\phi \ -s_\theta c_\theta s_\phi c_\theta c_\phi \end{bmatrix} ]这个矩阵在后续所有课程里都是最高频出现的公式建议直接背下来或者至少能熟练写出它的推导链。可以从欧拉角反解旋转矩阵的第3行判断俯仰角 (\theta)因为第3行只有三个元素结构最简洁(-s_\theta) 就是旋转矩阵的第3行第1列这个特征在代码实现时特别有用。从旋转矩阵反解欧拉角时课程提示过一个陷阱某些特殊姿态下会出现万向锁gimbal lock即两个旋转轴重合丧失一个自由度。例如 (\theta \pm 90^\circ) 时(\sin\theta) 的符号在反解时会模糊导致 (\phi) 和 (\psi) 无法唯一确定。这是欧拉角表示法的固有缺陷也是后续课程会引入四元数替代欧拉角的动机。3.4 角速度与旋转矩阵变化率的关系第二周最硬核的推导集中在角速度上。刚体绕某轴以角速度 (\omega) 旋转旋转矩阵随时间的变化率可以写成[ \dot{R} R [\omega]_\times ]其中 ([\omega]\times) 是角速度的反对称矩阵skew-symmetric matrix满足对任意向量 (v)([\omega]\times v \omega \times v)。反对称矩阵长这样[ [\omega]_\times \begin{bmatrix} 0 -\omega_3 \omega_2 \ \omega_3 0 -\omega_1 \ -\omega_2 \omega_1 0 \end{bmatrix} ]这个式子的物理意义是旋转矩阵的导数等于当前旋转状态乘以当前角速度的矩阵形式。注意角速度要在机体坐标系body frame里表达——这是最容易出错的地方。如果把角速度定义在惯性系里公式变成 (\dot{R} [\omega]\times R)乘法的左右顺序完全相反。区分方法很简单公式里的 ([\omega]\times) 是在哪个坐标系下定义的就把它放在哪一侧。实际写飞控代码时IMU给出的角速度就是机体坐标系的直接用 (\dot{R} R [\omega]_\times) 那套公式不需要额外变换。第二周的课后作业里就有大量此类计算给一个角速度向量和初始旋转矩阵求旋转矩阵的导数或者反过来求角速度。做这类题的关键是三步走先确认 (\omega) 的表达坐标系再列写反对称矩阵最后做矩阵乘法。只要顺序不搞错答案基本一遍对。3.5 线速度与角速度在运动学中的应用有了旋转矩阵和角速度工具就能建立飞行器的六自由度运动学模型。设世界坐标系下质心位置为 (p)速度为 (v \dot{p})机体角速度为 (\omega_B)则运动学方程为[ \begin{cases} \dot{p} v \ \dot{v} g e_3 - \frac{T}{m} R e_3 \end{cases} ]其中 (e_3 (0,0,1)^T)(g) 是重力加速度(T) 是四旋翼产生的总推力沿机体Z轴方向(m) 是质量。这里的关键是推力在机体坐标系内是 ((0,0,T)^T)要变换到世界坐标系必须左乘旋转矩阵 (R)。而机体的姿态又由欧拉角动力学演化通过角速度和四旋翼的力矩输入联系起来。这个方程是整门课后续所有工作的基石——从状态估计、轨迹生成到姿态控制最终都在求解或逆求解这两个方程。我在写独立项目时不重视它总觉得自己会调参就行但面对一个自己设计的奇异姿态机动需求没有这个模型根本无从下手。4. 习题详解从拿到题到算对的完整路径4.1 第一周典型题电机转向与力矩平衡第一周作业中有一道经典题给出四旋翼的俯视图四个电机标注了编号让你判断哪个电机应该反转。我当时脑海里沉淀的印象是从飞控代码里看PWM逻辑但课程要求从物理出发。解题思路是这样先任选电机1为顺时针。因为相邻电机必须反向才能平衡反扭矩电机2就是逆时针电机3与电机1对角应该与电机1同向即顺时针电机4与电机2对角与电机2同向即逆时针。全程只用相邻反向、对角同向这条规律。如果题干给的转向不符合这条规律那这架飞机根本无法悬停——它会沿偏航轴越转越快。实际做题时有人会纠结于顺时针到底是从哪个方向看课程默认是从机体上方俯视。换一种视角所有转向判断都会反转但相邻反向、对角同向的结构不改变。4.2 第二周典型题旋转矩阵与坐标变换第二周作业里最典型的一类题是已知世界坐标系中的向量 (u_A (1,0,0)^T)以及一组欧拉角 (\phi30^\circ, \theta0^\circ, \psi0^\circ)求该向量在机体坐标系中的表达 (u_B)。这是非常基础但能检验概念的一道题。正确答案是先用公式构建旋转矩阵 (R R_z(0) R_y(0) R_x(30^\circ))然后计算 (u_B R^T u_A)。因为我上面提到过旋转矩阵 (R) 把机体坐标转换成世界坐标所以把世界坐标转到机体坐标要用它的转置 (R^T)。很多新手包括我第一次都误写了 (u_B R u_A)得到错误的符号。另一道常考题是给定角速度在机体坐标系的分量 (\omega_B (\omega_x, \omega_y, \omega_z)^T)求旋转矩阵对时间的导数。做法就是把 (\omega) 写成反对称矩阵然后计算 (R [\omega]_\times)。我当时算完后验证发现导数的迹为零——这是一个很好的自检手段任何旋转矩阵的导数都满足 (\dot{R}) 的迹等于零因为正交矩阵的导数必然是反对称矩阵乘以自身其迹恒为零。4.3 作业中最容易错的三个细节第一个细节旋转矩阵的连乘方向。概率最大的失误是把偏航、俯仰、横滚的顺序搞反。只要记住一句话——先作用的旋转放在矩阵乘法最右侧即世界系到体轴系用 ZYX 顺序时最终的 (R) 是从 (R_z) 乘出来的写代码时别按直觉把 (R_x) 放在最左边。第二个细节角速度的坐标系归属。题目里说某角速度在机体坐标系中为...时直接用 ([\omega]\times) 放右侧题目里说在世界坐标系中为...时得先左乘旋转矩阵把 (\omega) 变换到机体系或者使用另一种形式的公式 (\dot{R} [\omega_W]\times R)。如果混用结果误差会以旋转矩阵的形式累积而且这种差错很难目测发现。第三个细节四舍五入与数值精度。作业系统判定答案时对精度很严格。能推导通解就写通解不要在中间步骤代入近似值。比如旋转矩阵的每一项用 (\cos 30^\circ \frac{\sqrt{3}}{2}) 这种精确值表达最后再统一做数值近似可以避免累积误差。4.4 我的做题方法论整理一下我做这两周习题的心得先用十分钟搞清题目语境确定坐标系定义和符号约定把所有已知量列出来必要时统一单位推导时每一步都写明这是在哪个坐标系下成立的这一步看似笨拙但能拦下九成低级错误算完用几何直觉自检比如旋转矩阵前三列必须是正交单位向量行列式应该是1角速度反对称矩阵的迹是0这些特征检查能快速定位大部分错误。讲个实际的例子有一道题要求将世界系中的重力向量变换到机体系中我一开始直接代入旋转矩阵算得到机体Z轴分量为 (-g\cos\theta) 或类似的东西但直觉告诉我当飞机平飞姿态为零时重力应该在机体Z轴上有 (-g \approx -9.8) 的分量。用这个尽简单的特殊情况代入公式验证一顿操作就发现之前欧拉角解算的符号反了。这个自检习惯强烈建议养成尤其考试时能救命。5. 学习过程中的避坑经验与资源参考5.1 数学基础自查清单前两周内容虽然门槛不高但如果线代底子薄弱学起来会出现视频看懂了作业不会做的困境。我在开始这门课之前建议至少完成以下自查掌握向量叉积的代数运算和几何意义能用右手定则判断方向熟悉矩阵乘法规则和结合律能手动计算3x3矩阵乘法不出错知道什么是正交矩阵理解 (A^T A I) 的几何含义会用行列式判断矩阵是否可逆。如果上面四条有任一卡壳建议先用一到两周补线代基础别急着推进课。这门课的教学视频本身面向有一定基础的学生默认你会这些基本功遇到不懂临时翻书成本比提前预习高得多。5.2 常见卡壳点与排查方法第二周有个普遍卡壳点旋转矩阵的主动和被动解释。同一套矩阵有人理解为向量在固定坐标系中旋转有人理解为坐标系相对向量旋转这两种解释在公式推导中会产生符号差异。我周围好几个同学都卡在这个问题上。我的经验是统一采用坐标系不变、矩阵把向量从一个坐标系变换到另一个坐标系的解释避免任何混淆——也就是当你看到 (R) 时默认 (R) 是把机体系坐标变换到世界系坐标的转换矩阵。另一个卡壳点是反对称矩阵的构造。我见过有同学把反对称矩阵元素的符号填反导致最终公式全错。一个硬记忆技巧右上角第一元素是 (-\omega_3)而不是 (\omega_3)第2行第1列是 (\omega_3)。当时我把 (\omega) 写进矩阵的时候总是习惯性地按普通矩阵的顺序抄结果三条对称轴方向全反。花五分钟自己推一遍 ([\omega]_\times v) 等于叉积 (\omega \times v)就能永久纠正这个错误。5.3 推荐的辅助资源组合只靠课程视频和作业容易出现懂但不会算的问题。我实际使用下来最有效的组合是一份旋转矩阵速查表网上有开源整理好的、一本线性代数教材的旋转章节任何主流教材都行、以及一个支持符号计算的工具用于验算矩阵乘积和逆矩阵。平时做作业我习惯先用纸笔推公式再用工具验证结果。不是依赖工具而是用它来快速发现推导过程中的符号错误节省核对时间。这里特别推荐把 (R_z)、(R_y)、(R_x) 三张基础矩阵打印出来贴在书桌前。作业里最耗时的是做三矩阵连乘的代数运算有个速查表能直接代入结果检查效率提升非常明显。我自己就是这样从第一次算一张旋转矩阵花二十分钟到后来两三分钟就能给出正确答案。5.4 构建自己的空中机器人知识栈课程内容本身已经很成体系但为了让学习了这两周之后我到底会什么更加明确我建议你动手做三件事第一用代码实现一个三维旋转函数库——不需要GUI只需要写 (R_z)、(R_y)、(R_x) 的矩阵生成函数以及一个能合成完整旋转矩阵的函数并写几个单元验证测试比如验证 (R^T R I)。这能确保你对矩阵理论有真正的肌肉记忆。第二用纸笔推导一遍从欧拉角到旋转矩阵再到角速度映射的完整链路。最好能徒手写出从旋转矩阵第3行第1列提取俯仰角、再解算横滚和偏航的推导过程。这个过程做完之后后面学控制、学状态估计都会有更稳的地基。第三如果手头有四旋翼设备把电机转速差 → 姿态变化的物理映射结合KM模型数据做一次简单实飞记录。比如手动给某一侧电机加固定偏置观察飞机偏航和横滚的趋势。这种实感经验能反哺课程内容的理解让每一个公式都有对应的物理画面。坦白说前两周的内容强度不算高但知识点密度不小而且是后面所有进阶内容的地基。建议不要赶进度宁可多看几遍旋转矩阵的推导也不能一带而过。每周作业做两遍——第一遍按正常速度做第二遍检查过程中有没有想当然的步骤。做完这件事你已经比只看视频不写作业的学习者进度领先了一整个身位。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →