ロボットに複雑な動きをさせるためには、サーボモーターを自在に制御しなければならない。膝なしロボット足郎1号にも、すでに16個のサーボモーターがついている。次の2号では、足だけなのにその倍、32個のサーボをつける予定だ。どう制御するのか。今は、C++のプログラムを書いて実行させている。引数を色々変えれば、ここのサーボ、あるいはサーボグループを変化させることはできるし、また、一連のプログラムの実行も可能だが、結局非常に面倒になっている。
そこで、こうした多数のサーボを制御するためのコンピュータ言語を作ろうと思う。例えばこんな感じである。
(この言語の実際の応用例)
############################## # 足郎の制御のためのプログラム # で始まる行はコメントになる ############################## # 角度の定義、定義の名前、 #定義の内容を { } 内に書き込む # デリミタは基本、空白あるいはタブ # 定義やコマンドの順序は関係ない # ただし、 { }内記述の順番は意味を持つ %defangles leftflac { #左の項の関節名は予約語 LeftUpperLeft:12 LeftUpperRight:12 LeftLowerRight:12 LeftLowerLeft:12 RightUpperRight:12 RightUpperLeft:12 RightLowerRight:12 RightLowerLeft:12 } %defangles rightflac { RightUpperRight:12 RightUpperLeft:12 RightLowerLeft:12 RightLowerRight:12 LeftUpperLeft:12 LeftUpperRight:12 LeftLowerLeft:12 LeftLowerRight:12 } %defangles foreflac { LeftUpperFront:12 LeftUpperBack:12 LeftLowerFront:12 LeftLowerBack:12 RightUpperFront:12 RightUpperBack:12 RightLowerFront:12 RightLowerBack:12 } %defangles backflac { RightUpperFront:12 RightUpperBack:12 RightLowerFront:12 RightLowerBack:12 LeftUpperFront:12 LeftUpperBack:12 LeftLowerFront:12 LeftLowerBack:12 } #といった感じで、ここでは関節グループだが、 # 個別的なサーボの制御を書いても良い # このような関節角度の定義を書き連ねる # 実行の定義 # 使えるコマンドは今の所 # setAngle, speed, delay, stand, relax %defexec walk1 { # この実行定義はループさせないで # exec は、再帰的呼び出しを可能にするか # 無限ループを避けなければならない # 次のものは繰り返させる # カンマの前後に空白を入れないこと exec:walk2,8 # 実行が終了したら # 立たせる stand:all } %defexec walk2 { speed:10 setAngle:leftflac # 100ミリ秒待機 delay:100 } # 実行させる # exec 実行コマンド # walk1 定義されている実行内容名 # 1回だけ実行する %exec walk1 1 ######## 以上、サンプル ###########
ファイルにして一気に実行もできて、また、一旦読み込んだら、コマンドプロンプトからインタープリターのようにも実行できるようにしたらいい。