メインコンテンツまでスキップ
Version: 2.1.0

モーター

Cube Direction

キューブは 2 つのモーターを持ち、それぞれが左右の車輪につながっています(参考:各部の名前)。 これらのモーターは以下の特性(characteristic)を使うことで制御できます。

プロパティ
Characteristic UUID10B20102-5B3B-4571-9508-CF3EFCD7BBAE
PropertiesWrite without response, Notify
DescriptorMotor Control

書き込み操作#

モーター制御#

以下に示す構成のデータを書き込むことでモーターを制御できます。 次の書き込み操作が行われるまで、モーターは指定した速度で動きづづけます。

データ位置タイプ内容
0UInt8制御の種類0x01(モーター制御)
1UInt8制御するモーターの ID0x01(左)
2UInt8モーターの回転方向0x01(前)
3UInt8モーターの速度指示値0x64(100)
4UInt8制御するモーターの ID0x02(右)
5UInt8モーターの回転方向0x02(後ろ)
6UInt8モーターの速度指示値0x14(20)

制御するモーターの ID#

制御するモーターの ID を指定します。左のモーターの ID が1で右のモーターの ID が2です。 モーターの ID を指定する場所は 2 箇所ありますが、両方で同じ ID を指定するとエラーになり書き込み操作は無視されます。

モーターの回転方向#

直前で指定した ID のモーターに対して回転方向を指定します。 キューブの前進する方向が1で後退する方向が2です。

モーターの速度指示値 #

直前で指定した ID のモーターに対して回転の速度を指定します。 モーターの速度指示値は0以上255以下の範囲で指定できますが、モーターの速度指示値と実際のタイヤの回転速度の関係は以下のグラフのとおりです。

Input Speed and Wheel Speed

時間指定付きモーター制御#

以下に示す構成のデータを書き込むことで動かす時間を指定してモーターを制御できます。 指定した時間を経過するとモーターは停止します。

データ位置タイプ内容
0UInt8制御の種類0x02(時間指定付きモーター制御)
1UInt8制御するモーターの ID0x01(左)
2UInt8モーターの回転方向0x01(前)
3UInt8モーターの速度指示値0x64(100)
4UInt8制御するモーターの ID0x02(右)
5UInt8モーターの回転方向0x02(後)
6UInt8モーターの速度指示値0x14(20)
7UInt8モーターの制御時間0x0A(100 ミリ秒)

モーターの制御時間#

モーターを動かす時間を0以上255以下の範囲で指定します。0は「時間制限無し」を意味し、次の書き込み操作が行われるまでモーターは指定した速度で動きづづけます。1以上255以下の範囲では x10 ミリ秒モーターは動いたあと停止します。

目標指定付きモーター制御 #

目標となる状態を指定してモーターを制御し、キューブを自律的に移動させることができます。設定する目標は以下の構成になっています。

  • 目標地点の Position ID の X 座標
  • 目標地点の Position ID の Y 座標
  • 目標地点でのキューブの角度 Θ

キューブは中心の X 座標、Y 座標および角度が目標に到達するとモーターを停止し、0x00: 正常終了の応答を返します。もしくは、タイムアウト等のエラーが発生した場合は対応するエラーの応答を返します。応答については目標指定付きモーター制御の応答を参照してください。

データ位置タイプ内容
0UInt8制御の種類0x03(目標指定付きモーター制御)
1UInt8制御識別値0x00
2UInt8タイムアウト時間0x05(5 秒)
3UInt8移動タイプ0x00(回転しながら移動)
4UInt8モーターの最大速度指示値0x50(80)
5UInt8モーターの速度変化タイプ0x00(速度一定)
6UInt8Reserved0x00
7UInt16目標地点の X 座標値0x02bc(700)
9UInt16目標地点の Y 座標値0x0182(386)
11UInt16目標地点でのキューブの角度 Θ0x005a(90 度)

制御識別値#

対応する目標指定付きモーター制御の応答を識別するための値です。ここで設定した値が対応する応答にも含まれます。これによって連続して書き込み操作をするときに対応する応答を識別できます。値の範囲は0以上255以下の範囲で自由に設定できます。

タイムアウト時間#

ここで設定した時間が経過してもキューブが目標地点に到達していない場合、キューブは動作を停止し0x01: タイムアウトの応答を返します。 値は0以上255以下の範囲で指定します。単位は秒です。0のみ例外的に 10 秒になります。タイムアウト無しの設定はできません。

移動タイプ#

目標地点までのキューブの移動方法を以下の 3 つのタイプから 1 つ選択します。移動せずその場で回転する場合はどれを選んでも同じ動きになります。

移動方法の説明
0回転しながら移動
1回転しながら移動(後退なし)
2回転してから移動

Movement Type

移動タイプ毎の動き方: 左から0, 1, 2

モーターの最大速度指示値#

キューブが動作可能な最大の速度指示値を指定します。キューブは指定された以上の速度は出さずに動きます。 値の範囲やタイヤの回転速度との関係はモーターの速度指示値と同じです。 ただし8未満(タイヤ回転速度 0 の範囲)を指定した場合、命令は破棄され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 / 角度を参照してください。

複数目標指定付きモーター制御 #

目標指定付きモーター制御を拡張して、複数の目標を指定してモーターを制御できます。例では 3 つの目標を順にたどります。キューブは最後の目標に到達するとモーターを停止し、0x00: 正常終了の応答を返します。もしくは、タイムアウト等のエラーが発生した場合は対応するエラーの応答を返します。応答については複数目標指定付きモーター制御の応答を参照してください。

データ位置タイプ内容
0UInt8制御の種類0x04(複数目標指定付きモーター制御)
1UInt8制御識別値0x00
2UInt8タイムアウト時間0x05(5 秒)
3UInt8移動タイプ0x00(回転しながら移動)
4UInt8モーターの最大速度指示値0x50(80)
5UInt8モーターの速度変化タイプ0x00(速度一定)
6UInt8Reserved0x00
7UInt8書き込み操作の追加設定0x01(追加)
8UInt16目標地点 1 の X 座標値0x0064(100)
10UInt16目標地点 1 の Y 座標値0x0064(100)
12UInt16目標地点 1 でのキューブの角度 Θ0x0000(0 度)
14UInt16目標地点 2 の X 座標値0x00c8(200)
16UInt16目標地点 2 の Y 座標値0x0064(100)
18UInt16目標地点 2 でのキューブの角度 Θ0x005f(90 度)
20UInt16目標地点 3 の X 座標値0x00c8(200)
22UInt16目標地点 3 の Y 座標値0x00c8(200)
24UInt16目標地点 3 でのキューブの角度 Θ0x00b4(180 度)

データ構造#

この書き込み操作のデータは指定する目標の数によって長さが可変な構造になっています。上記の例のようにデータの後ろに目標の情報を「X 座標」「Y 座標」「キューブの角度」の順に並べることで、最大で 29 個の目標を指定できます。目標の情報がない場合、または 29 個を超える場合はエラーとなり、書き込み操作は破棄されます。目標が多くなるにつれてデータサイズも大きくなります。データサイズの大きさによっては BLE の帯域の制約を受けて遅延することがあるのでご注意ください。

制御識別値#

対応する複数目標指定付きモーター制御の応答を識別するための値です。ここで設定した値が対応する応答にも含まれます。これによって連続して書き込み操作をするときに対応する応答を識別できます。値の範囲は0以上255以下の範囲で自由に設定できます。

タイムアウト時間#

ここで設定した時間が経過してもキューブが目標地点に到達していない場合、キューブは動作を停止し0x01: タイムアウトの応答を返します。以降の目標への移動は行いません。1 つの目標に到達するとタイマーはリセットされ、次の目標までのタイムアウトを計算を始めます。値は0以上255以下の範囲で指定します。単位は秒です。0のみ例外的に 10 秒になります。タイムアウト無しの設定はできません。

移動タイプ・モーターの最大速度指示値#

これらに関しては目標指定付きモーター制御と同じです。

モーターの速度変化タイプ#

設定する値の範囲や意味は目標指定付きモーター制御と同じですが、全ての目標を通る経路に対して適用されます。

書き込み操作の追加設定#

書き込み操作を追加した場合の動作を設定する値です。0x00: 上書き0x01: 追加のどちらかを指定します。

通常、モーター制御を実行中に別のモーター制御の書き込み操作をすると実行中の制御を上書き(中断・破棄)し、新たに書き込んだ制御の実行を始めます。0x00: 上書きを指定するとこの動作になります。

一方、0x01: 追加を指定した場合は以下の 2 つの条件を満たす場合に限り1 回分の書き込み操作を保留しておき、実行中のモーター制御が完了した後に自動的に実行を開始できます。

  • 実行中のモーター制御が複数目標指定付きモーター制御である
  • 既に追加した複数目標指定付きモーター制御がない

0x01: 追加を指定しても、実行中のモーター制御が複数目標指定付きモーター制御でない場合は0x00: 上書きと同じ動作になり、実行中のモーター制御を上書き(中断・破棄)します。また、既に追加した複数目標指定付きモーター制御が存在する場合は書き込み操作が破棄され、複数目標指定付きモーター制御の応答において0x07: 書き込み操作の追加不可の応答を返します。

目標地点の X 座標・Y 座標#

設定する値の範囲や意味は基本的に目標指定付きモーター制御と同じです。ただし、2 つ目以降の目標地点において0xffffは「書き込み操作時と同じ」ではなく「1 つ前の目標地点での設定と同じ」になります。

目標地点でのキューブの角度 Θ#

設定する値の範囲や意味は基本的に目標指定付きモーター制御と同じです。ただし、2 つ目以降の目標地点において上位 3bit の0x06は「書き込み操作時と同じ」ではなく「1 つ前の目標地点での設定と同じ」になります。また、「相対角度」は書き込み操作を行ったときのキューブの角度を基準とします。

加速度指定付きモーター制御 #

以下に示す構成のデータを書き込むことでキューブの加速度を指定してモーターを制御できます。また、モーターそれぞれの速度を指定するのではなくキューブとしての並進速度や回転速度を指定して制御できます。例ではゆっくり弧を描きながら 1 秒間移動します。

データ位置タイプ内容
0UInt8制御の種類0x05(加速度指定付きモーター制御)
1UInt8キューブの並進速度0x32(50)
2UInt8キューブの加速度0x05(5)
3UInt16キューブの向きの回転速度0x000F(15 度/秒)
5UInt8キューブの向きの回転方向0x00(正方向)
6UInt8キューブの進行方向0x00(前進)
7UInt8優先指定0x00(並進速度優先)
8UInt8制御時間0x64(1 秒)

キューブの並進速度#

キューブが進行方向に対して進む速度を指定します。値の範囲やタイヤの回転速度との関係はモーターの速度指示値と同じです。

キューブの加速度#

100 ミリ秒ごとの速度の増加分(または減少分)を指定します。キューブの速度が「キューブの並進速度」で指定した速度に到達すると加速を終了します。値は0以上255以下の範囲で指定でき、0の場合は書き込み操作をすると直ちに「キューブの並進速度」で指定した速度になります。また、この設定は加速度指定付きモーター制御を連続して書き込む場合のみ有効です。キューブがその他のモーター制御で動いている場合は無視され、0を設定したときと同様に書き込み操作をすると直ちに「キューブの並進速度」で指定した速度になります。

キューブの向きの回転速度#

キューブの向きの回転速度を指定します。値は0x00以上0xffff以下の範囲で指定でき、単位は[度/秒]です。

キューブの向きの回転方向#

キューブの向きの回転方向を指定します。0が正方向で1が負方向です。Position ID 上での角度や回転方向については読み取りセンサー / Position ID / 角度を参照してください。

キューブの進行方向#

キューブの進行方向を指定します。0が前進する方向で1が後退する方向です。

優先指定#

並進速度と回転速度の組み合わせによって、モーターに指定できる速度指示値の範囲を超えてしまうことがあります。その場合に並進速度と回転速度のどちらを優先するかを指定します。0は並進速度を優先し、回転速度を調整します。1は回転速度を優先し、並進速度を調整します。

制御時間#

モーターを動かす時間を0以上255以下の範囲で指定します。0は「時間制限無し」を意味し、次の書き込み操作が行われるまでモーターは指定した速度で動きづづけます。1以上255以下の範囲では x10 ミリ秒モーターは動いたあと停止します。

通知#

この特性は BLE セントラルに情報を通知します。以下のようにデータの先頭の値で内容を判別できます。

先頭データ情報
0x83目標指定付きモーター制御の応答
0x84複数目標指定付きモーター制御の応答

目標指定付きモーター制御の応答#

目標指定付きモーター制御が書き込まれた後、必ず 1 回だけ以下に示す構成のデータが応答として通知されます。

データ位置タイプ内容
0UInt8制御の種類0x83(目標指定付きモーター制御の応答)
1UInt8制御識別値0x00
2UInt8応答内容0x00(正常終了)

制御識別値#

対応する目標指定付きモーター制御で設定した値です。

応答内容#

応答内容は書き込んだデータ内容や実行結果に応じて以下のいずれかになります。

内容状態
0x00正常終了目標に到達したとき。
モーターは停止する。
0x01タイムアウト指定したタイムアウト時間を経過したとき。
モーターは停止する。
0x02toio ID missedtoio ID がない場所にキューブが置かれたとき。
モーターは停止する。
0x03不正なパラメーターの組み合わせ座標 X, 座標 Y, 角度の全てが現在と同じだったとき。
書き込み操作は破棄される。
0x04不正な状態電源を切られたとき。
応答が通知された後、電源が切れる。
0x05他の書き込み受付目標指定付きモーター制御以外のモーター制御が書き込まれた時。
実行中のモーター制御は終了し、新たに書き込まれたモーター制御が実行される。
0x06非サポート指定したモーターの最大速度指示値が8未満のとき。
書き込み操作は破棄される。

複数目標指定付きモーター制御の応答 #

複数目標指定付きモーター制御が書き込まれた後、必ず 1 回だけ以下に示す構成のデータが応答として通知されます。

データ位置タイプ内容
0UInt8制御の種類0x84(複数目標指定付きモーター制御の応答)
1UInt8制御識別値0x00
2UInt8応答内容0x00(正常終了)

制御識別値#

対応する複数目標指定付きモーター制御で設定した値です。

応答内容#

応答内容は書き込んだデータ内容や実行結果に応じて以下のいずれかになります。

内容状態
0x00正常終了目標に到達したとき。
モーターは停止する。
0x01タイムアウト指定したタイムアウト時間を経過したとき。
モーターは停止する。
0x02toio ID missedtoio ID がない場所にキューブが置かれたとき。
モーターは停止する。
0x03不正なパラメーターの組み合わせ座標 X, 座標 Y, 角度の全てが現在と同じだったとき。
書き込み操作は破棄される。
0x04不正な状態電源を切られたとき。
応答が通知された後、電源が切れる。
0x05他の書き込み受付複数目標指定付きモーター制御以外のモーター制御が書き込まれた時。
実行中のモーター制御は終了し、新たに書き込まれたモーター制御が実行される。
0x06非サポート指定したモーターの最大速度指示値が8未満のとき。
書き込み操作は破棄される。
0x07書き込み操作の追加不可書き込み操作の追加ができないとき
書き込み操作は破棄される。