Huggingface Lerobo  Real-World Robotsを始めよう

# はじめに
低コストで作れるロボットをHuggingface　Lerobotで動かすために最低限必要なことを
Getting Started with Real-World Robotsから抜粋意訳しています
HuggingfaceではWindowsやMacでも動くそうですが、Ubuntu22.04環境だけを説明します。
![](https://cdn-uploads.huggingface.co/production/uploads/631ce4b244503b72277fc89f/MNkMdnJqyPvOAEg20Mafg.png)

## 目次
  1. PCの準備
  1. PCの基本Softwareの準備
  1. Install Lerobot
  1. ロボットに合わせたKoch.yamlの準備
  1. Huggingfaceのユーザー登録とトークンの準備
  1. テレオペレーション
  1. キャリブレーション
  1. 注意
  1. Recordings:　動作のレコーディング
  1. Visualize all episodes: 記録したエピソードの再生
  参考
  
## 1.PCの準備
Ubuntu22.04をクリーンインストールするか新規ユーザーを作ってください
PCはAI用の性能が必要です。
## 2.PCの基本Softwareの準備
### Install anaconda
   "Anaconda3-2023.07-2-Linux-x86-64.sh" を[anacondaのホームページ](https://docs.anaconda.com/anaconda/install/linux/) からダウンロードします。
   事前に必要なライブラリーをインストールします
   ```
$ 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を２個使っています。
また、リーダー側のUSBインターフェイスはDyanamixelのUSBシリアル変換インターフェース U2D2をフォロワー側のUSBシリアル変換インターフェースには"Serial Bus Servo Driver Board"を使っているのでubuntuから見るディバイス名を確認してください。　各ポートのパーミションは面倒なのでplatformioの[udev.rules](https://docs.platformio.org/en/latest/core/installation/udev-rules.html)を参考にしています。

```
     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](https://huggingface.co/)に行ってユーザー登録してください。
それから[Access Tokens](https://huggingface.co/settings/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接続を忘れると同様に実行するとサーボモーターの設定モードに入るので注意してください。キャリブレーション時にはサーボはストール状態なので自由に動かせられます。
1) Follower Arm Zero Position: 写真のようにアームを伸ばします。クランプの方向と位置に注意
![](https://github.com/huggingface/lerobot/raw/main/media/koch/follower_zero.webp?raw=true)
2) Follower Arm Rotated Position: 写真のようにアームをねじって止めます。クランプの方向と位置と回転方向に注意してください。
![](https://github.com/huggingface/lerobot/raw/main/media/koch/follower_rotated.webp?raw=true)
3) Follower Arm Rest Position: アームの姿勢を写真のようにします。クランプは中間が良さそうです。
![](https://github.com/huggingface/lerobot/raw/main/media/koch/follower_rest.webp?raw=true)
4) Leader Arm Zero Position
![](https://github.com/huggingface/lerobot/raw/main/media/koch/leader_zero.webp?raw=true)
5) Leader Arm Rotated Position
![](https://github.com/huggingface/lerobot/raw/main/media/koch/leader_rotated.webp?raw=true)
6) Leader Arm Rest Position
![](https://github.com/huggingface/lerobot/raw/main/media/koch/leader_rest.webp?raw=true)

::: note worn
# 8. 注意
1) キャリブレーションが終わった途端にフォロワーアームがリーダーアームの姿勢に習います。必ずフォロワーアームは”Rest”ポジションにして待機してください。
2) サーボが反対方向に動いたり、くるくる回転することがあります。キャリブレーションの失敗です。再度キャリブレーションをし直してください。（".cache/calibration/koch.pkl"を削除します）
3) サーボを過負荷状態で放置するとサーボが壊れます。異常を感じたら速やかに電源プラグを抜いてください。
:::
## 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/raw/main/media/tutorial/visualize_dataset_html.webp?raw=true)

# 参考
詳細や分からないことは原典を確認してください。
https://github.com/huggingface/lerobot/blob/main/examples/7_get_started_with_real_robot.md