简介:《现代机器人学(Modern Robotics: Mechanics, Planning, and Control)》课后习题答案源自原版教材配套,是一份面向机器人专业学生、研究人员及自学工程师的完整解题资源,覆盖第2章至第13章,从机械原理、运动学、动力学延伸到规划与控制策略。以第2章为例,习题围绕自由度计算展开,详细推导多点定位系统的自由度总数公式,并通过上肢机器人构型分析肩、肘、腕及前臂旋转对各自由度的贡献,得到七自由度模型,同时说明旋转自由度与线性自由度的区别及空间拓扑。这些解答有助于深入理解空间定位、约束条件与关节运动的相互影响,每章都注重推导过程与思路梳理,适合对照原教材逐章研习、查漏补缺,也为后续动力学、轨迹规划和控制内容打下基础。资源为单个PDF文件,大小约13.97MB,按章节编排,便于跨设备阅读与检索。目前已有1247人浏览学习,可用于课程巩固、考研复习及实际机器人项目中的机构分析,系统掌握现代机器人学基础理论。
1. 机器人学到底在学什么:一份课后答案能帮你搞懂的核心
机器人学(Robotics)是一门研究机械系统如何感知、决策并完成动作的学科,而《现代机器人学》把这条线拆成了三块:机械(Mechanics)、规划(Planning)与控制(Control)。听起来很大,但落到练习题上,第一件事往往是算一个很基础的东西——自由度。好比你想判断一台新买的机械臂能不能绕过障碍拧到螺丝,只看电机功率没用,你得先回答“它能独立改变几个动作参数”。这个数一出来,后面该用什么样的运动学模型、该怎么规划路径,全都跟着定了。可惜教材正文里的公式和记号容易劝退人,真正把概念焊死在脑子里的办法是拿课后习题一道一道验证。这也是这份《现代机器人学(Mechanics, Planning, and Control)课后习题答案》最直接的价值:让你知道自己是不是真的懂了,而不是“觉得懂了”。
2. 自由度(DOF):机器人“能怎么动”是算出来的
通俗地说,自由度就是一台机器能独立改变的“动作方向”的数量。想象桌上一枚硬币:它可以左右滑、前后滑,还能转个角度,这就是三个独立的动作,所以平面里一个自由物体有 3 个自由度。到了三维空间,前后、左右、上下三种平移,再配上滚转、俯仰、偏航三种转动,一共是 6 个自由度。机器人学里前几章的习题,一大半都在干同一件事:数清楚一套机械结构究竟提供了多少个独立的动作。数错了,后面的运动学、动力学全都是白搭。这个数字就像人的骨架,骨架不对,肌肉再强也摆不出想要的姿势,自由度对初学者来说因此常被当成“玄学”,其实它是可以一步步算出来的。
2.1 从最朴素的场景出发:一个点、一根手臂
先看一个最简单的模型,它就是教材第 2 章开头的 Exercise 2.1:如果要在空间里依次放置 ( n ) 个点,第一个点有 ( n ) 个自由度,第二个点被加上一个约束,自由度数就变成 ( n-1 ),第三个点是 ( n-2 ),以此类推。把所有点数加起来,得到总自由度是 ( n(n+1)/2 )。这个式子看着像纯数学,其实背后有一个很直观的物理图像:第一个点可以随意放在三维空间里,第二点就被限制在以第一个点为球心的球面上,第三个点又进一步被限制在两个球面的交线上。自由度一层层减少,最后形成的空间拓扑是 ( R^n \times S^{n-1} \times S^{n-2} \times \cdots \times S^1 ),一条完整的“姿态链”。
这种“每加一个约束就少一个自由度”的思路,在整个机器人学里反复出现。Exercise 2.2 则直接把问题搬到了人身上:把人的上肢当成一台机械臂来数。肩部被看作一个四自由度的球形关节,肘关节一个自由度,腕关节两个自由度,前臂绕自身轴线还能再转一个自由度。四个一加,上肢总共 7 个自由度。为什么是 7?因为人类手臂要做的事情比“把物体送到某个点”更复杂,它还得能绕过障碍、能调整姿态去抓握。第 (b) 问更有意思:如果让手掌固定在某个位置和姿态,手臂要承受 6 个约束(刚体的 6 个自由度);此时肩关节中心还保持不动,整条手臂就剩下一个自由度——肘尖只能沿一条圆弧滑动了。这个例子告诉我们,自由度不是一个孤立数字,它依赖于被施加的约束,这正是许多初学者容易忽略的“约束感”。
2.2 Grübler公式:给机构“算总账”的口诀
数完点、数完手臂,接下来要面对一堆连杆和关节组成的机构,比如六轴机械臂、Stewart 平台。这时候还靠直觉一个一个数就很容易翻车。教材里给的“后悔药”是一套公式——Grübler 公式。它的三维空间版本是:
[ dof = \lambda (N - 1 - J) + \sum_{i=1}^{J} f_i ]
其中 ( \lambda = 6 ) 表示三维空间里一个刚体拥有的总自由度,( N ) 是连杆数(包含固定的基座),( J ) 是关节数,( f_i ) 是每个关节提供的自由度。平面机构则把 ( \lambda ) 换成 3。这个公式的逻辑可以理解成:先把所有连杆和关节全都“断开”,让每个连杆都当成自由刚体,算出一笔总家底;然后每接上一个关节,约束掉一些自由度;最后剩下来的就是整个机构的实际活动余地。
# 用 Grübler 公式算一台 6R 机械臂的自由度 N = 7 # 6 根连杆 + 1 个固定基座(地面) J = 7 # 7 个转动关节 sum_fi = 7 # 每个转动关节提供 1 个自由度 dof = 6 * (N - 1 - J) + sum_fi print(dof) # 输出 1上面这段代码对应教材中多处 6R 机械臂的习题:机械臂的自由度是 1,说明手臂整体只有一个独立的运动参数。这在物理上也很好理解:六个关节角度一旦联动起来,末端只能沿一条路径走,因为整条开链被“固定”在了一个确定的运动轨迹上。再看另一个例子:Stewart 平台——上下两块板之间用六条腿连接,每条腿两端都是球铰(S 关节)。此时 ( N=8 )(六条腿加上平台和地面),( J=12 )(十二条球铰),每个 S 关节提供 3 个自由度,代入公式得到总自由度 6。也就是说,虽然平台有六条腿牵着,欠驱动问题乍一听很严重,但它恰好拥有完整的六自由度运动能力,这正是 Stewart 平台能当作飞行模拟器运动底座的原因。
使用 Grübler 公式时,结果的正负号也大有讲究。算出来是 0,说明机构被“锁死”成一个结构;算出来是负数,代表过约束,机构理论上不能动;算出来是正数,才是真正的活动自由度。教材里 Exercise 2.15 就专门挖了一个坑:一串五个正方形用六个转动关节连起来的机构,用平面 Grübler 公式算出来是 3 个自由度,可一旦把它放到三维空间里用 6 当作 ( \lambda ),答案变成 0,机构仿佛“卡死”了。但实际它偏偏能动。习题答案提醒我们:Grübler 公式有适用条件,它假定所有约束都是“干净”的,实际机构里某些几何关系(比如五根杆恰好组成一圈等长正方形)会带来额外交集,导致公式失效。考试时算出负数别急着划掉,先想想是不是漏了什么隐含约束。
2.3 开链与闭链:一根手臂和一张平台的自由度思路完全不同
机械臂属于开链机构——从基座到末端,一条链子走到底,关节串联,末端自由度大体上等于各关节自由度相加。可并联机器人(比如六条腿托着一块平台的 Stewart)就是另一码事了,它是闭链:多个支链同时连接基座和末端,互相之间会牵制。很多初学者第一次拿到并联机构题,习惯性地从第一条腿开始逐个关节数,结果怎么数都跟答案对不上,因为闭链的自由度不能简单相加。
Exercise 2.8 给出了一条很漂亮的通用推理:假设每条开链腿有 ( \alpha ) 个自由度,( n ) 条腿连同一个平台和一个地面,用 Grübler 公式代入后,最终总自由度恒等于 6,和腿的数量 ( n ) 没关系。这个结论初看反直觉,但细想就通:多一条腿只是多了约束,而每条腿自身带来的自由度恰好抵消了它施加的约束。平台的自由度本质上是由任务决定的,不是由“安了几条腿”决定的。这个思想在做并联机构设计时特别有用:你不需要盲目增加支链数量来“提高灵活性”,因为支链一变多,约束也会跟着变多,最后可能原地踏步。
顺着这个思路,教材里很多习题其实都在训练一种反向思维。Exercise 2.2(b) 就是典型:先假设末端被固定,再回头数剩余自由度。一旦你掌握了“先固定末端再数活动部件”的办法,很多看起来无从下手的复杂机构(比如手术机器人、汽车转向机构)都能拆成一小块一小块来验算。这也是这份习题答案最值得借鉴的地方:它不只在给结果,更在示范怎么拆问题。
3. 构型空间(C-space):机器人的“全姿态地图”
自由度解决的是“能怎么动”的问题,但机器人做规划时还要回答“能去哪里、能摆成哪些姿势”,这就得请出第二个核心概念:构型空间(Configuration Space,简称 C-space)。一句话版本:一个机器人所有可能构型组成的集合。构型是“每个关节各转了多少度”的完整描述,所有关节角度的一种组合就是一个点,所有这样的点集合起来就是一个空间。如果说自由度是机器人的骨架,C-space 就是机器人的“全姿态地图”——路径规划、避障、奇异点分析全都在这张地图上展开。
教科书里对这个概念的定义很抽象,习题答案却把它落地得很实在。Exercise 2.6(a) 把一台“轮式移动底盘 + 六轴机械臂”整体建模,轮式底盘在平地上的位置可以表示为平面里的平移加上车体朝向角,机械臂每个关节又是一个角度。合在一起,整个系统的 C-space 被写成了 ( R^2 \times T^8 )。这里 ( R ) 代表“直线平移”,数值可以跑到无穷;( T ) 代表“圆周角度”,转一圈又回到起点,数值范围是 0 到 ( 2\pi )。这个符号一出来,机器人的运动边界就清楚了:底盘的平移可以一直滑下去,而所有关节角度转到底、绕回来,始终落在闭合的环上。对做运动规划的程序员来说,这种区别直接决定了搜索算法该用什么度量方式,平移空间里直线距离好用,角度空间里就要考虑“绕圈最短路径”。
3.1 从习题答案看C-space描述:为什么机械臂的空间是环面
很多同学第一次见到 ( T^6 ) 这种写法会懵,更不清楚为什么机械臂的 C-space 是一堆“面包圈”叠在一起。其实只要你见过单个关节的运动轨迹就明白了:一个转动关节的角度 ( \theta ) 转满一圈回到原来的值,这不是直线运动,而是圆周运动。一个关节对应一个环 ( S^1 ),六个独立关节组合起来就是六个环的“直积” ( S^1 \times S^1 \times \cdots = T^6 )。用游戏的话说,C-space 不是那个 3D 的机械臂模型,而是它所有关节角度组合形成的“设置界面”。设置界面上相邻的两个点代表两组不同的关节角度,末端位置可能差异不大,但也可能差了十万八千里——这提醒你规划路径时不能只在笛卡尔空间里想事情。
习题答案里 Exercise 2.6(b) 又考了一个变体:如果机械臂末端被一个转动关节重新挂回地面(相当于手被门轴固定住),原来的 6 自由度 6R 臂就变成了一个闭环结构,算出来自由度只剩 1。这个变化很有意思:末端不再自由移动,整条手臂只能沿一条轨迹摆动。C-space 也从 6 维环面变成了一条曲线。很多做机械臂标定的人会利用这种“降维”来简化问题——人为给末端增加约束,把高维搜索变成一维扫参,这是工程里常用的“后悔药”式技巧。
3.2 正解与逆解:转角与姿态,一条路来回走
C-space 在关节角空间里描述状态,但用户关心的是末端在三维空间里的位置和姿态。把关节角换算成末端位姿,叫正运动学;反过来,给定位姿去求关节角,叫逆运动学。前者是一条确定的路:给定六个角度,末端在哪里是唯一的。后者就没那么客气了:同一个末端位姿,可能对应好几组关节角度,甚至一组都没有(目标点太远够不着),在奇异点附近还会出现“差一点就无解”的情况。习题答案里大量题目在训练这种双向思维,比如“给定手掌固定,看看肘尖还能走什么轨迹”这一类练习,本质就是在做逆运动学的思路热身。正解像是照着菜单做菜,材料定了菜就定了;逆解像是吃了菜反推配方,不同厨师能推出不同做法,有些做法根本不存在。
以 6R 机械臂为例,逆解通常有 8 组解。为什么会这么多?因为后三个关节的腕部结构允许同一姿态对应多组“臂型”,就像人用左手或右手去够同一个杯子,肩膀、肘部的角度可以互相补偿。实际控制中还要从这堆解里筛选:选最近的一组,避开关节限位,或者躲开奇异点。理解 C-space 和正逆解的关系,是读懂后面几章控制内容的基础,也是这份课后答案的“承重墙”。
3.3 并联机构的多解性与奇异点:一个平台能同时动几下
并联机构经常拿来做重型支撑和精密定位,因为它的结构刚度高、承载能力强。教材里 Exercise 2.7 做了个很精辟的推导:如果把两台 7 自由度机械臂同时抓着一个物体,那么整个系统的自由度是 8;若把其中一条臂从 7 自由度降到 6 自由度,总自由度立刻变成 6。这个数看起来“刚刚好”,说明末端物体被完全约束住,但并联结构里这种“刚好”恰恰容易埋雷。因为对称的六腿平台在特定的高度、特定姿态下,会进入奇异位形,此时某个方向上的运动变得极难控制,平台会突然“变硬”或“失稳”。习题答案里 Exercise 2.13 算出的结论——平台可以同时做水平平动、绕竖直轴转动,还保持上下运动稳定——读起来平淡,但这就是工程师选平台结构时最关心的能力边界。
并联机构的问题往往是“自由度算对了,但实际控制不住”。原因就在于,Grübler 公式只回答“理论上能怎么动”,不回答“每个方向上的运动品质如何”。同一台六腿平台,在某个姿态下可能某个方向刚度极差,外力一碰就走位。所以工程里分析并联机构,通常要在自由度之外再配合雅可比矩阵的条件数来判断灵巧度。这份习题答案虽然没有展开控制细节,但第 2 章里反复出现的“关节自由度相加”训练,正是在帮你为这种判断打好地基。它教会你:先别急着上仿真,老老实实算一遍自由度,很多方案上的硬伤在纸上就已经现形了。
4. 常见误区:最容易搞混的自由度与关节概念
学了几天机器人学,最容易让人“卡壳”的不是公式,而是一组组长得极像、意思却南辕北辙的概念。这里整理几条初学者最常踩的坑,每一条都按“易混点 → 为什么混 → 怎么区分”的顺序理清。
| 易混概念 | 表面相似点 | 本质区别 |
|---|---|---|
| 关节数 vs 自由度 | 都跟“能转的地方”有关 | 关节是物理存在,自由度是独立参数 |
| 平面机构 vs 空间机构 | 都套 Grübler 公式 | ( \lambda ) 不同,公式形态有区分 |
| C-space维度 vs 工作空间维度 | 都描述“空间大小” | 一个是关节角坐标,一个是末端坐标 |
| 自由度多 vs 更灵活 | 自由度似乎等于灵活度 | 多出来的自由度也要消耗控制资源 |
4.1 关节数 ≠ 自由度:球形关节最典型
易混点:教室里常说“六轴机械臂有 6 个自由度”,这句话本身没错,但它指的是 6 个转动关节,每个关节一个自由度。一旦换成球形关节(S 关节),情况就全变了:一个 S 关节在物理上是一个零件,却能提供 3 个独立转动,等效于三个转动关节叠在一起。
为什么会混:因为教材里的机械臂示意图画的都是一节一节的杆子,每个旋转处画一个小圆弧,让人误以为“一个关节 = 一个自由度”。
怎么区分:拿到机构先看关节类型。转动关节 R 给 1,移动关节 P 给 1,万向节 U 给 2,球形关节 S 给 3。算自由度时,先把每个关节的自由度列出来,再代入公式求和。比如 Exercise 2.13 的 Stewart 平台,六条腿十二个球铰,每个是 3,合计 36,这才算出总自由度 6。如果按“十二个关节 = 12 自由度”来数,后面不用算就已经错了。
4.2 平面机构硬套三维公式:空间版本不是万能的
易混点:Grübler 公式有两个版本,平面版 ( dof = 3(N-1-J)+\sum f_i ),空间版 ( dof = 6(N-1-J)+\sum f_i )。初学者拿到一个机构图,不分青红皂白直接用 6,结果算出负数,误以为机构卡死。
为什么会混:因为两个公式长得几乎一样,只差一个系数,书上的例题又来回切换,看久了就麻木了。Exercise 2.16 专门出了道题:一个在球面上运动的四杆机构,运动被限制在二维球面内,应当用二维版本的公式,算出来自由度是 1;如果用三维空间公式硬套,会得到 -2,直接把它判成“机构”。
怎么区分:先问一个问题:机构里所有点是在平面内运动、球面上运动,还是在三维空间内自由运动?只要所有运动被限制在同一个平面上,就用 ( \lambda=3 );如果所有关节轴都交于一点导致连杆只能在球面上滑动,同样按二维处理;只有真正在三维空间里不受平面约束的机构才用 ( \lambda=6 )。
4.3 C-space 维度 ≠ 工作空间维度:机器人的“状态”与“领地”
易混点:提到一个 6R 机械臂,有人会说“它的空间是三维的”,也有人会纠正说“明明是六维的”,两边都觉得对方错了。
为什么会混:因为“空间”这个词被用滥了。C-space 是关节角空间,维度等于关节自由度数;工作空间是末端能到达的三维位置集合,顶点带不带姿态就看你怎么描述。
怎么区分:C-space 描述的是“机器人自己处于什么状态”,工作空间描述的是“末端能摸到世界的哪些地方”。前者的坐标轴是关节角度,后者的坐标轴是笛卡尔坐标。规划算法里如果混淆二者,最常见的结果是:你在关节空间里画了一条直线路径,末端却在三维空间里走出一条大弧线,撞了旁边的障碍物还发现不了。记住一句话:关节角度的空间永远是高维环面,不是那个看得见摸得着的 3D 世界。
4.4 “自由度越多越灵活”不等于“越容易控制”
易混点:看到 7 自由度手臂就觉得比 6 自由度高级,认定它一定更强。
为什么会混:冗余自由度确实能带来避障、姿态保持等额外本领,但背后要付出的代价(控制复杂度、标定难度、碰撞概率)被很多人忽略。Exercise 2.2 里人手臂有 7 个自由度,关键优势在于:手掌固定时肘尖仍可沿圆弧移动,这让人类能一边保持手姿一边绕过障碍。可同样这一条,也意味着逆解有无穷多组解,控制器要额外做优化选择,稍不留意就会让动作出现“非预期抖动”。
怎么区分:看任务再谈自由度。如果只需要完成“从 A 点抓取到 B 点放置”,6 自由度通常够;如果需要“末端姿态固定,同时手臂绕过障碍”,才需要冗余自由度。习题答案里很多题先算自由度,再判断“能不能实现某个动作”,本质上就是在教这个判断顺序。别把自由度当成越贵越好的配置,真正的工程问题是“恰好够用且好控制”。
5. 什么时候用这份课后答案:真的不是“抄答案”
这份课后习题答案最适合的使用场景,是“自己先做,再对照验证”。Grübler 公式、C-space、正逆解这些概念,光看教材例题很容易产生“我懂了”的错觉;只有合上书、逼自己算完一道题,再翻开答案看推理链条跟参考答案差在哪里,概念才算真正长进脑子里。
我最推荐的用法是这样:先按章节把对应习题做一遍,做完后不急着对答案,先把关键参数——连杆数 ( N )、关节数 ( J )、每个关节的自由度 ( f_i ) 列成一张清单,自己算出结果,再打开答案比对。如果结果不一致,先别怀疑答案,回头查两件事:一是数连杆时有没有把基座和末端算进去,二是关节类型是不是识别错了。很多时候错误不在解方程,而在建模的第一步。这跟写代码很像:bug 通常不是最后一行写错了,而是从一开始就把变量名拼错了。
但这份答案也有一些“不该用”的时候。其一,别把它当教材从头啃;它只有结果和简要推理,没有概念铺垫和公式推导,零基础直接看容易越看越懵。其二,别拿它代替动手实验;自由度计算练的是脑子,但机械臂跑起来还会遇到摩擦力、重力矩、控制延迟这类“身体问题”,答案帮不了你。其三,如果你只是赶作业,那它当然能应付,但下个月面试官问“这台并联平台为什么算出来自由度是 6 而不是 12”时,你还得能现场推一遍。
我自己念书时也曾图快,先看答案再做习题,结果考试时面对一道没见过的夹爪机构完全不知道从哪里下手。从那以后我每次都强制自己先列出 ( N )、( J )、( \sum f_i ) 三个数,算完再翻答案,错了就回到正文重新读一遍相关小节。这样几轮下来,Grübler 公式才算真正成了我的条件反射。希望这份资料也能帮到你——它最好的样子,是当一面严肃的镜子,而不是一张现成的底牌。
本文还有配套的精品资源,点击获取