モーター
キューブは 2 つのモーターを持ち、それぞれが左右の車輪につながっています(参考:各部の名前)。 これらのモーターは以下の特性(characteristic)を使うことで制御できます。
| プロパティ | 値 |
|---|---|
| Characteristic UUID | 10B20102-5B3B-4571-9508-CF3EFCD7BBAE |
| Properties | Write without response, Read, Notify |
| Descriptor | Motor Control |
書き込み操作
モーター制御
以下に示す構成のデータを書き込むことでモーターを制御できます。 次の書き込み操作が行われるまで、モーターは指定した速度で動きつづけます。
| データ位置 | タイプ | 内容 | 例 |
|---|---|---|---|
| 0 | UInt8 | 制御の種類 | 0x01(モーター制御) |
| 1 | UInt8 | 制御するモーターの ID | 0x01(左) |
| 2 | UInt8 | モーターの回転方向 | 0x01(前) |
| 3 | UInt8 | モーターの速度指示値 | 0x64(100) |
| 4 | UInt8 | 制御するモーターの ID | 0x02(右) |
| 5 | UInt8 | モーターの回転方向 | 0x02(後ろ) |
| 6 | UInt8 | モーターの速度指示値 | 0x14(20) |
制御するモーターの ID
制御するモーターの ID を指定します。左のモーターの ID が1で右のモーターの ID が2です。
モーターの ID を指定する場所は 2 箇所ありますが、両方で同じ ID を指定するとエラーになり書き込み操作は無視されます。
モーターの回転方向
直前で指定した ID のモーターに対して回転方向を指定します。
キューブの前進する方向が1で後退する方向が2です。
モーターの速度指示値
直前で指定した ID のモーターに対して回転の速度を指定します。
モーターの速度指示値は0以上255以下の範囲で指定できますが、実際にタイヤの回転速度が変化する有効範囲は8以 上115以下です。速度指示値が8未満の場合、タイヤの回転速度は0 rpmになります。速度指示値が115以上の場合、タイヤの回転速度は494 rpmで一定になります。
速度指示値が8以上115以下の範囲では、速度指示値と実際のタイヤの回転速度は以下のグラフのとおり線形の関係になります。
時間指定付きモーター制御
以下に示す構成のデータを書き込むことで動かす時間を指定してモーターを制御できます。 指定した時間を経過するとモーターは停止します。
| データ位置 | タイプ | 内容 | 例 |
|---|---|---|---|
| 0 | UInt8 | 制御の種類 | 0x02(時間指定付きモーター制御) |
| 1 | UInt8 | 制御するモーターの ID | 0x01(左) |
| 2 | UInt8 | モーターの回転方向 | 0x01(前) |
| 3 | UInt8 | モーターの速度指示値 | 0x64(100) |
| 4 | UInt8 | 制御するモーターの ID | 0x02(右) |
| 5 | UInt8 | モーターの回転方向 | 0x02(後) |
| 6 | UInt8 | モーターの速度指示値 | 0x14(20) |
| 7 | UInt8 | モーターの制御時間 | 0x0A(100 ミリ秒) |
モーターの制御時間
モーターを動かす時間を0以上255以下の範囲で指定します。0は「時間制限無し」を意味し、次の書き込み操作が行われるまでモーターは指定した速度で動きつづけます。1以上255以下の範囲では x10 ミリ秒モーターは動いたあと停止します。
目標指定付きモーター制御
目標となる状態を指定してモーターを制御し、キューブを自律的に移動させることができます。設定する目標は以下の構成になっています。
- 目標地点の Position ID の X 座標
- 目標地点の Position ID の Y 座標
- 目標地点でのキューブの角度 Θ
キューブは中心の X 座標、Y 座標および角度が目標に到達するとモーターを停止し、0x00: 正常終了の応答を返します。もしくは、タイムアウト等のエラーが発生した場合は対応するエラーの応答を返します。応答については目標指定付きモーター制御の応答を参照してください。
なお、目標に到達した状態とは「X 座標および Y 座標の値が 15 以内、角度の差が 4 度以内になった状態」としています。
| データ位置 | タイプ | 内容 | 例 |
|---|---|---|---|
| 0 | UInt8 | 制御の種類 | 0x03(目標指定付きモーター制御) |
| 1 | UInt8 | 制御識別値 | 0x00 |
| 2 | UInt8 | タイムアウト時間 | 0x05(5 秒) |
| 3 | UInt8 | 移動タイプ | 0x00(回転しながら移動) |
| 4 | UInt8 | モーターの最大速度指示値 | 0x50(80) |
| 5 | UInt8 | モーターの速度変化タイプ | 0x00(速度一定) |
| 6 | UInt8 | Reserved | 0x00 |
| 7 | UInt16 | 目標地点の X 座標値 | 0x02bc(700) |
| 9 | UInt16 | 目標地点の Y 座標値 | 0x0182(386) |
| 11 | UInt16 | 目標地点でのキューブの角度 Θ | 0x005a(90 度) |
バイトオーダーはリトルエンディアンです。その他データ構造の表記については、機能の利用 - データ構造の表記をご確認ください。
制御識別値
対応する目標指定付きモーター制御の応答を識別するための値です。ここで設定した値が対応する応答にも含まれます。これによって連続して書き込み操作をするときに対応する応答を識別できます。値の範囲は0以上255以下の範囲で自由に設定できます。
タイムアウト時間
ここで設定した時間が経過してもキューブが目標地点に到達していない場合、キューブは動作を停止し0x01: タイムアウトの応答を返します。
値は0以上255以下の範囲で指定します。単位は秒です。0