GPduino Rev3 コントローラ通信仕様

Rev2からの変更点

Rev2の通信仕様との相違点は、

  • サーボ制御コマンドの変更(サーボのチャンネル数が1チャンネルから3チャンネルに増えたため)
  • サーボ調整コマンドの変更(〃)
  • サーボ調整コマンドの変更(EEPROM書き換えを最小限にするため、調整と保存を別コマンドに)
  • LED制御コマンドの廃止(LEDチャンネルが廃止されたため)
  • アプリの互換性を保つため、パラメータの語順に一貫性を欠く仕様になってしまったので要注意

ボーレート

ボーレートは38400。
(ATmega328P 3.3V 8MHzで十分なタイミング精度が確保できる最高レート)

電文形式

'#'で始まり'$'で終わるアスキー電文とします。'#'と'$'は、STX/ETXの代用です。デバッグのしやすさのためこのようにしています。そのため、本文中で'#'と'$'を用いることはできません。

注意

暴走防止のため、1秒以上コマンド受信が無いとモータは停止します。継続してモータを回転させるためには定期的にコマンドを送信し続けてください。

送信コマンド(Koshian→AVR)

Dコマンド(前進/後退)
  • 書式: #Dxx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき前進、負のとき後退。
  • 例えば、停止は #D00$ 、全速前進は #D7F$ 、全速後退は #D81$ となる。
  • カーモードでは駆動輪を制御する。
  • タンクモードでは左右の駆動輪の並進成分を制御する。
Tコマンド(旋回)
  • 書式: #Txxn$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき中立、正のとき右旋回、負のとき左旋回
  • nは4WSの場合のモード。'0'のとき前輪操舵、'1'のとき同相操舵、'2'のとき逆相操舵、'3'のとき後輪操舵
  • 例えば、中立は #T00$ 、全速右旋回は #T7F$ 、全速左旋回は #T81$ となる。
  • カーモードではステアリングサーボを制御する。
  • タンクモードでは左右の駆動輪の差動成分を制御する。
Mコマンド(1) (モータ個別制御)
  • 書式: #Mnxx$
  • nは'1'または'2'。'1'はモータ1(左)、'2'はモータ2(右)に対応。
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき正転、負のとき反転。
  • 例えば、モータ1の停止は #M100$ 、最大正転は #M17F$ 、最大反転は #M181$ となる。
  • カーモード/タンクモードによらず、モータの個別制御をおこなう。
Mコマンド(2) (モータ一括制御)
  • 書式: #MAxxyy$
  • xxはモータ1(左)、yyはモータ2(右)に対応。
  • xxおよびyyは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき正転、負のとき反転。
  • 例えば、両モータの停止は #MA0000$ 、最大正転は #MA7F7F$ 、最大反転は #MA8181$ となる。
  • カーモード/タンクモードによらず、モータの一括制御をおこなう。
Sコマンド(サーボ制御)
  • 書式: #Sxxn$
  • nは'0'または'1'または'2'。サーボチャンネル0〜2に対応。
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき中立、正のとき正転、負のとき反転。
  • 例えば、チャンネル1の中立は #S001$ 、最大正転は #S7F1$ 、最大反転は #S811$ となる。
  • 旧仕様とのアプリ互換性を保つため、追加されたパラメータは後置されている。そのためMコマンドとは語順が逆であることに注意。
Aコマンド(1) (サーボ極性設定)
  • 書式: #APxn$
  • nは'0'または'1'または'2'。サーボチャンネル0〜2に対応。
  • xは'+'または'-'。'+'は正転、'-'は反転。初期値は正転。
Aコマンド(2) (サーボオフセット調整)
  • 書式: #AOxxn$
  • nは'0'または'1'または'2'。サーボチャンネル0〜2に対応。
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、中央位置のオフセットを調整する。初期値は0。
Aコマンド(3) (サーボ振幅調整)
  • 書式: #AAxxn$
  • nは'0'または'1'または'2'。サーボチャンネル0〜2に対応。
  • xxは符号なし8ビット整数(範囲は0〜255)の16進文字列で、振れ幅を調整する。初期値は90(0x5A)。
Aコマンド(4) (サーボ設定値保存)
  • 書式: #AS$
  • サーボの設定値をEEPROMに保存する。調整の際には必ず最後にこのコマンドを実行すること。
Aコマンド(5) (サーボ設定読み出し)
  • 書式: #AL$
  • サーボの設定値をEEPROMから読み出す。また、その値を送信する。(後述の受信コマンドのAコマンド)
Vコマンド(1) (車両モード読み出し) ※GPduino WiFiのみ対応
  • 書式: #VL$
  • 車両モードの設定値を読み出す。(後述の受信コマンドのVコマンド)
Vコマンド(2) (自動車モードに設定) ※GPduino WiFiのみ対応
  • 書式: #VC$
  • 車両モードを自動車モードに設定する。
Vコマンド(3) (戦車モードに設定) ※GPduino WiFiのみ対応
  • 書式: #VT$
  • 車両モードを戦車モードに設定する。

受信コマンド(AVR→Koshian)

Bコマンド (バッテリー電圧)
  • 書式: #Bxxx$
  • xxxは符号なし10ビット整数(0〜1023)の16進文字列。
  • この数値を X とすると、ボード標準の分圧抵抗の場合、(X / 1023) * (3.3 * 2) V がバッテリー電圧。
Aコマンド (サーボ設定読み出し)
  • 書式: #ALabbccdeeffghhii$
  • サーボの設定値をEEPROMから読み出す。また、その値を送信する。(後述の受信コマンドのAコマンド)
  • a, d, gは、サーボチャンネル0〜2の極性。'+'または'-'。'+'は正転、'-'は反転。
  • bb, ee, hhは、サーボチャンネル0〜2のオフセット。符号つき8ビット整数(範囲は-127〜+127)の16進文字列。
  • cc, ff, iiは、サーボチャンネル0〜2の振幅。符号なし8ビット整数(範囲は0〜255)の16進文字列。
Vコマンド(1) (自動車モード) ※GPduino WiFiのみ対応
  • 書式: #VC$
  • 現在の車両モードは自動車モード。
Vコマンド(2) (戦車モード) ※GPduino WiFiのみ対応
  • 書式: #VT$
  • 現在の車両モードを戦車モード。