【免费下载链接】RVC3-python
Code examples for Robotics, Vision & Control 3rd edition in Python
RVC3-python 是《Robotics, Vision & Control》第3版教材的官方 Python 代码库,本教程用几行代码带你跑通 PUMA 560 机械臂的正运动学(FK)与数值逆运动学(IK)求解,并总结 3 种工程上常用的奇异点处理方法,适合刚接触机器人运动学的新手。
为什么选 RVC3-python 学机械臂运动学
[] 项目直接对应 Springer 出版教材的每一章,所有示例代码开箱即用:
- 内置 PUMA 560、Cobotta、Panda 等经典 DH 机器人模型
fkine/ikine_a(解析解)/ikine_LM(数值解)三大接口覆盖正逆运动学全流程- 配套 notebooks/chap7.ipynb 章节 Notebook,可交互式逐步运行
安装只需一步:
pip install rvc3python安装后可运行rvctool --test自检各工具箱是否正常(见 README.md)。
一行代码创建 PUMA 560 模型
PUMA 560 是 6 自由度工业机器人,运动学学习的"标准教材模型"。建模只需两行:
from roboticstoolbox.models.DH import Puma560 puma = Puma560()调用puma.plot()即可在 3D 视图中查看机械臂初始姿态。书中多个仿真实例都基于该模型,例如 RVC3/models/RRMC2.py 中就先用Puma560()建模,再用puma.ikine_a(Te)求解目标位姿的初始关节角。
正运动学(Forward Kinematics):关节角 → 末端位姿
正运动学回答"给定 6 个关节角,末端执行器在哪里":
T = puma.fkine(puma.qn) # qn 为初始关节角向量 T.printline("rpy/xyz") # 打印末端位姿(欧拉角/平移)仓库中还提供了一个基于 bdsim 的正运动学方块图仿真实例 RVC3/models/jointspace.py:JTRAJ → FKINE → ARMPLOT三个模块串联,可动态观察关节轨迹如何映射为末端在 XZ 平面的运动(对应书中 Fig 7.22),非常适合直观理解 FK 的数据流向。
数值逆运动学(Numerical IK):用 ikine_LM 求解关节角
逆运动学是反向问题:"给定末端位姿,关节角取多少"。PUMA 560 解析解复杂,通常用数值迭代求解:
T = puma.fkine(puma.qn) sol = puma.ikine_LM(T) # 数值法,Levenberg-Marquardt 迭代 puma.fkine(sol.q).printline() # 回代验证几个实用技巧(均在 notebooks/chap7.ipynb 中可运行):
- 指定初值:
ikine_LM(T, q0=[0, 0, 3, 0, 0, 0])可引导收敛到不同解支 - 解析解对照:
puma.ikine_a(T, "ru")可返回全部解析解(r=lw 肘部、u=up 腕部构型),用于验证数值解 - 位置约束:
mask=[1, 1, 1, 0, 0, 1]只约束位置+偏航角,释放自由度避免过约束 - 轨迹求解:对轨迹数组直接传入,
puma.ikine_a(Ts)一次性求出整条路径的关节轨迹
奇异点处理 3 种方法
奇异点(Singularity)指雅可比矩阵秩亏、机器人失去某个方向运动能力的构型(如肘部完全伸直)。工程上常用 3 种对策:
方法一:伪逆雅可比(Pseudo-inverse Jacobian)
用np.linalg.pinv(J)求速度级 IK。伪逆在奇异点附近会自动给出最小范数解,实现平滑但不保证收敛,适合教学与低动态场景。
方法二:阻尼最小二乘(DLS, Damped Least Squares)
即仓库中ikine_LM内部采用的 Levenberg-Marquardt 思想:在雅可比上加阻尼项,牺牲一点精度换取数值稳定,是数值 IK 求解奇异点最通用的方法。sol = puma.ikine_LM(T)默认就内置了收敛容差控制。
方法三:冗余/掩码降维(Mask)
用mask参数只约束部分位姿分量(如 notebooks/chap7.ipynb 中ikine_LM(TE, mask=[1, 1, 1, 0, 0, 1])),把姿态自由度释放出来,既避开姿态奇异,又给次级目标(避障、避关节极限)留出空。配合解析解的"ru"/"lu"构型选择,可在轨迹规划时主动绕开奇异构型。
💡 经验法则:离线轨迹规划优先选方法三(主动规避);实时控制回路用方法二(DLS 兜底)。
正逆运动学闭环验证:一条命令
判断运动学实现是否正确,最直接的测试是 FK→IK→FK 回环:
q = [0, pi/4, pi, 0.1, 0, 0.2] puma.ikine_a(puma.fkine(q), "ru").q # 应与 q 一致(可能不同解支)该模式在 notebooks/chap7.ipynb 与 RVC3/models/RRMC2.py(Te→ikine_a→ 闭环位置控制)中都有完整示例。
相关文件清单 📁
| 路径 | 内容 |
|---|---|
| notebooks/chap7.ipynb | 正/逆运动学完整章节示例(推荐从这入手) |
| RVC3/models/jointspace.py | 正运动学方块图仿真(Fig 7.22) |
| RVC3/models/RRMC2.py | PUMA 560 闭环控制 + IK 初值求解 |
| RVC3/models/RRMC.py | 雅可比矩阵速度级控制示例(Fig 8.3) |
| figures/code/chapter7/ | 第 7 章关节空间绘图脚本 |
跑通本教程后,建议继续 notebooks/chap8.ipynb 学习轨迹规划与雅可比控制,完成从"运动学"到"动力学"的进阶。
【免费下载链接】RVC3-python
Code examples for Robotics, Vision & Control 3rd edition in Python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考