当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这个想法很简单:我自己操控机器人,记录示例,再训练一个策略来重现这种行为。乐高让移动底座的实验变得简单,而 Stack-chan 提供了摄像头——还有它的面孔!其核心S3模块配备了触摸屏、摄像头、麦克风、扬声器、运动传感器、Wi-Fi和蓝牙功能,能够看、听并做出表情。唯一缺少的是轮子。

Stack-chan 个性十足,但我希望它能学会移动。于是,我将 M5Stack Stack-chan 与乐高电机中心和轮子结合在一起,探索它是否能够通过演示学习驾驶。

这个想法很简单:我自己操控机器人,记录示例,再训练一个策略来重现这种行为。乐高让移动底座的实验变得简单,而 Stack-chan 提供了摄像头——还有它的面孔!其核心S3模块配备了触摸屏、摄像头、麦克风、扬声器、运动传感器、Wi-Fi和蓝牙功能,能够看、听并做出表情。唯一缺少的是轮子。

为了实现“lego-stackchan-drive”,我们将Stack Chan安装在一辆配备廉价电机和转轴的乐高Technic汽车上。我们收集了大约20次由人类操作的演示路线,并利用Robium的LeRobot和Hugging Face技能训练出一个动作分块Transformer(ACT)。经过训练后,Stack Chan已能沿着黑色线条行驶;在另一组独立的演示中,它还能在红白相间的护栏之间自由穿梭,而无需依赖任何标记线——这些都在我们的监督下赛道测试中得以验证。

我们把组装过程、数据采集、错误转弯以及驾驶试验都录成了一个有趣的短片。希望你喜欢这个作品,并探索你用Robium可以创造什么。如果你感兴趣,请给Robium仓库点赞,并立即开始使用参考应用。

家里没有乐高电机?想想你现有的车轮、电机或移动底座。Robium 可帮助你适配驱动硬件,并将其与 Stack Chan 集成,从而让你能进一步扩展这个小型机器人。

Inside lego-stackchan-drive

最终安装前的摄像头头、Pybricks 轴心、电机和乐高车轮底座。这是组装照片,而非实际驾驶效果。

M5Stack Stack Chan K151 通过 Wi-Fi 提供 320×240 分辨率的摄像头帧,同时包含其面部、头部运动和扬声器。一个运行 Pybricks 的乐高轴心通过 D 和 B 端口驱动两个电机。一台 Mac 接收摄像头流,读取游戏手柄输入,并通过蓝牙 LE 发送受约束的电机指令。Mac 还会保存每张图像时 joystick 所执行的当前动作。

学习控制器在 Mac 上运行,而不是在 Stack Chan 的微控制器上。它使用 LeRobot 的动作分块变换器(ACT)从每张摄像头图像中预测油门和转向。尽管 ACT 预测的是较短的动作片段,但驾驶员仅执行第一个动作,并观察一帧新画面后再重新请求。轴心中的 1 秒看门狗会在指令停止到达时自动刹车电机。

从演示到驾驶策略

构建并检查硬件。安装应用程序锁定的Python运行时环境,加载文档中指定的Pybricks中心程序,并配置Stack Chan摄像头固件和Wi-Fi。在开始驾驶会话前,使用./app probe命令检查摄像头和停止状态的中心程序,确保电机无电。

驾驶并录制。打开./app run,使用控制器或键盘操控车辆,在每次演示时按住录制触发键。系统将摄像头图像与油门和转向数据进行配对。我们剔除失败的片段,并在分割数据时保留完整的运行记录。

准备与训练。使用./app training prepare命令,将通过验证的运行导出为LeRobot数据集。我们利用了私有的Hugging Face数据集仓库以及L4 GPU任务:先进行200步的烟雾测试运行,然后进行完整ACT训练,每1000步进行一次验证。使用./app training fetch --stage train命令,将选定的权重带回Mac电脑,以便离线评估。

在赛道上试运行。./app run --policy 会加载本地检查点。按住 R1 或空格键可控制策略;松开或移动驾驶杆即可接管。每次按住时间限制为20秒。试验期间,操作员始终位于机器人旁边。

在黑胶带赛道上进行的人类演示。摄像头画面与操作员的油门和转向指令同步;仅使用视频并非训练数据集。

应用程序的 README 文件中包含固件、Wi-Fi、安全、捕获和训练命令。本次实验的数据集和检查点属于私有信息,因此若要重现训练过程,需自行收集演示数据,并使用个人的 Hugging Face 账户。

运行结果告诉我们什么

我们的第一个数据集包含了来自16个保存片段的4,079对图像/动作。其中13个片段用于训练策略,另有3个完整片段(共856帧)被保留。L4任务选择了其5,000步的检查点,并在验证性能不再提升时停止于10,000步。在这些保留的帧中,方向盘的平均绝对误差为归一化摇杆单位下的0.1519,而固定动作基线的误差为0.4893。打乱图像后,策略的转向误差上升至0.5410,表明其确实使用了视觉输入。

对三个预留片段中的第一个road-v1检查点进行离线评估。蓝色为人类操作,橙色为模型预测。此处的匹配度并不衡量车辆是否完成了一圈物理行驶。

关于摄像头和方向的教学

我们的首次摄像头取景角度偏斜,朝向地平线过远。这导致黑色线条在整个循环中无法被完整看到,因此策略有时无法找到可遵循的路径。我们将摄像头大致调整至向下约45°,朝向地面,并收集了线条更清晰可见的新演示数据。下方15秒的片段来自Stack Chan在操纵杆演示屏幕录制约一分钟后的视角,显示黑色线条在画面中移动;这并非由策略驱动的行驶过程。

方向也至关重要。初始仅顺时针运行的一组数据,在该方向上表现出更好的轨迹侧结果。当我们加入逆时针运行时,性能一度下降。双向更多演示提升了观察到的线路跟随能力。这些数据来自拍摄的开发过程,而非受控的成功率比较。

护栏路线

下一个挑战是用低矮的红白乐高护栏围成的路径取代了黑色线条。在首次演示收集后,Stack Chan 在我们的监督试训中沿此路线行驶,未出现明显问题。这令人鼓舞,但该结果仍仅适用于特定路线,无法推广至其他未知布局。

在红白护栏路线上进行的政策驾驶视频试训。图像显示的是运行中的某一瞬间,而非测量的圈数成功率。

独立的护栏ACT试训使用两个源片段共2,404帧进行训练。其中175帧的单个保留片段中,转向误差为0.1232(归一化操纵杆单位)。图示显示了其动作与记录演示者匹配和未匹配的位置。一个短的保留片段不足以量化物理可靠性,因此这些数据无法与黑胶带实验相比较。

对护栏模型在单一保留源片段上的离线评估。蓝色为人类操作;橙色为模型预测结果。

完整的训练记录包括数据集划分、模型检查、图表以及这些运行的限制信息。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭