
简介《机器人建模和控制》习题答案面向机器人学课程学生、考研复习者与相关研究人员针对经典教材课后习题缺少对照解答、推导过程难以自查的问题提供可直接参照的解题材料。压缩包共1个PDF文件约6.46MB内容围绕教材习题展开便于在电脑或平板上查阅也适合按章节打印后配合课堂进度使用。已有3106人学习说明其在机器人建模与控制学习中具有较高的参考需求。答案覆盖机器人坐标系、正逆运动学、牛顿—欧拉与拉格朗日动力学建模、传感器建模及控制系统设计等核心知识点并对逆向运动学求解、关节驱动力矩计算、轨迹规划、Lyapunov稳定性分析和传感器数据处理等典型题型给出推导与结果。读者可借助它核对计算过程、理解公式来源、排查自学中的思路偏差逐步建立从运动学到动力学的完整分析框架为课程作业、考试复习和工程实践提供参考。1. 习题答案不是抄作业它到底是哪一种“参考”翻开一本机器人学教材的第三章看到“求图示三连杆机械臂末端位姿”这道题很多人的第一反应不是“我不会”而是“我算完了但不知道对不对”。旋转矩阵乘了六遍最后一个反正切函数的符号拿不准角度制和弧度制来回切换中间夹着一个转置到底该放左边还是右边全凭记忆。这种“推导看着挺顺、结果没人对答案”的状态是学机器人建模与控制时最典型的卡点。机器人建模和控制习题答案本质上就是把这层不确定摊开每一步推导怎么走、中间量长什么样、最终数值落在哪个区间都能拿来对照。它像练琴时的节拍器——不替你弹但能让你立刻听出哪里跑调。搞懂它的定位比拿到它更重要。2. 为什么这门课特别需要一份可对照的答案2.1 数学门槛把错误藏进了“看起来对”的推导机器人建模与控制这门课的难点不属于那种“概念听懂了就能做题”的类型。它的概念本身并不深奥一句话就能说明白把机械臂的关节角度换算成末端的位置和姿态再算出该给每个关节多大扭矩让它按你想的方式动起来。真正劝退人的是中间那层数学——旋转矩阵、齐次变换、雅可比矩阵、拉格朗日方程每一步都是矩阵和三角函数的组合写错一个负号后面全错但表面上依然“工整得像对的”。举个很常见的翻车场景算二连杆平面臂的正运动学有人把两个变换矩阵的相乘顺序写反了。结果算出来的末端位置坐标数值还都在合理范围内图形也能画出来看上去毫无异常可它对应的物理含义已经完全变了——原本是“先转第一个关节再转第二个”被写成了“先按第二个关节的角度转再叠加”。这类错误不看答案几乎发现不了因为它不产生报错只产生一个错误但自洽的世界。而机器人这门学科还有个特点概念是链式咬合的。运动学算错雅可比就错雅可比错奇异位形判断就错动力学模型跟着崩控制器设计再好也救不回来。链条上任何一环出问题后面所有推导都变成自娱自乐。习题答案的价值就在于给每一环提供一个可校验的锚点。注意校验的重点不是“最终数字对不对”而是“中间量有没有物理意义”。一个末端位置看着合理的答案可能对应的是完全错误的连杆构型。2.2 答案承担的三件事校验、示范、止损把习题答案当成一份对照材料来看它实际提供了三种不同层次的东西价值从低到高排列。最低一层是数值校验。做完一道正运动学题你算出末端在基座坐标系下的位置是某组数翻答案发现第一项差了个符号立刻知道自己错在某个旋转方向上。这一层最直接但也最容易让人产生依赖——只看数字不看过程下次换个数还是错。中间一层是推导示范。机器人学的习题答案往往比题目本身信息量大因为一套好的解答会展示“该按什么顺序组织推导”。比如逆运动学题是先用几何法把平面臂的三角关系画出来还是直接上代数消元动力学题是先写拉格朗日函数再对广义坐标求偏导还是直接用牛顿-欧拉递推。这些顺序选择本身就是经验光看教材正文不容易体会到因为正文是“已经整理好的结论”而解答展示的是“面对一道题时的取舍”。最高一层是止损。这一点常被忽略。学习这门课时卡在一道题上耗掉三个小时是常有的事而且往往不是卡在“不懂概念”是卡在“某个中间步骤的技巧想不出来”——比如某个三角恒等式不会用或者某个矩阵求逆没找到简化路径。这种情况下继续硬扛收益极低。答案在这时候起的作用是给一个台阶看一眼关键的中间步骤把思路接上然后合上答案自己重新推一遍。这不是偷懒是把时间花在真正需要自己动手的部分上。2.3 一道题的完整闭环长什么样一本教材的习题尤其是运动学和动力学部分一道题的正经做法通常包含四个环节。把这四个环节固化成习惯比做完一百道题更有用。第一个环节是建模。先把题目给的机构抽象成连杆、关节、坐标系的组合确定自由度数量画出简图。这一步看着简单却是最容易出错的地方——自由度数错一个后面全白做。第二个环节是推导。按选定方法一步步写不跳步。跳步是学生时代留下的坏习惯到了机器人学这里特别致命因为被跳过的往往正是符号最容易出错的地方。第三个环节是数值代入。把具体参数代进去算出一个可以对比的数。这一步的意义在于它是唯一能用答案直接校验的环节。第四个环节是极端情形检验。这是最容易被跳过、也最能救命的一步。所有关节角取零时末端应该落在某个显而易见的几何位置上两个连杆完全伸直时末端到基座的距离应该等于两段长度之和两个连杆完全折叠时距离应该等于两段长度之差。如果这些特殊情况对不上说明推导里藏着逻辑错误即使数值代入那一步碰巧对上了也别信。这四个环节里答案能帮上忙的是第二和第三环节第一和第四环节必须自己完成因为那才是真正检验理解程度的地方。3. 坐标系与运动学从关节角到末端位姿的那条链路3.1 三套坐标系基座、关节与任务空间描述机器人手臂的位置和描述一栋楼里某个人在哪思路其实是一样的。你可以说“他在 12 楼 3 号房间”偏局部、偏结构化也可以说“他在城市坐标系的某个经纬度点”偏全局、偏绝对。机器人学里同样有几套并行的描述方式弄混它们是初学阶段最大的混乱来源。基座坐标系是固定在地面或机器人底座上的参照系一切最终结果都要换算到这里才能被外部理解。关节坐标系是跟着每个关节转的局部参照系正运动学的每一步变换本质上都是从“上一个关节的坐标系”跳到“这一个关节的坐标系”。任务空间坐标系也叫笛卡尔空间或操作空间描述的是末端执行器在空间中的位置和姿态也就是“手在哪里、朝哪个方向”。这三者之间不是并列关系而是转换链条上的三个站点。关节角是输入基座坐标是输出任务空间是目标。大部分习题干的活就是在这条链上来回走正向从关节角走到末端位姿反向从期望的末端位姿走回关节角。中间那一堆 4×4 矩阵就是两个站点之间的车票。在机器人建模与控制这门课里习题答案经常把这三个层次的量分开列出原因就在这里一个量属于哪个坐标系决定了它该跟谁做矩阵乘法也决定了它的物理含义。看到一组数先问“它在哪个坐标系里”能省下大量返工。3.2 正运动学四个参数连乘出的末端位置正运动学的思路非常朴素从基座开始一节一节往后算每经过一个关节就乘一个变换矩阵乘到最后就是末端位姿。工程上最常用的记法是四个参数描述一节连杆——连杆长度、连杆扭角、连杆偏距、关节角。前三个是机构本身决定的最后一个是变量。下面这段代码展示的是最标准的做法先构造单节连杆的齐次变换矩阵再按顺序连乘。import numpy as np def dh_transform(a, alpha, d, theta): 按标准 DH 约定构造单节连杆的 4x4 齐次变换矩阵。 参数: a : 连杆长度沿 x 轴的平移量 alpha : 连杆扭角绕 x 轴的旋转角弧度 d : 连杆偏距沿 z 轴的平移量 theta : 关节角绕 z 轴的旋转角弧度—— 这是唯一的变量 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], ]) def fk_two_link(l1, l2, q1, q2): 二连杆平面臂的正运动学返回末端在基座系下的 x、y 和朝向角。 T1 dh_transform(l1, 0.0, 0.0, q1) T2 dh_transform(l2, 0.0, 0.0, q2) T T1 T2 # 连乘顺序决定物理含义不能交换 return T[0, 3], T[1, 3], np.arctan2(T[1, 0], T[0, 0])这段代码里真正需要注意的是连乘顺序。矩阵乘法不满足交换律T1 T2和T2 T1算出来的是两个不同的物理系统。前者表示“先动第一个关节再在它带动后的参考系里动第二个关节”后者则是把顺序反过来了。初学者写代码时随手交换两个变量程序不会报错结果照样是一组看着很正常的坐标但你的机械臂已经变成了另一台机器。参数方面theta是唯一随运动变化的量其余三个在固定机构上都是常数。这也解释了为什么正运动学的计算量可控——机构定下来之后矩阵里的常数部分可以预先算好实际运行时只更新角度相关的项。第三行返回的朝向角用反正切函数算比直接取矩阵元素靠谱因为它能正确处理四个象限。这个细节在习题答案里经常被省略但它恰恰是数值代入阶段最容易出错的地方。3.3 逆运动学为什么反着算会突然变难正运动学是“给我角度算出手在哪”逆运动学是“给我目标位置反推该转多少度”。听起来只是把方程反过来解难度却完全不是一个量级。原因在于映射的方向性。从关节角到末端位姿是一个确定性的单向计算给定一组角度只有一个答案。反过来给定一个末端位置可能存在多组关节角都能到达——这就是常说的多解问题。直观地想你的手要摸到桌面上某一点可以把肘部抬高从上方下去也可以把肘部压低从侧面绕过去两种姿势手都在同一个位置。逆运动学必须把所有这些可能性都解出来再根据约束挑一个。逆运动学的解法大致分两派。解析法通过几何关系或代数消元直接求出闭式表达式速度快、精度高但只对特定结构的机构成立换个连杆长度、多一个自由度公式就得重推。数值法是迭代逼近用雅可比矩阵做局部线性化一步步往目标位置挪通用性强但需要给初值、可能不收敛、可能停在奇异位形上。所谓奇异位形是指雅可比矩阵“退化”的那些构型。通俗地说在那些姿势下末端想往某个方向动关节却怎么转都使不上劲相当于人的手臂完全伸直时再想往外够就够不着了。数值迭代走到这附近会剧烈震荡或者直接发散。习题里涉及逆运动学答案通常会标出这些边界位置因为那是数值求解最容易出错的地方。下面这段代码给出二连杆平面臂的解析逆解正好可以拿来体会“多解”是怎么冒出来的。import numpy as np def ik_two_link(l1, l2, x, y): 二连杆平面臂的解析逆解返回一组解q1, q2。 r2 x * x y * y c2 (r2 - l1 * l1 - l2 * l2) / (2.0 * l1 * l2) # 余弦定理直接给 cos(q2) if abs(c2) 1.0: raise ValueError(目标点在工作空间之外无解) q2 np.arccos(c2) # 取正号肘部朝上一解 q1 np.arctan2(y, x) - np.arctan2(l2 * np.sin(q2), l1 l2 * np.cos(q2)) return q1, q2关键在np.arccos那一步。反余弦在 [0, π] 上取值只返回一个解而实际上 ±q2 两组角度都对应同一个末端位置——这正是“肘部朝上”和“肘部朝下”两种构型。代码里取了正号另一组解需要手动取负再重算 q1。习题答案里如果只给一组解不代表另一组不存在多数时候是默认了某个构型偏好。raise ValueError那行也不是可有可无的装饰。目标点落在两个连杆伸长也够不到的地方时余弦定理算出来的值会超出 [-1, 1]反余弦函数直接返回非法值或者报错。先做判断再计算是工程代码里必须养成的习惯也是很多习题解答里会特意标注的边界处理。3.4 轨迹规划站在运动学的肩膀上逆运动学解决的是“终点在哪”轨迹规划解决的是“怎么过去”。这两件事经常被混在一起但要求完全不同。从 A 点到 B 点只要中间不撞东西理论上可以瞬间跳过去但真实机构承受不了突变的加速度电机扭矩会顶到上限机械结构也会抖。所以轨迹规划要做的是在两点之间插一条平滑曲线让位置、速度、加速度都连续变化。关节空间里常用多项式插值最简单的三次多项式只能保证位置和速度连续加速度会在起停处跳变五次多项式多约束两个条件能让加速度也平滑过渡。速度曲线常做成梯形先匀加速、再匀速、最后匀减速对应电机最舒服的工作方式。在机器人建模与控制的习题里轨迹规划题往往紧跟在逆运动学后面因为路径上的每一个点都要反解成关节角再对角度序列做插值。顺序反过来做——先在笛卡尔空间插值再逐点反解——也行但会遇到两个问题一是笛卡尔空间的直线在关节空间里不是直线中间可能绕很远二是路径上可能经过奇异位形反解直接失败。这些细节正是答案里最值得看的部分因为它体现的是“选择”不是“公式”。4. 动力学与控制力矩从哪来系统凭什么稳4.1 动力学方程的物理含义惯量、耦合与重力运动学只管几何不关心力和质量。动力学补上这一层要让机械臂按指定轨迹动每个关节的电机到底该输出多大扭矩。标准的动力学方程长这样惯性矩阵乘以关节加速度加上科氏力与离心力项加上重力项等于关节力矩。三项各有各的物理对应。惯性项描述“加速有多费劲”它不是一个常数而是一个随姿态变化的矩阵——手臂伸直和收拢时转动惯量差得远。科氏力项描述“各关节之间互相干扰”一个关节转起来会通过连杆把力甩到另一个关节上这是耦合效应的来源。重力项描述“维持当前姿态需要多大的静态力矩”手臂水平伸展时重力矩最大垂下来时几乎为零。从建模方法上拉格朗日法从能量出发写出动能和势能对广义坐标求偏导推导过程系统但计算量大牛顿-欧拉法从力和力矩的递推出发先正向推速度加速度再反向推力和力矩计算效率高适合写进实时控制器。两种方法结果一致选哪个看场景。习题里两种都会出现答案的价值在于展示每一步的中间量——尤其是惯性矩阵的每一项对应哪个连杆的哪部分质量弄清楚了调试实物时才知道力矩异常该往哪查。4.2 PID、滑模与自适应控制三档不同的解法控制器要解决的问题是给定期望轨迹实际轨迹偏离了怎么办。最经典的是比例-积分-微分控制。比例项看当前误差误差大就使劲拉微分项看误差变化趋势快到位时提前收力避免冲过头积分项累计历史误差用来消除稳态偏差。三个参数调起来很像玄学同一个机械臂换个负载原来调好的参数可能就不好用了。原因在于 PID 是线性控制器而机器人动力学是强非线性的——惯量随姿态变、耦合项随速度变一套固定增益没法在所有工况下都合适。滑模控制换了个思路不去精确抵消非线性而是设计一个“滑模面”用足够大的切换力度把系统状态强行压到这个面上再沿着面滑向目标。它的优点是鲁棒性强参数有偏差、有外部扰动也能扛住。代价是抖振——控制量在滑模面两侧高频切换实际执行时电机会发出滋滋声机械结构也跟着震。工程上常用饱和函数替代硬切换来缓解但会损失一部分鲁棒性。自适应控制则针对“参数不知道”这个场景机械臂抓的物体质量未知或者连杆参数标定不准。它的做法是在线估计这些未知参数边估边调控制律。理论上很漂亮实际用起来要小心——估计值可能发散激励不充分时参数根本估不出来。三者的关系可以用一个粗糙的类比理解PID 是闭着眼睛按经验推滑模是拿根硬杆强行别住自适应是一边推一边摸清楚东西有多重。习题答案在这部分通常会给完整的稳定性证明那才是真正的干货。4.3 稳定性分析为什么绕不开那套能量函数控制器的好坏不能只看“仿真跑起来挺顺”得有数学上的保证。机器人领域最常用的是李雅普诺夫方法核心思想很像一个物理直觉如果系统的总能量一直在减少那它最终一定会停在某个能量最低点不会到处乱飞。具体做法是构造一个标量函数满足两个条件一是除了平衡点之外恒为正二是沿系统轨迹的导数恒为负。第一个条件保证它像个碗第二个条件保证碗里的球一直在往下滚。找到这样一个函数就能证明系统稳定不用解出轨迹的解析表达式。难就难在“构造”这一步没有通用配方。线性系统有现成的二次型可以用非线性系统得靠经验和技巧有时候要试好几种形式才凑得出来。习题里出现这类题答案的推导过程往往比结论更有价值——它展示的是“怎么猜出一个能用的函数”这个能力没法靠背公式获得。提示判断稳定性时导数“恒为负”这个条件在有些题目里可以放宽到“不增”配合不变集原理照样能得出结论。答案里如果出现这种放宽别以为是写错了。5. 五组最容易搞混的概念区别到底在哪5.1 正运动学与逆运动学易混点两者都被叫作“运动学”都涉及关节角和末端位姿的关系习题里经常连着出现。为什么混它们的输入输出正好互为反函数看公式时容易觉得“不就是解个方程”。而且很多结论是共用的比如都依赖同一套坐标系约定。怎么区分看方向。正运动学是从关节空间到任务空间的单向映射一定唯一、一定可解、计算量固定逆运动学是反方向的映射可能多解、可能无解、可能数值不收敛。判断一道题属于哪类看它给的是角度还是位置——给角度求位置是正解给位置求角度是逆解。还有一个更实用的判据正运动学的答案可以拿来做单元测试逆运动学的答案必须做回代验证把解出来的角度代回正运动学看能不能得到原来的目标点。5.2 运动学与动力学易混点两者都在描述机器人运动教材章节也挨着很多人学完运动学就直接跳到控制器设计把动力学跳过去了。为什么混日常语言里“运动”和“动力”界限模糊而且运动学的输出位置、速度确实是动力学的输入之一。怎么区分运动学只看几何关系不涉及质量、惯量、力动力学必须考虑这些因为它要算出力矩。一个简单的判据是如果题目里出现了质量、转动惯量、重力加速度、力矩这些量那就是动力学如果只有长度和角度那就是运动学。还有一层区别在验证方式上——运动学答案可以用几何直觉检验动力学答案往往只能靠能量守恒或者极端工况来核对。5.3 关节空间与任务空间易混点同一个动作既可以在关节空间描述也可以在任务空间描述两条路径看上去都走得通。为什么混最终目的都是让末端到达某个位置中间的表述方式差别被目的掩盖了。怎么区分看变量的物理含义。关节空间的坐标就是那几个电机的转角维度等于自由度数永远不会有奇异问题任务空间的坐标是末端的三维位置加三维姿态维度最多六个会出现够不到和奇异位形。做规划时如果对末端路径形状没要求优先在关节空间插值简单稳定如果末端必须走直线或者必须绕过障碍才在任务空间规划再反解。习题里经常故意把两者混着问答案的分步过程能看出作者选的是哪条路。5.4 路径规划与轨迹规划易混点两个词经常被当作同义词用中文语境下更是模糊。为什么混都涉及“从一点到另一点”日常交流里没人会特意区分。怎么区分路径只关心几何形状是一条空间曲线不含时间信息轨迹是路径加上时间律每个点都对应一个时刻因此有速度和加速度。判断标准很直接答案里出现时间变量、速度曲线、加速度约束那就是轨迹规划只给出一串空间点或者一条曲线方程那是路径规划。这个区别在实物上很关键因为电机能承受的加速度有限光有路径没法执行。5.5 解析解与数值解易混点同一个逆运动学问题解析法和数值法都能给出答案数值上还可能一致。为什么混最终结果看起来一样过程差别被结果掩盖了。怎么区分解析解是闭式表达式代进去就算出来速度快、精度由浮点决定但只对特定结构成立换个机构就得重推数值解是迭代逼近通用性强但需要初值、可能不收敛、可能收敛到错误的解分支上、迭代次数不定。工程上一般优先找解析解找不到才用数值法而且要给数值法配上迭代次数上限和初值策略。习题答案如果只给数值解通常意味着这道题的机构没有简洁的闭式解不是作者偷懒。6. 什么时候该翻答案什么时候别翻判断标准其实只有一条你翻答案的目的是“接上思路”还是“跳过思考”。前者是学习后者是自我安慰。该翻的场合有三类。第一类是卡在纯技巧上超过二十分钟——某个三角恒等式想不起来、某个矩阵求逆找不到简化路径、某个积分形式没见过。这类卡点跟机器人学的核心概念无关硬耗只是浪费时间看一眼关键步骤把路打通然后合上答案自己重推一遍收益最高。第二类是做完题需要校验尤其是数值结果和极端工况。第三类是对某个推导的“动机”不理解比如为什么动力学要写成那个形式、为什么稳定性证明要构造那个函数这时候看答案的组织方式比看结论有用。不该翻的场合同样明确。刚读完题就翻等于放弃了建模这个最重要的环节推导写到一半觉得麻烦就翻会把“能不能坚持推完”这个能力练废还有就是做完题直接对最终数字对了就过、错了就改——这种用法把答案降级成了参考答案中间过程里的信息全浪费了。场景建议原因卡在数学技巧超过 20 分钟看关键步骤然后合上重推技巧不是这门课的核心别在这里耗推导完成需要校验对照中间量和极端工况数值对不代表推导对不理解某步的动机看解答的组织顺序顺序本身是经验刚读完题不看先自己建模建模能力只能自己练推导中途嫌烦不看推完再说半途放弃会形成习惯只对最终数字改方式对中间量数字对了过程可能全错我自己啃这本书的时候踩过一个坑有次算三连杆的雅可比矩阵算完对答案数值全对特别得意后面几道题就都只对最后一行。结果做到奇异位形分析时彻底翻车——原来我那道题之所以“对”是因为两个错误正好互相抵消了一个符号写反、一个转置漏掉凑巧在那一组参数下给出了正确结果。从那以后我每次对答案都强制走一遍中间量哪怕最后数字看着没问题也要把惯性矩阵的对称性、雅可比的行列式、变换矩阵的正交性挨个查一遍。多花的这十分钟比多做三道题管用。希望帮到你。这份《机器人建模和控制》习题答案覆盖的正是上面这些环节里最需要对照的部分从坐标变换的中间矩阵到逆运动学的多解分支再到动力学方程每一项的物理含义和稳定性证明的构造思路。它不是让你少想是让你在想偏的时候能早点发现。需要的话按文末方式获取即可。本文还有配套的精品资源点击获取