爪車

ヒト型ロボット 58 ZMPを規範とするオフライン歩行パターン生成を試してみました

単質点モデルにより得られた重心軌道をもとに、多リンクモデルのZMPを求めてみました。

ZMPは慣性テンソルの効果を無視した、多質点のモデルによる近似です。
質点は間接軸の位置に配置してみました。
実際のロボットで、サーボに質量が集中しているという感じです。
ZMPの近似計算に必要な各質点の速度、加速度は前の状態からの差分を元に算出。

多リンクモデルは下半身だけのモデルです。

重心とZMPの軌跡 x方向
Screenshot-Gnuplot-20100331-x.png
赤:重心, 青:目標ZMP, 緑:多リンクモデルのZMP

重心とZMPの軌跡 y方向
Screenshot-Gnuplot-20100331-y.png
赤:重心, 青:目標ZMP, 緑:多リンクモデルのZMP

かなりずれています。
下半身だけのなので、脚の質点の影響が大きいみたいです。
x方向で、目標ZMPと多リンクモデルのZMPの差は、おそらく、膝が曲がり、膝の質点が前に出たことによる影響。
y方向は、遊脚の質点が及ぼす影響がかなり大きいみたいです。

これらの誤差を補正するために繰り返し計算すれば、多リンクモデルでもうまく歩行できる重心軌道が得られるはず・・・

・・・なのですが、うまくいきませんでした。
多リンクモデルのZMPの計算結果が収束せずにガッタガタになってしまいました。

原因調査中。

それにしても、コンパイラの最適化のオプションで計算結果が変わるのはなぜ?

泥沼にはまりそうです。

ヒト型ロボット 57 C++に移植

Octaveで計算していた予見制御による歩行パターンの生成をC++に移植。
上手く実装できていないですが、一応、形にはなりました。

予見制御ゲインなどは、Octaveで計算したものをファイルに書き出して、C++のプログラムから読み込むことに。
FIFOバッファは、とりあえずSTLのvectorで実装。

目標ZMP生成部を上手く書けない・・・。

重心とZMPの軌跡 x方向
Screenshot-Gnuplot-20100321-x.png
赤:重心, 青:目標ZMP, 緑:出力ZMP

重心とZMPの軌跡 y方向
Screenshot-Gnuplot-20100321-y.png
赤:重心, 青:目標ZMP, 緑:出力ZMP

重心とZMPの軌跡 xy平面
Screenshot-Gnuplot-20100321-xy.png
赤:重心, 青:目標ZMP, 緑:出力ZMP

プログラミングって難しい。
現状、ロボット開発の9割以上をプログラミングに費やしていますが、技術は一向に稚拙なままです。
やりたいことが上手く実現できない。
なんとかしないと。

ヒト型ロボット 56 ZMP規範の歩行パターン生成に着手

今までは、ロボットの歩行パターンの生成に3次元倒立振子規範の方法を使用していましたが、ZMP規範の方法も試してみることにしました。

ZMPを規範とするパターン生成法には複数の手法があるようなのですが、今回試してみたのは「ヒューマノイドロボット」(オーム社)のP144, 4.4.3 オンラインパターン生成 で紹介されている予見制御による歩行パターンの生成です。

本を何度読んでも、さっぱり理論が理解できないでいるのですが、Octaveで試行錯誤しながら実装してみたところ、それっぽい結果が出てきました。


縦軸:距離[m], 横軸:時間[s], 緑線:目標ZMP, 赤線:計算によるZMP, 青線:重心軌道

サンプリング時間はけっこう細かくしないといけないみたいです。
今回のは0.001で試しています。
0.01で試したところ、ZMPの軌道が目標ZMPに追従しきれず、なまってしまいました。

サンプリング時間が細かいので、繰り返し計算の回数がかなり多くなります。
下手に実装すると計算に時間が掛かりますが、事前に計算しておける部分が多いので、上手く実装すれば計算時間は少なくてすみます。

ヒト型ロボット 55 歩行しませんでした

実機での歩行実験をしたのですが、うまくいきませんでした。

原因はサーボのトルク不足と、剛性の低さです。
まあ、ロボットの設計が悪かったと言うことです。

今回のロボットの脚の長さは40cm以上あり、体重は2kgほどです。
あまり脚を曲げないようにして歩行すれば、KRS-4014SHVの40.8kg-cmのトルクでも大丈夫かなと思ったのですが、ぜんぜん駄目でした。

片脚で自重を支えると、サーボのトルク不足、ギヤのバックラッシュ、フレームのたわみなどが合わさり、2cmくらい沈んでしまいます。
そのため、歩行モーションを再生すると、遊脚は支持脚と同じ高さに接地しようとしているのに、支持脚が自重を支えきれずに腰の位置が沈んでいるため、遊脚が接地する際に地面を強く踏んでしまいます。

こうなるとすぐに動作が不安定になり転んでしまいます。

膝を二重間接にしたのも良くなかったと思います。バックラッシュが増えるだけでなく、膝が重くなるので、脚を振り出したときに全身のバランスが崩れやすくなります。

ジャイロやら何やらのセンサで安定化できるレベルではないです。

というわけで、このロボットの開発は放棄することに。

しばらくは、PCでのシミュレーションがメインになると思います。
ただ、実際のロボットを動かしてみないとわからないことも多いので、そのうちまた新しく作り直します。

ヒト型ロボット 54 花粉がひどい

ODEでの歩行の確認ができたので後は実機で試すだけ。
なのですが、PCからマイコンへデータを送るプログラムをなくしてしまったので再び構築中。

マイコン側での受信のプログラムはあるので、それを参考にデータ送信部を書いています。
しかし、酷い。送受信処理が複雑でコードがぐちゃぐちゃです。
もうやだ・・・
PCからマイコンにデータを送る良い方法はないものか。

目がかゆい。

ヒト型ロボット 53 ODEで歩行確認

生成した歩行パターンをODEで動作確認。



ロボットのモデルは
腰に2軸 (ヨー軸、ロール軸の2自由度)
脚に7軸 (膝の2軸を直列二重関節として、角変位が同じになるように制御しているので、脚の自由度は6)
全体では16軸構成で、14自由度のロボットです。

腰の位置に重心があると仮定して線形倒立振子規範の歩行パターンを適用したところ、すんなりと歩行できました。

ヒト型ロボット 52 線形倒立振子を拡張

線形倒立振子規範の歩行パターン生成に仮想支点の考えを取り入れてみました。

線形倒立振子の支点の位置(=ZMP)を変化させ、重心の軌道を制御するというものです。

通常の線形倒立振子だと初期条件によって重心の軌道が一意に決まってしまいますが、支点を動かすことで、ある程度の範囲内で重心の軌道を変化させることができます。

参考文献
(1) 仲里,三希 佐藤,智矢 渋谷,麻木 [他], 仮想支点を用いた二足歩行ロボットの実時間軌道変更 (産業計測制御研究会 計測・センサ応用,モーションコントロール全般), 電気学会研究会資料, IIC, 2008(69-85) pp.25~30 2008/3/10 電気学会

(2) 渋谷 麻木, 鈴木 智之, 佐藤 智矢, 大西 公平, 仮想支点を適用した線形振子モードによる2足歩行ロボットの停止軌道生成法, 電気学会研究会資料. IIC, 産業計測制御研究会 2007(100) pp.39-44 20070307 電気学会


いろいろと試行錯誤中です。

脚切替時の着地点の修正をしないでも歩行できそうです。

途中で歩幅を変更しています。

x方向の重心軌道(赤)とZMP軌道(緑)


y方向の重心軌道(赤)とZMP軌道(緑)
Screenshot-Gnuplot-20100308-y.png

両脚支持期も線形倒立振子規範でいけそうです。

ヒト型ロボット 51 運動学のプログラムほぼ完成

運動学のプログラムがほぼ完成しました。

以前のロボットで使用していた片脚6軸の順・逆運動学のプログラムを大幅に改良。

冗長関節に対応。
膝二重関節(直列ダブルサーボ)に対応。

冗長関節の逆運動学は、ヤコビアンの擬似逆行列を利用した数値計算法です。

冗長関節に対応したことにより、腰とつま先に関節が追加可能になりました。

まだ計算の信頼性などに若干不安が残りますが、一応完成ということで次の課題に移ることにします。

Top

HOME

tsumehashi

Author:tsumehashi
FC2ブログへようこそ!

02 | 2010/03 | 04
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -