RoboShell dev. environment on the Mac
OpenOCD が動作を開始して、Eclipse 上からビルドとデバッグが他のプラットフォームと同様に出来るようになった。
これで、主要な OS で RoboShell の開発が出来るようになったわけだ。プラグインは Eclipse とは言え環境に依っての依存があるので、注意深く設定していく必要がある。
OpenOCD が動作を開始して、Eclipse 上からビルドとデバッグが他のプラットフォームと同様に出来るようになった。
これで、主要な OS で RoboShell の開発が出来るようになったわけだ。プラグインは Eclipse とは言え環境に依っての依存があるので、注意深く設定していく必要がある。
OpenOCD が動作を開始したのは既報の通りだが、Eclipse 上でも動作を始めた。ステップ実行で確実にひっかかるのは非常に気持ちがいい。開発に必要なフラッシュメモリの焼き環境も OpenOCD のを使うことが出来るようになった。後は Linux, MacOS と水平展開していく。
そろそろ、ページをまとめて行かないとな。やってきたことをはなから忘れて行きそうだよ。
現在、MacOSX上にロボット開発のためのツールチェーンを構築中。とりあえず、EclipseからARM クロスコンパイラ(Ver.4.2.1)で RoboShell.hex をビルドする所まで出来た。
後は FT2232 ベースのデバッガを動かせるように、USB 周りのドライバを整備していく。arm-elf ベースで動作する gdb と gdb のサーバである OpenOCD のビルドは出来上がっている。
近日中に結合試験だな。完成すれば、プラグインの勉強でもしようかと思う。
って雑誌が休刊になるみたい。雑誌の休刊は基本的には廃刊と同じだからよっぽどの事が無い限り、日の目は見ないと思う。ネット全盛時代、この手の本はきついでしょ?俺の所にも執筆依頼が来たので、提案もしたけど受け入れてもらえなかったので結局書けずじまいだった。いま、思えば少し残念だったかな?
俺的には RoboShell の技術解説みたいな超ハードコアの話しを載せたかったんだけど…。あと、高橋さんとそのロボがフィーチャリングされているけど、どうなのかな?企業で普通に働いてモノ作りの経験がある人から見て、あの人のロボはどうよ?って感じがするんだけど…。
まぁ、雑誌も載せている技術も中途半端だと、こんな感じになりますね。
合掌
Skype で雑談しているとアイデアが出てきたので、書き留めておくことにする。
ロボ技術誌とかインターネットのニュースサイトでロボ大会の様子がレポートされているけど、なんか華やかさが無い。自動車のレースとかスポーツの大会ではそれなりの華やかさがあるというのに…。あと、なんかアキバ的で婦女子に受けそうも無い。
で、ささやかながら出来そうなことを考えてみた。オトコは驚愕、オンナはウットリで考えてみた。
まずはロボを入れるバッグはヴィトンにする。工具はスナップオンあたりでいいかな?で、PCはMacBookProにする。もちろん、これらの機材でちゃんと開発しなければいけない!!だからといって、BootCampでWindowsを使うのは無し。全部ネイティブのこと。大体のロボはここで挫折だな。RoboShellならOKだぜ!!
機体はDr.GIYさまのかな?なんせ、オトコは驚愕だからね。
で、コントローラはこれPSP のピンク色でケースはサマンサタバサ。PSPのWifiでコントロール。RoboShellなら、Wiportでネイティブサポート。これで、オンナはウットリ。
結局は強いロボなんだよなぁー。これが一番難しい。
でも、マジで考えて欲しいのがロボットの大会、もう少し華やかにしたほうがいいと思う。
お屠蘇気分も抜けきらない3連休の最終日にLemさんが拙宅に来た。一応、取材と言うことで。でかいよなやっぱ。Lemさん、やっぱアメリカ人だよ。手加減して話してもらっても着いて行けん。ロボの話は問題ないけど、俺一般的な事象(話題)はだめなんだよね。途中で Laurent さんもメッセンジャーのビデオ機能で参加してもらったが、仕事が入ってきたので途中退席。早いとこ、新年会の設定をしないと普通の飲み会になっちゃうね。帰りは近所の中華屋でお昼をご馳走になりました。
ありがとうございました。
別プロジェクトの基本的なプログラムがなんとか完了した。まだ、改良や追加すべき点は多々あるが、UIであるPCソフトに移ろうと思う。UI部分は今回のプロジェクトとBlueMarionetteで共通して使える。ロボットの本質は同じなんだなと感じたところ。ここへ来て開発のペースが少し落ちたような感じだが、完成度が高まってくると実際のブツが無いと先に進みにくくなってくるなぁー。
別プロジェクトは今週中にナントカしよう。
当初の予定通り、PWM-SDC でレッドバージョンのサーボモータ角度の取得が行えるようになった。現在は1ch(サーボモータが一個しかない…。)のみだが、近日中にサーボモータを追加して2ch以上の場合でのテストを行う予定である。先日、レッドバージョンのサーボコントロールソフトである USB-ISC を入手した。
現在は具体的な味付けなどは行っていないが、近藤科学のサーボは ISC の設定ソフトで様々な味付けが出来る。
この機能も PWM-SDC に取り込みたいと思うようになった。この機能を実現するためだけに¥6,300はちょっと高い気がする。また、こういった環境を統合的に扱えるツールチェーンが欲しい。
ハードの改修も終了したので、早速テストしてみた。かなりいい感じ。サーボモータへのPWM出力をピン一本のステータスで簡単に切り替えることが出来る。
もちろん、ソフトを組めば同様のことは出来るが、せっかく CPLD を使っているのだから、こういう機能も取り込んで行きたい。ソフトが軽減できると言うことは、それだけシステムの負荷が減るし、安定度も増すのだ。
#ソフト屋だけど、ソフトは信じていないんです…。
次はきっちり、タイミングを作りこんでレッドバージョンのキャラクタリスティックチェンジだな。これでサーボモータの制御は終わるので、A/Dなどのセンサ系に取り掛かれる。特にジャイロには色々なアイデアがあるので、それらを片っ端から実験していきたい。
帰国後の初アキバ。とにかく、激混みなんだよね、どこもかしこも…。
おでん缶なんていまだに売れ続けているけど、わけわからん感じ。
今回はハードの製作道具を買いだしに行った。もちろん、自分専用のツールだけど会社に常駐しているので、横浜支所専用ツールを購入したわけだ。
電子回路の製作(ハンダ付け)に必要なツールは、
PWM-SDCのキャプチャ部分の設計の見直しを行った。前回までの設計ではキャプチャ時に与えるPWM信号と実際のドライブに使うPWM信号を共有していた。今回の設計ではこの部分を分けた。理由はPWM信号の幅と挙動にそれぞれ違いがあるためだ。これにより、PWM-SD部分のプログラム構成はかなりすっきりさせることが出来た。今後はキャプチャ部分のソフトを煮詰めていくことにする。
ジャイロが到着した。3/18 にオーダしたから、10日もかかっていない。素晴らしい!!まだ、A/Dコンバータの読み込みソフトが出来上がっていないので試すことが出来ないが、早晩出来ると思う。しかし、納期が短いね。これはうれしい誤算。実際、もう少しかかるかな?と思っていたから…。更に開発のスピードを高めねば!!
PWM の値をシリアルポート経由で設定できる RoboShell は出来たのだが、いちいちキー入力していくのは面倒くさいし直感的ではない。そこでサーボの角度を簡単に設定できるソフトを考えてみた。もちろん、この手のソフトはロボットキット出している各社からもそのロボットキットと一緒に同梱されているが、見た感じ洗練されているUIとは言い難い。と言うのもPWMの設定をただ単に画面上に並べたスライダー(あるいは同等の)コントロールにマッピングしているだけだ。このUIは多分、ボリュームを並べたパネルをイメージして作成されたと思うが、PCの画面上と実際のボリュームパネルとに根本的な違いがある。PCではマウスを使って操作できるのは結局、ひとつのスライダーだけと言うことだ。本物のパネルであれば、両手を使って同時に制御できるのであるが…。
それぞれのサーボの設定を一覧できれば問題無い様に思える。UIのコンポーネントの配置は動線解析して決めた。現在はガワだけだが、中身に関しては今までの開発の蓄積でなんとかなりそうだ。最低限の実装は済ませておこうと思う。
シェル(ターミナル)から各種のコマンドが発行できるようになった。このシステムを RoboShell と名付けた。こうなってくると開発の速度も上がってくるし、各種の実験も非常にやりやすくなる。現在はPWMのデューティを変えるだけだが、早いうちにサーボの位置情報を取得できるキャプチャコマンドも実装しようと考えている。現在のところ、サーボの位置情報を出力するのはレッドバージョンとHMIがある。2機種ともほぼ、同じコマンド体系なのでそのままいけると考えている。特にHMIのサーボはレッドバージョンに比べて安価なので期待している。
キャプチャコマンドまで実現できたら、モーション作成ソフトだな。その後は各種のハードについて、実験を行う予定。
Blue Marionette のコントローラのソフトウェア構成をあれこれ検討している。検討に伴い、各社からリリースされているロボのコントローラについて調べている。
各社のコントローラについているのがスクリプト機能だ。これはサーボの制御やセンサからの入力をサポートする、そのボード用の中間言語になる。ネイティブ原理主義者としてはこれはいただけない。やっぱり、ネイティブでしょ?と言うわけで、なぜこの様な言語が必要になるかを考えてみた。
ロボットは様々な技術の複合体である。ソフトの処理内容だけでも、かなり複雑になる。この複雑さを緩和できるのはそれだけで価値のあることである。
こう書くと、上記にダブるようだがネイティブな処理内容を企業的に保護したい場合もあり得る。つまり、第3者にパクラれないようにするためだ。
プログラムをモーションデータを格納する領域がどのメモリ媒体を使っているかによる。フラッシュなどにプログラムやデータを書き込む場合は書き込み回数の制限を受けるが、バッテリバックアップのSRAMなどであれば、実質的に書き込み制限が無くなる。中間言語の形式で格納できるスクリプトはSRAMなどの相性とも良い。
上記のように様々な理由が考えれるが、今回はネイティブ。フラッシュROMの利用を前提にロボットのソフトウェアを構築していく。
先日、購入したレッドバージョンのサーボの位置情報読み取りルーチンを検討している。この機能を実現するためにCPLDを製作したのだが、ピン数を削減するために処理が少し複雑になった。そして、この機能も当然、シェルに組み込むので、今まで製作したモジュール各部を色々と見直す必要が出てきた。そこで、インテグレーションの前にリファクタリングを始めたというわけだ。
このリファクタリングを通じて、各モジュールの独立性が一気に高まった。特に割り込みルーチンをそれぞれのモジュールに持たせるようにしたので、プログラムの構成がすっきりしてきた。
レッドバージョンの読み込みはPWMを動作させながらのパルスの読み込みを行う多重割り込みになる。かなり、面白そうだ。
現在、製作中のロボットにコード名を付けることにした。その名は Blue Marionette。 CPLD のIP提供者とチャットしている中から生まれたんだけど、何となくロボのシステムをあらわしているし、作者(俺自身)の心情も表しているので、結構気に入っている。
こんな本もあるみたいだけど、なんか難しそう。The Blue Marionette。
読んでみたいけど…。
最低限の機能を確保したターミナルプログラムが完成した。今まで色々な人がこの手のソフトを作成したと思うが、その中でも最もショボイ部類に入るのではなかろうか?
後で作成するクライアントソフトで隠蔽(頬被り)するしかないな…。
こんな感じ…、
固定長の命令で扱えるデータは 0〜9 までの数値のみ。
cccc xxxx yyyy zzzz
cccc はコマンドID、xxxx - zzzz はパラメータ 0000 〜 9999 まで使える。
次はクライアントソフトだな。
ロボットのコントローラの仕様やハードも固まってきたので、そろそろサーボを使った実験がしたくなってきた。PWMで普通に制御する分にはまったく問題なさそうだが、気になるのはフィードバック情報の取得だ。これについては、まとまった資料が無いので、手探りかあるいは製造元に訊ねなければいけない。
とりあえずはシェルを完成させて、そこでサーボのコントロールを出来るようにしなければならない。これが出来れば、PCのクライアントソフトを充実させて、ティーチングなどが行えるようになる。で、今回買ったサーボモータは近藤科学のレッドバージョン ICS-2350HV だ。結構、高かったけれど今回のロボにはこのクラスが相応しい。
行くぜ!!
ロボットの姿勢制御にはやはり、ジャイロだと言うことで、オーダーしてみることにした。ムラタ製作所のジャイロ ENC-03R をオーダすることにした。問い合わせ→見積もり→発注が大変スムースに行えた。この会社のプロセスが、うまい証拠だろう。これで、納期どおりに納入されたら、本当に凄いことだ。
ジャイロでは色々と実験してみたいことがあるので、各種の実験を行う予定。ただ、ジャイロは戦略物資に相当するので、誓約書の提出が求められる。この辺、注意が必要だ。
到着が本当に楽しみだ。
ガテンな組込み機器の場合は単機能になり、人間は制御にあまり介在しない。パラメータを変えた場合でも再ビルドだ。でも、開発の初期にこれでは面倒くさい。そこで簡単なターミナル機能(シェル)を搭載することにした。参考にしたのはこのコードだ。割り込み駆動のシリアル制御のプログラムなのだ。シェルにより対話形式でコントローラに指示を与えることが出来る。もちろん、専用のクライアントを装備すればかなりUIが改善される。現在はまだ、シェルの枠組みを作っただけでコマンドなどは決めていないが、試してみたい動作はそれなりにあるので、順番に実装していこうと思う。
写真は サーボコントローラのファンクショナルプロトタイプ。これが実際のロボットに載るのではなくて、制御ソフト制作、検討用のハードウェアだ。もちろん、ロボットに搭載してもOKだが、2足歩行ロボットではなくて、もう少しガワの大きいロボットになるだろう。EIA-232Cの信号変換モジュールはBluetoothのモジュールと換装できるようになっている。
CPLDのIPは、「鬼吸い」 の共同開発者が作成してくれた(多謝)。これで、緑色の部分まで対応したPWM−SDCが出来たことになる。ただし、CPLDの規模の関係で、16ch までしか装備していないが、今後は基板を製作して、CPLDをより大規模なものに付け替える予定である。幸いCPLDのリソースはまだ十分あるのでより便利な制御に必要なファンクションを追加することも可能だ。SDCはSignal Distribution & Capture の略称である。現在はPWMの分配までしかソフトを作成していないので、Red バージョンの信号取り込みプログラムの作成が急務となる。
うーむ、そろそろ研究用のサーボを購入するかな…?
今まで、色々とロボットのコントローラについて研究したけど、そろそろ決定版が出るような感じ。この機械ではないかもしれないけど、両手でしっかりホールドした時にちょうど親指が画面(タッチパネル)の左右に触れるようになり、これをキーボードの代わりにすることが提案されている。これぞ、まさしく今まで求めてきたUIだと思う。画面にコントローラを仮想的に出すことにより、手の大きさや状況に応じた(コンテキストセンシティブ)キーの組み合わせを実現できるからだ。
機体製作を急がねばっ!!!
生CPLDに挑戦すべく、秋月電子で Xilinx の XC9572XL を買ってきた。価格は300円。これは0.65mm の表面実装デバイスなので、使いやすくするために変換基板に実装する。変換基板の価格は 510円。デバイスより高い…。どういうこと?試作だと大変だよね。早く、ロボット専用基板が欲しくなったよ。
トランジスタ技術の付録である CPLD 基板を早速、使ってみた。何を隠そう、CPLDを本格的にやるのはこれが初めてなのである。もちろん、ソフト開発で言うところの HelloWorld チックなことは…そう、LEDの点灯とかはやったことがあるけど〜。
パーツは全部、揃ったので一気に組み立てて動作確認までやってみた。問題ない。サクサク進む。
調子に乗って、PWM-SD の中核部品である 74HC237 を入力した。ライブラリにあるかな?と思って探してみたんだけど、無さげな様子。気合の回路図入力(HDLをまだ、マスターしていないんです。)でなんとか出来上がった。早速、昨日作ったプログラムを走らせると…。「動く、動く〜♪♪やったぁー一発だぁー!!」
かなり、モチベーションが沸いてきた。付録の基板は Altera の CPLD ベースなんだけど、入手性で言ったらXlinx も良いのかな?って気がする。
とりあえず、秋月電子で Xilinx かな?変換基板も一緒に買って、生CPLDに挑戦してみるつもり。これが出来たら、いよいよ基板化だな。
うまく、動作しなかったことで若干の視野狭窄に陥っていたようだ。ちょっと、ソフトを工夫すればいけそうな感じだ…?
具体的なアイデアはPWMのMatch0で割り込みを発生させて、そこでポートのOn/Offを行えばいいはず?
レスポンスの時間とか、実際のPWMの値の書き換えなどが絡んでくるので、実験してみるまではなんとも言えない。ちょっと、試してみよう。
PWM-SD の実現方法で、思いっきりカン違いがあった。元々、この辺はあまり自信があって実装したものではないけれど動かないのはやっぱり悔しい。
カン違いは LPC2138 のタイマの取り扱いだ。PWM, Timer0(MAT0) ともてっきり、同じ TC を使っていたかと思っていたけど、実は違う。ソフトが組みあがって、ようやくそれに気づいたわけだ。現在はPWMを4ch使って、4x8=32ch のサーボをコントロールできるようにしているけど、PWM をひとつ、ラッチに割り当てる必要があるので、3x8=24ch になりそう。
コントロールできるサーボが少なくなるのは痛いけど、他にやりようが無いので、仕方が無い。ハードの改造、ソフトの変更に少し時間がかかりそうだ。
これも勉強だと思って、甘んじて受け入れよう。
PWM-SD 動作の為に必要なMCUの処理内容の理解と整理がほぼ、完了した。MCUのI/O周りの処理を統合すれば、出来そうな感じなのでそろそろ、書き出してみようかと思う。
サーボを効率よく動作させるためには、その他の要因もかなり絡んでくると思うが、まずは PWM-SD の動作からだ。この後に、モーション定義のためのシステム要件である、時間軸の制御(リアルタイム処理)が入ってくるのだ。
ロボットの資料を色々と調べていたら、こんなのが出てきた。
http://www.dod.gov/comptroller/defbudget/fy2003/budget_justification/pdfs/rdtande/darpa_vol1.pdf
米国防総省の資料でちょっと古いけど、結構読み応えがある。色々なことを研究しているんだなってこともわかるよ。軍事技術は極端な例としても、テクノロジーに何が求められているかがヴィヴィットに伝わってくる。面白い。
現在製作中のシステムの参考になった。お暇でしたら、ぜひご一読ください。
ロボット用に使うCPUは LPC2138 になりそうだな。決め手は暴力的とも言えるFlashROMの容量。I2CのEEPROMなんかで記憶域を増やそうと思ったけど、この容量を目の当たりにするとなんか小手先の対応に思える。使い慣れたARMのツールチェーンも魅力的だ。とりあえず、オプティマイズから試作キットを買ってきて、処理内容のバジェットに問題が無いかどうかの確認実装だな。
アキバ巡りに必ず入るのが、秋月電子通商。なんと、2700mAh のNiMH電池が売っていた。年末に 2600mAh を購入したばかりだというのに…。まじにセルゲイ ブブカの棒高跳びよろしく 1cm 刻みならぬ、100mAh 刻みで出してくる。やっぱり、買うんだろうな。これも…。
ロボットのサーボコントローラを色々と調べてみたけど、やっぱりどれもしっくりこない。非常に近いコンセプトを共有できそうなものもあるにはあるが、それでもやっぱり…。
と言うことで自作することにした。システム設計で肝要なのは動作確認の方法をしっかり確立しておくことだ。つまり、キチンとテスト出来る環境をいかに早く構築できるかにかかっている。
最終的なカタチとそれに近づく工程の輪郭もかなり、はっきりしてきた。やるべきことがかなり見えてきた。後は一歩一歩の実行だ。
RoboNova を借りてしばらく経つが、やっぱり2足歩行は表現力があるなぁーと思った次第…。ただ、現在のRoboNovaをそのまま使うのはやはり、面白くないのでとりあえずサーボコントローラ位は自分で作りたいと思うのである。もちろん、BTはネイティブで対応して各種のセンサーを装備したやつだ。今のような構成だと、実装密度の点で苦しいので表面実装部品で構成する。
問題はモーション作成用のソフトなどであるが、これは自作するしかないだろう。その後のロボット制御用のソフトも自作。自作、自作、自作…。なんとかなるだろう……?
カメラ搭載に伴う重量増加と慣性モーメントの変化により、今までの歩行パターンが使えなくなってしまったようだ。対策としてはパターンの修正を行うか、ジャイロなどを搭載してカウンターをあてるかのどちらかだが、開発資金はもう無いので歩行パターンの修正を行おうと思う。見てると色々なサーボを同時に動かすので、けっこう大変そうである。これと平行して128パターンリモコンへの拡張を行う予定。おもしろい!!
以前にロボットの制御の為に買ってきた秘蔵の Saitek のジョイスティックを接続してみた。やっぱり、ジョイスティックでコントロールできるのはいいね。今回は Saitek ユーティリティー+TeraTerm だったけど、そのうちに専用のクライアントを作ってみたいと思っている。そう、R2C2 の発展版だ。カメラとかもロボに付けて、画像処理もしたいな。
動歩行を最初に知らしめたのは本田のロボットであると思うが、その時に会社の同僚たちとそのロボットが入り込んだ生活について語り合ったものである。筆者的にやりたいのは座敷犬よろしく、ロボットが家の中をうろついていてのパトロールなどである。その為にはいくつか乗り越えなければいけない壁がある。
2足歩行ロボットのRoboNovaを借りていて弄くっている。ちょっと感じたことなど…。
会社に持っていった時に同僚の受けがよかった(極めてキャッチー)。人型ロボットのなせる業である。
センサー、カメラなどを搭載するスペースがほとんどない。
移動手段としての2足歩行は極めて能率が悪い。バッテリ寿命が一時間程度なのはきつい。
部屋の中を動き回れる基準として、VHSテープ程度の段差は乗り越えてほしい。
その他に自分で充電するなどのギミックは欲しい。それまでは今回のBTの様に要素技術の蓄積を行っていきたいと思う。
帰宅するとゲームボーイミクロが届けてあった。仕事が詰まっていたので、早速開梱とはいかなかった。フラッシュカートリッジを焼くためにノートPCを立ち上げるも、Windowsアップデートなどでかなり手間取った。その間は本体の充電。ナントカして焼くことが出来た。フラッシュカートリッジでの動作確認は出来たし、XRCでも動作する。後はマイクロ→GBA変換コネクタが出るのを待って、ULAでの実験だ。GBAもしばらく遊べそうだな。