Dynamixelシリーズ共通の通信プロトコルです。
異なるデバイスであっても、IDが重複しなければ同一ネットワークでの運用が可能です。

パケット anchor.png

ホスト(マスター)及びデバイス(スレーブ)はパケット単位で通信を行い、ホストからデバイスへ送信する「インストラクションパケット」、デバイスからホストへ送信する「ステータスパケット」の2種類あります。

DxProt1.png
Page Top

ID anchor.png

複数のデバイスを同じノードに接続して運用するには、各々を区別するIDを使用します。ホストは任意のIDを持ったインストラクションパケットにて通信するデバイスを指定でき、またそのIDに従ったデバイスのみがステータスパケットをホストへ返信し、必要な命令を実行します。

DxProt2.png

複数のデバイスに同じID値が付けられているとパケットの衝突が起こり、通信障害が生じます。そのため、1つのネットワークノード内には同一IDを持つデバイスが複数存在してはなりません。

Page Top

インストラクションパケット構成 anchor.png

インストラクションパケットはホストからデバイスへ命令するためのパケットです。パケット構造は以下の通りです。なお、コントロールテーブル、使用可能なインストラクションセットに関しては後述します。

0xFF 0xFF ID LENGTH INSTRUCTION PARAMETER 1・・・PARAMETER N CHECKSUM

  • 0xFF 0xFF
    先頭に位置している2バイトはパケットの始まり(ヘッダ)を意味し、2バイトともに16進数で0xFF固定です。
  • ID
    送信先のデバイスのIDを指定します。DynamixelのIDは通常0x00~0xFDまで(254台)指定できます。
    また、0xFEは接続されている全デバイスを指定するBroadcast IDとなり、IDを0xFEに設定したパケットは全てのデバイスにて処理されます。なお、ブロードキャスト送信時はステータスパケットが返信されません。
  • LENGTH
    「Parameter数(N) + 2」を指定します。
  • INSTRUCTION
    インストラクションを指定します。
  • PARAMETER 1~N
    インストラクションに従った追加情報を指定します。
  • CHECKSUM
    CHECKSUMの計算方法は次の通りです。
    CHECKSUM = ~(ID+LENGTH+INSTRUCTION+PARAMETER1+… +PARAMETER N) 計算された値が255以上なら、下位8ビットがCHECKSUMの値となります。(「~」はnot演算子の意)
Page Top

ステータスパケット構成 anchor.png

ステータスパケットはデバイスがインストラクションパケットを受信した後、その応答としてホストへ返信するパケットです。パケット構造は以下の通りです。

0xFF 0xFF ID LENGTH ERROR PARAMETER 1・・・PARAMETER N CHECKSUM

  • 0xFF 0xFF
    先頭に位置している2バイトはパケットの始まり(ヘッダ)を意味し、2バイトともに16進数で0xFF固定です。
  • ID
    パケットを返信するDynamixelのIDです。
  • LENGTH
    「Parameter数(N) + 2」を返します。
  • ERROR
    デバイスの動作中に生じたアラームの状態を表します。該当アラームがある場合はそのビットが1になります。
    Bit名称内容
    Bit7--
    Bit6Instruction Error未定義のインストラクションが指定された、もしくはreg_writeなしでactionが指定された
    Bit5Overload Error指定された最大トルクで現在の負荷を制御できない
    Bit4Checksum Errorインストラクションパケットのチェックサムが正しく無い
    Bit3Range Errorパラメータの設定範囲を超えた
    Bit2Overheating Error内部温度が設定温度を超えた
    Bit1Angle Limit ErrorAngle Limitの範囲外にGoal Positionが指定された
    Bit0Input Voltage Error電源電圧が指定動作電圧の範囲を超えた
  • PARAMETER 1~N
    インストラクションに従った追加情報を返します。
  • CHECKSUM
    CHECKSUMの計算方法は次の通りです。
    CHECKSUM = ~(ID+LENGTH+INSTRUCTION+PARAMETER1+… +PARAMETER N) 計算された値が255以上なら、下位8ビットがCHECKSUMの値となります。(「~」はnot演算子の意)
Page Top

コントロールテーブル anchor.png

デバイスの内部機能及び設定はメモリマップとして提供され、インストラクションパケットを使用して操作されます。デバイスはコントロールテーブルに値を書くことで操作され、状態はコントロールテーブルから値を読むことで確認します。

Page Top

インストラクションセット anchor.png

以下が使用可能なインストラクションです。

InstructionFunctionValueNumber of Parameter
PINGデバイスの死活確認0x010
READ_DATAコントロールテーブルから読み出し0x022
WRITE_DATAコントロールテーブルへ書き込み(即時反映)0x032~
REG_WRITEコントロールテーブルへ書き込み(保留)0x042~
ACTIONREG_WRITEで保留された値を反映0x050
RESETデバイスのコントロールテーブルを出荷時の値に初期化0x060
SYNC_WRITE複数デバイスの同一コントロールテーブルへの一括書き込み(即時反映)0x834~
Page Top

WRITE_DATAインストラクション anchor.png

コントロールテーブルへデータを書き込みます。
Dynamixelの場合コントロールテーブルのStatus Return Level(Adress16)が2に設定されている場合にのみステータスパケットを送信します。

LENGTH : Parameter数(N) + 2
INSTRUCTION : 0x03
PARAMETER 1 : 書き込むデータの先頭アドレス
PARAMETER 2 : 書き込む最初のデータ
PARAMETER N+1 : 書き込むN番目のデータ

例)接続されているDynamixelのIDを1に設定
コントロールテーブルのAddress3に1を書き込みます。IDはBroadcast ID(0xFE)を使って送信します。

インストラクションパケット : 0xFF 0xFF 0xFE 0x04 0x03 0x03 0x01 0xF6

Broadcast ID(0xFE)で送信したため、ステータスパケットは返ってきません。

Page Top

READ_DATAインストラクション anchor.png

コントロールテーブルのデータを読み出します。
Dynamixelの場合コントロールテーブルのStatus Return Level(Adress16)が2に設定されている場合にのみステータスパケットを送信します。

LENGTH : 0x04
INSTRUCTION : 0x02
PARAMETER 1 : 読み込むデータの先頭アドレス
PARAMETER 2 : 読み込むデータの長さ

例) IDが1のDynamixelの内部温度(Address 0x2B 1byte)を読み込む

インストラクションパケット : 0xFF 0xFF 0x01 0x04 0x02 0x2B 0x01 0xCC

ステータスパケット : 0xFF 0xFF 0x01 0x03 0x00 0x20 0xDB

Page Top

REG_WRITEインストラクション anchor.png

WRITE_DATAとほぼ同じですが、REG_WRITEインストラクションを受け取ると、デバイスはその値を即時反映せずに保留します。その際、Dynamixelの場合はRegistered Instruction(Address44)を1に設定します。その後、ACTIONインストラクションを受け取ると保留された値が反映されます。
ACTIONインストラクションが受信されるまで、保留された値は永続的に反映されません。

LENGTH : Parameter数(N) + 2
INSTRUCTION : 0x04
PARAMETER 1 : 書き込むデータの先頭アドレス
PARAMETER 2 : 書き込む最初のデータ
PARAMETER 3 : 書き込む2番目のデータ
PARAMETER N+1 : 書き込むN番目のデータ

Page Top

ACTIONインストラクション anchor.png

REG_WRITEで格納されたインストラクションを実行します。

LENGTH : 0x02
INSTRUCTION : 0x05
PARAMETER : なし

Page Top

PINGインストラクション anchor.png

ノード中にある特定IDを持つDynamixelの存在を確認するときに使用します。指定されたIDを持ったDynamixelは、Broadcast IDを使用している、またはStatus Return Level(Adress16)に関わらず常にステータスパケットを返します。

LENGTH : 0x02
INSTRUCTION : 0x01
PARAMETER : なし

例) IDが1のDynamixelへPINGを行なう

インストラクションパケット : 0xFF 0xFF 0x01 0x02 0x01 0xFB

ステータスパケット : 0xFF 0xFF 0x01 0x02 0x00 0xFC

Page Top

RESETインストラクション anchor.png

デバイスのコントロールテーブルの値を出荷時の初期値に戻します。

LENGTH : 0x02
INSTRUCTION : 0x06
PARAMETER : なし

例) IDが0のDynamixelを出荷時の設定に戻す

インストラクションパケット : 0xFF 0xFF 0x00 0x02 0x06 0xF7

ステータスパケット : 0xFF 0xFF 0x00 0x02 0x00 0xFD

RESETを実行した後、DynamixelのIDが1に変わっていることに注意して下さい。

Page Top

SYNC_WRITEインストラクション anchor.png

同時に複数のデバイスのコントロールテーブルへ個別のデータを書き込みます。
1つのインストラクションで複数のデバイスへ書き込みを行えるため、個々にWRITE_DATAインストラクションを送信するよりも通信にかかるオーバヘッドを軽減できる他、値が反映されるタイミングをデバイス間で同期化できます。なお、書き込むアイテムのアドレスとデータ長はすべてのデバイスで共通となります。

ID : 0xFE
LENGTH : (L+1) * N+4 (L : 各Dynamixelのデータ長、N : Dynamixelの個数)
INSTRUCTION : 0x83
PARAMETER 1 : 書き込むデータの先頭アドレス
PARAMETER 2 : 書き込むデータの長さ
PARAMETER 3 : 1番目のDynamixelのID
PARAMETER 4 : 1番目のDynamixelの書き込む1番目のデータ
PARAMETER 5 : 1番目のDynamixelの書き込む2番目のデータ


PARAMETER L+3 : 1番目のDynamixelの書き込むL番目のデータ
PARAMETER L+4 : 2番目のDynamixelのID
PARAMETER L+5 : 2番目のDynamixelの書き込む1番目のデータ
PARAMETER L+6 : 2番目のDynamixelの書き込む2番目のデータ


PARAMETER 2L+4 : 2番目のDynamixelの書き込むL番目のデータ

例) 4個のDynamixelに以下の位置と速度を設定
ID0のDynamixel : スピード0x150でポジション0x010へ
ID1のDynamixel : スピード0x360でポジション0x220へ
ID2のDynamixel : スピード0x170でポジション0x030へ
ID3のDynamixel : スピード0x380でポジション0x220へ

インストラクションパケット : 0xFF 0xFF 0xFE 0x18 0x83 0x1E 0x04 0x00 0x10 0x00 0x50 0x01 0x01 0x20 0x02 0x60 0x03 0x02 0x30 0x00 0x70 0x01 0x03 0x20 0x02 0x80 0x03 0x12

Broadcast IDを使ったのでステータスパケットは返ってきません。


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2011-07-04 (Mon) 21:45:31 (JST) (4019d)