はじめての4足歩行ロボット

慶應義塾大学ロボット技術研究会その1 Advent Calendar 2018の23日目です。

昨日の記事:競プロ始めました(感想文)

はじめに

こんにちは、3年のしゅんもです。今年もNHKロボコンをやっています。

昨年までは機構オンリーでプログラミングの知識がなく、先輩に迷惑をかけていたので、今年は制御もできるようにしようと思い、11月頃からプログラミングの勉強をしています。

プログラミングの対象は、タイトルの通り「4足歩行ロボット」です。来年のNHKロボコンのルールで4足歩行ロボットが必要なため、サーボモータ式の4足歩行ロボットを制作しました。この記事では、4足歩行を歩かせる簡単なアルゴリズムの紹介までしたいと思います。

目次

  • 歩容とは?
  • 4足歩行ロボットの機構ってどんなの?
  • 逆運動学でサーボの角度を求めよう!
  • 歩行アルゴリズムを考えよう
  • 実際に動かしてみた!

歩容とは?

4足歩行を扱う上で避けて通れないのが「歩容」の分類です。歩容とは、簡単に言えば「足の動かし方」の違いです。

ただ、歩容について調べれば調べるほど新しい名前が出てきて、正直私自身も完全には理解できていないので、なんとなくの紹介だけします。上から下に行くにつれて移動速度が早くなります。

クロール(Crawl)

最も移動速度が遅い歩容です。1足ずつ独立して足を出していくため、常に3本以上の足が地面に接地しており、安定しています。

ウォーク(Walk) [別名 : ペース(Pace) ]

右前と右後ろの足、左前ろ左後ろの足をそれぞれ同時に出して歩く歩容です。足を浮かしているとき、一時的に地面と接地する足が2本になるため、重心のバランスを取る必要があります。

トロット(Trot)

右前と左後ろの足、左前と右後ろの足をそれぞれ同時に出して歩く歩容です。ウォークとの違いは、出す足の組み合わせが対角線になっているという点です。

バウンド(Bound)

左前足、右前足、右後ろ足、左後ろ足の順に足を動かして移動する歩容です。この歩容はあるくというよりも走る状態です。ぎゃリップとの違いは、常に4本の足のうちのいずれかの足が設置している点です。

ギャロップ(Gallop)

足の動きはバウンドと同じですが、バウンドとの違いは、4本すべての足が地面から離れているタイミングがあるという点です。チーターみたいな走り方です。

以上のように多数の歩容が存在していますが、これらをロボットで実現することは容易ではありません。その理由はいくつかあるのですが、個人的に考える主な理由は以下の2点です。

  1. 生物の足の自由度をロボットで実現するのは難しい
  2. 生物の筋肉ほどの瞬発力が得られるアクチュエータがない

1つ目については、サーボモータをたくさん搭載することで一見解決できそうですが、サーボモータの物理的なサイズの関係上、生物の足ほどの自由度をもたせることは容易ではありません。

2つ目については、モーターの回りにバネを付けてバネの反発力を利用したものが研究されていますが、まだ実用化はされていません。また、小型な4足歩行ロボットの例に限れば、ワイヤーで予めバネを縮めておき、その反発力を使用したものなどがありましたが、機体のコントロールが相当難しそうということで採用しませんでした。

それでは、私がどんな機構のロボットを制作したのかご紹介します。

4足歩行ロボットの機構ってどんなの?

図1 足の簡易モデル

図1は、足一つのモデルです。1つの足につきサーボモータが3つあり、3自由度を有しています。

今の目標は、「足先の3次元座標とサーボs0の床からの高さを指定して、サーボの角度を求めること」です。このような計算を「逆運動学(Inverse Kinematics)」と呼びます。この考え方は、ロボットアームを始めとするマニピュレータの制御で使われています。

逆運動学でサーボの角度を求めよう!

足先の3次元座標は、足の付根を原点として(x,y,z)とし、サーボs0の床からの高さをhとします。ここで、サーボs0はロボットの胴体部の高さと同じなので、hは「ロボットの胴体の床からの高さ」でもあります。

それ以外の定数を以下のように定義します。

足の付根から、サーボs0、サーボs1、サーボs2( s0は水平方向に動き、s1とs2は鉛直方向に動くサーボモータです)

r0:ロボットの中心とs0の軸間距離(リンクの長さ)

r1:s0とs1の軸間距離

r2:s1とs2の軸間距離

この足のモデルの断面について考えます。

図2 断面モデル

図2において、hはサーボs0から地面までの距離、zは足先から地面までの距離です。また、θ1、θ2はそれぞれサーボs1、s2の目標角度です。したがって、図に示した文字を使ってθ1をθ2を表すことができれば、

考え方自体は中学数学レベルですので、みなさんも考えてみてください。(少しだけ逆三角関数は使います。)

*

*

*

*

*

*

*

*

*

*

*

*

正解にたどり着きましたか?それでは答えを示します。

図3 断面モデル(補助線あり)

図3のように補助線を引くと、辺AEの長さは

と求められます。すると、⊿FAEにおいて余弦定理から、

となります。同様に、 ⊿FAEにおいて余弦定理から、

となります。以上より、変数hおよびzを指定することにより、θ1およびθ2を一意に定めることができます。ここで、dはどう求めるんだ?と思った方も多いと思います。dは、足先の3次元座標(x,y,z)を用いて表せます。この3次元座標の原点は足の付根としていたので、

と求められます。ただし、r0は足の付根からサーボs0、すなわち図3における点Aまでの距離です。

また、サーボs0の目標角度θ0は、機体を上から見他状態を考えると求められます。

図4 機体を上から見たときの足先の座標

図4中の(x,y)は、足先の2次元座標です。これより、

となります。ここで、4足の足についても考えてみましょう。断面モデルはどの足でも同じですが、θ0は少しだけ変わります。

図5 4足の足の座標のとり方(ロボットを上から見た図)

もし、図4の座標系を90度ずつ回転させて座標を取れば、全ての足のθ0は同様に考えることができます。しかし、次の章で説明する歩行アルゴリズムを考える際、図5のように座標を撮っておいたほうが考えやすいため、私はこうしました。

図5において、ロボットが大の字に足を広げている状態を考えます。すると、右前と左後ろは図4での座標系と全く同じです。しかし、右後ろと左前はθ0の正負が逆になることがわかります。したがって、プログラム中では、右後ろと左前のθ0は符号を反転させます。

長かったですが、これで 「足先の3次元座標とサーボs0の床からの高さを指定して、サーボの角度を求める」 という目標が達成できたので、次に「どのように歩かせるのか」について説明します。

歩行アルゴリズムを考えよう

普通のやり方なのかはわかりませんが、私は足先の座標を指定することで歩行させるようにしました。 このアルゴリズムは、参考サイト[2]に詳しく書かれていたので、参考にさせていただきました。

参考サイト[2]では、予め決められた値が入っていますが、私はパラメータを調整できるようにしたかったので、下記のように変数を置きました。

(x0,y0):足を大の字に広げたときのx,y座標

y1:3足立ちのときのy座標

step_length:一歩で進む距離(以下sl)

step_height:足を上げる高さ(以下sh)

これらの変数を使って歩行のステップを考えると、下記の図6のようになります。

図6 歩行時の足先座標

上の図6では、足先のx,y座標のみを考えていますが、実際に足を動かすときは足を床から離す必要があります。そのため以下の図7のように、足先を三角形や四角形のように動かす必要があります。

図7 z座標を考慮した足先の動かし方

以上より、どのように足先の座標を変えれば歩行するかおわかりいただけたと思います。実際にプログラムを書くときは、表などに、各ステップにおけるそれぞれの足のx,y,z座標をまとめておくと混乱しにくいと思います。

実際に動かしてみた!

実際に上記方法でプログラムを書いて動かしてみると、こうなります。

なんかカックカクしてますよね笑

これは、サーボモータの角度を0.1秒間隔など、細かく指定し、for文で回すことにより改善します。改善したものがこちらです。

なかなか生き物っぽい動きになりました!様々なパラメータに調節して見たんですが、現時点で一番気に入っている歩行はこれです。ペットみたいで可愛いでよね笑

ただ、かなり滑っているので、まだまだ改善の余地はありそうです。NHKロボコンの1次ビデオ審査までちょうど1ヶ月なので、どんどん改善していきます。

最後に

今回のロボットはロボコンのレギュレーションの関係上巨大なため、でかくて高いサーボを使っていますが、自分で試す際は秋月とかで売られている千円くらいのサーボでも行けると思うので、是非挑戦してみてはいかがでしょうか?

KRAに4足歩行の知見を残す意味も兼ねて、結構頑張って書いたのですが、とても長くなってしまい、読みづらくなってしまいました・・・

なにか分からない事があれば、コメントいただければ回答しますので、お気軽によろしくおねがいします。最後までご覧頂きありがとうございました!

参考サイト

[1]PICマイコンで制御する4足歩行ロボットの製作 “http://www.suwa-koubou.jp/micom/4LegsRobot/4legs_robot.html” (参照 2018-12-23)

[2]MAKE: Japan, Arduino搭載四足歩行ロボットのプログラミング”https://makezine.jp/blog/2016/12/robot-quadruped-arduino-program.html” (参照 2018-12-23)

←11日目の記事

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中