このページでは歩行アルゴリズムについて説明します。 なにをどう書くかについては、非常に悩むところです。2足歩行の説明そのものについては 本や論文がたくさんあるので、2L1で試したこと、その結果、考察(というよりは感想) 、考えた力学モデルを、しばらくは徒然なるままに書きます。あるていど 量がまとまってきたら、編集しようと思っています。
|
足の運び方(直進歩行のパターン) 1.標記の説明
「1」−>「2」は右足に重心を移してゆく過程を表しています。仮重心は「1」で
加速をはじめ、「1」と「2」の中間点で最高速度に達し、「2」で停止します。 左足は「仮重心」が「a」から「2」へ移動する時間で「足跡1」から 「足跡3」へ移動します。「足跡3」に到着した時点で左足は数ミリ 浮かせておきます。
「仮重心」の移動速度はやはり中間点で最高となります。
3.軌跡の分割数
周期が変わったときにはジャイロのゲインも変えた方が良いのですが、しませんでした。 |
計算の基準点(仮重心) 左図の「重心マーク?」の場所を仮に重心位置と決めて、この仮重心の移動軌跡と、遊脚 (体を支えていない方の足)の軌跡を制御波形生成プログラムへの入力としています。 また、この場所は逆運動学計算を行うとき、各関節の位置を定義する「原点」としても 使っています。 |
自動車等の「アクティブサスペンション」の考え方を取り入れています。 ごく一般的な自動車のサスペンションにはバネとオイルダンパーが付いて 受動的に動くだけですが、私が指す「アクティブサスペンション」とは、 このバネ・ダンパー系の特性をアクチュエーターの制御でシミュレート する事により、衝撃を吸収すると言うものです。
2L1v5の動画を注意深く見ていただくと、足が接地したときに少しヒザを曲げている のが分かると思いますが、コレのことです。
実際の所は、「力のフィードバック」をやっていないので、それっぽく動かしているだけです。(笑)
はじめにこんな形のモデルがどう動くかを考えました。
足首にかかる力を評価するために考えたモデルの、一番簡単なものです。
例として前に倒れる境目の位置(mがつま先の上)まで来た時の必要トルクを2L1v5の
数値を使って簡単に計算してみます。各数値は概略で以下の物とします。
m=1.45(kg)
l=0.23(m)
x=0.05(m)
θ=asin(x/l)より約12.56度
t1=0.23*1.45*9.812*sin(12.56)
=0.7116(N・m)
=7.2kg・cm
と言うような感じの計算をし、足首の必要トルクの目安にしています。
こんな風にして計算した値が、モーターのカタログスペックを常に越えるような状態を 発生させると、サーボモーターが壊れるという仕組みです。
以下の様な利点があるので、足先が通る軌道内部での加速・減速パターン にcos関数を使用しています。
y = cos(PI * x) + 1
0 <= x <= 1.0
PI:円周率
x軸:時間、y軸:速度
この様に 面積(移動距離)1、経過時間1 の関数を単位ベクトルのように考えて、
任意の距離を任意の時間で移動する点列を作っています。
軌道が3次元曲線の場合も、同じ長さを持つ直線上に点列を作り、曲線上に並べてゆく
事によって対応できます。
モデル化の前提
制御の周期
制御の周波数=1/47*19/12=0.03369sec=29.68Hz
姿勢の制御
フェイズ1 右の足に重心を移します。 | |
フェイズ2 左の足をその場で持ち上げ、前に送ります。そして、下ろします。 ロボットの重心を、足首関節中心の真上に保持出来れば、足首に力はかからない 訳ですが、遊脚だけを動かすと、ロボット全体としての重心が変わりますので、 重心は支持点の周りを移動します。また、足先の到達可能範囲が十分でないため 支持点直上まで重心を持っていけない場合も、足首で支えることになります。
この期間に、足型図形の中に重心があれば
転倒しませんが、足首のモーターが十分なトルクを発生できない場合は、支持点
から重心がずれるにつれて、だんだんとロボットが傾いてきます。 遊脚の移動速度をだんだんと上げて行きますと、反動が大きくなってゆき、 反動を打ち消すような動作(例えば手を振る等)を行わない限り立って いられなくなります。 | |
フェイズ3 左の足に重心を移します。 | |
フェイズ4 右の足をその場で持ち上げ、前に送ります。そして、下ろします。 |