このページでは、何から順番に決めてゆくかという観点から「歩行の調整方法」について説明します。
各関節をリンク機構によって増力していない場合は、例えば「ヒザから足首」の様な、 関節間だけ計ればよいので簡単です。また、計らなければならない場所が少ない構造の 脚ほど、採寸時の誤差が逆運動学計算に混じってこないので、制御が正確になる傾向があります。
2L2では、逆運動学計算の結果を、各関節に対して直立状態を起点とした数値(角度) で出力するようにプログラムを作っているため、「中立位置データ」は直立状態のものとなります。
この数値も、調べ終わったら関節パラメータファイル に書き込みます。
以下の項目4までは、 RCサーボに大きな電流が流れ続けるのを防ぐため、ロボット を吊るして足を浮かせ、足の重さ以外の荷重がRCサーボにかからないようにした状態 で作業を行います。
だいたいの場合、RCサーボの可動範囲を広く使うほど、パルスの長さと、軸が動く角度 の比例関係がずれて来る傾向があります。また、RCサーボの機種やメーカー間でも バラつきがあります。
2L1/2L2ではy=ax+bの形の一次式で済ませていますが、ここでいい加減な事をすると、 「左右の脚を対称に動かして歩いていても、片脚だけ引きずるような歩き方をする」や 「コケ易くなる」といった形で歩行に影響してきます。
この数値も、調べ終わったら関節パラメータファイル に書き込みます。
4.1 関節毎にテストする
分度器の代わりに、三角定規の様なものを使うと、ある決まった場所だけでチェックを 済ませたくなりがちですが、歩く時に関節を使う範囲全体を確認しておきます。 こうすると、RCサーボの可動範囲の外まで使うような計算になっていないかや、 解が求まらない点を含んでいないかがチェックできます。
2L2くらいのロボットが、それなりにスムーズに歩くため調整の目標としては、 無負荷状態で、だいたい1mm単位くらいで位置決めできるところを目標にすれば良いと思います。 この精度も低いと、歩いた時に揺れが大きくなるといった形で現れてきます。
詳細な調整は、歩かせながら行いますが、2L2の調整は、いたってアバウトで、直立させた 状態でつついてみて、揺れの収まりがいい所に決めています。
歩かせるためにジャイロが必要か?といえば、「机の上」みたいに、あらかじめ揺れない、 平らな場所であることが分かっている様な場合は、「あればより安定が増す」といった程度で 、必要無いといえば無いと思います。私の場合は、積んでも邪魔にならないことと、将来 もっといろんなところを器用に歩けるロボットに発展させたいという気持ちから、データを とるために積んでいるといった状態で、2L2のここまでの性能を出すために絶対必要 だったかといえば、そうではないといったところが実情です。
6.1 ヒザの屈伸深さを決める
1歩の歩幅と、左右にどれだけ体を揺らすかとの兼ね合いで、歩行モーションの全ての点で、 足先軌道が、足先が到達できる範囲から外れない、適当な数値を何回か試しながら決めます。
ヒザを曲げることは、腰の基準点をZ方向だけに動かすことを意味します。しかし、実際に Z方向だけに10mm等と動かした場合、ひざ関節に、自重による定常偏差が発生し、指示した値 よりも深くヒザが曲がり、仰け反るような方向(X軸のマイナス方向)にロボットが傾きます。 (そのまま後ろに倒れる事もあります。) そこで、ヒザを曲げたところで、ちょうど良い位置に重心が来るように、腰の計算基準点が X軸のプラス方向(前方向)にも動くように入力します。
この時点で歩行のモーションデータを吐き出すプログラムが出来ている時は、そのプログラム へ例えば「体を揺らす幅50mm、周期3秒、遊脚相で足を上げる高さ1mm、歩幅0mm」 とすると、非常にゆっくりと体を揺らすような動きが再生されます。
ここまでで、振幅のアタリをつけたら、ここよりも少ない振幅で、前進の歩幅を十分 確保できる振幅と、足を上げる高さを5から10mm程度の間に適当に決めます。 そして、モーションデータ作成の入力値の周期の部分をだんだん短くしてゆきます。
はじめは、常に両足が地面についたまま体を揺らしている状態が続きますが、あるところまで 早めると、上げているつもりの方の足が地面を離れ、足踏みらしくなってきます。(そこを 過ぎて早めると、倒れるようになります。)
2L2の2003年後半に作ったプログラムでは、「歩行アルゴリズムのページ」で ジグザグになっている仮重心の軌跡を正弦波の形に変えました。そして、体を揺らす方向の速度は、 三角関数から作った加減速パターンを使い、前進方向は速度変化なしの一定速度と することにより、仮重心の速度ベクトルの大きさがゼロになる瞬間をなくす様にしました。
7.1 ひざ関節角度の定常偏差
いつも使っている歩行パターンは、ただ腰を落とすと重心が後退するので、 その分だけ前方向にも 腰を動かす様な軌道を使ています。たとえば「Z = -20mm, X = 10mm」といった感じです。
今まではずっとこういった感じで、腰もしくは足先の軌道に、荷重による各関節の定常偏差を 打ち消すようなオフセット値を加減して調節していました。この調節をしないならば、一回り 大きな「足」と一段と強力モーターが必要になるため、やらないよりは、やったほうが良いのですが 、歩行の各フェーズ(片足で立っているときと、両足で立っているとき等)で荷重が変化する ことが考慮されていないため、体が揺れる一つの原因になっていたと考えられます。
動力系の電源がNi-Cd電池直結で安定化されていない時は、この定常偏差が電池の残量によって 常に変わるため有効な対策がとれないでいました。しかし今は、動力系の電源も安定化したので 定常偏差が一定に近づいています。
そこで、今度は歩行の各フェーズでひざのRCサーボにかかる荷重を簡単なモデルで計算し、 歩行モーションデータ作成計算に盛り込んでみようかと思っています。今のところの感触では ひざだけでも行えば、歩行の高速化を志向するときに、見てわかる効果が現れそうだと感じています。