開発日誌(24)

トップへ戻る
開発日誌インデックスへ
前のページへ

最新へ↓

4月6日

例によって中途半端に改ページです。

関節トルクの計算については両足支持期間の負荷配分の処理が残ってますが、これはそのうち考えます。 目標ZMP規範の歩行自体、実用プログラムにするにはまだまだ処理の実装を考えねばならないことがたくさんあるのでそのときにでも考えよう。 忘れないようにコメントだけはしっかり入れておかねば。

てか、SEMBに移植する時ってやっぱC言語じゃないとだめかなー。オブジェクトサイズ考えるとC++だときついかも。STLは以ての外かも。 C++でコーディングしているものをCに移植するのは結構面倒です。 変数の宣言とかスコープとか。。 あとSTLは使い出すと超便利。 リストとかCで実装すると結構大変です。ラムダでは、程度は低いけどSTLをたくさん使っているし、クラス宣言もいっぱい使っているのでこの辺りは大問題。 慣れの問題かなー。 とりあえず、STLを排除して、オブジェクトサイズがでか過ぎるようだったらCに格下げするか。。

さて、ラムダマークUの構造検討を進めつつ、SEMB1200Aでサーボを動かす準備をせねば。 1線式UARTで双方向だから、2電源のバストランシーバをつければいいのかな。今回は、シグマの時には結局実装しなかった加速度センサーも実装しよう。 モジュールはすでに購入済みです。 双方向のレベルシフタは方向制御付きの部品しか持ってない。方向制御は処理が面倒なので方向制御なしのチップを探してみたのだが、、、 有るにはあったがピン間隔が0.65o。 はんだ付けできるんかなー。

 

holypongさんのチャレンジ日記に「マーキュリーのお仲間」というタイトルで日記が上がってる。 お、タイムリー♪と思ってみたら、自分のことやーん。(*^_^*)

負荷補正を加えた計算歩行でZMP規範の歩行生成で歩けることは西さんが証明済みなので、マーキュリーでトライすることにそれほど新規性があるわけじゃないですが、リンク脚で行うことにはいくばくかの意味はあるはず。 マーキュリーの強みはholypongさんの書かれている通りのペイロードと姿勢安定性だと思ってます。 相当の荷重でも補正なしで再現精度が十分取れればリンク脚を使った計算歩行の有効性は得られるのかなと。。。 姿勢の自由度を与えつつ姿勢安定性を確保した脚構造の提案が最終目的です。

同じくholypongさんのちょっと前の日記に書かれている「イグニス」は「腿と足首のピッチ軸は独立して駆動できる機構になっている」そうで、これはどんな構造なんだろ。興味あります。

計算歩行を行う意味は、状況に応じて適切な歩行パラメータを生成できることにあります。 だから状況判断できなきゃモーション歩行で十分で、 更には環境が十分に安定していて更に歩行にロバスト性が十分あれば計算歩行する必要はないのでしょうけどね。 何事も1歩からです。(^_^;) 1歩から。

4月9日

昨日、一昨日は飲みに行ってたので進捗なし。 6日に日誌を更新したのにアップできてませんでした。がくり。。

holypongさんが「イグニス」情報アップしてくれて、構造を知ることができました。 ありがとうございます。

これは、リンク脚は事実上重量方向のトルクアップに役立っているということなんですかね。ピッチ角が腰の高さに依存しないということで計算する必要がないわけだ。うまくバランスが取れるようにすればコントローラで歩行を調整できるということかな。

それにしても外装がいいなー。かっこいい。(^。^)

 

今日はやっとSEMBでKRS-4014とシリアル通信してみました。 なんつーか、SEMBのプログラムに手間取ってしまった。とりあえずコマンド送ってデータを取得できました。 まだトルクオンしてうごかしてみてませんけど。

今はSEMBのディストリビューションボードを使っているのだが、サーボへの電源供給ピンがショボイ。 これだと怖いので分配回路はやっぱり作らないといけないですね。

サーボの操作が大体わかったので一気にサーボ制御部のプログラムを書いてしまいたいですね。目標はこの週末!

4月11日

KONDOから60Kg・cm級サーボが出るみたいですね。 サイズもトルクも値段も重さもいい感じです。 電流がちとでかいなー。電圧は18Vでも良かったと思うけどな。 あんなに電流がでかいとバッテリーも含めて色々危険ですね。

ラムダマークUを考える時、60Kg・cm級サーボでキュリオくらいのサイズにしたいと考えていましたけど、まだ難しいですね。こけない、またはこけても大丈夫(受身を取るとか)なようにならないと大型ロボットの開発は怖いです。ハンガーとかリフトがあればいいのかな。

ラムダマークVの頃にはこの新型サーボもこなれているだろうからその時は検討対象にしたいですね。 てか、選べる環境になってればいいんだけどな。

 

KRS401Xの制御プログラムが動き出しました。今は2チャンネルに3個ずつつないで動かしてますけど、1チャンネルに4個まではいけるらしいから4個×8チャンネルまで駆動できます。

 シグマの脳みそを間借り中

同じチャンネルにつながっているサーボへのコマンド送信は、西さんの情報をそのまま活用させてもらいまして、1.1msあけて送ってます。 この辺りの情報ってどこに載ってるんでしょうかね。 どこかで見た覚えがあるんだけど見つからない。 もうちょっとコマンド送信の間隔を詰めても大丈夫そうだけど、あまり意味がないのでそのままで。

KONDOのICS2はフタバサーボのようにマルチコマンドがない。 ですので1チャンネルあたりのサーボ数を減らすことで個別にコマンドを送ってます。 そのアクノリッジで角度情報がもらえるのでいいですね。 見た感じはエラーも無く受信できているみたい(チェックサムとかないのでわからん)だけど、ロボットに組み込んで動かし出してもノイズに負けたりしないのだろうか。 ヴィストンとかは3.3V系であの大きなロボットを動かしているみたいだからあんまりきにしなくていいのかなぁ。(伝送部分はRS485などに変換しているのかもしれませんが。。)

ちなみにフタバの通信プロトコルでもアクノリッジパケットでレジスト情報を受け取ることはできます。RS485が1回線しかないRPU-100だとだめだけど、SEMBを使えばKONDOと同じように送信コマンドのたびに角度情報をもらうことは可能です。

珍しく予定より早くプログラムが動き出したので、明日は腰のフレーム製作をしようかな。

4月12日

 クララが、じゃなくてラムダが立ったぁ

今日はハード・メカに取り掛かる。

というつもりが、買い置きがあると思っていたハーフピッチのユニバーサル基板が、ちょうどいいサイズがなくてはんだ付け作業は断念。 来週秋葉原に行くからその時に買おう。

メカについては、まずは下半身だけで歩かせるつもりなので、腰部分とSEMB1200Aを搭載するための部品まで作ろうと思っていたのだが、SEMBにつける周辺回路基板の部品配置などが決まらないから骨盤だけ作ることになりました。腰ロール軸の干渉を避けるためと、シンウォーク効果を狙って股関節間隔は広めにとりました。

ところが広くとりすぎて、板金曲げ機のブレードより長くなってしまったので曲げに苦労しました。 ひずみ取りながらなんとか使えるレベルに。。orz

マーキュリー脚は仮組みだったので、サーボホーンをアルミに取り替えて、サーボの取り付けネジも全部取り付けて、 更にはサーボにID書き込んでセンターの確認をしてPWM禁止にして組みなおしました。 あーしんど。。

サーボの設定プログラムにトリム調整とか動作範囲の変更をするコマンドを作ってなかったのでこれから作ります。 センターって結構ずれてるんですねー。ちょっとびっくりしました。

リンクなのでトリム調整は重要です。へたするとサーボにでかい負荷かかってしまうので要注意。 それにしても4000番を初めて使うのにリンクダブルって無謀かもしれないなー。サーボにも色々とクセがあるだろうけど初めて扱うのでその辺りがわからない。 まぁ、プログラムのバグでとんでもないことになる可能性の方がはるかにでかいですが(^^ゞ。 一応はおかしくなりにくいようにと思って対になっているサーボは、同じデータを送ればいいように組み立てたのでよほどのバグじゃないとおかしくはならないはずです。 それより、この構造はサーボの動作範囲が結構せまいのでバグでとんでも無い角度になってしまった時の方が怖いですね。 そのためにもサーボ側で動作範囲設定をしっかりやっておくべきでしょう。

4月13日

トリム調整のコマンドを作ってトリム調整をしていたのですが、操作を誤って違うサーボのROMデータを書き込んでしまった!

トリム調整しているつもりがいつのまにかIDが変わっていたので、「あれれ?」と思ってよーく考えるとサーボを切り替えてからROMデータの読み出しをやっていない! あららぁ〜、 マニュアルによるとROM領域の後半に変更禁止と書かれた個別データエリアがある。 変更不可じゃなくて変更禁止ってことは書き換えできちゃうのか? マスクくらいしとけよー、とか思いながら動作確認してみたが別段変わったところはない。 ちょっと動かしたくらいじゃわからんのかも、というところで時間切れで昨日は終了。

今日になってすべてのサーボのROMデータを吸い出してみて比べたら、変更禁止領域のデータはそれぞれ違いますねー。書き換えちゃったらやっぱまずいんだろうなぁ(^_^;)

数値をずらっと並べてみると、多分4byteで1データで、他のパラメータから考えても有効なのは下4ビット、これで16ビットデータを構成してるっぽい。16byteで4つの16ビットデータである。多分0x9000をセンターとした補正値だろう。ほとんどが0x9000以上の値となっているが、ほとんどの数値は最上位は9、一つだけ最上位が8とかAになっているサーボがあった。 これはばらつきが大きなサーボなのかな。 まったく同じ補正値を持ったサーボが一組あって、(もちろんミスで書き重ねたサーボを除いて) そのサーボの補正値は4データすべてが0x9000だった。つまり補正なし。 これは良いサーボってことかな。(^。^)

まぁいいや。 書き換えちゃったサーボはリンク部分に使うのはまずいかも知れないのでリンクじゃないところに移動させましょう。 再生精度が気にならない部分がいいなぁ。その前に補正値が狂った事での角度の精度が問題あるものかどうか確認してみた方がいいかも。

あと、考えられるのはPIDゲイン。 これだと応答特性が変わっちゃうことになるので動的な特性に影響が出ることになる(はず) これはちょっと検証は難しいな。

とりあえず、再発防止のために、完全ではないがコマンドの仕様を変えたのと、全てのサーボの補正値を記録しておきました。 これで今度ミスった時は復元できる。(今回ミスったヤツ以外はね。)

どなたか、この補正値の正体ご存知でしたら教えてくださーい。

 

KONDOに送って「補正値書き直してください」って頼んだら書き直してくれるのだろうか。いくらかかるんだろう。

あとは角度のリミット値を設定したら下準備は完了。ZMP規範歩行の移植に取り掛かります。 C言語でやるの、やだなぁ〜。(>_<)

4月19日

やっとIK変換してサーボに角度データを送り込むところまでできました。 なんだか時間かかったなぁ〜。

途中、サーボからの角度データの読み取り失敗率が高くてぐったりしてモチベーションが下がっていたのですが、それも解消。 安定して1チャンネルあたり4サーボの接続ができています。

リミット値の設定をやっていたら、トリム調整が甘いことに気付き、トリムの再調整。 そして、またまたROMデータの重ね書き事件が発生。(>_<)

でも今度はROMデータを保存しておいたので、急いで書き込みプログラムを作って元通りに復元しました。 そんなこんなの作業をやっていたこともあって妙に時間がかかってしまった。

マーキュリー脚は逆運動学的には簡単な構造なので逆キネ関数は簡単です。 ラムダ1号ではC++だったし、class Leg ってのを作って、足のローカル座標を特殊な鏡面座標系を使っていたのですが、マーキュリー脚ではどうしようかなー。 関節負荷の計算まで考えると原点だけをローカルにする方がなにかと便利な気もしてきた。 どうせコードはC++からCに書き換えなきゃならないからそのあたりの変更は折り込んでもいいかも。

ところで4014ってジージーうるさいですね。静かな部屋で動かしていると気になる。  ・・・マーキュリーのせいってわけじゃないと思うんだけど、どうなんだろ。 RS601CRだとあんまり音は気にならなかったんですけどねぇ。 そう考えるとRS601って惜しいなぁ、パワーウェイトレシオとの両立ができてればいいサーボだと思うんだけどな。

GetRoboBlogに載ってたこのアリンコロボット。 うにうに動いていいですね。 この胴体の動きとかシグマに仕込もうと思ってて、まだできてない。手もつけたいけどそれも手付かず。 やっぱモノにアクセスできると違いますね。 早く手をつけようっと。 あ、ぷちには間に合わないですけど。

4月22日

仕事の話だけど、、、ゴールデンウィーク前の一大イベントちゅーか、めんどくさい仕事がやっと終わりました。 ふぅ。

 

わんだほーぷちまであと一週間というところで、「シグマって草加のぷちのまんまなんだよなー。面白くないよなぁ〜。」と再び葛藤が。 その件はもう「そのまんまで出る」で終了したでしょ!と思いつつ、アリンコ見てしまって再燃してしまった。

でも、開発量が半端じゃないので正直無理。 どうしようもないのにラムダの腕を持ってきてああでもないこうでもないと構造検討とかしちゃったりして、貴重な時間を無駄遣いしてしまってます(継続中(^_^;) )

腕をつけるとそれはもう自律で動かしたくなるので目も要るでしょ〜。そうしたらそれを動かすプログラムってすごいことになるし。。。

まぁ、おいおい考えよう。

 

ラムダマークUの方、 マーキュリー脚の質点モデルを組もうとしていて、やっぱりリンク脚の質点モデルはラムダのそれを簡単には適用できそうにない。 STL使えれば流用できるっぽいのだが、それは無理なのでちょっと悩み中。

そして、関節負荷ってどうすりゃいいのかなーということもつらつら考えていたのだが、結論としては、リンク構造って共済構造なわけですね。 つまり関節負荷でいうと、リンクしている2つのサーボの負荷は、二つのサーボの単独負荷の平均値となると考えればよいかと思い至りました。 実際にはロスがあるので平均値よりちょっと多いとは思うけど。

ペイロードが増える〜と思っていたのだが、大幅に増えるわけではないですね。 負荷が集中しやすい膝の負荷を股関節や足首のピッチ軸に分散することができるってことです。

これで負荷モデルも組み立てられそう。 大体にしてロール軸はリンクしていないので、今までの脚構造と変わらんわけだし、リンク脚にしたら負荷補正が要らないってのは思い過ごしでしょうね。(^^ゞ

4月25日

やっとマーキュリー脚の多質点モデルができました。リンク脚だからモデルの表現をどうしようかと迷っていたんですけど、結局は前リンクと後リンクをそれぞれ別の脚としてモデル表現しました。 ちょっとだけ計算が重複するけど、モデル記述の単純さとコーディングの単純さの方を取りました。

期間的にはそこそこ掛かってるけど、実働を見ると順調に進んでます。

左の絵がマーキュリー脚を表現していて、オレンジ色の丸が質点です。 そして右の絵が多質点モデルとしての等価図って言ったらいいのかな。

多質点モデルの段階では関節が駆動関節なのか、従関節なのかは関係ないので、サーボが無い軸にも、その軸と同じ角度を持つサーボを指定するようにしています。 ただこのままだと軸荷重の計算でおかしくなるので、モデルを拡張して駆動関節なのかどうかを判別できるようにしなければなりません。

    

ロボットの構造は固定なので、モデルデータはハードコーティングでもいいのだけど、汎用性を持たせたいのでダイナミックモデルです。 例えばラムダが物を持ち上げたりした場合、その物のデータ(質量とか重心位置とか)を得ることができれば質点モデルにダイナミックに加えることも出来るように考えてみてます。 そこまでのアプリケーションが出来ないんですけどねー。(^^ゞ

さて、多質点モデルを使った計算のうち一番簡単な重心の算出計算もできたのでこのまま多質点モデルのZMP導出に突き進んで行きましょう。

4月26日

やっとここまでできましたー。 重心点の軌道を目標ZMPから算出。

C++で作れていたのものをCにポーティングしただけなんだけど、色々整備しなくちゃならないことが多くて結構作業量多い。

運用次第では簡単な配列でも十分可能だとは思うのですが、連続歩行を行う時のことを考えてリスト構造にしてみました。 簡単なリストを実装して、一時計算用の配列はエリアを確保してポインターで操作。 配列の添え字よりは高速だと思うのだが、差が出るものなのかはよく知らない。 (^^ゞ

では、次は多質点モデルでのZMP導出の実装おば。。

 

多質点モデルでのZMP導出の前に、歩行モーションを作れるようにせねばならないのであった。

ラムダの下半身姿勢モデルを簡略化して実装。 マーキュリーは自由度が低いのであまり複雑なパラメータは意味がないのだ。

とりあえずは最低限として直進と後退の歩行ができるだけの姿勢モデルを移植しました。

歩行姿勢生成まで行かなかったな。 それができれば補正なしででも、とりあえず歩かせるところまでいけたのだが、残念。

途中、トンでもない姿勢を取ることがあって、びっくりした。 一つは、こないだネジを締めなおすために分解した時に左足のヨー軸を180度間違えて取り付けていたため。 更にまだ間違いがあって、下半身姿勢の構造体の初期化を忘れていたためでした。 クラスだと変数宣言すると自動で初期化までやってくれたんだよねー。 あぁC++が恋しい。。(>_<)

28日は休みが取れたのでプチ初日に行こうと思っていたのだが、マーキュリーの続きをやりたいなぁ〜。

4月28日

今日はプチは諦めて家で作業でした。

というのも昨日は出張でして、帰りに軽く飲んだつもりが結構酔ってたみたいでつい寝入ってしまって、気付いたらすでに1時半。 その時点でまだ酔ってるし。(^_^;)

シグマのCPUフレームが草加の時の間に合わせのプラ板のままだったので、アルミで作り直している最中で、その作業を月曜日に終わらせて火曜日に望むつもりだったのが失敗です。 元々火曜日は不参加の予定だったのでシグマの仕上げ+マーキュリーの続きをやっておりました。

マーキュリーの方は歩行モーションの生成ができまして、重心軌道を再生するための関節角度列の生成まで出来ました。

さて、やっと多質点モデルでのZMP導出に取り掛かれます。

 

単質点で導出した重心点軌道で歩かせてみたが、おしいところで歩けない。 いままでの経験上、単質点で導出したZMPは目標に到っていない事が多いので、恐らくは今回もそうなのだろうが、左足を最初の支持脚にした場合はちゃんと遊脚を上げることが出来る。右足が支持脚だとちょっと足りない感じ。

質点の算出はCADにデータを入れて計算しているのだが、サーボの内部まではモデリングしていないので均質な物体で計算している。 もしかしてこれってずれがあるのかな? ちょっと糸ででも釣って測ってみたほうがいいかなー。(^_^;)

・・・

ちょっと測ってみたらちょいとずれてますね。

マーキュリーはサーボを左右対称に配置できないので(コネクタの抜き差しの利便性を無視すればできるけど) 少しのずれが効いてくるかも知れない。正確に測定してモデルに反映した方がよさそうです。

4月30日

昨日はわんだほーぷちに参加してきました、シグマで。

結果はなんと予選3戦での成績が2位\(◎o◎)/! 驚きました。

草加でのわんだほーぷちから2回目の出場だったこともあって、それぞれの競技や操縦での注意点に気をつけたのもあるのですが、ボトルトラクションでライバルのおサルくんにだけは負けられんと思って無理して12本を押したのが良かったのかも。

初体験のバトルはサアガとの戦いでした。 なんとか6足を活かした戦いができないかと考えたのだけど、押し合いでは埒が明かないようだったので引き込んで回転して体を入れ替えて押し出す!という作戦に絞りました。 1度は成功したのだけど、うっかりとリングポストに引っかかったのが分かれ目だったようです。

実はサイコロシュート用のモーション(っていうかスタイル)で、カマキリスタイルてのがあって、試合前はそれをやったらちょっとは盛り上がるかなーとか思っていたのですが、そんな余裕ありませんでしたね。(^^ゞ

でも、楽しかったです。それにしてもシグマはインパクトあるんですかね。結構人気あるみたいでいつも驚きます。 バトルは別にしても、シグマをもっとちゃんと育てないといかんなぁと痛感しました。

 

28日の日誌を書いた後、サーボの重心をモデルに反映してロボットの重心を算出しなおしてみました。結果としては影響なし。ロボット全体で左右の重心位置は0.2ミリしか移動しませんでした。 よく見ると膝上と膝下でサーボの配置が逆転しており、サーボ自体の重心のズレは相殺される形となっておりました。

5月1日

多質点モデルでのZMP導出ができたようです。

X軸はマイナス側が左側なので、左足を支持脚にした場合は重心移動ができているという現状とも合致しています。

しかし、静止重心だとほぼ中央に重心があるのに、このズレはなんだっけ? 今回は重心補正していないからおかしなミスはしていないはずだが。。。? 要注意です。

あと、進行方向のZMPのずれ方がラムダの時とは随分と違う。これは質点の分布が違うからなのかなぁ。

計算が合っているとして、、ここまで来たら材料は揃ったので補正部分は簡単にできます。 GW中にSEMBをマーキュリーに載せるところまでできるかなー。

5月2日

つまづきながらも順調に目標ZMPへ補正をかける記述が完成しました。

1回補正でこれくらい。これでも歩けそうだなー。 ということで歩かせてみました。↓

動画

・・・・まだまだです。 やはり左足を支持脚にして歩き始めた場合はうまく歩けません。 メカ的な問題かなー。

関節トルクの算出へ進む前に再生精度の確認をした方がよさそうです。

 

関節角度のキャプチャー結果です。

股関節ロール軸↓ 支持脚となる側は少しオーバーシュートしてますね。 右足(黄色)の方がオーバーシュートの度合いが大きいのは遅れるせいで体重が乗り切らないからか。

上側の膝ピッチ軸↓ 支持脚側はそれなりにズレがありますねぇ。 まだ上半身が無いので、これくらいならピシっと出るかとおもったのですが。

足首ロール↓ 特に問題ないですね。 重心が乗り切っていないのでこの状態でズレが無いことはあまり安心材料にはなりませんが。

何度か歩かせるうちに少しずついい感じになってきました。マーキュリー脚の慣らしが終わってきたのかな。

関節負荷の計算は行列計算の整備なども必要なのでちょっと大仕事。 その前に補正を2回かけて歩かせてみた。

動画

ほほぉ〜、なかなかいいッスねぇ〜。

重心が随分下にあるので左右に振り回してる感が強いけど、上半身がついたらもうちょっと静かになるはず。 この感じだと補正は2回必要そうです。

5月3日

昨日は引き続き空間速度、空間加速度の算出部分の移植に取り掛かったのだが、空間速度、空間加速度が思い通りに算出できない。 バグが見つからないので諦めて寝る。

そして今日は、続きをやりたいところなのだが、状況は昨日とまったく変わっていないので、ヘタをすると一日悩んで終わってしまうかもしれない。 それはまずいので日の高いうちは工作をすることに。

マーキュリー脚にSEMB1200Aを搭載。 最終的にはこの上にRPU-100も積む予定。

さて、デバッグの続きをやるかぁ〜。

・・・ 

関節負荷の算出プログラムの移植がいま終わりました。。。 ラムダのを移植しただけなので、マーキュリー用にはなっていません。 あと、両足支持時の負荷の分配もできてません。 でも、もう腰が、腰が、、 工作とプログラムで腰が疲れちゃいました。

支持脚と遊脚の切り替え記述などができていないので、脚上げなしで、左右動作時の関節負荷、まず右足↓

そして左足↓

これが重心点軌道↓

両足とも、大きな値を示しているのは股関節ロール軸です。足首ロールはほとんど負荷かかってませんね。ZMPが足首にあるということだからこれでいいのだと思っておこう。こいつについては支持脚と遊脚の記述を追加して、両足支持時の負荷分散をして、計算した負荷を関節に割り戻して、、 まだまだあるなー。

そろそろZMP規範の歩行パターン生成プログラムを実用化するための作業に取り掛かる段階になった。 考えると、次回のわんだほーは7月だからほとんど時間がないのだ。今度こそ自律でダッシュ2000を1分以内でクリアさせたいのだ。  ZMP歩行とかしなきゃ、多分すぐできるんだろうけどねー。(^_^;)

ちなみに、ラムダの場合と同じく、脚上げなしでの左右動作は見事に吹っ飛びます。 やはり、接地部付近の質点は無効にした方がよさそうです。

5月6日

今日でゴールデンウィークも終わりです。

一昨日のロボワン観戦と昨日のロボットプロレス「できんのか3」のお手伝いと、出張ってたので作業進捗は無し。

今日はゆっくりと起きて、ビデオ撮りしていた「レッドクリフ」を見て、夕方から出かける予定があったので、それほど根を詰めない作業を、って事でSEMB1200AのラムダマークU用のインターフェイスボードの製作に取り掛かりました。

レギュレータとレベルシフタ、コントローラー用のSPIインターフェイスとSPI接続の加速度センサーを搭載するつもりです。RPU100との通信はRS232CかRS485で行う予定なので特にインターフェイスを組む必要は無いでしょう。あと、ジャイロをどうやって積むか、SEMBはADCが無いのがイタイですね。ADC付きのマイコンをつなぐのがいいですかね。SPIで出せるジャイロってありませんでしたっけ?

ところが、バッテリー接続コネクタの在庫が無い。あららぁ〜、昨日秋葉原行ってたのに、 でも買い物する時間はなかったかな。(^_^;) 

あとレベルシフト回路に使うプルアップ用のチップ抵抗も数が足りない。 ってことで、今度の土日は買出しかな、8日にはテクノロジアが開店するらしいから丁度いいかも。 実はロボット王国で買い物したことほとんどないので、王国に思い入れはまったくないのですが。

ということで、貴重なゴールデンウィーク最終日、日誌に書くほどの進捗はなかったのでした。

5月7日

工作は諦めて負荷算出の仕上げを進めます。

まずは歩行パターンの負荷が見れるように、ZMPの動きに合わせて左右の脚を接地脚、遊脚と設定を変えて遊脚及び胴体の力とモーメントを接地脚に伝えるようにします。 また、両足支持の場合は負荷を分配するようにします。

これが右足の負荷↓

こちらが左足の負荷↓

まだマーキュリー脚としての計算をしていませんので股、膝、足首のそれぞれのピッチ軸の負荷が異なります。股関節ピッチなんてほとんど負荷がかかってないですね。これは、今は胴体の質量が小さいからです。

支持脚の切り替わりの瞬間には股関節のヨー軸にパルスで負荷が発生してるのがイカしてます。これを打ち消すように腕を振ったらこのパルスが消えてくれたらステキですね。

マーキュリー脚はリンク脚なので股関節ピッチと膝上ピッチ、膝下ピッチと足首ピッチが互いに共済関係を持っています。ですのでこの共済の組み合わせ関係がある軸の負荷を平均を取る事にしてみます。 平均化していいのかどうか正直わからんのですが、最終的に補正角度を決めるのが目的なのでいいんじゃないかと思います。

ZMP歩行生成の基本部分は大方完成。 次は連続歩行とか、カーブ歩行とかを考え出さなきゃならない。

5月8日

チップ抵抗が手に入ったので一番気になっているレベルシフタ部分のはんだ付けをやってみた。

今回使うレベルシフタはピン間隔が0.65mmハーフピッチのユニバーサル基板を使っても更に半分のピッチだ。 なので、ハーフピッチのSMTを普通のユニバーサル基板に搭載していた時と同じように端子1ピンおきに端子を持ち上げて無理やりはんだ付けすることに。

各チャンネルごとにVCC側とLVCC側にプルアップ抵抗が必要なので、1.27mmにチップ抵抗を隙間無く並べなければならない。

手元にあるチップ抵抗は1.27mmピッチに並べることができないので、多分3216サイズかな? これより小さいサイズを使わねばならない。1005じゃーキツイので、1608で。

↓表側の様子。判りにくいが、1本おきに銅線を空中接続している。配線材は、より線ケーブルの芯線をばらしたもの。

  

↓裏側にチップ抵抗を載せている。 やればできるもんだな。(^_^;)

バッテリーコネクタが手に入ったら一気に配線しちゃいたい。

ところで、ROBO-ONE宇宙大会予選のオムニボールの試技をスロー動画で撮られているものはないでしょうか。 会場でいすぜんさんに見せてもらったのですが、あれはすばらしいですね。高速度撮影動画でもう一度みたい。 あそこまで制御できることを前田さんが体現したので、あの投げロボルールももう達成されるのも間もないでしょうね。 ってか、オムニボールのままで達成できちゃいますね。

5月9日

ZMP規範の歩行生成では、目標とするZMP軌道全体を入力として重心軌道を決めるので、連続して歩き続けるモーションを生成することができません。 もちろん繰り返し動作なので周期部分を切り出して再生するという方法がないわけではないですが、それだと、直進からカーブ歩行に移行したり、歩く途中に歩幅などの歩行条件を変更するなどの動作ができないのでイマイチです。

どうやら、歩き始めから歩き終わりまでの歩行計画を作っておき、歩き続ける場合は途中からデータを継いでいって歩き続けるという方法をとるらしい。

歩き続けるための引継ぎ歩行データは、静止状態からではなく、動作状態から始まるデータとなるので普通とは初期条件が異なります。 重心軌道生成の式には初速度と終速度を指定できるので、引き継ぎたいポイントのデータを入力とすればよさそうです。

で、やってみたのがこれ↓

継続X、継続Y と言うラインが引き継ぎデータです。 引継ぎ部分は十分に一致していますが、全体的には微妙にずれています。

実はこれはまだ多質点モデルによる補正が入っていない重心軌道でして、完成ではありません。 まだこの状態までしかできていません。

このあと、多質点モデルによる補正を加えていくのですが、引継ぎ部分の姿勢や、各質点の加速度・位置情報を保持しなければならないので結構大変ですね。 補正を加えた上でちゃんと引き継げるデータになるかどうか心配です。

 

多質点モデルによる補正まで到らず。引継ぎデータをマニュアルで入れ込んでテストするのは大変なので、引き継いで歩数を増やしていく仕組みを先に作ってました。 「基本」は1歩進んで止まるという歩行モーション。 そこに「継続」で引き継いでもう1歩進みます。 継続の部分を繰り返し接続していくことで歩き続けることが出来ます。引き継ぐのを止めると脚を揃えて停止します。

5月10日

この二日間、随分とがんばったつもりだったのだけど、、、

こんなんになってしまいました↓

補正をかけると大きくずれてしまって、これでは引き継ぐことはできません。左右方向はまだしも、前後方向がうまく行っていないので引継ぎポイントの問題じゃないなぁ。

更には前後方向の終盤にみたことのないひずみがでてしまっています。 こんな傾向は初めてだな。

とりあえず、引継ぎモーション側の多質点モデルからのZMPの計算値が納得いかない値が出ているので、まずはそこを洗いなおします。

5月11日

デバッグ完了です。 まー、バグだったんですけど、やはりZMPでおかしな値を出している部分を中心に追いかけていってバグを発見しました。昨日ここまで出来てれば土日の達成感があったのになー、お陰で昨夜から今日の日中は不完全燃焼でモヤモヤしてました。(>_<)

すこーし、つなぎ部分が汚いですけど、ほぼ使えるかと思われるレベルかと思います。補正が必要かどうかは実際に動かしてみて判断します。

連続して歩行させるにはもう少し作りこみが必要なので、実動作テストはもうちょっと先になります。 そして、それが終わったら次はカーブ歩行に着手です。

5月12日

引継ぎ方法のもう一つの手段として、静止状態からの歩行パターンの切り張りで歩き続けるという方法も検討してみました。

うまく行くと思っていたのにだめですね。3歩目の引継ぎで、前後方向の軌道が接しません。 左右方向の軌道も思ったよりもズレがあります。2歩目は問題なくつながってますね。3歩歩行までのデータで継ぎ接ぎしなきゃならないのかもしれないな。

 

こないだの休みに秋葉原に行くのがいやで、買わなきゃいけないバッテリーコネクタを通販で買えないか探してました。 やっと見つけたので注文したら、、 今日メールが来ました。 「お届け日:7月1日」 ・・・orz   在庫切れならそう書いておいてよ。。。(ーー;)

5月15日

ここ2日ほどATMEGA32マイコンボードをいじっておりました。

というのもおさる君が我が家に遊びにくることになったので、マイコンでモーターを制御するところを見せてあげようと思って整備していたのでした。

うちのATMEGA32は、ラムダの初期バージョンの頭に、制御用としてクロックを載せ変えて使ってました。 ISPライターでプログラム書き込みするようにしているので、デモをするにはちょっとまずい。 クロックを元に戻して、パソコンのCOMポートから書き込みできるようにしなくちゃなぁ〜、ということではんだゴテをにぎってました。

クロックを戻してGCC Developer Liteから書き込もうとしたのだが、うまくいかない。あれぇ?前はこのUSB-RS232C変換アダプターで書き込めたはずだけどなぁ??? 随分前のことなので色々すっかり忘れている。

それにスイッチをWRITE側にしても、ブートローダーが立ち上がっていないような。 ISPで書いたらブートローダー上書きしちゃうんだっけかな。(でも、この時点ではUSB-COMアダプターが悪いと思っていた) 後で思い出したが、ブートローダが立ち上がったらLEDがパシパシパシっと3回光るのだった。 ブートローダ消えちゃってたんだね。

困ったなぁと思って色々調べてみたら、ベステクのWebページにシンプルタームからXMODEMでフラッシュ書き込みができるようになる「ATmegaシリーズ 簡易ブートローダ」というのがダウンロードできるのを見つけた。 これならUSB-COMアダプタの相性とかは関係無さそうだし、作業性もよさげなので、これを書き込むことにする。

ISPライターは自作で(回路はWeb参照です)レガシーのCOMポートじゃないとうまく動かないので、そのため用のデスクトップ(Windows2000)を立ち上げる。

ところが、うまく書き込めない、というかATMEGA32を認識しない。 PCが悪いのか、ATMEGA32が悪いのか?? ラムダのニューセンサーボードにATMEGA128もあるのだが、ラムダから外すのが面倒だったので、もう少し試行錯誤してみることにした。(これが失敗でした)

PCのCOMポートがちゃんと動いていることを確認するためにTERATERMを動かしてみたら、「Can not Open COM1」といわれる。 あれれ?COMポート死んでる? Windows2000をああでもないこうでもないといじってみたが状況は変わらない。 ここで午前3時。 結局、COMポートがおかしいという結論で、明日に持ち越すことになりました。 「会社にUSB-COMアダプタがたくさんあったから一つ借りてきて使ってみよう。ISPライター要らないかも。」 などと目論んでいました。

そして今日。 今日は、急ぎの仕事もないので仕事を早く切り上げて秋葉原に買い物に行くことに。 7月1日納品となってしまったバッテリーコネクタのこともあるので。。(^_^;)

デスクトップPCのレガシーCOMポートを復活させたいので、PCIカードのCOMポートボードがあればいいなと思って売っているところを探したら、見つかったのだけれども5000円もする。 うむぅ〜、なんとなく壊れてはいないような気がするので買うのはやめておく。 自分のUSB-COMアダプターとの相性問題だったときのことを考えて安いUSB-COMアダプターを探すのだが、大体4000円くらいする。高い。 「かもしれない」のために出せる金額じゃないなー。 結局秋月で950円のを見つけたのだけど、買って開けてマニュアル読んだら今持っているエレコムのものと同じデバイスらしい。 相性問題だとしたら共倒れの可能性大。(^_^;)

テクノロジアをこっそり覗きに行ったら杉浦さんがいらっしゃいました。 ATMEGA32も置いてましたね。 ATMEGA32が壊れている場合のことを考えて買っておこうかと思ったけど思いとどまりました。 まぁ使い道がないわけじゃないので買っておいてもよかったのだが。

バッテリーコネクタを含めて買うものは買った。 PCIのCOMカードは買わなかったけど、まぁいいでしょう。 ダメならそのときで。

 

帰って、晩飯食って、作業再開。 まず、レガシーPCのCOMポートを復活させるためにあれやらこれやらやりながら、ノートPCには会社から借りてきたアダプターをインストール。 そして、、どちらも成果なし。

そこでやっと、ラムダを分解してATMEGA128を取り出してみる。 コネクタ逆接しちゃったり、はんだ付けが外れたりして四苦八苦したが、ISPライターは無事つながった。ここでレガシーCOMポートは正常ということが判明。 おかしいのはATMEGA32となった。 うむむ、クロックのはんだ付け不良? でもLED点滅してるってことはプログラムは動いているわけだし。。 配線をチェックしたり何度も何度もコネクタを付け外ししていたら、不意にISPライターがATMEGA32を認識した!!! おぉぉぉぉ、、壊れてなかった。 結局どこかが接触不良だったらしい。

ブートローダは「HEXファイルがおかしい」と言われて悩んだが、適当にHEXファイルを修正して書き込みできました。 いいぞいいぞ、これでノートPCだけで開発できるようになった。 ブートローダのソースがあるので、クロック載せ変えても大丈夫だし。 喜び勇んでISPライターから外して動作確認をしようとしたところ、、 うっかりとATMEGA32に直接12Vをかけてしまいました!!!  ショォォォック ここまできてぶっ壊れたらシャレならんぞー。 とビビったのだけど、壊れてませんでした。よかったー。結構丈夫ですね。

次にブートローダを使っての書き込みテスト。 このブートローダはhexファイルじゃなくbinファイルを食うんですね。ドキュメントがないのでちょっと迷いました。 迷ったけど、無事、プログラムを書き込んで動作させることができました。 よかったよかった。 明日はHブリッジをテストボードに組んで、モーターを回したり止めたりできるようにしてみよう。

ちなみに帰って、メールチェックしたら、バッテリーコネクタは7月1日発送が早まって5月15日発送になったそうです。オイオイ・・・orz

ZMP歩行は脳内検討のみで進捗なし。

この土日でSEMB1200Aのインターフェイスボードを完成させないと来週の練習会に持っていけないなぁ。

このページの先頭へ
トップへ戻る