開発日誌(25)
■5月16日■
モーションを引き継ぎながら歩行モーションを生成し続けられるようになりました。
11歩分のモーションデータです。最初の1歩と最後の1歩は半歩なので、山が12個あります。
まだ、SEMB1200Aでリアルタイムに生成させながら歩かせるということはできていないのですが、モーションを再生させながら、次の1歩のモーションを生成し、再生中のモーションリストに接続できるようにしました。 つなぎっ部分がちょっと心配な感じです。
接続フレームの判断が難しくて、誤差が累積して15歩くらいでエラーを起こしていたのだけど、なんとか何歩でも生成できるようになりました。ふぅ。
今日はインターフェイスボードのはんだ付けをする予定だったのに半日以上の遅れです。
■5月17日■
今日は、昼からオサル君が遊びに来ました。 ロボット談義を交わしながら今後の進め方など話して楽しい時間をすごさせてもらいました。
おサル君がこれからやりたい事を聞いてると、それほど遠くない将来にはマイコン制御が必要になりそうなので、マイコンでの開発の実際の様子を見せたりしました。ATMEGA32でさえ、相当な拡張性があるのだけど、その拡張性を活かすためには一通りの知識と技術が必要で、逆に教材的な側面を持ったマイコンロボットは、センサー類などが既に揃っていたりしてとっつきやすい反面、拡張性が低かったりしてオビタス状態ですね。
若年層のメカトロへの導入の難しさを少し理解しました。
マーキュリーですが、SEMB1200Aのインターフェイスボードを作成。 バッテリーコネクタも手に入ったので電源周りが完成したので、やっと腰に担げるようになりました。 週末までにはその他の回路も完成させて練習会に望みたいです。 ただ、この状態だと「ラムダ」じゃなくて「マーキュリー」なんですよね。
目標では、バッテリーも無線モジュールも積んで、ラジコンで歩いたり止まったりできるところまで作り込みたいけど、ムリかなぁ〜。
SEMBが、ちょっとむにゃむにゃな事態になってしまって一筋縄では進められない状況になってしまったのですが、メカ的には問題ないと思われるので上半身の設計・製造へと進みます。
上に向かってサーボ用のコネクタヘッダーピンがむき出しになってます。 8ポート分あります。 1ポートに4サーボつけるので32サーボ分です。上半身をつけるまで4ポートしか使わないので、むき出しになっている電源ピンを保護しなくちゃならないですね。 こわいこわい。
■5月20日■
あんまり変わり映えしない画像だけど、インターフェイスボードの、1wireUART部、つまりサーボインターフェイスの配線が終わって動作確認もできました。先ほど動作確認ができたインターフェイスボード越しにサーボが動いている状態の画像です。
今回、0.65mmピッチのICを1.27mmピッチのユニバーサルボード上で配線するというのをやりましたけど、もうやりたくないですね。動いてよかったぁ〜。
あとは、SPIインターフェイスの配線を済ませればインターフェイスボードは終わり。 加速度センサーをこのCPUボックス内に収めようと思っていたのだが、ちょっとムリそうです。
それより、サーボの配線が汚いですね。せっかくのリンク脚なんだから、配線はリンクアーム内に隠すようにすべきなんだろうなぁ。サーボコネクタが隠れるので避けていたんだけど、なんとかメンテできそうなので思い切ってサーボの組み方を変更しようか。
ただ、サーボを裏返しに取り付けると、プログラムの設定が全部変更になるのがやだなぁ。 もしかしたら、サーボの設定内の「極性」ってのを反転させればいいのかな?
■5月24日■
ZMP規範での歩行モーション生成で、引継ぎモーションを生成して連続して歩かせるところまでできました。 心配していた繋ぎ部分は問題ないみたいですね。動かしていても繋ぎ部分はわかりません。 ただ、3歩ぐらいだと大丈夫だったけど、5歩くらいから段々と勢いがついてきて転んでしまうことが多い。 やはり負荷による補正は必要そうです。あと、足裏状態か、加速度やジャイロでの姿勢管理も必要なようです。
では次に進みましょう、ということで、SPIインターフェイスで無線コントローラをつなぎました。 回路的にはレベルシフタを通すだけなのだけど、工作に4時間くらいかかった。あぁ疲れた。
ラムダのメインCPUであるRPU-100はOSとしてNetBSDが積んであって、通信インターフェイスとして無線LANが使えたので問題なかったのだけど、SEMB1200AはモニターがRS232Cなので、有線です。 マーキュリーの股下のお尻の穴の辺りにコネクタがあるのだけど、歩かせるとケーブル引きずって最後にはコネクタが抜けてしまうか、ロボットがこけてしまう。
開発中の無用なストレスは排除すべきなので無線化したいのだけど、RS232C-BTのコンバータってお高いんですね。びっくりした。 やるならZigBee化か、、1万円ですか、考えちゃうな。
昨日は関東組ロボット練習会に行ってきました。 秋葉原のロボット店3点での分散開催ということで、RTを陣地にして主にマーキュリー脚でのリング床での歩行確認をしていました。
リング床でもへんなスリップをすることなく歩けそうなことがわかりました。よっしゃー、今度は1分以内に自律でダッシュ2000でゴールしちゃる。
実はマーキュリーを練習会に持っていくことについて問題がありました。
holypongさんのautomo 05とか、KENTA君のザウラーとかのきれいにケーブル処理されたマーキュリー脚を見てしまったので、メンテ性重視でコネクタを外側に配置したラムダマークUのマーキュリー脚は見るに耐えない、じゃなくて見せるに耐えない。
結局サーボの取り付け方向を逆にしてケーブルをリンクの内側に納めるようにしました。 ところが、サーボをひっくり返して、逆キネの関数やオフセット設定を直したのにZMP歩行の静止姿勢がおかしい。ものすごく重心を後にずらしてしまう。 おっかしいなぁ〜、と思って色々と調査すると、重心計算の結果がものすごくおかしな値になっている。
結果としては逆キネ計算が一部極性が間違えていました。 サーボ角への反映も逆さまになっていたので見た目はおかしくなかったのに質点計算の結果だけがおかしくなっていたのでした。 それを直してまともになったかというと、重心計算は直ったのだが、ZMP歩行の終了時にはやはりまだおかしな姿勢をとる。
これは練習会場でデバッグすることにして出掛けました。 そして、「おかしいなぁ」と言ってる時のc4cronoさんとの会話が散財さんとこに載ってます。 話していて目標ZMPがおかしいのかもしれないということに気付きました。 その後、ぴしぃさんのロボット構想の話をしていたのでデバッグは成らず。 今日、調べてみると、目標ZMPの最後のフレームで歩行開始点に戻る、という数値になっていました。 なるほど、それで重心を後に移動しようとしてたのね。 なんかけなげだ。(^。^)
ちなみに散財さんはPCで計算した結果をコンソールからロボットに送り込んでる風に書いてますけど、あれはコンソールでコマンド入れているだけで、ZMP歩行に関する計算はすべてロボットに載せたSEMB1200Aでやってます。
いろいろ有ったけどバグも取れてケーブルもきれいにおさまってよかったよかった。
そして最後に呑処ひろしで打ち上げ。 下の画像はc4cronoさんのBattiV胴体にWegWeizerの頭を乗せたところ。 スイマセン、お二方の自信作を勝手にあわせちゃって。(^^ゞ
それにしてもすごいなぁ〜、ブラックさんに見せたかったなぁ〜。
次は後退歩行に着手。 次にカーブ歩行。 多分この辺は順調に進むはず。 たぶん。。。
追記:
連続で動かしてみると、まだまだバグがあるみたいです。動かしていると突然EXCEPTIONが発生してハングします。 多分、メモリー関連の面倒なバグっぽいです。PCで動かしても問題発生しないのにな。 これもC++ならコンパイル時に結構なレベルでチェックしてくれるんだけどな。
立ち上げて2回くらいはexceptionで止まる。 その後、見かけ上正常に動き出すのだが、メモリが無理やり初期化されるためか?この辺りにヒントがありそうな。。。
■5月25日■
順調に進むはずだった後進歩行。 ちょー行き詰まり状態です。(^_^;)
原因不明のexceptionが解決しない状態ですが、どうやらこれは、割り込みルーチンでリスト構造体をアクセスしていることに原因がありそうな雰囲気。 だとすると、致命的な設計ミスです。プログラムを大幅に書き直す必要が出てくる。
それにしてもなんだかおかしな状況です。
前進歩行ではそこそこまともに動いていて、しばらくは正常に動作します。やがてexceptionが発生して止まるのですが、これは関節角度データを採取しつづけているためにメモリーがオーバーフローしてしまっている可能性が大。
それよりも後進歩行にした場合、歩幅をマイナス値にするだけで、後進歩行のモーションを生成するようにしたのだけれど、もうもうさっぱり動かなくなってしまいます。最初は符合が変わったことによる考慮ミスで、数値が不定とか無限大とかになってしまっているのだろうと思っていたのだが、Cygwinでテストプログラムを動かしてチェックしている範囲では問題なし。
そして、SEMB1200A上でも、割り込みルーチン側に計算結果を渡さないようにすればexceptionが発生しません。
一体何が起こっているのか。。。
SEMB1200Aの開発環境構築をしているWebページを再度読み込んで行くと、「OS無しでの動作なのでmallocなどの関数はまともに動かないと考えるべき」とあります。 がぁぁん。 malloc使いまくりですよ。(>_<)
実は、OS無しだとメモリー管理はどこでどうやってやるのかな?という疑問はあったのだけど、試しに動かしてみるとちゃんと動くように見えるので「あぁ、なんか知らないけど使えるようになっているんだぁ〜。」と軽く捉えていたのですけど、ダメですか。(^_^;)
まぁ、配列使っても出来なくはないし、OSないんだから、メモリー空間に変数をあてがうように(つまり自分でメモリー管理するってこと)すればいいのだけれど、めんどくさいな。割り込み周期を変えたり歩行ペースを変えるとデータ量が変わるのをいちいち計算しなきゃならなくなるのでリスト構造にしたのにな。
あぁ、困った困った。(ーー;)
また、今回も自分のくーだらないミスであることを切に望みます。 現象が理解できないのでもう少し調査するってことにします。
■5月26日■
くーだらないミスを一つ見つけて、うしろにも歩くようになりました。 ただし、バグの内容と現象はまったくリンクしていません。なんでこのバグであんなふうになるのか??なぞです。
しかし、まだexceptionの問題は残っていて、mallocが使えないのも確定のようです。そこんとこをどうするかはおいおい考えるとして、カーブ歩行を進めることにします。
カーブ歩行はちょっと難物。 計画ZMPはワールド座標を使っているので、カーブ歩行のZMPをプロットしていくと、ものすごくおかしな計画ZMPになります。これをちゃんと解くことができるものなのかがわからない。 それは試せばいいことだけど、そういう問題よりもカーブで歩き続けることを考えると、もっとシンプルな表現にする必要があるので1歩歩く毎にワールド座標系を回転させることを考えるべきかと思っています。 すると、質点の加速度なども同様に回転させる必要があったりするのでちょっと大変ですね。 ホントはどうやるんだろう。
※ワールド座標を回転させるって言い方はおかしい。 1歩ごとにローカル座標を使って、パラメータを引き継ぐって言い方の方がいいか?
↓カーブ歩行の計画ZMP。 これで生成した重心点軌跡をロボットの動作にうまく反映できるのかな。 そもそもちゃんと計算できるのかなー。
む?X方向ZMPの正負が逆ですね。ゴメンナサイ。
今は直進するためだけの姿勢表現しかサポートしていなかったのだけど、姿勢の回転や、股関節のヨーを使った姿勢もサポートする必要がある。 これが結構面倒なんだよね。 ラムダの時もてこずりました。
わんだほー出場を第一に考えると、その場回転のモーションを作っておいて、直進とその場回転で移動は完了。 上半身の作成とカメラ周りを整備する方を優先すべきだとは思うのだけど、賢い選択ができないところが、サグラダ・ファミリア第6の使者と噂される原因でもある。 なので、カーブ歩行に着手しましょー。(^・^)
ボクの夢はロボット博士のリンクにラムダロボット研究所を載せてもらいました。 ありがとうございます。ではでは相互リンクさせていただきます(^。^)
■5月28日■
SEMBのことは岡田さんに聞け!ということで、SEMB1200Aのmalloc( )の件については岡田さんにメールで相談しておりました。 岡田さんがテストをしてくれまして、その結果によるとmalloc( )は問題なさそう。 ということで、なぞのexceptionは自分のプログラムバグである可能性が高まってきました。 よかったよかった。
でも、そのデバッグに没頭すると他が進まないので、カーブ歩行の下準備を進めながらゆるゆるとデバッグすることにします。
今日は腰のyaw角を姿勢に取り込みました。 足先のyaw姿勢も取り込みました。 カーブ歩行にはこの2つが必要です。yawを活かしたまま、rollをサポートすることができないので今のところrollは取り込んでいません。yawが0degの時だけ有効ってのも片手落ちなので。
rollを取り込まなかったお陰で変換式は随分簡単になりました。
■5月30日■
昨夜からラムダマークUの上半身の設計を進めています。 腕に新機構を取り込みたいと考えていたのですが、時間的に難しそうなので諦め、今回の腕は立ち上がるための補助の機能に限定することに割り切りました。
やはりリンク脚だと自由度が少なく不便。 生活ロボットとするには難しいと実感しました。 胴体にピッチ軸を設けたのですが、可動範囲はせいぜい90度。 120度は欲しいので足のピッチ軸がないのは厳しいです。
今回はZMP歩行の実験機体という割り切りで進めます。
八頭身モナー・・じゃない、八頭身ガチャピンみたいでイマイチ。
マーキュリーは足が長いので、どうしても長身キャラになってしまう。 かわいくない。 足に外装つけて太くしようかな。
手先はまだ考えてない。 起き上がり補助に割り切れば、サーボをもっと削れるんだけどね。まぁ、、、。
頭はモノアイにして、ちっさくまとめて、ミスターノーか、ノーモア映画泥棒みたいにしようかと思ったけど、(その時はラムダじゃなくなるかな。。)時間的に頭部を新作するのはムリと判断して、ラムダの頭をそのまま乗せます。 ※ミスターノーは、ミスターノーみたいに首が長いってことね。
ZMP歩行の方は、カーブ歩行に着手。 まずは目標ZMP列を生成します。 色々考えたけど、歩行を停止するまではグローバル座標で計算し続けることにする。ロボットが、グローバル座標中にどういう姿勢で存在するか、をうまく表現することにして帳尻を合わせる方向で。
↓前進、左カーブ。 旋回歩行の中心は左足の左側200ミリ地点。 座標でいうと、(-240,0)となります。
↓後退、左カーブ
↓前進、右カーブ
↓後退、右カーブ
そして、一番初めの前進、左カーブのタイプで重心座標の軌道を生成したものがこれ↓
うまいことできてますねー。 次は、これに合わせた歩行モーションを生成させねばならない。 ちょっと大変。
■5月31日■
構造検討をやりだすと、止まらなくなります。 なんだかんだで今日はほとんど構造検討。
どうしてもスタイルのバランスが気に入らない。 そのうち慣れるのかなー。
構造検討しているうちに、ラムダマークTの構造改良の案を思いついてしまったので、そちらもやってみる。途中、骨盤と足間隔が広がってしまってこんな感じに。
無理やり骨盤を狭めて、正面からのスタイルは元のラムダライクになりました。 ラムダのスタイルはなんだか好きです。 長い付き合いだからかなー。腕はイマイチしっくり来てないんだけど、まぁ、、、。
ラムダマークU(ラムダ・マーキュリー)も、骨盤の幅を狭めたらもう少し好きなスタイルになるかもなぁ。でも、せばめられないのでそろそろ部品を作り始めようかな。 フェイスマスクも作り直したいが、その時間はないだろうな。外装は後回し。。
マーキュリーにラムダの顔つけるのがまずいんだろうな。 マーキュリー用の別の顔にすべきか。。
カーブ歩行は、歩行モーションの生成の仕方について検討中。 直進の時は、目標ZMPと、歩行モーションは予定調和的に生成していたのだが、カーブ歩行では目標ZMP列を歩行モーションの生成パラメータにできないかというアイディアを検討中。 うまくすれば、直進もカーブ歩行も統一した生成ルーチンで記述できそうな予感。 そういうのが好きなんだよなー。
■6月3日■
そろそろ上半身の製造に取り掛からねばあとの工程がきつい。 というか、フルサイズでZMP規範の歩行ができるのかって話もあるのでもう検討期間は終わりです。
ということで、アミエさんに板金の切り出しの見積もり依頼。 今回は2.0mmで作りたい部品がいくつかあるのだけどアミエさんとこのメニューは1.5mmまで。別料金ならやってもらえるのでしょうか。 見積もりお願いしますね。
注文しておいたベアリングは届いたので、あとはぁ〜、、 スペーサーかな。 注文しなきゃ。
今回は大型のCPUが2つも載るので、バッテリーをどうしようかと考え中。 画像処理用のCPU(RPU-100)はサーボをあまり動かさないので、ちっさいバッテリーでもよいかなと思いまして、450mAhのバッテリーを用意してみました。これでどれくらい持つかな。RPU-100はNetBSDなのでブートに時間がかかります。なので電源のON/OFFをあまりやりたくないってのでバッテリー分離は良いかもしれない。
■6月4日■
スペーサーとネジの発注も終わって、後は部品が届くのを待つ。
そして再びカーブ歩行の続きなのだが、なかなか考えがまとまらない。難しい、というより考えるのがめんどくさいという感じ。困ったな。 とりあえず、自分の思考のモチベーションを上げるために考えなければならないことのイラストを書いてみる。
先日計算してみた重心軌道にZMP軌道を重ね、その時の足の向きとロボットの向きを入れてみる。
カーブ歩行といっても、多角形に歩くだけで、1歩1歩は直進するという考えである。 ロボットの進行方向は支持脚の向きと一致する。歩き始めはそうなっていないように見えるが、スタンスが変化しているため違うように見えるだけ。
ロボットの姿勢上のロボット原点は太い矢印で結んだ折れ線上にあることになる。
ロボットは1歩の範囲では常に直進している。計算上はグローバル座標から太い矢印の傾き分だけ回転したローカル座標上を直進していることになり、ロボットの重心点を目的の重心軌道上に置くためには、該当するエリアの重心点軌道をロボットのローカル座標の傾きぶんだけ逆回転させてロボットのローカル座標上に変換してからロボット原点の差分として与える。
すいません。自分にしかわからない文章になってしまいました。 明日読んだら自分でもわからないかも。上の文章に書いたことをプログラムで記述することでカーブ歩行のモーションが生成できることになります。
板金部品が届くまでに形にしなきゃーな。
■6月5日■
目標ZMP列から歩行モーションを生成しようとしているのだが、難しい。
歩行だけを考えれば良いのだから決め打ち的なプログラムでもいいのではあるが、そこはプログラムの妙で、美しく記述したい気持ちがふつふつとしているのでもがいている最中である。
ZMPが移行すると必ず歩行動作が発生するわけではなく、両足の間でZMPが移動する分には体重移動だけでよい。 両足の中央にZMPが有る状態から歩き始める場合はどちらかの足に体重を掛ける動作が入るが、それが体重移動。
ZMPの移行に関して、歩行動作となるか体重移動となるかは、その時の足の位置によって決まる。 なので、目標ZMP列だけから歩行か体重移動かを判定することが出来ない。
ん〜、つまり、ZMP移行が発生した時の姿勢をみて、判断しなければならないわけか。 あぁ、日誌書きながら問題解決してしまった。
でも、もう午前2時半なので続きは明日。
■6月6日■
やっとカーブ歩行の歩行モーション生成部が形になりました。
↓左前にカーブしながら3歩進む時の重心点軌道です。右側はロボット原点の動き、多角形に進んでいる様子です。縦横のスケールが合っていないので注意。
↓歩行姿勢のパラメータの動き。 「足前後」というパラメータが急変している部分で、進む方向を変換しています。
↓それを歩行モーションにして、再度グローバル座標に変換しなおしたもの。 ちゃんと変換できている様子です。
これでカーブ歩行できたか、というとまだでして、今度は多質点モデルからのZMP導出を2次元に拡張しなければなりません。
元々3次元値を扱っているのだけれど、今までは直進しか考えていなかったのでグローバル座標とロボットの座標のオフセットは1次元値だったのですが、カーブ歩行をサポートするには2次元値で扱わねばなりません。更にはロボット原点だけを引き渡せばよいのではなく、ロボットの向きも引き渡す必要があります。この拡張にあわせて直進歩行のルーチンも修正せねば。
現在は、直進用として、目標ZMP算出に2種、歩行モーション生成に2種の合計4種を使っていました。 ここに加えてカーブ歩行用で更に4種も作るのはいやなのでなんとか直進用とカーブ用、更には初期生成用と継続生成用も統合したい。 カーブ歩行に拡張した時に使った目標ZMP列を使う方法なら統合できそう。
さぁ、続きをやるかぁ。。
■6月7日■
ZMPの移行と、現在姿勢を照らし合わせて重心移動のみか歩行動作を伴うのかを判定する部分でしばらく悩みましたが、なんとか乗り越えました。
多質点モデルからのZMP導出と目標ZMPの差分をフィードバックするところまでできました。
↓フィードバックなしでの多質点モデルからのZMP導出結果 (スパイクは見づらいので削除しています。)
↓時間軸グラフだとこんなふうにスパイクがでています。
↓そして、2回補正をかけた結果がこれ。
一番最後にゴミが出てしまっています。これはバグっぽいな。 要チェックです。
見て判るように重心点が目標ZMPを超えてしまっています。 これは大抵歩けない。 調べてみると補正1回ですでに目標ZMP付近まで来てしまっています。
重心が十分に低い場合は接地している質点を計算に入れない方がよさげです。重心が高くなると影響度合いも小さくなるので気にならなくなりますが、下半身だけのモデルだとやっぱり影響が大きいようです。 接地面のスリップは考慮していないので接地している質点を計算に入れないのが正解だと思うのですが、どうなんでしょ。
それよりなにより、直進だと30ミリくらいの振幅で収まっていたモデルが、カーブ歩行だと50ミリもの振幅になってしまうのはやっぱ異常と考えるべきですね。座標の回転が思いのほか影響しているのだろうか。
■6月7日■その2
一番最後に出ていたゴミはバグでした。
継続歩行に関してはまだ未着手なのだけど、歩行生成まではなんとか形になりました。一気に継続歩行に着手しちゃうかなーとも考えたけれどちょっと疲れてしまったので、この段階で歩かせてみることにします。
継続なしの2歩(3歩ともいえるけど、2歩分進むのでこれを2歩と表現している。)だけです。 グリップもいまいちできちんと曲がっていかないんですけど、トルク補正しないでも一応はこけずに歩いています。 もっとも連続して10歩くらい歩けないと「歩けた」とは言えないですが。(^^ゞ
3歩にしたらexceptionが出たので2歩にしました。 岡田さんに色々と相談したものの、ZMP歩行のインプリ優先でまだメモリー関連洗えてません。 なんだかはまりそうで、はまるとプログラムどころじゃなくなりそうなので先にインプリ進めてます。 もっとも、今のままじゃ使い物にならないのでたとえインプリが完了してもダメなんですけどねー。
あと、右曲がり、左曲がり、前進、後退、左足から、右足から という組み合わせでキチンと歩行生成することを確認したはずなのに、右曲がりにするとガシャガシャガシャと暴れて倒れてしまいました。 まだバグがあるんだな。 ううむ、、先は長い。
それにしても、コンソールケーブルは邪魔だ。 こけるたびに抜けてしまうので、手間が掛かって仕方ない。 ここははやりZigBeeで無線化しちゃうべきか。Xbeeってのがあるけど、あれ二つでシリアルケーブルの無線化ってできないのでしょうか。なんかマイコン積んでるっぽいのでアプリ書かなきゃならないのかな?よく判ってません。 ベステクのZigBeeモジュールよりちょっと安いので。 ふと買っちゃいそうになったんだけど、どうなんでしょ。
書き忘れてた。 ゴッドハンドすげーですねー。 こういうの見ると真似して同じようなのを作りたくなるのだけど、人間の手を模して作ると自律で物つかんだりできそうにないから企画倒れに終わってしまう。それにしてもサイズ的マッチしているところがすごいです。強度とか握力とかはどんな感じなんでしょうかね。こけたら壊れちゃったりしないのでしょうか。アニバーサリーに行けば見れるみたいだけど、そんな時間的余裕無いしなぁ。
■6月9日■
XBee、あのあとちょっと調べたところ、
「XBeeとはそのZigBeeの規格を満たしたMaxStreem社の小型無線モジュールのことです。このモジュールの特徴は、ホスト(マイコンなど)と非同期シリアル・インターフェースで通信できることで、ホスト側にシリアル・インターフェースを用意すれば、とりあえず2点間の無線通信ができます。」
とのことなのですぐに注文。今日帰ったらもう届いてました。 実はなにか荷物届いたっていうので、てっきり切り抜かれた板金が届いたんだと思ってたからびっくりです。
PCとつなぐのは、USB-COMモジュールを介せばよいので、おもちゃ箱をさぐればそれらしい部品はでてくるはずなのだが、色々手抜きしたくてsparkfunのXBee Explorer USBも一緒に買いました。
デフォルトでは9600bpsだというので、115200bpsに変更しなければならない。 どうやらATコマンドを入れて変更するらしい。
変更して、設定保存にして、これでもう片側をマイコンにつなげばコンソールケーブルの無線化ができるはず。 ちょっと高いケーブルですけどねー。 ベステクのAVRマイコンも、SEMB1200Aも、モニターが使うCOMポートはパソコンと接続するためにRS232Cになってます。 なので、XBeeもRS232Cにしなきゃならない。ちょっとまぬけだけど、RS232Cチップを入れなきゃね。 うちには無いから買わないとな。 なんか買うときに今度使いそうな部品も一緒に買うようにしているんだけど、考えると今度使いそうだと思って買った部品が役に立ったことないですね。(^_^;) きっと、買った部品代より送料が高くて、もったいないなと思っても本当に必要なものだけ買うのが正解なんでしょうね。
そういやひろきさんがXBee買ったってブログに書いてたような。。 と思って見返してみると、PCとPCをXBeeでつないだりしてますね。(^^ゞ 調べること無かったな。
■6月10日■
カーブ歩行プログラムデバッグ中。 右曲がりでおかしくなるバグは解消しました。今回、右曲がり(回転中心が、ロボットの右側に来るケース)ではバグの連続でした。カーブでは、1歩の移動距離を角度に変換して扱っているのですが、左曲がり(回転中心がロボットの左側にある場合)だと、歩行開始時のグローバル座標における角度が0degとなるのに対して右曲がりの場合は180degになります。このことを考慮し忘れてしまって、あちこちでひっかかってしまいました。もっとも考え易いケースを元にしてプログラムを組んで、その後に一般化していくという手順になりがちなのだけど、逆に面倒なケースから考えていくべきなのかもしれないです。 それだと、とっつきが悪くてなかなか形にならないかな。
次はカーブ歩行の継続歩行部分を作るか、直進歩行をカーブ歩行部分に合わせて一般化を進めるか、または明日には届くであろう上半身の板金部品の曲げ加工に着手するべきか。 こんなときは何を優先するか迷ってしまい、結局は手が止まってしまいます。
飲みに行っちゃってなんにもやらないかも。(^_^;)
■6月13日■
昨日は退職祝賀会に行ってたんだけど、一昨日は飲みに行ったりはしてないがまったく進捗なし。 申し訳程度にプログラムソースを眺めたりしたけど何にもしてない。
そして今日は、酔った次の日の気だるさを押しての工作デーです。 日中は工作して夜からはプログラム、という計画だったけど、うまくギアが切り替わらず工作一辺倒でした。
↓夢遊病者のように立ったまま寝ているラムダ君。 すっかりと大きくなりました。
首から上のサーボはRS301とか302なので、7.2Vが必要。レギュレータ基板は乗せてないからまだ通電はできません。
↓ハイパワーCPUを二つも積んでます。 まだまだつかいこなせてませんが。。(>_<)
↓腰にはピッチ軸がありまして、今回は長穴リンクにしてみました。トルクアップもさることながらガタ付きを抑えたかったので、このような配置に。 お陰で画像の位置だとサーボ側からしか動きません。
明日はさっさと腕を作って、プログラム作成に戻らねば。
■6月14日■
一応概ね組みあがりました。
なんか、寝たきりでやつれきった老人が、ムリに立たされているみたいな風貌。(^_^;) 外装つけたらもうちょっと見栄えよくなるかな。
足をもっとも伸ばした状態で、身長は54〜5センチくらい。体重は大体3キロくらい。 ちゃんと歩くのかどうかものすごく心配になってきました。
胴体ピッチ軸のリンクバーは、M2のネジでスペーサーを固定するようにしているのだが、強度的にちょっと不安。 M3に変更すべきかも。
夕方くらいには画像の状態まで組みあがったんだけど、その後質点情報をまとめたりして、結局プログラムには手付かず。 だけど、カーブ歩行の目標ZMP列の生成部分の一般化についてだいぶまとまってきたのでそのうち一気に作業が進むであろう。 きっと。。。
この重さになるとさすがにもう負荷補正なしには歩けないだろうなと思うので、負荷補正の部分も進めなくてはならない。 起き上がりのためのモーション再生プログラムも作らなきゃならないし、そもそも加速度センサーをまだ積んでない。 なんか絶望的に進捗が遅れてます。
■6月15日■
今日は出張から早く帰ってきたのでひたすらプログラミング。。
なんとか、カーブ歩行の計画ZMP生成関数の統合(静止から歩き始めるタイプと引継いで歩き続けるタイプの統合)に成功したようです。 色んなステージで引継ぎに使うデータをロボット原点からZMPに移行して、あちこち整理してちょっとは洗練できた感じ。
直進タイプも同様に書き直すことになります。 ま、カーブ歩行の、すごーく回転半径が大きいのが直進なので、カーブ歩行一本で行くって案もありですが。
新旧ラムダをならべてみました。 いずれも電源入れていないのでバランスで立ってます。こうして見るとRS601CRってでかいサーボですねー。
明日は遠地出張なので恐らく作業できない。 水曜日は新人歓迎会なので確実に作業できません。 だめだこりゃ。
■6月19日■
今日は会社の創立記念日で半ドンで引けである。
普通ならどこかしらに紛れ込んで飲みに行くところなのだが、今週はなんだかんだで毎日のように飲んでいて、未だにアセトアルデヒドが体中を駆け巡っている感じ。 ぐったりしている。ウコン常備しとかなきゃだめかな(^_^;)
そういうわけで早々に帰宅してごろごろしてました。 ごろごろしすぎて気付いたらもう深夜。
明日は練習会なのにただ組み立てただけのラムダ(らしきもの)があるだけ。 ラムダ君、もう3日もこうやって本棚の前でたたずんでます。申し訳ない。(>_<)
こんなでく人形状態のラムダを持っていっても仕方ないしなぁ、かといって練習会でプログラム組むのってムリだし意味ないし、少し考え中です。
mujakiさんの雛の動画がものすごく評判になってますね。 すごくかわいいですねー。 ニコ動(youtubeだったかな?)のコメントに「革命的」とか「アシモよりすごい」って書かれるの見るとちょっとむにゃむにゃですけど、ああいう作品作れるのってうらやましいですね。 リアルで、作業してたら「コーヒーはいりましたよ」ってコーヒー入れて運んできてくれるってのは生きてるうちに実現できるかなー。
■6月21日■
昨日は練習会に参加。 組み立てっぱなしの上半身のサーボの配線やらID設定やらをやってました。
構造チョンボで、左肩のサーボへの配線が出来なかったので、それさえも中途半端に終了です。(>_<) ま、練習会へはだべりに行ってるようなもんだからいいんだけどねー。できばロボットの成果をお披露目する場にしたいですが。
上半身の配線が終了したラムダMkU 製線しなきゃ。
今日は、なんとかカーブ歩行の継続版を形にしたいと思って相当がんばりました。
これがなかなかの難敵で、できたかと思えばあちらに不具合が、それを直したらまた次の不具合が、、となかなか先に進みません。直進と違って、カーブ歩行だと、引継ぎデータが2次元になる上に、ロボットの向きまで必要で、考えること多すぎて頭の容量がオーバーです。(^^ゞ
さっきなんとか最後のバグを消して、いい感じかなーと思ったら、引継ぎモーションに2個所ほどnan(数値エラー)が出てました。 まだダメだそうです。
昨日の練習会の帰りに人形つかいさんとmujakiさんの雛の話などをしている時、ドロッセルってのが話に出てきまして、ディズニーのキャラだとか、、うーん、知らないな。それが雛と被るとか。
ちょっと興味を覚えて調べたら、ディズニージャパンが作ったアニメのキャラらしい。 ツインテールの具合とかが確かに雛と一緒だねぇ。
しかし、知らなかったけど、これはなかなかいいですね。 ビスコさんが操縦するデュミナスのデコレーションを見て、雌形のロボット作れたらいいなぁと思っていたけど、このドロッセルはモデルになりますね。 ロボット顔なところがいい。 なんにせよ、つま先つけたり、腰を振れるようにしたりして膝を伸ばして歩けるようにしなきゃーいかんですね。
それはそれとして、ドロッセルの執事だという、ゲデヒトニス。 この建機丸出しのロボット。 シグマにどうやって手をつけようかと迷っていたけど、シグマの次の形はゲデヒトニス型に決まりですねー。 いつ作るかわからんけど。(^^ゞ
■6月22日■
昨日に引き続き、カーブ歩行のデバッグ。 姿勢の動きをファイルに出力して想定どおりに動いているか動かをチェック。 いくつかのバグを新たに発見して、全てのデータは大方思い通りに出力されていることを確認した。
引継ぎデータの一部で「あれ?」と思うようなデータを出力している部分があったのだが、静止からの歩行データと比べてみて間違えてないことを確認できた。 確認できるところはいいんだけど、うまく行ってそうで行ってないような場合があるとハマるんだよな。
そして、昨日はnanが出てしまった角度データ列を作成してみると、昨日は出たnan(数値エラー)が出なくなった。 もしかしたらデバッグ完了か?
あとは右曲がりとかバックとか、右足からとか開始左足から開始とかの組み合わせを確認したらSEMB1200Aにプログラムを搭載しましょう。
今度はちょっと真剣にexception問題に取り組まねばな。
気付くとページが随分と長くなってしまっている。 そろそろ改ページ時だ。
昨日は出張で、帰りは例によって飲みながら。 最近、二日酔いになりやすい気がして気になって調べてみると、アセトアルデヒドの分解には水と糖分がいるらしい。夜中に目が覚めたので、冷たいウーロン茶をコップに2杯。お土産に買ってきた。饅頭を一つほおばってみました。 午前3時頃。。(^_^;)
次の日、(って今日ね) いつもよりちょっとさわやかな気がしないでもないでもない。 しばらくは気をつけてみようかな。
考えると、二日酔いの日ってむしょうに水が飲みたかったり、朝ごはんを食べたにも関わらずお腹がものすごく空いたりするなぁと思ってたのはそういうことだったのか? 酔ってラーメン食べるのは二日酔いに効くのかも(^。^)
PC上のデバッグが終わってとうとうカーブ歩行モーション生成ルーチンができあがりました。 22日に出来たかなと思ってたけど、全パターンテストで、最後のパターンでエラーがでてしまった。 今日はその修正をし、再び全パターンテストを行ってやっとクリアしました。
ではではいよいよSEMB1200Aに載せて歩かせてみましょう。 ついでに上半身の質点モデルも仕上げてしまいましょう。 明日ね。