よくある質問 (FAQ)


ソフトウェアー

RoBIOSのバージョン

  • 現在、3つバージョンのRoBIOSがリリースされています。(例えば、rob51q.hex、rob51e.hex、rob51f.hex)
  • どのRoBIOSバージョンもASCII形式ファイル(.hex)バイナリー形式ファイル(.hx)で提供されています。
  • EyeBotコントローラーにインストールされているRoBIOSの バージョンを接続している カメラに一致させる必要があります。:
  • rob51q.hex    白黒QuickCam用 (提供中止)、約20フレーム/秒(fps)

  •                       カラーQuickCam V2用 (提供中止)、約5fps
  • rob51e.hex    EyeCam C1用 (提供中止)、約3fps
  • rob51f.hex    EyeBot基板上にFIFO拡張メモリーが装着されている場合:
                           EyeCam C1用、約10fps

  •                        EyeCam C2用、約3fps
     

    ホスト用システム

    注意: BDM (バックグランド・デバッガー用モジュール)はPC/DOS上でのみ実行できます。 BDMはアセンブリレベルでのデバッグ時あるいはデータの壊れたFlash-ROMにデータを転送しなおす場合に使用されます。
     

    グローバル変数

  • グローバル変数をひとまとめにして使わないようにしてください。
  • 下記のように宣言時にグローバル変数を初期化しないでください。

  •    int i=7;
    同じプログラムを2度実行するときに、この命令は実行されません。下記を推奨します。
       int i;
       int main()
       { i=7; ... }
  • グローバル変数名に"start"を使わないでください。この名前はシステムに予約されています。
  • EyeSim: グローバル変数はシミュレーションプログラムEyeSim使用時に問題を生じます。スレッドの使用によりすべてのロボットから見ることができるためです。
     
  • 複数のアナログ入力からの読込み

    サンプリング時間間隔を変えてアナログ信号を切り替えると読み込まれるデータが異なります。(例えば、OSWait())
    解決方法:測定しているアナログ信号のもつ内部抵抗を最大で5KΩにしなければなりません。理想的には小さいほどよくなります。もしもこの値を満足できない場合にはアナログ入力チャンネルを切り替えるごとにOSGetAD()を2回呼び出してください。
    解決例:
    int OSSetADChannel(int channel)
      {
        int dummy = OSGetAD(GlobalChannel=Channel);
        OSWait(1);
      }

    int OSReadAD()
      {
        return OsGetAD(GlobalChannel);
      }

    無線通信

    無線通信を使う場合には予めソフトウェアーキーを使って初期化する必要があります。
    <I>/REGを順に押して登録コードを設定または確認してください。
     

    EyeBotに設定されている構成状況を調べる方法

    Hrd/HDTを順に押してください。ハードウェアー記述テーブルに設定されているすべての周辺装置を知ることができます。もし12個のサーボが登録されているときには、EyeBotの背面にあるコネクターに12個までのサーボモーターを接続することができます。サーボの特性を変えたいときには、"hdt"ファイルを編集、コンパイル(gcchdt)、転送してください。
    詳細はhttp://robotics.ee.uwa.edu.au/eyebot/ftp/ROBIOS/docs/HDTを参照してください。

    ハードウェアー

    誤ってEyeBotのFlash-ROMを消去した場合

  • EyeBotのFlash-ROMにRoBiOS (Robot Basic Input/Output system)を書き込みます。ソフトウェアーを使って更新も可能です。ハードウェアー記述テーブル(HDT)もまたFlash-ROMに書き込むことができます。ユーザープログラムと同様に、シリアルケーブルを使って新しいHDTやRoBiOSの新しいバージョンを転送することもできます。
     
  • 滅多にありませんが、例えば壊れたRoBiOSを転送すると現在のRoBiOSが壊れてコントローラーを起動できなくなることがあります。そのときには、実行可能な新しいRoBiOSを転送するだけでは修復することはできません。
     
  • この場合には、バックグランド・デバッガー(BDM)を使用しなければなりません。付属のケーブルを使って"BDM"と書かれているEyebotのソケットとパソコンのパラレルポートを接続します。Flash-ROMを書き換える以外に、パソコンを使ってEyebot上のプログラムをデバッグしたり1ステップずつ実行したりすることができます。

  • 注意: 付属ケーブル(MK3以降)には"モトローラ標準BDMケーブル"のように回路はついていません。EyeBotコントローラー自体に回路が組み込まれていますので、そのような回路は必要ありません。
     
  • DOS上でBDMを実行する方法はEyeBotオンライン説明書の中で解説されています。新しいBDMのバージョン群(例えば、1.22)とWebで提供されているFLASH.*プラグインを使用してください。BD32.CFGを編集することでBDMを設定することができます。このファイルにはパソコンの速度に応じた値を設定するようにしてください。プログラムは古く、現在の平均的なパソコンでは値を大きくする必要があります。配布されている説明書の中に設定値の一覧表があります。さらに、プログラム/接続は割込みに対して非常に感度が高いという別の問題もあります。そのため、DOSのリアルモードで実行することを推奨します。

  •  
  • BDMを使ってRoBiOSを再インストールすると、設定されている無線通信用のライセンスコードが消去されます。その場合には、新しい無線キーを取得するために、取扱先にコントローラーのシリアル番号を添えて電子メールで連絡ください。このコードは<I>/REGを順に押すことによって設定できます。

  •  

    電源投入時やリセット時にEyeBoが起動しない場合

    EyeBotとパソコンのシリアル通信接続がうまくいかない場合

    Transhex (Windows)あるいはdl (Unix) でコントローラーを検出しないとき それでも解決しない場合には別のホスト用パソコンを使ってみてください。
     

    EyeBotのBDMとパソコンの接続がうまくいかない場合

    EyeBot無線通信デモがうまくうごかない場合

    EyeBotのLCD画面が見にくい場合

    デモで録音した音が小さい場合

    3A以上のサーボを一緒に駆動する場合

    カメラの画像がちらつく場合

    サーボがジッターを起こす場合

    EyeBotに多くのサーボが接続され一定の負荷が作用しているときにサーボがジッター(ジリジリとした小さな振動)を起こします。

    この問題はサーボモーターの非常に大きな電力消費によって起こっており、次のように解決することができます。:

    1. コントローラー (7.2V)とサーボ (4.8Vまたは6.0V)の電池または電源装置を別々に分けて使います。
    2. コントローラーとサーボの電源スイッチを別々に取り付けます。サーボよりも先にコントローラーの電源スイッチをオンにしてください。
    3. すべてのサーボを同時に初期化すると、周期的に同じ時間間隔(20msごと)に電力が消費されます。これを避けるには、SERVOInit関数を呼出すときに個々のサーボごとに小さな遅延時間(約1ms)を挿入します。一般的にこれによってサーボのトルクが増加します。
    4. すべてのサーボを同時にオフにするためにSERVORelease関数を呼出すときも同様に個々のサーボごとに小さな遅延時間(約1ms)を挿入します。

    EyeBotで12個以上のサーボモーターを駆動できますか?

    EyeBotには全部で16個のサーボを接続することができますが、タイマーやサウンドのような機能を失ってしまいます。したがって、最大で14個というのが妥当な線です。 直接接続できる12個のサーボ用コネクター(TPUチャンネル2〜13)があり、2個の追加のサーボについては、DCモーター用コネクター(モーター A、モーター B)に変換ケーブルを使って接続することができます。サーボ用コネクターにはGND、Vcc、PWM信号の端子があります。追加のサーボを接続する前に、オシロスコープを使ってMotor+端子またはMotor-に必要な信号が出ているかどうかを確認してください。(これはHDT設定ソフトウェアーに依存します)

    注意: 多くのサーボを接続すると結果的に全電流がEyeBotの制限値である3Aを超えるかもしれません。もしその値を超えると、リセット可能なヒューズによってコントローラーが一時的にシャットダウンします。

    重要: もし大電流を消費する多くのサーボを接続する必要がある場合には、EyeBot背面にあるコネクターを使うべきではありません。その代わりに、電源とサーボの端子(Vcc、GND)を別々のケーブルで直接接続し、EyeBotのコネクターにはサーボの信号端子のみを接続してください。

    EyeBotで12個のサーボと2個のDCモーターを同時に使用できますか?

    これはフィードバック用のエンコーダーを使用しない場合についてのみ可能です。 標準的なFaulhaber製モーターのようなエンコーダー付きDCモーターを2個使うと、TPUチャンネルの0〜6が使用され、サーボ用の最初の4つのTPUチャンネルと重なってしまいます。この場合にはサーボ用コネクターの1〜4が使用できなくなります。

    2系統の電源を接続できるようにEyeBotコントローラーを改造する方法(コントローラーとモーターを別電源化)

    1. 主電源からサーボ電源を切り離すために、部品R20(SW1の隣にあるフェライトのチップ)を取り除きます。
    2. R3に近い方のR20の穴にピンを挿入してハンダ付けします。(ピンは基板の裏側から突き出すように差し込みます)
    3. そのピンに新たに追加する電池の正極をハンダ付けします。追加する電池の負極はこれまで使っていた電池の負極に接続します。
    4. 注意: 過剰な電流や回路のショートから保護するために、ヒューズまはたリセット可能なヒューズを装着しなければなりません。


    そのほか一般

    RoBIOSソースコードの入手

  • RoBiosのソースコードは公開していません。よほど低次元のシステムルーチンを書きたいとき以外には、本当にソースコードは必要ありません。



  • Thomas Bräunl 2003