重心を支えている足の位置を固定するようにした。先のものは、ロボットの原点を動かないようにしたので、形はサーボによる決まるものだが、不自然だった。
ただし、側面図では、前方へ歩いて行ってしまうし、正面図では、スクリプトが微妙に(こちら側に向いて)左側に開きが大きくしてあるものだから左側に動いて行ってしまう(笑)
日別: 2017年7月27日
足郎2のシミュレーターの第1段階、ほぼ出来上がる
この間、計算に次ぐ計算をやってきた、足郎2のシミュレーターだが、スクリプトからサーボを動かして、ロボットの形を作るところまでは、ほぼ出来上がった。このシミュレータに、COSMで書いたスクリプトを読み込ませて、動きを確認する程度には、実行させることができる。実際のロボットの動きにどれだけ近くなるかは、ロボットの方を組み上げてみないとわからないが、そちらは、業者に部品を作ってもらっているところなので、まず、シミュレータの動きを確認するしかない。
計算式が複雑なので、プログラムのバグを取るのに苦労した。
ただし、まだ、重心と着地した足の関係など、グローバルな座標で描いてはいない。ロボットの形をシミュレーションしているだけである。この動きを、重心との関係で、グローバルな座標に変換して表示するのはこれからの作業である。
このシミュレーターに足郎1を動かしたときのCOSMスクリプトを読み込ませて、動かしてみた結果が以下の動画である。
左が側面から見たもので、右側が正面から見たものであり、右足が緑色で、左足が青である。
足郎1には、膝がなかったので膝が動くスクリプトではないが、膝を動かすスクリプトも次に書いてみる。以下に、上記の動画の元になったスクリプトを記載しておく。
####################################### # ashiro1-13.cosm # 逆振り子二足歩行 # 2017年7月26日 作成 ####################################### %defspeed normal { interval:3 steps:20 } %defspeed fast { interval:3 steps:10 } ##################################### # かなり基本的なパラメータ # いじるパラメータはここに置いておく ##################################### # ただの逆振り子だと、40にすると倒れる %param invpen_angle_right 35 %param invpen_angle_left 40 # 逆足を少し開いて、縮み加減にしないと倒れる %param open_inv_right 15 %param open_inv_left 15 # 足を前に(わずかに)振り出す %param step_forward 7 ###################################### # 単純逆振り子 ###################################### %defangles right_invpen { #右に傾ける動きをする RightUpperRight:-$invpen_angle_right+$open_inv_right RightUpperLeft:+$invpen_angle_right-$open_inv_right LeftUpperRight:-$invpen_angle_left LeftUpperLeft:$invpen_angle_left # 上の動きに合わせて、足も角度をつけて RightLowerRight:$invpen_angle_right RightLowerLeft:-$invpen_angle_right LeftLowerRight:$invpen_angle_left LeftLowerLeft:-$invpen_angle_left } %defangles left_invpen { #左に傾ける動きをする RightUpperRight:$invpen_angle_right RightUpperLeft:-$invpen_angle_right LeftUpperRight:$invpen_angle_left-$open_inv_left LeftUpperLeft:-$invpen_angle_left+$open_inv_left # RightLowerRight:-$invpen_angle_right RightLowerLeft:$invpen_angle_right LeftLowerRight:-$invpen_angle_left LeftLowerLeft:$invpen_angle_left } ###################################### # 前へ ###################################### %defangles left_forward { #左足を前に出す RightUpperFront:-$step_forward RightUpperBack:$step_forward LeftUpperFront:$step_forward LeftUpperBack:-$step_forward } %defangles right_forward { #右足を前に出す RightUpperFront:$step_forward RightUpperBack:-$step_forward LeftUpperFront:-$step_forward LeftUpperBack:$step_forward } ###################################### # 実行手続きの定義 # 即実行コマンドから最初に呼び出されるという意味で # メインルーチン # 初期歩行 ###################################### %defexec walk { #stand:all exec:walk_sub,10 } ###################################### # サブルーチンの定義:通常歩行 ###################################### %defexec walk_sub{ speed:normal setAngle:right_invpen speed:fast setAngle:left_forward speed:normal setAngle:left_invpen speed:fast setAngle:right_forward } ################################# # 唯一の即実行プログラム:他は全て定義 # 全てはここから始まる ################################# %exec walk 1 #################################