ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

机器人制造师(一):机器人学是从哪里来的

机器人制造师(一):机器人学是从哪里来的 机器人制造师一系列第一篇 · 机器人学是从哪里来的机械臂就是一个重量惊人的铁块要是突然失控甩过来把东西打飞 —— 这是真会出的事。作为一个在现实生活里面要工程化使用的机械臂不失控是要保证的事情。角度怎么取、速度快慢怎么调是它绕不开的问题。但这一篇不讲这些讲它怎么来的。一、这个词一开始是幻想机器人这个词刚出现的时候还不是一个能实现的东西和现在很多幻想作品里的设定一样是遥不可及的未来。我们来自工业时代技术发展得太快快得让人对机器的强大感到焦虑。所以机器人这个词从一开始就背着两层意思替你干活的和可能反过来的。二、恰佩克和那部戏从前就有一个作家在想人如果奴役机器机器会不会反抗这个家伙叫恰佩克来自捷克——一个现在几乎没人了解的国家。1920 年他写了一部戏叫《罗素姆万能机器人》戏里的机器人被批量造出来当奴隶干活最后反抗人类。robot来自捷克语 robota意思是苦役、劳役。这部戏后来演遍了欧洲robot这个词也跟着传开了。1927 年电影《大都会》里出现了一个机器人和人一模一样是电影史上第一个机器人角色。人们看它一半是惊叹一半是害怕。又是一个作家又一个词。1942 年阿西莫夫在科幻小说里第一次写下robotics——机器人学还给机器人定了三条守则第一条机器人不得伤害人。三、进车间第一台工业机器人人们想象的机器人都是人形造出来的第一台却只有一条手臂。直到工业要养活更多的人人们才有了机器人的想法。毕竟看见庞大的蒸汽机人会被吓到。故事就在一个车间里面通用汽车的生产要压铸烧红的金属工人们受不了。于是在 1954 年美国人乔治・德沃尔申请了专利名字叫程序化物品搬运。核心想法造一台机器像人的手臂一样把东西从一个地方拿到另一个地方。德沃尔不是科班出身是个自己折腾出来的发明家。1961 年这台机器装进通用汽车的新泽西工厂叫 Unimate。干的活把刚从压铸机出来的烧红金属件夹出来放进冷却液。从 1954 年的专利到 1961 年进厂隔了七年。想法到机器中间全是动手改。那七年里没人看好它。直到一个叫恩格尔伯格的年轻人找上来两人合伙才把机器卖进了通用汽车。用固定的运行动作完成任务这个道理从 Unimate 到现在都适用。今天的机械臂干活的本质还是这样。光靠重复不够。工厂的活越来越多机械臂得会算着动。同一时期机械臂的数学也在打地基。1955 年Denavit 和 Hartenberg 提出一套用矩阵描述机械臂运动的标准写法。DH 参数是一套统一的规定关节怎么摆大家都按它写结果才对得上。没有它各说各话。到今天教科书第一章还是它。从纸上的参数到会动的机器隔了十四年。1969 年斯坦福的 Scheinman 造出一台全电动、由计算机控制的六轴机械臂叫斯坦福臂。斯坦福臂之前的机械臂力气大但只会照做。斯坦福臂接上计算机——机械臂第一次听得懂指令而不只是有力气。1978 年基于斯坦福臂设计的 PUMA 上市。机械臂从实验室的稀罕物件变成了可以买、可以卖的商品。从 Unimate 到 PUMA二十年间机械臂学会的事只有一件重复。但机器人这个词从来不只是手臂。另一边有人开始让机器想。1966 年斯坦福研究院造出一个会想的机器人叫 Shakey。它会看路会自己计划怎么走。1980 年代机械臂怎么动、怎么算数学才真正成体系。今天机器人书里的矩阵和雅可比都是那时候定型的。2004 年美国办了一场无人车比赛横穿沙漠第一年全军覆没第二年斯坦福的车跑完了全程。机器第一次自己开车。这几年机器人真的接上了大模型你说一句话它听懂然后自己动手。第一批已经进工厂上班了。收尾重复就是最早的不失控它不会想只会照做教过的动作。动作是死的环境一变它就不知道怎么办了。重复就是最早的不失控。机器人不会思考它只是把你教过的一串动作一丝不差地重复几百万遍。像打铁匠力气大不知累但不会应变。回到开头那句话机械臂要不失控。早期工业机器人怎么做到答案是把自己锁死在重复里。固定的动作、固定的环境失控的风险被压到最小代价是环境稍微一变它就不会了。这百年机器人从不会想走到会想会重复会算会开车会听懂话。但不失控这句话没变——只会重复的机械臂不失控因为它是死的会想的机械臂得自己算着不失控。接下来就看这个算——一条真的在算的机械臂跑起来是什么样。四、一条真的在动的机械臂收尾里说接下来看这个算。不用等下一篇——这篇就有一条真的在算的机械臂。它跑在一个自己写的 32 位裸机内核上从 BIOS 加电到屏幕出现状态面板中间没有 Linux、没有 Windows、没有任何库全是自己的代码。一个进程算雅可比另一个进程把机械臂画到屏幕上。跑起来看到什么画面是 80×25 文本模式长这样画布上是三条连杆末端、O肘、*腕、o目标、.末端轨迹、#基座。目标点沿半径方向来回扫最外端 0.81 米刻意超出 0.80 米的可达半径。三个现象屏幕上都能看到1. 奇异手臂伸到极限关节速度需求爆炸看lap worst smin和lap peak no damp两行。目标扫到最外端时smin 从健康状态的 0.29 掉到 0.058低 5 倍不加阻尼的关节速度需求冲到 5.00 rad/s末端误差从 2 mm 涨到 12 mm。读法速度需求 目标速度 / smin。smin 掉 5 倍速度需求就涨 5 倍——这就是机械臂抽筋的全部算术来源。2. 阻尼在干什么把speed no damping和speed damped并排看健康姿势下两个数几乎一样阻尼不碰好走的方向越接近奇异差距越大5.00 对 2.07——阻尼专门压难走的方向代价是放弃约 12 mm 精度换关节速度不失控。3. 零空间多出来的那个自由度三自由度手臂、二维任务多一个自由度。nullsp share不为零时说明有部分关节动作花在摆姿势上而这不影响末端。按空格键切掉零空间姿势自己飘开着时看limit margin关节会主动退开限位。为什么故意让它够不到在可达范围之内最小范数解会自动避开奇异构型——手臂有多余自由度总能找到不那么直的姿势去够同一个点σmin 掉不下去实测走到 99% 伸展才掉到 0.081。只有把目标推出工作空间手臂被逼成几乎就是一根直杆的极限构型σmin 才真正塌下去。这正是工程上的真实教训轨迹规划不能贴着工作空间的边界走。留余量不是保守是边界附近的关节速度需求会失控。为什么用三角波不用圆周圆周运动在最远端是纯切向的而手臂接近全伸展时推不动的方向是径向——切向运动压不出奇异任务照样轻松完成。三角波在转向点速度方向突然反向最远端仍然是径向运动才暴露得出奇异。它是怎么转起来的BIOS 把 512 字节引导扇区加载到 0x7C00引导扇区把内核8KB读到 0x1000建 GDT、进保护模式、开分页跳进 C 代码。两个进程协作式切换proc1 控制器算一步正运动学 → 几何雅可比 → 阻尼最小二乘 → 零空间投影proc2 渲染器画一帧然后换人。切换就是保存/恢复 7 个寄存器和栈指针。全程不用 float用 Q16.16 定点数——内核没有中断表x87 一旦出异常就是三重故障屏幕直接黑而且进程切换不保存浮点寄存器。三角函数没有 libm用 91 项 sin 查表加线性插值。内核必须小于 8KB引导只读 16 个扇区-Os压到 7160 字节。这个演示跑在一个自己写的 32 位裸机内核上——从引导扇区到进程切换全是自己的代码。代码暂时不公开。
返回列表