机械臂:从第一次遥操到情绪表达
接线、校准、用户示教、Lilyput Demo,以及从八种动作表达发展而来的 Bipu 机械小宠物。
根据 Murphy 与 ChatGPT 的项目讨论、实机操作记录、拍摄过程及留存文件整理。
这组记录把机械臂作为一条连续的学习路径来看:先让它安全地动起来,再让它进入桌面机器人的 Demo,最后尝试用动作本身传递注意、意图与情绪。
收到 SO-ARM101 以后
接线和固定
7 月 26 日收到的是已经装好主体的 SO-ARM101 主从臂。电源、控制板、数据线、固定夹和腕部摄像头仍然散在箱子里。白色机械臂带夹爪,是执行动作的 Follower;黑色机械臂顶端是手柄,用来遥操,是 Leader。开始接线时,先按颜色和外形区分两条机械臂。
两个电源分别标着 5V 3A 15W 和 12V 2A 24W。确认对应关系后,5V 电源贴上黑色 Leader 的标签,12V 电源贴上白色 Follower 的标签。圆形电源接口先接入箱子里的控制板,再由控制板连接机械臂和电脑。控制板带绿色接线端子、圆形电源口和 USB-C,使用时放在桌面上。
箱子里有几根长杆形夹具、白色 3D 打印件、螺丝和小螺丝刀。AI 给出的文字说明没有解决夹具的安装问题,最后去网上找木工夹安装视频,照着视频把两条机械臂分别固定到桌面上。
桌子是二手桌,桌面上同时放着其他设备和线材。Murphy 当时说:“我就担心什么时候不小心把机械臂带下来。人穷真是没办法,好崩溃啊。” 后续停放时,夹爪和前臂下方都留出承托位置。
通电、校准和第一次遥操
数据线先接到电脑,电源再接入插板。控制板指示灯亮起后,后续用插板开关控制通断。安装期间需要断电调整机械结构,校准时又需要通电,查到视频教程后重新确认了两种操作的顺序。
校准时,两条机械臂先摆到对应的中间位置,再依次转动关节,由软件记录活动范围。操作过程中需要用手托住机械臂上半部分。转动底座时,上方关节也会改变位置。完成第一轮校准并启动联动后,白色 Follower 可以跟随黑色 Leader,但底座向左偏。保留其他关节的校准结果,只重新处理底座,调整两次后完成对齐。
Murphy 当时说:“确实可以动,没什么问题,但是它们有一个大关节稍微有点错位。我觉得不过看到这样操控还是挺有成就感的。” 后来再次检查底座时,她说“底座还是严重偏左”;第二次调整后,记录为“基本正常”。校准目录里保存了底座重对齐前的备份和最终配置,后续沿用同一组机械臂身份和关节映射。
Murphy 买机械臂,是想让它成为 Lilyput 的手。她把这个目标称为像《钢铁侠》里的“笨笨”。第一次遥操后,又继续确认舵机持续保持姿态时的温度、卸力后的下落方式和停放位置。开始时在夹爪下垫软物,后来设定低位停放姿态,并在操作脚本中加入“先回到垫子上,再卸力”的顺序。
安装腕部摄像头
完成遥操后开始安装腕部摄像头。箱子里的白色 3D 打印件是相机支架。安装位置无法只根据零件确定,最后在 B 站找到教程,把支架装到白色 Follower 上。
Mac mini 没有可直接使用的 USB-A 接口。转接坞上的两个接口已经连接两条机械臂,另一个苹果转接器连接着雷蛇鼠标接收器。鼠标改用蓝牙连接后,空出的接口用于腕部摄像头。电脑第一次搜索鼠标时没有完成配对;长按鼠标按键进入配对状态后连接成功。
相机接通后,画面先拍到了 Murphy 的侧脸。她当时说,意外发现减肥有点成效。随后把一个蓝色物体放到桌面上,作为夹爪视角的检查对象。
机械臂移动到目标物旁边时,画面里仍然看不到夹爪实际接触的位置。对照实物照片后,确认相机支架方向装反。拆卸时,3D 打印件滑丝,螺丝在孔内转动但无法取出。处理螺丝并重新安装后,画面下方可以同时看到两个夹爪尖端。
两次掉落和卸力口令
摄像头安装完成后继续遥操。最初三次操作用于熟悉 Leader 和 Follower 的对应关系,没有保留为训练数据。从遥操切换到录制时,AI 停止了程序,白色 Follower 随即卸力,腕部摄像头落到桌面上。重新启动录制后,停止程序时又发生了一次。
两次掉落后增加了一条操作规则:结束程序不等于允许机械臂卸力。需要卸力时,先把机械臂移到有软垫承托的固定低位,再等 Murphy 明确说出“我已托住白色臂,可以泄力”。没有这句确认,不停止 Follower 的力矩。
最初三段操作没有保留。Murphy 当时说:“这三个数据其实不太能用,因为我还不太熟练,所以让它用这个做机器学习的话会特别糟糕,你不用存这个视频。”
继续操作时,舵机出现咯吱声。Murphy 问:“这个咯吱响的声音让我压力好大,总觉得它经不住磨损,会很容易坏。它能经得住多少小时的训练啊?” 停止遥操并卸力后,机械臂放到桌面的承托物上休息。
当天没有继续录制正式训练数据。Murphy 问:“目前的机器学习学习的到底是什么?如果说只是这种固定位置的抓取的话,感觉有点太简单了吧。有没有办法就是使用模型,然后让机器去抓取呢?”
后来接入 G0.5
9 月,为了测试公开模型能否直接控制 SO-ARM101 抓取,先在 Hugging Face 完成 OpenGalaxea G0.5 的受限模型访问和下载授权,再在 Runpod 配置 NVIDIA GPU。Mac 连接腕部相机、外部相机和白色 Follower,云端负责模型推理。
第一次 GPU 会话下载并校验了 SO-101 权重、动作 tokenizer、processor 和配套文件。合成输入推理运行完成,预热后的完整观测请求约为两秒。该会话在六小时期限到达后结束。
第二次 GPU 会话连接实机。机械臂接收了模型输出并发生运动,移动幅度较小,速度较慢,没有完成对红色方块的抓取。Murphy 当时说:“它根本就没有在抓取红色呀。” 运行期间还出现多次网络 keepalive 失败,随后停止会话,没有再启动第三次付费运行。
这次使用的是 OpenGalaxea 发布的 G0.5 checkpoint,没有用 Murphy 的数据重新训练模型。代码、运行环境和部署说明保留;失败录制和运行日志按当时的要求删除。
Lilyput Demo 里的机械臂
8 月开始拍 Lilyput Demo 时,机械臂不再是单独展示的设备。它要成为 Lilyput 的手,在固定机位里递药,递镊子,招手和伸懒腰,还要配合机器人头和其他设备。每组动作都要录制和裁切,再和现场设备同步,最后重复拍摄。
第一次长录制没有留下动作帧
最早的计划是一镜到底。Murphy 站在 Lilyput 旁边介绍项目,机械臂听到几句固定台词时给出反应。它先抬起来朝向 Murphy,点一下头,再转向镜头。
第一次长时间录制没有正常保存动作帧。进程看上去一直在运行,结束后才发现轨迹不能回放。之后录制方式改成持续写入 JSONL,即使进程中断,已经收到的关节数据也留在磁盘里。新的原始文件有四百多秒,里面包含多次练习,长时间停顿和最后的放回桌面,不能直接整段使用。
AI 第一次截取手势时只取了最后十秒。那段数据实际上只有下降,没有包含机械臂抬起的部分。回放以后,机械臂朝桌面下落,随后停在低位继续施力。Murphy 手动断电,之后重新检查原始数据和裁切区间。
排查原始数据后才弄清楚坐标含义。肩部 lift 的负值代表抬高,正值反而是向桌面下落。完整动作跨过了 AI 先前划分的两个片段,中间还夹着约十八秒静止。第二版保留完整四十多秒,用来慢速检查。第三版删掉长停顿和落桌,只留下抬起,看向 Murphy,转向镜头和略微回落,最终长度约十秒。旧的错误文件没有覆盖,留在目录里作为不能使用的版本。
之后增加了固定的停放动作。机械臂完成表演后先回到垫子上的低位,再关闭力矩。后来这个动作单独写成 park.py。每次结束都需要 Murphy 托住机械臂并给出允许卸力的口令。拍摄位置发生变化时,停放位置也随之调整。
镊子和药片都来自遥操
8 月 13 日开始录制递镊子。拍摄前讨论了固定位置的遥操复现能不能拍成机器人听到要求后递来镊子,以及是否必须让模型自己识别桌上的工具。最后保留的边界是:动作来自 Murphy 亲自遥操留下的轨迹,Lilyput 可以在确定的工作台上重新执行,但不把它写成适应任意位置的自主抓取。
Murphy 还讨论过拍摄时是否保留腕部相机。安装相机需要同时保留支架和线材;固定摆位下的轨迹回放不需要实时读取腕部画面。正式拍摄时,部分动作没有使用实时视觉,视觉能力另行说明。
递镊子的原始录制里做了很多遍。Murphy 选择最后一次:机械臂夹起镊子,递到手边,松开以后又抬起夹爪点了两下头。第一次裁切只截到拿起后的部分,于是把起点再往前移。结尾几秒是 Murphy 手动把机械臂放回桌面,也被排除。裁切后的片段后来成为递镊子脚本。
取药留下两个版本。复杂版包含更多移动和递送过程,简单版缩短了路线。它们都不是模型现场规划出的动作,而是遥操后裁切出的轨迹。
有些场景最后没有使用机械臂
拍“催我工作”的场景时,最初设想是显示器和台灯打开,机器人头转向 Murphy,机械臂再朝她招手。实际试过以后,机械臂从休息位抬起却朝向墙壁,需要再转约九十度才能面对拍摄位置。回看试拍后,这个场景撤掉机械臂,只保留人头和屏幕,台灯继续参与。机械臂最后出现在递药和递镊子等几个场景里。
递维生素时,机械臂和人头第一次需要同步。机械臂开始递送,人头同时向右转。夹爪松手时,人头快速点一下。第一次拍完回看,画面里几乎没有点头;重新运行后动作出现,随后保留机械臂片段。
让机械臂看起来像身体,而不是外接设备
清晨苏醒包含机器人头和机械臂的同步动作。机器人头从低位开始,先轻微摇头,再抬到最高位置;机械臂同时从下往上伸展。Murphy 对这段动作的要求是:“从下往上机械臂伸一次懒腰,然后机械臂和它的头同时回来,时间线上一定要差不多。” 随后人头转向床的方向,镜头跟着移动。
第一次运行后,人头起点下调,机械臂结束位置也继续修改。随后从旧脚本里取回竖直停放姿态,重新设置回位。连续运行几遍后,这段被列为正式脚本。
点头动作也改了很多次。Murphy 说幅度太小,回位太快时会“很猥琐”。她要求点头不要只从中位往下再立刻弹回去,而是先到更低的位置,抬起时略高于原位,最后再回中。机械臂松开物体时配合了一次点头,她当时说:“这个点头萌翻。”
为了递镊子的镜头,机械臂连续跑了六遍。拍主动结束工作时,又把大幅点头改成单次动作。每组拍摄结束,机械臂都先回到垫子,再卸力。Murphy 同时检查舵机温度和持续保持时间。
机械臂把水放到扫地机器人上
送水同时使用机械臂和扫地机器人。先用 Leader 遥操 Follower,从箱子里拿出水瓶,再放到扫地机器人顶部。长录制完成后,取最后约一分钟。扫地机器人先从充电座走到机械臂旁边,等待水瓶放稳,再前往床边。Murphy 还要求机械臂完成后点一下头,扫地机器人紧接着出发。
设置床边位置时,扫地机器人一度无法保存目标点,重新唤醒后才成功。机械臂也已经从桌面移到地面,并用热熔胶临时固定,原来的停放坐标因此失效。那天结束时没有让它回旧位置,Murphy 托住以后直接卸力。
正式拍摄选在第二天晚上。低机位能看到扫地机器人出仓,机械臂放水和设备离开的全过程,但需要后期剪辑。为了获得足够素材,完整流程连续运行多次。水瓶由 Murphy 在扫地机器人返回途中顺手塞回箱子,不再每遍停下来重新确认。拍完以后先让扫地机器人回充,机械臂仍保持力矩,直到 Murphy 明确托住才卸力。
固定工位和用户示教
在确定取镊子和送水怎样拍摄以前,Murphy 一直在问:固定位置的遥操复现算不算实际能力。Demo 最终使用固定摆位和保存过的轨迹。机械臂在设定的工作区内取物,扫地机器人前往保存过的目标点;腕部相机没有在正式镜头中识别任意位置的物体。
Murphy 不满意把保存过的轨迹当作最终形态,但也不认为需要示教就等于没有价值。人使用洗碗机时也会先把碗摆进去。机械臂进入家庭的前期,同样可以由用户确定一小块工作区,摆好常用物品,再教它几条与自己有关的路线。这是过渡阶段,不是终点。
世界模型和更强的具身模型可以减少逐条遥操与固定摆位,但不会取消了解用户的过程。每个人在家里的动线不同,物品位置和互动习惯也不同。一个人即使具备完整的行动能力,也需要了解另一个人的习惯与边界,才能与对方共同生活。Murphy 想减少的是反复接线和坐标校准,不是人与系统互相了解的过程。
动作和内核
机械臂动作能被镜头直接拍到。Demo 里的语音和显示器由脚本控制。台灯与机器人头另有脚本,机械臂和扫地机器人也分别运行自己的程序。身体已经可以完成一些动作,但系统还不知道何时行动,以及为什么行动。
后来整理桌面机器人时,Murphy 说:“最困难的还是内核,烦啊。”
机械臂情绪表达
灵感来自 Apple ELEGNT 台灯机器人研究(2025),用 SO-101 机械臂呈现八种动作表达。官方研究页提供论文与台灯机器人演示视频。
动作视频
机械臂皮影戏收录困倦、失落、犹豫、开心、震惊、好奇、玩耍和生气八段动作。
轨迹与硬件
硬件使用 SO-101 Leader / Follower 机械臂。录制数据包含关节目标和实测位置,回放轨迹已移除动作结束后的归位段。
五个主体关节使用校准角度,夹爪使用开度百分比。
从动作库到 Bipu
这套动作库后来被用于 Bipu,一只基于 Jev 的机械小宠物。它接收 Telegram 或本地消息,结合近期互动和等待时间,由 Jev 在本地规则允许的范围内选择动作与电子短叫。八条录制轨迹继续作为可回放的动作素材。
Bipu 保留两种使用方式。宠物模式根据消息和当前状态选择回应,编排模式按预设时间线播放动作与声音,适合拍摄短片或制作装置。已有演示分别展示了小宠物与积木互动,以及机械臂和人头机器人一起观看章鱼画面的联动。
目前已验证真实 Telegram 私信经 Jev 选出动作与叫声,并在本地预览中运行,八种单独动作也已在 SO-101 上回放。宠物短片由已录制的动作和后期编排组成,章鱼场景使用固定时间线,自动宠物模式的实机动作衔接仍需检查。