近日,HuggingFace开源了低成本AI机器人LeRobot,并指导大家从头开始构建AI控制的机器人,包括组装、配置到训练控制机器人的神经网络。
当前的AI机器人,已经可以上蹿下跳后空翻、再接闪电五连鞭,代替人类承担各种工作。
哪怕是当大号手办,咱也想整一个玩玩。
但无奈目前大多公司还在研发阶段,少数能量产的又有亿点小贵。
当然了,小编相信AI和机器人最终会走进千家万户。
而现在,我们可以玩到一个低成本的解决方案——LeRobot:
——不知诸位可还记得「炒菜大师」ALOHA?
而这个LeRobot,就是我们自己可以拥有的ALOHA,能够模仿人类完成一些简单的任务。
单个机械臂的成本在200美元左右,而后端的模型训练在自己的笔记本上就可以搞定。
官方开源了全部的硬件和软件,包括训练和控制程序、AI模型、SolidWorks文件等。
我们可以从零组装出机械臂,并发挥想象教会它一些事情。
LeRobot项目由前特斯拉工程师Remi Cadene(现在是HuggingFace的principal research scientist)所领导,并给出了一份详细的指南,
包括如何从头开始构建AI控制的机器人,——组装、配置,以及训练控制机器人的神经网络。
项目基于开源的Koch v1.1机器人套件(也可以是别的硬件或者虚拟平台),包含两个六电机的机械臂,可使用一个或多个摄像头作为视觉传感器。
项目地址:https://github.com/huggingface/lerobot
LeRobot还计划在未来开发更具性价比的Moss v1版本,定价仅为150美元。
连𝐌𝐨𝐛𝐢𝐥𝐞 𝐀𝐋𝐎𝐇𝐀的作者也表示“Amazing”:
对于AI机器人,专业人士认为它将成为这个时代的PC:
我一直在等待两个平台的转变:
-相当于早期PC的AR/VR
-相当于早期个人电脑的机器人
而大多数网友则更加直接:这是我过去十年来一直想要的机械手,必须得到它!
说到开源的力量,项目刚刚发布就有网友玩了起来:
因为他表示自己的视频没有加速,所以小编也没给他加速。
目前的HuggingFace上给出了四种模型,以及98个数据集,开发者还可以选择在训练过程中上传自己的数据集。
制作自己的AI Robot
LeRobot目前使用的机械臂来源于Alexander Koch在几个月前开源的项目:
下图是前辈的样子,总体的硬件差别不大,但为了方便大家复刻和使用,LeRobot做了一些改进。
Koch v1.1拿掉了之前硬件模型中一些干扰材料,让尺寸标准化,并为引导臂添加了一个平台,允许从动臂从地面拾取物体。
通过更换直流转换器,Koch v1.1无需使用烙铁进行组装,也无需手动调节电压转换器。
项目还添加了机械臂的SolidWorks模型、接线图以及装配视频。
材料清单
以引导臂(Leader Arm)为例,
下表是需要购买的部件,主要的开销在6个舵机上面,剩下的包括电机驱动板、固定装置、电源、杜邦线之类的。
而手臂结构的塑料片,则需要根据给出的文件通过3D打印获得。
实际上对于相关爱好者来说,这些零件基本都能凑出来,而且咱们国内买这些东西也要便宜得多。
另外,如果需要平替或者升级伺服电机的话,记得修改控制程序。
他这里给出的两种电机扭矩都不大,但精度和转速倒是都挺高,不知道替换后会有多大影响,感兴趣的小伙伴不妨一试。
配置和校准
首先安装Koch v1.1所需的依赖:
pip install -e “.[koch]”
然后按照接线图给驱动板和电机供电,USB连接到电脑:
注意从动臂这边有俩大一点的电机需要12V供电,以及USB不能作为电源。
通过以下命令进行电机的配置和校准:
python lerobot/scripts/control_robot.py teleoperate \
–robot-path lerobot/configs/robot/koch.yaml \
–robot-overrides ‘~cameras’ # do not instantiate the cameras
程序实例化一个类来调用SDK操作电机(port改为自己设备上检测到的端口):
DynamixelMotorsBus(port=“/dev/tty.usbmodem575E0031751”)
接下来配置每个电机的索引(相当于在总线上控制时的地址):
follower_arm = DynamixelMotorsBus(
port=follower_port,
motors={
# name: (index, model)“shoulder_pan”: (1, “xl430-w250”),
“shoulder_lift”: (2, “xl430-w250”),
“elbow_flex”: (3, “xl330-m288”),
“wrist_flex”: (4, “xl330-m288”),
“wrist_roll”: (5, “xl330-m288”),
“gripper”: (6, “xl330-m288”),
},
)
DynamixelMotorsBus会自动检测当前电机索引,如果电机中保存的索引与配置文件中不匹配,会触发一个配置过程,需要拔掉电机的电源,按顺序重新连接电机。
读写测试
运行以下代码:
leader_pos = leader_arm.read(“Present_Position”)
follower_pos = follower_arm.read(“Present_Position”)
print(leader_pos)
print(follower_pos)
配置成功后可以得到所有12个电机的当前位置:
array([2054, 523, 3071, 1831, 3049, 2441], dtype=int32)
array([2003, 1601, 56, 2152, 3101, 2283], dtype=int32)
校准
手动调节机械臂到几个固定的位置,相当于给电机一个相对的归零位置,同时也保证引导臂和从动臂的静止位置大致对齐。
通过校准程序之后,这几个位置会被写入配置文件,作为之后运行的基准。
——温馨提示:记得不要在Torque_Enable的情况下硬掰。
开玩!
准备就绪,下面可以开始控制机械臂了,比如让从动臂模仿引导臂,设置采样频率200Hz,操作30秒:
import tqdm
seconds = 30
frequency = 200
for _ in tqdm.tqdm(range(seconds*frequency)):
leader_pos = robot.leader_arms[“main”].read(“Present_Position”)
robot.follower_arms[“main”].write(“Goal_Position”, leader_pos)
——是不是很简单?
那么由此可知,训练机械臂模仿人类的原理就是,在从动臂模仿引导臂的同时,加上一个摄像头的实时画面,
在模仿(训练)的过程中,模型收集了手臂位置和对应的图像数据,之后(推理)就可以根据当前摄像头看到的画面来预测各个电机需要到达的角度。
小编翻了一下项目的代码,发现这个「模仿游戏」所用的AI模型居然就是ALOHA用的Action Chunking with Transformers (ACT)。
论文地址:https://arxiv.org/pdf/2304.13705
除了ACT,你也可以使用或者训练自己的模型,可以改成ALOHA那样的双臂模式,或者在虚拟环境中进行训练和验证。
加入摄像头
项目使用opencv2库来操作camera,以下代码同时配置了机械臂和摄像头:
robot = KochRobot(
leader_arms={“main”: leader_arm},
follower_arms={“main”: follower_arm},
calibration_path=“.cache/calibration/koch.pkl”,
cameras={
“laptop”: OpenCVCamera(0, fps=30, width=640, height=480),
“phone”: OpenCVCamera(1, fps=30, width=640, height=480),
},
)
robot.connect()
使用下面的代码尝试以60 fps录制视频30秒(busy_wait负责控制帧率):
import time
from lerobot.scripts.control_robot import busy_wait
record_time_s = 30
fps = 60
states = []
actions = []
for _ in range(record_time_s * fps):
start_time = time.perf_counter()
observation, action = robot.teleop_step(record_data=True)
states.append(observation[“observation.state”])
actions.append(action[“action”])
dt_s = time.perf_counter() - start_time
busy_wait(1 / fps - dt_s)
摄像头拍摄的图像帧会以线程的形式保存在磁盘上,并在录制结束时编码为视频。
也可以将视频流显示在窗口中,以方便验证。
还可以使用命令行参数设置数据记录流程,包括录制开始前、录制过程和录制结束后停留的时间。
可视化
python lerobot/scripts/visualize_dataset_html.py \
–root data \
–repo-id ${HF_USER}/koch_test
以上命令将启动一个本地Web服务器,如下所示:
建议
一旦您熟悉了数据记录,就可以创建更大的数据集进行训练。一个好的开始任务是在不同位置抓取一个物体并将其放入箱子中。
建议至少录制50集,每个地点10集。在整个录制过程中保持摄像机固定并保持一致的抓取行为。
实现可靠的抓取性能后,您可以开始在数据收集过程中引入更多变化,例如额外的抓取位置、不同的抓取技术以及改变相机位置。
避免过快地添加太多变化,因为这可能会影响您的结果。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。