本文へ移動

Extension v9.0 プロトコル

確認済み 2026-11-01

独自のクライアント向けの正確なワイヤ形式。最初に セッション ライフサイクル を読み取ります。 レジスタ レイアウト は、フィールド サイズ、オフセット、および範囲を定義します。命令とブロックセレクタは、数値が一致しても別のパケットフィールドです。

拡張プロトコルのユニキャスト要求と応答

このセクションでは、ホストとサーボ間で交換される正確なメッセージについて説明します。これは、独自のソフトウェアを接続する読者を対象としています。

メッセージ形式と数値エンコーディング

各メッセージはパケットです。宛先、コマンド、データ、および送信エラーの検出に使用されるチェックサムを含む一連のバイトです。 Extension コマンドは、標準の STS パケット形式を使用します。

Request:  FF FF ID LENGTH INSTRUCTION PARAMETERS... CHECKSUM
Response: FF FF ID LENGTH LEGACY_ERROR EXT_STATUS DATA... CHECKSUM
  • LENGTH = parameter_bytes + 2 をリクエストします。
  • 応答 LENGTH = data_bytes + 3 ;拡張ステータスは、通常のレガシー エラー バイトとは別に、最初の応答パラメータを占めます。
  • CHECKSUM = ~(ID + LENGTH + instruction_or_error + all_parameter_bytes) & 0xFF 。応答合計には、EXT_STATUS と任意のデータが含まれます。
  • 数バイトを占めるフィールドは、最下位バイトを最初に送信します ( リトルエンディアン )。たとえば、数値 256 は、2 バイトの 00 01 として送信されます。
  • u8、u16、u32 は非負の整数で、それぞれ 1、2、4 バイトを使用します。i16 と i32 はそれぞれ 2、4 バイトを使用し、負の数も表現できます。Extension の符号付き値は2 の補数で表現します。例えば −1 は FF FF と符号化されます(i16 フィールドの場合)。これは従来のインターフェースの符号付き値の符号化とは異なります。
  • Q8 は、送信前に値が 256 で乗算されるため、小数部は整数として表現できることを意味します。読み出すときは256で割ってください。たとえば、位置 1000 カウントは 256000 として送信され、ゲイン 4.5 は 1152 として送信されます。
  • 位置はエンコーダ カウントで表され、速度はカウント/秒で表されます。ホストは、方向やゼロ位置の変更を含む、ジョイント角度へのあらゆる変換を処理します。
  • ユニキャスト は 1 つのサーボに宛てられたメッセージを意味します。 ブロードキャスト は ID 0xFE を使用し、すべてのサーボに到達します。ブロードキャスト拡張コマンドは応答を生成しません。

例: サーボ ID 1 から 8 バイト機能ブロックを読み取ります。

FF FF 01 04 90 90 08 D2

セレクター は、構成やフィードバックなどの完全なレジスタ ブロックを識別します。拡張子 READ/WRITE と以下に示す正確なブロック サイズを使用してアクセスします。ブロックの一部のみの読み取りまたは書き込みはサポートされておらず、従来の READ/WRITE コマンドはこれらのブロックにアクセスできません。

指示

以下のパラメータ サイズには、パケット ヘッダーとチェックサムは含まれません。応答では、 EXT_STATUS は、サーボの通常のエラー バイトである LEGACY_ERROR とは別に、拡張コマンドが成功したかどうかを報告します。読み取りが成功すると、要求されたデータが EXT_STATUS の後に追加されます。書き込み、その他のコマンド、および失敗した読み取りには追加のデータはありません。

指示 名前 パラメータ ブロードキャスト
0x90 READ selector:u8, count:u8 有用な応答はありません
0x91 WRITE selector:u8, block... 受け入れられません
0x99 GRAVITY 6 バイト (以下) 受け入れられません
0x9A TARGETS session:u16 + 1 – 9 バイトの 6 エントリ 承認されました

命令番号 0x92 、 0x93 、 0x94 、 0x95 、 0x96 、 0x97 、 および 0x98 、およびセレクター 0xA1 、 0xA3 、 0xB0 、 0xBA 、 0xE0 、および 0xF0 は予約されているため、使用しないでください。

Extensionステータス 意味
0 OK
1 無効な長さ、セレクター、またはフィールド値です
2 現在の状態ではコマンドを受け付けられません
3 予約済み
4 予約済み
5 サポートされていない命令

セッションの不一致は状態エラーを返します。従来のエラー バイトと拡張ステータスの両方を検査します。

セッションとシーケンス番号

ホストは各セッションに 1 から 65535 までの番号を割り当て、制御コマンドに含めます。これにより、サーボはコマンドが現在のセッションに属していることを確認できます。起動ごとに新しい番号を選択します。セットアップ番号は永続的に保存されるわけではありません。

シーケンス番号 は、受け入れられたコマンドを順番にカウントするため、ホストとサーボは欠落しているコマンド、繰り返されているコマンド、または順序が乱れているコマンドを識別できます。

TARGETS にはサーボごとのモーション シーケンス カウンタがあります。 GRAVITY には独立したカウンターがあります。トルクイネーブルが制御を開始すると、両方ともゼロから始まります。通常は 1 を最初に送信します。番号は 65535 まで増加し、セッションを終了せずに 0 にラップします。ギャップは許可されます。 10 の後、たとえ 11 が失われたか拒否されたとしても、サーボは 12 を受け入れることができます。現在のコマンドを変更せずに、同じまたは古い番号は拒否されます。

正確に比較するには、 distance = (incoming − accepted) & 0xFFFF を計算します。コマンドが新しいのは、 1 ≤ distance ≤ 32767 の場合のみです。正確に 32768 のジャンプは曖昧で拒否されます。最後に受け入れられたコマンドとのギャップを 32768 未満に保ちます。コマンド履歴が不確実な場合は、トルクをオフにして、新しいセッション ID を準備し、トルクを再度有効にします。以前のセッションまたはカウンタ サイクルからキューに入れられたパケットを再利用しないでください。

受け入れには、有効なフィールド、現在のセンサー読み取り値、および実行可能な動作が必要です。拒否されたコマンドはカウンタを進めません。これらのコマンドは絶対ターゲットを置き換えます。これらはウェイポイントキューではありません。すべてのウェイポイントを訪問するには、各到着を待ってから次の目的地に送信します。

グループターゲットを送信するときは、各サーボのフィードバックを読んで、受け入れられたシーケンスを確認します。各サーボは、そのターゲットを受け入れることができるかどうかを個別に決定します。他の人が動き始める間、1人はそれを拒否するかもしれません。

ターゲット — 0x9A

最初の 2 つのパラメータ バイトには共有セッションが含まれます。以下の各エントリはこのレイアウトになっています。オフセットはそのエントリの先頭からの相対値です。

オフセット 種類 フィールド
0 u8 サーボID、1 – 253
1 u16 このサーボの新しいモーション シーケンス
3 i32 目的地の位置、Q8 カウント
7 u16 最大速度、カウント/秒、ゼロ以外

パラメータの長さは 2 + 9 × entry_count 、最大 56 バイトです。 ID は一意である必要があります。各サーボは、独自のサーボを処理する前に、 のすべての エントリの形式と必須フィールドをチェックします。記載されていないサーボは何も動作しません。リストされたサーボは、そのセッション、シーケンス、準備状況、および動きが制限内に収まるかどうかをチェックします。受け入れられたターゲットはすぐに開始され、置き換えられるか武装解除されるまでアクティブのままになります。 S 字カーブの動作で説明されているように、値は設定された制限に制限されます。

重力 — 0x99

オフセット 種類 フィールド/制約
0 u16 現在のセッション
2 u16 新しい重力シーケンス
4 i16 望ましい重力の作用。大きさ ≤ 設定された出力制限

パラメータの長さはちょうど 6 バイトです。モーターの電源がオンで、ハードウェアの準備ができており、障害が報告されておらず、最近のセンサーの読み取り値を備えた武装セッションが必要です。モーションシーケンスは進みません。要求された値は、交換または解除されるまでアクティブのままです。

クライアントの実装を確認する

長さ、チェックサム、レガシー エラー、Extension ステータスを個別に確認します。リストされた各サーボのフィードバックを通じてグループ TARGETS を確認します。ブロードキャスト送信の成功は受け入れられません。シーケンス履歴が不確実な場合は、古いパケット キューをやみくもに継続するのではなく、トルクを解放して新しいセッションを準備します。

既存のドライバーは、 host/servo-driver/registers/ArmCodec.js および host/servo-driver/bus/ArmExtension.js を通じてエンコードおよびデコードを行います。ファームウェアは firmware/app/arm_extension.c のワイヤ形式を実装します。


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