入门实践¶
编程练习¶
看完 Craig 的书后,你应该对工业机器人的原理有了一个大概的概念,这时候建议趁热打铁,快速通过代码实现相关建模与计算过程。
这部分其实很简单——纯代码,一台电脑,一个周末就能出结果。工具直接用 Peter Corke 的 Robotics Toolbox for Python(pip install roboticstoolbox-python;习惯 MATLAB 的,用对应的 MATLAB 版工具箱也行)。注意,工具箱是拿来对答案的,核心公式要自己写:
- 列 DH、写正解:挑一台常见六轴(例如上一章「运动学」一节里的六轴机械臂,或者工具箱内置的 PUMA560、UR5 等模型),自己列 DH 参数、写正运动学,跟工具箱的
fkine对答案(运动学); - 算雅可比:按教材的几何法写一遍,再用数值差分写一遍,两者对照;顺手验证「为什么不能直接对欧拉角求导」(雅可比矩阵);
- 数值逆解:写一个雅可比迭代求解器,跟工具箱的
ikine系列对答案——雅可比矩阵一节里那篇 MATLAB 逆解的回答,就是现成的路线图。
再进一步(可选,量力而行):三轴机械臂的牛顿-欧拉动力学递推,编程实现并跟工具箱的 rne 对照(动力学);六轴解析逆解的完整推导(运动学)。
有条件摸到硬件的(实验室、公司):「控制」一节说的单轴伺服平台,加上「标定与辨识」一节的复现实验,是最能快速掌握知识的练习。
动手¶
此时,你的基础理论已经不错了。但是,你缺乏实际动手经验,不清楚如何将书上的东西应用到实际机器人上。机器人毕竟是一个实践性的学科,一直停留在理论,不仅无用、而且无趣。
Get your hands dirty!
如果是本科生的话,非常建议参加一些比赛,如 RoboMaster、恩智浦杯智能车竞赛(原飞思卡尔智能车大赛)、电子设计大赛等;也可以加入学校的一些科技组织,例如清华的天空工厂。主要是熟悉各种电子电路,培养动手能力,感受通过代码让机器人动起来的快感。
但是,以我的观察,很多科技比赛大牛,在理论学习上往往比较弱。这主要是因为科技比赛强调的是系统能力,决定比赛结果的往往是一些小 tricks,而非理论知识;而且,比赛容易让人产生一种虚假的充实感,每天都很忙碌,但是可能只是在重复低级工作。这两个原因很容易让人陷入 local minima,无法在理论方面更进一步。
所以,我有个不成熟的小建议:参加比赛和学生科技活动的话,有过两次完整的经历就够了。之后应该迅速将重点转向理论学习。
如果身边有可以玩的机器人硬件,也可以尝试玩一玩;有机会摸到真机的话,拿示教器走几个点、跑一遍「示教再现」,体验一下绝大多数工业机器人应用工程师的日常——体会它有多难用。如果没有真机,也可以下载 ABB 的 RobotStudio,在里面给仿真工业机器人用示教器编写一段固定搬运轨迹。(PS:ABB 的这个软件做得相当不错,在仿真里最大程度地实现了真机的操作体验和动作响应)。
ROS¶
到现在为止,你对机器人的基础知识有了一个比较完整的脉络,而且,也用 Matlab/Python 实现了一些有趣的算法。但是,你发现,机器人是一个非常大的系统,作为初学者,不太可能从头开始一步步搭建机器人所需的各个算法模块。这时候,你就应该开始拥抱伟大的开源世界了。
很多人可能知道,有一个叫做机器人操作系统的开源项目 (Robot Operating System, ROS)。ROS 有 ROS 1 和 ROS 2 两代,ROS 1 的最后一个版本 Noetic 已经在 2025 年停止维护,社区的开发重心早已转向 ROS 2,所以直接学 ROS 2 就行。
对于学习 ROS,网上可能有不少教程了。但是,我感觉,很多机电、自动化方向的学生并不适合直接开始看 ROS。因为他们缺乏基本的 Linux、C++ 知识。所以,我推荐按照如下步骤进行学习:
-
Linux:如果完全没有 Linux 开发经验,我建议可以先安装 Ubuntu 系统,然后看 UNIX Tutorial for Beginners ,熟悉基本的 Linux 使用方法。
-
Github:ROS 的大多数项目都是托管在 Github 上的。所以,非常有必要学会使用 Github,学会用 git 管理自己的代码。而且也可以为开源项目做些修改。例如可以像我一样只是删除多余的分号。
-
C++ 基础:如果你没有系统学习过 C++,建议先把这部分补齐,因为 ROS 的主要代码都是 C++ 实现的。这里,我推荐学堂在线上清华大学郑莉老师的课程《C++语言程序设计基础》和《C++语言程序设计进阶》。当然,学习 C++ 的时候就可以在 Ubuntu 下进行,安装一个 VSCode 是个不错的选择。
-
数据结构:其实,上面的基础已经足够你学习 ROS 了,但是,为了未来的学习,可以在适当时候学习一些数据结构的知识。数据结构的话,我推荐学堂在线上清华邓俊辉老师 《数据结构(上)》与《数据结构(下)》。
现在,你就可以大胆地去看 ROS 2 了。作为开源项目,我认为最好的教程就是官网的教程 ROS 2 Tutorials。
首先,跟着官方的入门教程了解 ROS 2 基本的通讯机制、学会使用 colcon、ros2 launch、Rviz 等基本工具。
之后,就可以根据各自的研究兴趣去看不同模块了。
如果有条件,能够配合一些 ROS 支持比较好的平台进行研究的话,可以大大提高学习速度。例如 TurtleBot、Franka Panda、Universal Robot 之类的。(这就看每个人条件了。)
理论上,在 ROS 2 环境下,绝大多数跟硬实时无关的研究你都可以直接做,比如 SLAM、Navigation、Motion Planning 等。至于更底层的实时控制,ROS 2 和 ROS 1 已经不是一回事了:ROS 1 有中心化的 Master、自定义传输、又没法控制内存分配,架构上就跟实时无缘;ROS 2 改用了 DDS 的 QoS、去中心化的节点发现、还能自定义 allocator,也可以跑在 PREEMPT_RT 或 RTOS 上,实时控制这才变得可行——但不是开箱即用,默认的 rclcpp executor 既不实时也不确定,你得自己把实时内核、实时安全的 executor、静态内存分配、实时中间件都配齐。一个更实用的判断是:最底层的电流环、力矩环(几 kHz 以上),不管哪一代 ROS 都是跑在驱动器、EtherCAT 从站或单片机上的;而 100 Hz–1 kHz 的阻抗控制、WBC、MPC,用 ros2_control 或 micro-ROS 是可以胜任的。(如果不清楚这里为什么,回顾一下实时操作系统、机器人控制方面的知识。)