🧪 新しいチュートリアルを公開中 — ロボットアームからセンサーまで
コンテンツへスキップ
この製品を購入公式ストア公式サイト

SCS0009 ウェブコントロール ​

本ページはウェブコントロールの SCS0009 シリアルバス版専用の説明です。共通の画面、起動方法、プリセットポーズ、カメラテレオペは ウェブコントロール概要 を参照してください。

サーボマッピング ​

出典:AmazingHandControl/hand_logic.py の DEFAULT_HAND_SERVOS と docs/zh-hans/CONFIG_FORMAT.md。

指右手 ID左手 ID
薬指5, 611, 12
中指3, 413, 14
人差し指1, 215, 16
親指7, 817, 18

2 つのサーボが協調して差動駆動で 1 本の指を動かします ⚠️ ​

各指の 2 つのサーボは並んで取り付けられ、回転軸は同じ線上にあります。「1 つのサーボが屈伸、もう 1 つが開き」ではなく、2 つのサーボが協調して同じ指を駆動します:

  • 2 つのサーボが同方向に回転 → 指が左右に開く(開き)
  • 2 つのサーボが逆方向に回転 → 指が伸びる/曲がる(屈伸)
  • 2 つのサーボに同方向成分と逆方向成分が同時にある → 屈伸と開きが重畳する
text
開き(同方向)          屈伸(逆方向)
軸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 の決まり(間違えるとサーボを焼いたり動作が逆になります):

  1. 奇数 ID が各指の 1 つ目のサーボ、偶数 ID が 2 つ目。 両手とも当てはまります (左手の 11/12、13/14… も同様に奇数・偶数が交互です)。2 つ目のサーボは逆向きに取り付けられているため、換算時に符号を反転します。
  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 です。

Both_Hands-IDs


換算式 ​

AmazingHandControl の apply_pose() と完全に一致します(ポーズごとに照合・検証済み):

1) mirror_pose が真のとき、先に各指の 2 つのサーボの値を入れ替える
2) servo_deg = (ID が奇数 ? +1 : -1) × (ポーズ値 − angle_offset_deg)
手angle_offset_degmirror_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]*8ID5 −35 / ID6 +35ID11 +0.16 / ID12 −0.16
close [75]*8ID5 +75 / ID6 −75ID11 +110.16 / ID12 −110.16
中間位置 [-17.578]*8ID5 −17.58 / ID6 +17.58ID11 +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 を変更してください。

関連ページ ​