一足歩行ロボット

先の記事で書いたこと(こちら)を証明するために、まず、1足ロボット アイコメ01でやって見た。ただ、左右に体を揺らせているだけである。前後のバランスの違いで、動画のように前に進んでいる。
この時の設定ファイル controler.init の内容を記録しておく。一足歩行と無関係なものもある。

################################
# 2017年5月1日作成
# controler.init
# controler 初期化ファイル
# 実行時にパスを設定できる
# ./controler -e -init /home/pi/controler.init
######################################
# で始まる行はコメント
# サーボ0の初期角度(度で指定)
initialangle:0:-2.0
# サーボ1の初期角度
initialangle:1:-6.0
# 以下の各種角度は、上記初期角度に対する相対角度である
# 実行時間(秒単位で指定)加速度チェックの時間でもある
duration:3
# 臨界加速度:関節が固定化される加速度
acceleration:0.1
# 関節固定化に際して、追加的な角度(傾いただけ、逆側は伸びる)
#diffAngle:-1
diffAngle:2
# 完全に弛緩させる角度
slackAngle:-6.0
# 倒す時の吊り上げ角度
fallAngle:2.0
# 最大リアクション回数
# 転倒に対するリアクションがこの回数に到達したら反応しなくなる
# 負の数字を入れると無限に反応する
# 0を入れると反応しない
maxReaction:0
# 最初に緩和する角度
initialSlakAngle:-8.0
# 逆振り子の実行回数
# pendIteration:10
# 不活性期間(ミリ秒)
# 一度転倒に反応すると、この期間は、反応しなくなる
inertiaPeriod:800

 
 

倒れこみとしての二足歩行

ロボットの現在の二足歩行が不自然なのは「倒れこみ」が基本になっていないからだ。
人は歩く動きは、ただ前に倒れ続けているだけなのだ。それは、人工衛星が地球に落下し続けているのと似ているかもしれない。倒れるときに、大きな力は必要がない。だから人も、歩くことに大きなエネルギーを使わない。前方に倒れかかると片足を前に出す、新しい足が低になって回転する。さらにその回転が前に倒れこむ。別の足を出す。ただそれの繰り返しである。
倒れる!おっとっと、足を前に出そう、である。
そのとき、ただ、体が左右に揺れる。これは、倒れない程度に揺れる必要がある。なぜなら、倒れこみの時、足を前に出す必要があるが、その足には重心がかかっていてはならないからである。
従って「倒れ込まない揺れと」「倒れ込んでしまう揺れ」の二つを繰り出して、人は歩いていく。
現在のロボットは、関節の角度を変えながら歩いていく。倒れこみはない。倒れこみなどすると、本当に倒れてしまう。

逆振り子ロボットの転倒データ

逆振り子ロボットに、いろいろな転倒をさせてみた。あるいは、転倒の回避を試みた。数え切れないほどやったが、その一部を書いておきたい。

逆振り子ロボットアイコメ01の雄姿(笑)は左のようなものだ。写真では、左右方向にだけ倒れるように作ってある。足先に向けて、2台のサーボのワイヤーが張ってあるので、これを張ったり緩めたりして転倒させたり、転倒を制御させたりしている。
写真は、サーボ角度をほぼニュートラルにちかい位置にして直立させている。
サーボを緩めて、自然転倒させた時の3軸加速度センサーが捉えるデータを示しておこう。

横軸の目盛りは10ミリ秒単位で、センサーから撮ってきたデータの番号である。縦軸は上から順に、Z、X、Y軸の加速度センサーのデータである。
Z軸は、垂直方向であるが、サーボの脱力によって上下の微妙な揺れが生じるが、倒れるに従ってそれは減衰している。青がX軸だが、倒れないようになっている方向のため、微妙な揺れだけにとどまっている。一番下のY軸のデータが、倒れる方向のものだ。ただ、ゼロから、一挙に(回転方向である負の方向に)上昇するが、倒れるに従ってまたゼロに戻っていっている。回転に従ってこの方向の動きがなくなるからである。倒れた瞬間に、加速度センサーはパニックになる。
このパニック状態は、ロボットが一番不快な状態になっていると考えれば良い。これは、のちに、ロボットに運動を学習させるときに、不快感のシグナルとして使いたいと思っている。
衝撃が治ると、Y軸が垂直になっているので、1g(gは重力加速度)になって、他はほぼゼロになっている。わずかの傾きがあるくらいだ。
次に、転倒をロボット自身んが検知した瞬間(0.1gの変化)、転倒する反対側のサーボを、角度を縮める形で固定した。すなわち、逆方向に揺り戻そうと動かした時の反応は、次のようになる。
まず、Z軸が、脱力と片側固定化の、一瞬の大きな揺れの後、1gを維持している。先の完全転倒の場合と比べて、水平状態がほぼ維持されていることを意味している。それでもわずかに左に傾いていることは、Y軸の動きによって知ることができる。それが一見安定しているようだが、脱力から0.8秒後に反対側に向かっての回転が発生して、矢印のところで臨界点を超える。この臨界点を超えるというのは、データからの判断ではなく、ロボットを見ていた私が、これは、ほっておけば倒れると判断したところで、私がその時点でロボットを支えた。
最初の転倒方向への完全転倒は避けれたのだが、逆のサーボが引き戻したことによって、逆側に倒れてしまう事態になったというわけである。