资讯动态

机器人建模与控制习题答案:运动学、动力学与稳定性推导解析

发布时间:2026/10/27 5:17:51 来源:尧图企业网站定制
简介这份《机器人建模和控制》习题答案面向学习机器人运动学、动力学与控制理论的学生和研究人员适合配合Mark W. Spong等所著教材进行课后练习核对、课程复习与推导训练。内容围绕坐标系与位姿描述、正逆运动学、牛顿—欧拉和拉格朗日动力学建模、轨迹规划、Lyapunov稳定性分析及传感器数据处理等典型习题展开帮助读者在解析法或数值法求解逆运动学、计算关节驱动力矩、设计平滑路径时找到验证思路。资源包为1个PDF文件约6.46MB便于在电脑或平板上查阅和检索。已有3106人学习说明其在机器人学课程学习与自学场景中具有一定参考价值。通过对照答案复盘推导过程读者可检查基本概念理解是否准确积累动力学方程建立、控制器稳定性证明和传感器噪声处理等问题的解题经验为后续课程设计、科研入门和工程应用打下基础。1. 知识地图机器人建模和控制这门课的习题答案该按什么顺序用机器人建模和控制这门课的知识骨架其实只有三层讲述层、推导层、闭环层。讲述层是坐标系与位姿把机械臂的状态写成 4×4 矩阵推导层是运动学与动力学把关节变量映射成末端位姿把关节力矩映射成加速度闭环层是控制与稳定性回答“这么控制它到底收不收敛”。市面上流传的这份按章节整理的习题答案价值不在直接抄结果而在于它把这三层的推导链条一步步摆出来了。逆向运动学的多解筛选、动力学建模的中间项、稳定性证明的候选函数构造这三处是考试和工程里最容易断链的地方也是答案最能派上用场的地方。这份材料适合已经过完一轮课、正在刷题或备考的人当对照本一边自己做一边核对中间的每一步而不是只看最后那个数字。2. 坐标系与运动学从齐次变换到雅可比的完整映射链整本教材前半部分的主线只有一句话末端位姿是关节变量的函数。围绕这句话展开的所有工具包括旋转矩阵、齐次变换、DH 参数、正逆解、雅可比都是为了让这个函数既能算出来、又能反过来求、还能对它求导。这一章按这条链走凡是推导中途断掉的地方基本都是链条上的某一环没打牢。2.1 齐次变换把“转”和“移”压进一个 4×4旋转矩阵属于 SO(3)正交、行列式为 19 个元素里只有 3 个是独立的剩下 6 个全是冗余约束。平移向量补上剩下 3 个自由度凑成 SE(3) 的 4×4 齐次变换矩阵。习题里最常被低估的一步是变换的逆很多人直接对 4×4 求逆算得又慢又容易错而它的闭式解只需要用到旋转矩阵的正交性$$T\begin{bmatrix}R p\ 0 1\end{bmatrix},\qquad T^{-1}\begin{bmatrix}R^{\top} -R^{\top}p\ 0 1\end{bmatrix}$$复合的顺序是另一处高频翻车点记住一条就够左乘基座标系视角右乘当前动坐标系视角。判断方法是问自己“这个变换是相对谁描述的”相对固定基座就左乘相对已经转过的连杆自身轴就右乘。写成代码验证一遍比死记靠谱import numpy as np def inv_transform(T): 用 R^T、-R^T p 的闭式解求逆避免直接对 4x4 求逆 R, p T[:3, :3], T[:3, 3] Ti np.eye(4) Ti[:3, :3] R.T # 正交性R^-1 R^T Ti[:3, 3] -R.T p # 平移项要跟着反向旋转 return Ti # 构造一个绕 z 转 30 度、再沿 x 平移 2 的变换 c, s np.cos(np.pi/6), np.sin(np.pi/6) T np.array([[c, -s, 0, 2], [s, c, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) print(np.allclose(T inv_transform(T), np.eye(4))) # True 才算对这段代码里R.T p前面的负号是最容易漏的漏了之后平移分量符号错、数值还“看着像个结果”很难自查。养成用T inv_transform(T) I自检的习惯比反复看公式管用。2.2 旋转的四类参数化欧拉角、固定角、轴角与四元数习题里给一个姿态常常要求你在几种写法之间来回换而每种写法都有自己的奇异点和使用场景参数化独立参数奇异/退化典型习题问法适用场景ZYZ 欧拉角3中间角为 0 或 π 时退化给定 R 反解 (φ,θ,ψ)关节型机械臂腕部姿态固定角 RPY3俯仰角 ±90° 时万向锁求 roll/pitch/yaw移动底盘、飞行器姿态轴角 (k, θ)4含约束θ0 时轴无定义由 R 求等效轴与转角旋转插值、误差描述单位四元数4含约束无奇异q 与 -q 同姿态四元数乘法、归一化姿态插值、数值积分两条血泪经验一是固定角 RPY 和欧拉角不是一回事RPY 是绕固定轴的 Rx·Ry·Rz或 Rz·Ry·Rx看约定欧拉角是绕动轴连乘两者只有在特定顺序下才碰巧相等题目里不写清楚就必须先声明约定二是四元数的双覆盖即q和-q表示同一个姿态做差值比较时要先判dot(q1,q2) 0再取反否则姿态插值会走一条绕远路的大弧。2.3 DH 参数表四行数就是一条乘法链正运动学的本质是把 n 个 4×4 矩阵按顺序乘起来。DH 参数做的就是给每个连杆一句话绕 z 转多少、沿 z 移多少、沿 x 移多少、绕 x 转多少。标准 DH 的四参数是 (θ, d, a, α)改进 DHCraig 版本把坐标系固连位置挪到了连杆近端乘的顺序变成了Rx(α)·Tx(a)·Rz(θ)·Tz(d)两种约定不能混用混用之后得出的末端位姿通常只错一点点非常难查。import numpy as np def dh_transform(a, alpha, d, theta): 标准 DH绕 z 转 theta、沿 z 移 d、沿 x 移 a、绕 x 转 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, sa, ca, d], [0, 0, 0, 1], ]) # 平面 3R 臂alpha 与 d 全为 0末端位姿只由三个连杆长度和三个关节角决定 links [(1.0, 0.0, 0.0, 0.3), (0.8, 0.0, 0.0, -0.5), (0.5, 0.0, 0.0, 1.1)] T np.eye(4) for a, alpha, d, theta in links: T T dh_transform(a, alpha, d, theta) # 顺序不能交换 print(np.round(T[:2, 3], 4)) # 末端 x、y 坐标这段代码里T T dh的累乘方向决定了坐标系是相对基座还是相对末端做题时先算两连杆手推一遍、再和代码对上比背结论稳。参数里a是连杆长度、d是连杆偏距、alpha是相邻 z 轴的扭角平面臂的alpha和d全为零是最容易验证的起点。2.4 逆运动学解析解看结构数值解看初值逆解不存在时题目往往先问“有没有解析解”。判断依据不是玄学而是结构条件常见的一类是最后三个关节轴交于一点球形腕这时可以把位置和姿态解耦先解腕心位置的三元方程再解腕部三个角另一类是三个相邻关节轴平行也能化出闭式解。凡是结构不满足这两类的基本只能走数值法。数值法的核心是把 IK 变成一个求根问题用牛顿-拉夫逊迭代q ← q J⁺e其中e是末端位姿误差。接近奇异位形时J病态直接求伪逆会把关节速度推到无穷大标准做法是加阻尼import numpy as np def fk(q, l): q1, q2 q; l1, l2 l return np.array([l1*np.cos(q1) l2*np.cos(q1q2), l1*np.sin(q1) l2*np.sin(q1q2)]) def jac(q, l): q1, q2 q; l1, l2 l return np.array([[-l1*np.sin(q1)-l2*np.sin(q1q2), -l2*np.sin(q1q2)], [ l1*np.cos(q1)l2*np.cos(q1q2), l2*np.cos(q1q2)]]) def ik_dls(target, q0, l, tol1e-8, iters200, lam1e-6): q np.array(q0, dtypefloat) for _ in range(iters): e target - fk(q, l) # 位置误差向量 if np.linalg.norm(e) tol: return q J jac(q, l) # 阻尼最小二乘J J^T 接近奇异时加 lam 稳住 dq J.T np.linalg.solve(J J.T lam*np.eye(2), e) q q dq return q # 没收敛就返回当前值交给外层判断 print(ik_dls(np.array([0.6, 1.2]), q0[0.1, 0.1], l(1.2, 1.0)))lam越大越稳但收敛越慢q0给得好坏直接决定收敛到哪一组解。平面 2R 一般有两组解肘上、肘下空间 6R 可能到 8 组题目不指定时按关节限位、避障、行程最短三条依次筛答案里把筛选依据写出来通常也算分。2.5 雅可比速度映射、静力对偶与奇异位形雅可比J(q)是正运动学对关节变量的偏导矩阵它有三重身份习题经常在三个身份之间切换速度层面v J·q̇静力层面τ Jᵀ·F奇异判据层面det(J) 0。静力对偶这一条最容易被忘但凡是“末端施加某力求各关节需要多大力矩”的题用的就是Jᵀ而不是J或J⁺。提示J是随构型变化的矩阵不是常数。做题时任何一步代入的都是当前q下的J(q)把它当常量写进推导是典型的隐性错误。奇异位形的物理含义是“这个方向上末端动不了”数学上是J掉秩、最小奇异值趋于 0。判断题里常给一个构型让你判断是否奇异做法是算det(J)或看某两列是否线性相关平面 2R 的奇异条件就是第二连杆完全伸直或完全折叠。工程上真正麻烦的不是正好落在奇异点上而是“接近奇异”此时逆解数值会剧烈跳动这也是阻尼最小二乘存在的理由。3. 动力学建模拉格朗日与牛顿-欧拉两条路线怎么选运动学只讲几何动力学才开始算力。这一章的习题量大、推导长、中间项多是整个复习里最耗时间的部分。两条主线的差别不在结果——它们在数学上等价——而在推导路径和出错位置不同拉格朗日法从能量出发思路清晰但求导量大牛顿-欧拉法从力平衡出发递推效率高但符号容易乱。3.1 拉格朗日法先把两个能量函数写对拉格朗日法的流程是固定的五步选广义坐标 → 写出每个连杆质心位置 → 对时间求导得质心速度 → 拼出动能K和势能P→ 代入L K - P后用欧拉-拉格朗日方程求导。绝大多数错误集中在第三步质心速度不等于关节角速度完整表达式是v_c v_i ω_i × r_c其中v_i是本连杆近端的速度、ω_i × r_c是质心相对近端的转动贡献。平面单连杆可以把这一项简化掉多连杆平面臂和任何空间臂都绕不过去。import sympy as sp q1, q2, dq1, dq2 sp.symbols(q1 q2 dq1 dq2, realTrue) m1, m2, l1, lc1, lc2, g sp.symbols(m1 m2 l1 lc1 lc2 g, positiveTrue) # 两连杆平面臂重力沿 -ylc 是质心到本连杆近端的距离 # 质心速度 近端速度 ω × r展开后就是下面四行 vx1, vy1 -lc1*sp.sin(q1)*dq1, lc1*sp.cos(q1)*dq1 vx2 -l1*sp.sin(q1)*dq1 - lc2*sp.sin(q1q2)*(dq1dq2) vy2 l1*sp.cos(q1)*dq1 lc2*sp.cos(q1q2)*(dq1dq2) K sp.Rational(1, 2)*m1*(vx1**2 vy1**2) sp.Rational(1, 2)*m2*(vx2**2 vy2**2) P m1*g*lc1*sp.sin(q1) m2*g*(l1*sp.sin(q1) lc2*sp.sin(q1q2)) L sp.expand(K - P) # K 1/2 * qdot^T M qdot把 2K 展开后逐项对照就能读出质量矩阵 print(sp.simplify(sp.expand(2*K)))这段代码只做到能量函数这一步剩下的欧拉-拉格朗日求导留给手推是因为考试要的正是那个中间过程。vx2、vy2里同时出现dq1和dq2交叉相乘之后就会长出科氏力和离心力项这正是动力学方程非线性的来源。如果把vx2里lc2那一项的dq2漏掉结果会退化成“只有惯性没有耦合”的错误模型代入控制仿真往往还能跑只是跟踪误差对不上属于隐性错误。3.2 牛顿-欧拉递推外推速度、内推力牛顿-欧拉法分两遍扫第一遍从基座到末端逐连杆外推角速度ω、角加速度α、质心线加速度a_c第二遍从末端回基座用牛顿方程F m·a_c和欧拉方程N I·ω̇ ω × (I·ω)内推连杆间的力和力矩最后投影到关节轴得到τ。两遍扫的方向相反是这一章最容易搞混的流程细节。对比项拉格朗日法牛顿-欧拉法出发点能量函数 K、P力与力矩平衡计算复杂度展开后约 O(n³)~O(n⁴)递推 O(n)推导难度求导量大但步骤机械向量叉积多、方向易乱中间量质量矩阵 M、C、g 显式只有递推量M 需另行提取适合的习题小自由度、要求写出 M(q)多自由度、求单点力矩做习题时有个实用的分工小自由度2R、3R要求“写出完整动力学方程”用拉格朗日自由度略高的要求“求某关节维持静止所需力矩”用牛顿-欧拉更快。两种方法算同一个 2R 平面臂结果必须一致因此这也是最好的自检手段拿拉格朗日算出M再用牛顿-欧拉内推一遍核对对角线元素。3.3 动力学方程的三条结构性质控制章的全部弹药标准形式写成M(q)q̈ C(q,q̇)q̇ g(q) τ其中三条性质在后面控制章的证明里反复出现考前必须背到能默写对称正定M(q) Mᵀ(q)且对任意非零向量都有xᵀMx 0。动能恒为正物理上显然数学上是 Lyapunov 候选函数能成立的前提。反对称性Ṁ(q) - 2C(q,q̇)是反对称矩阵即xᵀ(Ṁ-2C)x 0。这条性质看不出物理直觉但它是把V̇里的交叉项消掉的关键一步。线性参数化M、C、g对惯性参数质量、质心位置、惯量张量是线性的可以写成τ Y(q,q̇,q̈)·θ。自适应控制的参数更新律就是靠这一条推出来的。注意C矩阵本身不唯一把科氏力项在不同关节之间“挪一挪”得到的C也能让方程成立但只有满足Ṁ - 2C反对称的那个C才好用。教材习题里如果算出来的C让反对称性质不成立多半是取了非标准的 Christoffel 符号。4. 控制与稳定性从独立关节 PID 到 Lyapunov 证明建模做完接下来是闭环。这一章的习题可以分成两类一类是设计型的要你给出控制律另一类是证明型的要用 Lyapunov 说明闭环稳定。前者考的是“补偿项加不加、加在哪”后者考的是“候选函数怎么构造、结论推到哪一步”。4.1 独立关节 PID 与重力补偿最朴素的做法是把每个关节当成一个独立的二阶系统各配一个 PIDτ_i k_p·e_i k_i∫e_i dt k_d·ė_i。它在低速、轻载、减速比大的场合表现尚可原因在于减速比把关节间的耦合项压小了。但只要速度上来科氏力和离心力就跟速度平方成正比地长大耦合无法再忽略跟踪误差会出现和构型相关的周期性波动——这类题常问“为什么高速时 PID 失效”答案就在动力学方程的非线性项上。一个成本最低的改进是在 PID 外面加重力补偿τ K_p e K_d ė g(q)。注意g(q)用的是期望构型还是实际构型这一细节在题里经常被追问用实际构型g(q)时闭环里还留着g(q) - g(q_d)的残差项只能保证有界用期望构型g(q_d)之外再加完整的前馈才有机会做到渐近跟踪。4.2 计算力矩控制用内环把非线性消掉思路很干脆既然动力学是非线性的那就用一个内环把它抵消掉剩下的部分当线性系统来设计。控制律写成τ M̂(q)·u Ĉ(q,q̇)q̇ ĝ(q)其中u是外环 PD 给出的“虚拟加速度”def computed_torque(q, dq, qd, dqd, qdd_d, M, C, g, Kp, Kd): 计算力矩控制内环抵消非线性外环 PD 决定误差收敛速度 e qd - q # 位置误差 de dqd - dq # 速度误差 u qdd_d Kd de Kp e # 虚拟加速度外环 tau M(q) u C(q, dq) dq g(q) # 内环补上惯性、科氏、重力 return tau模型完全准确时把tau代回动力学方程M、C、g三项正好对消误差方程退化成ë Kd·ė Kp·e 0取Kp、Kd正定对角就能指定收敛速度。参数说明上Kp决定刚度、Kd决定阻尼工程上常取Kd 2√Kp附近获得临界阻尼。题目里若要追问“模型不准会怎样”结论是误差方程里会多出M⁻¹(M - M̂)u之类的项稳定性不再由Kp、Kd单独保证这也是自适应控制出场的地方。4.3 Lyapunov 分析证明题的固定套路证明型习题的写法高度模板化按下面五步走基本不会跑偏写出误差方程形式化成Ṁ、C、g的标准结构构造候选函数V ½·ėᵀM(q)ė ½·eᵀK_p e第一项是动能型、第二项是势能型验证V正定M正定 K_p正定即可沿闭环轨迹求V̇用Ṁ - 2C的反对称性把½·ėᵀṀė - ėᵀCė消成零得到V̇ -ėᵀK_dė ≤ 0此时不能直接说渐近稳定要补一步由V̇ ≡ 0推出ė ≡ 0再代回误差方程得ë ≡ 0进而e ≡ 0最后用 LaSalle 不变集原理或 Barbalat 引理收口。第 5 步是整个证明的分水岭。V̇半负定只能说明“能量不增”系统可能停在某个V̇ 0但不是原点的集合里对应到实际系统就是“误差不再变化但也不为零”的稳态偏差。习题答案里如果只写到V̇ ≤ 0就宣布渐近稳定这条是需要打问号的。4.4 滑模与自适应两种“模型不准”的对策模型不确定时两条主流路线方法核心机制优点代价常见习题问法滑模控制设计滑模面s ė Λe用切换项把状态压到面上对匹配不确定性不敏感抖振切换增益越大越明显证明到达条件s·ṡ 0自适应控制用τ Y·θ̂估计参数配参数更新律在线学习参数无抖振收敛依赖持续激励条件构造含θ̃ᵀΓ⁻¹θ̃的 V鲁棒 边界层滑模的切换项换成饱和函数消除抖振稳态误差有界不为零分析边界层厚度影响滑模的证明抓的是到达条件即s·ṡ ≤ -η|s|一步到位自适应的证明抓的是增广 Lyapunov 函数把参数误差θ̃ θ̂ - θ也塞进V里靠更新律θ̂̇ -ΓYᵀs把交叉项消掉。两者的共同点是都在“不确定性有界”这个前提下工作区别是滑模要界、自适应要结构。5. 易错点习题里最容易翻车的五个地方刷完一遍回头对答案错的往往不是不会而是下面这几处细节。每一条都按“漏在哪、为什么漏、怎么补”写清楚。5.1 齐次变换求逆直接对 4×4 硬算易漏点→ 用np.linalg.inv(T)或手写伴随矩阵求逆结果数值上看着没错但推导题里写不出闭式解。为什么漏→ 4×4 求逆在代码里一行就完事反而让人忘了它有一个只用R、p的解析形式而考试要的正是这个形式。怎么补→ 记住T⁻¹ [Rᵀ, -Rᵀp; 0, 1]并且拿T T⁻¹ I做自检。凡是题目出现“求逆变换”四个字先写这个闭式解再谈别的。5.2 变换复合时左乘右乘搞反易漏点→ 把“绕自身轴再转一次”写成左乘结果只在特殊角度下才碰巧正确。为什么漏→ 左右乘的区别在单次变换上看不出来只有连续复合、且两次变换的参考系不同时才暴露而这个条件在练习题里常常被简化掉。怎么补→ 固定一句自问“这个变换相对谁描述”相对基座左乘相对当前动系右乘。再用一个具体数值例子验算比如先绕 z 转 90° 再沿新 x 轴平移看末端位置是否符合直觉。5.3 把雅可比当成全局常量易漏点→ 求完一次J(q)之后在后面几步尤其是积分、迭代、稳定性推导中继续沿用同一个J。为什么漏→ 线性代数里矩阵就是常量惯性思维带进来而J的名字里没有(q)时更容易忘。怎么补→ 写J时强制带参数写成J(q)并记住两条使用规则静力映射用Jᵀ、速度映射用J、逆解迭代用J⁺或阻尼伪逆。三者的方向不能互换这就是最常见的翻车点。5.4 质心速度只算关节速度漏掉 ω×r易漏点→ 动能K里直接代入v l·q̇把连杆当成质点、把质心当成近端。为什么漏→ 单连杆、质心在末端的特例下这个写法是对的练习题前半段又常拿这种简单模型热身习惯就此养成。怎么补→ 每写一个质心速度前先写下v_c v_i ω_i × r_c再逐项展开。检验方法算出来的质量矩阵M必须对称正定如果不正定基本就是速度项漏了分量。5.5 Lyapunov 证到 V̇ ≤ 0 就宣布渐近稳定易漏点→ 得到V̇ -ėᵀK_dė ≤ 0就写“因此系统渐近稳定”跳过了不变集分析。为什么漏→ 教材前面的线性系统例子大多满足“V̇负定即渐近稳定”这个结论被无条件迁移到非线性场合而半负定恰恰是非线性分析里最常见的中间状态。怎么补→ 形成一个固定动作看到V̇只是半负定立刻追问“V̇ ≡ 0的那条轨迹上还有没有非原点解”然后代回闭环方程验证最后用 LaSalle 或 Barbalat 收口。这一步写出来通常占该题一半的分数。6. 复习清单三轮查漏补缺的具体走法剩下最后一段说怎么把上面这些串起来用。三轮走法比一遍刷完更省时间第一轮按章节过概念第二轮只做错题和证明题第三轮限时模拟。第一轮概念关约 3 天对照目录自问自答答不上来的做标记。重点在于把每一章的核心对象说清楚变换矩阵怎么求逆、DH 四个参数各是什么、雅可比的三种用法、动力学方程三条性质、Lyapunov 五步套路。这一轮不用做题只求“能说出口”。第二轮推导关约 5 天只做三类题逆运动学多解筛选、动力学完整推导、稳定性证明。每做完一道用下面这张表自评检查项合格标准不合格的表现中间步骤完整每一步都有依据无“显然可得”从L直接跳到τ符号统一角度全用弧度、矩阵维度对得上度与弧度混用、J维度不匹配自检做过变换用T·T⁻¹、M验证对称正定算完直接交不回头结论有边界说清成立条件模型准确/不确定有界无条件宣布渐近稳定第三轮查漏关约 2 天拿第 5 章的五条易错点当检查表逐条回看自己的错题本看每一条是否踩过。踩过的写下“触发场景”比如“凡是题目给的是位姿矩阵而不是关节角先怀疑是不是要我做逆解并筛多解”。这一步的价值在于把零散的错误变成可复用的判据。提示错题本按“错因”分类比按“章节”分类更有用。同一个错因会在不同章节反复出现按章节分会把它拆散看不出规律。这份按章节整理的习题答案最适合的位置是第二轮自己先推一遍卡住的地方再去对中间步骤重点看它怎么处理多解、怎么补全证明的最后一步而不是只看最终表达式。我从那以后每次做动力学题都强制先把质心速度写成v_i ω_i × r_c再动笔宁可多写一行也不愿再经历一次“矩阵不正定、回头重算三页”的局面。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑