ソフトウエア

Motion interpreter( 操作説明 )

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ダミー
1SV_AR右 腕
2SV_FR右 足
3SV_LR左 脚
4SV_HD頭 部
5SV_LL左 脚
6SV_FL右 脚
7SV_AL左 腕
PSV_CMD_POWER電 源
SSV_CMD_SET_SPEED基底速度を変更
FSV_CMD_FINISHシーケンスの終了
LSV_CMD_LOOPシーケンスを繰り返す
NSV_CMD_NEXT次のシーケンスを開始
AAの詳細

AAの詳細は以下のとおりです。設定する値は2桁の16進数表現です。

C名 称AAの値
0 ~ 8SV_HD, …. SV_FLサーボモータの角度( 正数化したポジションによる指定 )
PSV_CMD_POWERON: 1 / OFF: 0
SSV_CMD_SET_SPEED設定する基底速度
FSV_CMD_FINISH0
LSV_CMD_LOOP0
NSV_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 ~ 8SV_HD, …. SV_FL次のコマンドを開始するまでの間隔
0 の場合は連続実行
PSV_CMD_POWER次のコマンドを開始するまでの間隔
0 の場合は連続実行
SSV_CMD_SET_SPEED0
FSV_CMD_FINISH0
LSV_CMD_LOOP0
NSV_CMD_NEXT0

次のコマンドを開始するまでの間隔
シーケンスの進行の基準となる時間です。個々のサーボモータを時間の進行とともに制御することがシーケンスですが、その時間で次のコマンドを開始するまでの間隔を設定します。この時間を使用することにより、全体の動作バランスを崩すことなく全体の動作の早さを変更することができます。

以下は書き込み用シーケンスデータの例です。

36E27000F000

36E2: 3がサーボモータの指定( SV_LR )、角度は 0xE2、待ち時間は 2
7000: 7がサーボモータの指定( SV_AL )、角度は 0x00、待ち時間はなし
F000: シーケンスの終了を表す制御コマンド

インストラクションとしては以下のようになります。最初にシーケンスデータの書き込みであることを示す w を、文字列の最後には文末を示す / を記します。

w36E27000F000/

参考情報

参考になる情報は以下のとおりです。

このホームページ内

他のWebサイト

カテゴリー
最近の記事 おすすめ記事

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

TOP