CQ出版のインターフェイス2006年12月号に注目記事として掲載されました。
近年、2足歩行を中心としたロボット開発が企業・研究機関・アマチュアなどで活発に行われている。
様々な技術の複合体であるロボット開発は複合体であるゆえ、参入障壁がいたる所にある。特にサーボモータやロボット用のコントローラは専用品を用いるため、大変高価である。また、技術的にもコントローラの制御ソフトなどの構築を中心とした情報技術、実際の回路製作に必要な電子回路設計技術、ロボットの動作を実現する機械・機構の理解、機体製作に必要な材料技術などを高次元で組み合わせる必要が出てくる。多くの2足歩行ロボットは競技会への出場を目指している機体かメーカ製のキットなので情報開示がなされておらず、昨今非常に重要な概念である標準化がなされていない。このため「車輪の再発明」がたびたび行われている。また、ロボット開発は技術教育に役立つと言いながらも機材が高価だったり、プロプライエタリなツールが多く利用されるため、学んだ技術の資産化が進み難い。現状がこれでは教育用途としては不向きと言わざるを得ない。
業界標準のテクノロジーを用いて、低価格でオープンなロボット制御コントローラを構築する。製作過程を通してシステム制御に必要な要素(制御理論、電子回路、UIなど)を学ぶ。また、得られた技術をコミュニティーで共有して技術の向上に役立てる。
→広く使われている技術で構築されているので、習得した技術が資産になる。
CPU だけでは足りないI/O点数などを CPLD で補完。CPU や CPLD は上記ツールを用いて再プログラミング可能。
秋月電子のC基板と同サイズ。穴位置も合わせてあるため、拡張が容易。
ロボコントローラを入手するには市販品を購入するか、各種マイコンの評価用ボードを独自に拡張して利用していた。市販品の値付けに対してはどうこう言うつもりはないが、結構高価な気がする。評価用ボードはそれなりに安価だが、サーボモータを動かすところまで拡張するには手間とお金がそれなりにかかる。
ラインバッファがうまくクリアされず、ラインバッファオーバーフローになるバグあり?
最初期に作った、PWMの制御の練習用
CPLD の制御の検討用として、お使いください。
各社からリリースされているロボコントローラはスクリプトを搭載している。スクリプトは習得が容易だが、プロプライエタリな技術なので他に転用が利かない。この為、他のロボコントローラに乗り換えると今までの資産を有効活用できなくなる。もう一つの側面として、ロボコントローラメーカの技術隠蔽がある。全てオープンにしてしまうとその基板をコピーされてしまうからだ。これを防ぐための手立てとして理解は出来るが、ロボコントローラの機能を極限まで追及するとやはり、ネイティブで動作させたくなる。
今まで利用してきたノーマル電圧のサーボモータとハイボルテージサーボモータを混在できる。
バッテリ端子などは後付なので、今まで利用してきたものを転用できる。
RoboShell はいくつかのサブシステムから構成されている。特定のOSの管理下の動作ではないので、他のマイコンなどへの移植も容易である。サブシステムは割込み駆動で、最小のレイテンシで動作する。また、完全な割込み駆動なのでブロックせず(待ち時間なし)に各タスクを実行できる。
ロボット用サーボモータの制御を行う。PWMのベースクロックは一般的なサーボモータの動作周期である 2.5msec を用いている。
RoboShell の中心部分。ホストとの通信を割り込みで処理する。
近藤製レッドバージョンのサーボモータの角度取り込み。
PWMの周期と同期してA/Dコンバータからデータを取得する。
PWMの周期を4分周して直線補完により各サーボモータのステップ角を決める。
プレイステーション2コントローラの入力を制御する
タスク管理は大きく分けて2種類ある。一つはPWMの波形生成に伴う 2.5msec のスケジューラ、もう一つはバックグランドで動作する ディスパッチャーである。時間軸での動作が必要なものはスケジューラに記述して、タスクの一発目の起動はディスパッチャーのタスクコントロールブロック(TCB)に記述する。
EZ-SERVOで提供されている部分はRoboShellの核となる部分である。実際のロボットを構築するには、センサ系を含めたさらに様々デバイスを統合する必要がある。ロボットの個性を出すためにどんなデバイスを搭載するかは個人の自由であるが、多くのロボットに搭載されている代表的なデバイスでのシステムの実現例があれば、車輪の再発明をしなくてすむ。ココでは以下のデバイスの接続例を説明する。現に miniEZ-ARM とポートを合わせてあるので、最初のテストコードがそのまま使えた。
コマンド投入用のシリアルコンソール用の端子。今回、miniサイズのピンジャックを利用したが、この辺は各自のセンスで良いと思う。PCなどと接続する場合はレベルコンバートする必要があるので注意すること。
LED と言うとデバイスらしいデバイスでも無いと思う人が多いかも知れないが、システム開発では大きな力を発揮する。特にデバッグ時にはこれほど、有用なデバイスはほかに見当たらない。LEDなんてどこにつけても良いような感じだが、場所を決めておけば他人の書いたテストコードやデバッグテクニックを共有できる。
ロボットの転倒を含めた状態検知に使う。現在はカイオニクス社の3軸加速度センサモジュールを利用している。秋月電子から簡単に調達できる。これをADコンバータに直結している。
近年の(ホビー用)2足歩行ロボットのブレークスルーがこのジャイロセンサーである。RoboShellはこのジャイロセンサーもサポートしている。ジャイロの出力を自在に変換して利用できる。ジャイロは入手性と精度、実装を考慮してムラタ製を利用している。オペアンプの回路はムラタのサンプル回路をそのまま利用している。
外部からロボをコントロールするための手段には様々なものがある。BluetoothやWiFiなどがよく使われる手法であるが、これらは高価な上に消費電力が高いものが多い。もちろん、PCからの操作の親和性を考えるとこれらの手法は非常に優れている。あるいは伝統的なラジコンプロポや最近、登場してきたロボット用リモコンを使うのもありだろう。RoboShellでPS2のワイヤレスコントローラも利用可能である。市販されている全てのコントローラを試したわけではないが、写真にある4種類のコントローラで動作を確認した。ゲームテック製のコントローラは他と挙動が若干異なる。ゲームテック製のコントローラを使う場合は RoboShell のコンソールから、
>1211 0001 [Enter]
本体基板とリファレンス基板は剛性を確保するためにガッチリ接続する必要がある。コネクタの高さを考慮して、それにあったスペーサを用いて4箇所で固定する。現在は11mmのスペーサで固定されている。
RoboShell はシリアルラインを介して、PCなどのホストからコマンドを与えることが出来る。シリアルラインは TxD0, RxD0 のラインを用いる。RoboShell Composer でモーションの定義とソースコードの生成ができるので開発、調整用として利用するとよいだろう。
RoboShell のコマンドの与え方は非常に原始的である。これはパーサにリソース割きたくなかったからである。コマンドは以下のように与える。
コマンド番号<スペース>パラメータ1<スペース>パラメータ2<スペース>パラメータ3 <CR><LF>
外部から制御する場合は上記コマンドを投入するが、RoboShell そのもので動作させる場合はディスパッチャ以下の関数を直接呼び出して実行する。
コマンド投入後に CH00 に接続したサーボモータの角度が変わることを確認する。
1. で投入したコマンドの近傍の値が得られることを確認する。
サーボモータの角度の取得はPWMの長さとして出力されるので、ブロッキングして行うことは出来ない。そのため、コマンドを時間をあけながら投入して角度情報を得ることになる。
注意 ユーザの独自コマンドは9000番台を利用すること
ユーザの独自コマンドは9000番台を利用すること
Opitimize から可能です。
A.直したらこっそり教えてください。
A.やり方がわかれば出来ると思います。
A.義務は無いですけど、大会とかで使い終わった後にでもこちらで公開してくれればみんなが幸せになると思います。
A.「ARM の勉強をしたい。」とか「CPLDの勉強がしたい。」あるいは 「Eclipse で組込み開発がやりたい。」と言って会社や学校で買ってもらいましょう。そのための標準技術です。
A.マニュアルを作成するには膨大な時間がかかります。時間はお金と同義語です。つまり、マニュアルが無い分価格が抑えられているわけです。また、RoboShellにはソースコードが開示されているので、下手なマニュアルがある他のシステムよりユーザフレンドリーであると言えます。
無保証・無サポート
自由に利用できます。RoboShellのサポートはこちらで。
別途、お問い合わせください。