基本

KeiganMotor は、1バイトずつデータを送信することにより、制御することができます。
1まとまりの制御データ(命令)を送り込むことにより、KeiganMotorにさせる1つの仕事を「タスク」と呼びます。

コマンドのデータ構造は次の形式を取ります。

 

byte [0] [1][2] [3]…[n-3] [n-2] [n-1]
0x00-0xFF uint16_t identifier values uint16_t crc16
説明 コマンド タスク管理用ID 引数
(各コマンドによって長さが異なる)
巡回冗長検査
(データ誤り検出用)

 

単位系

KeiganMotor では、以下の単位系を採用しています。

単位
位置 radian ラジアン
速さ・速度 radian / second ラジアン / 秒
トルク N * m ニュートン・メートル

すなわち、float 型を16進数として変換し、バイト列に分割します。
参考リンク:IEEE 754 浮動小数点数 コンバーター
http://logroid.blogspot.jp/2014/02/ieee754-single-converter.html

 

制御コマンドの例

KM-1 では、無線(Bluetooth Low Energy)の他、有線(I2C, USB)を使って制御することができます。
例えば、KeiganMotorに単純な回転動作させる場合は、以下の順序で制御コマンドを送ります。

次のバイト列を送信すると、モーターは正回転します。
id と crc16 は任意の値で構いません。

(タスク1)

モーターの動作を許可(motorEnable コマンド:0x51)

byte[0] byte[1] byte[2] byte[3] byte[4]
0x51 0 0 0 0

(タスク2)

モーターの速さを設定(speed コマンド:0x58)

byte[0] byte[1] byte[2] byte[3] byte[4] byte[5] byte[6] byte[7] byte[8]
0x58 0x00 0x01 0x3F 0x80 0x00 0x00 0x00 0x00

この例では、byte[3]~[6]に、 (float)1.0 = 0x3F800000 をバイト列に変換したものを入れています。
すなわち、1.0 radian/second の速さをモーターに与えたことになります。
(1 radian / second ≒ 9.55 rpm:1分間の回転数 となります)

(タスク3)

モーターを正回転(runForward コマンド:0x60)

byte[0] byte[1] byte[2] byte[3] byte[4]
0x60 0x00 0x02 0x00 0x00

(タスク4)

モーターの動作を不許可とする(disable コマンド:0x50)

byte[0] byte[1] byte[2] byte[3] byte[4]
0x50 0x00 0x03 0x00 0x00