本文へ移動

コントローラーファイルとモータープロファイル

確認済み 2026-11-01

結果: は腕の完全な構成を準備します。コントローラー ファイルはポート、モーター、ワークフローを選択します。プロファイルは 1 つのモーターの制御パラメーターを設定します。これらのファイルは、エンコーダのキャリブレーションや保存された移動制限を置き換えるものではありません。

ローカルファイルを作成する

名前付きポーズを再生するには、次の例から始めます。

macOS / Linux
cp tools/poses/replay.example.json tools/poses/controller.local.json
cp host/arm-control/profile.example.json tools/poses/motor-1.local.json
Windows PowerShell
Copy-Item tools/poses/replay.example.json tools/poses/controller.local.json
Copy-Item host/arm-control/profile.example.json tools/poses/motor-1.local.json

ローカル コピーを編集します。例 controller.local.json には、 のみのモーター 1 が含まれています。記録された腕の ID をすべて追加します。個別の motor-2.local.json 、 motor-3.local.json およびその他のプロファイルを作成し、それぞれのジョイントをレビューします。

以下の 6 モーター構造はフォーマットを示しており、普遍的に安全な設定ではありません。 /dev/ttyUSB0 を実際のポート (Windows の COM3 など) に置き換えます。端末の SERVO_PORT 変数は、 JSON に自動的に置き換えられません。

{
  "followerPort": "/dev/ttyUSB0",
  "baudRate": 1000000,
  "maxAgeMs": 100,
  "acceleration": 1000,
  "rampTimeMs": 50,
  "profiles": {
    "1": "motor-1.local.json",
    "2": "motor-2.local.json",
    "3": "motor-3.local.json",
    "4": "motor-4.local.json",
    "5": "motor-5.local.json",
    "6": "motor-6.local.json"
  },
  "replay": {
    "speed": 500,
    "holdMs": 1000,
    "repeat": 1,
    "moveTimeoutMs": 30000,
    "toleranceCounts": 10
  }
}

この JSON を tools/poses/controller.local.json として保存し、その横に motor-1.local.json ~ motor-6.local.json を付けます。異なる ID に対して、プロファイル キー、ポーズの記録、および接続されているデバイスを一貫して更新します。

プロファイル設定

完全なソースの例は次のとおりです。

{
  "kpQ8": 256,
  "kdQ8": 32,
  "kiQ8": 0,
  "integralLimit": 0,
  "effortLimit": 100,
  "velocityLimit": 500,
  "velocityFilterQ8": 64,
  "gravitySlewEffortPerS": 1000,
  "velocityFeedforward": {
    "positiveGainQ8": 0,
    "negativeGainQ8": 0,
    "effortLimit": 0
  }
}
設定 解釈
kpQ8、kdQ8、kiQ8 ゲイン乗算 256 : 256 は 1.0 を意味し、32 は 0.125 を意味します
integralLimit 積分寄与のみの制限
effortLimit 合計出力制限、1 – 1000 PWM モーター出力指令単位。トルクもアンペアもない
velocityLimit このモーターの最大速度 (カウント/秒)
velocityFilterQ8 1 – 255 ;値を大きくすると応答が速くなりますが、フィルターされるノイズは少なくなります。
gravitySlewEffortPerS 重力変化のレート制限。モデルを単独で有効にすることはできません
velocityFeedforward 2 つの非負の指向性ゲインと 1 つの出力キャップ。 3 つすべてをゼロにすると無効になります

共有 acceleration および rampTimeMs はコントローラー ファイルに属します。モーター プロファイルは、 accelerationLimit および rampTimeMs でそれらをオーバーライドできます。範囲と関係については、 構成レジスタ を参照してください。

パスとID

  • プロファイル パスと gravityModel は、作業ディレクトリではなく、 コントローラー ファイル を基準としています。
  • チューニング プランの config パスは、 プラン ファイル に対する相対パスです。
  • 名前付きポーズはモーター ID を提供します。そのリプレイには joints は必要ありません。
  • チューニングとプロファイルの適用には、制御されるすべてのモーターをカバーする joints: [{"followerId": 1}, …] が必要です。
  • ライブ テレオペレーションとセッション リプレイには、 leaderId 、 followerId 、および mapping が必要です。

サンプルをディレクトリ間で移動するときはパスを確認してください。名前付きポーズのリプレイ例では、省略された joints 配列は意図的に行われています。

設定を適用する

プロファイルは Extension RAM に書き込まれるため、リセット後に再適用する必要があります。 EEPROM のキャリブレーションと移動制限は別のものです。 Replay はその設定を自動的に適用します。プロファイルを変更すると、そのモーターが一時的に無効になります。新たに起動すると、設定されているすべてのモーターが解放されます。

付属の host/arm-control/profiles/so101/ および so102/ 設定は、空のグリッパーを備えた特定の直立アームから取得されます。 SO-101 プロファイルは、未解決の M1 振動とより遅い M2 偏位を保持します。高速 SO-102 プロファイルにはまだハードウェア検証が必要です。これらは、普遍的な初回実行時のデフォルトではありません。

チェック: 有効な JSON 、既存の相対ファイル、モーターごとに 1 つのプロファイル、およびメカニズムの設定が確認されました。次に、 リプレイ プレビュー を実行します。有効なファイルは、安全なハードウェア動作を確立しません。


ドキュメント ホーム · ソース リビジョン: a995f77 。 Extension 9.0 。