SO-ARM101 / Feetech STS3215 ドライラン手順書¶
配線と電源投入の前に、公式仕様の確認、Linux での udev 設定、Python 依存の解決、現行テーブル配置(2026-10-26)との一致、購入済み機材の一覧を整える。物理駆動はせず、ソフトウェアの接続確認にとどめる。
公式仕様と参照ドキュメント¶
- Assemble SO-101(組立手順)
- SO-101(モータ初期設定
lerobot-setup-motorsおよびキャリブレーション手順) - SO-100(ソフトウェア構成の共通仕様)
サーボモータの ID(1〜6)と関節名の対応は、本リポジトリの configs/contract.yaml における robot.joint_names の定義と一致させる。
- 割り当て順序:
shoulder_pan,shoulder_lift,elbow_flex,wrist_flex,wrist_roll,gripper - LeRobot におけるロボット識別名:
so101_follower(リーダー側を使用する場合はso101_leader)
ホスト Python 依存パッケージの導入¶
cd /path/to/lerobot-so101-pick-and-place
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e "port_pick_align/[training,feetech,dev]"
機材非接続状態におけるモジュール読み込みテスト:
python -c "import lerobot; print('lerobot OK', lerobot.__version__)"
# Feetech モータバス実装の依存関係解決を確認
python -c "from lerobot.motors.feetech import FeetechMotorsBus; print('feetech OK')"
読み込み時に ImportError が発生した場合は、pip install -e "port_pick_align/[feetech]" を再実行して C++ 拡張モジュールやシリアル通信ライブラリの導入状況を確認する。
シリアル通信ポートの識別¶
Linux 環境¶
ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
# アダプタの属性(vendor / product / serial)の確認
udevadm info -a -n /dev/ttyACM0 | head -n 40
macOS 環境¶
macOS では udev による静的シンボリックリンク生成が行えないため、接続時に割り当てられたデバイスファイル名を直接確認する。
LeRobot の実行引数には、検出されたパス(例: /dev/tty.usbmodem585A0076841)を直接指定する。
udev ルールの適用(Linux 環境)¶
設定テンプレート: deploy/udev/99-feetech-so101.rules
udevadm infoを実行し、使用する USB シリアル変換器のidVendor,idProduct,serialを取得する。- テンプレート内の
REPLACE_*_SERIALおよび SYMLINK 名を実際の機材シリアル番号に合わせて更新する。 - ルールファイルをシステムへ配置し、反映する。
sudo cp deploy/udev/99-feetech-so101.rules /etc/udev/rules.d/
# ルール反映(権限は MODE=0660 / GROUP=dialout)
sudo udevadm control --reload-rules && sudo udevadm trigger
# dialout グループ必須(未所属なら追加後、一度ログアウト→再ログイン)
sudo usermod -aG dialout $USER
# 再ログイン後に固定シンボリックリンクの生成を確認
ls -l /dev/ttyUSB_so101_*
実機接続時の初期設定コマンド(参考仕様)¶
モータ ID の割り当て(各ポート名は使用環境のデバイスファイル名に置換する):
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/ttyUSB_so101_follower
lerobot-setup-motors \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyUSB_so101_leader
キャリブレーション処理(実機の組み立ておよび 12V 電源投入後に実施):
# 公式ドキュメントの calibrate / control_robot 手順に準拠して実行する
# 例: python -m lerobot.scripts.control_robot calibrate ...
電源仕様上の注意: Follower 側 Feetech STS3215(C018)の駆動電圧は 12V である。USB バスパワーのみでは駆動しないため、キット付属の 12V アダプタを接続する。Leader 側 STS3215(7.4V 仕様)は 5V で駆動し、付属の 5V アダプタ(30W)を接続する。品目は「購入済み機材」を参照する。カメラ画像転送とシリアル通信の帯域競合を避けるため、USB ホストコントローラの分離または規格に適合した USB ハブを経由して接続する。
購入済み機材¶
実機はキッチンのテーブルに置く。配置の数値は「現行テーブル配置(2026-10-26)」に従う。
| 品目 | 数量 | 用途・備考 |
|---|---|---|
| WowRobo「SO-ARM101 DIY Kit & Assembled Version」Package 3(Assembled SO-101 Arm、Black) | 1 | Leader 1、Follower 1、カメラ 1。ベンダーが組立・校正済み |
| Follower 用 Feetech STS3215 12V(C018) | 6 | Follower の関節サーボ。キット同梱 |
| Follower 用バスサーボドライバ(Waveshare / Feetech、DC ジャック 5.5×2.1 mm) | 1 | Follower のサーボバス。キット同梱 |
| 12V DC 電源アダプタ(UK 3 ピンコード付き) | 1 | Follower の駆動電源。キット同梱 |
| Leader 用 Feetech STS3215 7.4V(5V 駆動) | 6 | Leader の関節サーボ。キット同梱 |
| Leader 用バスサーボドライバ基板 | 1 | Leader のサーボバス。キット同梱 |
| 5V 電源アダプタ(30W、UK 3 ピンコード付き) | 1 | Leader の駆動電源。キット同梱 |
| USB-C ケーブル(白) | 2 | 各ドライバ基板と Mac を接続。キット同梱 |
| 手首カメラモジュール(ハウジング付き、ネジ同梱) | 1 | 手首カメラ。グリッパへ固定する。キット同梱 |
| DELIXI C クランプ | 4 | アーム基部をテーブルへ固定する。キット同梱 |
| 3D プリント部品(橙・黒)および小物 | 一式 | キット付属の造形部品とアクセサリ |
| Feetech 小箱 | 1 | 予備サーボ STS3215。電圧は箱のラベルで確認。キット同梱 |
| VIJIM LS08(C クランプ式フレキシブルカメラアーム) | 1 | 上カメラをテーブル右端、手前から 16 cm に固定し、紙・スポンジ・Follower が画角に入る向きにする。取付ネジは 1/4 インチ。以前の真下向き (25, 0) cm は廃止 |
| Logitech C920 | 1 | 上カメラ(USB) |
まだ購入が必要なもの¶
- 延長コードまたは電源タップ。シンガポールの Safety Mark 付き、UK プラグ、差込口 3 口以上。12V アダプタ、5V アダプタ、予備をキッチンのテーブルで使う。
現行テーブル配置(2026-10-26)¶
使用する機材は「購入済み機材」に示す。本節が bring-up と live eval における実機配置の正本である。テーブル寸法は 140 × 70 cm であり、旧配置のテープ印や簡易 MuJoCo シーンの座標は使用しないこと。
手順と live-eval チェックリストは real_robot_bringup.md。
テーブル: 幅 140 cm × 奥行 70 cm。
| 対象 | 配置 | 備考 |
|---|---|---|
| Leader 基部 | 左から 27 cm / 右から 101 cm | 5V。二つの距離は基部の両端 |
| Follower 基部 | 左から約 68 cm / 右から 61 cm | 12V。左からの距離は概数 |
| 上カメラ(C920) | テーブル右端、手前から 16 cm | 紙・スポンジ・Follower が写る向き。高さは今回未計測 |
| 紙(ゴール) | 右から 69 cm、手前から 27 cm | 縦置き 幅 20 cm × 奥行 30 cm |
| スポンジ | 右から 54 cm、手前から 44 cm | 縦置き 幅 6 cm × 奥行 11 cm |
| 手首カメラ | Follower のグリッパ | OpenCV index 0 |
| 上カメラ index | OpenCV index 1 | 2026-10-25 のケーブル交換後も同じ |

印刷用 PDF: so101_layout_guide.pdf。再生成は python scripts/draw_layout_guide.py。出力先は docs/images/。
定数: port_pick_align/src/port_pick_align/simulation/table_layout.py。
sim 座標系への写像¶
sim の軸は従来のアーム基部と同じである。原点は Follower、+x は前方(手前縁から奥へ)、+y は左、+z は上。
2026-10-26 の記録は基部の一点を指定しておらず、基部の手前からの奥行きも再計測していない。写像は次の二つの規約による。
- 基部の参照点は、両端の距離が示す区間の中点である。Leader は左から 27 cm 〜 39 cm(中点 33 cm)。Follower は左から 68 cm 〜 79 cm(中点 73.5 cm)。区間幅は両端から求めたものであり、別計測の幅ではない。
- Follower 原点はその中点を手前縁(
v = 0)に置いた点である。後から手前オフセットが測れれば、すべてのxに同じ定数が足され、yは変わらない。
紙・スポンジ・上カメラは実測点を使う。記録はその点と縦置きサイズであり、点が角であるとは書いていない。図はサイズが見えるよう、各外形を実測点中心に描いている。
| 対象 | 左から u(cm) |
手前から v(cm) |
sim (x, y) cm |
sim (x, y) m |
|---|---|---|---|---|
| Leader 中点 | 33 | 0 | (0, 40.5) | (0, 0.405) |
| Follower 原点 | 73.5 | 0 | (0, 0) | (0, 0) |
| 紙の実測点 | 71 | 27 | (27, 2.5) | (0.27, 0.025) |
| スポンジの実測点 | 86 | 44 | (44, −12.5) | (0.44, −0.125) |
| 上カメラ | 140 | 16 | (16, −66.5) | (0.16, −0.665) |
u = 140 −(右からの cm)。手前縁規約では x = v。y = 73.5 − u。
カメラ¶
ACT の入力は上カメラ(/camera/top/image_raw)と手首カメラ(/camera/wrist/image_raw)の両方である。解像度は各 640×480、30 fps(configs/contract.yaml)。C920 は VIJIM LS08 で右端、手前から 16 cm、紙・スポンジ・Follower が写る向きに固定する。手首カメラはキット同梱のモジュールを Follower のグリッパへ取り付ける。OpenCV index は wrist 0、top 1。手首画像が無い状態は学習時の分布の外である。
作業エリア準備チェックリスト¶
- [ ] テーブルが幅 140 cm × 奥行 70 cm である
- [ ] Leader 基部が左から 27 cm / 右から 101 cm(5V)である
- [ ] Follower 基部が左から約 68 cm / 右から 61 cm(12V)である
- [ ] 紙が右から 69 cm、手前から 27 cm(縦置き 20×30 cm)である
- [ ] スポンジが右から 54 cm、手前から 44 cm(縦置き 6×11 cm)である
- [ ] C920 が右端、手前から 16 cm で、紙・スポンジ・Follower が画角に入る
- [ ] 手首カメラが Follower のグリッパにあり、OpenCV wrist
0、top1を確認した - [ ] 下の廃止配置の目印を新しいセットアップに使っていない
廃止した配置¶
新しい sim 合わせ、bring-up、live eval には使わない。
2026-10-25 ~23:28¶
テーブルは 140×69 cm と記録されていた。C920 は右から 28 cm。スポンジは右から 70 cm / 手前から 45 cm。紙は右から 82 cm / 手前から 26 cm。Follower は右から 62 cm。
2026-10-22 の収録配置¶
本収録データセットだけに使った配置である。テーブル幅はおよそ 134 cm。Leader 左端 28 cm。紙は左から 56 cm / 手前から 13 cm。Follower 左端 78 cm。スポンジは左から 81 cm / 手前から 29 cm。上カメラポールは左から 111 cm。詳細は real_robot_bringup.md。
簡易 MuJoCo シーン(2026-10-26 より前の図)¶
既存の sim 評価を続けるため、リポジトリのシーンは次の geom のままである。これは実機テーブルではない。後の sim 合わせでは、上の sim 座標へ移す。

PDF: so101_layout_guide_superseded_pre_20261026.pdf。
| 項目 | 値 | 出典 |
|---|---|---|
| テーブル天板 | z = 0.42 m(床を z = 0 とする)。上面 70×60 cm | env.py の TABLE_Z。XML table geom 中心 (0.25, 0, 0.40)、half-size 0.35 0.30 0.02 |
| 箱 | 5×4×4 cm、30 g | XML box_geom の half-size 0.025 0.02 0.02、mass="0.03" |
| 箱の初期中心 | (28, −8) cm。xy を各 ±4 cm、yaw を ±0.3 rad(約 ±17°)で一様乱数 | env.py の reset。基準 (0.28, -0.08) に uniform(-0.04, 0.04)、yaw は uniform(-0.3, 0.3) |
ゴール target_frame |
中心 (35, +12) cm、パッド 8×6 cm、yaw 0 | XML target_frame pos 0.35 0.12 0.42、target_pad half-size 0.04 0.03(回転なし) |
| 整列成功 | 平面位置誤差 25 mm 以内、かつヨー誤差 15° 以内 | eval_alignment.py の DEFAULT_ALIGN_POS_MM = 25、DEFAULT_ALIGN_YAW_DEG = 15(いずれも <=) |
| 上カメラ | 平面 (25, 0) cm、天板から 63 cm(ワールド z = 1.05 m)、真下向き、垂直 FOV 55°。天板上の視野は約 87×66 cm(推定) | XML camera name="top" の pos 0.25 0 1.05、xyaxes="1 0 0 0 1 0"、fovy="55" |
| 手首カメラ | グリッパリンク原点から前方 2 cm・上方 4 cm、下向き約 30°、垂直 FOV 60° | XML camera name="wrist" の pos 0.02 0 0.04、xyaxes="0 -1 0 0.5 0 0.866"、fovy="60" |
| 到達範囲 | 約 42 cm(shoulder_pan ±110°。簡易モデルの幾何最大) |
上腕 12 cm + 前腕 14 cm + 手首 8 cm + グリッパ 3 cm + 手先サイト 5 cm。pan range は ±1.9199 rad |
上カメラの視野約 87×66 cm は、天板からの高さ 63 cm、垂直 FOV 55°、契約画像 640×480 のアスペクトから求めた推定である。x 方向(水平 FOV 約 69°)が約 87 cm、y 方向(垂直 FOV 55°)が約 66 cm である。この推定は廃止した真下向きカメラのものであり、2026-10-26 の右端設置ではない。実機 C920 の高さは 2026-10-26 に再計測していない。XML が持つのはカメラ位置と fovy であり、視野の辺長はそこから計算する。
この廃止シーンだけの出典:
port_pick_align/src/port_pick_align/simulation/assets/so101_tabletop.xmlport_pick_align/src/port_pick_align/simulation/env.pyport_pick_align/src/port_pick_align/evaluation/eval_alignment.py
事前準備チェックリスト¶
- [ ] 公式 SO-101 および Feetech のセットアップ手順を確認した
- [ ]
port_pick_align/[training,feetech]の依存関係インストールが正常に完了した - [ ]
lerobotおよび Feetech motors モジュールのインポート試験に通過した - [ ] Linux で、機材固有のシリアル番号に基づく udev ルールを設定した
- [ ] macOS で、
/dev/tty.usbmodem*デバイスの確認手順を把握した - [ ] 実機到着後に実行するモータ設定およびキャリブレーションのコマンド仕様を把握した
- [ ] 実機 SO-101 のデモでは、real_robot_bringup.md の収録前チェックと収録後 QC も実施する