はじめに
低コストで作れるロボットをHuggingface Lerobotで動かすために最低限必要なことを
Getting Started with Real-World Robotsから抜粋意訳しています
HuggingfaceではWindowsやMacでも動くそうですが、Ubuntu22.04環境だけを説明します。
目次
- PCの準備
- PCの基本Softwareの準備
- Install Lerobot
- ロボットに合わせたKoch.yamlの準備
- Huggingfaceのユーザー登録とトークンの準備
- テレオペレーション
- キャリブレーション
- 注意
- Recordings: 動作のレコーディング
- Visualize all episodes: 記録したエピソードの再生
参考
1.PCの準備
Ubuntu22.04をクリーンインストールするか新規ユーザーを作ってください
PCはAI用の性能が必要です。
2.PCの基本Softwareの準備
Install anaconda
"Anaconda3-2023.07-2-Linux-x86-64.sh" をanacondaのホームページ からダウンロードします。
事前に必要なライブラリーをインストールします
$ sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
以下を実行してください。
$ bash Anaconda3-2023.07-2-Linux-x86-64.sh -b
使用ライセンスにagreeしたらインストール先等はすべてデフォルト(/home/user/anaconda3)で良いでしょう
次に、以下を実行します
$ source /home/usr/anaconda3/bin/activate
$ conda init
3.Install Lerobot
準備ができたのでrepositoryをクローンします。
$ git clone https://github.com/huggingface/lerobot.git
$ cd lerobot
以下を実行してlerobot環境を準備します。
$ conda create -y -n lerobot python=3.10
$ conda activate lerobot
Lerobotをインストールします
$ pip install .
Koch dependencyをpipでインストールします
$ pip install -e ".[koch]"
これでエラーが出る場合はpoetryでインストールしてください。なお、poetry自体のインストールも必要になりますね。
$ poetry install --sync --extras "koch"
4. ロボットに合わせたkoch.yamlの準備
~/lerobot/lerobot/configs/robot/koch.yamlを準備したハードウェアに合わせて編集します。
本家ではスマホやノートパソコンのカメラを使っていますが、ここではロジクールのC920を2個使っています。
また、リーダー側のUSBインターフェイスはDyanamixelのUSBシリアル変換インターフェース U2D2をフォロワー側のUSBシリアル変換インターフェースには"Serial Bus Servo Driver Board"を使っているのでubuntuから見るディバイス名を確認してください。 各ポートのパーミションは面倒なのでplatformioのudev.rulesを参考にしています。
leader_arms:
main:
_target_: lerobot.common.robot_devices.motors.dynamixel.DynamixelMotorsBus
port: /dev/ttyUSB0
motors:
# name: (index, model)
shoulder_pan: [1, "xl330-m288"]
shoulder_lift: [2, "xl330-m077"]
elbow_flex: [3, "xl330-m077"]
wrist_flex: [4, "xl330-m077"]
wrist_roll: [5, "xl330-m077"]
gripper: [6, "xl330-m077"]
follower_arms:
main:
_target_: lerobot.common.robot_devices.motors.dynamixel.DynamixelMotorsBus
port: /dev/ttyACM0
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"]
cameras:
video0:
_target_: lerobot.common.robot_devices.cameras.opencv.OpenCVCamera
camera_index: 0
fps: 30
width: 640
height: 480
video2:
_target_: lerobot.common.robot_devices.cameras.opencv.OpenCVCamera
camera_index: 2
fps: 30
width: 640
height: 480
5. Huggingfaceのユーザー登録とトークンの準備
先ずはHuggingfaceに行ってユーザー登録してください。
それからAccess TokensでWRITEのアクセストークンをもらいます。トークンは一度しか表示されないのでコピペして保管とかスマホで撮影した方が良さそうですね。
なお、必要になるまでBilling登録は不要なようです。(今のところ大丈夫)
以下のコマンドで登録します。
$ huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
ターミナルを開いたら以下の呪文を入力してください
$ cd lerobot
$ conda activate lerobot
$ HF_USER=$(huggingface-cli whoami | head -n 1)
$ echo $HF_USER
-> show your HF user ID
6. テレオペレーション
リーダーの動きをフォロワーに伝えるテレオペレーションを使ってロボットが確実に動くことを確認します。
以下のコマンドを入力してください
python lerobot/scripts/control_robot.py teleoperate \
--robot-path lerobot/configs/robot/koch.yaml
ロボットは動きませんね。
キャリブレーションが必要なのです
7. キャリブレーション
キャリブレーションファイルが無い状態でテレオペレーションとかレコーディングを実行するとキャリブレーションモードに入ります。電源供給やUSB接続を忘れると同様に実行するとサーボモーターの設定モードに入るので注意してください。キャリブレーション時にはサーボはストール状態なので自由に動かせられます。
- Follower Arm Zero Position: 写真のようにアームを伸ばします。クランプの方向と位置に注意
- Follower Arm Rotated Position: 写真のようにアームをねじって止めます。クランプの方向と位置と回転方向に注意してください。
- Follower Arm Rest Position: アームの姿勢を写真のようにします。クランプは中間が良さそうです。
- Leader Arm Zero Position
- Leader Arm Rotated Position
- Leader Arm Rest Position
9. Recordings: 動作のレコーディング
テレオペレーションと同様にリーダーアームを動かしながらフォロワーアームに作業をさせて学習のためにレコーディングを行います。以下のコマンドで2件のエピソードがサーバーに記録されます。 HF_USERのログインが外れているとエラーになるので注意してください。
python lerobot/scripts/control_robot.py record \
--robot-path lerobot/configs/robot/koch.yaml \
--fps 30 \
--root data \
--repo-id ${HF_USER}/koch_test \
--tags tutorial \
--warmup-time-s 5 \
--episode-time-s 30 \
--reset-time-s 30 \
--num-episodes 2
レコーディングが始まると接続したUSBカメラの画像がOpenCVにより表示されて動画自体も記録されます。このステップで色々な問題が発生しますが、OpenCVのインストール由来によるものが多く、以下のコマンドで再インストールしてください。
$ pip uninstall opencv-python
$ conda install -c conda-forge opencv=4.10.0
さらにffmpegエンコード不具合は、以下のコマンドでffmpegをインストールしてください。
$ conda install -c conda-forge ffmpeg
10. Visualize all episode: 記録したエピソードの再生
Recordingsで記録されたデータセットの場所は、以下のコマンドで確認します。
$ echo https://huggingface.co/datasets/${HF_USER}/koch_test
以下のコマンドでデータセットの可視化を行います。
$ python lerobot/scripts/visualize_dataset_html.py \
--root data \
--repo-id ${HF_USER}/koch_test
実行したターミナルにアドレスが表示されるのでWebブラウザーで開くと以下が表示されます。
折れ線グラフは各サーボの角度ですね。
参考
詳細や分からないことは原典を確認してください。
https://github.com/huggingface/lerobot/blob/main/examples/7_get_started_with_real_robot.md