« 2006年02月 | メイン | 2006年04月 »
ジャイロが到着した。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が改善される。現在はまだ、シェルの枠組みを作っただけでコマンドなどは決めていないが、試してみたい動作はそれなりにあるので、順番に実装していこうと思う。
先日、ゲーラボの元編集長とゲーム機改造を生業としている某氏とお茶した。PS3をはじめとしたゲーム機でどういう改造が出来るか?と言うものだった。あまり、なさそうだな?と言うのが各氏の結論。そこで、おいらはロボット、そうロボット。
で、そこから遡ること、さらに数日。ゲーラボの現編集長と飲みに行ったんだけど、新しいゲーム機で何をやりますか?って話になった。PS3はスパコンを家庭に持ち込んだもので、SCEもスパコンのエンジニアを募集していた時期があった。
スパコンの使用を前提とした利用方法を読者に提案すればよいのでは?と言ってみた。具体的に言うと、各種のシミュレーションなどをご家庭で行うのだ!!
例えば、「天気予報」とか「自動車の衝突時の乗員挙動解析」とか「原爆」とかだ。出来の良いシミュレーションはゲームと区別がつかないのだ。一級のおもちゃなのだ。
まぁ、PS3にLinuxが搭載されれば、早晩そういうアプリケーションが出てくると思うのだ。
俺もかなり、期待しています。
写真は サーボコントローラのファンクショナルプロトタイプ。これが実際のロボットに載るのではなくて、制御ソフト制作、検討用のハードウェアだ。もちろん、ロボットに搭載しても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-SD だがとうとう動き出した。ハードの変更は無し。ソフトもPWMの割り込みを用いているので、以前のより、コンパクトになった。前に使っていたタイマは別の用途に使うことにしよう。
4月号のトランジスタ技術の付録はCPLDの評価基板。
どのCPLD/FPGAを今回のロボットに使うかはまだ、未定だが手元のパーツを確認すると、DB25の♀コネクタやら♂−♂のケーブルなんかも出てきたので、HDLの勉強を兼ねて今回の評価基板を使ってみようと思う。
端子さえ合わせておけば今回作成したソフトでそのままCPLDの動作確認も出来るので便利なのだ。以前に検討した回路は色々と調べてみると、マルチプレクサとデマルチプレクサとカウンタの組み合わせで実現できそうである。これらはHDLの教科書にサンプルが載っているので色々と都合が良い。なんとかなりそうな予感。
うまく、動作しなかったことで若干の視野狭窄に陥っていたようだ。ちょっと、ソフトを工夫すればいけそうな感じだ…?
具体的なアイデアはPWMのMatch0で割り込みを発生させて、そこでポートのOn/Offを行えばいいはず?
レスポンスの時間とか、実際のPWMの値の書き換えなどが絡んでくるので、実験してみるまではなんとも言えない。ちょっと、試してみよう。
PWM-SD の実現方法で、思いっきりカン違いがあった。元々、この辺はあまり自信があって実装したものではないけれど動かないのはやっぱり悔しい。
カン違いは LPC2138 のタイマの取り扱いだ。PWM, Timer0(MAT0) ともてっきり、同じ TC を使っていたかと思っていたけど、実は違う。ソフトが組みあがって、ようやくそれに気づいたわけだ。現在はPWMを4ch使って、4x8=32ch のサーボをコントロールできるようにしているけど、PWM をひとつ、ラッチに割り当てる必要があるので、3x8=24ch になりそう。
コントロールできるサーボが少なくなるのは痛いけど、他にやりようが無いので、仕方が無い。ハードの改造、ソフトの変更に少し時間がかかりそうだ。
これも勉強だと思って、甘んじて受け入れよう。
mini EZ-ARM 7 のテストソフトがだいぶ、書き溜まってきた。近いうちにページにまとめたいと思っている。 現在は PWM-SD の機能を実現するための実装だが、今後システムを拡張するにつれて他の周辺機器を用いた実装も出てくることが予想される。これらも順次、実装例として紹介したい。 割り込みハンドラなども動作するようになったので、色々と使えそうだ。プログラムで共通に使うファイルはディレクトリを決めて括り出した。同じディレクトリ構成にしてもらえれば、すぐに使えると思う。ディレクトリの設定例はこちらを参考にしてほしい。
PWM-SD 動作の為に必要なMCUの処理内容の理解と整理がほぼ、完了した。MCUのI/O周りの処理を統合すれば、出来そうな感じなのでそろそろ、書き出してみようかと思う。
サーボを効率よく動作させるためには、その他の要因もかなり絡んでくると思うが、まずは PWM-SD の動作からだ。この後に、モーション定義のためのシステム要件である、時間軸の制御(リアルタイム処理)が入ってくるのだ。
最近は LPC2138 のテストプログラムを書き殴っている。動作を理解するために、サンプルプログラムを解読しているわけだが、その中に出てきている I/O レジスタの名前から動作の理解を深めているところだ。少し見たことがある省略形やそれだけでは意味のわからないレジスタ名などいろいろある。マニュアル片手に意味を解読する作業は、中学一年生以来の作業だな…。
繰り返し、使っているうちに言葉(レジスタ名)と動作(働き)を覚えていくわけだ。
なんか、外国語の勉強をしているみたい…。
近所のヨドバシに9:00頃、行ったけど凄い混み方だった。聞くところによると、その店では300台出荷で、7:30位に着いても200番台後半だったらしい…。
とりあえず、こんなゲームを作りたい…。
今、旬でしょ?でも、どっかが出しそう。
最初はラグ板とか使って、抵抗の足とかを配線する。最高レベルは1005のチップ部品のハンダ付けとか…。十字ボタンをハンダに見立てて、右手のタッチペンがハンダゴテ。先に左手(ハンダ)をボタンから離さないと、解けすぎるとか、コテを当てすぎると、パターンが剥がれるとか…。引きハンダとかできると良いなぁー。