(57)【要約】【構成】ロボット分散制御システム１０は、第１コマンドを発行するホストコントローラ１２と、このホストコントローラ１２にツリー構造で接続された複数の通信コントローラ１８とを含み、通信コントローラ１８は、第１コマンドを解釈して制御パラメータを求めるか、もしくは、第１コマンドに応答してアプリケーションプログラムを実行することによって第２コマンドを発行し、その第２コマンドから制御パラメータを求める。いずれの場合にも、制御パラメータは通信コントローラ１８からモータコントローラ２０へ出力され、モータコントローラ２０が複数のモータ２２を制御する。【効果】ホストコントローラ１２と通信コントローラ１８とで分担してモータ制御することにより、ホストコントローラ１２の負荷を小さくできるとともに、両者間の通信負荷も軽減できる。【選択図】　図１
2004078895.tif 000002
【特許請求の範囲】
【請求項１】
上位コントローラからの第１コマンドを受信する受信手段、
下位コントローラへの制御指令を出力する出力手段、および
プロセッサを備え、さらに
前記プロセッサによって実行可能にアプリケーションプログラムが組み込まれていて、
前記プロセッサは、前記第１コマンドに基づいて、または前記アプリケーションプログラムを用いて、前記制御指令を求める、分散制御用コントローラ。
【請求項２】
前記プロセッサは、前記第１コマンドに応答して前記アプリケーションプログラムを実行することによって、第２コマンドを発行するとともに、前記第１コマンドまたは前記第２コマンドに基づいて前記制御指令を求める、請求項１記載の分散制御用コントローラ。
【請求項３】
前記第１コマンドに基づいて前記アプリケーションプログラムから前記第２コマンドを発行するかどうかを判定するための判定手段をさらに備える、請求項２記載の分散制御用コントローラ。
【請求項４】
第１アプリケーションプログラムを実行して第１コマンドを発行する上位コントローラと、
アクチュエータを駆動する下位コントローラと、
前記上位コントローラからの第１コマンドを受信する受信手段、前記下位コントローラへの制御指令を出力する出力手段、およびプロセッサを備え、さらに前記プロセッサによって実行可能に第２アプリケーションプログラムが組み込まれていて、前記プロセッサは、前記第１コマンドに基づいて、または前記第２アプリケーションプログラムを用いて、前記制御指令を求める、中位コントローラとを備える、分散制御システム。
【請求項５】
第１プロセッサと第１アプリケーションプログラムとを組み込み、外部からの情報または指示により、前記第１アプリケーションプログラムに基づいて第１コマンドを発行する第１コントローラ、
前記第１コントローラに接続され、第２プロセッサと、第２アプリケーションプログラムとを組み込んだ第２コントローラであって、前記第１コマンドに基づき、または前記第２アプリケーションプログラムを用いて制御パラメータを求める１または２以上の第２コントローラ、および
前記第２コントローラに接続され、かつ前記制御パラメータに基づいて複数のアクチュエータを制御する第３コントローラを備える、分散制御システム。
【請求項６】
前記第２コントローラは、前記第１コマンドに応答して前記第２アプリケーションプログラムを実行することによって第２コマンドを発行するととともに、前記第１コマンドまたは第２コマンドに基づいて前記制御パラメータを求める、請求項５記載の分散制御システム。
【請求項７】
前記第２コントローラは、前記第１コマンドに基づき第２アプリケーションプログラムから前記第２コマンドを発行するかどうかを判定するための判定手段をさらに含む、請求項６記載の分散制御システム。
【請求項８】
前記第３コントローラは、前記複数のアクチュエータを含む前記第３コントローラの識別信号を前記第２コントローラに伝達する手段をさらに含む、請求項５ないし７のいずれかに記載の分散制御システム。
【請求項９】
前記第３コントローラのかわりに、情報入力装置を接続した前記第２コントローラを少なくとも１つ含む、請求項５ないし８のいずれかに記載の分散制御システム。
【請求項１０】
第１プロセッサと第１アプリケーションプログラムとを組み込んだ第１コントローラ、前記第１コントローラに接続され、且つ第２プロセッサと第２アプリケーションプログラムとを組み込んだ第２コントローラ、および前記第２コントローラに接続され、かつ複数の駆動装置を制御する第３コントローラとを含む分散制御システムの制御方法であって、
（ａ）前記第１コントローラが、前記第１アプリケーションプログラムに基づいて第１コマンドを発行するステップと、
（ｂ）前記第２コントローラが、前記第１コマンドに基づき、または前記第２アプリケーションプログラムを用いて制御パラメータを求めるステップ、および（ｃ）前記第３コントローラが、複数の前記駆動装置を前記制御パラメータに基づいて駆動するステップとを含む、分散制御方法。
【請求項１１】
前記ステップ（ｂ）において、前記第２コントローラは、前記第１コマンドに応答して前記第２アプリケーションプログラムを実行することによって第２コマンドを発行するとともに、前記第１コマンドまたは第２コマンドに基づいて前記制御パラメータを求める、請求項１０記載の分散制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、分散制御システムおよび分散制御方法に関し、特にたとえばロボットの分散制御システムおよび分散制御方法に関する。
【０００２】
【従来技術】
図１４に示す従来のロボット分散制御システム２では、ホストコントローラ４ａに、ハブ４ｂを介して、複数のモータドライバ４ｃがＵＳＢによって接続されている。また、各モータドライバ４ｃには、モータ６ａが１台ずつ接続されている。さらに、ホストコントローラ４ａには、ハブ４ｂを介して、センサ６ｂを搭載したセンサボード４ｄも接続されている。このロボット分散制御システム２は、ホストコントローラ４ａが各モータドライバ４ｃに対して、モータの制御コマンドを直接発行し、各モータドライバ４ｃは、このモータの制御コマンドを解釈してモータ６ａを駆動することにより、ロボットの動きを制御している。
【０００３】
この図１４の従来技術と同様の従来技術が特許文献１に開示されている。
【０００４】
【特許文献１】
特開２０００−７８８９１［Ｈ０２Ｐ　８／１４，８／００］
【０００５】
【発明が解決しようとする課題】
いずれの従来技術においても、以下のような問題があった。すなわち、各モータは対応するモータドライバを介して、ホストコントローラにより制御される。したがって、各モータを制御するためには、ホストコントローラがすべてのモータの制御プログラムを持たなければならないばかりでなく、各モータのためにモータ制御コマンドが複雑になるので、ホストコントローラの負荷が大きくなる。さらに、各モータドライバにコマンドを送る必要があるので、ホストコントローラと各モータドライバとの間の通信負荷が大きくなる。
【０００６】
それゆえに、この発明の主たる目的は、新規な分散制御システムおよび分散制御方法を提供することである。
この発明の他の目的は、ホストコントローラの負荷を小さくするとともに、通信負荷を小さくできる分散制御システムおよび分散制御方法を提供することである。
【０００７】
【課題を解決するための手段】
第１発明に従った分散制御用コントローラは、上位コントローラからの第１コマンドを受信する受信手段、下位コントローラへの制御指令を出力する出力手段、およびプロセッサを備え、さらにプロセッサによって実行可能にアプリケーションプログラムが組み込まれていて、プロセッサは、第１コマンドに基づいて、またはアプリケーションプログラムを用いて、制御指令を求める。
【０００８】
このとき、プロセッサは、第１コマンドに応答してアプリケーションプログラムを実行することによって、第２コマンドを発行するとともに、第１コマンドまたは第２コマンドに基づいて制御指令を求める、ようにしてもよい。
ただし、判定手段を設け、この判定手段によって第１コマンドに基づいてアプリケーションプログラムから第２コマンドを発行するかどうかを判定する、ようにしてもよい。
【０００９】
第２発明に従った分散制御システムは、第１アプリケーションプログラムを実行して第１コマンドを発行する上位コントローラと、アクチュエータを駆動する下位コントローラと、上位コントローラからの第１コマンドを受信する受信手段、下位コントローラへの制御指令を出力する出力手段、およびプロセッサを備え、さらにプロセッサによって実行可能に第２アプリケーションプログラムが組み込まれていて、プロセッサは、第１コマンドに基づいて、または第２アプリケーションプログラムを用いて、制御指令を求める、中位コントローラとを備える。
【００１０】
第３発明に従った分散制御システムは、第１プロセッサと第１アプリケーションプログラムとを組み込み、外部からの情報または指示により、第１アプリケーションプログラムに基づいて第１コマンドを発行する第１コントローラ、第１コントローラに接続され、第２プロセッサと、第２アプリケーションプログラムとを組み込んだ第２コントローラであって、第１コマンドに基づき、または第２アプリケーションプログラムを用いて制御パラメータを求める１または２以上の第２コントローラ、および第２コントローラに接続され、かつ制御パラメータに基づいて複数のアクチュエータを制御する第３コントローラを備える。
【００１１】
このとき、第２コントローラは、第１コマンドに応答して第２アプリケーションプログラムを実行することによって第２コマンドを発行するととともに、第１コマンドまたは第２コマンドに基づいて制御パラメータを求める、ようにしてもよい。
【００１２】
また、第２コントローラに、第１コマンドに基づき第２アプリケーションプログラムから第２コマンドを発行するかどうかを判定するための判定手段をさらに設けてもよい。
【００１３】
第３コントローラに、複数のアクチュエータを含む第３コントローラの識別信号を第２コントローラに伝達する手段をさらに設けてもよい。
また、第３コントローラのかわりに、情報入力装置を接続した第２コントローラを少なくとも１つ設けてもよい。
【００１４】
第４発明に従った分散制御方法は、第１プロセッサと第１アプリケーションプログラムとを組み込んだ第１コントローラ、第１コントローラに接続され、且つ第２プロセッサと第２アプリケーションプログラムとを組み込んだ第２コントローラ、および第２コントローラに接続され、かつ複数の駆動装置を制御する第３コントローラとを含む分散制御システムに適用され、（ａ）第１コントローラが、第１アプリケーションプログラムに基づいて第１コマンドを発行するステップ、（ｂ）第２コントローラが、第１コマンドに基づき、または第２アプリケーションプログラムを用いて制御パラメータを求めるステップ、および（ｃ）第３コントローラが、複数の駆動装置を制御パラメータに基づいて駆動するステップを含む。
【００１５】
この場合も、ステップ（ｂ）において、第２コントローラは、第１コマンドに応答して第２アプリケーションプログラムを実行することによって第２コマンドを発行するとともに、第１コマンドまたは第２コマンドに基づいて制御パラメータを求める、ようにしてもよい。
【００１６】
【作用】
第１発明に従った分散制御用コントローラは、実施例でいえば通信コントローラに相当し、実施例でいえばホストコントローラに該当する上位コントローラからの第１コマンドを受信する。実施例の判定プログラムである判定手段を設け、この判定手段によって、第１コマンドを解釈して直接制御指令を出すか、または第１コマンドに基づいてアプリケーションプログラムから第２コマンドを発行するか、を判断する。第２コマンドを発行した場合には、その第２コマンドに基づいて制御指令を求める。そして、いずれかの方法で求めた制御指令が、モータのようなアクチュエータを制御する下位コントローラに与えられる。
【００１７】
第２発明に従った分散制御システムでは、上位コントローラ（実施例のホストコントローラ）が第１アプリケーションプログラムを実行して第１コマンドを発行する。この第１コマンドが中位コントローラ（実施例の通信コントローラ）に与えられる。中位コントローラでは、プロセッサは、上述の方法と同様にして、第１コマンドから制御指令を求めるか、または第１コマンドから第２コマンドを発行し、その第２コマンドから制御指令を求める。制御指令は、アクチュエータを駆動するために下位コントローラへ与えられる。
【００１８】
第３発明に従った分散制御システムでは、実施例のホストコントローラ、通信コントローラ、およびモータコントローラにそれぞれ該当する第１コントローラ、第２コントローラ、および第３コントローラが用いられる。第１コントローラは、外部からの情報または指示に応答して、第１アプリケーションプログラムに基づいて第１コマンドを発行する。上述と同様にして、第２コントローラが制御パラメータを求め、その制御パラメータが第３コントローラに与えられる。
【００１９】
第４発明に従った分散制御方法では、ステップ（ａ）で、第１コントローラが、第１アプリケーションプログラムに基づいて第１コマンドを発行し、ステップ（ｂ）で、第２コントローラが、第１コマンドに基づき、または第２アプリケーションプログラムを用いて制御パラメータを求める。そしてステップ（ｃ）で、第３コントローラが、複数のアクチュエータを制御パラメータに基づいて駆動する。
【００２０】
このように、従来システムでホストコントローラに組み込まれていたアプリケーションプログラムの一部を、中位（第２）コントローラに移動して、上位（第１）コントローラと中位（第２）コントローラとで複数のアクチュエータを分散制御するので、上位（第１）コントローラの負荷を軽減できるだけでなく、両者間の通信負荷を小さくできる。
【００２１】
【発明の効果】
この発明によれば、上位（第１）コントローラの負荷を小さくできるとともに、上位（第１）コントローラと中位（第２）コントローラとの間の通信データ量を削減できるので、たとえば引き回しが楽な２線式シリアル通信によっても両者間で高速通信が可能となる。
【００２２】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【００２３】
【実施例】
図１を参照して、この実施例のロボット分散制御システム１０は、１台のホストコントローラ１２を含み、このホストコントローラ１２を親とするツリー構造となるように、複数のモーションコントローラ１４がハブ１６を介して、ＵＳＢによりホストコントローラ１２に接続されている。各モーションコントローラ１４は通信コントローラ１８とモータコントローラ２０とを含み、それらはコネクタで接続されている。また、各モータコントローラ２０にはロボットの各軸の動きを制御する複数のモータ２２が接続され、これらのモータ２２は通信コントローラ１８により互いに独立に、または互いに協調して動くように駆動され得る。
【００２４】
このような階層構造において、ホストコントローラ１２が上位または第１のコントローラとして、通信コントローラ１８が中位または第２のコントローラとして、そしてモータコントローラ２０が下位または第３のコントローラとしてそれぞれ機能する。ただし、この実施例ではアクチュエータとしてモータ２２を用いたが、分散制御されるべきアクチュエータとしては、このようなモータの他、電磁ソレノイド、ポンプなど任意の被制御装置が考えられる。
【００２５】
また、ハブ１６には、通信コントローラ１８を介して、センサ２６を搭載したセンサボード２４などの各種ドータボードも接続されている。
【００２６】
まず、ホストコントローラ１２について説明する。このホストコントローラ１２は、汎用プロセッサ（図示しない）を搭載し、１または２以上のアプリケーションプログラム２８とモーションコントロールデバイスクラスドライバ（以下、「ＭＣＤクラスドライバ」という）３０とが組み込まれている。ＭＣＤクラスドライバ３０には、モーションコントローラ１４を制御するための各種コマンドと、ロボット外部との情報をやり取りするためのインタフェースライブラリが組み込まれている。また、アプリケーションプログラム２８は、ロボット全体の動作を管理するとともに、機能別に分散されたモーションコントローラ１４毎の動作をインタフェースライブラリを介して制御している。
【００２７】
また、ステレオカメラ３２からの画像を処理する画像処理専用ＰＣ（Ｐｅｒｓｏｎａｌ　Ｃｏｍｐｕｔｅｒ）３４とマイク３６からの音声を処理する音声処理専用ＰＣ４０とが、ハブ４２を介して、イーサネット（商品名）によりホストコントローラ１２に接続されている。ホストコントローラ１２は、障害物などの画像認識結果や音声認識結果をイベントとして受け取り、以下に詳しく説明するモーションコントローラ１４と情報をやり取りすることにより、ロボットの起動や停止などを制御する。
【００２８】
なお、画像処理ＰＣ３４に接続されたモニタ４４によって処理画像を確認でき、また音声処理ＰＣ４０にはスピーカ３８も接続されているので、ロボットから音を出すことができる。また、ホストコントローラ１２は、ハブ４２を介して、無線ＬＡＮ４６によりロボット外部のネットワークに接続されている。
【００２９】
次に、モーションコントローラ１４を構成する通信コントローラ１８について説明する。通信コントローラ１８は、高性能のプロセッサ５８（図２）を搭載しているので、従来ホストコントローラ１２のみに組み込まれていた複数のアプリケーションプログラム２８の一部を通信コントローラ１８に組み込むことによって、ホストコントローラ１２が果たす機能の一部を分担している。
【００３０】
つまり、通信コントローラ１８すなわち汎用プロセッサ５８は、ホストコントローラ１２からのコマンドを解釈して制御パラメータを求めるだけではなく、通信コントローラ１８自身に組み込まれているアプリケーションプログラム４８を使用してコマンドを発行し、制御パラメータを求めることができる。なお、アプリケーションプログラム４８を使用するかどうかを判定するための判定プログラム４９、コマンドを解釈して制御パラメータを求めるために使用するモーション制御プログラム５０も、あらかじめ通信コントローラ１８のメモリ（たとえば図２のフラッシュメモリ５６）内に組み込まれている。
【００３１】
この汎用プロセッサ５８（図２）およびアプリケーションプログラム４８により、各モータ２２を互いに独立にあるいは互いに協調して駆動することができる。なお、ホストコントローラ１２に接続可能な通信コントローラ１８の台数は、ハブ１６の通信プロトコルによって決まり、この実施例では８台まで接続できる。
【００３２】
次に、通信コントローラ１８とともにモーションコントローラ１４を構成するモータコントローラ２０について説明する。モータコントローラ２０は通信コントローラ１８に１台ずつ接続されており、汎用プロセッサ６２（図２）およびモータドライバ６８（図２）を搭載している。このモータドライバ６８（図２）には、複数のモータ２２が接続されており、これらのモータ２２は通信コントローラ１８からの制御パラメータに基づいて求められた制御コマンドによって駆動される。
【００３３】
なお、ホストコントローラ１２または通信コントローラ１８が、各モータコントローラ２０を識別できるように、モータコントローラ２０ごとにＩＤ（識別番号）を登録することができる。
【００３４】
さらに、通信コントローラ１８には、センサ２６が搭載されたセンサボード２４などの各種ドータボードも接続できる。したがって、画像処理ＰＣ３４による画像処理結果や音声処理ＰＣ４０による音声処理結果だけではなく、任意のセンサ入力をホストコントローラ１２を介さずに、通信コントローラ１８にイベントとして直接入力することができる。
【００３５】
ただし、センサボード２４は通信コントローラ１８へ情報を入力する情報入力装置として機能するが、このような情報入力装置としては、他に、カメラ（画像入力装置）やマイク（音声入力装置）なども利用可能であり、いずれの場合にも、モータコントローラ２０に代えて通信コントローラ１８とコネクタ接続することによって、モーションコントローラ１４中に組み込むことができる。
【００３６】
このように、ロボット分散制御システム１０の複数のアプリケーションプログラム２８のうちの一部をホストコントローラ１２から通信コントローラ１８に移動させることによって、ホストコントローラ１２と通信コントローラ１８にモータ２２の制御を分担して行わせることができる。したがって、ホストコントローラ１２が発行するコマンドの数を減らすことができるので、ホストコントローラ１２の負荷を軽減できるとともに、ホストコントローラ１２と通信コントローラ１８との間の通信データ量を削減できるので、通信負荷を小さくすることができる。したがって、引き回しが楽な２線式シリアル通信によっても、高速通信が可能である。このため、通信コントローラ１８に組み込むアプリケーションプログラム４８が短い周期でモータ２２の制御パラメータを変更しなければならないプログラムであっても、十分に対応できる。
【００３７】
また、通信コントローラ１８とモータコントローラ２０とはコネクタで接続されているので、モータ２２ごとモータコントローラ２０を他のモータコントローラ２０に組替えて接続することができ、モータ２２ごとモーションコントローラ１４を他のモーションコントローラ１４と交換することもできる。すなわち、ホストコントローラ１２とモーションコントローラ１４が分散制御を行なっているので、モータ２２の交換は、対応するアプリケーションプログラムをホストコントローラ１２が持っている場合は、モーションコントローラ１４ごとに、また対応するアプリケーションプログラムを通信コントローラ１８が持っている場合は、モータコントローラ２０ごとに行うことができる。このため、ロボット分散制御システム１０の構成も任意かつ容易に変更することができる。
【００３８】
なお、通信コントローラ１８とモータコントローラ２０とをコネクタ接続することによって、両者は、図２に示すように、アドレスバス１９Ａとデータバス１９Ｄとによって、互いにデータ授受が可能とされている。
【００３９】
次に、図２および図３を参照して、モーションコントローラ１４での処理について説明する。
【００４０】
まず、ホストコントローラ１２は、先に説明したように、汎用プロセッサ（図示せず）を有し、この汎用プロセッサによってアプリケーションプログラム（第１アプリケーションプログラム）を実行する。そして、通信コントローラ１８は、ＵＳＢコントローラ５２を介して、ホストコントローラ１２から送られてくる図４に示すようなコマンドを第１コマンドとして受け取る。このコマンドの先頭にはたとえば２バイト識別コードが付与されていて、その識別コードに後続して、任意バイト数の引数が設定される。
【００４１】
通信コントローラ１８では、予め、汎用プロセッサ５８が、フラッシュメモリ（２ＭＢ）５６に組み込まれた判定プログラム４９，モーション制御プログラム５０およびアプリケーションプログラム４８をＳＤＲＡＭ（８ＭＢ）５４上に展開し、起動している。
【００４２】
ＵＳＢコントローラ５２を介して、通信コントローラ１８がホストコントローラ１２から送られてくる第１コマンドを受け取ると、汎用プロセッサ５８は判定プログラム４９を使用してコマンドに含まれる識別コードを判定し、判定結果に応じてコマンドを直接モーション制御プログラム５０に受け渡すか、或いはアプリケーションプログラム４８に受け渡すかの処理を行う。
【００４３】
たとえば、ホストコントローラ１２は、モーションコントローラ１４に対して「ＸＸ　ｎ１　ｎ２　ｎ３　ｎ４」というコマンドを発行する。ここで、「ＸＸ」が識別コードであり、たとえばモータの回転絶対位置制御を行う場合には、「３５」という識別コードが割り付けられる。また、たとえば２つのモータを組合せた２輪駆動移動台車の位置制御を行う場合には、「８０」という識別コードが割り付けられる。
【００４４】
識別コードに続く「ｎ１　ｎ２　ｎ３　ｎ４」の部分は引数であり、たとえばモータの回転絶対位置制御を行う場合には、制御可能な４つのモータの回転絶対位置を、順番に「−２１４７４８３６４７」から「２１４７４８３６４７」の範囲の４バイトデータで示している。引数の単位はモータに接続されているエンコーダカウンタのパルス数である。また、ｎ１　ｎ２　ｎ３　ｎ４＝「−２１４７４８３６４８」は「Ｄｏｎ’ｔ　Ｃａｒｅ」を表し、該当軸には、このコマンドを適用しない。また、２つのモータを組合せた２輪駆動移動台車の位置制御を行う場合には、一例として、ｎ１は移動台車の移動量を、ｎ２は移動中の最高速度を、ｎ３は最高速度までの加速度を、ｎ４は停止するまでの減速度を表す。
【００４５】
判定プログラム４９は、コマンドに含まれる識別コードを識別し、このコマンドを次にモーション制御プログラム５０に渡すか、アプリケーションプログラム４８に渡すかの判定を行う。具体的には、汎用プロセッサ５８は、識別コードテーブル（図示せず）を内蔵していて、このテーブルに、各識別コード毎に、該当のコマンドがどのように処理されるべきかを予め登録している。したがって、判定プログラム４９は、この識別コードテーブルを利用して、ホストコントローラ（上位コントローラ）１２からのコマンド（第１コマンド）をどのプログラムに渡すかを判定する。
【００４６】
たとえば、識別コードが「３５」の場合、判定プログラム４９を実行することによって、汎用プロセッサ５８はコマンドがモータ個別の制御コマンドであると判定し、その第１コマンドをモーション制御プログラム５０に受け渡す。コマンドを受け取ったモーション制御プログラム５０は、第１コマンドを解釈し、引数の値を適切なモータ制御パラメータとして求め、モータコントローラ２０に送る。
【００４７】
また、識別コードが「８０」の場合、判定プログラム４９を実行することによって、汎用プロセッサ５８は、コマンドが複数モータによる協調コマンドであると判定し、アプリケーションプログラム４８に受け渡す。判定プログラム４９の判定結果に応じて第１コマンドを受け取ったアプリケーションプログラム４８は、第１コマンドを解釈し、各モータ軸に対する個別のコマンド（第２コマンド）を発行し、すでにＳＤＲＡＭ（８ＭＢ）５４上に展開されているモーション制御プログラム５０へ送る。第２コマンドを受け取ったモーション制御プログラム５０は、第２コマンドを解釈し、引数の値を適切なモータ制御パラメータとして求め、モータコントローラ２０に送る。
【００４８】
そして、モータコントローラ２０には図５に示すような共有メモリ６０が設けられていて、この共有メモリ６０には、各モータ番号毎に、は指令値およびフィードバック値が書き込まれる。指令値は、上記引数のパルス数である。フィードバック値は、指令値に従ってモータが実際に駆動されているときのパルス数である。したがって、フィードバック値が指令値に等しくなったとき、そのモータの制御は完了したと判断する。
【００４９】
このように、モーションコントローラ１４に含まれる通信コントローラ１８は、上位コントローラすなわちホストコントローラ１２からの第１コマンドを受け取り、その第１コマンドをモーション制御プログラム５０に渡す。モーション制御プログラム５０はその第１コマンドを解釈して下位コントローラすなわちモータコントローラ２０へその第１コマンドに応じた制御指令（制御パラメータ）を与える。あるいは、通信コントローラ１８は、上位コントローラすなわちホストコントローラ１２からの第１コマンドを受け取り、アプリケーションプログラム（第２アプリケーションプログラム）を実行することによって、その第１コマンドに応じた第２コマンドを発行し、その第２コマンドをモーション制御プログラム５０に渡す。モーション制御プログラム５０は第２コマンドを解釈して下位コントローラすなわちモータコントローラ２０へ制御指令（制御パラメータ）を与える。
【００５０】
ただし、第１コマンドをモーション制御プログラム５０に渡すか、アプリケーションプログラム４８に渡すかの判定は、上述のように、判定プログラム４９に基づき、汎用プロセッサ５８が判断する。
【００５１】
なお、この場合、図６に示すように、アプリケーションプログラム４８では、モータ個別の制御コマンドとして、モーション制御プログラム５０ヘ第２コマンド（図３）を発行せずに、直接、アプリケーションプログラム４８内でモータ制御パラメータを求め、それをモータコントローラ２０に送るようにしてもよい。
【００５２】
また、この汎用プロセッサ５８は、センサボード２４に搭載されているセンサ２６入力を、ホストコントローラ１２を介さずに直接受け付けるので、ホストコントローラ１２の負担を軽減することができる。
【００５３】
次に、モータコントローラ２０での処理について説明する。通信コントローラ１８から送られてくるモータ制御パラメータは、共有メモリ６０であるデュアルポートＲＡＭ（２ＭＢ）を介して、汎用プロセッサ６２に受け渡される。つまり、図５に示すように、共有メモリ６０に指令値が書き込まれる。また、モータを制御するためのモータ制御ライブラリはＲＯＭ（２５６ＫＢ）６６に格納されている。したがって、汎用プロセッサ６２はモータ制御パラメータに対応するモータ制御コマンドをモータ制御ライブラリから選択して、モータドライバ６８に送り、モータ２２を駆動する。
【００５４】
また、ディップ（ＤＩＰ）スイッチ７０によって、モータコントローラ２０ごとに、メカニカルＩＤ情報をあらかじめ設定しておくことができ、そのメカニカルＩＤ情報は通信コントローラ１８の汎用プロセッサ５８に伝達される。汎用プロセッサ５８はこのメカニカルＩＤ情報に基づき、ホストコントローラ１２のアプリケーションプログラム２８または通信コントローラ１８のアプリケーションプログラム４８を起動する。ここで、メカニカルＩＤ情報は、モータコントローラ２０に与えられる。
【００５５】
さらに、モータドライバ６８には、モータ２２の回転数の相対値を測定できるエンコーダ７２や、絶対値を測定できるポテンショメータ７４が連結されている。これらの測定結果は汎用プロセッサ６２にフィードバックされる。そして、図５に示すように、共有メモリ６０にフィードバック値が書き込まれる。このため、汎用プロセッサ６２は、モータ２２がモータ制御コマンドどおりに回転しているか否かを確認し、またモータ２２の駆動を終了すべきか否か判断する。
【００５６】
次に、図７に示す２輪倒立型搬送ロボット（以下、単に「ロボット」ということがある）７６を用いて、搬送物を安定に載せた状態で目的地まで運搬する場合について説明する。
【００５７】
まず、図７を参照して、２輪倒立型搬送ロボット７６について説明する。このロボット７６は２輪で倒立しながら、ロボット７６の姿勢にかかわらず、テーブル８８を水平に維持して搬送物を安定に載せた状態で搬送する。このロボット７６は、板状の台車７８を含み、この台車７８の下部には車輪８０が２輪取付けられており、それらの車輪の間には、各車輪を独立に駆動するモータ２２がギアボックス８２の中に設けられている。また、台車７８の上には車両本体８４が設けられ、さらにその上にはテーブル支持部８６を介して円盤状のテーブル８８が取付けられている。
【００５８】
このロボット７６の姿勢にかかわらず、テーブル８８を水平に維持するためには、テーブル支持部８６を傾けることによりテーブル８８の角度を調整しなければならない。このテーブル支持部８６の傾きは、それに垂直な２方向の軸（Ｘ軸、Ｙ軸）をモータ２２で回転駆動することにより調整する。以上説明したように、このロボット７６は車輪８０の駆動のための２軸とテーブル８８の水平維持のための２軸の合計４軸のモータ２２で制御して、テーブルを水平に維持しながら移動する。
【００５９】
このロボット７６が、図８に示すように進行方向に傾いている場合には、テーブル８８も前に傾くので、モータ２２によりＹ軸を回転駆動して、テーブル支持部８６を進行方向と反対の方向に傾くように調整することにより、テーブル８８を水平に維持する。また、このロボット７６が、図９に示すように進行方向に向かって右に傾いている場合には、テーブル８８も同様に傾くので、モータ２２によりＹ軸に直行するＸ軸を回転駆動して、テーブル支持部８６を左に傾くように調整することによりテーブルを水平に維持する。また、ロボット７６が任意の方向に傾いている場合には、同様にＸ軸およびＹ軸を回転駆動することにより、テーブル８８を水平に維持する。
【００６０】
次に、このロボット７６がテーブル８８を水平に維持しながら所定の方向に移動する場合について、ホストコントローラからモータコントローラまでの各階層ごとの動作を、フロー図を用いて説明する。この実施例では、ロボット７６の移動制御（倒立制御）はホストコントローラ１２が行ない、テーブル８８の水平維持制御は通信コントローラ１８が行なう。
【００６１】
まず、図１０のフロー図を参照して、ホストコントローラ１２での移動制御について説明する。
【００６２】
まず、ステップＳ１で、ロボット７６が搬送物を有しているか否かを判断する。ここで、搬送物があるか否かは、たとえばロボット７６のセンサボード２４に搭載された重量センサ２６、あるいは画像処理ＰＣ３４などの他のＰＣからの情報により判断する。
【００６３】
そして、搬送物がある場合には、ステップＳ３で水平維持コマンドを通信コントローラ１８に対して発行する。この水平維持コマンドが発行されれば、以後、通信コントローラ１８がホストコントローラ１２とは独立して水平維持制御を行なう。
【００６４】
次に、ステップＳ５で、音声処理ＰＣ４０によって処理された音声指示により、ロボット７６に対して移動開始のトリガがかかったか否かを判断する。他のトリガの例として、たとえばユーザーインターフェースを介して、ロボット７６の外部からの人の指示などがある。
【００６５】
ステップＳ７では、画像処理ＰＣ３４の環境認識結果に基づいて、アプリケーションプログラム２８により、ロボット７６が移動する距離、方向、速度などの移動パラメータを算出する。あるいは、ユーザーインターフェースを介して、ロボット７６の外部から人が直接これらのパラメータを与えてもよい。
【００６６】
ステップＳ９では、ステップＳ７で求めた移動パラメータをアプリケーションプログラム２８によってモーションコントローラ１４に対し移動コマンドとして発行する。
【００６７】
ステップＳ１１では、ロボット７６の移動が完了したか否かを判断し、移動が完了していない場合は、再びステップＳ７で移動パラメータを算出し、移動コマンドを発行する。また、移動が完了した場合はホストコントローラ１２での処理を終了する。なお、移動が完了したか否かの判断は、画像処理ＰＣ３４からの画像認識結果などに基づいて行なわれる。
【００６８】
次に、図１１のフロー図を参照して、通信コントローラ１８でのロボット７６の移動制御について説明する。
【００６９】
まず、ステップＳ１３で、ホストコントローラ１２から通信コントローラ１８に対して移動コマンドが発行されたか否かを判断する。この移動コマンドはＵＳＢの通信割込みによって送信されてくる。
【００７０】
次に、ステップＳ１５では、モーション制御プログラム５０に基づいてホストコントローラ１２からの移動コマンドを解析する。つまり、距離、方向、速度などの移動パラメータからモータ２２の回転方向、速度、回転量などのモータ制御パラメータを求める。
【００７１】
ステップＳ１７で、ステップＳ１５で求めたモータ制御パラメータをモータコントローラ２０に指示する。
【００７２】
ステップＳ１９では、ホストコントローラ１２から移動停止の指示がない限り、ステップＳ１３にもどり、ホストコントローラ１２からの移動コマンドを待つ。
【００７３】
次に、図１２のフロー図を参照して、モータコントローラ２０での移動制御について説明する。
【００７４】
まず、ステップＳ２１では、ステップＳ１７により通信コントローラ１８から送られてくる、モータ２２の回転方向、速度、回転量などのモータ制御パラメータが更新されたものであるか否かを判断する。
【００７５】
そして、更新されていれば、ステップＳ２３で、更新されたモータ制御パラメータに基づいて、モータ制御コマンドをモータドライバ６８に対して発行することによりモータ２２を駆動する。
【００７６】
ステップＳ２５では、モータ２２がモータ制御パラメータで指定された回転方向、速度、回転量で回転したかどうかを、エンコーダ７２、またはポテンショメータ７４の測定値に基づき確認する。その結果、モータ２２の回転が完了していない場合は、再びステップＳ２３に戻ってモータ２２の駆動を継続し、回転が完了している場合はモータ２２の駆動を終了する。
【００７７】
上述のホストコントローラ１２からモータコントローラ２０までの処理により、ロボット７６の移動を制御することができる。
【００７８】
次に、図１３のフロー図を参照して、モーションコントローラ１４による水平維持制御について説明する。
【００７９】
まず、ステップＳ２７では、ステップＳ３でホストコントローラ１２により水平維持コマンドが発行されたか否かを確認する。
【００８０】
そして、水平維持コマンドが発行された場合は、ステップＳ２９でロボット７６のテーブル８８が水平か否かを判断する。この判断は、通信コントローラ１８に接続されたセンサボード２４に搭載されているジャイロセンサや傾斜センサなどのセンサ２６の測定値を汎用プロセッサ５８に直接入力し、汎用プロセッサ５８が入力された測定値に基づいて行なう。
【００８１】
次に、テーブル８８が水平でない場合、ステップＳ３１で、通信コントローラ１８のフラッシュメモリ５６に組み込まれたアプリケーションプログラム４８を使用して、テーブル８８の傾き角度、傾き方向などの水平維持パラメータを計算し、さらのモーション制御プログラム５０に基づき、テーブル支持部８６の傾きを制御するＸ軸、Ｙ軸を回転駆動するモータ２２の回転方向、速度、回転量などのモータ制御パラメータを求めて、モータコントローラ２０に指示する。
【００８２】
ステップＳ３３で、モータコントローラ２２は通信コントローラ１８から送られてくるモータ制御パラメータに基づき、モータ２２を駆動してロボット７６のテーブル支持部８６の傾きを調整するＸ軸またはＹ軸を回転させることにより、テーブル８８を水平に維持する。
【００８３】
次に、ステップＳ３５でロボット７６のテーブル８８の水平維持制御を停止するか否かを判断し、水平維持制御を継続する場合は、再びステップＳ２９でテーブル８８が水平か否かを判断する処理に戻り、停止する場合は水平維持の動作を終了する。なお、水平維持制御の停止指示は画像処理ＰＣ３４などからの搬送物に関する情報がホストコントローラ１２に伝えられ、その情報に基づきホストコントローラ１２が通信コントローラ１８に対して水平維持制御を停止する割り込みコマンドを発効することによって行なわれる。
【００８４】
上述の通信コントローラ１８とモータコントローラ２０での処理により、テーブル８８の水平維持を制御することができる。
【図面の簡単な説明】
【図１】図１はこの発明の一実施例であるロボット分散制御システムを示すブロック図である。
【図２】図２は図１実施例のモーションコントローラを示すブロック図である。
【図３】図３は図１および図２に示す実施例の動作の一例を示すフロー図である。
【図４】図４はコマンドフォーマットの一例を示す図解図である。
【図５】図５は図２に示す実施例のモータコントローラに含まれる共有メモリの一例を示す図解図である。
【図６】図６は図１および図２に示す実施例の動作の他の例を示すフロー図である。
【図７】図７は２輪倒立型搬送ロボットを示す斜視図である。
【図８】図８は２輪倒立型搬送ロボットが進行方向に傾いて移動している場合の図解図である。
【図９】図９は２輪倒立型搬送ロボットが進行方向に向かって右に傾きながら移動している場合の図解図である。
【図１０】図１０はホストコントローラにおける移動制御を示すフロー図である。
【図１１】図１１は通信コントローラにおける移動制御を示すフロー図である。
【図１２】図１２はモータコントローラにおける移動制御を示すフロー図である。
【図１３】図１３は通信コントローラおよびモータコントローラにおけるテーブルの水平維持制御を示すフロー図である。
【図１４】図１４は従来のロボット分散処理システムを示すブロック図である。
【符号の説明】
１０…分散処理システム
１２…ホストコントローラ
１４…モーションコントローラ
１８…通信コントローラ
２０…モーションコントローラ
２２…モータ
２４…センサボード
２６…センサ
２８，４８…アプリケーションプログラム
４９…判定プログラム
５０…モーション制御プログラム
５８，６２…汎用プロセッサ
６８…モータドライバ
７０…ディップスイッチ
７６…ロボット
８０…車輪
８６…テーブル支持部
８８…テーブル
【図１】
2004078895.tif 000003
【図２】
2004078895.tif 000004
【図３】
2004078895.tif 000005
【図４】
2004078895.tif 000006
【図５】
2004078895.tif 000007
【図６】
2004078895.tif 000008
【図７】
2004078895.tif 000009
【図８】
2004078895.tif 000010
【図９】
2004078895.tif 000011
【図１０】
2004078895.tif 000012
【図１１】
2004078895.tif 000013
【図１２】
2004078895.tif 000014
【図１３】
2004078895.tif 000015
【図１４】
2004078895.tif 000016