昨日分からんかったことが分かった!何か面白い。

Fun-Desire-Blog 

PexelsのMonsteraによる写真

電子工作

四足歩行ロボットを作りたい!~哺乳類の歩き方~【2つの関節を使って歩く】(解説編)

更新日:

前回の2つの関節を使って歩く四足歩行ロボットで書けなかった解説部分を説明します。

このロボットは、Arduino というマイコンボードを使って、サーボモーターと呼ばれる動かしたい位置にプログラムで動かせるモーターを使って、歩く動作をいろいろ試してみます。もう少し詳しく言うと、ひとつの脚にモーターを2個使い、太ももと膝から下の可動部を動かして動作させます。その動かし方、歩き方(歩容)をいろいろ試しました。(残念ながら、姿勢の状態をフィードバックさせるところまではやっていません)

さらに、足の動作位置をCADで確認してみましたので、ご覧ください。


1.歩行から

まずは、かわいらしい歩行をご覧ください。

しかしながら、この歩容はとりあえず歩いた感じなので、いろんな歩容を試してみます。歩容にはいろいろありますが、下記の論文にある中の歩容に当てはめてみて歩き方を確認してみます。(残念ながら、あまり滑らかではない動きです)

生物型ロボットにおける歩行制御と協調行動

 ①クロール歩容 

 

歩き方は1本ずつ足を前に出して動かします3本の足は、地面についたまま、1本だけ足を浮かせて前に出すということですね。

 ②ペース歩容 

 

今度は、足2本ずつ動かします前後同じ側の足を同時に動かして進みます。

 ③トロット歩容 

 

同じように2本の足を同時に動かします。但し、今度は対角線、右前足と左後ろ足という組合せになります。

 ④バウンド歩容 

 

左右それぞれの後ろ足と前足で蹴りながら進む歩き方です。(浮き上がるほどのモータートルクが無いので、すり足です)

2.やっぱ、他のロボットはすごい。

スタンフォード大学の人たちが小型四足歩行ロボット「Stanford Pupper」つくり、その作り方も公開してくれているので参考にして下さい。

旋回やジャンプも自由自在なオープンソースの四足歩行ロボット「Stanford Pupper」を実際に組み立てられる詳細な説明書が公開 - GIGAZINE

Stanford Pupper - Google ドキュメント

日本の学生たちも素晴らしいです。

この動画で、足の動かし方はヒントにさせて頂きました。こちらの論文も足の軌跡として、参考にさせて頂きました。

4脚歩行ロボットのための動物的歩容生成

3.足の動作位置をCADで作成

参考にさせてもらった、足の動作位置(軌跡)はリンク機構になっているので、直観的には分かりにくく、動きを確認するために、CADで書いてみました。(実際の動きと全く同じにはなっていないですが・・涙)

因みに、CADはフリーでダウンロードできるJW_CADで書いてみました。

窓の杜からダウンロードしました。マニュアルはググれば、お気に入りのもの(ご自分にあったもの)が見つかると思いますが、分かりやすく書かれていたものを貼っておきます。秋田高専さん、ありがとうございます。

ほんとは、シミュレーションソフトで、動かしてみると動作の事前確認ができます。

因みに、歩行全体のシミュレーションは、下記のサイトで実施されていますので、興味のある方は参考にして下さい。ウォーク歩容について、滑らかな動作を追求され、それをシミュレーションや実機でいろいろ試されておられ、参考になります。4脚ロボット ウォーク歩容を作成中 (unitech-hobby.com)

CADで、自分のイメージする軌跡を書けば、実際の動きを事前に確認することができると思います。

4. Arduinoのスケッチ (プログラム):トロットの場合です。

サーボモーターの配置は



#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 102 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 492 // this is the 'maximum' pulse length count (out of 4096)
void setup(){
pwm.begin();
pwm.setPWMFreq(50); // Analog servos run at ~50 Hz updates
servo_write(0,90);
}
void servo_write(int n, int ang){ // 動かすサーボと角度を引数に持つ
ang = map(ang, 0, 180, SERVOMIN, SERVOMAX); // 角度(0~180)をPWMのパルス幅(102~492)へ変換
pwm.setPWM(n, 0, ang);
}


void loop(){

//基準位置
servo_write(0,70);
servo_write(4,70);
servo_write(2,20);
servo_write(6,20);
servo_write(1,20);
servo_write(5,20);
servo_write(3,70);
servo_write(7,70);
delay(1000);


//二足で蹴る 04-26
servo_write(0,10);
servo_write(4,50);
servo_write(2,80);
servo_write(6,30);
delay(500);

//支え足、伸ばし37
servo_write(3,70);
servo_write(7,80);
delay(300);

//04前へ → 37戻し
servo_write(0,30);
servo_write(4,50);
delay(300);
servo_write(0,60);
servo_write(4,60);
delay(300);
servo_write(0,70);
servo_write(4,70);
delay(300);
servo_write(3,70);
servo_write(7,70);
delay(300);

//支え足、15伸ばし
servo_write(1,40);
servo_write(5,5);
delay(300);

//26前へ → 15戻し
servo_write(2,60);
servo_write(6,40);
delay(300);
servo_write(2,30);
servo_write(6,30);
delay(300);
servo_write(2,20);
servo_write(6,20);
delay(300);
servo_write(1,20);
servo_write(5,20);
delay(300);


//--------------------------


//二足で蹴る 15-37
servo_write(1,80);
servo_write(5,30);
servo_write(3,20);
servo_write(7,50);
delay(500);


//支え足、26伸ばし
servo_write(2,40);
servo_write(6,5);
delay(300);

//15前へ → 26戻し
servo_write(1,60);
servo_write(5,40);
delay(300);
servo_write(1,30);
servo_write(5,30);
delay(300);
servo_write(1,20);
servo_write(5,20);
delay(300);
servo_write(2,20);
servo_write(6,20);
delay(500);


//支え足、伸ばす04
servo_write(0,60);
servo_write(4,90);
delay(300);

//37前へ → 04戻し
servo_write(3,30);
servo_write(7,50);
delay(300);
servo_write(3,60);
servo_write(7,60);
delay(300);
servo_write(3,70);
servo_write(7,70);
delay(300);
servo_write(0,70);
servo_write(4,70);
delay(300);

}

5.まとめ

今回、実際に四足歩行ロボットを歩かせた動画の紹介と、歩く軌跡をCADで書いてみました。特に難しい制御をせず、(変化した状態をセンサーなどで読み取って調整せず)オープンループで決まった動作をさせて歩かせてみました。

実際、なんちゃってではありますが、見た目はなかなかチャーミングと思います。

 

本格的には、動作解析したり、事前にこういうように動かして歩かせるとか、もっと詳しく調べてやりたいところですが、実際やるその時の楽しみに取っておきます。(美味しい、好きなものは最後に食べるタイプ(笑))

 
とはいうものの、ちょこっとだけ調べてみました。そこまで、詳しく理解できていませんが、いろいろ出てきました。

・歩行周期が短いほど安定して歩ける。
・最大速度を上げるためにゆっくり、大きな歩幅で歩く。
・移動速度を最大にする歩行周期が存在する。
・ある移動速度に対して移動エネルギを最小にする歩行周期が存在する。
・移動エネルギを効率的に使えるトロット歩容。

30年以上前の論文ですが、四足歩行ロボットの力学的解析 参照させて頂きました。
上記のダイジェスト的に書かれている論文は、四足歩行ロボットの動歩行について がありました。同じ作者で、どちらも動歩行について、書かれています。合わせて読むと分かりやすいです。

最近の論文では、それぞれの歩容を動物が使い分けることの解明として行われた研究をまとめた論文があります。
例えば、先ほどの歩行周期で 移動速度を最大にする歩行周期が存在する ということですので、逆に歩行周期で速度が決まってくるとも言えます。

それを利用して、固有振動数(周期の逆数)を利用した駆動方法(ロボットの歩き方)を確立された、4足歩行の歩容と固有振動モードの関係 の論文がありました。

他にも、

動物がなぜ歩容を使い分けるのかという観点から、3次元モデルの解析を行うことで、移動エネルギを効率的に使えるトロット歩容に対して、足に掛かる負担が少ないペース歩容であることを解明した論文、 3次元空間における四脚モデルを用いたPaceおよびTrot歩容の動力学解析 がありました。その中に、犬は疲れると トロット歩容からペース歩容に切り替える話も書かれていました。

 
動物の行動解明と、それを利用したり、それを応用しての新たな発想でのテクノロジー、未来は楽しいです。

まとめとオマケが入り混じってしまった感じですが、なんとなく、興奮しすぎてる気がするので、このあたりで終わりにします。つづく。

参考に、今回使った、電子機器部品を紹介しておきます。トライされる方は、チェックしてみて下さい。

品名型名(製造元)個数
1マイコン基板Arduino Uno Rev3 ATmega328 マイコンボード A0000661
2モータードライバーPCA9685搭載16チャネル PWM/サーボ ドライバー ←個数注意1
3サーボモーターデジタル・マイクロサーボ SG90←個数注意8
4接続電線他接続電線、USBケーブル、バルサ材、針金など1式

-電子工作
-, ,

Copyright© Fun-Desire-Blog  , 2021 All Rights Reserved Powered by STINGER.