暫く作業をお休みしていたが、これまで作った基板を組み合わせて、人の通行を感知して挨拶する挨拶ロボットを作る。
そこで新たらしく必要になるのがロボットを制御する方法、即ちサーボモータによるロボットの動作とメロディ・音声を同期させる手法及びその記述法である。最初のステップとしてインテグレーション1で作ったサーボ制御ユニットのコマンドを次の様に整理した。
<nn>A - Rotate Ch.1 to direction <nn>.(<nn>=-90..0..90)
<nn>B - Rotate Ch.2 to direction <nn>.(<nn>=-90..0..90)
<nn>C - Rotate Ch.3 to direction <nn>.(<nn>=-90..0..90)
<nn>a - Rotate Ch.1 <nn>degrees.(<nn>=-90..0..90)
<nn>b - Rotate Ch.2 <nn>degrees.(<nn>=-90..0..90)
<nn>c - Rotate Ch.3 <nn>degrees.(<nn>=-90..0..90)
<nn>x - Set Ch.1 speed to <nn>.(<nn>=1..253)
<nn>y - Set Ch.2 speed to <nn>.(<nn>=1..253)
<nn>z - Set Ch.3 speed to <nn>.(<nn>=1..253)
<mm>s - Set all speed to <mm>.(<mm>=1..253)
<m>S - Set all speed to level <m>. (<m>=0..9)
Z - Rotate Ch.1,2,3 to origin(0,0,0).
> - Wait Idle
$ - Abort
e - Echo OFF(default)
E - Echo ON
i - Idling OFF(default)
I - Idling ON
v - Show software version.
V - Show configuration data.
これらのサーボの制御コマンドは制御モジュールに後置記法(逆ポーランド記法)で与える。つまり改行を待たずアルファベットや記号のコマンドを入力した時点で即動作する。いちいち改行を入れる必要が無いので連続的な指示が可能である。
メロディや音声に同期してサーボユニットへ指示を行うための記法を次の様にした。
[A:B:C](D)E
ここでサーボへの指示は[]の中に記述し、メロディは()の中に記述する。つまりAはサーボの事前処理、Bがサーボの動きの記述、Cがサーボの終了処理、Dはメロディ、Eが音声メッセージである。例えば、
"[200sZ>5s:90A90C>-90A-90C>:$Z>](@j)ohayo"
と記述すると、
- スピード200で原点移動、 その後スピードを5に変更(A部)
- 「@j」で定義されるメロディを演奏(D部)
- その後「おはよう」と発声(E部)
- 2,3を行っている間にチャネル1とチャネル3のサーボモータを原点から+90度へ、次に-90度へ回転(B部)
- 発声が終了するとともにサーボの回転を停止し原点へ移動(C部)
のように動作する。こういった1行をイベント毎に用意し、実行すればよい。
(続く)
0 件のコメント:
コメントを投稿