人人都能玩得起AI機器人!HuggingFace開源低成本解決方案
當前的AI機器人,已經可以上躥下跳后空翻、再接閃電五連鞭,代替人類承擔各種工作。
哪怕是當大號手辦,咱也想整一個玩玩。
但無奈目前大多公司還在研發(fā)階段,少數(shù)能量產的又有億點小貴。
當然了,小編相信AI和機器人最終會走進千家萬戶。
而現(xiàn)在,我們可以玩到一個低成本的解決方案——LeRobot:

——不知諸位可還記得「炒菜大師」ALOHA?
而這個LeRobot,就是我們自己可以擁有的ALOHA,能夠模仿人類完成一些簡單的任務。
單個機械臂的成本在200美元左右,而后端的模型訓練在自己的筆記本上就可以搞定。
官方開源了全部的硬件和軟件,包括訓練和控制程序、AI模型、SolidWorks文件等。
我們可以從零組裝出機械臂,并發(fā)揮想象教會它一些事情。
圖片
LeRobot項目由前特斯拉工程師Remi Cadene(現(xiàn)在是HuggingFace的principal research scientist)所領導,并給出了一份詳細的指南,
包括如何從頭開始構建AI控制的機器人,——組裝、配置,以及訓練控制機器人的神經網絡。
項目基于開源的Koch v1.1機器人套件(也可以是別的硬件或者虛擬平臺),包含兩個六電機的機械臂,可使用一個或多個攝像頭作為視覺傳感器。
項目地址:https://github.com/huggingface/lerobot
LeRobot還計劃在未來開發(fā)更具性價比的Moss v1版本,定價僅為150美元。
連???????????? ??????????的作者也表示“Amazing”:
對于AI機器人,專業(yè)人士認為它將成為這個時代的PC:
我一直在等待兩個平臺的轉變:
-相當于早期PC的AR/VR
-相當于早期個人電腦的機器人
而大多數(shù)網友則更加直接:這是我過去十年來一直想要的機械手,必須得到它!
說到開源的力量,項目剛剛發(fā)布就有網友玩了起來:
因為他表示自己的視頻沒有加速,所以小編也沒給他加速。
圖片
目前的HuggingFace上給出了四種模型,以及98個數(shù)據(jù)集,開發(fā)者還可以選擇在訓練過程中上傳自己的數(shù)據(jù)集。
制作自己的AI Robot
LeRobot目前使用的機械臂來源于Alexander Koch在幾個月前開源的項目:
下圖是前輩的樣子,總體的硬件差別不大,但為了方便大家復刻和使用,LeRobot做了一些改進。
Koch v1.1拿掉了之前硬件模型中一些干擾材料,讓尺寸標準化,并為引導臂添加了一個平臺,允許從動臂從地面拾取物體。
通過更換直流轉換器,Koch v1.1無需使用烙鐵進行組裝,也無需手動調節(jié)電壓轉換器。
項目還添加了機械臂的SolidWorks模型、接線圖以及裝配視頻。
圖片
材料清單
以引導臂(Leader Arm)為例,
圖片
下表是需要購買的部件,主要的開銷在6個舵機上面,剩下的包括電機驅動板、固定裝置、電源、杜邦線之類的。
而手臂結構的塑料片,則需要根據(jù)給出的文件通過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會自動檢測當前電機索引,如果電機中保存的索引與配置文件中不匹配,會觸發(fā)一個配置過程,需要拔掉電機的電源,按順序重新連接電機。
讀寫測試
運行以下代碼:
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)校準
手動調節(jié)機械臂到幾個固定的位置,相當于給電機一個相對的歸零位置,同時也保證引導臂和從動臂的靜止位置大致對齊。
圖片
通過校準程序之后,這幾個位置會被寫入配置文件,作為之后運行的基準。
——溫馨提示:記得不要在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)——是不是很簡單?
那么由此可知,訓練機械臂模仿人類的原理就是,在從動臂模仿引導臂的同時,加上一個攝像頭的實時畫面,
在模仿(訓練)的過程中,模型收集了手臂位置和對應的圖像數(shù)據(jù),之后(推理)就可以根據(jù)當前攝像頭看到的畫面來預測各個電機需要到達的角度。
小編翻了一下項目的代碼,發(fā)現(xiàn)這個「模仿游戲」所用的AI模型居然就是ALOHA用的Action Chunking with Transformers (ACT)。
圖片
論文地址:https://arxiv.org/pdf/2304.13705
圖片
圖片
除了ACT,你也可以使用或者訓練自己的模型,可以改成ALOHA那樣的雙臂模式,或者在虛擬環(huá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負責控制幀率):
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)攝像頭拍攝的圖像幀會以線程的形式保存在磁盤上,并在錄制結束時編碼為視頻。
也可以將視頻流顯示在窗口中,以方便驗證。
還可以使用命令行參數(shù)設置數(shù)據(jù)記錄流程,包括錄制開始前、錄制過程和錄制結束后停留的時間。
可視化
python lerobot/scripts/visualize_dataset_html.py \
--root data \
--repo-id ${HF_USER}/koch_test以上命令將啟動一個本地Web服務器,如下所示:
圖片
建議
一旦您熟悉了數(shù)據(jù)記錄,就可以創(chuàng)建更大的數(shù)據(jù)集進行訓練。一個好的開始任務是在不同位置抓取一個物體并將其放入箱子中。
建議至少錄制50集,每個地點10集。在整個錄制過程中保持攝像機固定并保持一致的抓取行為。
實現(xiàn)可靠的抓取性能后,您可以開始在數(shù)據(jù)收集過程中引入更多變化,例如額外的抓取位置、不同的抓取技術以及改變相機位置。
避免過快地添加太多變化,因為這可能會影響您的結果。
參考資料:
























