Motion interpreter モジュールの操作方法です。インストラクションを指定する関数で指定(入力)することにより、Motion interpreterを動かします。
◀ この記事の前に: Motion interpreter( 概要 )
▶ この記事の次に: Motion interpreter( コード )
概 要
Motion interpreterは、サーボモータの操作をおこないます。アプリケーションやリモートコントローラからの文字列の指示により制御を開始します。
操作の概要は以下のとおりです。
- サーボモータの直接操作
- シーケンサの開始
- 基底速度の調整
- 動作の停止
- シーケンスの書き込み
Motion interpreterは、サーボモータの操作を文字列(コマンド)により統合的に行います。信号( 言葉 )により動作を制御します。個々のサーボモータの単独制御、協調運動制御、協調運動制御の手順の書き込み、全体速度( テンポ )の設定、強制停止など、運動に関わるものを一元的に制御します。下位にMotion Sequencer( 協調運動制御 )があります。
操作方法
操作指示( Motion instructions )は以下のとおりです。
シーケンスの開始
Execute sequence
概 要:
あらかじめ書き込まれたシーケンスを指定して開始する。シーケンスが実行中の場合はそのシーケンスが終了した時点で開始する。( 繰り返しや次のシーケンスの実行をしている場合は、新しいシーケンスを開始する前に指定したシーケンスを開始する。 )
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): eN [ enter ]
- e: コマンド
- N: シーケンス番号
例) e2 シーケンス2 を開始
シーケンスの強制開始
Forced execute sequence
概 要:
あらかじめ書き込まれたシーケンスを指定して開始する。シーケンスが実行中の場合はそのシーケンスを中断して新しいシーケンスを開始する。
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): fN [ enter ]
- f: コマンド
- N: シーケンス番号
例) f2 シーケンス2 をすぐに開始
シーケンスの停止
Quit sequence
概 要:
シーケンスをすぐ停止する。
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): q [ enter ]
q: コマンド
サーボモータの直接操作
Move servomotor
概 要:
指定したサーボモータを指定した角度にする。サーボモータの電力供給を ON / OFF する。
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): mCA [ enter ]
- m : コマンド
- C: 操作対象のサーボモータ、またはサーボモータの電源
文字列で指定 hd:頭部、ar:右腕、Ir:右脚、fr:右足 al:左腕、ll:左脚、fl:左足、ps:電源
小文字で指定します。 - A: 操作する位置( 移動後の位置 )、または電源の ON / OFF
・操作する位置の場合
ポジションで指定( -x ~ +x, 0 ~180 )可動範囲で制限される。
可動範囲外を指定した場合は、同じ方向の最大値を指定したものとする。
・電源の ON / OFF
ON: 1 / OFF: 0
例1) mhr0 頭(hr)を 0の位置に移動(m)
例2) mps1 サーボモータの電源を ON
基底速度の設定
Set speed servomotor
概 要:
基底速度の設定を行う。
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): sL [ enter ]
- s: コマンド
- L: 基底速度( 1~10 )
シーケンスの書き込み
Write sequence
概 要:
可変シーケンスを書き込む。
標準構成で搭載しているサンプルプログラムでは、Leafony Blockの USB Leafへの書き込みで使用しています。Arduino IDEのモニタで書き込むことができます。
操 作:
void setMIinstruction( String szInput ) で、インストラクションを指示する。
インストラクション( szInput ): wXXX/ [ enter ]
- w: コマンド
- X: 書き込むシーケンスデータ
XXXは複数のコマンドで構成されるシーケンスデータ - /: 文字列の最後を示す区切り文字
シーケンスデータ( 書き込み用 )
概 要:
シーケンスデータは同じでも、書き込み用とメモリ内の仕様( 表現 )は異なります。
書き込み用は通信で使用することもあるため、できるだけ短縮化しています。以下のとおりです。
- ASCIIで通信することも想定して文字列(テキスト)
- ひとつのコマンドで 4文字( 処理しやすいように固定、構造化 )
- サーボモータの指定と制御コマンドの同居
- 数値データを16進数で表記( 同じ桁数で10進数より多くの数字を扱える )
- マイナス数値にオフセットを付加して正数化( 同じ桁数で多くの数字を扱える )
以下は、書き込み用のシーケンスデータの仕様です。文字列であることにご注意ください。
仕 様:
シーケンスデータ: XXX
X はコマンドです。シーケンスデータはコマンドを複数並べたものです。
全体の文字数( char / 桁 )の上限は 150文字です。プログラムの SV_SQ_WRITABLE_CMDMAX で定義しています。
コマンド( X )は以下のとおりです。文字列であることにご注意ください。
CAAW
- C: 操作対象のサーボモータ( HD, AR, AL, LR, LL, FR, FL )またはシーケンス制御コマンド
- AA: 操作する角度( 移動した後の角度 )ポジションで指定、HEX( 16進数 )2桁
- W: 次のコマンド実行までの時間( 0で連続動作 )
C の詳細
C の詳細です。Cは1桁の文字です。
C | 名 称 | 対象 / 制御 |
---|---|---|
0 | – | ダミー |
1 | SV_AR | 右 腕 |
2 | SV_FR | 右 足 |
3 | SV_LR | 左 脚 |
4 | SV_HD | 頭 部 |
5 | SV_LL | 左 脚 |
6 | SV_FL | 右 脚 |
7 | SV_AL | 左 腕 |
P | SV_CMD_POWER | 電 源 |
S | SV_CMD_SET_SPEED | 基底速度を変更 |
F | SV_CMD_FINISH | シーケンスの終了 |
L | SV_CMD_LOOP | シーケンスを繰り返す |
N | SV_CMD_NEXT | 次のシーケンスを開始 |
AAの詳細
AAの詳細は以下のとおりです。設定する値は2桁の16進数表現です。
C | 名 称 | AAの値 |
---|---|---|
0 ~ 8 | SV_HD, …. SV_FL | サーボモータの角度( 正数化したポジションによる指定 ) |
P | SV_CMD_POWER | ON: 1 / OFF: 0 |
S | SV_CMD_SET_SPEED | 設定する基底速度 |
F | SV_CMD_FINISH | 0 |
L | SV_CMD_LOOP | 0 |
N | SV_CMD_NEXT | 次に開始するシーケンス |
サーボモータの角度( ポジションによる指定 )
ポジションとはサーボモータそのものの角度でなく、個々のサーボモータの取付位置や方向を考慮したロボットの部位としての角度です。サーボモータそのものの角度と分けるために「ポジション」と呼びます。単位は「度」になります。小数点以下の設定はできません。
サーボモータの角度を正数化
ポジションで表記した場合、腕の角度は 0度 ~ 180度 が可動範囲となります。頭部(首)は正面を 0度として左右で ±90度で可動範囲は -90度 ~ +90度になります。このままの数値範囲で使用すると -90度 ~ 180度となり2桁に収まりません。
16進数 2桁( 0 ~ 255 )に収めるために角度が負数になるサーボモータの設定値には 90を加算して 0 ~ 180に収めるように換算します。その後、16進数 2桁の文字表記に変換します。
基底速度
シーケンスの進行の基準となる速度です。個々のサーボモータを時間の進行とともに制御することがシーケンスですが、その時間の進行を変えることができます。時間の進行を早くすると全体の動作が早くなり、時間の進行を遅くすると全体の動作が遅くなります。
ここでは基底速度の単位で表記します。( 1 ~ 10 )
詳しくはこちらをご覧ください。
W の詳細
W の詳細は以下のとおりです。設定する値は1桁の16進数表現です。
ここの間隔(時間)の単位はプログラムで既定した値です。
C | 名 称 | Wの値 |
---|---|---|
0 ~ 8 | SV_HD, …. SV_FL | 次のコマンドを開始するまでの間隔 0 の場合は連続実行 |
P | SV_CMD_POWER | 次のコマンドを開始するまでの間隔 0 の場合は連続実行 |
S | SV_CMD_SET_SPEED | 0 |
F | SV_CMD_FINISH | 0 |
L | SV_CMD_LOOP | 0 |
N | SV_CMD_NEXT | 0 |
次のコマンドを開始するまでの間隔
シーケンスの進行の基準となる時間です。個々のサーボモータを時間の進行とともに制御することがシーケンスですが、その時間で次のコマンドを開始するまでの間隔を設定します。この時間を使用することにより、全体の動作バランスを崩すことなく全体の動作の早さを変更することができます。
例
以下は書き込み用シーケンスデータの例です。
36E27000F000
36E2: 3がサーボモータの指定( SV_LR )、角度は 0xE2、待ち時間は 2
7000: 7がサーボモータの指定( SV_AL )、角度は 0x00、待ち時間はなし
F000: シーケンスの終了を表す制御コマンド
インストラクションとしては以下のようになります。最初にシーケンスデータの書き込みであることを示す w を、文字列の最後には文末を示す / を記します。
w36E27000F000/
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- Motion Interpreter( 概要 ): サーボモータ制御の最上位、Motion Interrupter の概要です。
- Motion Interpreter( 操作説明 ): アプリケーションからの操作方法です。( API )
- Motion Interpreter( コード ): コードの詳細を説明します。
- Motion sequencer( 概要 ): サーボモータの協調運動制御の概要です。
- Motion sequencer( 操作説明 ): シーケンスの開始・停止等の操作方法です。( API )
- Motion sequencer( コード ): コードの詳細を説明します。
- シーケンスデータ: シーケンスデータの仕様と作成方法です。
- Servomotor Driver( 概要 ): サーボモータそのものの制御です。( API )
- Servomotor Driver( 操作説明 ): 個々のサーボモータを制御する方法です。
- Servomotor Driver( コード ): コードの詳細を説明します。
- サーボモータの制御( コード詳説 ): バックグラウンド処理の分散化の実現方法です。
- サーボモータ: サーボモータの回路です。ハードウエアの説明です。