モーター
キューブは 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以下の範囲で指定できますが、モーターの速度指示値と実際のタイヤの回転速度の関係は以下のグラフのとおりです。
時間指定付きモーター制御
以下に示す構成のデータを書き込むことで動かす時間を指定してモーターを制御できます。 指定した時間を経過するとモーターは停止します。
| データ位置 | タイプ | 内容 | 例 |
|---|---|---|---|
| 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のみ例外的に 10 秒になります。タイムアウト無しの設定はできません。
移動タイプ
目標地点までのキューブの移動方法を以下の 3 つのタイプ から 1 つ選択します。移動せずその場で回転する場合はどれを選んでも同じ動きになります。
| 値 | 移動方法の説明 |
|---|---|
0 | 回転しながら移動 |
1 | 回転しながら移動(後退なし) |
2 | 回転してから移動 |
移動タイプ毎の動き方: 左から0, 1, 2
モーターの最大速度指示値
キューブが動作可能な最大の速度指示値を指定します。キューブは指定された以上の速度は出さずに動きます。
値は 10 以上 255 以下の範囲で有効であり、 10 未満を指定した場合は命令が破棄され0x06: 非サポートの応答を返します。速度指示値とタイヤの回転速度との関係はモーターの速度指示値と同じです。
モーターの速度変化タイプ
目標地点までのキューブの移動速度の変化を以下の 4 つのタイプから 1 つ選択します。
| 値 | 速度変化タイプ |
|---|---|
0x00 | 速度一定 |
0x01 | 目標地点まで徐々に加速 |
0x02 | 目標地点まで徐々に減速 |
0x03 | 中間地点まで徐々に加速し、そこから目標地点まで減速 |
目標地点の X 座標・ Y 座標
目標地点の X 座標と Y 座標を指定します。値の範囲はどちらも0x0000以上0xffff以下で、0xffffのみ「書き込み操作時と同じ」という意味になります。Position ID の印刷と座標の関係については、読み取りセンサー / Position ID / 座標(X 座標、Y 座標)を参照してください。
目標地点でのキューブの角度 Θ
キューブは目標の X 座標・Y 座標に到達した後、ここで設定した角度を目標として回転します。値は 16bit のうち下位 13bit は0x0000以上0x1ffff以下の範 囲で角度を指定します。また上位 3bit は以下のいずれかを指定します。これによって下位 13bit の表す角度の意味と動き方が変わります。
| 上位 3bit の値 | 角度の意味 | 回転方向 |
|---|---|---|
0x00 | 絶対角度 | 回転量が少ない方向 |
0x01 | 絶対角度 | 正方向 |
0x02 | 絶対角度 | 負方向 |
0x03 | 相対角度 | 正方向 |
0x04 | 相対角度 | 負方向 |
0x05 | 角度指定なし | 回転しない |
0x06 | 書き込み操作時と同じ | 回転量が少ない方向 |
「絶対角度」の場合、角度は Position ID の上での向きそのものを意味します。また「相対角度」の場合、角度はキューブが目標地点に到着したときの状態を基準とした相対的ものを意味します。0x05: 角度指定なしの場合は下位 13bit の情報は無視され、目標地点の X 座標・Y 座標に到達したら回転せずモーター制御を終了します。0x06: 書き込み操作と同じの場合は下位 13bit の情報は無視され、書き込み操作と同じ向きになるように回転します。
Position ID 上での角度や回転方向については読み取りセンサー / Position ID / 角度を参照してください。