拓冰建站拓冰建站
首页 / 资讯中心 / 正文

机器人运动控制学习7——映射关系

从这里开始我们正式进入FK → Jacobian → 数值IK → 伪逆 → 奇异位形 → DLS先记一句话Jacobian “关节动一点会让末端怎么动”的映射关系。1. 为什么有了 FK 还需要 JacobianFK解决的是已知关节角 q ↓ 手在哪里比如q1 30° q2 60° ↓ FK ↓ Hand (0.866, 1.5)但现在我们想问一个新的问题如果肩膀再动 1°手会往哪里动会动多少这时候仅仅知道“现在手在哪里”还不够。我们需要知道关节变化 ↓ 末端变化这就是 Jacobian。2. 继续用两关节机械臂还是这个模型Base O \ \ O Elbow \ \ O Hand两个关节q1 肩 q2 肘现在假设机器人保持某个姿势不动。我们先只让q1稍微增加一点点。比如q1 1°会发生什么肩膀后面的上臂 肘 前臂 手全部跟着动。所以手会产生一个小位移。3. 再只动 q2保持肩膀不动。只让q2 1°这时候Elbow位置基本不变。但Forearm Hand会跟着肘转。于是手也会产生一个小位移。但这个位移通常和刚才q1 1°导致的位移不一样。这就是关键不同关节对末端运动的影响不同。Jacobian就是把这些影响全部记录下来。4. 先把它想成一张“影响表”比如某个姿势下肩膀转一点 → 手主要向左上移动 肘转一点 → 手主要向左下移动我们可以想象一张表关节对手x方向影响对手y方向影响q1某个值某个值q2某个值某个值把这张表写成矩阵就是J也就是 Jacobian 矩阵。5. Jacobian 最核心的关系你以后会经常看到ẋ J(q) q̇先别怕。翻译成人话关节速度 q̇ ↓ Jacobian ↓ 末端速度 ẋ也就是我知道每个关节现在转多快就能通过 Jacobian 算出手在空间里运动多快。6. q 和 q̇ 不一样这里顺便补一个非常重要的符号。q代表关节当前的位置 / 角度。比如q [30° 60°]而q̇读作q dot表示关节速度。例如q̇ [10°/s 20°/s]意思是肩膀每秒转10° 肘每秒转20°以后还会有q̈表示关节加速度。所以先记q 位置 q̇ 速度 q̈ 加速度这三个以后贯穿整个机器人控制。7. ẋ 又是什么这里的x不是一定只代表World坐标的x轴。在机器人学里很多时候x会泛指末端任务空间状态。比如二维手的位置x [x_hand y_hand]那么ẋ [vx vy]就是手的速度。所以ẋ J q̇就是关节怎么转 → 手怎么移动。8. 一个很直观的例子假设某个姿势下Jacobian近似J [1.0 0.3 0.5 0.8]你现在不用管这些数字怎么得到。假设q̇ [1 0]也就是只有肩膀在动肘不动。那么ẋ J q̇实际上就是取J的第一列所以手的运动趋势是[1.0 0.5]也就是说第一列描述 q1 对末端的影响。如果q̇ [0 1]只有肘动。那么结果就是J第二列 [0.3 0.8]所以Jacobian 的每一列可以理解成“某一个关节单独动时末端会怎么动”。这个直觉非常重要。9. 为什么肩关节影响通常更大想象一条伸直的手臂Shoulder O────────Elbow────Hand肩膀转1°因为手离肩膀比较远半径很大所以手会扫过比较大的弧但肘转1°Elbow O────Hand手离肘比较近扫过的弧会小一点所以同样1°不同关节造成的末端位移可能完全不同Jacobian就在描述这种“杠杆效应”。10. Jacobian 不是固定不变的这一点特别重要。假设手臂伸直O────O────O肩膀转一点手会主要横向移动。但如果手臂已经折起来O \ O / O同样肩膀转一点手的运动方向和大小都会变。所以J J(q)意思是Jacobian取决于机器人当前姿态 q。机器人姿态一变Jacobian也跟着变。11. FK和Jacobian是什么关系FKq ↓ 末端位置 x可以写成x f(q)意思手的位置是关节角的函数。那么 Jacobian 可以粗略理解成FK对关节角的“敏感程度”。也就是q改变一点 ↓ x会改变多少数学上这和“导数”有关。12. Jacobian 上半部分和下半部分以后你可能看到J [ Jv Jw ]可以简单理解Jv 关节对末端“位置/线速度”的影响 Jw 关节对末端“方向/角速度”的影响所以q̇ ↓ J ↓ 末端线速度 角速度所以 Jacobian 是 FK 到 IK 的桥这张图必须记住FK q ↓ x Jacobian q̇ ↓ ẋ 数值IK 希望x怎么变 ↓ 反过来求q怎么变这就是为什么学习顺序一定是FK ↓ Jacobian ↓ IK而不是一上来就直接学IK代码。接近奇异点时关节速度突然爆炸FK ↓ 我现在在哪 Jacobian ↓ 关节动一点手怎么动 Jacobian伪逆 ↓ 我想让手这样动关节该怎么动 奇异位形 ↓ 为什么有时候伪逆会爆 DLS ↓ 怎么让IK更稳定 关节限位 ↓ 不能让肘和肩随便转 多任务IK ↓ 右手跟踪 身体姿态 左手任务Jacobian描述关节运动对末端运动的影响。ẋ J q̇翻译关节速度经过Jacobian变成末端速度。Jacobian每一列可以理解为某个关节单独运动时对末端的影响。Jacobian跟机器人当前姿态有关不是固定矩阵。奇异位形奇异位形不是电机坏了 传感器坏了 代码崩了而是机器人几何结构导致在某个特定姿势下某些末端运动方向无法通过关节瞬时运动实现。也就是说机械结构 当前姿态共同导致。1. Rank 是什么先用小白版本假设二维末端需要x方向能力 y方向能力正常有2个独立运动方向可以粗略认为 rank 2到了奇异位形两个关节只能产生类似方向的末端运动独立能力可能只剩1个方向于是rank 从2降到1这就叫Jacobian 降秩。8. 为什么伪逆会出问题假设末端想移动Δx 很小但这个方向恰好是机器人在当前姿态下非常难实现的。算法仍然想“我要尽量把这个 1cm 的误差消掉。”于是它可能计算出需要非常大的 Δq例如目标手只移动 1 cm结果肩关节 60° 肘关节 -120°这种数值虽然只是示意但表达了核心末端小变化可能对应巨大的关节变化。所以接近奇异点时经常出现关节速度暴涨 抖动 数值不稳定 控制指令尖峰9. 用“方向放大器”理解Jacobian 可以看成关节运动 ↓ 末端运动反过来做 IK末端希望运动 ↓ Jacobian伪逆 ↓ 关节运动在奇异附近某些方向上的转换比例变得非常差。就像你想让末端移动一点点 ↓ 算法需要把关节变化放大很多倍所以伪逆像一个突然把噪声放大的放大器。10. 这和你的动捕重定向特别相关人体动作里很容易出现手臂伸直 腿伸直 膝盖接近锁死例如人体做右臂水平完全伸直机器人模仿后也靠近奇异姿态。这时动捕数据本身可能只有一点点噪声目标手位置抖 2 mm普通伪逆 IK 却可能变成肩膀大幅调整 肘关节快速抖动于是你看到人的手明明很稳定机器人的肘却一直抖。这不一定是动捕问题。也可能是IK接近奇异位形。11. 人形机器人还有很多奇异姿态不只是手臂伸直。例如腿Hip ─ Knee ─ Ankle膝盖完全打直时也可能接近奇异。所以实际人形机器人控制里通常不喜欢膝关节完全0°而会保持一点屈膝slightly bent knee除了机械、安全等原因外运动学可控性也是一个因素。12. 机械臂常见奇异比如经典 6 轴机械臂可能有肩部奇异 肘部奇异 腕部奇异腕部奇异很典型如果两个旋转轴重合原来两个关节能控制两个独立方向 ↓ 现在两个轴重合 ↓ 丢失一个旋转自由度本质还是同一个问题独立运动方向减少。13. 怎么判断接近奇异有很多方法。以后工程里常见的有det(J)但这个只适合某些方阵情况。更常用、也更一般的是SVD也就是Singular Value Decomposition奇异值分解这就是为什么你的数学路线里一定有 SVD。14. SVD 先只理解一个作用SVD 可以告诉我们Jacobian 在不同运动方向上的“能力有多强”。它会给出一些σ1, σ2, σ3 ...叫奇异值。正常情况σ都不太小说明各个方向都有一定运动能力。接近奇异时某个 σ → 0说明某一个运动方向几乎失去能力了。所以最小奇异值很小通常就是危险信号。15. 一个非常形象的理解把机器人末端瞬时可运动范围想成一个圆。正常姿态**** ** ** * * * * ** ** ****大致各方向都能动。接近奇异时圆会被压扁----------------某个方向几乎没有能力。这个东西以后叫Manipulability Ellipsoid可操作度椭球你之后做人形机器人运动学时也会遇到。16. 所以奇异位形为什么重要因为它会直接影响IK稳定性 关节速度 轨迹平滑 控制性能 数值计算所以你的项目不能只测末端误差还应该看最大关节速度 最大关节加速度 jerk 奇异附近是否抖动 求解稳定性这会让你的项目质量明显提升。17. 怎么解决不能说完全“消灭”奇异位形。因为它来自机器人几何结构。我们能做的是避免 检测 稳定处理比如① 规划时尽量远离奇异点 ② 限制关节速度 ③ 用更好的IK方法 ④ 加阻尼第四个就是我们下一课要学的Damped Least Squares阻尼最小二乘。18. DLS 的直觉先提前讲普通伪逆的态度是“末端误差必须尽可能消掉”接近奇异时就可能为了追 1mm 误差让关节疯狂运动。DLS会说“不用这么激进。末端误差可以稍微留一点但关节不要乱跑。”所以它同时考虑末端误差要小 关节变化不要太大这就是为什么叫阻尼。它给 IK 加了一个“刹车”。19. 举个非常直观的对比普通伪逆目标手误差1 cm 算出来 肩 50° 肘 -100°DLS可能说这太离谱了。 我宁愿这一次只修正 0.7 cm 剩下 0.3 cm 下一轮继续修。换来的好处关节稳定 数值稳定 抖动减少这就是实际工程中很重要的权衡。20. 到现在把链条串起来你已经学到FK ↓ 根据q算末端 Jacobian ↓ 关节小变化 → 末端小变化 伪逆IK ↓ 末端目标变化 → 关节变化 奇异位形 ↓ 为什么伪逆会突然不稳定 下一步 DLS ↓ 怎么让IK在奇异附近稳定21. 今天只记住四句话第一奇异位形 机器人在某个姿势下失去某些瞬时运动方向。第二数学上表现为 Jacobian 降秩或接近降秩。第三接近奇异点时普通伪逆可能把很小的末端误差放大成很大的关节运动。第四DLS 的目的就是牺牲一点点末端精度换取更好的数值和关节运动稳定性。下一课就是非常关键的第183课阻尼最小二乘 DLS IK 到底在干什么这一课我们会真正看懂[\Delta qJ^T(JJ^T\lambda^2 I)^{-1}e]但我不会让你死背。我们会先搞明白为什么多了一个 λ λ小时会怎样 λ大时会怎样 为什么它能压住奇异点附近的关节爆炸学完这一课你就已经进入“能独立解释一个实用数值IK算法”的阶段。好后面我会收紧一点保留核心逻辑和必要公式。第183课阻尼最小二乘 DLS IK普通伪逆 IK[\Delta q J^ e]其中(e)末端误差(J)Jacobian(\Delta q)关节需要调整多少问题是接近奇异位形时(J^) 可能把很小的末端误差放大成很大的关节变化。所以引入 DLS[\boxed{\Delta qJ^T(JJ^T\lambda^2 I)^{-1}e}]你现在不需要推导重点理解里面新增的[\lambda]叫阻尼系数。1. λ 是干什么的可以把它理解成 IK 的“刹车”。普通伪逆末端误差 ↓ 尽可能快速消除 ↓ 可能导致关节变化很大DLS末端误差 ↓ 既想消除误差 又不希望关节变化太激烈 ↓ 得到更稳定的 Δq所以它实际上是在权衡[\text{末端精度}\quad \leftrightarrow \quad\text{关节稳定性}]2. λ 大小有什么影响λ 很小DLS越来越接近普通伪逆跟踪精度高 收敛快 但奇异点附近容易不稳定λ 较大关节变化更小 更稳定 但收敛变慢 末端可能存在更大误差所以不能无限增大 λ。工程上要调。3. DLS 为什么能处理奇异问题普通伪逆在奇异附近会遇到某些奇异值 σ → 0相当于出现类似[\frac{1}{\sigma}]于是σ很小 ↓ 1/σ非常大 ↓ Δq爆炸DLS加入阻尼以后大致变成[\frac{\sigma}{\sigma^2\lambda^2}]当[\sigma \rightarrow 0]结果不会无限增大。所以 DLS 相当于把奇异方向上的“增益”压住了。这就是它最核心的作用。4. 实际 IK 循环以后你自己写 DLS IK基本流程就是给定目标 Pose ↓ 当前 q ↓ FK(q) ↓ 计算末端误差 e ↓ 计算 Jacobian J ↓ DLS求 Δq ↓ 限制 Δq ↓ q q αΔq ↓ 检查是否收敛 ↓ 继续迭代核心代码逻辑以后会类似dq J.transpose() * (J * J.transpose() lambda * lambda * I).inverse() * error; q alpha * dq;实际代码我们会用 Eigen 的线性方程求解方式不会直接手写.inverse()。5. 为什么还要限制 Δq即使用了 DLS也建议|Δq_i| ≤ 最大单步关节变化比如每轮最多变化 0.05 rad这是第二层保护。未来你的 IK 会逐渐变成DLS 步长 α 最大迭代次数 误差阈值 关节变化限幅 关节位置限位这就已经开始接近一个真正可用的求解器。6. 对你的动作重定向有什么意义动捕过程中人体可能突然手臂接近伸直普通伪逆可能人体目标只抖几毫米 ↓ 机器人肘关节明显抖动DLS可以显著降低这种现象。所以以后项目可以做一个很好的对比实验方法末端误差最大关节速度奇异附近稳定性Jacobian Pseudoinverse较小可能很高较差DLS IK略高或接近更低更好这就是很有价值的项目证据。7. 现在你已经掌握了 IK 的主干FK ↓ Jacobian ↓ 伪逆IK ↓ 奇异位形 ↓ DLS IK接下来还缺两个非常实际的问题关节不能超过机械限位以及不止右手一个任务怎么办所以第184课关节限位和多任务 IK下一课我们重点讲为什么单纯 DLS 仍可能把关节拧到极限怎么让 IK 主动远离关节限位“右手跟踪 身体姿态 肘部自然姿势”怎么同时处理学完这部分运动学理论主体基本就快结束了。好后面我就按这个方式讲少公式、重直觉、先把“为什么”讲明白。第184课关节限位和多任务 IKDLS IK 解决了一个问题接近奇异位形时别让关节突然乱飞。但它还没有解决另外两个很现实的问题第一关节不能无限转。第二机器人通常不只执行一个任务。这两个问题一解决IK才开始像“真正能用于机器人”的算法。1. 什么叫关节限位以肘关节为例。真实机器人不可能0° ↓ 90° ↓ 180° ↓ 270° ↓ 360°一直转。机械结构会规定最小角度 ≤ 当前关节角 ≤ 最大角度比如肘关节 0° 150°那么 IK 如果算出肘关节目标 170°数学上它可能觉得没问题但真机上做不到。所以机器人算法必须知道每个关节的合法范围2. 为什么普通 IK 会撞限位假设机器人要把手伸到某个地方。这个目标可能有很多种姿势都能完成。例如姿势A 肩膀多转一点 肘少转一点 姿势B 肩膀少转一点 肘多转一点普通 IK 可能只关心“手到目标了吗”它并不一定关心“肘是不是已经快撞到机械极限了”于是可能出现Hand Error 很小但是Elbow 149°而极限150°从末端误差看很优秀。从机器人控制看很危险。3. 所以好的 IK 不应该只看“手”我们希望它同时考虑任务1 手到目标 任务2 关节不要撞限位这就是一个非常重要的思想机器人控制通常不是只有一个目标而是多个目标同时存在。这就是多任务控制的开始。4. 最简单的关节限位方法最粗暴的方法就是IK算出q ↓ 超过最大值 ↓ 截到最大值比如计算结果 170° 最大允许 150° 最终命令 150°这叫Clamp / Saturation截断或饱和。它能保护硬件。但有个明显缺点它只是“撞墙以后把你拦住”。而不是“提前知道前面有墙主动绕开。”5. 更好的思路主动远离关节极限例如某个关节范围-100° 100°那么最舒服的位置可能在0°如果现在q 95°已经非常靠近上限。这时候即使继续往 方向运动能稍微减少末端误差我们也不希望这么做。而是希望 IK 倾向于把这个关节往中间拉回来同时用其他关节补偿。也就是说手继续跟目标 关节远离极限这就是更成熟的 IK。6. 为什么人形机器人特别需要这个因为人形机器人自由度很多。比如一条手臂可能肩3自由度 肘1自由度 腕3自由度如果只要求右手到某个位置实际上很多关节组合都可以做到。因此我们可以利用“多出来的自由度”做一些好事避免关节限位 保持自然姿势 避免奇异位形 减少关节运动这就是冗余自由度的利用7. 一个很直观的例子你自己把手放到桌上某一点。手的位置固定。但你的肘可以抬高一点也可以放低一点甚至肩膀还能调整。也就是说手的位置一样但全身姿势不同这就是为什么一个 IK 目标经常对应很多解。所以真正的问题不是“有没有解”而是“这么多解里我希望机器人选哪一种”8. 这就进入多任务 IK比如我们希望机器人同时做三件事任务1 右手跟人体右手 任务2 左手也跟人体左手 任务3 身体保持比较直立甚至还有任务4 肘关节保持自然 任务5 关节远离限位所以人形机器人实际面对的是右手 左手 头 躯干 骨盆 双脚 关节限位很多任务一起存在。这就是为什么以后会进入Multi-task IK ↓ QP ↓ WBC9. 多任务有两种基本思想先不用记复杂算法。你只需要知道两种。第一种加权比如右手任务很重要 身体姿态比较重要 肘部自然没那么重要可以理解成右手权重 100 身体权重 50 肘姿态权重 5算法会尽量让重要任务先做好。这叫Weighted Tasks加权任务。第二种严格优先级还有一种情况不是“权重不同”而是有些事情绝对不能为了其他任务被破坏。比如人形机器人第一优先级 不要摔倒 第二优先级 双脚别滑 第三优先级 右手跟踪动作那就不能出现为了让右手多靠近目标1厘米机器人把支撑脚抬起来。这种设计就更像任务1必须满足 ↓ 在不破坏任务1的前提下做任务2 ↓ 在不破坏前两个任务的前提下做任务3这就是Task Priority任务优先级。10. 这和你未来的动作重定向有什么关系非常直接。人体动捕可能告诉机器人右手应该在这里 左手应该在那里 头应该这样转 身体应该这样倾斜但机器人自己的身体结构和人体不一样。比如人体可以做某个动作手再往前10cm机器人可能已经肩膀快到极限那么控制器不能简单地“人体怎么动我就一模一样复制。”而应该尽可能保持动作相似 满足机器人自己的关节限制 保持动作平滑 保证稳定这才叫真正的Motion Retargeting而不是简单的关节角复制。11. “重定向误差”也开始出现了以后你的项目不能只说机器人成功模仿了人体动作。要能量化右手位置误差 左手位置误差 手部姿态误差 关节是否超限 关节速度是否平滑 jerk大小例如人体目标手位置 ↓ 机器人实际手位置 ↓ 两者距离 ↓ 末端位置误差这样才能判断你的重定向算法到底好不好。12. 为什么这一步会自然走向 QP现在问题越来越像我要 右手跟踪好 左手跟踪好 身体姿态别太偏 同时 关节不能超限 速度不能太大你会发现已经不是一个简单IK公式就能优雅解决的问题了。这时候 QP 就非常适合。因为 QP 很擅长处理“我有很多目标同时还有很多不能违反的约束。”例如目标 尽量减少手的位置误差 约束 q不能超过关节限位 q̇不能超过速度限制这就是以后QP IK甚至Whole Body Control的基础。13. 所以从 DLS 到 QP 其实很自然可以理解成最简单 IK只关心 手到目标DLS IK手到目标 别在奇异点发疯带关节限位 IK手到目标 别发疯 别撞关节限位多任务 IK右手 左手 身体 关节姿态QP很多目标 很多明确约束WBC整个机器人一起控制 接触 平衡 力矩现在路线就应该越来越清楚了。14. 你目前运动学这块已经学到哪里现在你已经理解了Frame ↓ 坐标变换 ↓ 旋转 ↓ 齐次变换 ↓ FK ↓ Jacobian ↓ 数值IK ↓ 伪逆 ↓ 奇异位形 ↓ DLS ↓ 关节限位 ↓ 多任务IK运动学理论主干已经基本走完。接下来我不建议继续堆概念。应该开始往实际工具走。下一课第185课——Pinocchio 到底是什么为什么要用它我们会开始把前面这些东西对应到真正的软件URDF ↓ Pinocchio ↓ Robot Model ↓ q ↓ FK ↓ Hand Pose ↓ Jacobian ↓ DLS IK我会重点告诉你Pinocchio 帮你做什么哪些东西你还应该自己实现model、data、q、frame分别是什么为什么它特别适合人形机器人它和 MuJoCo 到底是什么关系这一步开始我们就从“学概念”正式进入“以后要写项目”的阶段。继续。第185课Pinocchio 到底是什么你可以先把 Pinocchio 理解成一个专门帮你做机器人运动学和动力学计算的库。它不是仿真器也不是控制器。它更像是URDF机器人模型 ↓ Pinocchio ↓ 帮你计算 FK Jacobian 质量矩阵 重力项 RNEA CRBA ABA ...1. 它和 MuJoCo 有什么区别这个一定要分清。Pinocchio主要负责“算”例如给我机器人关节角 q ↓ 手在哪里 给我 q ↓ Jacobian是多少 给我 q、q̇、q̈ ↓ 需要多少力矩它是一个机器人数学计算库。MuJoCo主要负责“模拟真实机器人动起来”例如我给电机100 Nm ↓ 机器人会怎么动 脚踩地面 ↓ 地面产生什么接触力 机器人失去平衡 ↓ 会不会摔所以最简单地区分Pinocchio 算法模型 MuJoCo 物理世界仿真以后它们经常一起用。2. 为什么不能只用 MuJoCoMuJoCo当然也能得到很多机器人状态。但你以后自己写算法时会经常需要Jacobian 质量矩阵 非线性项 质心 动力学相关量Pinocchio特别擅长快速计算这些。所以未来控制器可能长这样MuJoCo ↓ 读取 q、q̇ ↓ Pinocchio ↓ 计算 FK / J / M / g ↓ 你的 IK / QP / WBC ↓ 得到控制命令 ↓ MuJoCo这就是我们最终项目非常重要的一条数据链。3. Pinocchio怎么知道机器人长什么样靠URDF比如机器人模型里面会描述pelvis torso upper_arm forearm hand thigh calf foot以及哪个link和哪个link连接 关节转轴是什么 关节限位多少 link长度多少 质量多少 惯量多少流程就是robot.urdf ↓ Pinocchio读取 ↓ 建立机器人模型4. Pinocchio里你最常见的四个东西目前先认识model data q framemodel可以理解成机器人“说明书”。里面描述有多少关节 关节怎么连接 link结构 质量 惯量 关节限制它通常不会随着机器人运动不断改变。比如G1还是这个G1机器人举手以后结构并没有换掉。所以model 机器人固定模型q这个我们已经认识了。q 当前机器人位形里面包含机器人当前肩关节角 肘关节角 膝关节角 髋关节角 ...对于人形浮动基机器人还会比普通机械臂更复杂我们后面讲。data你可以暂时把它理解成Pinocchio做计算时使用和保存中间结果的地方。比如刚刚做完 FKq ↓ forwardKinematics ↓ 各种link/frame当前的位置这些计算结果很多会存在data里。所以小白阶段可以先记model 机器人是什么 q 机器人现在什么姿势 data 计算过程中产生的结果frame比如right_hand left_hand left_foot right_foot head你经常不会关心某个 link 的所有信息而会问右手 Frame 当前在哪里所以流程经常是q ↓ Pinocchio做FK ↓ 更新Frame ↓ 读取 right_hand frame然后得到右手 Position 右手 Orientation5. 用 Pinocchio 做 FK 是什么感觉概念上非常简单加载URDF ↓ 得到model ↓ 创建data ↓ 准备q ↓ 执行FK ↓ 读取right_hand的Pose这和我们前面手算q1 q2 ↓ 一段一段坐标变换 ↓ Hand完全是同一件事。只是现在Pinocchio帮你处理几十个关节。6. 为什么还要学自己推 FK你可能会问Pinocchio都能算那我之前为什么还要学FK因为如果你只会forwardKinematics(...)但不知道它做什么面试官问“FK底层原理是什么”你只能回答“调用Pinocchio。”这不叫掌握算法。我们希望你达到简单2R/3R → 我自己能推、能写 真实人形机器人 → 用Pinocchio高效计算这才是正确组合。7. Jacobian也是一样简单机械臂自己理解Jacobian怎么来的真实机器人Pinocchio计算Jacobian然后你自己实现Jacobian ↓ DLS ↓ Δq ↓ 更新q所以我们不是让 Pinocchio 帮你“把 IK 全写完”。我们要让它负责机器人模型相关计算而你负责IK算法逻辑这样最适合你的学习目标。8. 未来我们会这样分工Pinocchio FK Jacobian 动力学模型 Eigen 矩阵和向量运算 你自己的C代码 DLS IK 关节限位 误差计算 迭代逻辑 QP控制器 MuJoCo 物理仿真 ROS2 把各个模块连接起来这张关系图很重要URDF ↓ Pinocchio ↓ FK / J / Dynamics ↓ Human → Retargeting → IK/QP ↓ Command ↓ MuJoCo ↓ State └──────→ 再计算9. 为什么 Pinocchio 特别适合你后面的人形机器人因为人形机器人不是一个简单机械臂。它是多关节 树结构 浮动基 多接触 全身动力学如果全部自己从零写FK Jacobian 质量矩阵 RNEA CRBA ABA工作量非常大而且容易出错。所以真正工程开发会理解算法原理但使用成熟库实现机器人模型计算。Pinocchio正适合干这个。10. 你目前只需要记住URDF ↓ Pinocchio读取机器人结构 ↓ model ↓ 输入当前q ↓ 计算 ├─ FK ├─ Jacobian ├─ CoM └─ Dynamics以及Pinocchio负责“算机器人模型”MuJoCo负责“模拟机器人真的动起来”。这两个一定不要混。下一课第186课——URDF进入Pinocchio后到底变成了什么下一课我们会把URDF link joint frame model data q全部串起来。然后再下一步就开始进入真正的Pinocchio FK ↓ Pinocchio Jacobian ↓ Eigen DLS IK也就是说离我们的第一个运动学小项目已经很近了。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门