Last Update : 2007/Nov/25

CQ出版のインターフェイス2006年12月号注目記事として掲載されました。


RoboShell 概要
目的
特徴
構成
タスク管理
リファレンス回路
コマンド
F.A.Q.
ライセンス
<<戻る
    RoboShellPCB01 RoboShellPCB02
    • 背景

      近年、2足歩行を中心としたロボット開発が企業・研究機関・アマチュアなどで活発に行われている。

    • 現状の問題点

      様々な技術の複合体であるロボット開発は複合体であるゆえ、参入障壁がいたる所にある。特にサーボモータやロボット用のコントローラは専用品を用いるため、大変高価である。また、技術的にもコントローラの制御ソフトなどの構築を中心とした情報技術、実際の回路製作に必要な電子回路設計技術、ロボットの動作を実現する機械・機構の理解、機体製作に必要な材料技術などを高次元で組み合わせる必要が出てくる。多くの2足歩行ロボットは競技会への出場を目指している機体かメーカ製のキットなので情報開示がなされておらず、昨今非常に重要な概念である標準化がなされていない。このため「車輪の再発明」がたびたび行われている。また、ロボット開発は技術教育に役立つと言いながらも機材が高価だったり、プロプライエタリなツールが多く利用されるため、学んだ技術の資産化が進み難い。現状がこれでは教育用途としては不向きと言わざるを得ない。


    • 目的

      業界標準のテクノロジーを用いて、低価格でオープンなロボット制御コントローラを構築する。製作過程を通してシステム制御に必要な要素(制御理論、電子回路、UIなど)を学ぶ。また、得られた技術をコミュニティーで共有して技術の向上に役立てる。


    • 特徴

      RoboShell.gif

      • 高機能

        1. 32bit RISC CPU
        2. PWM方式のサーボモータコントロール 最大32ch
        3. 大容量 (512KB オンチップフラッシュメモリ)
        4. 高速動作 (内部クロック 60MHz)

      • 業界標準技術の導入
        • ハードウェア
          1. CPU - ARM7TDMI ベース
          2. CPLD (XILINX 9572XL)
          3. USB
          4. JTAG
          5. PWM方式のサーボモータコントロール
            1. 宮田耕二氏が発表された Little Burning Core ベース)
            2. 近藤レッドバージョンサーボモータに一部対応
        • ソフトウェア
          • 開発環境
            1. GCC, GDBなどの GNU ツールチェーン
            2. Eclipse + CDT
            3. CPLD Writer
            4. Flash Programming ツール

              • USB を介して PC と接続し、JTAGによるプログラムの書き込みとデバッグ

                →広く使われている技術で構築されているので、習得した技術が資産になる。

      • 柔軟性
        • CPU + CPLD

          CPU だけでは足りないI/O点数などを CPLD で補完。CPU や CPLD は上記ツールを用いて再プログラミング可能。

      • 小型
        • 72mm x 47mm

          秋月電子C基板と同サイズ。穴位置も合わせてあるため、拡張が容易。

          RoboShellExtension.JPG RoboShellExtWithServo01.JPG


      • 低価格

        • キット \5,000
        • 完成品 \8,000

        Opitimizeからキットと完成品が入手可能。

        ロボコントローラを入手するには市販品を購入するか、各種マイコンの評価用ボードを独自に拡張して利用していた。市販品の値付けに対してはどうこう言うつもりはないが、結構高価な気がする。評価用ボードはそれなりに安価だが、サーボモータを動かすところまで拡張するには手間とお金がそれなりにかかる。

      • オープンソース
        • ロボット側
          • サーボモータコントローラソフト
          • 参考用:
            • RoboShell Corebuild 20060323

              最初期に作った、PWMの制御の練習用

        • CPLD
      • ネイティブ対応

        各社からリリースされているロボコントローラはスクリプトを搭載している。スクリプトは習得が容易だが、プロプライエタリな技術なので他に転用が利かない。この為、他のロボコントローラに乗り換えると今までの資産を有効活用できなくなる。もう一つの側面として、ロボコントローラメーカの技術隠蔽がある。全てオープンにしてしまうとその基板をコピーされてしまうからだ。これを防ぐための手立てとして理解は出来るが、ロボコントローラの機能を極限まで追及するとやはり、ネイティブで動作させたくなる。

      • 過去の資産の最大限の活用

        1. サーボモータの電源混在可

          今まで利用してきたノーマル電圧のサーボモータとハイボルテージサーボモータを混在できる。

        2. 電源コネクタなどの再利用

          バッテリ端子などは後付なので、今まで利用してきたものを転用できる。


    • 構成(詳細

       RoboShell はいくつかのサブシステムから構成されている。特定のOSの管理下の動作ではないので、他のマイコンなどへの移植も容易である。サブシステムは割込み駆動で、最小のレイテンシで動作する。また、完全な割込み駆動なのでブロックせず(待ち時間なし)に各タスクを実行できる。

      • PWMサブシステム

          ロボット用サーボモータの制御を行う。PWMのベースクロックは一般的なサーボモータの動作周期である 2.5msec を用いている。

      • シリアルサブシステム

          RoboShell の中心部分。ホストとの通信を割り込みで処理する。

      • サーボモータ角度検出サブシステム

        近藤製レッドバージョンのサーボモータの角度取り込み。

      • A/Dコンバータサブシステム

        PWMの周期と同期してA/Dコンバータからデータを取得する。

      • モーション制御サブシステム

        PWMの周期を4分周して直線補完により各サーボモータのステップ角を決める。

      • プレイステーション2コントローラ入力サブシステム

        プレイステーション2コントローラの入力を制御する


    • タスク管理(詳細

      タスク管理は大きく分けて2種類ある。一つはPWMの波形生成に伴う 2.5msec のスケジューラ、もう一つはバックグランドで動作する ディスパッチャーである。時間軸での動作が必要なものはスケジューラに記述して、タスクの一発目の起動はディスパッチャーのタスクコントロールブロック(TCB)に記述する。


    • リファレンス回路

      RoboShellWithGyroSensor02.JPG

      EZ-SERVOで提供されている部分はRoboShellの核となる部分である。実際のロボットを構築するには、センサ系を含めたさらに様々デバイスを統合する必要がある。ロボットの個性を出すためにどんなデバイスを搭載するかは個人の自由であるが、多くのロボットに搭載されている代表的なデバイスでのシステムの実現例があれば、車輪の再発明をしなくてすむ。ココでは以下のデバイスの接続例を説明する。現に miniEZ-ARM とポートを合わせてあるので、最初のテストコードがそのまま使えた。

      • デバイスの接続例

        1. シリアルコンソール用端子

          コマンド投入用のシリアルコンソール用の端子。今回、miniサイズのピンジャックを利用したが、この辺は各自のセンスで良いと思う。PCなどと接続する場合はレベルコンバートする必要があるので注意すること。

          • 使用ポート

            1. TxD0
            2. RxD0

        2. LED

          LED と言うとデバイスらしいデバイスでも無いと思う人が多いかも知れないが、システム開発では大きな力を発揮する。特にデバッグ時にはこれほど、有用なデバイスはほかに見当たらない。LEDなんてどこにつけても良いような感じだが、場所を決めておけば他人の書いたテストコードやデバッグテクニックを共有できる。

          • 使用ポート

            1. P0.31

        3. 加速度センサ

          ロボットの転倒を含めた状態検知に使う。現在はカイオニクス社の3軸加速度センサモジュールを利用している。秋月電子から簡単に調達できる。これをADコンバータに直結している。

          • 使用ポート

            1. A0.0
            2. A0.1
            3. A0.2

        4. ジャイロセンサ

          RoboShellWithGyroSensor01.JPG
          近年の(ホビー用)2足歩行ロボットのブレークスルーがこのジャイロセンサーである。RoboShellはこのジャイロセンサーもサポートしている。ジャイロの出力を自在に変換して利用できる。ジャイロは入手性と精度、実装を考慮してムラタ製を利用している。オペアンプの回路はムラタのサンプル回路をそのまま利用している。

          • 使用ポート

            1. A0.3
            2. A0.4

        5. プレイステーション2(PS2)コントローラ

          FourPS2Controllers.JPG
          外部からロボをコントロールするための手段には様々なものがある。BluetoothやWiFiなどがよく使われる手法であるが、これらは高価な上に消費電力が高いものが多い。もちろん、PCからの操作の親和性を考えるとこれらの手法は非常に優れている。あるいは伝統的なラジコンプロポや最近、登場してきたロボット用リモコンを使うのもありだろう。RoboShellでPS2のワイヤレスコントローラも利用可能である。市販されている全てのコントローラを試したわけではないが、写真にある4種類のコントローラで動作を確認した。ゲームテック製のコントローラは他と挙動が若干異なる。ゲームテック製のコントローラを使う場合は RoboShell のコンソールから、

          • ゲームテックコントローラ

            GameTechController.JPG

            >1211 0001 [Enter]

            を実行する。

            • 使用ポート

              1. P0.17 CLK
              2. P0.18 DAT 3.3KΩ でプルアップ
              3. P0.19 CMD
              4. P0.20 /SEL

      • 基板の取り付け例

        RoboShellWithGSensor02.JPG
        本体基板とリファレンス基板は剛性を確保するためにガッチリ接続する必要がある。コネクタの高さを考慮して、それにあったスペーサを用いて4箇所で固定する。現在は11mmのスペーサで固定されている。


    • コマンド

      RoboShellWithSerial02.JPG
      RoboShell はシリアルラインを介して、PCなどのホストからコマンドを与えることが出来る。シリアルラインは TxD0, RxD0 のラインを用いる。RoboShell Composer でモーションの定義とソースコードの生成ができるので開発、調整用として利用するとよいだろう。

      • コマンドの考え方

        RoboShell のコマンドの与え方は非常に原始的である。これはパーサにリソース割きたくなかったからである。コマンドは以下のように与える。

      • コマンドのフォーマット

        コマンド番号<スペース>パラメータ1<スペース>パラメータ2<スペース>パラメータ3 <CR><LF>

      • コマンド一覧(随時、更新 詳細はソースリスト中の commandID.h

        コマンドIDコマンド番号処理内容
        ID_TASK_CHANGE_SERVOVALUE_RUN 0200 指定したchのサーボモータを目的角まで駆動
        ID_TASK_CHANGE_SERVOVALUE 0210 指定したchのサーボモータの目的角をセット
        ID_TASK_SET_SERVO_VALUE 0220 0210 でセットしたサーボ角を実際に駆動(多軸動作)
        ID_TASK_SET_MODE_PWM 0300 動作モードを PWM モードに移行
        ID_TASK_SET_MODE_CAP 0400 動作モードをキャプチャモードに移行
        ID_TASK_CAP_SERVOVALUE 0500 サーボ角の取得
        ID_TASK_RESET_COUNTER 0600 カウンタをリセットし、チャンネル番号まで進める
        ID_TASK_UP_COUNTER 0650 カウンタを与えられたチャンネル番号まで進める
        ID_TASK_GET_ADC_VALUE 0700 ADC値の取得
        ID_TASK_GET_SERVOVALUE 0800 サーボ角の表示
        ID_TASK_MOVE_MOTION_SCENARIO 0900 モーションの実行
        ID_TASK_PS_PAD_READ 1200 PS2 コントローラの値の読み出し
        ID_TASK_PS_PAD_SET_RUMBLE 1210 振動機能のOn/Off
        ID_TASK_PS_PAD_READ 1211 PS2 コントローラの切替

        外部から制御する場合は上記コマンドを投入するが、RoboShell そのもので動作させる場合はディスパッチャ以下の関数を直接呼び出して実行する。

      • コマンド例

        1. サーボモータを任意の角度へ移動

          コマンド投入後に CH00 に接続したサーボモータの角度が変わることを確認する。

        2. 近藤レッドバージョンサーボモータの角度の取得


          1. で投入したコマンドの近傍の値が得られることを確認する。

          サーボモータの角度の取得はPWMの長さとして出力されるので、ブロッキングして行うことは出来ない。そのため、コマンドを時間をあけながら投入して角度情報を得ることになる。

      注意

      ユーザの独自コマンドは9000番台を利用すること


    • F.A.Q.

      1. Q.ボードはどこから入手出来ますか?

        Opitimize から可能です。

      2. Q.バグがあるみたいなんですけど?

        A.直したらこっそり教えてください。

      3. Q.近藤のシリアル方式は出来ますか?

        A.やり方がわかれば出来ると思います。

      4. Q.自分で拡張した分も公開しないといけないの?

        A.義務は無いですけど、大会とかで使い終わった後にでもこちらで公開してくれればみんなが幸せになると思います。

      5. Q.お金が無くてボードが買えないんですけど?

        A.「ARM の勉強をしたい。」とか「CPLDの勉強がしたい。」あるいは 「Eclipse で組込み開発がやりたい。」と言って会社や学校で買ってもらいましょう。そのための標準技術です。

      6. 詳しいマニュアルは無いんですか?

        A.マニュアルを作成するには膨大な時間がかかります。時間はお金と同義語です。つまり、マニュアルが無い分価格が抑えられているわけです。また、RoboShellにはソースコードが開示されているので、下手なマニュアルがある他のシステムよりユーザフレンドリーであると言えます。


    • ライセンス

      無保証・無サポート


頁の先頭
織田裕一へメール


Copyright (C) 1998 - 2007 TeamKNOx