2007.2.25改
2007.8.16改
2007.11.6改

二足歩行ロボット「ラムダ」について


ラムダは人間の居住空間で生活することを目標に開発している人型自律型ロボットです。自律型ロボットにとって必要な機能は「@移動能力」「A外界感知力」「B統合判断力」として考えています。自律に重点を置くと、2足歩行という不安定な移動能力は不適当に思えますが、人間の居住空間という前提から考えると車輪やクローラー型の移動能力より適していると考えます。案として、2足歩行の不安定さを補償する考えから「ゴリラ型」(4足歩行だけど、両手が使えて2足歩行もできる)との考えもありましたが、結局は完全な人型になりました。

ラムダの想像図

四肢に加え、両手にはマニピュレータ、頭部にはカメラを搭載します。また、マイク・スピーカーを備え、音声出力や音声認識もできるようにする予定です。無線LANを装備しているので11B無線LANネットワークの中ならインターネット接続が可能です。この辺の機能はメインCPUユニットである、RPU-100の機能をそのまま使ってます。





■自由度

足は各6自由度、腕は4自由度(マニピュレータは別)を持ちます。検討中の頭部はダブルチルトで3自由度、マニピュレータは検討中にて未定。

■インターフェース(センサー)

◆身体系

関節角度、関節荷重:主サーボ20個については軸角度、軸荷重を取得できる。
姿勢:3軸角速度、3軸加速度を取得できる。

◆外界系

視覚:カラーカメラにより画像を取得できる。
聴覚:マイクにより外界音を取得できる。

◆表現系

発声(発音):スピーカーにて音を発することが出来る。
表示:LEDによる表示が出来る。


ラムダ以前はアイボでのロボットプログラムを開発検討していました。アイボもERS-7になって、「物を咥える」という外界に対するアクションを行えるようになりましたが、なにせ犬型であるため、カメラと口が同じ部位(頭部)にあるため、対象物を見ながら掴む(咥える)ということができません。そこで手をもつロボットを作ろうと思い立ち人型への着手が自分の中で本格化しました。ここまでの要求では2足歩行である必要はなく、車輪やクローラー、またはケンタウロスの様に四肢を持っていても構わなかったわけです。一方、2足歩行については以前から興味があったのですが、操縦形ロボットには何の興味もなく、また、予め用意されたモーションを再生して歩くロボットにも興味が無いため、2足歩行は長きに渡り「保留」でした。ロボットの運動性より自律性への興味が勝っていたということです。保留の理由は他にもあり、アイボを使っての開発検討で、少なくともアイボ並の処理能力・インターフェース・OS相当が絶対条件になっていたのですが、なかなか良い素材がなかったということも「待ち」の要因のひとつでした。

そうこうするうちにスピーシーズよりスピーシーズロボットキットが発表されました。

小型CPUユニットにOSはNetBSD、サーボはロボット用に開発されたコマンド型サーボ、インターフェースはRS485を備えており、小型マイコンを介せばインターフェースの拡張も可能と、申し分ない仕様です。値段も手の出る範囲であったため、検討の末、これを素材に2足歩行型自律ロボットを開発しようと思い立ちました。

フレーム構成の細かな点で自分の構想に合わない部分があるので思い切ってフレームは設計しなおすことにしました。CPUユニットやOSを含む開発環境はスピーシーズロボットキットのものを使用し、プログラムは全て専用に作り直すことにしました。研究開発用ではありますが、十分に自律できたなら我が家において生活させようとも考えているので外装まで含めて仕上げたいと思ってます。


構造


ラムダは、以下の点に重点を置いて設計しています。

設計のテーマとしては

@各関節の可動範囲はできるだけ大きく 歩くだけじゃなくて、しゃがんだり、色々な姿勢をとるってことも配慮したい。
A軸はできるだけ直交  計算が楽になる。そのために見た目のスマート感は犠牲にしてるところもあります。
B身長はできるだけ低く サーボモーターのパワーとスピードから、これでも大き過ぎると思ってます。

1.足首関節及び股関節の直交

IKなど、計算を使った制御において関節軸の直交は重要です。また、直交させることによって足の長さに相当したコンパスが得られます。足首の直交部は軸受けをもう一つ設けて荷重を受けやすくする設計になっています。が、そこはまだ未製作。

大腿にひねり軸を設けています。これは股関節の上位に位置させた方が計算は簡単なのですが、別項の「身長を低く」というテーマとの兼ね合いでこうしました。軸にオフセットを持たないことで、計算量の増加は少しで済みます。

2.膝関節の可動範囲拡大

・・拡大って、スピーシーズロボットと比べてですが。膝を完全に折りたためるようにしています。大腿と下腿の長さを同じにしました。

3.腕も直交

腕についても肩関節は直交。肘は可動範囲を大きくとっていますが、軸にオフセットは設けていない。マニピュレータ部には相当な自由度を持たせたいのですが、角度読み取りが出来る小型サーボを実装できるスペースがないので難しいです。

4.頭(カメラ部)はダブルチルト

足元を見るためには首の根元にチルト軸が必要です。でも、動体追尾などはカメラ点に対するオフセットは小さい方が有利だと思います。ってことでチルト軸はカメラ部と首の根元部の2軸にしました。

カメラには超広角レンズをつけ、視界を広く取っています。中央部をズーム(クリップ)することで、ひずみの少ない画像を取得する事も可能。ハフ変換などの画像処理も可能です。

5.胴体の自由度

胴体にも自由度を持たせていたが軽量化のため、削除しました。今後の研究で身体制御が進めば胴体軸も必要になるでしょう。その時に新たにトライしたいと考えています。

6.マニピュレータ

マニピュレータ部はまだ紹介できるところまではできてません。

足首の直交
腕の直交
股関節の直交
頭部関節の直交
膝関節の可動範囲
レンズカバー(まぶた)

身長:肩の軸まで37センチ、頭頂まで45センチ。体重は約3キログラム。


逆運動学計算(脚編)


ラムダは右図のような脚関節構造を持っている。

股関節(J1/J2)及び足首関節(J5/J6)はそれぞれ直交しており、大腿部ひねり関節(J3)もオフセットを持っていない。

脚姿勢の表現としては

足姿勢表現のパラメータは以下となる。

  1. 水平面に立った状態の足首座標(x,y,z)
  2. Y軸に対する足先の方向(r)
  3. 胴体のお辞儀角度(t)とかしげ角度(p) ※足裏面の傾きとは異なるので注意

逆運動学計算詳細(足首原点)

順運動学計算詳細(足首原点版)(2007.8.19掲載)

順運動学計算詳細(股関節原点版)(2007.8.19掲載)
※幾何学準拠の足姿勢で計算するタイプ

順運動学計算詳細(足姿勢準拠版)(2007.8.22掲載)(2007.9.2修正)
※下半身原点の姿勢(tilt,pan)を任意の角度に設定できるタイプ

※逆運動学計算上は、

  1. 足首が原点
  2. 胴体姿勢としてtilt,pan,roll

と表現している。

右図は座標回転順序を図示したもの。
プログラム上では「postureL」という構造体にて足の姿勢を表しており、その時には扱いやすさから股関節を原点とし、股関節の姿勢と足首の姿勢を与える。
計算上は図のように原点が異なり、またロール軸の位置も異なるため、互いに変換が必要となる。(2007/8/16追記)


逆運動学計算(腕編)


腕の関節は右図のようになっている。
肩関節も肘関節も直交している。
手首から先はまだ設計されていない。

腕の逆運動学計算の詳細
(肩関節と手先を結ぶ線を軸としたroll角)(2007.8.27修正)

腕の順運動学計算


動作安定化(前後方向のPID制御によるジャイロセンサーフィードバック)


立位姿勢の安定化を図るため、ジャイロセンサー情報による安定化を行う。






下半身姿勢


下半身姿勢

立位の動作を考えやすくするために「下半身姿勢」という姿勢表現を設定した。

水平面に両足または片足で立っている姿勢を表現する。
パラメータとしては

※胴体ロール角は他のパラメータを組み合わせることで表現できるため、冗長表現となっている。

下半身姿勢表現は水平面に立っている状態に限定して表現している。全ての足の姿勢をこれで表現できるわけではない。

上記は下半身姿勢を表現するための基本的パラメータであり、下半身の動作を記述する上で以下のパラメータも用意する。
これらは上記のパラメータに換算することも可能であるが、管理上分離させておいた方が都合がよいので別管理としている。

※上半身重心位置は胴体姿勢の影響を受ける点で姿勢パラメータのオフセットとは異なる。

下半身姿勢の座標回転

胴体の進行方向を変更するために座標回転を行う。 

倒立振子軌道は直行座標上に展開されるため、重心移動により胴体の進行方向は変わらない。カーブ歩行など、歩行により進行方向がかわらなければならない場合は下半身姿勢の座標回転を行い、進行方向を更新する必要がある。

下半身姿勢移行の一般化のためにも座標回転が必要。倒立振子軌道は常にX軸に対して対象となるように計算する。現在の姿勢と移行先の姿勢がX軸にて対象とならない場合、座標を回転し、X軸にて移行前後の姿勢が対象となるようにする。

座標回転を行うことで見かけ上の姿勢は変わらない。






歩行


下半身姿勢を連続して変化させることにより歩行を表現する。歩行は三次元倒立振子の重心点軌道を利用する。

歩行

三次元倒立振子
単純倒立振子の一般解が得られないので線形倒立振子の一般解を使用し、歩行素片を交互に適用することで重心点の軌道を生成する。 三次元線形倒立振子の一般解による歩行素片
遊脚の動き
安定した歩行を行うには遊脚の動きが重要な働きを持っている。
@第一に重心点の送り出し操作がある。 重心点を倒立振子軌道に乗せるために重心点を加速する必要がある。充分に加速するまでは指示脚と共に重心点を加速する。 ただし、歩き始めと、充分に加速がついてからでは状況が異なり、加速がついた状態では必要な送り出し期間は短くなる。
A第二に着地のタイミングであるが、重心点がニュートラル地点に戻るよりも前に着地している必要がある。 これは、安定化のためのマージンを得るためだ。重心点の動作は必ずしも指示通りに行かず、指示より早くニュートラル地点に到達する場合が考えられる。この場合、計算上、重心点がニュートラル地点に戻る時間には重心点は既に行き過ぎており、重心点に必要以上の速度を与えてしまう。 遊脚が着地していることにより重心点は必要以上の加速をすることがなくなる。
B遊脚の復帰軌道で注意すべき点は「つまずきを起こさない」事と、遊脚の動作速度である。 遊脚の復帰時は出来るだけ高く足を上げたいが、高く上げると反動があり、重心点の動作に影響が出る場合がある。歩容において最も時間が与えられないのが遊脚の復帰期間であり、足を高く上げることにより復帰軌道が長くなり、歩行最高速度・歩幅などの限界値を押し下げることとなる。これらの条件のトレードオフにより決定する必要がある。
Cつま先上げ(未サポート)
D踵上げ(未サポート)
つまずき検出
歩幅変更@(ステップ型)
遊脚の着地点と開始点にオフセットを設ける事により2歩の歩行にて歩幅を変更する。変更途中においては若干の重心オフセットが発生するが、倒立振子軌道は変形しない。
歩幅変更A(姿勢回転型)
下半身姿勢移行の一般化インプリメントが完成したため、ステップ型のような手段を取らずに歩幅を変更することができるようになった。若干の軌道変形が伴う。

カーブ歩行

カーブは目標の歩行軌道に沿って、一歩毎に歩幅と進行方向を変更していくことにより行う。

歩幅と半径により求められる一歩での旋回角度を算出し、カーブ外側の歩を通常歩幅、カーブ内側の歩を、旋回角度により求めた歩幅とする。
一歩毎に旋回角度分だけ姿勢の座標回転を行う。

カーブ開始の姿勢によっては下図のように行かない場合があるが、歩幅変更を併用することで対処する。

歩行パラメータ管理

歩幅や遷移速度に対して適したパラメータというものが存在する。状況に応じて歩幅や遷移時間を選択する際にその他のパラメータもセッティングする必要がある。






下半身姿勢移行動作


ある下半身姿勢から異なる下半身姿勢に移行する動作を表現する。移行動作にはステップとリニアが有り、ステップによる移行動作は歩行動作を一般化したものである。

リニア

現在の下半身姿勢から目標の下半身姿勢へ最短距離での移行を行う。 スタンスや足の角度に変位がある場合は床面とスリップする必要がある。

ステップ

「両足支持の立位」から「片足支持の立位」を経由して「両足支持の立位」に移行する。

「歩行」を一般化した動作を行う。

三次元線形倒立振子の一般解はX成分とY成分が分離しており、それぞれが二次元線形倒立振子となっている。そのため、始点・終点・遷移時間・初速の4つのパラメータのうち3つが決まれば軌道が決定する。

X成分、Y成分の始点・終点・遷移時間が決まっているので、X成分初速・Y成分初速を求めることができる。

以下は三次元倒立振子軌道は対象でなければ初速を計算できないと思い込んでいた時に検討した一般化手法です。使う必要はないのだが、消すのも忍びないので置いておきます。

下図に示すように、移行前後の姿勢で対象となる軸を決め、姿勢を座標回転する。仮想となる移行先姿勢を設定し、軌道を生成する。

各軸に補正量が発生するのでこの補正量に従い、軌道を変形させる。具体的には、X軸については座標軸を曲げ、Y軸については座標軸を圧縮することで対応する。

移行完了後、回転した座標を逆回転することで、姿勢の移行を完了する。






転倒回避


転倒回避動作は歩行の特殊系動作として位置づけられる。

転倒回避は開発中です。開発中ドキュメントはこちら。開発中なので記載内容には信憑性がまったくありません。ご注意願います。






カメラ姿勢


頭部はカメラを搭載し、カメラの向きを制御するために動作する。動作の目的がカメラの向きであるため、カメラの向きを指示する。

まず、カメラの姿勢はY軸方向のベクトルを基本の方向とする。画面が水平線に対して回転する角度(Y軸周り)をロールとしcamera rollと呼ぶ、左右方向に回転する角度(Z軸周り)をパン(camera pan)、上下方向に回転する角度(X軸周り)をチルト(camera tilt)とする。 胴体の姿勢と異なるため、注意を要する。

頭部には二つのチルトサーボと一つのロールサーボがある。胴体側から、cameratilt-cameratilt-camerapanとなっているため、結果としてcamerarollが発生する。

ちなみに、camerapan-cameratiltの構成の場合はcamerarollが発生しない。 ラムダはチルト関節を二つ持つため、必ず、cameratilt-camerapanという構成が発生するため、camerarollの発生を避けることはできない。チルト関節が1つの場合は胴体側からcamearpan-cameratiltという構成にすべきだろう。

カメラ姿勢とカメラロールの算出

次にロボット全体でのカメラ姿勢を考える。

カメラ部は胴体についているため、下半身姿勢の影響を受ける。 股関節の姿勢は地面から見て、roll-pan-tiltとなっている。

ロボット全体でのカメラ姿勢の算出