11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ロボット初心者がLeRobot SO-101に挑戦(その1:設定・組立・遠隔操作)

11
Last updated at Posted at 2025-11-17

最近、フィジカルAIという言葉をよく聞くようになり、ロボットに詳しい人に、初心者は何から始めたらいいかと聞いたら、LeRobot SO-101がオススメといわれ、よく分からないけど、とりあえず買ってみた。

本記事では、基本的に公式記載のとおりのことを書いてるが、私が悩んだところはChatGPTに聞いたりして補記してる。

購入

ここで購入
https://akizukidenshi.com/catalog/g/g131169/

来た!

02.jpg

私の環境

  • MacBook Pro 2021 (M1 Pro)
  • macOS Sonoma

セッティング

このサイトを見ながらやってみた。

バージョン

  • Python 3.10 以上
  • PyTorch 2.2 以上

バージョンの確認方法

python3 -V
python3 -c "import torch; print(torch.__version__)"

環境セットアップ

conda を使って Python の仮想環境(virtual environment)をセットアップ

conda create -y -n lerobot python=3.10
conda activate lerobot

ffmpeg をインストール

conda install ffmpeg -c conda-forge

LeRobot をインストール

git clone https://github.com/huggingface/lerobot.git
cd lerobot

ライブラリを編集可能モードでインストール

pip install -e .

サーボモータFeetech 用の追加パッケージ(SDK)を入れる。

pip install -e ".[feetech]"

組み立て

リーダーアームとフォロワーアーム

リーダーアームとフォロワーアーム、2つのロボットアームを組み立てる。
リーダーアームで人間の操作を学習し、フォロワーアームで動きを模倣させることができる。

最初、そういうことも知らず、1つは予備なのかと思ってた。

リーダーアームとフォロワーアームは先端部分に相違があって、以下のような拳銃のグリップみたいなものがある方がリーダーアーム。

totte.jpg

組み立て開始

こちらのリンク先を見ながら組み立てた。
https://huggingface.co/docs/lerobot/so101

こちらの説明動画ではケーブルをつけずに組み立てしてるが、あとで大変なのでケーブルをつけて組み立てた方がいい。(私は大変だった)

フォロワーアームには、ギア比 1/345 の STS3215 モーターを 6個使用。
リーダーアームでは、自重を支えられ、かつ大きな力を必要とせずに手で動かせるように、3種類の異なるギア比のモーターを使用する。
どの関節にどのモーターを使うかは、下の表とおり。

Leader-Arm Axis Motor Gear Ratio
Base / Shoulder Pan 1 1 / 191
Shoulder Lift 2 1 / 345
Elbow Flex 3 1 / 191
Wrist Flex 4 1 / 147
Wrist Roll 5 1 / 147
Gripper 6 1 / 147



できた!

IMG_0630.jpg

最初、リーダーアームもフォロワーアームもまったく同じものかと思って、リーダーアームとフォロワーアームに使うモーターを逆にしてしまって、途中で気づき最初からやり直すのが面倒だったため、先端だけ色が違う乳牛みたいなロボットアームになったww

モーターの設定

1. 各アームに対応する USB ポートを特定する

付属のモーターバスを出す。
※モーターバスとは、PC(USB)とサーボ(TTL 3ピン)の橋渡しをする装置のこと

IMG_0608.jpg

モーターバスは2つある。両方同じもので、1つをリーダーアーム用、もう1つをフォロワーアーム用とする。

まずは、リーダーアーム用のモーターバスに付属のアダプターを接続し、付属のUSB でコンピュータに接続する。

IMG_0632.jpg

その後、次のスクリプトを実行

lerobot-find-port

こんな表示が出る。

Finding all available ports for the MotorsBus.
Ports before disconnecting: 
['/dev/tty', '/dev/ttyp0', .............
........, '/dev/tty.usbmodem5AB90691591']
Remove the USB cable from your MotorsBus and press Enter when done.

Remove the USB cable という指示が表示されたら USBを取り外し、エンターを押す。

すると、

The port of this MotorsBus is '/dev/tty.usbmodem5AB90691591'

つまり、ポートは

/dev/tty.usbmodem5AB90691591

となる。
このコマンドはUSBを差した時と抜いた時の差分からポートを判断している。

このポート番号は控えておく。

同様に、フォロワーアーム用のモーターバスをPCに接続し、ポート番号を調べる。

The port of this MotorsBus is '/dev/tty.usbmodem5AB90689241'


2. モーターの ID とボーレート(通信速度)の設定

各モーターは、バス上で一意に識別される ID(識別番号) を持っている。
新品のモーターは通常、デフォルトで ID = 1 に設定されている。
しかし、モーター同士やコントローラが正しく通信するためには、すべてのモーターに重複しない “別々の ID” を設定する必要がある。

さらに、バス上でデータを送受信する速度は ボーレート(baudrate) によって決まる。
コントローラとモーターが互いに通信できるようにするには、全モーターとコントローラを同じボーレートに設定する必要がある。

これらの設定を行うために、まずコントローラを使って各モーターを1つずつ個別に接続し、ID とボーレートを設定する。
これらの設定値は、モーター内部の 不揮発性メモリに保存されるため、一度設定すれば再度行う必要はない。

コンピュータとモーターバスを接続。
その後、先ほどの手順で取得したポートを使って、以下のコマンドを実行する。

lerobot-setup-motors \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5AB90689241 # <- paste here the port found at previous step

次の指示が表示される。

Connect the controller board to the 'gripper' motor only and press enter.

指示どおり、グリッパーモーターを接続。
その際、接続されているのがそのモーター1つだけであること、
また、モーター同士がまだ連結されていないこと を確認。

Enter を押すと、スクリプトがそのモーターの ID とボーレート(通信速度)を自動的に設定する。

'gripper' motor id set to 6

続けて指示通りにする。

Connect the controller board to the 'wrist_roll' motor only and press enter.

これらを全モーターで繰り返す。

'wrist_roll' motor id set to 5
Connect the controller board to the 'wrist_flex' motor only and press enter.
'wrist_flex' motor id set to 4
Connect the controller board to the 'elbow_flex' motor only and press enter.
'elbow_flex' motor id set to 3
Connect the controller board to the 'shoulder_lift' motor only and press enter.
'shoulder_lift' motor id set to 2
Connect the controller board to the 'shoulder_pan' motor only and press enter.
'shoulder_pan' motor id set to 1

リーダーアームについては、以下のコマンドで、手順はフォロワーアームと同じ。
lerobot-setup-motors \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5AB90691591

ここまで来たら、モーターの電源を確保するために、各モーターをケーブルで連結する。 これはロボットやってる人にとっては当たり前のことかもしれないのかチュートリアルに全然触れられてなくて、初心者の私は最後まで悩んだ。

モーターバスの固定 

(2025.11.23追加)

最後にこんなのが余った。
IMG_0601.jpg

これはモーターバスを固定するもの。
IMG_0685.jpg

こんな感じで固定(合ってるか100%自信ない)
IMG_0686.jpg

アームの裏に装着
IMG_0689.jpg


キャリブレーション

次に、ロボットのキャリブレーションを行う。
これは リーダーアームとフォロワーアームが、同じ物理的な位置にあるときに、同じ位置データ(ポジション値)を持つようにするため。

まずは、フォロワーアームから

以下のコマンドを実行

lerobot-calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5AB90689241 \ #先ほど調べたポート
    --robot.id=my_awesome_follower_arm #好きな名前をつけれる

こんなメッセージが出る。

Press ENTER to use provided calibration file associated with the id my_awesome_follower_arm,
or type 'c' and press ENTER to run calibration: 

c を押すと新しくキャリブレーションに進む。

そして、このメッセージが出たら

Move my_awesome_follower_arm SO101Follower to the middle of its range of motion and press ENTER....

ロボットアームをこの状態にしてエンター

IMG_0637.jpg

この画面が出たら各モーターを稼働範囲いっぱいに動かしてエンター

Recording positions. Press ENTER to stop...

-------------------------------------------
-------------------------------------------
NAME            |    MIN |    POS |    MAX
shoulder_pan    |   2047 |   2047 |   2047
shoulder_lift   |   2047 |   2047 |   2047
elbow_flex      |   2047 |   2047 |   2047
wrist_flex      |   2047 |   2047 |   2047
wrist_roll      |   2047 |   2047 |   2047
gripper         |   2047 |   2047 |   2047

リーダーアームも同様に設定する。
lerobot-calibrate \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5AB90691591 \ #先ほど調べたポート
    --teleop.id=my_awesome_leader_arm #好きな名前をつけれる

これで学習する準備が整った。



ロボットの遠隔操作

とりあえず、遠隔操作をやってみる。

ここをみてやった。
https://huggingface.co/docs/lerobot/il_robots

以下のコマンドでリーダーアームの動きに合わせて、フォロワーアームが動く。

lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5AB90689241 \ #先ほど調べたポート
    --robot.id=my_awesome_follower_arm \ #先ほど設定した名前
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5AB90691591 \ #先ほど調べたポート
    --teleop.id=my_awesome_leader_arm #先ほど設定した名前

動いた!!
感動!!

先端の動きがうまくいってないのは、キャリブレーションがうまくできてないからかな?

(2025.11.23追記)
Xの動画で先端の動きがおかしいのは、リーダーアームのモーターのIDの設定をgriperモーターとwrist_rollモーターの設定が逆にしていたため。
モーターのIDを再設定したら直った。



その2へ続く。



11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?