在 Python 中使用机器人和计算机视觉,无需付费 MATLAB 许可证
为什么机器人工程师长期困在 MATLAB 中
如果你在五到十年前学习或从事机器人相关工作,你可能记得 MATLAB 的机器人工具箱。Peter Corke 在 1990 年代创建了它。很长一段时间以来,这个库一直是学术界和工程实验室的标准。需要构建空间变换矩阵、绘制机械臂轨迹或计算逆运动学——你会立即打开 MATLAB。
主要缺点显而易见:许可费用。将 MATLAB 代码集成到现代生产流程中也面临重大挑战。几年前,作者用 Python 完全重写了这些工具,并在 2023 年发布了《Robotics, Vision & Control》第三版以及开源的 RVC3-python 仓库。
包含内容
该仓库包含四个专业库的示例和统一封装:
- Robotics Toolbox 处理运动学、动力学和机械臂轨迹。
- Machine Vision Toolbox 处理图像处理、特征点检测和立体视觉。
- Spatial Maths Toolbox 处理 3D 变换数学、四元数和 Lie 群 SE(3)/SO(3)。
- BDSim 帮助模拟动态系统和框图。
所有源代码均采用 MIT 许可证分发。为了消除手动依赖管理的麻烦,创建者将所有内容打包成一个单独的包。
通过交互式控制台快速开始
开发者提供了一个便捷的 CLI 工具 rvctool。它启动一个 IPython 会话,其中预导入了所有必要的模块、数学函数和热门硬件的现成模型。
安装只需一条命令:
pip install rvc3python
然后启动工作环境:
rvctool
该控制台借鉴了 MATLAB 的语法体验。如果你在行尾省略分号,表达式结果会立即打印到终端。同时,你可以完全访问常规 Python 及其所有便利功能。
几行代码实现机械臂运动学
让我们定义一个 Franka Emika Panda 工业机器人模型,计算其法兰位姿,并求解逆运动学问题。
panda = models.ETS.Panda()
T = panda.fkine(panda.qz)
sol = panda.ikine_LM(SE3.Trans(0.4, 0.5, 0.2) * SE3.Ry(np.pi/2))
fkine 方法计算正向运动学并返回 SE3 刚体变换矩阵。ikine_LM 方法使用 Levenberg-Marquardt 算法求解关节角度。
调用 panda.teach(panda.qz) 方法会打开一个图形窗口,你可以在其中移动关节滑块并观察机器人姿态的变化。

图像处理和计算机视觉
对于基本的计算机视觉任务,无需挂接臃肿的外部框架。例如,两帧图像的 SIFT 关键点匹配如下所示:
sf1 = Image.Read("eiffel-1.png", mono=True).SIFT()
sf2 = Image.Read("eiffel-2.png", mono=True).SIFT()
matches = sf1.match(sf2)
matches.subset(100).plot("w")
底层使用的是久经考验的 NumPy 和 SciPy。如果你需要书第 11 章的深度学习示例(如神经网络分割),可以使用单独的标志引入 PyTorch:
pip install rvc3python[pytorch]
控制系统仿真
bdsim 包值得特别一提。它是创建一个无需笨重开发环境的 Simulink 替代方案的尝试。
框图可以直接在 Python 代码中创建,或通过图形编辑器 bdedit 可视化组装。数据保存为常规的 JSON 文件,扩展名为 .bd。该仓库已包含书中 25 个现成的教程模型,你可以直接从 rvctool 运行它们。
运行前需要注意的事项
在开始之前,有三点值得注意:
- 需要 Python 3.8 或更高版本,因为大量使用了类型注解。
- Apple Silicon 芯片(M1/M2/M3)可能在使用 Open3D 时出现渲染问题。项目 Wiki 有一个单独的页面提供变通方法。
- 代码可以在 Jupyter Notebook 和 Google Colab 中运行,但复杂的 3D 动画可能会因帧传输到 Web 界面的特性而出现卡顿。
谁会发现这个仓库有用
如果你在教授机器人学、撰写论文、研究导航算法,或者想在不搭建 ROS 2 等重量级环境的情况下快速测试假设,RVC3-python 可以为你节省大量时间。该项目消除了为变换矩阵编写自定义封装的需要,并提供了用于原型开发的现成基础。
相关项目