LeRobot.js

社区文章 发布于2025年7月14日

我一直认为机器人非常昂贵且极其难以使用。直到我开箱了我的第一台机器人SO-100,这种看法才彻底改变。结合Hugging Face的LeRobot Python库,我能够在几分钟内让我的机器人动起来,因为入门过程非常简单:

  1. 找到机器人连接到计算机的USB端口
  2. 校准每个关节,让机械臂学习其完整的运动范围
  3. 通过键盘或主机械臂遥控机械臂

一切正常,但有一件事一直困扰着我:我生活在JavaScript的世界里。为什么Web开发者仅仅因为原始工具是Python的就不能享受这种乐趣呢?所以我问自己:有什么能阻止我构建LeRobot.js,让任何人都能在JS中与机器人交互呢?而学习新事物(至少对我而言)最好的方法就是从头开始构建它。

LeRobot.js就是这样诞生的。

Watch the video
LeRobot.js在YouTube上的完整演示

为什么要把LeRobot引入JS?

在我看来,机器人技术弥合了人工智能和现实世界之间的鸿沟,使人工智能能够超越屏幕。为了确保尽可能多的人能够真正表达他们对未来机器人的看法,我们需要跳出Python生态系统,提供让庞大的JS社区感到原生的工具。

因此,LeRobot.js的使命是直接的:同样的简洁性,同样的心智模型,只是用JavaScript实现。

如果你已经熟悉Python API,LeRobot.js应该会让你立刻感到熟悉。如果你先从JS开始,你也能无缝切换到Python,无需重新学习一切。

从Python到JavaScript

我首先重新实现了每个人第一天都会用到的必备功能:

行动 Python JavaScript
连接 find_port() findPort()
释放电机
(禁用扭矩)
(校准时自动) releaseMotors()
校准 calibrate(robot) calibrate({ robot })
遥控 teleoperate(robot, calib) teleoperate({ robot, calibrationData })

为什么是releaseMotors()

在Python LeRobot中,当你进入校准时,电机扭矩会自动关闭。在浏览器中,我们将这一步骤作为显式辅助函数公开,以便你可以随时自由移动机械臂。

快速入门

LeRobot.js 目前以 `@lerobot/web`(Node/CLI 支持即将发布)的形式发布,并支持基于 Chromium 的浏览器中的 SO-100(因为我们需要 Web Serial 与电机交互,以及 Web USB 获取每个连接设备的序列号)。

但让我们看看这是如何工作的

import { findPort, releaseMotors, calibrate, teleoperate } from "@lerobot/web";

// 1. Find and connect to the hardware
const findProcess = await findPort();
const [robot] = await findProcess.result;

// 2. Disable torque so you can move joints by hand
await releaseMotors(robot);

// 3. Guide the arm through its full range to record min/max positions
const calibrationProcess = await calibrate({
  robot,
  onProgress: (msg) => console.log(msg),
  onLiveUpdate: (data) => console.log("Live positions:", data),
});
calibrationProcess.stop();
const calibrationData = await calibrationProcess.result;

// 4. Control the arm with your keyboard
const teleop = await teleoperate({
  robot,
  calibrationData,
  teleop: { type: "keyboard" },
});
teleop.start();

// 5. later → teleop.stop();

浏览器支持

  • 基于Chromium的浏览器(如Chrome或Edge)版本89或更高(因为需要Web Serial)。

在线演示

立即在您的浏览器中尝试完整流程:https://huggingface.co/spaces/NERDDISCO/LeRobot.js

它允许您添加 SO-100(更多硬件将很快添加),校准它,然后使用键盘或 UI 控制它(更多遥控方式也将很快添加)。该空间还包含完整的文档和即将推出的路线图。

Watch the video
LeRobot.js 在 Hugging Face Spaces 上的实时演示

幕后

LeRobot.js 使用 TypeScript 构建,通过 Vite 打包,并在 GitHub 和 npm 上以 Apache 2.0 许可证发布。

演示 UI 是在 v0.dev 中使用 React、shadcn/ui 和 Tailwind 进行原型设计的。

路线图

我的目标是在 JS 中实现 LeRobot 的所有功能,但目前我专注于以下关键里程碑:

特性 描述 状态
Node/CLI 发布 @lerobot/node 进行中
SO‑100 主机械臂 将主机械臂添加为从机械臂的遥控器 进行中
record() 捕获轨迹和传感器数据 计划中
replay() 回放录制片段 计划中
train() 在录制数据上训练策略 计划中
eval() 运行自主推理 计划中

如何提供帮助

目前,LeRobot.js 正式支持 SO-100。为了拓宽硬件覆盖范围,我需要:

  1. 拉取请求,添加新设备
  2. 获得额外机器人的访问权限,以便我能够测试并添加对新设备的支持

如果您有希望在这里看到的硬件,请开一个 issue 或在 LeRobot Discord 上私信我(我是 NERDDISCO)。

任何关于通过 ONNX 使训练/推理工作起来的帮助,都将不胜感激。

致谢

这一切都离不开这些人的支持和启发:

  • Partabot - 感谢您提供 SO‑100 主从机械臂。
  • Xenova - 感谢您创建 Transformers.js 并向世界展示机器学习可以在 JS 中和谐共存。
  • BamBot - 感谢您证明浏览器优先的机器人控制是真实可行的。

社区

这太酷了 @NERDDISCO !!

·
文章作者

谢谢你 @julien-c ,能听到你这么说对我意义重大!我会尽力改进,使其像 Python 中的 LeRobot 一样出色 o7

注册登录 评论