近日,HuggingFace 開源了低成本 AI 機器人 LeRobot,并指導(dǎo)大家從頭開始構(gòu)建 AI 控制的機器人,包括組裝、配置到訓(xùn)練控制機器人的神經(jīng)網(wǎng)絡(luò)。
當(dāng)前的 AI 機器人,已經(jīng)可以上躥下跳后空翻、再接閃電五連鞭,代替人類承擔(dān)各種工作。哪怕是當(dāng)大號手辦,咱也想整一個玩玩。
但無奈目前大多公司還在研發(fā)階段,少數(shù)能量產(chǎn)的又有億點小貴。當(dāng)然了,小編相信 AI 和機器人最終會走進(jìn)千家萬戶。
而現(xiàn)在,我們可以玩到一個低成本的解決方案 ——LeRobot:
—— 不知諸位可還記得「炒菜大師」ALOHA?
而這個 LeRobot,就是我們自己可以擁有的 ALOHA,能夠模仿人類完成一些簡單的任務(wù)。
單個機械臂的成本在 200 美元左右,而后端的模型訓(xùn)練在自己的筆記本上就可以搞定。
官方開源了全部的硬件和軟件,包括訓(xùn)練和控制程序、AI 模型、SolidWorks 文件等。
我們可以從零組裝出機械臂,并發(fā)揮想象教會它一些事情。
LeRobot 項目由前特斯拉工程師 Remi Cadene(現(xiàn)在是 HuggingFace 的 principal research scientist)所領(lǐng)導(dǎo),并給出了一份詳細(xì)的指南,包括如何從頭開始構(gòu)建 AI 控制的機器人,—— 組裝、配置,以及訓(xùn)練控制機器人的神經(jīng)網(wǎng)絡(luò)。
項目基于開源的 Koch v1.1 機器人套件(也可以是別的硬件或者虛擬平臺),包含兩個六電機的機械臂,可使用一個或多個攝像頭作為視覺傳感器。
項目地址:https://github.com/huggingface/lerobot
LeRobot 還計劃在未來開發(fā)更具性價比的 Moss v1 版本,定價僅為 150 美元。
連 Mobile ALOHA 的作者也表示“Amazing”:
對于 AI 機器人,專業(yè)人士認(rèn)為它將成為這個時代的 PC:
我一直在等待兩個平臺的轉(zhuǎn)變:
-相當(dāng)于早期 PC 的 AR / VR
-相當(dāng)于早期個人電腦的機器人
而大多數(shù)網(wǎng)友則更加直接:這是我過去十年來一直想要的機械手,必須得到它!
說到開源的力量,項目剛剛發(fā)布就有網(wǎng)友玩了起來:
因為他表示自己的視頻沒有加速,所以小編也沒給他加速。
目前的 HuggingFace 上給出了四種模型,以及 98 個數(shù)據(jù)集,開發(fā)者還可以選擇在訓(xùn)練過程中上傳自己的數(shù)據(jù)集。
LeRobot 目前使用的機械臂來源于 Alexander Koch 在幾個月前開源的項目:
下圖是前輩的樣子,總體的硬件差別不大,但為了方便大家復(fù)刻和使用,LeRobot 做了一些改進(jìn)。
Koch v1.1 拿掉了之前硬件模型中一些干擾材料,讓尺寸標(biāo)準(zhǔn)化,并為引導(dǎo)臂添加了一個平臺,允許從動臂從地面拾取物體。
通過更換直流轉(zhuǎn)換器,Koch v1.1 無需使用烙鐵進(jìn)行組裝,也無需手動調(diào)節(jié)電壓轉(zhuǎn)換器。
項目還添加了機械臂的 SolidWorks 模型、接線圖以及裝配視頻。
以引導(dǎo)臂(LeaderArm)為例:
下表是需要購買的部件,主要的開銷在 6 個舵機上面,剩下的包括電機驅(qū)動板、固定裝置、電源、杜邦線之類的。
而手臂結(jié)構(gòu)的塑料片,則需要根據(jù)給出的文件通過 3D 打印獲得。
實際上對于相關(guān)愛好者來說,這些零件基本都能湊出來,而且咱們國內(nèi)買這些東西也要便宜得多。
另外,如果需要平替或者升級伺服電機的話,記得修改控制程序。
他這里給出的兩種電機扭矩都不大,但精度和轉(zhuǎn)速倒是都挺高,不知道替換后會有多大影響,感興趣的小伙伴不妨一試。
首先安裝 Koch v1.1 所需的依賴:
pip install -e ".[koch]"
然后按照接線圖給驅(qū)動板和電機供電,USB 連接到電腦:
注意從動臂這邊有倆大一點的電機需要 12V 供電,以及 USB 不能作為電源。
通過以下命令進(jìn)行電機的配置和校準(zhǔn):
python lerobot/scripts/control_robot.py teleoperate /
--robot-path lerobot/configs/robot/koch.yaml /
--robot-overrides '~cameras' # do not instantiate the cameras
程序?qū)嵗粋€類來調(diào)用 SDK 操作電機(port 改為自己設(shè)備上檢測到的端口):
DynamixelMotorsBus(port="/dev/tty.usbmodem575E0031751")
接下來配置每個電機的索引(相當(dāng)于在總線上控制時的地址):
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 會自動檢測當(dāng)前電機索引,如果電機中保存的索引與配置文件中不匹配,會觸發(fā)一個配置過程,需要拔掉電機的電源,按順序重新連接電機。
讀寫測試
運行以下代碼:
leader_pos = leader_arm.read("Present_Position")
follower_pos = follower_arm.read("Present_Position")
print(leader_pos)
print(follower_pos)
配置成功后可以得到所有 12 個電機的當(dāng)前位置:
array([2054, 523, 3071, 1831, 3049, 2441], dtype=int32)
array([2003, 1601, 56, 2152, 3101, 2283], dtype=int32)
校準(zhǔn)
手動調(diào)節(jié)機械臂到幾個固定的位置,相當(dāng)于給電機一個相對的歸零位置,同時也保證引導(dǎo)臂和從動臂的靜止位置大致對齊。
通過校準(zhǔn)程序之后,這幾個位置會被寫入配置文件,作為之后運行的基準(zhǔn)。
—— 溫馨提示:記得不要在 Torque_Enable 的情況下硬掰。
開玩!準(zhǔn)備就緒,下面可以開始控制機械臂了,比如讓從動臂模仿引導(dǎo)臂,設(shè)置采樣頻率 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)
—— 是不是很簡單?
那么由此可知,訓(xùn)練機械臂模仿人類的原理就是,在從動臂模仿引導(dǎo)臂的同時,加上一個攝像頭的實時畫面,
在模仿(訓(xùn)練)的過程中,模型收集了手臂位置和對應(yīng)的圖像數(shù)據(jù),之后(推理)就可以根據(jù)當(dāng)前攝像頭看到的畫面來預(yù)測各個電機需要到達(dá)的角度。
小編翻了一下項目的代碼,發(fā)現(xiàn)這個「模仿游戲」所用的 AI 模型居然就是 ALOHA 用的 Action Chunking with Transformers (ACT)。
論文地址:https://arxiv.org/pdf/2304.13705
除了 ACT,你也可以使用或者訓(xùn)練自己的模型,可以改成 ALOHA 那樣的雙臂模式,或者在虛擬環(huán)境中進(jìn)行訓(xùn)練和驗證。
加入攝像頭
項目使用 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 負(fù)責(zé)控制幀率):
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)
攝像頭拍攝的圖像幀會以線程的形式保存在磁盤上,并在錄制結(jié)束時編碼為視頻。
也可以將視頻流顯示在窗口中,以方便驗證。
還可以使用命令行參數(shù)設(shè)置數(shù)據(jù)記錄流程,包括錄制開始前、錄制過程和錄制結(jié)束后停留的時間。
可視化
python lerobot/scripts/visualize_dataset_html.py /
--root data /
--repo-id ${HF_USER}/koch_test
以上命令將啟動一個本地 Web 服務(wù)器,如下所示:
建議
一旦您熟悉了數(shù)據(jù)記錄,就可以創(chuàng)建更大的數(shù)據(jù)集進(jìn)行訓(xùn)練。一個好的開始任務(wù)是在不同位置抓取一個物體并將其放入箱子中。
建議至少錄制 50 集,每個地點 10 集。在整個錄制過程中保持?jǐn)z像機固定并保持一致的抓取行為。
實現(xiàn)可靠的抓取性能后,您可以開始在數(shù)據(jù)收集過程中引入更多變化,例如額外的抓取位置、不同的抓取技術(shù)以及改變相機位置。
避免過快地添加太多變化,因為這可能會影響您的結(jié)果。
本文來自微信公眾號:微信公眾號(ID:null),作者:alan,原標(biāo)題《人人都能玩得起 AI 機器人!HuggingFace 開源低成本解決方案》
本文鏈接:http://www.www897cc.com/showinfo-45-6540-0.html人人都能玩得起 AI 機器人,HuggingFace 開源低成本解決方案 LeRobot
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 書生?天際 3.0 實景三維大模型開源發(fā)布:城市級 100 平方公里全范圍實時渲染,VR 設(shè)備可用