(57)【特許請求の範囲】
【請求項１】
ロボットを制御する命令は互いに異なる複数の動作対象物と互いに異なる複数の動作位置を含み、前記命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、
前記動作対象物および前記動作位置ごとに、未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、
前記動作対象物および前記動作位置の全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、
を備えることを特徴とするロボット制御装置。
【請求項２】
前記動作対象物は、互いに異なる複数のロボットアームのそれぞれである、
ことを特徴とする請求項１に記載のロボット制御装置。
【請求項３】
前記シナリオ取得手段は、シナリオ作成者によって指定された前記命令を前記シナリオ作成者によって指定された前記直列的な実行順に複数並べた前記シナリオを取得する、
ことを特徴とする請求項１〜請求項２のいずれかに記載のロボット制御装置。
【請求項４】
ロボットを制御する命令は互いに異なる複数の動作対象物と互いに異なる複数の動作位置を含み、前記命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、
前記動作対象物および前記動作位置ごとに、未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、
前記動作対象物および前記動作位置の全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、
複数の前記動作対象物と、
を備えることを特徴とするロボットシステム。
【請求項５】
ロボットを制御する命令は互いに異なる複数の動作対象物と互いに異なる複数の動作位置を含み、
前記命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、
前記動作対象物および前記動作位置ごとに、未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、
前記動作対象物および前記動作位置の全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、
によって制御されるロボット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボット制御装置、ロボットシステム、ロボット制御方法、ロボット制御プログラムに関し、特にシナリオを解釈し実行する技術に関する。
【背景技術】
【０００２】
従来、人間が指示した動作を行うロボットが知られている。一方で、特許文献１に記載されたロボットのように、人間が指示した動作以外の動作も追加的に並列に行うことができるロボットも知られている。このようなロボットにおいては、同時には実行できない動作や同時に実行すると悪影響を及ぼす動作の対応関係が予め規定されており、この対応関係を参照して同時に実行可能な動作を行うようにしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−０８８２８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
作業者が行っていた作業を作業者の代わりに行う代替ロボットを導入する場合、作業者が行っていた作業の手順を、そのまま動作順に並べたシナリオを作成してロボットに処理させることができれば、シナリオ作成の手間は少なくて済む。一方、並列に実行可能な動作があるのであればそれらを並列に実行させることによって、シナリオの作業を効率的に実行させたい。並列に実行可能な命令は並列に実行するように定義したシナリオであれば、当該シナリオを取得したロボット制御装置は当該シナリオで定義された通りに命令を実行すれば効率的にシナリオの作業を実行できる。しかし、特許文献１に記載されているような対応関係を参照してシナリオを作成する作業は繁雑であり、シナリオ作成者にその煩雑な作業を負担させることになる。
本発明は、前記課題にかんがみてなされたもので、命令の並列実行について特に指定されていないシナリオを取得した場合も、並列実行の可否を判断して命令を実行できる技術を提供することを目的とする。
【課題を解決するための手段】
【０００５】
前記目的を達成するために、本発明のロボット制御装置は、シナリオ取得手段と、命令キュー生成手段と、命令実行手段と、を備える。シナリオ取得手段は、複数の動作主体のそれぞれを互いに異なるリソースとして含む複数のリソースのうち少なくとも一つの動作主体を占有する命令を複数含んだシナリオを取得する。シナリオでは、その複数の命令の直列的な実行順が指定されている。ここでリソースとは、命令を実行するにあたりロボットが使用する要素を意味し、ロボットシステムが備える動作主体を少なくとも含む。またリソースは、ロボットシステム外部の要素であってもよい。リソースを占有するとは、リソースを排他的に使用することを意味する（すなわち複数の命令が単一のリソースを同時に使用できないことを意味する）。また、複数の動作主体は、互いに独立して動作することが可能である。
【０００６】
命令キュー生成手段は、シナリオに基づいて、リソースごとに、当該リソースを占有する未実行の命令をシナリオで規定された実行順に従って並べた命令キューを生成する。すなわち、命令キュー生成手段は、シナリオで規定された命令を、当該命令が占有するリソースに対応して設けた命令キューに振り分け、各命令キューにおいてはシナリオで規定された実行順に従って命令を並べる。したがってあるリソースに着目すると、リソースに対応する命令キューに格納されている命令の順序は、当該リソースを占有する命令のシナリオで規定された順序と矛盾しない。すなわち、シナリオでｎ番目に実行することが規定された命令と同じリソースを占有するｎ＋ｍ番目の命令は、ｎ番目の命令よりも実行順が後になるように命令キューに並べられる（ｎおよびｍは自然数とする）。また命令キュー生成手段は、未実行の命令を並べた命令キューを生成することができればよく、例えばある命令が実行済みとなるごとに当該実行済みの命令を命令キューから削除してもよいし、あるいは、ある命令が実行済みとなるごとにシナリオから未実行の命令を抽出し、当該抽出した命令を並べた命令キューを生成してもよい。
【０００７】
命令実行手段は、占有するリソースの全てに対応する命令キューにおいて実行順が最も先である命令を複数並列に実行させる。なお、「命令を複数並列に実行させる」、すなわち、複数の命令を並列に実行させることは、ある命令の実行期間と他の命令の実行期間との少なくとも一部が重複するように命令を実行させることを意味する。もちろん、命令実行手段は、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が一つである場合は、当該命令を一つ実行する。占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が３つ以上ある場合は、その全てを並列に実行させてもよいし、あるいはそのうちの少なくとも２つの命令を並列に実行させてもよい。
【０００８】
本発明によると、占有する全てのリソースに対応する命令キューの先頭にある命令が２つ以上ある場合、当該命令（占有するリソースが異なる命令）を２つ以上並行して実行させることができる。さらに、各命令キューにはシナリオで規定された実行順に矛盾しない順序で命令が並べられるため、その命令キューに対応するリソースを占有する命令を、シナリオに記載された命令の実行順と矛盾しない順序で実行することができる。したがって本発明によると、命令の並列実行について特に指定されていないシナリオを取得した場合も、並列実行の可否を判断して命令を実行することができる。
【０００９】
さらに、前記目的を達成するためのロボット制御装置において、複数のリソースは、命令に占有される複数の動作対象物のそれぞれを互いに異なるリソースとして含んでもよい。動作対象物は、動作主体による動作の対象物を意味する。
したがってこの場合、動作対象物に対してシナリオで規定された順序と矛盾しない順序で命令がなされることになる。
【００１０】
さらに、前記目的を達成するためのロボット制御装置において、複数のリソースは、命令に占有される複数の動作位置のそれぞれを互いに異なるリソースとして含んでもよい。動作位置は、動作主体が動作の対象とする位置を意味する。
したがってこの場合、動作位置においてシナリオに規定された順序と矛盾しない順序で命令がなされることになる。
【００１１】
さらに、前記目的を達成するためのロボット制御装置において、複数の動作主体のそれぞれは、互いに異なる複数のロボットアームのそれぞれであってもよい。
この場合、複数のロボットアームによって複数の命令を並列に実行することができる。
【００１２】
さらに、前記目的を達成するためのロボット制御装置において、シナリオ取得手段は、シナリオ作成者によって指定されたリソースを占有する命令をシナリオ作成者によって指定された直列的な実行順に複数並べたシナリオを取得してもよい。
したがってシナリオ作成者は、リソースを指定した命令を実行順に直列的に並べたシナリオを作成するだけでよく、並列に実行可能かどうかシナリオ作成者が考慮して並列実行するようにスケジューリングしたシナリオを作成する必要がない。
【００１３】
なお、請求項に記載された各手段の機能は、構成自体で機能が特定されるハードウェア資源、プログラムにより機能が特定されるハードウェア資源、又はそれらの組み合わせにより実現される。また、これら各手段の機能は、各々が物理的に互いに独立したハードウェア資源で実現されるものに限定されない。さらに、本発明は上述のロボット制御装置が備える各手段を含むロボットシステムとしても、ロボット制御方法としても、コンピューターに各機能を実現させるロボット制御プログラムとしても、またそのプログラムの記録媒体としても成立する。むろん、そのコンピュータープログラムの記録媒体は、磁気記録媒体であってもよいし光磁気記録媒体であってもよいし、今後開発されるいかなる記録媒体であってもよい。
【図面の簡単な説明】
【００１４】
【図１】第一実施形態にかかるロボットシステムのブロック図。
【図２】第一実施形態にかかるロボットを示す模式図。
【図３】第一実施形態にかかるシナリオを示す図。
【図４】第一実施形態にかかる命令キュー処理を示すフローチャート。
【図５】（５Ａ）および（５Ｂ）は第一実施形態にかかる命令キューを示す図。
【図６】第一実施形態にかかる命令実行処理を示すフローチャート。
【図７】第一実施形態にかかる実行可否判定処理を示すフローチャート。
【図８】（８Ａ）〜（８Ｃ）は第一実施形態にかかる命令キューを示す図。
【図９】（９Ａ）〜（９Ｃ）は第一実施形態にかかる命令キューを示す図。
【図１０】第一実施形態にかかる命令の実行順序を示す図。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態を添付図面を参照しながら説明する。尚、各図において対応する構成要素には同一の符号が付され、重複する説明は省略される。
【００１６】
１．第一実施形態
１−１．構成
図１は、本発明にかかるロボットシステム１００の構成を示すブロック図である。ロボットシステム１００は、ＰＣ（Personal Computer）１０とロボット２０とを備えている。ＰＣ１０は、ＣＰＵ，ＲＡＭ，ＲＯＭ等を備えた制御部１１と、図示しないＨＤＤ（ハードディスク装置）、外部の機器と通信するためのＵＳＢ（Universal Serial Bus）等の外部Ｉ／Ｆ等を備えている。制御部１１は、マウスやキーボード等の操作部４００と、モニター等の表示部３００と、外部Ｉ／Ｆを介して接続している。ＰＣ１０のユーザーは操作部４００を操作してＰＣ１０に指示を与えることができるとともに、ＰＣ１０が表示する各種の情報を表示部３００によって認識することができる。ＰＣ１０は、ＲＯＭやＨＤＤに記憶された各種のプログラムをＲＡＭにロードしＣＰＵで実行することができる。本実施形態ではこのプログラムの一つとして制御部１１がロボット制御プログラム１２を実行することにより、ＰＣ１０をロボット制御装置として機能させることができる。ＰＣ１０は外部Ｉ／Ｆを介してロボット２０と各種信号を送受信することができる。
【００１７】
図２はロボット２０を示す模式図である。ロボット２０は、アームコントローラー２１，２２と、右アーム２３，左アーム２４とを備えている。右アーム２３および左アーム２４は、腕部２００や関節部２０１やハンド部２０２等をそれぞれに備えた所謂ロボットアームであり、動作対象物を「掴む」ことや「放す」こと、また、動作対象物や動作位置に「移動する」こと等の動作を、ＰＣ１０からの指示に応じて行う動作主体である。それらの動作を行うために右アーム２３および左アーム２４は各種の駆動部品を備えている。アームコントローラー２１は、制御部１０から指示された命令に応じて対応するロボットアームである右アーム２３を動作させるために各駆動部品の制御を行うとともに、命令に対応する動作が完了したことを制御部１０に通知する。アームコントローラー２２も同様に、制御部１０から指示された命令に応じて対応する左アーム２４を動作させるために駆動部品の制御を行うとともに、命令に対応する動作が完了したことを制御部１０に通知する。図２に示す基部２０３は、右アーム２３および左アーム２４を間接的に支持する箱状の部材である。ＰＣ１０はこの基部２０３の内部に設けられていても良い。またあるいは、ロボット２０とは別体に設けられていてもよい。
【００１８】
第一のワークＷ１と第二のワークＷ２は、右アーム２３や左アーム２４の動作の対象となる動作対象物である。第一の位置Ｐ１と第二の位置Ｐ２は、右アーム２３や左アーム２４による動作の対象となる位置（動作位置）として規定されている。例えばロボット２０の位置を基準として予め第一の位置Ｐ１や第二の位置Ｐ２が相対的に規定されている。右アーム２３、左アーム２４、第一のワークＷ１、第二のワークＷ２、第一の位置Ｐ１、第二の位置Ｐ２は、それぞれリソースに相当する。
【００１９】
ロボット制御プログラム１２は、シナリオ取得部１２ａ、命令キュー生成部１２ｂ、命令実行部１２ｃを備える。シナリオ取得部１２ａは、シナリオ作成者が作成したシナリオＳを示すデータを取得する機能を有する。本実施形態においてシナリオは、ロボット２０に実行させる複数の命令を直列的な実行順を指定して並べたデータである。例えばシナリオ作成者が操作部４００を操作して作成したシナリオＳを示すデータを、制御部１１は取得する。
【００２０】
図３にシナリオＳの一例を示す。図３に示すように本実施形態では、各命令は「動作の種類（リソース１、リソース２）」という形式で定義される。動作の種類には、「移動する」「掴む」「放す」などが含まれる。リソース１およびリソース２には動作を実行するにあたって占有するリソースが指定される。さらに詳細には、リソース１には動作主体に相当するリソースが指定される。リソース２には動作主体が行う動作の動作対象物や動作位置に相当するリソースが指定される。したがって例えば１番目の命令「移動する（右アーム，第一のワーク）」は、「右アーム２３が第一のワークＷ１に移動する」という命令である。「第一のワークＷ１に移動する」ということは、第一のワークＷ１の位置を特定して、当該位置に移動するということを意味する。本実施形態のロボットシステム１００は、このように命令において位置を指定しなくても、物を指定すればその物の位置を特定してアームを移動させることができる。なお、ワークが載置されている位置は、例えばロボット２０が備える図示しない画像センサーの撮像画像に基づいて特定することができる。また、２番目の命令「掴む（右アーム，第一のワーク）」は、「右アーム２３が第一のワークＷ１を掴む」という命令である。
【００２１】
命令キュー生成部１２ｂは、シナリオＳに基づいて、同時に複数の命令によって使用されることが認められないリソースごとに命令キューを生成する機能を有する。命令キューには、当該命令キューに対応するリソースを占有する命令がシナリオＳで指定された実行順に従って格納される。また、命令キュー生成部１２ｂは、アームコントローラー２１，２２から通知された命令の実行完了を示す情報に基づいて、実行完了した命令を当該命令が占有するリソースに対応する命令キューの先頭から削除する機能を有する。
【００２２】
命令実行部１２ｃは、生成された命令キューに基づいて命令を実行させる機能を有し、より具体的には占有するリソースの全てに対応する命令キューにおいて実行順が最も先である命令を実行させる機能を有する。命令実行部１２ｃは、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が一つである場合は、当該命令を一つ実行させる。また、命令実行部１２ｃは、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が複数ある場合は、複数の当該命令を並列に実行させる。
【００２３】
１−２．シナリオに基づくロボット制御
図４は命令キュー処理の流れを示すフローチャートである。図６は命令実行処理の流れを示すフローチャートである。命令キュー処理はシナリオＳに基づいて前述の命令キューを生成する処理である。命令実行処理は、命令キュー処理で生成された命令キューに基づいて命令を実行する処理である。命令実行処理と命令キュー処理は並列に実行される。まず図４の命令キュー処理について説明する。はじめに制御部１１は、シナリオＳを取得する（Ｓ１００）。続いて制御部１１は変数Ｉに「１」を代入し（Ｓ１０５）、シナリオにＩ番目の命令が存在するか否かを判定する（Ｓ１１０）。変数Ｉは、シナリオで指定されている命令の実行順に対応する変数である（図３参照）。Ｓ１１０においてシナリオにＩ番目の命令があると判定される場合は、制御部１１は変数Ｐに「１」を代入する（Ｓ１１５）。変数Ｐは、命令で指定されるリソース１およびリソース２に対応する変数である（図３参照）。続いて制御部１１は、シナリオのＩ番目の命令にＰ番目のリソースが存在するか否かを判定し（Ｓ１２０）、存在する場合はＰ番目のリソースが適正であるか否かを判定する（Ｓ１２５）。具体的には制御部１１は、ロボット２０が使用できないようなリソースが含まれていないかどうかを判定する。なお、ロボット２０が使用できるリソースは予め決められており、制御部１１はその情報をもとにＳ１２５の判定を行う。
【００２４】
Ｓ１２５においてシナリオのＩ番目の命令のＰ番目のリソースが適正であると判定された場合、制御部１１は、Ｐ番目のリソースに対応する命令キューはフルであるか否かを判定する（Ｓ１３０）。すなわち、命令キューに格納する命令の最大個数分が既に命令キューに格納されているか否かを制御部１１は判定する。Ｓ１３０においてフルでない（空きがある）と判定された場合、制御部１１はシナリオのＩ番目の命令のＰ番目のリソースに対応する命令キューの最後尾にシナリオのＩ番目の命令を追加し（Ｓ１４０）、変数Ｐをインクリメントする（Ｓ１４５）。Ｓ１３０においてフルであると判定された場合、制御部１１はシナリオのＩ番目の命令のＰ番目のリソースに対応する命令キューに空きができるまで待つ（Ｓ１３５）。命令実行処理を実行することによってシナリオのＩ番目の命令のＰ番目のリソースに対応する命令キューに空きができると、制御部１１はＳ１４０の処理から命令キュー処理を再開する。
【００２５】
Ｓ１４５にて変数Ｐをインクリメントした後、制御部１１はＳ１２０の処理に戻る。Ｓ１２０においてシナリオのＩ番目の命令にＰ番目のリソースがないと判定された場合、すなわち本実施形態においてはリソース２つ分の上述の処理を終えた場合は、制御部１１は変数Ｉをインクリメントし（Ｓ１５０）、Ｓ１１０の処理に戻る。Ｓ１１０においてシナリオのＩ番目に命令がないと判定される場合、すなわちシナリオに含まれる全ての命令の命令キューへの振り分けが終了した場合は、制御部１１は命令キュー処理を終了する。
【００２６】
図５Ａは、図３に示すシナリオＳに基づいて命令キュー処理を実行した結果、ＲＡＭに生成される命令キューを示している。なお、本実施形態では各命令キューに格納できる命令の最大個数は９個以上であることを前提にして説明する（すなわち、図４のＳ１３５で命令キュー処理を待つことなく命令キュー処理を実行し終了することができるものとする）。命令キュー処理によって生成された各命令キューにはそれぞれ番号が割り振られる。ここで、Ｑ番目の命令キューを、命令キューＱと表記する。本実施形態では命令キュー１は右アーム２３を占有する命令を実行順に格納するキューである。命令キュー２は左アーム２４を占有する命令を実行順に格納するキューである。命令キュー３は第一のワークＷ１を占有する命令を実行順に格納するキューである。命令キュー４は第二のワークＷ２を占有する命令を実行順に格納するキューである。命令キュー５は第一の位置Ｐ１を占有する命令を実行順に格納するキューである。命令キュー６は第二の位置Ｐ２を占有する命令を実行順に格納するキューである。なお本実施形態においてはＱ≧７の命令キューＱは存在しない。
【００２７】
シナリオＳにて指定された１番目の命令は「移動する（右アーム，第一のワーク）」である。図５や後述する図８，図９では、命令キューに格納された命令を、シナリオＳで指定された命令の順番を示す数字と、当該数字の下に示す（）で囲まれた２つの数字とで表している。（）で囲まれた２つの数字が、命令において指定されたリソースに対応する命令キューの番号を示している。図５Ａでは、シナリオＳの１番目の命令によって占有されるリソースである右アーム２３に対応する命令キュー１の先頭にシナリオＳの１番目の命令である「移動する（右アーム，第一のワーク）」が格納されていることを示している。また、同じくシナリオＳの１番目の命令によって占有される２番目のリソースである第一のワークＷ１に対応する命令キュー３の先頭にもシナリオＳの１番目の命令「移動する（右アーム，第一のワーク）」が格納されていることを示している。
【００２８】
次に、命令実行処理について説明する。命令実行処理は、各リソースに対応する命令キューの先頭の命令を全ての命令キューが空になるまで繰り返しチェックして、実行開始できる命令については実行開始させ、実行完了した命令については当該命令が格納されている命令キューの先頭から削除する処理である。はじめに制御部１１は、変数Ｑに「１」を代入するとともに、変数ＥＭＰＴＹに「１」を代入する（Ｓ２００）。変数Ｑは前述したように、各命令キューを示す番号に対応する。変数ＥＭＰＴＹは、値が「１」である場合は全リソースに対応する命令キューが空であることを示し、後述するように値が「０」である場合は少なくともいずれかのリソースに対応する命令キューが空でないことを示す変数である。続いて制御部１１は、命令キューＱが存在するか否かを判定し（Ｓ２０５）、命令キューＱが存在する場合は、命令キューが空であるか否か、すなわち、命令キューＱの先頭に命令が存在するか否かを判定する（Ｓ２１０）。命令キューＱの先頭の命令を以降では命令Ｃと呼ぶ。Ｓ２１０にて命令キューＱの先頭に命令Ｃが存在すると判定された場合、制御部１１は変数ＥＭＰＴＹに「０」を代入し（Ｓ２１５）、実行可否判定処理を行う（Ｓ２２０）。
【００２９】
図７は実行可否判定処理の流れを示すフローチャートである。はじめに制御部１１は、変数ｐに「１」を代入する（Ｓ３００）。なお、命令キュー処理で使用される変数Ｐと実行可否判定処理で使用される変数ｐとは別の変数である。続いて制御部１１は、命令Ｃ（命令キューＱの先頭の命令）のｐ番目のリソースが存在するか否かを判定し（Ｓ３０５）、存在する場合はＳ１２５と同様に命令Ｃのｐ番目のリソースは適正か否かを判定する（Ｓ３１０）。Ｓ３１０において命令Ｃのｐ番目のリソースの値が適正でないと判定された場合、制御部１１はＳ３２０の処理に進む。Ｓ３１０において命令Ｃのｐ番目のリソースの値が適正であると判定された場合、制御部１１は命令Ｃのｐ番目のリソースに対応する命令キューの先頭が命令Ｃであるか否かを判定し（Ｓ３１５）、先頭が命令Ｃでない場合は制御部１１は命令Ｃはまだ実行不可であると判定して（Ｓ３２５）、実行可否判定処理を終了する。
【００３０】
Ｓ３１５において命令Ｃのｐ番目のリソースに対応する命令キューの先頭に命令Ｃが格納されていると判定された場合、制御部１１は変数ｐをインクリメントし（Ｓ３２０）、Ｓ３０５の処理に戻る。Ｓ３０５において命令Ｃのｐ番目のリソースが存在しないと判定された場合、すなわち命令Ｃのリソース２つ分の処理を終えた場合、制御部１１は命令Ｃは実行可と判定し（Ｓ３３０）、実行可否判定処理を終了する。図６の命令実行処理の説明に戻る。続いて制御部１１は、Ｓ２２０の実行可否判定処理において命令Ｃは実行可であると判定されたか否かを判定し（Ｓ２２５）、命令Ｃは実行可と判定されている場合は、制御部１１は命令Ｃの実行を開始させる（Ｓ２３０）。具体的には、制御部１１は、命令Ｃの実行を開始させるための情報を外部Ｉ／Ｆを介してアームコントローラー２１またはアームコントローラー２２に送信する。アームコントローラー２１またアームコントローラー２２は当該情報に基づいて該当する駆動部品を駆動する。その結果、動作主体としての右アーム２３または左アーム２４を命令通りに動作させることができる。
【００３１】
続いて制御部１１は、アームコントローラー２１またはアームコントローラー２２から通知される命令の実行完了を示す情報に基づいて、実行完了した命令の各リソースに対応する命令キュー内の先頭の命令（すなわち実行完了した命令）を削除する（Ｓ２３５）。なお、Ｓ２３５を実行する時点で実行完了した命令がない場合は、制御部１１はＳ２３５では何もせずにＳ２４０の処理に移行する。制御部１１は、Ｓ２１０において命令キューＱの先頭に命令Ｃが存在しないと判定された場合、および、Ｓ２２５において命令Ｃは実行不可と判定された場合も、Ｓ２３５の処理を実行する。命令実行処理は、シナリオに記載された全ての命令の実行が完了しない限り、繰り返されるループ処理である。Ｓ２３５はループ処理が繰り返される度に実行される処理であるので、命令の実行完了を監視し、完了していれば命令を命令キューから削除する処理を実行することができる。続いて制御部１１は変数Ｑをインクリメントし（Ｓ２４０）、Ｓ２０５の処理に戻る。Ｓ２０５において命令キューＱが存在しないと判定された場合、すなわち本実施形態においては６つの命令キューの先頭のチェックを一巡した場合、制御部１１は、変数ＥＭＰＴＹの値が「１」であるか否かを判定する（Ｓ１５０）。Ｓ１５０において変数ＥＭＰＴＹの値が「１」でない場合、制御部１１はＳ２００の処理に戻り、変数ＥＭＰＴＹの値が「１」である場合、制御部１１は命令実行処理を終了する。以上、命令実行処理について説明した。次に、シナリオＳを対象に命令キュー処理を実行することによって生成された図５Ａに示す命令キューに基づいて、命令実行処理を実行する過程の各命令キューの状態について説明する。なお本実施形態では、各命令の実行に要する所要時間（実行開始から実行終了までの時間）は同程度であるとする。
【００３２】
図５，図８および図９は、命令実行処理の実行過程における各命令キューの状態を示す図である。まず図５Ａは上述したように命令キュー処理によってシナリオＳに指定された全ての命令が、当該命令が占有するリソースに対応する命令キューに実行順に振り分けられた状態を示している。この状態で、制御部１１が命令実行処理のＳ２００〜Ｓ２２５を実行すると、命令キュー１の先頭に格納されている命令であってシナリオＳにおいて実行順の１番目に指定されている命令の２つのリソースに対応する命令キュー（命令キュー１と命令キュー３）のそれぞれの先頭に、シナリオＳの１番目の命令が格納されているので、Ｓ２２５ではシナリオＳの１番目の命令を実行可と制御部１１は判定する。そのため、制御部１１はシナリオＳの１番目の命令の実行を開始させる。直後のＳ２３５ではシナリオＳの１番目の命令が実行完了していれば当該命令を命令キュー１と命令キュー３とから削除するが、実行完了していない場合は削除せずに、Ｓ２４０で変数ＱをインクリメントしてＳ２１０からの処理を繰り返していく。変数Ｑ＝３のとき、すなわち、命令キュー３の先頭の命令をチェックするとき、シナリオＳの１番目の命令が実行完了していなければ命令キュー３の先頭にはまだシナリオＳの１番目の命令が存在しているが、制御部１１は開始させた命令を記憶しておき、一旦実行開始させた命令は再び実行開始させない。
【００３３】
シナリオＳの１番目の命令が実行完了すると制御部１１がＳ２３５にて命令キュー１と命令キュー３の先頭からシナリオＳの１番目の命令を削除する。図５ＢはシナリオＳの１番目の命令を削除後の各命令キューを示している。図５ＢではシナリオＳの２番目の命令が命令実行可となったので、制御部１１は前述と同様にシナリオＳの２番目の命令の実行を開始させ、実行完了すると命令キュー１と命令キュー３とからシナリオＳの２番目の命令を削除する。図８Ａは削除後の各命令キューを示している。図８ＡではシナリオＳの３番目の命令が実行可となったので、制御部１１は前述と同様にシナリオＳの３番目の命令の実行を開始させ、実行完了すると命令キュー１と命令キュー５とからシナリオＳの３番目の命令を削除する。図８Ｂは削除後の各命令キューを示している。制御部１１が、前述と同様にシナリオＳの４番目の命令の実行を開始させ実行が完了した後、４番目の命令を命令キュー１と命令キュー３とから削除すると、各命令キューは図８Ｃに示す状態となる。
【００３４】
図８Ｃに示す状態においては、シナリオＳの５番目の命令が、当該命令が占有するリソースの一つである左アーム２４に対応する命令キュー２と、当該命令が占有するもう一つのリソースである第一のワークＷ１に対応する命令キュー３のそれぞれにおいて先頭に格納されているので、制御部１１は実行可否判定処理において当該命令を実行可と判定しＳ２３０において当該命令の実行を開始させる。また、シナリオＳの５番目の命令の実行が開始されまだ終了していない状態のとき、シナリオＳの９番目の命令も、当該命令が占有するリソースの一つである右アーム２３に対応する命令キュー１と、当該命令が占有するもう一つのリソースである第二のワークＷ２に対応する命令キュー４のそれぞれにおいて先頭に格納されているので、制御部１１は実行可否判定処理において当該命令を実行可と判定しＳ２３０において当該命令の実行を開始させる。したがって、シナリオＳの５番目の命令と９番目の命令は、並行して実行されることになる。
【００３５】
シナリオＳの５番目の命令が実行完了すると制御部１１は命令キュー２と命令キュー３とからシナリオＳの５番目の命令を削除する。その結果、命令キュー２と命令キュー３の先頭の命令はシナリオＳの６番目の命令となる。シナリオＳの６番目の命令が、当該命令が占有するリソースに対応する命令キューのそれぞれの先頭にあるので、制御部１１はシナリオＳの６番目の命令の実行を開始させる。また、シナリオＳの９番目の命令が実行完了すると制御部１１は命令キュー１と命令キュー４とからシナリオＳの９番目の命令を削除する。図９Ａは削除後の各キューの状態を示している。命令キュー１と命令キュー４とからシナリオＳの９番目の命令を削除することにより、命令キュー１と命令キュー４の先頭の命令は、シナリオＳの１０番目の命令となる。制御部１１はシナリオＳの１０番目の命令を実行可と判定し当該命令の実行を開始させる。以降、同様にして命令の実行を開始させ、実行完了したら命令を削除することを繰り返すことにより、図９Ｂに示すようにシナリオＳの７番目と１１番目の命令が並行して実行され、その後、図９Ｃに示すようにシナリオＳの８番目と１２番目の命令が並行して実行される。なお、本実施形態では各命令の実行に要する所要時間は同程度であることを前提としているが、もちろん各命令の所用時間はそれぞれ異なっていても良い。
【００３６】
図１０は、図５Ａに示す命令キューに基づいて命令実行処理を実行する場合の命令の実行順序を示す図である。このように本実施形態によると、シナリオの５番目の命令から８番目の命令と、シナリオの９番目の命令から１２番目の命令が並列に実行されることになる。したがって、シナリオＳで指定されている直列的な実行順に従って直列に命令を実行する場合と比較して、シナリオＳに記載されている全ての命令を実行するのに要する時間を短縮できる。また、各命令キューにはシナリオＳで規定された実行順に矛盾しない順序で命令が並べられるため、その命令キューに対応するリソースを占有する命令を、シナリオに記載された命令の実行順と矛盾しない順序で実行することができる。さらに、シナリオ作成者は、リソースを指定した命令を実行順に直列的に並べたシナリオを作成すれば、当該シナリオに基づいてロボット制御装置が並列に実行可能な命令を並列に実行してくれる。そのため並列に実行可能かどうかシナリオ作成者が考慮して並列実行するようにスケジューリングしたシナリオを作成する必要がないため、シナリオ作成者の作業負担を軽減することができる。
【００３７】
２．他の実施形態
尚、本発明の技術的範囲は、上述した実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。例えば、動作主体は、ロボットアームの他にも、ロボット全体の位置を移動させる足に相当する部分や、対象を撮影するカメラの画角を変更させる目に相当する部分など、他にもロボットを構成する様々なリソースに適用可能である。
【００３８】
また、前記実施形態では、命令で指定されるリソースの個数は２つであったが、３つ以上あってもよい。また、３つ以上の命令が並列に実行可となる場合、実行可になった３つ以上の命令のうち少なくとも２つの命令を並列に実行できればよい。もちろん実行可になった３以上の命令の全てを並列に実行させてもよい。
【符号の説明】
【００３９】
１００：ロボットシステム、１０：制御部、１１：制御部、１２：ロボット制御プログラム、１２ａ：シナリオ取得部、１２ｂ：命令キュー生成部、１２ｃ：命令実行部、２０：ロボット、２１：アームコントローラー、２２：アームコントローラー、２３：右アーム、２４：左アーム、Ｐ１：第一の位置、Ｐ２：第二の位置、Ｓ：シナリオ、Ｗ１：第一のワーク、Ｗ２：第二のワーク
【図１】
0005929061.tif 000002
【図２】
0005929061.tif 000003
【図３】
0005929061.tif 000004
【図４】
0005929061.tif 000005
【図５】
0005929061.tif 000006
【図６】
0005929061.tif 000007
【図７】
0005929061.tif 000008
【図８】
0005929061.tif 000009
【図９】
0005929061.tif 000010
【図１０】
0005929061.tif 000011