简介:《机器人建模和控制》习题答案以PDF形式整理,面向学习机器人学、自动控制及相关课程的高校学生与研究人员,用于对照经典教材《Robot Modeling and Control》课后题目进行自测、复核推导与查漏补缺。压缩包内共1个PDF文件,大小约6.46MB,内容围绕坐标系、正逆运动学、动力学建模、传感器建模、PID与滑模/自适应控制、轨迹规划和Lyapunov稳定性分析等核心知识点展开,便于按章节检索习题解答与计算过程。目前已有3106人学习下载,说明其在机器人建模与控制课程复习中具有一定参考价值。读者可借助答案核对逆向运动学求解、关节力矩计算、路径平滑与控制器稳定性证明等步骤,理解教材习题的建模思路和推导链条,也可作为课程作业检查、考研复习与科研入门阶段的辅助材料。
1. 习题答案对不上,多半不是算错了:一份教材埋下的约定
翻开《机器人建模和控制》的习题答案,最普遍的困惑不是“这题不会做”,而是“我算的和答案不一样,可答案看着也对”。同一台三连杆臂,换个坐标系挂法,逆解里那个关节角就从 0.649 变成 1.921,数字全变、物理含义没变。真正卡人的地方,是教材在建模环节埋下的一整套约定:坐标系固定在哪根连杆上、DH 参数按什么顺序量、角度用弧度还是度、雅可比相对基座系还是末端系求。这些约定从不写进公式,却决定了机器人建模和控制的最终结果。把这层约定吃透,一份习题答案才能被读成可复现的推导流程,而不是一串只能背下来的数字。
2. 齐次变换与 DH 参数:为什么 4×4 矩阵成了通用表示
机器人学的所有推导最后都收敛到一个 4×4 矩阵上,这件事初看有点浪费:姿态只需要 9 个数,位置只需要 3 个数,为什么非要凑成 16 个?答案藏在“复合”这个词里——旋转的复合是矩阵乘法,旋转加平移的复合却没法用同维度的乘法表达。齐次坐标把平移塞进第四列,代价是矩阵里多了最后一行的 0 0 0 1,收益是“串联”这件事被彻底简化为连乘。整条运动链的正运动学,本质上就是一次从基座到末端的矩阵累乘。
2.1 旋转矩阵的双重含义:姿态描述与坐标变换
同一个 3×3 矩阵 R,在教材里承担两种读法。读法一是姿态描述:R 的三列分别是动坐标系三个轴在参考系中的方向余弦,它在回答“这个刚体朝向哪里”。读法二是坐标变换算子:把一个在动坐标系下表达的向量左乘 R,就得到它在参考系下的坐标,它在回答“同一个箭头该怎么换算”。两种读法对应的数字完全一样,语义却不同,这是大量推导错误的起点。
最容易出错的地方是求逆。旋转矩阵是正交矩阵,满足 R⁻¹ = Rᵀ,所以“把 A 系下的坐标变到 B 系”只需要转置,不需要真的求逆。习惯性写np.linalg.inv的人不会得到错误结果,但会失去一个重要的自检点:如果转置和求逆结果不一致,说明那个矩阵根本不是纯旋转,而是混进了缩放或者数值漂移的齐次矩阵。复合时的左右乘也有讲究,右乘表示相对动坐标系做变换,左乘表示相对固定参考系做变换,顺序反了姿态就完全调转,而这个错误在只看末端位置时往往察觉不到。
注意:判断一个齐次矩阵是否合法,先查 R 是否正交(RᵀR ≈ I 且 det(R) ≈ +1),再查最后一行是不是 0 0 0 1。det = −1 意味着包含了镜像,物理上不可达。
2.2 DH 参数的四个量为什么够用
任意两个刚体之间的相对位姿有 6 个自由度,但相邻两根关节轴之间的相对位姿只需要 4 个参数描述。原因很朴素:一条关节轴在空间里是一条直线,两条直线的相对关系由四件事唯一确定——两条轴之间的公垂线长度 a、公垂线在两根轴上的垂足位置(其中沿本轴的偏移记为 d)、两根轴的夹角 α、绕本轴转过的角度 θ。直线没有“自转”这个自由度,所以两轴的相对位姿就少掉两个自由度。
教材里反复出现“公垂线”“垂足”这些几何词,不是因为喜欢古典几何,而是因为只有定义清楚公垂线,4 个参数才唯一。这也解释了 DH 表为什么看起来能“套公式”——一旦你把坐标系原点选在公垂线与第 i 根轴的交点上,z 轴沿着关节轴、x 轴沿着公垂线,剩下的事就机械化了:绕 z 转 θ、沿 z 移 d、沿 x 移 a、绕 x 转 α,四次基本变换连乘,得到固定的矩阵模板。
需要留意的是标准 DH 与改进 DH 的区别:标准 DH 把连杆坐标系 i 的原点建在关节 i+1 的轴上,关节变量 θᵢ 是绕 zᵢ₋₁ 转的;改进 DH 把坐标系 i 建在关节 i 上。两套约定各自自洽,混用则第一根和最后一根连杆的变换必然对不上。习题答案里出现“只差一个末端常矩阵”的情况,通常就是这种混用。
2.3 用代码验证一次链式相乘
光看矩阵模板记不住,写一遍并与手推解析式对照,是最省时间的理解方式。
import numpy as np def dh(a, alpha, d, theta): """标准 DH:Rz(theta) · Tz(d) · Tx(a) · Rx(alpha) 的展开形式""" ct, st = np.cos(theta), np.sin(theta) ca, sa = np.cos(alpha), np.sin(alpha) return np.array([ [ct, -st * ca, st * sa, a * ct], [st, ct * ca, -ct * sa, a * st], [0.0, sa, ca, d], [0.0, 0.0, 0.0, 1.0], ]) # 平面两连杆:a1=0.5, a2=0.4;两根关节轴平行 -> alpha=0,无偏距 -> d=0 q1, q2 = 0.3, 0.7 T01 = dh(0.5, 0.0, 0.0, q1) T12 = dh(0.4, 0.0, 0.0, q2) T02 = T01 @ T12 # 链式相乘,顺序不能反 x = 0.5 * np.cos(q1) + 0.4 * np.cos(q1 + q2) y = 0.5 * np.sin(q1) + 0.4 * np.sin(q1 + q2) print(np.allclose(T02[:2, 3], [x, y], atol=1e-12)) # True print(T02[:2, 2]) # [0, 0]:平面臂的 z 轴未被转走参数a是公垂线长度(连杆长度),alpha是相邻两轴的扭转角,d是沿 z 轴的偏距,theta是绕 z 轴的关节角。函数返回的矩阵前三列是末端坐标系三个轴在基座系下的方向,第四列是末端原点位置。这段代码的验证点在于:矩阵第三列的 z 分量应当为 1——平面臂所有关节轴都平行于基座 z 轴,末端姿态只可能绕 z 转动。
顺着这个模板往下走,六自由度机械臂的 DH 表就是一个 6×4 的数组,正运动学是一次 for 循环连乘。真正的难点从来不在乘法本身,而在于你手里那张表的第 i 行到底对应哪根连杆的哪根轴。
3. 逆运动学:为什么解析解只属于少数结构
正向运动学永远只有一个答案:给定关节角,末端位姿唯一确定。逆运动学则完全反过来,可能无解(目标超出工作空间),可能多解(肘上肘下、腕部翻转),也可能无穷多解(冗余臂)。这份不对称是机器人运动学所有麻烦的源头,也是习题里最值得花时间的一类题。
3.1 解的个数从哪来:8 组解不是随口说的
一个 6 自由度串联臂,在满足一定几何条件下最多有 8 组逆解。这个 8 的来源是分支组合:肩部左/右 2 种,肘部上/下 2 种,腕部翻转 2 种,2×2×2 = 8。每一组都对应一个真实的物理构型,而不是数学上的重复根。
习题答案只给出一组时,很多人的第一反应是“答案不全”。但教材上的答案往往只列出落在特定关节限位内的那一组,或者有意选了“肘上”分支。判断答案是否合理,不能只比数字,要先比构型:把解代回正运动学,末端位姿一致就是对的,剩下的差异是分支选择问题。工程里最终选哪一组,取决于关节行程、避障和与前一路径点的距离——这是一个带约束的优化问题,不是运动学问题。
3.2 解析解的前提:Pieper 准则与几何消元
解析解不是所有结构都有的。能写成封闭形式的一个重要充分条件是:后三个关节轴交于一点。这时位置和姿态解耦——前三个关节决定腕心位置,后三个关节决定末端姿态。位置解可以从腕心坐标反解,通常化为一个三角形或二次方程;姿态解则是一次旋转矩阵的逆运算。
球形腕之所以在教材里被反复强调,正是因为它是让解耦成立的机械设计。这不是数学上的权宜之计,而是设计和推导互相迁就的结果:为了让控制器的逆解能算,机械结构主动让出三个正交相交的关节轴。理解这一点之后,再看 DH 表里那几行看起来“凑巧”的参数,就知道它们其实是设计约束的产物。位置解的消元过程通常会得到一个形如 A cos θ + B sin θ = C 的方程,用半角替换 t = tan(θ/2) 化为二次方程,两个根对应肘上肘下两个分支,判别式小于零就是超出工作空间。
3.3 数值解:雅可比迭代与阻尼最小二乘
结构不满足 Pieper 条件时,解析解要么不存在,要么推导成本高到不值得。这时改用迭代:从当前关节角出发,反复计算末端误差,把误差映射回关节空间的增量,直到收敛。
import numpy as np def solve_ik(fk, jac, q0, target, iters=300, tol=1e-6, lam=1e-3): q = np.array(q0, dtype=float) for k in range(iters): T = fk(q) e = pose_error(T, target) # 6×1:位置差 + 姿态的轴角差 if np.linalg.norm(e) < tol: return q, k, True J = jac(q) # 6×n 雅可比 # 阻尼最小二乘:lam 越大越稳,收敛越慢 dq = J.T @ np.linalg.solve(J @ J.T + lam**2 * np.eye(6), e) q = q + dq return q, iters, Falsefk是正运动学函数,jac返回 6×n 的雅可比矩阵,target是期望位姿,lam是阻尼因子。为什么不用伪逆?因为伪逆在雅可比接近奇异时会产生极大的关节增量,一步就把关节角推到限位之外。加上 lam²I 之后,矩阵最小特征值被抬高,增量被压住,代价是收敛变慢、末端精度略降。这就是 Levenberg-Marquardt 那套思想在运动学里的直接应用。
pose_error的姿态部分通常用旋转矩阵转轴角,而不是直接减欧拉角——欧拉角在 ±π 附近有跳变,直接相减会让误差突然翻倍,迭代随即发散。这个细节在习题里不显眼,在真机上就是那种“偶尔卡住”的现象。
3.4 雅可比矩阵:速度映射与奇异位形
雅可比 J 是机器人学的核心工具:它把关节速度线性映射为末端速度。位置部分占据前三行,姿态部分占据后三行。J 是 q 的函数,随构型变化,这也是机器人控制和运动学比线性系统麻烦得多的根本原因。
奇异位形指 J 秩亏的位置,物理上意味着某个方向的末端速度无法由关节速度合成,反过来说,要达到该方向的速度就需要无穷大的关节速度。常见例子是手臂完全伸直、腕部两轴共线。数学判据是 det(J) = 0(方阵情形),工程上更常用条件数或最小奇异值,因为它们能给出“离奇异还有多远”的连续度量,而行列式只回答“是不是”。
注意:det(J) = 0 只是奇异的一个充分观察,冗余臂的 J 不是方阵,根本没有行列式,此时应看奇异值分解的最小奇异值。
4. 动力学方程:控制律为什么非要“抵消”那三项
运动学只关心几何,动力学才关心力和力矩。习题里那些看起来吓人的偏导数和求和,最终都收敛到一个固定结构:惯性矩阵乘加速度,加上科氏离心项,加上重力项,等于关节力矩。认清这个结构,控制律的设计动机就一目了然了。
4.1 拉格朗日法:从能量到方程的推导链
拉格朗日法的出发点是标量:动能减去势能。定义 L = K − P,代入 d/dt(∂L/∂q̇) − ∂L/∂q = τ,得到的就是动力学方程。推导过程机械但费力:动能需要对每个连杆的速度求平方,而连杆速度又由雅可比乘以关节速度给出,所以 K = ½ q̇ᵀ D(q) q̇,其中 D(q) = Σ (mᵢ Jᵥᵢᵀ Jᵥᵢ + Jωᵢᵀ Rᵢ Iᵢ Rᵢᵀ Jωᵢ)。这一步是整道题的核心,几乎所有错误都出在雅可比写错或者惯量张量没有旋转到基座系。
最终形式是 τ = D(q) q̈ + C(q, q̇) q̇ + g(q)。三项各有物理含义:D 描述“当前构型下各关节的等效惯量”,随构型变化;C 项描述速度耦合,包括离心力和科氏力;g 描述重力在各关节上的投影。为什么不能简单地把 D 当常数处理?因为机器人不是刚体,质量分布在多个连杆上,转动时等效惯量随姿态剧烈变化。
4.2 牛顿-欧拉递推:O(n) 的工程选择
拉格朗日法给出的是闭式表达式,但展开后的符号复杂度随自由度增长很快,做符号推导时会看到大量重复项。牛顿-欧拉法换了个思路:先沿链从基座向末端外推每个连杆的角速度和角加速度,再从末端向基座内推每个连杆的力和力矩。两趟递推的复杂度是 O(n),与自由度数线性相关。
两种方法在数学上完全等价,工程上却常常选牛顿-欧拉——因为它天然适合递归实现,中间量物理意义明确(每个连杆受什么力),而且不需要对惯性矩阵做符号展开。拉格朗日法更适合做理论分析,因为它把 D、C、g 显式分离出来,方便证明稳定性。
习题答案通常两种都给。看到答案里出现形如 fᵢ = R fᵢ₊₁ + … 的递推式,那就是牛顿-欧拉;看到 d/dt(∂K/∂q̇) 字样,就是拉格朗日。
4.3 惯性矩阵的性质与控制律的构造
D(q) 有三条性质值得记住:对称、正定、并且 Ḋ − 2C 是反对称矩阵。前两条来自动能恒为正;第三条看似纯数学,其实是构造 Lyapunov 函数的关键——正是因为这一项反对称,误差能量的导数里那个“麻烦的耦合项”才会自动消掉。
理解了结构,控制律就顺理成章。最朴素的做法是 PD 加补偿:
tau = Kp @ (qd - q) + Kd @ (dqd - dq) + g(q) # 只补重力项这一形式在低速、低加速度场景下够用,因为惯量项和速度耦合项的影响较小。要求更高时用计算力矩控制:
def computed_torque(q, dq, qd, dqd, ddqd, Kp, Kd, dyn): """计算力矩:τ = D(q)·v + C(q,dq)·dq + g(q)""" e = qd - q de = dqd - dq v = ddqd + Kd @ de + Kp @ e # 期望的"关节加速度" D, C, g = dyn(q, dq) # 动力学三项,由模型给出 return D @ v + C @ dq + gdyn返回当前构型下的 D、C、g,v是把误差按 PD 规律“捏”出来的期望加速度。把这个 τ 代入动力学方程,两边消掉 D、C、g,得到的误差方程是 ė̈ + Kd ė + Kp e = 0,一个线性二阶系统。这就是所谓的反馈线性化:用模型把非线性项精确抵消,把闭环变成两个解耦的线性系统。
注意:这套推导的前提是模型准确。D、C、g 中任何一个有偏差,抵消就不完全,误差方程多出一个扰动项。真机上留 10% 到 20% 的 PD 增益裕度,就是为了吸收这部分。
5. 避坑与排查:习题答案最容易出错的五处
把答案抄对不难,难的是错的时候知道错在哪。下面五条是这类题目反复出现的问题,每条都按“现象 → 原因 → 解决”给出排查路径。
5.1 角度单位:第三位小数异常往往源于度与弧度混用
现象:正运动学结果和答案只差一点点,位置误差在 1e-3 量级,改权重、改精度都没用。
原因:某个关节角以度为单位传入,而正弦函数按弧度解读。0.3 弧度约等于 17°,两者相差三个数量级,但混合在链式相乘里,往往只体现在末端位置的细微偏差上。
解决:在函数入口统一做一次断言或转换,如theta = np.deg2rad(theta),并且整个项目只保留一种内部单位。习题答案里的角度标注要看清楚:教材常用弧度,但某些题面会给度数。
5.2 DH 约定混用:末端差一个常矩阵
现象:把解的最后一个变换或第一个变换调整一下,结果就对,但不知道为什么。
原因:标准 DH 与改进 DH 的原点位置不同,前者把坐标系挂在下一关节轴上。两套表混填时,误差表现为整条链多出或少掉一个固定的齐次矩阵。
解决:先看 DH 表的 theta 列对应的是哪个关节角,再看表头写的是 standard 还是 modified。一次性把整张表统一,不要逐行判断。
5.3 奇异点判定:行列式为零不等于不可达
现象:某目标位姿明明在工作空间内,数值迭代却发散或者关节速度爆炸。
原因:目标靠近奇异位形,雅可比接近秩亏,伪逆产生巨大增量。此时位姿可达,问题出在求解方法本身。
解决:把伪逆换成阻尼最小二乘,并在代码里监视最小奇异值;低于阈值时提高阻尼或直接拒绝该路点。判断“能不能到”用工作空间,判断“好不好算”用条件数,两者不是一回事。
5.4 惯量参数漏项:动力学结果系统性偏小
现象:算出的关节力矩恒比答案小一截,比例大致稳定。
原因:漏掉了电机转子惯量、减速器惯量,或者质心位置没有按平行轴定理折算到连杆坐标系原点。惯量项对平移不敏感、对偏移非常敏感,这是血泪经验。
解决:把每个连杆的质量、质心位置、绕质心的惯量张量列成表,逐项对照;换算到统一坐标系后再求和,并检查 D 矩阵是否对称正定。不对称就一定是算错了。
5.5 数值 IK 不收敛:按顺序查这三件事
现象:迭代跑满次数仍未达到容差,误差曲线震荡不下。
原因排序通常是:初值离解太远、姿态误差定义有跳变、关节增量步长过大。
解决:先用解析解在一条轨迹上采样做初值;姿态误差改用轴角表示而非欧拉角差;步长加入线搜索或固定缩放因子。逐项排除,不要在没定位时同时改三个参数。
6. 解析解还是数值解:从习题答案到真机代码的取舍
习题答案里两类解法常常并列给出,看上去只是“两种做法”。真正落到代码里,它是一道关于可预测性的取舍题。
| 维度 | 解析解 | 数值解 |
|---|---|---|
| 单次求解耗时 | 微秒级,且稳定可预测 | 毫秒级,随初值波动 |
| 多解覆盖 | 一次给出全部 8 组 | 只收敛到一个,且依赖初值 |
| 结构依赖 | 强:需球形腕或满足 Pieper 条件 | 无,任意结构可用 |
| 奇异附近 | 无定义或跳变 | 加阻尼后稳定,精度下降 |
| 调试成本 | 推导错一处,全盘皆错 | 不收敛时可按初值、步长、阻尼逐项定位 |
我的取舍原则是:离线轨迹规划用解析解,因为它必须给出确定的分支,且要能在毫秒内评估成千上万个路点;在线伺服和冗余臂用数值解,因为实时性允许一次迭代,而结构未必友好。两者并不互斥——常见做法是数值解配上解析解生成的初值,收敛次数能从几十次压到三五次。
模型精度是另一层取舍。计算力矩控制假设 D、C、g 都准,一旦实际负载变化、摩擦未建模,抵消掉的部分就会反过来变成扰动。所以真机代码里通常从 PD 加部分补偿起步,观察误差量级再决定是否升级到全补偿,而不是一上来就照抄答案里那个“完美”的公式。这也是我理解的习题答案的正确用法:它给出的是理想条件下的完整推导,不是可以直接搬上机器的参数表。
从那以后我每次做这类题,都会强制走一遍“代回正运动学验证、检查 D 矩阵对称正定、确认角度单位为弧度”这三步,哪怕答案就摆在旁边。这三步花不到五分钟,但能省掉一整个下午的返工。希望帮到你。
本文还有配套的精品资源,点击获取