2009年09月27日

プログラムのメモ

メンバーも見れるように、二足歩行ロボットのプログラム改造メモを書いておく。
 
・逆三角関数
現状は「逆三角関数テーブル算出関数」を使って、「逆三角関数」で算出する方式。
そのうち「逆三角関数テーブル算出関数」内の数値データをconst配列化。
「逆三角関数テーブル算出関数」では数値の判定のみを行う。
 
・角度生成関数
現状はxyzの各座標をグローバル変数として使用する。
出力の各関節角度もグローバル変数の配列。
そこから引数を追加し、モジュール独立性と汎用性を高める。
引数:xyz各座標位置、算出角度格納のための配列ポインタ
実行後に渡した配列に算出した角度情報が入っていることになるので、それを角度指令用の配列に投げ込む。
 
 
あとは各足ごとの座標情報と角度格納用配列を構造体にしようかな
 
起動時からの時間も1ms間隔で計ってるので、関数orモーション配列でも作れば簡単に作れますね。
各関節は完全独立動作が可能なので、上半身と下半身のモーションも別々に作れるし。
歩きながらいきなりパンチとか。まぁコケるかもだけど。
posted by Tmk at 04:49 | Comment(0) | 二足

ぐりぐり動かしたい

今週は2日間のみで、また休みに入ってしまうとあんまり調子も上がらないです。
と言いつつ、色々とやらねばなりませんね。


現在作っている二足歩行ロボットのプログラムは、現在モーション実装の基礎段階。
前々から逆運動学担当の方で、今回製作中のロボットについて、逆運動学を解いて歩かせるという目標を掲げています。


 順運動学から逆運動学を解いて、どのように歩かせるかが問題です。
逆運動学を解いてからは、メンバーのAdldがパソコン上で実行できるプログラムを製作しています。
現在はOpenGLでリンクを描画し、画面上でリンクの動作を表現しています。

参考に動画を載せておきます。

(WMV形式1.12MB)
上の動画で、ボールが足の軌道の目標、棒がそれぞれのリンク、リンクの関節上にあるボールが軸です。


このプログラムで実現していることは、「空間上の適当な座標を設定すると、各関節が自動的に角度を決定し、足先がその座標位置に移動する」ということです。そのため、適当な軌道を入力すると、その軌道をトレースする各関節の角度を自動で算出してくれます。
マイコン上で処理することを考えて、リンクの動作自体は整数型で行い、三角関数等も1000倍して、角度は0.5度刻みで指令を出すようにしています。そのため、リンクの動作が滑らかではなく、カクカクした動きになっています。
ちなみに、動画の足の軌道は 適当に計算式を代入したものらしいです。
詳しくはそのうちプロジェクトのブログにでも書かれるんじゃないかな。きっと。

 


で、ここまでの成果から私のすべきことは、これを実機に実装することです。
仕組みとかアルゴリズムは理解しました。
そこからマイコン、システムの仕様に合わせてプログラムを変更したり、 処理を効率化させたりしています。


一番の問題は、サーボへの指令値と実角度が都合のいい数値になっていないことです。
マイコンへの指令値が10変わると、実角度は約0.337度変化します。
PWMよりかなり精度は良い指令が出せるのですが、相互変換はちょっとめんどくさい。有る程度妥協しなくちゃいけないけれど、なるべく綺麗に動けるようにしたいなぁ。

PS2PADのアナログスティックで、ぐりぐり足先の位置を変えられるようになったら面白いので、それを目指してプログラミング中です。

Adldさんへ
動画エンコードしときました。


↑の動画は、銅の塊を適当な板(アルミにクッションつき両面テープを貼って、バネ鋼をはりつけたもの…だっけ?)に倒してみたもの。
なぜか部室にある投光器を接地して、高速カメラ撮影してます。
デカイ銅なので、さすがに殆ど歪まないですね。 

posted by Tmk at 01:18 | Comment(2) | 二足