SCS0009 サーボ調整とキャリブレーション
SCS0009 版には 2 種類の調整内容があります:
- TTL の組み立てと中間位置の調整:配線、サーボ ID の設定、サーボホーンの固定、中間位置の微調整、テストの実行。
- SCS0009 調整ツール:Python + PySide6 の GUI。バスのスキャン、全レジスタの読み書き、位置制御、ボーレート/工場出荷状態への復元、xdat EEPROM バックアップ。
プロトコルのレジスタ詳細は SCS0009 プロトコルメモリテーブル を参照してください。
Arduino/拡張の配線は Arduino Nano を参照してください。
1. TTL 調整:組み立て、ID、中間位置
まず「多指ハンド調整.zip」をダウンロードして解凍し、「arduino プログラムで多指ハンドを調整する手順(TTL サーボ)」のドキュメントに従って、サーボ ID の設定、キャリブレーション、中間位置の調整、デモプログラムの実行を行います。または公式オープンソースコードを参照してください。
完成品を分解しない場合(出荷時にサーボ ID、キャリブレーション、中間位置は調整済み)、第 6 節「02 デモプログラム」の実行とハンドトラッキングへ直接進めます。

1. 多指ハンド調整の配線方法
1 つは PC で Python などの PC 側ソフトウェアを実行する方法(Feetech のサーボ設定ソフトや Python コードなど)です。
もう 1 つは MEGA328P などのマイコン、または購入した開発ボードやメインコントローラを使用する方法です。
配線方法は次のとおりです:
(1)Python 方式で調整するときの配線(サーボドライバ基板のみ接続):

(2)MEGA328P 開発ボードで調整するときの配線(サーボドライバ基板 + 328P 開発ボード):
MEGA328P 開発ボードのピン位置をよく確認してください!




以下ではマイコンを使った調整手順を説明します。マイコン自体はデモプログラムを繰り返し実行し続けるため、データ線を外すだけで停止できます。
2. サーボ ID の設定
1 つの多指ハンドはサーボを 8 個使用します。右手の ID は 1-8、左手の ID は 11-18 に設定する必要があります。
中間位置のキャリブレーション:完成品のデフォルトは右手 [451,571,451,571,451,571,451,571]、左手 [571,451,571,451,571,451,571,451]
- 配線:1 個ずつサーボとサーボドライバ基板を順に接続します。

- サーボメーカー提供の設定ソフト FD1.9.8.2 で設定します
FD.rar



3. サーボホーンの固定
- 「白いサーボホーンを取り付けるときに使用」というプログラムを開発ボードへ書き込みます
このプログラムの役割:サーボのギア位置をほぼ中央に合わせます。以降の動作角度はすべてこの中間位置を基準にします。
(1)Arduino ソフトをインストールし、お使いのシステムに応じてインストールチュートリアルを参照してください。Arduino プログラムをコンパイル・ダウンロードするには、先にライブラリマネージャーで FTServo ライブラリと SCServo ライブラリをインストールします

(2)ボードの種類:「Arduino Nano」を選択

- サーボ 1、2 を調整
(1)編集:調整するサーボ ID に応じて、次の箇所を変更します。人差し指を調整する場合は ID を 1、2 に設定します

(2)プログラムを開発ボードへ書き込みます
(3)配線:開発ボードをサーボドライバ基板と 1、2 番のサーボへ接続すると、サーボのギアが一定角度回転して停止するのが聞こえます。

(4)サーボホーンをギアへ取り付けます。可能な限り平行な位置にしてください

- サーボ 3、4 を調整
(1)328P 開発ボードとサーボドライバ基板の間の配線を外してください(外さないとアップロードできません)
(2)編集:ID を 3、4 に設定

(3)プログラムを開発ボードへ書き込みます
(4)配線:開発ボードをサーボドライバ基板と 3、4 番のサーボへ接続すると、サーボのギアが一定角度回転して停止するのが聞こえます。
(5)サーボホーンをギアへ取り付けます。可能な限り平行な位置にしてください
- サーボ 5、6 を調整
手順は上記と同じ
- サーボ 7、8 を調整
手順は上記と同じ
4. 中間値の微調整
「01 MiddlePos 値の微調整時に使用」というプログラムを開発ボードへ書き込みます
指が閉じた位置になったらすぐにプログラムを停止し(データ線を外すだけで停止)、サーボホーンが正しく揃っているか確認します(下図)。揃っていない場合は、プログラム内の MiddlePos_1、MiddlePos_2 の値を揃うまで調整します。その値を記録しておきます(8 個のサーボに対応する 8 個の値)。最後のプログラムで使用します。


5. テストプログラムの実行
- 上で保存した MiddlePos_1、MiddlePos_2 の値を次の配列へ入力し、プログラムをダウンロードします。

6. 「02 デモプログラム」を実行
(1)Arduino ソフトをインストールし、お使いのシステムに応じてインストールチュートリアルを参照してください
(2)灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序 ディレクトリで、左手か右手かに応じて対応する ino ファイルを開きます

(3)Arduino プログラムをコンパイルして開発ボードへアップロードするには、先にライブラリマネージャーで FTServo ライブラリと SCServo ライブラリをインストールします

(4)ボードの種類:「Arduino Nano」を選択

(5)コンパイルしてアップロード
注意:このとき PC は開発ボードだけを単独で接続し、開発ボードはまだサーボドライバ基板へ接続しません(つまり多指ハンドとは接続しません)。
アップロードが成功したら、開発ボードを 3 本のジャンパー線でサーボドライバ基板へ接続し、サーボをサーボドライバ基板へ接続します。参考:MEGA328P 開発ボードで調整するときの配線方法。
多指ハンドは**「02 デモプログラム」**を繰り返し実行し続けます
実行結果は次のとおりです:

2. SCS0009 調整ツール
Windows 10 / 11 対応です。Linux と macOS の違いは第 8 節を参照してください。本チュートリアルは環境のインストールから完全な調整までの各ステップを扱います。
⚠️ 互換性の注意:本ツールは現在 Feetech SCS0009 サーボのみに対応しています(SCS シリーズ、ポテンショメータ位置フィードバック、10 ビット分解能 0–1023)。レジスタ表、xdat パラメータ形式はいずれも Feetech SCS0009 向けに設計されており、他ブランド/型番の互換性は保証されません。
1. 動作環境
| 依存関係 | バージョン | 説明 |
|---|---|---|
| Python | >= 3.8 | 3.10+ を推奨。python.org からダウンロード |
| PySide6 | >= 6.0 | GUI フレームワーク |
| pyserial | >= 3.5 | シリアル通信 |
| システム | Win10 / Win11 | 任意のバージョン |
2. Python のインストール
- https://www.python.org/downloads/ へアクセス
- Python 3.10+ のインストーラーをダウンロード
- インストール時に必ず「Add Python to PATH」を有効にする(有効にしないとコマンドラインで python が見つかりません)
インストールの確認:
python --version3. 依存関係のインストール
システムの Python を汚さないよう、仮想環境でのインストールを推奨します:
# プロジェクトディレクトリへ移動
cd SCS0009_ServoController
# 仮想環境を作成
python -m venv .venv
# 仮想環境を有効化(Windows)
.venv\Scripts\activate
# 依存関係をインストール
pip install -r requirements.txt⚠️ 仮想環境の作成は 1 回だけで十分です。繰り返し実行すると元の環境を上書きします(インストール済みの依存関係が消去されます)。以降は毎回
activateで有効化するだけです。
ヒント:有効化するとコマンドラインの先頭に
(.venv)が表示されます。
4. 環境の確認
python setup.py[OK] 环境检查通过,可以运行项目 と表示されれば環境は正しいです。
5. ハードウェアの接続
- USB シリアルアダプター(CH340 / CP2102 など)を PC へ接続
- サーボコントローラ(ロボットアーム制御基板)を接続
- サーボへ給電(DC 5V 5A を推奨、Pro 版は DC 12V 5A)
デバイスマネージャー(Win+X → デバイスマネージャー)を開き、COM 番号を確認します:
端口 (COM 和 LPT)
└─ USB-SERIAL CH340 (COM3) ← 你的舵机串口COM 番号を記録し、プログラム起動時に選択します。
6. GUI の起動
python -m src.gui.factory_calibration_toolまたは手動でポートを指定します(シリアルポートが占有されている場合):
python -m src.gui.factory_calibration_tool --port COM3使用可能なポートの確認:
python -m src.gui.factory_calibration_tool --list-ports7. 画面の操作手順
画面は単一パネル構成です。ウィンドウの高さが足りないときは自動的にスクロールバーが現れ、最大化時は画面に合わせて伸縮します。
7.1 シリアルポートの接続
- ポートとボーレート(デフォルト 1M)を選択し、连接をクリック
- 状態が
🟢 已连接と表示される
7.2 サーボのスキャン
- 扫描舵机をクリックし、ID 1-254 のオンラインサーボを検出
- スキャン結果はサーボリスト(型番付き)へリアルタイム表示
- サーボリストの行をクリック → サーボのドロップダウンへ自動入力
7.3 パラメータの読み書き
- 读取参数:44 個すべてのレジスタ(EEPROM + SRAM)を読み取り、結果をログへリアルタイム表示
- 参数表:5 列で表示(アドレス/レジスタ/値/記憶領域/読み書き)。EPROM/SRAM/DEFAULT を色分け
- クリック連動:パラメータ表の行をクリック → 「書き込みアドレス」「長さ」「値」へ自動入力
- 書き込み:値を変更して書き込みをクリックすると、プログラムが自動でロック解除/書き込み/ロックを行います
- 書き込み結果のダイアログ:成功時は緑色で「✅ 已成功写入」、失敗時は赤色で「❌ 写入失败」(原因を含む)を表示
7.4 サーボ ID の変更
- バスには ID を変更するサーボを 1 個だけ接続し、既存の ID との衝突を避けます。
- パラメータ表で「舵机 ID」(アドレス
0x05)の行を見つけて選択します。 - 「値」を目標の ID に変更し、✏️ 写入をクリックします。プログラムが自動でロック解除 → 書き込み → 再ロックを行います。
- 変更後はバスを再スキャンして確認します。右手は 1–8、左手は 11–18 を使用します。
7.5 位置制御
- スライダーをドラッグするか目標位置(0–1023)を直接入力します。数値ボックスとスライダーは同期します。
- ▶ 移动をクリックすると、ステータスバーに「移动中…」と表示されます。
- 到達すると「已移动完成,请关闭力矩」と表示されるので、⏹ 力矩关をクリックします。
7.6 ボーレート/工場出荷状態への復元
- 修改波特率:新しいボーレート(38400–1000000 bps)を選択して書き込みます。プログラムはシリアルポートのボーレートを切り替えて ping で検証し、失敗時は自動的にロールバックします。
- 恢复出厂:出荷時のデフォルト(ID=1、ボーレート 1M)へ戻します。その後は再スキャンが必要です。
7.7 xdat パラメータ(EEPROM のみ保存)
💾 保存当前舵机:現在の ID のサーボの EEPROM パラメータを xdat ファイルへ保存(バックアップ)📂 打开 xdat:バックアップファイルを読み込み📤 恢复参数到舵机:バックアップをサーボへ書き戻し
8. Linux と macOS の違い
Linux
- フォント:
sudo apt install fonts-noto-cjk fonts-noto-color-emojiを実行します。実行しないと中国語の画面が空白になったり、emoji が四角に表示されたりすることがあります。 - シリアルポートの権限:
sudo usermod -a -G dialout $USERを実行し、ログアウトして再ログインすると反映されます。groupsにdialoutが含まれているはずです。一時的な方法としてsudo chmod 666 /dev/ttyUSB0も使えます。 - デバイス名:
/dev/ttyUSB*(CH340 / CP2102 / PL2303)または/dev/ttyACM*(オンボード USB シリアル)。lsusb、dmesg | grep -i ttyで製造元を確認します。 - 固定デバイス名(任意):
/etc/udev/rules.d/99-servo.rulesにSUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyServo"を書き、以降は/dev/ttyServoを使用します。 - 起動:
python -m src.gui.factory_calibration_tool --port /dev/ttyUSB0。 - よくある問題:
pipが externally-managed-environment を出す場合は venv を使用するか、--break-system-packagesを付けます。
macOS
- Python:Homebrew で
brew install pythonを実行してインストールすることを推奨します。システム付属の古いバージョンは使わないでください。 - シリアルポートの命名:
/dev/cu.*を使用し、/dev/tty.*は使わないでください(後者はブロックする可能性があります)。ls /dev/cu.*で確認します。 - USB ドライバー:CH340 / CP2102 / FTDI はほとんどドライバー不要です。古いロットの CH340 は WCH ドライバーが必要で、
system_profiler SPUSBDataTypeで調査できます。 - 起動:
python -m src.gui.factory_calibration_tool --port /dev/cu.usbserial-0001。 - Apple Silicon:ネイティブの Python 3.10+ を使用し、Rosetta 下の古い Python を避けてください。初回実行時に「開発元を検証できません」と表示された場合は、「プライバシーとセキュリティ」で許可します。
- 省電力:macOS のスリープでシリアルポートが切断されることがあるため、操作中はスリープさせないでください。
9. 注意事項
- 書き込みは永続化されます:パラメータを EEPROM へ書き込むと元の値が上書きされ、元に戻せません。変更前に xdat でバックアップしてください。
- 安定した給電:給電不足は脱調、通信失敗、サーボの接続喪失を招きます。SCS0009 配線と給電 の要件に従って給電してください。
- シリアルポートの独占:同じポートを 2 つのプログラムが同時に開くことはできません。使用前にシリアルモニター、PC 側ソフトウェアなど占有しているプログラムを閉じてください。
- ID 変更のリスク:バスには ID を変更するサーボを 1 個だけ接続してください。変更後に接続できなくなった場合は、「工場出荷状態へ復元」(ID が 1 に戻る)を試せます。
- 過熱/過電圧:ツールは電圧と温度を監視します(温度 > 60 °C で警告)。高温が続く場合は停止して放熱してください。
- ホットプラグ:USB を抜くとプログラムは再接続を試みます。挿し直したらポートの更新をクリックしてください。
- Windows コンソールの文字化け:コマンドラインツールで emoji が文字化けする場合は、
PYTHONIOENCODING=utf-8を設定してから実行してください。
10. よくある問題
| 問題 | 解決方法 |
|---|---|
| シリアルポートが見つからない | デバイスマネージャーでドライバーを確認;USB ポートを変える;CH340 ドライバーをインストール |
| シリアルポートが占有されている | シリアルモニターなどのプログラムを閉じる;ツールを再起動 |
| 中国語フォントが空白になる | システムのデフォルトは Microsoft YaHei。異常な場合は中国語フォントをインストール |
| サーボがスキャンできない | 給電/配線を確認;ボーレートが 1M であることを確認 |
| 書き込みに失敗する | サーボの給電と接続を確認;対象レジスタが書き込み可能か確認 |
| PermissionError でシリアルポートを開けない | 他のプロセスがその COM ポートを占有していないことを確認 |
Linux:Permission denied: /dev/ttyUSB0 | dialout グループに未加入。上記の Linux の項を参照 |
macOS:ポート名に tty. が付くと固まる | 対応する /dev/cu.* デバイスに変更 |
11. コマンドライン(任意)
# 使用可能なシリアルポートを一覧表示
python -m src.gui.factory_calibration_tool --list-ports
# ポートを指定して起動
python -m src.gui.factory_calibration_tool --port COM3
