逆振り子型二足歩行2

歩行の形を少し整えた。
足が上がっていないにもかかわらず、歩いているかのような感じになってきている(笑)
これで、折りたためる膝があれば、普通に歩けると思うのだが。
まあ、もう少し、この膝なし足ロボットで試験しよう。

cosmで書いた制御プログラムは次のようなものだ。何か、それらしい感じを読み取ることができるのかもしれない。

#######################################
# ashiro1-10.cosm
# 逆振り子二足歩行
# 2017年7月4日 作成
# 2017年7月6日 ver.2 
# 傾けた時に、前後の足を戻す操作を入れる
#######################################

%defspeed normal {
    interval:3
    #steps:25
    steps:15
}

%defspeed fast {
    interval:3
    #steps:25
    steps:10
}

# 40にすると倒れる
%param invpen_angle 35
# 揺れの逆足の開き角度
# 揺れた時に、揺れる方向の逆足が少し開いていないと、
# 近づきすぎて倒れる:逆足の吊り上げ角度にもなっている
# %param open_inv 15
%param open_inv 20
# 釣り上げられた足の閉じる方向への角度
%param close_inv 10


######################################
# 0 バージョンは、前後の足の動きを意識しないもの
# 最初の揺らしに使うと思う
######################################
%defangles right_invpen_0 {
#右に傾ける動きをする
# 逆足は開きを少し大きくしないと縮まって倒れる
    RightUpperRight:$invpen_angle-$open_inv
    RightUpperLeft:-$invpen_angle+$open_inv
    LeftUpperRight:$invpen_angle-$close_inv
    LeftUpperLeft:-$invpen_angle+$close_inv
# 上の動きに合わせて、足も角度をつけて
# 床にぴったりさせようとしているが、ちょっとずれている
    RightLowerRight:$invpen_angle
    RightLowerLeft:-$invpen_angle
    # 逆足は開きを少し大きくしないと縮まって倒れる
    LeftLowerRight:$invpen_angle
    LeftLowerLeft:-$invpen_angle
}

%defangles left_invpen_0 {
#左に傾ける動きをする
# 逆足は開きを少し大きくしないと縮まって倒れる
    RightUpperRight:-$invpen_angle+$close_inv
    RightUpperLeft:$invpen_angle-$close_inv
    LeftUpperRight:-$invpen_angle+$open_inv
    LeftUpperLeft:$invpen_angle-$open_inv
#
    RightLowerRight:-$invpen_angle
    RightLowerLeft:$invpen_angle
    LeftLowerRight:-$invpen_angle
    LeftLowerLeft:$invpen_angle
}

######################################
# 1 バージョンは、前後の足の動きの中で使う
# 前のステップで開いた足を戻す、前後の操作が入る
# 後ろに残っている足は、前足が垂直になるまでに
# さらに追加的に開く
%param excess_open 10
######################################
%defangles right_invpen_1 {
#右に傾ける動きをする
# 逆足は開きを少し大きくしないと縮まって倒れる
    RightUpperRight:$invpen_angle-$open_inv
    RightUpperLeft:-$invpen_angle+$open_inv
    LeftUpperRight:$invpen_angle
    LeftUpperLeft:-$invpen_angle
# 上の動きに合わせて、足も角度をつけて
# 床にぴったりさせようとしているが、ちょっとずれている
    RightLowerRight:$invpen_angle
    RightLowerLeft:-$invpen_angle
    # 逆足は開きを少し大きくしないと縮まって倒れる
    LeftLowerRight:$invpen_angle
    LeftLowerLeft:-$invpen_angle
# 前後に開いた足の処理
# 右足が前、左足が後ろの状態で開いている
# 前になっている右足を、直立状態まで戻す
# 後ろ足は、床に設置したまま、傾きを加える
#
    RightUpperFront:0
    RightUpperBack:0
    LeftUpperFront:-$step_length-$excess_open
    LeftUpperBack:$step_length+$excess_open
#
    RightLowerFront:0
    RightLowerBack:0
    LeftLowerFront:-$step_length-$excess_open
    LeftLowerBack:$step_length+$excess_open
}

%defangles left_invpen_1 {
#左に傾ける動きをする
# 逆足は開きを少し大きくしないと縮まって倒れる
    RightUpperRight:-$invpen_angle
    RightUpperLeft:$invpen_angle
    LeftUpperRight:-$invpen_angle+$open_inv
    LeftUpperLeft:$invpen_angle-$open_inv
#
    RightLowerRight:-$invpen_angle
    RightLowerLeft:$invpen_angle
    LeftLowerRight:-$invpen_angle
    LeftLowerLeft:$invpen_angle
#
    RightUpperFront:$step_length+$excess_open
    RightUpperBack:-$step_length-$excess_open
    LeftUpperFront:0
    LeftUpperBack:0
#
    RightLowerFront:$step_length+$excess_open
    RightLowerBack:-$step_length-$excess_open
    LeftLowerFront:0
    LeftLowerBack:0
}


######################################
# 前後に開く(すでに重心が移ったのちの動作)
# 歩幅
%param  step_length 15
# 出した方の足が着地する時に、後ろに倒れないよう
# 少し前かがみ加減の角度で足先を出す
%param  slouch 10
######################################

%defangles right_forward_1 {
# 右に傾いた時に、左足を前に、右足を後ろにする動作
    RightUpperFront:$step_length
    RightUpperBack:-$step_length
    LeftUpperFront:-$step_length
    LeftUpperBack:$step_length
#
    RightLowerFront:$step_length
    RightLowerBack:-$step_length
    LeftLowerFront:-$step_length+$slouch
    LeftLowerBack:$step_length-$slouch
}

%defangles left_forward_1 {
# 左に傾いた時に、右足を前に、左足を後ろにする動作
    RightUpperFront:-$step_length
    RightUpperBack:$step_length
    LeftUpperFront:$step_length
    LeftUpperBack:-$step_length
#
    RightLowerFront:-$step_length+$slouch
    RightLowerBack:$step_length-$slouch
    LeftLowerFront:$step_length
    LeftLowerBack:-$step_length
}


%defexec walk {
    stand:all
    speed:normal
    # 右に倒す、前後の動作は何もしない
    # 半分の動きしかできず、揺れが小さいので
    setAngle:right_invpen_0
    # 揺れは早く動かす
    # 左に倒す
    speed:fast
    setAngle:left_invpen_0
    # 足を開く 
    # 開くときは、normalにする
    speed:normal
    setAngle:left_forward_1
    # 普通の歩行に移る
    exec:walk_sub,3
}

%defexec walk_sub{
    # 逆の動きに対応するバージョン
    # 右に倒す
    speed:fast
    setAngle:right_invpen_1
    # 足を開く
    speed:normal
    setAngle:right_forward_1
    # 左に倒す
    speed:fast
    setAngle:left_invpen_1
    # 足を開く 
    speed:normal
    setAngle:left_forward_1
}

%exec walk 1