(57)【特許請求の範囲】
【請求項１】
ホストコンピュータと、ロボット制御装置とを含み、
前記ホストコンピュータは、
ロボットの動作に関わる少なくとも１つの動作軸を含む制御単位である制御グループに行わせる動作の命令を前記制御グループごとに作成し、複数の前記制御グループが並行して行う動作間の同期に関する種別を示すタスク番号を当該命令に付加して前記ロボット制御装置へ出力し、
前記ロボット制御装置は、
前記制御グループごとに設けられるキューと、
前記制御グループそれぞれに対する前記命令を前記ホストコンピュータから取得し、前記キューの末端から１つずつ格納する格納部と、
所定の運転要求を受け付けた場合に、前記制御グループそれぞれに対する前記命令を前記キューの先頭から１つずつ同時に取り出し、該命令に基づく動作を前記制御グループすべてで同時に開始させる実行制御部と
を備え、
前記格納部は、
前記命令を格納するタイミングにおいて対応する前記命令が存在しない前記制御グループがある場合に、該制御グループに対する前記命令として無操作命令を格納し、
前記実行制御部は、
取り出した前記命令が前記無操作命令である場合に、該無操作命令に対応する前記制御グループを次に前記命令を取り出すまで動作させない制御を行い、
複数の前記制御グループによって並行して行わせる動作の各前記命令に付加された前記タスク番号が同一である場合には、当該複数の制御グループによる各動作を同期させる制御を行い、
複数の前記制御グループによって並行して行わせる動作の各前記命令に付加された前記タスク番号が異なる場合には、当該複数の制御グループによる各動作を非同期させる制御を行う
ことを特徴とするロボットシステム。
【請求項２】
前記実行制御部は、
前記タスク番号が同一である前記命令に基づく動作それぞれを、該命令に対応する前記制御グループの間で同時に終了させること
を特徴とする請求項１に記載のロボットシステム。
【請求項３】
前記実行制御部は、
前記タスク番号が異なる前記命令に基づく動作それぞれを、該命令に対応する前記制御グループの間で同時に終了させる制御を行わないこと
を特徴とする請求項２に記載のロボットシステム。
【請求項４】
前記キューの内容を表示装置へ表示させる表示制御部
をさらに備えることを特徴とする請求項１、２または３に記載のロボットシステム。
【請求項５】
前記表示制御部は、
少なくとも前記格納部によって前記キューへ格納された前記命令を前記表示装置へ表示させること
を特徴とする請求項４に記載のロボットシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の実施形態は、ロボットシステムに関する。
【背景技術】
【０００２】
従来、複数のロボットと相互通信可能に接続され、これら複数のロボットそれぞれの動作を個別に制御するロボット制御装置が知られている（たとえば、特許文献１参照）。
【０００３】
かかるロボット制御装置は、たとえば、ロボットごとに割り当てられた先入れ先出し方式のバッファを有しており、かかるバッファそれぞれへ格納された各ロボットへの命令を逐次読み出して実行することによって、各ロボットを並行に動作させることができる。
【０００４】
また、ロボット制御装置は、その制御対象に、ロボットだけでなくロボットの周辺機器等をも含むことができる。かかる場合、ロボット制御装置は、ロボットおよびその周辺機器を１つの制御単位（以下、「制御グループ」と記載する）として取り扱い、かかる制御グループごとに動作を制御する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平３−１８２９０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のロボット制御装置およびそれを備えるロボットシステムは、各制御グループの同期精度が不十分であり、各制御グループを同期させて協調動作させるうえで更なる改善の余地がある。
【０００７】
実施形態の一態様は、上記に鑑みてなされたものであって、複数の制御グループを精度よく同期させて協調動作させることができるロボット制御装置およびロボットシステムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態の一態様に係るロボット制御装置は、キューと、格納部と、実行制御部とを備える。前記キューは、ロボットの動作に関わる少なくとも１つの動作軸を含む制御単位である制御グループごとに設けられる。前記格納部は、前記制御グループそれぞれに対する命令を前記キューの末端から１つずつ格納する。前記実行制御部は、所定の運転要求を受け付けた場合に、前記制御グループそれぞれに対する前記命令を前記キューの先頭から１つずつ同時に取り出し、該命令に基づく動作を前記制御グループすべてで同時に開始させる。また、前記格納部は、前記命令を格納するタイミングにおいて対応する前記命令が存在しない前記制御グループがある場合に、該制御グループに対する前記命令として無操作命令を格納する。また、前記実行制御部は、取り出した前記命令が前記無操作命令である場合に、該無操作命令に対応する前記制御グループを次に前記命令を取り出すまで動作させない。
【発明の効果】
【０００９】
実施形態の一態様によれば、複数の制御グループを精度よく同期させて協調動作させることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施形態に係るロボットシステムの全体構成の一例を示す図である。
【図２】図２は、実施形態に係るロボット制御装置の構成を示すブロック図である。
【図３Ａ】図３Ａは、バッファの構成の詳細を示す模式図（その１）である。
【図３Ｂ】図３Ｂは、バッファの構成の詳細を示す模式図（その２）である。
【図４Ａ】図４Ａは、命令の格納パターンの一例を示す図（その１）である。
【図４Ｂ】図４Ｂは、実行制御部による実行制御の一例を示す図（その１）である。
【図５Ａ】図５Ａは、命令の格納パターンの一例を示す図（その２）である。
【図５Ｂ】図５Ｂは、実行制御部による実行制御の一例を示す図（その２）である。
【図６Ａ】図６Ａは、命令の格納パターンの一例を示す図（その３）である。
【図６Ｂ】図６Ｂは、実行制御部による実行制御の一例を示す図（その３）である。
【図６Ｃ】図６Ｃは、命令の実行制御の詳細を示す模式図（その１）である。
【図６Ｄ】図６Ｄは、命令の実行制御の詳細を示す模式図（その２）である。
【図６Ｅ】図６Ｅは、命令の実行制御の詳細を示す模式図（その３）である。
【図６Ｆ】図６Ｆは、命令の実行制御の詳細を示す模式図（その４）である。
【図６Ｇ】図６Ｇは、命令の実行制御の詳細を示す模式図（その５）である。
【図６Ｈ】図６Ｈは、命令の実行制御の詳細を示す模式図（その６）である。
【図６Ｉ】図６Ｉは、命令の実行制御の詳細を示す模式図（その７）である。
【図６Ｊ】図６Ｊは、命令の実行制御の詳細を示す模式図（その８）である。
【図６Ｋ】図６Ｋは、命令の実行制御の詳細を示す模式図（その９）である。
【図６Ｌ】図６Ｌは、待ち合わせ処理の処理手順を示すフローチャートである。
【図７Ａ】図７Ａは、実施形態に係るロボット制御装置における実行制御の具体例を示す図（その１）である。
【図７Ｂ】図７Ｂは、実施形態に係るロボット制御装置における実行制御の具体例を示す図（その２）である。
【図７Ｃ】図７Ｃは、実施形態に係るロボット制御装置における実行制御の具体例を示す図（その３）である。
【図８Ａ】図８Ａは、表示制御部が表示させるバッファの内容の具体例を示す図（その１）である。
【図８Ｂ】図８Ｂは、表示制御部が表示させるバッファの内容の具体例を示す図（その２）である。
【図９】図９は、変形例に係るロボットシステムの全体構成を示す図である。
【図１０】図１０は、変形例に係るロボット制御装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して、本願の開示するロボット制御装置およびロボットシステムの実施形態を詳細に説明する。なお、以下に示す実施形態によりこの発明が限定されるものではない。
【００１２】
また、以下では、同種であり、かつ、複数個である構成要素については、符号に「−番号」の形式の付番を付しているが、これら構成要素をまとめて説明する場合には、かかる「−番号」の付番を用いずに符号のみを用いて説明する場合がある。
【００１３】
まず、実施形態に係るロボットシステム１の全体構成の一例について、図１を用いて説明する。図１は、実施形態に係るロボットシステム１の全体構成の一例を示す図である。
【００１４】
図１に示すように、ロボットシステム１は、ホストコンピュータＨと、ロボット制御装置１０と、複数の制御グループとを備える。ホストコンピュータＨおよび複数の制御グループは、それぞれロボット制御装置１０と相互通信可能に接続される。
【００１５】
なお、図１には一例として、ホストコンピュータＨにおいて生成された命令に基づいて動作する制御グループを、それぞれ制御グループ＃１，＃２として図示している。本実施形態の説明では、明記しない限り、かかる図１の全体構成に基づくものとする。
【００１６】
ホストコンピュータＨは、制御グループ＃１，＃２に対する命令を生成してロボット制御装置１０へ送出する。
【００１７】
たとえば、ホストコンピュータＨをＰＣ（Personal  Computer）で構成し、制御グループ＃１，＃２に対する命令をＣ言語による記述に基づいて生成することとしてもよい。また、たとえば、ホストコンピュータＨをＰＬＣ（Programmable  Logic  Controller）で構成し、制御グループ＃１，＃２に対する命令をラダー言語による記述に基づいて生成することとしてもよい。
【００１８】
制御グループ＃１，＃２はそれぞれ、少なくとも１つの動作軸を持つ制御単位である。図１では、制御グループ＃１，＃２は、それぞれロボットＲ１，Ｒ２によって構成される。なお、ロボット制御装置によって制御されるのであれば、ロボット以外の周辺機器（図示略）等を制御グループとすることもできる。周辺機器としては、例えばロボットを搭載して水平方向に移動させる走行台車や、ロボットが作業しやすいよう対象物の向きを変えるターンテーブルが挙げられる。こうした周辺機器それぞれが個別の制御グループとなる。ただし、以下では各制御グループがロボット１台で構成されるものとする。
【００１９】
ロボット制御装置１０は、ホストコンピュータＨから送出される制御グループ＃１，＃２に対する命令を受け取って制御グループごとに予め設けられた所定の格納領域に格納する。なお、命令にどの制御グループに対するものか判別するための情報が付加するようにして共通の格納領域に命令を格納してもよい。ホストコンピュータＨは命令を送出する際、実行する命令がない制御グループについては、その旨を明示するため「無操作命令」を送出する。以下では、かかる「無操作命令」を「ＮＯＰ」と記載する場合がある。また、ロボット制御装置１０は、格納した命令を逐次取り出し、制御グループ＃１，＃２が精度よく同期しながら協調動作するように実行制御する。
【００２０】
次に、かかるロボット制御装置１０の構成について図２を用いて説明する。図２は、実施形態に係るロボット制御装置１０の構成を示すブロック図である。なお、図２では、本実施形態の説明に必要な構成要素のみを示しており、一般的な構成要素についての記載を省略している。
【００２１】
また、図２を用いた説明では、主としてロボット制御装置１０の内部構成について説明することとし、既に図１で示したホストコンピュータＨ、および、制御グループ＃１，＃２については、詳細な説明を省略する。
【００２２】
図２に示すように、ロボット制御装置１０は、通信インタフェース１０ａと、共通ＡＰ（アプリケーションプログラム）インタフェース１０ｂと、格納部１０ｃと、バッファ１０ｄと、実行制御部１０ｅとを備える。さらに、ディスプレイ等の表示装置２０へ接続される表示制御部１０ｆを備えるようにしてもよい。
【００２３】
通信インタフェース１０ａは、ロボット制御装置１０がホストコンピュータＨとの通信を行うための通信デバイスである。共通ＡＰインタフェース１０ｂは、通信インタフェース１０ａを介して受け取ったホストコンピュータＨからの命令を、共通のプラットフォーム上で解釈するためのソフトウェア実装部品である。
【００２４】
格納部１０ｃは、それぞれ共通ＡＰインタフェース１０ｂを介してホストコンピュータＨからの命令を受け取った場合に、その命令の「発行」要求を受け付けるまでかかる命令を保持する。そして、「発行」要求を受け付けたならば、命令をバッファ１０ｄへ格納する。なお、発行要求は、たとえば、一時記憶部などに別途設けた発行要求フラグをオンすることによって通知されてもよい。
【００２５】
なお、以下では説明を簡単にするため、かかる命令のバッファ１０ｄへの格納は、すべての制御グループ（ここでは、＃１，＃２）で同時に行われるものとする。ただし協調動作に影響がない範囲であれば各制御グループで命令の格納のタイミングが若干異なっていても良い。また、格納部１０ｃは、かかる格納のタイミングで対応する命令をもたない制御グループについても、ホストコンピュータＨから送出された「ＮＯＰ」をそのまま格納する。
【００２６】
バッファ１０ｄは、一時記憶部として制御グループ＃１，＃２に対する命令を一時的に格納する格納領域である。かかるバッファ１０ｄのデータ構造ほかについては、図３Ａおよび図３Ｂを用いて詳述する。
【００２７】
実行制御部１０ｅは、所定の運転要求を受け付けた場合に、バッファ１０ｄに格納された制御グループ＃１，＃２に対する命令を１つずつ同時に取り出し、取り出した各命令に基づいて制御グループ＃１，＃２を同期させて協調動作させる。かかる実行制御部１０ｅの動作については、図４Ａ〜図７Ｂを用いて詳述する。
【００２８】
なお、実行制御部１０ｅが受け付ける所定の運転要求は、たとえば、一時記憶部などに別途設けた運転要求フラグをオンにすることによって通知されてもよい。この場合、実行制御部１０ｅは、かかる運転要求フラグがオンの間、バッファ１０ｄから逐次命令を取り出して制御グループ＃１，＃２へ実行させることとなる。
【００２９】
表示制御部１０ｆは、バッファ１０ｄの内容を表示装置２０へ表示させる。なお、表示制御部１０ｆが表示させるバッファ１０ｄの内容については、図８Ａおよび図８Ｂに具体例を挙げて後述する。
【００３０】
次に、バッファ１０ｄの構成の詳細について、図３Ａおよび図３Ｂを用いて説明する。図３Ａおよび図３Ｂは、バッファ１０ｄの構成の詳細を示す模式図である。
【００３１】
図３Ａに示すように、バッファ１０ｄの基本的な構成単位は、いわゆる待ち行列であるキュー１０ｄａである。すなわち、受け取った命令Ｃをキュー１０ｄａの末尾（ＢＯＴＴＯＭ）から１つずつ格納（エンキュー）し、先頭（ＴＯＰ）から１つずつ取り出す（デキュー）という先入れ先出し方式のデータ構造となっている。
【００３２】
そして、図３Ｂに示すように、本実施形態では、かかるキュー１０ｄａが、制御グループ＃１，＃２ごとにそれぞれ、キュー１０ｄａ−１，１０ｄａ−２として設けられる。なお、図３Ｂの例では、キュー１０ｄａ−１，１０ｄａ−２の要素数は、それぞれ４個で同数であるものとするが、キューの要素数は各制御グループで異なっていてもよい。
【００３３】
そして、上述の格納部１０ｃは、制御グループ＃１，＃２それぞれに対する命令Ｃを、かかるキュー１０ｄａ−１，１０ｄａ−２の末尾から１つずつ同時に格納する。
【００３４】
ここで、既に述べたように、格納部１０ｃは、かかる格納のタイミングで対応する命令Ｃをもたない制御グループについては、その命令Ｃとして「ＮＯＰ」を格納する。したがって、同一の格納タイミングで格納される命令Ｃ（「ＮＯＰ」を含む）それぞれは、図３Ｂに示す実行順序が自明的に揃うこととなる。
【００３５】
そして、上述の実行制御部１０ｅは、制御グループ＃１，＃２それぞれに対する命令Ｃを、キュー１０ｄａ−１，１０ｄａ−２の先頭から１つずつ同時に取り出す。すなわち、同一の格納タイミングで格納され、実行順序の揃った命令Ｃ（「ＮＯＰ」を含む）が、実行制御部１０ｅによって同時に取り出される。
【００３６】
そして、実行制御部１０ｅは、この同時に取り出され、かつ、実行順序の揃った命令Ｃを用いて、制御グループ＃１，＃２を同期させ協調動作させる制御（以下、「実行制御」と記載する）を行う。かかる点を、つづく図４Ａ〜図７Ｂを用いて説明してゆく。なお、「同期」とは複数のロボットが同時に動作を開始し、同時に停止することを指すものとする。また複数のロボットが独立して動作を開始したり、独立して停止したりする場合を「非同期」と表現する。
【００３７】
また、図３Ａの命令Ｃに図示した番号「０」は、命令Ｃの種別を示す「タスク番号」である。かかる「タスク番号」は、実行制御部１０ｅによる実行制御に用いられる。この点についても、図４Ａ〜図７Ｂを用いた説明で述べることとする。
【００３８】
図４Ａは、命令の格納パターンの一例を示す図（その１）である。また、図４Ｂは、実行制御部１０ｅによる実行制御の一例を示す図（その１）である。なお、図４Ａ以降の図面では、見やすさの観点から、各キューに対し、１０ｄａ−１，１０ｄａ−２といった符号を付さない場合がある。
【００３９】
まず、図４Ａに示すように、格納部１０ｃによって、空のキュー１０ｄａ−１，１０ｄａ−２に対し、その末尾から命令Ｃ１，Ｃ２がそれぞれ同一の格納タイミングで格納されたものとする。
【００４０】
かかる場合、命令Ｃ１，Ｃ２は、実行順序（１）に揃った状態でキュー１０ｄａ−１，１０ｄａ−２へ格納されることとなる。なお、図４Ａに示すように、命令Ｃ１，Ｃ２それぞれのタスク番号は「０」で同一であるものとする。
【００４１】
ここで、かかる命令Ｃ１，Ｃ２が、実行制御部１０ｅによって同時に取り出されたものと仮定する。実行制御部１０ｅは、同時に取り出した命令に基づく動作を、制御グループすべてで同時に開始させる制御を行う。また、実行制御部１０ｅは、タスク番号が同一である命令に基づく動作それぞれを、かかる命令に対応する制御グループ間で同時に終了させる制御を行う。
【００４２】
すなわち、図４Ｂに示すように、実行制御部１０ｅは、同時に取り出した命令Ｃ１，Ｃ２それぞれに基づく動作を、制御グループ＃１，＃２で同時に開始させる（図中の「（１）動作開始」参照）。
【００４３】
また、図４Ｂに示すように、実行制御部１０ｅは、タスク番号が「０」で同一である命令Ｃ１，Ｃ２それぞれに基づく動作を、制御グループ＃１，＃２間で同時に終了させる（図中の「（１）動作終了」参照）。
【００４４】
これは、通常では一方の動作が他方より短時間で終了するものであっても、双方とも同じ時間をかけて動作させることを意味している。これにより、たとえば、対象物をロボットＲ１とロボットＲ２とによって両側面から挟持するといった、まったく同一のタイミングで２つのロボットを対象物に接触させたい場合などに、精度の高い協調動作を行うことを可能にする。
【００４５】
次に、図５Ａは、命令の格納パターンの一例を示す図（その２）である。また、図５Ｂは、実行制御部１０ｅによる実行制御の一例を示す図（その２）である。
【００４６】
図５Ａに示すように、格納部１０ｃによって、既に実行順序（１）が埋まっているキュー１０ｄａ−１，１０ｄａ−２に対し、その末尾から命令Ｃ３，Ｃ４がそれぞれ同一の格納タイミングで格納されたものとする。
【００４７】
かかる場合、命令Ｃ３，Ｃ４は、実行順序（２）に揃った状態でキュー１０ｄａ−１，１０ｄａ−２へ格納されることとなる。なお、図５Ａに示すように、命令Ｃ３はタスク番号が「０」の通常の命令であり、命令Ｃ４は「ＮＯＰ」であるものとする。
【００４８】
ここで、かかる命令Ｃ３，Ｃ４が、それぞれキュー１０ｄａ−１，１０ｄａ−２の先頭にまで遷移し、実行制御部１０ｅによって同時に取り出されたものと仮定する。実行制御部１０ｅは、取り出した命令が「ＮＯＰ」である場合に、かかる「ＮＯＰ」に対応する制御グループを、次の命令を取り出すまで動作させない制御を行う。
【００４９】
すなわち、図５Ｂに示すように、実行制御部１０ｅは、同時に取り出した命令Ｃ３，Ｃ４のうち、命令Ｃ３に基づく動作を制御グループ＃１で開始させる（図中の「（２）動作開始」参照）。
【００５０】
また、図５Ｂに示すように、実行制御部１０ｅは、「ＮＯＰ」である命令Ｃ４に対応する制御グループ＃２を、次に命令を取り出すまで、すなわち、命令Ｃ３に基づく制御グループ＃１の動作が終了するまで（図中の「（２）動作終了」参照）、「動作なし」とする。
【００５１】
これにより、制御グループ間で動作の待ち合わせを行うことができるので、複数の制御グループを同期させ、精度よく協調動作させることができる。
【００５２】
次に、図６Ａは、命令の格納パターンの一例を示す図（その３）である。また、図６Ｂは、実行制御部１０ｅによる実行制御の一例を示す図（その３）である。また、図６Ｃ〜図６Ｋは、命令の実行制御の詳細を示す模式図（その１）〜（その９）である。図６Ｃ〜図６Ｋの一連の処理も実行制御部１０ｅによって行われる。
【００５３】
図６Ａに示すように、格納部１０ｃによって、実行順序（１），（２）が埋まっているキュー１０ｄａ−１，１０ｄａ−２に対し、その末尾から命令Ｃ５，Ｃ６がそれぞれ同一の格納タイミングで格納されたものとする。
【００５４】
かかる場合、命令Ｃ５，Ｃ６は、実行順序（３）に揃った状態でキュー１０ｄａ−１，１０ｄａ−２へ格納されることとなる。なお、図６Ａに示すように、命令Ｃ５のタスク番号は「０」であり、命令Ｃ６のタスク番号は「１」であるものとする。
【００５５】
ここで、かかる命令Ｃ５，Ｃ６が、それぞれキュー１０ｄａ−１，１０ｄａ−２の先頭にまで遷移し、実行される様子を、図６Ｃ〜図６Ｋを用いて詳細に説明する。なお、図６Ｃ〜図６Ｋに示す白抜き矢印は、「実行対象」となる命令を指しており、「実行対象」が指し示す命令は、上述の運転要求フラグがオンである間、実行される。
【００５６】
まず、図６Ｃに示すように、制御グループ＃１，＃２ともに実行順序（１）の命令が「実行対象」となる。これら双方の命令は、ともにタスク番号が「０」で同一であるため、同期（同時開始／同時停止）で実行完了され、「実行対象」は、図６Ｄに示すように実行順序（２）の命令へ移される。
【００５７】
そして、制御グループ＃２については「ＮＯＰ」であり、「実行対象」とはなり得ないため、制御グループ＃２の「実行対象」は、図６Ｅに示すように、さらに次の実行順序（３）の命令Ｃ６へ移される。ここで、制御グループ＃２では「実行対象」が指し示す命令は実行順序（３）であるが、制御グループ＃１の「実行対象」がまだ手前の実行順序（２）を示しているため、Ｃ６は直ちには実行されないようになっている。実行制御部１０ｅは「実行対象」が指し示す命令と同じ実行順序である、他の全ての制御グループの命令の内容を参照し、いずれかの制御グループに「ＮＯＰ」以外の命令が存在した場合、該命令が「実行対象」となっていなければ、「実行対象」となるまで待ち合わせを行う。
【００５８】
また、図６Ｅに示すように、この時点で実行順序（１）に「実行対象」の命令は存在しない。そこで、図６Ｆに示すように、キュー１０ｄａ−１，１０ｄａ−２の先頭の命令は、一斉にデキューされ、それ以外の命令は繰り上げられる。
【００５９】
ここで、待ち合わせの処理について、図６Ｆを例に詳しく説明する。まず制御グループ＃１では「実行対象」が実行順序（１）を示している。一方で制御グループ＃２の実行順序（１）は「ＮＯＰ」となっている。よって制御グループ＃１は待ち合わせを行う必要はなく、実行順序（１）の命令を実行する。
【００６０】
制御グループ＃２では、「実行対象」が実行順序（２）を示している。制御グループ＃１の実行順序（２）には「ＮＯＰ」以外の命令（Ｃ５）が存在し、制御グループ＃１の「実行対象」は実行順序（１）を指し示している。よって制御グループ＃２の命令Ｃ６は、制御グループ＃１の命令Ｃ５が「実行対象」となるまで実行されず、命令Ｃ５が「実行対象」となるまで待つことになる。この一連の処理を図６Ｌのフローチャートに示す。
【００６１】
すなわち、図６Ｌに示すように、この一連の処理は、判定基準となる制御グループを「制御グループ＃ｉ」とした、制御グループ数分のループ処理（ｉ）として実行される（ステップＳ１０１）。かかるループ処理（ｉ）の中で、まず、制御グループ＃ｉの「実行対象」が指す命令の実行順序の番号「ｉｎｓｔＮｏｉ」が獲得される（ステップＳ１０２）。
【００６２】
そして、制御グループ＃ｉと、かかる制御グループ＃ｉを除く他の制御グループ＃ｊとが、ループ処理（ｊ）の中で比較される（ステップＳ１０３）。かかるループ処理（ｊ）では、まず、ｊとｉとが同一か否かが判定され（ステップＳ１０４）、同一であれば（ステップＳ１０４，Ｙｅｓ）、制御グループ＃ｉであるとして除外される。すなわち、ｊの値が１加算され、ループ処理（ｊ）のループ端へ戻る。
【００６３】
そして、ｊとｉとが同一でなければ（ステップＳ１０４，Ｎｏ）、制御グループ＃ｊのｉｎｓｔＮｏｉの命令がＮＯＰであるか否かが判定される（ステップＳ１０５）。そして、制御グループ＃ｊの「ｉｎｓｔＮｏｉ」の命令がＮＯＰであれば（ステップＳ１０５，Ｙｅｓ）、待ち合わせとはなり得ないため、ｊの値が１加算され、ループ処理（ｊ）のループ端へ戻る。
【００６４】
そして、制御グループ＃ｊの「ｉｎｓｔＮｏｉ」の命令がＮＯＰでないならば（ステップＳ１０５，Ｎｏ）、制御グループ＃ｊの「実行対象」が指す命令の実行順序の番号「ｉｎｓｔＮｏｊ」が獲得される（ステップＳ１０６）。
【００６５】
そして、「ｉｎｓｔＮｏｊ」と「ｉｎｓｔＮｏｉ」とが比較されることによって、制御グループ＃ｊの実行順序が制御グループ＃ｉよりも進んでいるか否かが判定される（ステップＳ１０７）。
【００６６】
そして、すべての制御グループ＃ｊについてステップＳ１０７の判定条件が満たされるならば（ステップＳ１０７，Ｙｅｓ）、制御グループ＃ｉが実行開始される（ステップＳ１０８）。
【００６７】
また、制御グループ＃ｊのいずれかがステップＳ１０７の判定条件を満たさない（ステップＳ１０７，Ｎｏ）、すなわち、制御グループ＃ｊについて命令が存在し、かつ、実行順序が制御グループ＃ｉよりも以前にあるならば、制御グループ＃ｉについては、命令の待ち合わせが行われる。
【００６８】
図６Ｆの説明に戻る。図６Ｆにおいて制御グループ＃１の実行順序（１）の命令（タスク番号「０」）が実行完了された後、「実行対象」は、図６Ｇに示すように実行順序（２）の命令Ｃ５へ移される。ここで、実行順序（１）に「実行対象」の命令は存在しなくなるため、図６Ｈに示すように、キュー１０ｄａ−１，１０ｄａ−２の先頭の命令は、図６Ｆに示したのと同様に一斉にデキューされ、命令Ｃ５，Ｃ６が繰り上げられる。
【００６９】
そして、図６Ｉに示すように、制御グループ＃１については、タスク番号「０」の命令Ｃ５が実行完了され、「実行対象」は次に移される。また、図６Ｊに示すように、制御グループ＃２については、タスク番号「１」の命令Ｃ６が実行完了され、「実行対象」が次に移される。
【００７０】
なお、このとき実行制御部１０ｅは、タスク番号が異なる命令に基づく動作それぞれを、かかる命令に対応する制御グループ間で同時に終了させる制御を行わない。
【００７１】
すなわち、図６Ｂに示すように、実行制御部１０ｅは、命令Ｃ５，Ｃ６それぞれに基づく動作を制御グループ＃１，＃２で同時に開始させるが（図中の「（３）動作開始」参照）、その動作を制御グループ＃１，＃２間で同時に終了させる制御を行わないため、命令Ｃ５，Ｃ６に基づく動作はそれぞれ非同期に終了する場合がある（図中のそれぞれの「（３）動作終了」参照）。
【００７２】
これは、一方の動作が他方より短時間で終了するものであれば、双方で同じ時間をかけることなく独立に一方の動作を終了させることを意味している。これにより、たとえば、ロボットＲ１とロボットＲ２が互いに干渉する恐れなく、それぞれ別の作業を行うといった、制御グループ間で動作を同期させる必要性のない場面においては、システムに無用な負荷をかけることなく制御グループを並列に動作させることができる。
【００７３】
図６Ｊの説明に戻る。そして、図６Ｊに示すように、命令Ｃ５，Ｃ６が実行完了された後、実行順序（１）に「実行対象」の命令は存在しなくなるため、図６Ｋに示すように、キュー１０ｄａ−１，１０ｄａ−２の先頭の命令Ｃ５，Ｃ６は一斉にデキューされ、「実行対象」のみが繰り上げられてキュー１０ｄａ−１，１０ｄａ−２の先頭にセットされることとなる。
【００７４】
そして、本実施形態に係るロボット制御装置１０は、これまで図４Ａ〜図６Ｋを用いて説明してきた実行制御部１０ｅによる実行制御を組み合わせることによって、複数の制御グループを精度よく同期させて協調動作させることができる。
【００７５】
かかる組み合わせの具体例を図７Ａおよび図７Ｂに示す。図７Ａおよび図７Ｂは、実施形態に係るロボット制御装置１０における実行制御の具体例を示す図（その１）および（その２）である。
【００７６】
なお、図７Ａおよび図７Ｂに示す具体例では、制御グループ＃１〜＃３の３つの制御グループを取り扱うものとする。また、図７Ａおよび図７Ｂに示す（ａ）や（ｂ）’、（ｄ）’’といったアルファベットと「’」とであらわした各符号は、制御グループが１つの命令で動作するにあたっての「目標位置」を示している。
【００７７】
図７Ａに示すように、たとえば、制御グループ＃１には、ロボットの先端部に取り付けられたハンドの作用点（対象物を把持する部分）などに相当する制御点が、現在位置→（ａ）→（ｂ）→（ｃ）→（ｄ）の経路をたどる動作を行わせたいものとする。
【００７８】
また、同様に、制御グループ＃２には、制御点が、現在位置→（ａ）’→（ｂ）’→（ｃ）’→（ｄ）’の経路をたどる動作を行わせたいものとする。
【００７９】
また、同様に、制御グループ＃３には、制御点が、現在位置→（ｄ）’’の経路をたどる動作を行わせたいものとする。
【００８０】
そして、図７Ａに白抜き矢印で示すように、制御グループ＃１の（ｂ）→（ｃ）→（ｄ）の動作、および、制御グループ＃２の（ｂ）’→（ｃ）’→（ｄ）’の動作を同期させたいものとする。また、さらに、制御グループ＃１の（ｃ）→（ｄ）の動作、制御グループ＃２の（ｃ）’→（ｄ）’の動作、および、制御グループ＃３の現在位置→（ｄ）’’の動作を同期させたいものとする。
【００８１】
ここで、動作の具体例として、次のようなものが挙げられる。まず、ロボットＲ１（制御グループ＃１）が現在位置から（ｂ）まで動作する間、ロボットＲ２（制御グループ＃２）が現在位置から（ｂ）’までロボットＲ１とは関係なく動作するが、その後はロボットＲ１とロボットＲ２とで同一の対象物の両端を各々のハンドで把持して、協調して運搬する。そして運搬の途中から、制御グループ＃３のロボットＲ３が運搬されている対象物の移動に同期しながら対象物に加工を行う。
【００８２】
かかる場合、制御グループ＃１〜＃３の各キュー１０ｄａには、図７Ｂに示す具体例のように各命令が格納されればよい。すなわち、実行順序（１），（２）においては、制御グループ＃１，＃２でタスク番号の異なる命令（ここでは、「０」と「１」）を格納して、非同期に動作を行わせればよい。
【００８３】
また、実行順序（３），（４）においては、制御グループ＃１，＃２でタスク番号が同一の命令（ここでは、「０」）を格納して、実行制御部１０ｅが同期をとって制御するようにすればよい。
【００８４】
また、制御グループ＃３については、実行順序（１）〜（３）までは命令として「ＮＯＰ」を格納して、制御グループ＃１，＃２との待ち合わせを行うべく動作させないこととすればよい。そして、実行順序（４）において、制御グループ＃１，＃２と同一のタスク番号「０」を有する命令を格納することとすればよい。
【００８５】
なお、図７Ａおよび図７Ｂでは、３つめの制御グループ＃３が、既に動作中の制御グループ＃１，＃２に途中から同期して動作する具体例を示したが、制御グループ＃３を非同期に動作させることもできる。かかる具体例を図７Ｃに示す。図７Ｃは、実施形態に係るロボット制御装置１０における実行制御の具体例を示す図（その３）である。
【００８６】
図７Ｃに示すように、実行順序（１），（２）において、制御グループ＃１，＃２がタスク番号「０」の命令で既に動作中であるものとする。このとき、制御グループ＃３に対して後から（すなわち、実行順序（３）として）命令が格納され、しかもその命令のタスク番号が図中の「１」のように独立している場合、制御グループ＃３は、かかる命令が格納されたその時点から、制御グループ＃１，＃２とは非同期に動作を開始する。
【００８７】
図７Ｃでは、制御グループ＃３の実行順序（１）（２）には「ＮＯＰ」が格納されているため、制御グループ＃３の実行対象は実行順序（３）に格納された命令となる。さらに、制御グループ＃１、＃２の実行順序（３）は「ＮＯＰ」であるため、制御グループ＃３は制御グループ＃１、＃２との待ち合わせをする必要がないからである。
【００８８】
このように、本実施形態によれば、どの制御グループ同士で同期すればよいかを判断するにあたり、各キュー１０ｄａの実行順序が同じ命令同士で、タスク番号が同じか否かを確認するだけでよい。すなわち、各キュー１０ｄａに格納されている命令のタスク番号をキュー１０ｄａの先頭からサーチする必要がなく、実行順序が同じ命令同士でタスク番号を比較することで足りる。したがって、たとえ制御グループの数が増えた場合であっても、処理を複雑化させることなく簡単に同期制御を行うことができる。
【００８９】
次に、表示制御部１０ｆを備えた場合に、表示制御部１０ｆが表示装置２０へ表示させるバッファ１０ｄ（すなわち、キュー１０ｄａ）の内容の具体例について、図８Ａおよび図８Ｂを用いて説明する。図８Ａおよび図８Ｂは、表示制御部１０ｆが表示させるバッファ１０ｄの内容の具体例を示す図である。
【００９０】
図８Ａに示すように、表示制御部１０ｆは、表示装置２０の表示領域２１に対して、たとえば、バッファ１０ｄに格納されたすべての命令を表示させることができる。このとき、実行順序を示す（１）〜（４）といった文言や、「制御グループ＃１」といった文言をあわせて表示するようにレイアウトすることで、実際に表示装置２０をみる作業者が、容易に確認を行えるようにすることができる。
【００９１】
また、たとえば、静止画ではなく、時々刻々と遷移するバッファ１０ｄの内容をアニメーション形式などの動画で表示することとしてもよい。
【００９２】
また、図８Ｂに示すように、少なくとも格納部１０ｃによって同時にキュー１０ｄａへ格納された各命令を、任意に絞り込んで表示装置２０の表示領域２１へ表示させることとしてもよい。たとえば、図８Ｂには、実行順序（１）についての命令のみに内容を絞り込んで表示した具体例を示している。
【００９３】
これにより、各制御グループの現在の命令実行状況や、これから実行される動作について視認性を向上させることができる。すなわち、ロボットシステム１に潜在する不具合を早期に発見し、デバッグを行うことができるので、プログラムの信頼性を向上させ、より精度の高い同期および協調制御を行うことが可能となる。
【００９４】
上述してきたように、実施形態に係るロボット制御装置は、キューと、格納部と、実行制御部とを備える。キューは、ロボットの動作に関わる少なくとも１つの動作軸を含む制御単位である制御グループごとに設けられる。格納部は、制御グループそれぞれに対する命令をキューの末端から１つずつ同時に格納する。実行制御部は、所定の運転要求を受け付けた場合に、制御グループそれぞれに対する命令をキューの先頭から１つずつ同時に取り出し、かかる命令に基づく動作を制御グループすべてで同時に開始させる。
【００９５】
また、格納部は、命令を格納するタイミングにおいて対応する命令が存在しない制御グループがある場合に、かかる制御グループに対する命令として無操作命令を格納する。また、実行制御部は、取り出した命令が無操作命令である場合に、かかる無操作命令に対応する制御グループを次に命令を取り出すまで動作させない。したがって、実施形態に係るロボット制御装置によれば、複数の制御グループを精度よく同期させて協調動作させることができる。
【００９６】
なお、上述した実施形態では、たとえば、図１に示したように、制御グループに含まれるロボットが同種（いずれも単椀）である場合を例示したが、同種に限定されないことは言うまでもない。
【００９７】
また、上述した実施形態では、ホストコンピュータが１台であるロボットシステムを例に挙げたが、変形例として、ホストコンピュータを複数台備える構成としてもよい。ここで、かかる場合の構成例を、図９および図１０に示しておく。
【００９８】
図９は、変形例に係るロボットシステム１Ａの全体構成を示す図であり、図１０は、変形例に係るロボット制御装置１０Ａの構成を示すブロック図である。なお、図９および図１０は、それぞれ図１および図２に対応しているため、重複する構成要素については説明を省略し、異なる部分について主に説明する。
【００９９】
図９に示すように、ロボットシステム１Ａは、複数のホストコンピュータと、ロボット制御装置１０Ａと、たとえば、制御グループ＃１，＃２とを備える。なお、図９には一例として、少なくとも２個のホストコンピュータＨ−１，Ｈ−２を図示している。
【０１００】
ホストコンピュータＨ−１，Ｈ−２は、制御グループ＃１，＃２に対する命令を生成してロボット制御装置１０Ａへ送出する。なお、このとき、ホストコンピュータＨ−１，Ｈ−２は、制御グループ＃１，＃２のいずれに対する命令も送出することができる。すなわち、ホストコンピュータと制御グループとの関係は、１対１に限定されない。
【０１０１】
また、ホストコンピュータＨ−１，Ｈ−２はそれぞれ、異なるプラットフォームで構成することできる。たとえば、ホストコンピュータＨ−１をＰＣで構成し、ホストコンピュータＨ−２をＰＬＣで構成してもよい。
【０１０２】
そして、図１０に示すように、ロボット制御装置１０Ａは、格納部１０ｃ−１，１０ｃ−２として格納部１０ｃを複数個備える。格納部１０ｃ−１，１０ｃ−２は、通信インタフェース１０ａから共通ＡＰインタフェース１０ｂを介してそれぞれホストコンピュータＨ−１，Ｈ−２からの命令を受け取った場合に、その命令の「発行」要求を受け付けるまでかかる命令を保持し、「発行」要求を受け付けたならば、命令をバッファ１０ｄへ格納することとなる。なお、その他の構成要素については、上述した実施形態に係るロボット制御装置１０（図２参照）と同様であるため、説明を省略する。
【０１０３】
また、上述した実施形態では、たとえば、図３Ｂに示したように、キューが２次元配列状に縦横で揃えられている例を示したが、各キューの配置を限定するものではない。すなわち、各キューは、バッファ内のそれぞれずれた位置に領域を確保され、配置されていてもよい。
【０１０４】
また、上述した実施形態では、たとえば、図３Ｂに示したように、各キューの要素数がそれぞれ４個である場合を例示したが、前述のように各キューで要素数が異なっていてもよく、要素数も４個に限定されるものではない。
【０１０５】
さらなる効果や変形例は、当業者によって容易に導き出すことができる。このため、本発明のより広範な態様は、以上のように表しかつ記述した特定の詳細および代表的な実施形態に限定されるものではない。したがって、添付の特許請求の範囲およびその均等物によって定義される総括的な発明の概念の精神または範囲から逸脱することなく、様々な変更が可能である。
【符号の説明】
【０１０６】
１、１Ａ  ロボットシステム
１０、１０Ａ  ロボット制御装置
１０ａ  通信インタフェース
１０ｂ  共通ＡＰインタフェース
１０ｃ  格納部
１０ｄ  バッファ
１０ｄａ  キュー
１０ｅ  実行制御部
１０ｆ  表示制御部
２０    表示装置
２１    表示領域
Ｈ    ホストコンピュータ
【図１】
0005578220.tif 000002
【図２】
0005578220.tif 000003
【図３Ａ】
0005578220.tif 000004
【図３Ｂ】
0005578220.tif 000005
【図４Ａ】
0005578220.tif 000006
【図４Ｂ】
0005578220.tif 000007
【図５Ａ】
0005578220.tif 000008
【図５Ｂ】
0005578220.tif 000009
【図６Ａ】
0005578220.tif 000010
【図６Ｂ】
0005578220.tif 000011
【図６Ｃ】
0005578220.tif 000012
【図６Ｄ】
0005578220.tif 000013
【図６Ｅ】
0005578220.tif 000014
【図６Ｆ】
0005578220.tif 000015
【図６Ｇ】
0005578220.tif 000016
【図６Ｈ】
0005578220.tif 000017
【図６Ｉ】
0005578220.tif 000018
【図６Ｊ】
0005578220.tif 000019
【図６Ｋ】
0005578220.tif 000020
【図６Ｌ】
0005578220.tif 000021
【図７Ａ】
0005578220.tif 000022
【図７Ｂ】
0005578220.tif 000023
【図７Ｃ】
0005578220.tif 000024
【図８Ａ】
0005578220.tif 000025
【図８Ｂ】
0005578220.tif 000026
【図９】
0005578220.tif 000027
【図１０】
0005578220.tif 000028