爪車

ヒト型ロボット 44 つま先を考慮した2次元線形倒立振子モデル

2次元線形倒立振子のモデルにつま先をつけ、支持脚の切替が踵とつま先とで起こるようにしてみました。
一歩で二回着地点の変更をするようになります。

2d_lip_20100131.gif
緑の点が踵、赤い点がつま先。踵とつま先間の距離は0.1。
途中で歩幅(踵-踵)を0.3から0.5へ変更しています。

2次元線形倒立振子の支持脚切替による運動制御は、支持脚の着地点位置の調整ではなくて、着地のタイミングの調整によって行っています。
こうすることにより、踵とつま先の着地点の距離を一定にすることができます。
着地のタイミングの調整による運動制御は「ヒューマノイドロボット」(オーム社)の4章の2次元歩行パターンの生成の方法です。

ヒト型ロボット 43 線形倒立振子の重心の水平運動の相図

Scilabで線形倒立振子の重心の水平運動の相図を描いてみました。

lip20100129.gif

目の錯覚で図が歪んで見えます。

各種パラメータは適当です。

線形倒立振子の重心の水平運動の微分方程式
x" = (g / z) * x
g:重力加速度, z:重心高さ

// lip.sce

Zc = 0.8; // 重心高さ
g = 9.8; // 重力加速度
Tc = sqrt(Zc/g);
x = []; // 重心位置
dx = []; // 重心速度
xi = -0.4; // 初期条件
dxi = -2;

clf(); // グラフ消去
xtitle('','x','dx/dt');

for xi = -0.4: 0.2: 0.4
for dxi = -2:0.2:2
i = 1;
for t=-4:0.02:4
x(i) = xi*cosh(t/Tc) + Tc*dxi*sinh(t/Tc);
dx(i) = xi/Tc*sinh(t/Tc) + dxi*cosh(t/Tc);
i = i + 1;
end
plot2d(x, dx, 1,"011", "", [-0.5,-2, 0.5,2]);
end
end

ヒト型ロボット 42 歩行動画

歩行テスト動画を公開しました。

ヒト型ロボット 41 歩行成功

ロボットの歩行に成功しました。

PCで事前に線形倒立振子規範の歩行パターンを計算し、サーボのポジションデータに変換して、マイコンにデータを送ってから動作させています。

ジャイロの補正は無しですが、安定して歩行しました。
両脚支持期間の導入が、安定した歩行にかなり有効になったと思います。

DSCN1231.jpg
部屋の壁のフックからぶら下げたロボットの背面

そのうち動画をUPしてみようかと思います。(しないかも。)

ヒト型ロボット 40 PCとデータのやりとり

LPC2388はRAMが64KBと余裕があるので、PCからサーボのポジションデータをシリアル通信で受信してRAMに保存しておけるようにしました。
RAMに保存してあるポジションデータを順次再生することにより、ロボットが動作します。
一応16KB程度をポジションデータ保存用として確保してみました。

PCからポジションデータの送信ですが、シリアル通信では1バイトずつしか送れないので、1つのポジションデータを1バイトのunsigned char型2つに分解します。

分解されたデータを複数まとめてパケット単位にして送受信します。
パケットの構成はこんな感じです

[STX][SIZE][CMD][data 1]...[data n][SUM][ETX]

[STX] 先頭コード
[SIZE] データサイズ
[CMD] コマンド
[data] 1~n個のデータ本体
[SUM] チェックサム
[ETX] エンドコード

チェックサムにより通信のエラーを検出できます。
ただ、エラーの検出はできるのですがエラーの処理を考えていません。
もし、エラーが発生したら送受信が停止するので、またリセットしてから初めからやり直しです。

LPC2388でデータを受信したら、1バイトずつに分解されたデータを元の型に復元してRAM上の配列に格納します。
サーボにICS2.0通信でポジションデータを送るときに、また1バイトずつに分解することになるのですが、ジャイロセンサなどの補正を加える際にデータの取り扱いが楽なので、元の型に戻してしまいます。

実際にはデータ本体を送受信する前後に、送受信の確認をする処理を入れ、ハンドシェイク方式で通信しています。
これを必要な回数繰り返します。

通信処理のプログラムの信頼性が低く、通信中に他のタイマなどの割り込みが発生すると、通信処理が止まってしまうので、通信の際はUART以外の割り込みは完全に停止させています。

20ms周期程度でPCとデータをやりとりすることができれば、PCからのリアルタイム制御が実現できるのですが、20ms程度の周期ではPCからデータを受信して、センサによる補正処理、ICS2.0サーボの制御、となるとマイコン側での処理が追いつかず、現状では難しいです。

ICS2.0サーボは、データ送信後に必ずサーボから返信があるので、複数のサーボに連続してデータを送ることができません。
割り込みなどを利用して1個ずつ処理する必要があるので、サーボの数が多いと処理にけっこう時間がかかってしまいます。

また、通信がうまくいかず、データがおかしくなったときのサーボの暴走が怖いので、サーボの電源を入れる前に、データをすべて受信し、データが正常か確認してから動作させるようにしています。

しばらくART-Linuxの出番はなさそうです。

ヒト型ロボット 39 制御ボードを制作しました

マイコンはInterface付属のARM基板LPC2388です。
・AD変換
・シリアル通信
・ICS2.0制御
ができるようにしました。
ICS2.0制御のシリアルサーボ専用なので、PWMサーボ用のポートは用意しません。

給電はとりあえずUSBからです。
どうせPCとシリアル通信するためUSBを常に接続したままにするので、しばらくはこのままにしておきます。

ICS2.0制御部は以前試した送受信の回路です。2系統用意しました。
ICが大きいのでけっこう場所をとりました。
PWMサーボ用のポートがないので制御ボード上がすっきりするかと思っていましたが、そうでもないようです。

今回初めてパスコンにチップコンデンサを使用してみましたが、思っていたよりも簡単にハンダ付けできました。
実装面積を小さくできるので便利です。

PWMサーボと違ってシリアルサーボの制御にはほとんどIOを使わないので、LPC2388の豊富なIOをもてあまし、なんかもったいない気がします。

DSCN1225.jpg

教育用レゴ拡張セット購入しました

ふと、レゴマインドストームの部品がほしい、いろいろと組み立ててみたい、という衝動に駆られました。
マインドストーム本体はいらない(高いから)、部品だけほしい、と思いネットで探してみるとちょうど欲求を満たしてくれそうなものがありました。
教育用レゴ拡張セット(9648)です。
いろいろなパーツが偏りなく、必要十分にそろっています。値段もあまり高くない(1万円くらい)です。

DSCN1214.jpg

DSCN1211.jpg
部品は袋に入っていたので、開封して適当に分類してみました。

DSCN1218.jpg
転がり間接を組み立ててみました。

ヒト型ロボット 38 マイコン開発再開

ロボットを完成させるため、2ヶ月ぶりにマイコン開発を再開しました。

最近はずっとPC用のプログラムを開発していたので久しぶりのマイコン開発です。
どこまで開発が進んでいたっけ・・・覚えていない・・・。
自分で書いたコードでも2ヶ月も前となると、わけがわからない。
解読してみると、ICS2.0の実装を終えている。
パソコンとデータの送受信をする部分が未完成のままほったらかしでした。
途中で投げ出したようなのでテスト用のコードでごちゃごちゃしています。
そういえばデータをパケットにして送受信するテストをしていたような・・・。

ロボットの完成には、まだまだ時間がかかりそうです。

二輪倒立振子ロボット 8 Beauto Balancer Duo 購入しました

発売されたときから気になっていたのですが、ついにヴイストンのBeauto Balancer Duoを購入してしまいました。

DSCN1201.jpg

電池をセットし、説明書の手順通りにするだけで簡単に倒立しました。
なかなか安定しています。
電池はエネループでも大丈夫そうです。

ヒト型ロボット 37 ODEにて動作確認

新年あけましておめでとうございます。
今年もよろしくお願いします。

結局、2009年中には実ロボットの歩行まではいけませんでしたが、開発はわりと順調です。

実ロボットで歩行パターンを試す前にODEで動作確認をしました。



ロボットのモデルは立方体を組み合わせて作ってみました。
脚のリンク長と総重量は実際のロボットと同じです。
なるべく腰に重心が来るように各リンクへの重量の割り当てを調節しましたが、けっこう適当です。

歩行は事前に別のプログラムで計算しておいた歩行パターンを再生する方式で動作させました。
ODEのモデルでは脚に質量があるので、一点に質量が集中する線形倒立振子モデルとの誤差が心配でしたが、すんなりと歩行しました。
さすがに線形倒立振子モデルのように、点接地での歩行はできないですが、十分な接地面積の足部があれば問題なくほこうします。
いろいろと質量の配分や足部の接地面積を変えたりしてみましたが、けっこう安定して動作しました。

drawstuffだとうまくfpsが調整できず、シミュレーションの描写が早すぎて早送り再生みたいになってしまいました。
シミュレーションの計算に時間がかかり描写が遅くなるのはしょうがないのですが、早すぎて見えなくなるのでは困ります。
タイマを使ってリアルタイムに近づけるようにしてみましたが、タイマといっても定期的に呼び出しするようなものではなく、一定時間待機するだけの物なので、なかなかfpsが安定しません。
fpsが適切でないと物体の速度がおかしく見えてしまいます。

Top

HOME

tsumehashi

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

12 | 2010/01 | 02
- - - - - 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 - - - - - -