動作に関わる部品の組み込みが終わった。
足の裏につけるゴムの、ネジ穴部分のくりぬきに今回は、彫刻刀を使ったら、割と綺麗に仕上がった。
垂直に立てるのが苦労するところ。
ただ、今回は、フレームが業者に作ってもらい、精密なので、重りをつけて鉛直に垂らした糸で、ほぼ正確に垂直を捉えて、リード線の調整をした。
あとはネジを完全に固定して、プログラムで動かすだけだ。
ただ、ここにきて、NAOの方の業務ができたので、動かすのはしばらくお預けになる可能性がある。
RaspberryPIで二つ目のI2CチャンネルをPCA-9685用に動かす
足郎2では、左右の足を別のスレッドで動かし、かつそれぞれ別のI2Cチャンネルを使うことにしている。
RaspberryPIで二つ目のI2Cチャンネルを動かすことについては、
http://robo.genv.sophia.ac.jp/wp_robot/?p=1645
にだいぶ書いておいた。
ただ、これをサーボドライバPCA-9685用に動かすためには、一つ面倒な作業がある。それは、I2Cのデフォルトである1チャンネルは、すでにRaspberryPIのボード内でプルアップされているのであるが、この第二チャンネルは、プルアップされていないので、外部プロアップをしなければならないのである。
ただ、秋月電子のボードには、プルアップ用の抵抗がすでに取り付けられていて、このJ1とJ2を、直結すればSDAとSCLの二つのピンがプルアップされる。
直結する方法に戸惑ったが、ハンダで無理やりすれば良いのだと了解して、そうしている。今の所不都合はない。
二足歩行の意味
なぜロボットに二足歩行をさせるのか?
単純に考えれば、人が二足歩行しているからそれを真似させるということだ。見る側も、ロボットが四足歩行をしているよりも、二足歩行をしている方が、自分に対する親近感、共感を覚えやすいから、惹きつけられる。それを期待しているわけだ。
単なる移動であれば、四足歩行でも、多足歩行でも良いような気がする。
しかし、逆振り子型の二足歩行にこだわっていると、二足歩行には別の意味があるように思える。移動には、二足歩行の方が、他の多足歩行よりも簡便であり、省エネルギーなのではないかということだ。
モアイの移動を、逆振り子でやっている動画を先にお見せした。逆振り子は、あの深刻な重量のモアイ像をいとも簡単に移動させてしまう。
人間の歩行も、極めて省エネではないか。3足歩行はイメージがわかないが、四足歩行は、確かに安定している。チータは、確かに四足歩行で、100キロを超えるスピードを出す。それはすごい。しかし、二足歩行と四足歩行を同じ速さで、同じ重さで、測ったら、距離あたりのエネルギーは二足歩行の方が小さいのではないか?
そう思って検索したら、そういう研究論文がすでに発表されていることがわかった。
http://www.afpbb.com/articles/-/2255112?pid=1790817
二足歩行の必要エネルギーは四足歩行の四分の一というわけだ。
それが二足歩行への進化の要因だという考えには、批判もあるようだが、二足歩行が省エネルギーという事実が重要なのである。
やはりそうなのだ。予想は正しかった。つまり、ロボットの二足歩行へのこだわりは、省エネルギー型移動への模索という意味を持っている。
足郎2は今作っているところだが、足郎1でわかったのは、体を揺らして、ほんのわずかの前進操作をするだけで、歩み出すということだった。
足郎2が完成すれば、あの大きくて長い足が、いとも簡単に歩き出す様子をお見せできるはずだ。
NAOもそうだがホンダのASIMOも、その二足歩行は、人の動きを真似るためのただのパフォーマンスに見えて仕方がない。効率的移動という目的意識性を感じないのだ。
私は、このサイトに、逆振り子の理論から、足郎0(1本足ロボット)、足郎1と逆振り子型移動の理論とモデルを示してきた。この方向を、さらに徹底して追求していきたい。
足の配線完了
サーボドライバーボードのPCA-9685は片足それぞれについている。足郎1のように、上板上のコンピュータ側におくと配線が混雑してダメだからだ。ドライバーボードは16個のサーボモータを制御できるが、片足は10個しかついていない。この二つのボードは、RaspberryPIのI2Cの二つのポートを使う予定だ。RaspberryPIには、デフォルトでは1個のI2Cしか動かせないが、もともと2つついているのでその二つを動かす。
したがって、RaspberryPIそのものは、一つしか必要ないのだが、会話や知的な機能を担うために二台乗せてある。
当面は一つしか動かさない。
電池ボックスを股間に設置するのだが、いったんRaspberryPI を外さないとつけれない。
そのあと、サーボと関節をつなぐワイヤーをセットすれば、動作に関する部分は終える。
サーボモータをつける
サーボモーターの設置
部品が届いた
ローカル座標のグローバル座標への転換戦略
表題のことがテーマである。
ずっと悩んでいる(笑)
(1)まず、片足に重心がほぼ乗っているかどうかの場合を分ける。
(2)乗っていない場合。乗っていなくても、相対的に重心がかかっている足は確定できる。その相対的支持足には四つのポイントがある。
z軸の値が小さなものが少なくとも二つはあるはずだ。
ロボットの体型が決まっていれば、その点を基準に他の足や脚の座標が全て決められるはずだ。
(※ここで注意しておくと、以後、足のくるぶしから先の部分を足(英語でfoot)といい、その他の英語でlegと言われる部分は脚ということにする)
その中で、z座標が負になるような点があったら、初めの2点の角度を変えて、それらの点がゼロになるように角度を変えなければならない。
逆に逆足が中空に上がってしまった場合は、そこを大地にくっつけるように回転させる必要がある。
(3)重心がその脚だけに乗っている場合は、その脚全体が大地についていることを前提に体型を載せる必要がある。そして、もし、逆足が大地から上がっている場合は、それをそのままにしておいて良い。重心がほとんど乗っていないわけだから。
シミュレータ、膝の動き
シミュレーターで、先のAshiro1のCosmファイルに膝を曲げる動きだけを加えたものを食わせて見た。
明らかに不自然だ。実際のロボットだったら変なことになっただろう。
シミュレーターがもっと自然な動きになるように工夫する必要がある。次の図を見てもらいたい。
後ろになった足がかかとを曲げ高くすることによって膝が周り、体全体が前のめりになり、一体の状態まで来ると後ろ足が上がり、前足のみで立つようになる。
重心が支えている足の一定近くに来るまでは、後ろ足をあげられないようにすれば良い。
それまでは、T点とS点で支えるような形にするのである。
さらに、近傍の中に入って、反対側の足がつり上がっている状態においては、その足の足首の角度が体全体の傾きを規定する、とすれば良い。
また、この近傍の大きさは、体に働いている慣性力の影響を受ける。体が強く動いている時には、この近傍は大きくなるだろう。逆に、体がゆっくりとしか動いていないときは、相対的にこん近傍は小さくなる。
シミュレータの改良
重心を支えている足の位置を固定するようにした。先のものは、ロボットの原点を動かないようにしたので、形はサーボによる決まるものだが、不自然だった。
ただし、側面図では、前方へ歩いて行ってしまうし、正面図では、スクリプトが微妙に(こちら側に向いて)左側に開きが大きくしてあるものだから左側に動いて行ってしまう(笑)