015 - 階段昇降の考え方
この記事は作成途中です。
今回の内容
前回までの解説でvnoidに搭載されている機能と各プログラムの解説をしました。
今回からは実際にいろいろ開発をしてみて、アスレチックコースのゴールを目指しましょう!!
まずは階段の上り下りからです。
階段の上り下りをする際に平地歩行とは異なる動きが必要になります。
今回はその平地とは違う動きを実現するための考え方を解説します!!
平地歩行と階段歩行の違い
平地で歩く時と階段を歩く時ではどのような違いがあるでしょうか?
みなさんすぐに思いつくと思いますが、着地する高さが違いますね。
階段歩行を実現するためには、これまでとは違い着地位置の高さ情報を
考える必要があります。
さて、着地位置の高さ情報を決定している歩行パラメータですが、myrobot.cpp
にあるstep.climb
という変数です。
現在はこの変数に代入されている値が0になっているため、
当然ですが、ロボットは今支持足があるのと同じ高さに床面があると思っています。
では、このパラメータの値を変えてみましょう。
試しにstep.climb
を0.5に設定してみてください。
どうなったでしょうか?
おそらく、下の動画みたいにめちゃくちゃ足を上げて
虚空に着地しようとしたのではないでしょうか。
そうなっていたらとりあえず着地高さを変えることは成功です。
シンプルに試してみる!!
さて、着地位置の高さを変える方法はわかったので、きっと上れるはずです!!
ロボットを階段の前にスポーンしてみて階段を上ってくれることを期待しながら見てみましょう。
スポーンする位置の指定はvnoid_sample_project_2023_athletics.cnoidというファイルの
113行目にあるinitialRootPosition
で指定されています。
これを[13.8, 1.0, 0.95]にしてください。階段の手前にスポーンされると思います。initialRootPosition
を変更したときはビルドはしなくても大丈夫ですが、
インストールをしないと変更が反映されないので、そこだけは注意です。
ご自身で開発する際にもこの部分だけ試したいといったことがあると思いますので、ぜひご活用ください。
階段のパラメータは高さが0.1m、奥行きが0.2mになっているので、step.climb
とstep.stride
もその値にしてしまいましょう。
さあ、これで準備が整いました。きっと問題なく階段を上ってくれるはずです。
あれ?おかしいですね。step.climb
を変更しているのに、階段まで足を上げてくれません。
これはどういうことなんでしょうか。
実はstep.climb
で指定しているのは着地位置の高さ情報だけで、
遊脚が移動している最中のことについては考えられていません。
下の図に示すように僕たちは点線のように足が動いてくれることを期待しました。
しかし、実際の足の動きは実線のようになっているんです。
階段を上り下りするためには、この遊脚軌道を階段専用に作ってあげる必要があります。
次の章では階段歩行の遊脚軌道のつくり方を考えていきましょう!!
まとめ・次回予告
今回は階段を上り下りするための考え方について解説しました。
次回は実際にアスレチックコースにある階段を下ってみようと思います!!
次回: Coming Soon!!