SCS0009 ウェブコントロール
本ページはウェブコントロールの SCS0009 シリアルバス版専用の説明です。共通の画面、起動方法、プリセットポーズ、カメラテレオペは ウェブコントロール概要 を参照してください。
サーボマッピング
出典:AmazingHandControl/hand_logic.py の DEFAULT_HAND_SERVOS と docs/zh-hans/CONFIG_FORMAT.md。
| 指 | 右手 ID | 左手 ID |
|---|---|---|
| 薬指 | 5, 6 | 11, 12 |
| 中指 | 3, 4 | 13, 14 |
| 人差し指 | 1, 2 | 15, 16 |
| 親指 | 7, 8 | 17, 18 |
2 つのサーボが協調して差動駆動で 1 本の指を動かします ⚠️
各指の 2 つのサーボは並んで取り付けられ、回転軸は同じ線上にあります。「1 つのサーボが屈伸、もう 1 つが開き」ではなく、2 つのサーボが協調して同じ指を駆動します:
- 2 つのサーボが同方向に回転 → 指が左右に開く(開き)
- 2 つのサーボが逆方向に回転 → 指が伸びる/曲がる(屈伸)
- 2 つのサーボに同方向成分と逆方向成分が同時にある → 屈伸と開きが重畳する
開き(同方向) 屈伸(逆方向)
軸1 ↻ 軸2 ↻ 軸1 ↻ 軸2 ↺画面に表示されるのは 2 つの制御軸で、2 つのサーボではありません:
屈伸 = (servo1 + servo2) / 2
開き = (servo1 − servo2) / 2逆に、プログラムは制御軸を 2 つのサーボの目標角度へ換算します:
servo1 = 屈伸 + 開き
servo2 = 屈伸 − 開きここでの
servo1/servo2はソフトウェア上の目標角度(偶数 ID は逆向き取り付けに応じて反転済み)で、サーボ出力軸の物理的な向きではありません。実際の機構で 2 つのサーボが同方向/逆方向に動くかは、出力軸を見て判断してください。この 2 つの数値を直接比較してはいけません。例:開きだけを
+20与えると、ソフトウェア値はservo1 = +20、servo2 = −20になります。偶数 ID でさらに符号を反転すると、2 つのサーボは実際には同方向に回転します。
「指が開かない/閉じない」のは、開きの制御量が 0 か、2 つのサーボが差動になっていないためです —— たとえばチョキのような V 字は、人差し指の開き +17、中指の開き −30(一方が正、他方が負)で作られます。
範囲(公式の 19 ポーズ + 中間位置から集計):
| 軸 | 範囲 | 説明 |
|---|---|---|
| 屈伸 | −50 ~ +90 | 開く(負)↔ 握る(正) |
| 開き | −45 ~ +45 | 揃う(負)↔ 開く(正) |
2 つの ID の決まり(間違えるとサーボを焼いたり動作が逆になります):
- 奇数 ID が各指の 1 つ目のサーボ、偶数 ID が 2 つ目。 両手とも当てはまります (左手の 11/12、13/14… も同様に奇数・偶数が交互です)。2 つ目のサーボは逆向きに取り付けられているため、換算時に符号を反転します。
- 左手の ID は 9–16 ではなく、11–18 で「薬指優先」の順に番号が振られています。 1–8 の順に続けて接続すると必ず間違えます。
物理的な向きと中間位置:右から左へ数え、右が奇数、左が偶数です。右手の中間位置の順序(raw 0–1023)は 451,571,451,571,451,571,451,571、左手は 571,451,571,451,571,451,571,451 です。

換算式
AmazingHandControl の apply_pose() と完全に一致します(ポーズごとに照合・検証済み):
1) mirror_pose が真のとき、先に各指の 2 つのサーボの値を入れ替える
2) servo_deg = (ID が奇数 ? +1 : -1) × (ポーズ値 − angle_offset_deg)| 手 | angle_offset_deg | mirror_pose |
|---|---|---|
| 右手 | 0 | あり ⚠️ |
| 左手 | -35.16 | あり |
-35.16° は左手のサーボホーンが右手に対して物理的に半スロットずれている分で、公式設定から実測して得た値です。
mirror_poseについて —— 本機は公式と異なります公式リファレンスでは左手だけが
trueです。本機の右手モジュールもサーボ対が逆向きに取り付けられているため、右手も同じくtrueに設定しています。この入れ替えは数学的に開きだけを反転し、屈伸は変えません:
base = (a+b)/2は入れ替えても変わらず、side = (a−b)/2は符号が変わります。 そのため「ある手の開きが全体として逆」になった場合、最初に確認すべきはこのスイッチです。
ポーズ配列は常に 8 個の値で、順序は [薬指, 中指, 人差し指, 親指]、1 本の指につき 2 個 —— 公式の data/hand_config.yaml とバイト単位で一致するので、そのまま比較できます。
実測の換算結果
| ポーズ | 右手 | 左手 |
|---|---|---|
open [-35]*8 | ID5 −35 / ID6 +35 | ID11 +0.16 / ID12 −0.16 |
close [75]*8 | ID5 +75 / ID6 −75 | ID11 +110.16 / ID12 −110.16 |
中間位置 [-17.578]*8 | ID5 −17.58 / ID6 +17.58 | ID11 +17.58 / ID12 −17.58 |
左手の
closeは ±110.16° を必要とすることに注意してください。右手よりずっと大きい値です。そのためconfig.jsonのリミットを ±120° に設定しています(SCS0009 のフルレンジは約 ±150°)。リミットを ±90 にすると左手の握り拳がクリップされてしまいます。
SCS0009 よくある質問
動作の向きが逆になった → 配線が「奇数 ID が先」に従っているか確認してください。左手は angle_offset_deg = -35.16 も確認します。
左手の握り拳の幅が足りない/サーボが唸る → リミットがまだ ±90 の可能性があります。config.json が ±120 になっているか確認してください。
指が動かない/「N 個のモーターが必要、M 個を検出」と表示される → tools/scan_servos.py を実行してください。左手の ID が最も配線を間違えやすいです。
中間位置がずれている → 中間位置の値 -17.578125 は公式の raw 451/571 から換算したものです。自分の機械的組み立てに合わせてキャリブレーションするには config.json の middle.positions を変更してください。

