少し前に、GELOを題材にした授業の進め方ということで、GELOに足をつけた後の初期位置をどうするかを説明していました。
inventorというLEGO社のロボットキットにあるサンプルのロボットの一つのGELOを使ったプログラミングについて学ぶ授業の中編です。見た目はよくなりますが、制御の質を求めると途端に難易度が上昇します。前編はこちらにあります。[…]
ここでは、前後に動くときと旋回時の足の初期位置を変えるところまでは説明できていましたが、なんとなくで数字を探していたので、ここでもう一度足の動きに着目して、正しそうな値を探してみます。
前後に別のものを含みますが、足の位置を調べていく過程が動画にありますので、
7:56あたりからになります。
前回の数字
前の記事では、前後に動くときは、
A:120度 B:60度 C:300度 D:240度
旋回の時は、
A:90度 B:270度 C:270度 D:90度
としていました。一応これでも動きますが、根拠は特になく、これでうまくいったと言う感じですね。
足が平行になる位置
ちゃんと、足が平行になるところを探してみました。
モーターA(右後ろ足)に関して
40度と220度のところで足が水平になっているように見えました。
ちょうど180度で反転していますね。リンク機構の構造次第ではこの辺もずれてしまうのがあるのではないかと思っていたのですが、ひとまず難しいことを考えなくて良さそうです。
足を観察すると、40度の時は足が伸びていて、220度の時は縮んでいますね。
モーターD(左前足)に関して
130度か140度くらいと、310度か320度くらいになりました。
やり方が不味かったのか、綺麗な角度がわからずに幅が生まれました。リンク機構の遊びも影響していますが、10度ずつ動かすプログラムが途中でずれたのもありますね。何度も測定していたら収束したと思いますが、法則は見つかっているので、このまま進めることにしました。
ちなみに、プログラムは黒を見つけたら10度進み、連続で動かないように、黒が外れるまでプログラムを止めておくようにしています。
足の位置の基準
AとCはモーターが正回転(時計回り)、BとDはモーターが逆回転(反時計回り)しています。また、1回転で360度なので、その周期で考えると、320度は-40度と考えても問題ないはずです。
そうすると、
A:40度 B:320度 C;40度 D:320度 で一致するはずです。
実際にそれを指定してGELOの足を動かしてみると
全ての足が地面についています。
同じように
A:220度 B:140度 C;220度 D:140度 とすると、
同じように地面に足がピッタリついています。よく観察すると、姿勢は違いますね。40度の時は高い姿勢になっていて、220度の時は低い姿勢になっています。
歩かせるための足の位置
このまま回転させても屈伸運動にしかならないので、BとCの足を180度反転させて、前後になるようにしてみます。
A:40度 B:140度 C;220度 D:320度
足が浮いてしまいました。
AとDが伸びる、BとCが縮むような形になるため、前後ではなく、上下にずれてしまったからですね。
前後に足をずらす
足は円運動(楕円?)しているので、360度で一周、180度で反転、ということで、90度動かせば、横向きになるためのずれを作れそうです。問題はモーターの回転方向ですね。AとCに対して、BとDは反対になります。これを考えておかないと、それぞれのモーターがバラバラに動き出すことになります。
A;+90度とすると
B:−90度 C:+90度 D:ー90度となります。
結果、
A:40+90=130度 B:140ー90=50度 C:220+90=310度 D:320ー90=230度
となります。
足はピッタリついていませんが、全ての足が地面につきつつ、ちゃんと歩く直前の足の位置になったと思います。
90度正回転させましたが、逆回転でも同じようになるはずです。
A:40ー90=ー50度(310度) B:140+90=230度
C:220ー90=130度 D:320+90=410度(50度)
足の伸び縮みが追加されたことで、姿勢が全く違うものになりました。
この辺になってくると、原理でどっちが良いか判断するより、動かしてみた結果から検証した方がいいかもしれませんん。というか、ここまでくると、私には結果論からの推測しかできないです。
結論として、前後に動くのはどちらでもいいかなって感じですが、最初の一歩を考えると、足を広げる(+90度)方が安定している気がします。
ただし、リンク機構の遊びの部分が、カーペットに引っかかるとずれ始めるようなので、どっちにしても、他の工夫が必要ですね。
旋回するための位置
そして、1番の問題ですが、やはり曲がることができません。
足が滑るような感じになって、じわじわと下がっていくような動きになります。
右に曲がるときには、AとCを進行時とは逆に回転させます。BとCは元々逆だったので、結果として全て−90度にしてみます。
A:40ー90=−50度(310度) B:140ー90=50度 C:220ー90=130度 D:320ー90=230度
とりあえず、曲がるようになりました。
最初に作っていたGELOの足は180度周期だったのが、今回は360度周期になって、上下の影響もそこそこ受けることになったので、その辺も踏まえて、ちゃんとモーター位置を決めていかないとダメなのかもしれません。(はっきりとしたダメな理由を断言できません。)
もっと綺麗に動かすために
今のやり方で初期化をしていると、毎回決まった形に戻すためのロスが結構あります。最悪な場面だと180度ですね。例えば、前後に動きを切り替える場合は、モーターの関係が狂ってなければ、その場から動きを切り替えても大丈夫なはずですし、それは旋回時も同じです。
モーターの関係、例えば直進時にAを基準にした場合、Cは180度反転、Dは反転させた位置、BはDの180度反転させた位置ということであれば、初期化時のモーターの移動を最小にできる関係を作れると思います。
旋回時も同じで、Aを基準にした場合、Bが反転、Cが180度反転、DはBの180度反転、になると思います。
実証したわけではないのですが、プログラムはすぐに作れそうなので、試してもいいのですが、そもそも、それ以外に問題もあって、そもそも動きが切り替わる時の謎の停止時間や、スピードを上げすぎた時に地面を蹴り上げて跳ねるから(空回りして)動きが悪くなるなど、結局機敏な動きが作れなさそうな欠点があって、検証が止まっています。(他の授業の準備もありますしね)
今後の課題として、ハイレベルかエキスパートの子で、こういう調べ物が好きな子に考えてもらうのもいいかな、と思っています。ある程度結果は見えていますが、検証の入門としては面白い題材だと思います。
そういうことで、補足的な内容ですが、GELOの足についてまとめてみました。
自分用のメモ的な内容ですが、ロボットについてこんなことも考えているんだ、と知っていただければ幸いです。
体験授業を実施中です
枚方ロボットプログラミング学習塾では無料で体験授業を実施しております。
興味を持たれた方はお気軽にお申し込みください。事前の問い合わせも可能です。
メール(info@hrktrpg.com)への問合せもお待ちしております。