説明

ロボット制御装置、ロボットシステム、ロボット制御方法、ロボット制御プログラム

【課題】命令の並列実行について特に指定されていないシナリオを取得した場合も、並列実行の可否を判断して命令を実行できる技術を提供する。
【解決手段】複数の動作主体のそれぞれを互いに異なるリソースとして含む複数の前記リソースのうち少なくとも一つの前記動作主体を占有する命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、前記リソースごとに、当該リソースを占有する未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、占有する前記リソースの全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ロボット制御装置、ロボットシステム、ロボット制御方法、ロボット制御プログラムに関し、特にシナリオを解釈し実行する技術に関する。
【背景技術】
【0002】
従来、人間が指示した動作を行うロボットが知られている。一方で、特許文献1に記載されたロボットのように、人間が指示した動作以外の動作も追加的に並列に行うことができるロボットも知られている。このようなロボットにおいては、同時には実行できない動作や同時に実行すると悪影響を及ぼす動作の対応関係が予め規定されており、この対応関係を参照して同時に実行可能な動作を行うようにしている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−088282号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
作業者が行っていた作業を作業者の代わりに行う代替ロボットを導入する場合、作業者が行っていた作業の手順を、そのまま動作順に並べたシナリオを作成してロボットに処理させることができれば、シナリオ作成の手間は少なくて済む。一方、並列に実行可能な動作があるのであればそれらを並列に実行させることによって、シナリオの作業を効率的に実行させたい。並列に実行可能な命令は並列に実行するように定義したシナリオであれば、当該シナリオを取得したロボット制御装置は当該シナリオで定義された通りに命令を実行すれば効率的にシナリオの作業を実行できる。しかし、特許文献1に記載されているような対応関係を参照してシナリオを作成する作業は繁雑であり、シナリオ作成者にその煩雑な作業を負担させることになる。
本発明は、前記課題にかんがみてなされたもので、命令の並列実行について特に指定されていないシナリオを取得した場合も、並列実行の可否を判断して命令を実行できる技術を提供することを目的とする。
【課題を解決するための手段】
【0005】
前記目的を達成するために、本発明のロボット制御装置は、シナリオ取得手段と、命令キュー生成手段と、命令実行手段と、を備える。シナリオ取得手段は、複数の動作主体のそれぞれを互いに異なるリソースとして含む複数のリソースのうち少なくとも一つの動作主体を占有する命令を複数含んだシナリオを取得する。シナリオでは、その複数の命令の直列的な実行順が指定されている。ここでリソースとは、命令を実行するにあたりロボットが使用する要素を意味し、ロボットシステムが備える動作主体を少なくとも含む。またリソースは、ロボットシステム外部の要素であってもよい。リソースを占有するとは、リソースを排他的に使用することを意味する(すなわち複数の命令が単一のリソースを同時に使用できないことを意味する)。また、複数の動作主体は、互いに独立して動作することが可能である。
【0006】
命令キュー生成手段は、シナリオに基づいて、リソースごとに、当該リソースを占有する未実行の命令をシナリオで規定された実行順に従って並べた命令キューを生成する。すなわち、命令キュー生成手段は、シナリオで規定された命令を、当該命令が占有するリソースに対応して設けた命令キューに振り分け、各命令キューにおいてはシナリオで規定された実行順に従って命令を並べる。したがってあるリソースに着目すると、リソースに対応する命令キューに格納されている命令の順序は、当該リソースを占有する命令のシナリオで規定された順序と矛盾しない。すなわち、シナリオでn番目に実行することが規定された命令と同じリソースを占有するn+m番目の命令は、n番目の命令よりも実行順が後になるように命令キューに並べられる(nおよびmは自然数とする)。また命令キュー生成手段は、未実行の命令を並べた命令キューを生成することができればよく、例えばある命令が実行済みとなるごとに当該実行済みの命令を命令キューから削除してもよいし、あるいは、ある命令が実行済みとなるごとにシナリオから未実行の命令を抽出し、当該抽出した命令を並べた命令キューを生成してもよい。
【0007】
命令実行手段は、占有するリソースの全てに対応する命令キューにおいて実行順が最も先である命令を複数並列に実行させる。なお、「命令を複数並列に実行させる」、すなわち、複数の命令を並列に実行させることは、ある命令の実行期間と他の命令の実行期間との少なくとも一部が重複するように命令を実行させることを意味する。もちろん、命令実行手段は、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が一つである場合は、当該命令を一つ実行する。占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が3つ以上ある場合は、その全てを並列に実行させてもよいし、あるいはそのうちの少なくとも2つの命令を並列に実行させてもよい。
【0008】
本発明によると、占有する全てのリソースに対応する命令キューの先頭にある命令が2つ以上ある場合、当該命令(占有するリソースが異なる命令)を2つ以上並行して実行させることができる。さらに、各命令キューにはシナリオで規定された実行順に矛盾しない順序で命令が並べられるため、その命令キューに対応するリソースを占有する命令を、シナリオに記載された命令の実行順と矛盾しない順序で実行することができる。したがって本発明によると、命令の並列実行について特に指定されていないシナリオを取得した場合も、並列実行の可否を判断して命令を実行することができる。
【0009】
さらに、前記目的を達成するためのロボット制御装置において、複数のリソースは、命令に占有される複数の動作対象物のそれぞれを互いに異なるリソースとして含んでもよい。動作対象物は、動作主体による動作の対象物を意味する。
したがってこの場合、動作対象物に対してシナリオで規定された順序と矛盾しない順序で命令がなされることになる。
【0010】
さらに、前記目的を達成するためのロボット制御装置において、複数のリソースは、命令に占有される複数の動作位置のそれぞれを互いに異なるリソースとして含んでもよい。動作位置は、動作主体が動作の対象とする位置を意味する。
したがってこの場合、動作位置においてシナリオに規定された順序と矛盾しない順序で命令がなされることになる。
【0011】
さらに、前記目的を達成するためのロボット制御装置において、複数の動作主体のそれぞれは、互いに異なる複数のロボットアームのそれぞれであってもよい。
この場合、複数のロボットアームによって複数の命令を並列に実行することができる。
【0012】
さらに、前記目的を達成するためのロボット制御装置において、シナリオ取得手段は、シナリオ作成者によって指定されたリソースを占有する命令をシナリオ作成者によって指定された直列的な実行順に複数並べたシナリオを取得してもよい。
したがってシナリオ作成者は、リソースを指定した命令を実行順に直列的に並べたシナリオを作成するだけでよく、並列に実行可能かどうかシナリオ作成者が考慮して並列実行するようにスケジューリングしたシナリオを作成する必要がない。
【0013】
なお、請求項に記載された各手段の機能は、構成自体で機能が特定されるハードウェア資源、プログラムにより機能が特定されるハードウェア資源、又はそれらの組み合わせにより実現される。また、これら各手段の機能は、各々が物理的に互いに独立したハードウェア資源で実現されるものに限定されない。さらに、本発明は上述のロボット制御装置が備える各手段を含むロボットシステムとしても、ロボット制御方法としても、コンピューターに各機能を実現させるロボット制御プログラムとしても、またそのプログラムの記録媒体としても成立する。むろん、そのコンピュータープログラムの記録媒体は、磁気記録媒体であってもよいし光磁気記録媒体であってもよいし、今後開発されるいかなる記録媒体であってもよい。
【図面の簡単な説明】
【0014】
【図1】第一実施形態にかかるロボットシステムのブロック図。
【図2】第一実施形態にかかるロボットを示す模式図。
【図3】第一実施形態にかかるシナリオを示す図。
【図4】第一実施形態にかかる命令キュー処理を示すフローチャート。
【図5】(5A)および(5B)は第一実施形態にかかる命令キューを示す図。
【図6】第一実施形態にかかる命令実行処理を示すフローチャート。
【図7】第一実施形態にかかる実行可否判定処理を示すフローチャート。
【図8】(8A)〜(8C)は第一実施形態にかかる命令キューを示す図。
【図9】(9A)〜(9C)は第一実施形態にかかる命令キューを示す図。
【図10】第一実施形態にかかる命令の実行順序を示す図。
【発明を実施するための形態】
【0015】
以下、本発明の実施の形態を添付図面を参照しながら説明する。尚、各図において対応する構成要素には同一の符号が付され、重複する説明は省略される。
【0016】
1.第一実施形態
1−1.構成
図1は、本発明にかかるロボットシステム100の構成を示すブロック図である。ロボットシステム100は、PC(Personal Computer)10とロボット20とを備えている。PC10は、CPU,RAM,ROM等を備えた制御部11と、図示しないHDD(ハードディスク装置)、外部の機器と通信するためのUSB(Universal Serial Bus)等の外部I/F等を備えている。制御部11は、マウスやキーボード等の操作部400と、モニター等の表示部300と、外部I/Fを介して接続している。PC10のユーザーは操作部400を操作してPC10に指示を与えることができるとともに、PC10が表示する各種の情報を表示部300によって認識することができる。PC10は、ROMやHDDに記憶された各種のプログラムをRAMにロードしCPUで実行することができる。本実施形態ではこのプログラムの一つとして制御部11がロボット制御プログラム12を実行することにより、PC10をロボット制御装置として機能させることができる。PC10は外部I/Fを介してロボット20と各種信号を送受信することができる。
【0017】
図2はロボット20を示す模式図である。ロボット20は、アームコントローラー21,22と、右アーム23,左アーム24とを備えている。右アーム23および左アーム24は、腕部200や関節部201やハンド部202等をそれぞれに備えた所謂ロボットアームであり、動作対象物を「掴む」ことや「放す」こと、また、動作対象物や動作位置に「移動する」こと等の動作を、PC10からの指示に応じて行う動作主体である。それらの動作を行うために右アーム23および左アーム24は各種の駆動部品を備えている。アームコントローラー21は、制御部10から指示された命令に応じて対応するロボットアームである右アーム23を動作させるために各駆動部品の制御を行うとともに、命令に対応する動作が完了したことを制御部10に通知する。アームコントローラー22も同様に、制御部10から指示された命令に応じて対応する左アーム24を動作させるために駆動部品の制御を行うとともに、命令に対応する動作が完了したことを制御部10に通知する。図2に示す基部203は、右アーム23および左アーム24を間接的に支持する箱状の部材である。PC10はこの基部203の内部に設けられていても良い。またあるいは、ロボット20とは別体に設けられていてもよい。
【0018】
第一のワークW1と第二のワークW2は、右アーム23や左アーム24の動作の対象となる動作対象物である。第一の位置P1と第二の位置P2は、右アーム23や左アーム24による動作の対象となる位置(動作位置)として規定されている。例えばロボット20の位置を基準として予め第一の位置P1や第二の位置P2が相対的に規定されている。右アーム23、左アーム24、第一のワークW1、第二のワークW2、第一の位置P1、第二の位置P2は、それぞれリソースに相当する。
【0019】
ロボット制御プログラム12は、シナリオ取得部12a、命令キュー生成部12b、命令実行部12cを備える。シナリオ取得部12aは、シナリオ作成者が作成したシナリオSを示すデータを取得する機能を有する。本実施形態においてシナリオは、ロボット20に実行させる複数の命令を直列的な実行順を指定して並べたデータである。例えばシナリオ作成者が操作部400を操作して作成したシナリオSを示すデータを、制御部11は取得する。
【0020】
図3にシナリオSの一例を示す。図3に示すように本実施形態では、各命令は「動作の種類(リソース1、リソース2)」という形式で定義される。動作の種類には、「移動する」「掴む」「放す」などが含まれる。リソース1およびリソース2には動作を実行するにあたって占有するリソースが指定される。さらに詳細には、リソース1には動作主体に相当するリソースが指定される。リソース2には動作主体が行う動作の動作対象物や動作位置に相当するリソースが指定される。したがって例えば1番目の命令「移動する(右アーム,第一のワーク)」は、「右アーム23が第一のワークW1に移動する」という命令である。「第一のワークW1に移動する」ということは、第一のワークW1の位置を特定して、当該位置に移動するということを意味する。本実施形態のロボットシステム100は、このように命令において位置を指定しなくても、物を指定すればその物の位置を特定してアームを移動させることができる。なお、ワークが載置されている位置は、例えばロボット20が備える図示しない画像センサーの撮像画像に基づいて特定することができる。また、2番目の命令「掴む(右アーム,第一のワーク)」は、「右アーム23が第一のワークW1を掴む」という命令である。
【0021】
命令キュー生成部12bは、シナリオSに基づいて、同時に複数の命令によって使用されることが認められないリソースごとに命令キューを生成する機能を有する。命令キューには、当該命令キューに対応するリソースを占有する命令がシナリオSで指定された実行順に従って格納される。また、命令キュー生成部12bは、アームコントローラー21,22から通知された命令の実行完了を示す情報に基づいて、実行完了した命令を当該命令が占有するリソースに対応する命令キューの先頭から削除する機能を有する。
【0022】
命令実行部12cは、生成された命令キューに基づいて命令を実行させる機能を有し、より具体的には占有するリソースの全てに対応する命令キューにおいて実行順が最も先である命令を実行させる機能を有する。命令実行部12cは、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が一つである場合は、当該命令を一つ実行させる。また、命令実行部12cは、占有するリソースの全てに対応する命令キューにおいて実行順が先頭である命令が複数ある場合は、複数の当該命令を並列に実行させる。
【0023】
1−2.シナリオに基づくロボット制御
図4は命令キュー処理の流れを示すフローチャートである。図6は命令実行処理の流れを示すフローチャートである。命令キュー処理はシナリオSに基づいて前述の命令キューを生成する処理である。命令実行処理は、命令キュー処理で生成された命令キューに基づいて命令を実行する処理である。命令実行処理と命令キュー処理は並列に実行される。まず図4の命令キュー処理について説明する。はじめに制御部11は、シナリオSを取得する(S100)。続いて制御部11は変数Iに「1」を代入し(S105)、シナリオにI番目の命令が存在するか否かを判定する(S110)。変数Iは、シナリオで指定されている命令の実行順に対応する変数である(図3参照)。S110においてシナリオにI番目の命令があると判定される場合は、制御部11は変数Pに「1」を代入する(S115)。変数Pは、命令で指定されるリソース1およびリソース2に対応する変数である(図3参照)。続いて制御部11は、シナリオのI番目の命令にP番目のリソースが存在するか否かを判定し(S120)、存在する場合はP番目のリソースが適正であるか否かを判定する(S125)。具体的には制御部11は、ロボット20が使用できないようなリソースが含まれていないかどうかを判定する。なお、ロボット20が使用できるリソースは予め決められており、制御部11はその情報をもとにS125の判定を行う。
【0024】
S125においてシナリオのI番目の命令のP番目のリソースが適正であると判定された場合、制御部11は、P番目のリソースに対応する命令キューはフルであるか否かを判定する(S130)。すなわち、命令キューに格納する命令の最大個数分が既に命令キューに格納されているか否かを制御部は判定する。S130においてフルでない(空きがある)と判定された場合、制御部11はシナリオのI番目の命令のP番目のリソースに対応する命令キューの最後尾にシナリオのI番目の命令を追加し(S140)、変数Pをインクリメントする(S145)。S130においてフルであると判定された場合、制御部11はシナリオのI番目の命令のP番目のリソースに対応する命令キューに空きができるまで待つ(S135)。命令実行処理を実行することによってシナリオのI番目の命令のP番目のリソースに対応する命令キューに空きができると、制御部11はS140の処理から命令キュー処理を再開する。
【0025】
S145にて変数Pをインクリメントした後、制御部11はS120の処理に戻る。S120においてシナリオのI番目の命令にP番目のリソースがないと判定された場合、すなわち本実施形態においてはリソース2つ分の上述の処理を終えた場合は、制御部11は変数Iをインクリメントし(S150)、S110の処理に戻る。S110においてシナリオのI番目に命令がないと判定される場合、すなわちシナリオに含まれる全ての命令の命令キューへの振り分けが終了した場合は、制御部11は命令キュー処理を終了する。
【0026】
図5Aは、図3に示すシナリオSに基づいて命令キュー処理を実行した結果、RAMに生成される命令キューを示している。なお、本実施形態では各命令キューに格納できる命令の最大個数は9個以上であることを前提にして説明する(すなわち、図4のS135で命令キュー処理を待つことなく命令キュー処理を実行し終了することができるものとする)。命令キュー処理によって生成された各命令キューにはそれぞれ番号が割り振られる。ここで、Q番目の命令キューを、命令キューQと表記する。本実施形態では命令キュー1は右アーム23を占有する命令を実行順に格納するキューである。命令キュー2は左アーム24を占有する命令を実行順に格納するキューである。命令キュー3は第一のワークW1を占有する命令を実行順に格納するキューである。命令キュー4は第二のワークW2を占有する命令を実行順に格納するキューである。命令キュー5は第一の位置P1を占有する命令を実行順に格納するキューである。命令キュー6は第二の位置P2を占有する命令を実行順に格納するキューである。なお本実施形態においてはQ≧7の命令キューQは存在しない。
【0027】
シナリオSにて指定された1番目の命令は「移動する(右アーム,第一のワーク)」である。図5や後述する図8,図9では、命令キューに格納された命令を、シナリオSで指定された命令の順番を示す数字と、当該数字の下に示す()で囲まれた2つの数字とで表している。()で囲まれた2つの数字が、命令において指定されたリソースに対応する命令キューの番号を示している。図5Aでは、シナリオSの1番目の命令によって占有されるリソースである右アーム23に対応する命令キュー1の先頭にシナリオSの1番目の命令である「移動する(右アーム,第一のワーク)」が格納されていることを示している。また、同じくシナリオSの1番目の命令によって占有される2番目のリソースである第一のワークW1に対応する命令キュー3の先頭にもシナリオSの1番目の命令「移動する(右アーム,第一のワーク)」が格納されていることを示している。
【0028】
次に、命令実行処理について説明する。命令実行処理は、各リソースに対応する命令キューの先頭の命令を全ての命令キューが空になるまで繰り返しチェックして、実行開始できる命令については実行開始させ、実行完了した命令については当該命令が格納されている命令キューの先頭から削除する処理である。はじめに制御部11は、変数Qに「1」を代入するとともに、変数EMPTYに「1」を代入する(S200)。変数Qは前述したように、各命令キューを示す番号に対応する。変数EMPTYは、値が「1」である場合は全リソースに対応する命令キューが空であることを示し、後述するように値が「0」である場合は少なくともいずれかのリソースに対応する命令キューが空でないことを示す変数である。続いて制御部11は、命令キューQが存在するか否かを判定し(S205)、命令キューQが存在する場合は、命令キューが空であるか否か、すなわち、命令キューQの先頭に命令が存在するか否かを判定する(S210)。命令キューQの先頭の命令を以降では命令Cと呼ぶ。S210にて命令キューQの先頭に命令Cが存在すると判定された場合、制御部11は変数EMPTYに「0」を代入し(S215)、実行可否判定処理を行う(S220)。
【0029】
図7は実行可否判定処理の流れを示すフローチャートである。はじめに制御部11は、変数pに「1」を代入する(S300)。なお、命令キュー処理で使用される変数Pと実行可否判定処理で使用される変数pとは別の変数である。続いて制御部11は、命令C(命令キューQの先頭の命令)のp番目のリソースが存在するか否かを判定し(S305)、存在する場合はS125と同様に命令Cのp番目のリソースは適正か否かを判定する(S310)。S310において命令Cのp番目のリソースの値が適正でないと判定された場合、制御部11はS320の処理に進む。S310において命令Cのp番目のリソースの値が適正であると判定された場合、制御部11は命令Cのp番目のリソースに対応する命令キューの先頭が命令Cであるか否かを判定し(S315)、先頭が命令Cでない場合は制御部11は命令Cはまだ実行不可であると判定して(S325)、実行可否判定処理を終了する。
【0030】
S315において命令Cのp番目のリソースに対応する命令キューの先頭に命令Cが格納されていると判定された場合、制御部11は変数pをインクリメントし(S320)、S305の処理に戻る。S305において命令Cのp番目のリソースが存在しないと判定された場合、すなわち命令Cのリソース2つ分の処理を終えた場合、制御部11は命令Cは実行可と判定し(S330)、実行可否判定処理を終了する。図6の命令実行処理の説明に戻る。続いて制御部11は、S220の実行可否判定処理において命令Cは実行可であると判定されたか否かを判定し(S225)、命令Cは実行可と判定されている場合は、制御部11は命令Cの実行を開始させる(S230)。具体的には、制御部11は、命令Cの実行を開始させるための情報を外部I/Fを介してアームコントローラー21またはアームコントローラー22に送信する。アームコントローラー21またアームコントローラー22は当該情報に基づいて該当する駆動部品を駆動する。その結果、動作主体としての右アーム23または左アーム24を命令通りに動作させることができる。
【0031】
続いて制御部11は、アームコントローラー21またはアームコントローラー22から通知される命令の実行完了を示す情報に基づいて、実行完了した命令の各リソースに対応する命令キュー内の先頭の命令(すなわち実行完了した命令)を削除する(S235)。なお、S235を実行する時点で実行完了した命令がない場合は、制御部11はS235では何もせずにS240の処理に移行する。制御部11は、S210において命令キューQの先頭に命令Cが存在しないと判定された場合、および、S225において命令Cは実行不可と判定された場合も、S235の処理を実行する。命令実行処理は、シナリオに記載された全ての命令の実行が完了しない限り、繰り返されるループ処理である。S235はループ処理が繰り返される度に実行される処理であるので、命令の実行完了を監視し、完了していれば命令を命令キューから削除する処理を実行することができる。続いて制御部11は変数Qをインクリメントし(S240)、S205の処理に戻る。S205において命令キューQが存在しないと判定された場合、すなわち本実施形態においては6つの命令キューの先頭のチェックを一巡した場合、制御部11は、変数EMPTYの値が「1」であるか否かを判定する(S150)。S150において変数EMPTYの値が「1」でない場合、制御部11はS200の処理に戻り、変数EMPTYの値が「1」である場合、制御部11は命令実行処理を終了する。以上、命令実行処理について説明した。次に、シナリオSを対象に命令キュー処理を実行することによって生成された図5Aに示す命令キューに基づいて、命令実行処理を実行する過程の各命令キューの状態について説明する。なお本実施形態では、各命令の実行に要する所要時間(実行開始から実行終了までの時間)は同程度であるとする。
【0032】
図5,図8および図9は、命令実行処理の実行過程における各命令キューの状態を示す図である。まず図5Aは上述したように命令キュー処理によってシナリオSに指定された全ての命令が、当該命令が占有するリソースに対応する命令キューに実行順に振り分けられた状態を示している。この状態で、制御部11が命令実行処理のS200〜S225を実行すると、命令キュー1の先頭に格納されている命令であってシナリオSにおいて実行順の1番目に指定されている命令の2つのリソースに対応する命令キュー(命令キュー1と命令キュー3)のそれぞれの先頭に、シナリオSの1番目の命令が格納されているので、S225ではシナリオSの1番目の命令を実行可と制御部11は判定する。そのため、制御部11はシナリオSの1番目の命令の実行を開始させる。直後のS235ではシナリオSの1番目の命令が実行完了していれば当該命令を命令キュー1と命令キュー3とから削除するが、実行完了していない場合は削除せずに、S240で変数QをインクリメントしてS210からの処理を繰り返していく。変数Q=3のとき、すなわち、命令キュー3の先頭の命令をチェックするとき、シナリオSの1番目の命令が実行完了していなければ命令キュー3の先頭にはまだシナリオSの1番目の命令が存在しているが、制御部11は開始させた命令を記憶しておき、一旦実行開始させた命令は再び実行開始させない。
【0033】
シナリオSの1番目の命令が実行完了すると制御部11がS235にて命令キュー1と命令キュー3の先頭からシナリオSの1番目の命令を削除する。図5BはシナリオSの1番目の命令を削除後の各命令キューを示している。図5BではシナリオSの2番目の命令が命令実行可となったので、制御部11は前述と同様にシナリオSの2番目の命令の実行を開始させ、実行完了すると命令キュー1と命令キュー3とからシナリオSの2番目の命令を削除する。図8Aは削除後の各命令キューを示している。図8AではシナリオSの3番目の命令が実行可となったので、制御部11は前述と同様にシナリオSの3番目の命令の実行を開始させ、実行完了すると命令キュー1と命令キュー5とからシナリオSの3番目の命令を削除する。図8Bは削除後の各命令キューを示している。制御部11が、前述と同様にシナリオSの4番目の命令の実行を開始させ実行が完了した後、4番目の命令を命令キュー1と命令キュー3とから削除すると、各命令キューは図8Cに示す状態となる。
【0034】
図8Cに示す状態においては、シナリオSの5番目の命令が、当該命令が占有するリソースの一つである左アーム24に対応する命令キュー2と、当該命令が占有するもう一つのリソースである第一のワークW1に対応する命令キュー3のそれぞれにおいて先頭に格納されているので、制御部11は実行可否判定処理において当該命令を実行可と判定しS230において当該命令の実行を開始させる。また、シナリオSの5番目の命令の実行が開始されまだ終了していない状態のとき、シナリオSの9番目の命令も、当該命令が占有するリソースの一つである右アーム23に対応する命令キュー1と、当該命令が占有するもう一つのリソースである第二のワークW2に対応する命令キュー4のそれぞれにおいて先頭に格納されているので、制御部11は実行可否判定処理において当該命令を実行可と判定しS230において当該命令の実行を開始させる。したがって、シナリオSの5番目の命令と9番目の命令は、並行して実行されることになる。
【0035】
シナリオSの5番目の命令が実行完了すると制御部11は命令キュー2と命令キュー3とからシナリオSの5番目の命令を削除する。その結果、命令キュー2と命令キュー3の先頭の命令はシナリオSの6番目の命令となる。シナリオSの6番目の命令が、当該命令が占有するリソースに対応する命令キューのそれぞれの先頭にあるので、制御部11はシナリオSの6番目の命令の実行を開始させる。また、シナリオSの9番目の命令が実行完了すると制御部11は命令キュー1と命令キュー4とからシナリオSの9番目の命令を削除する。図9Aは削除後の各キューの状態を示している。命令キュー1と命令キュー4とからシナリオSの9番目の命令を削除することにより、命令キュー1と命令キュー4の先頭の命令は、シナリオSの10番目の命令となる。制御部11はシナリオSの10番目の命令を実行可と判定し当該命令の実行を開始させる。以降、同様にして命令の実行を開始させ、実行完了したら命令を削除することを繰り返すことにより、図9Bに示すようにシナリオSの7番目と11番目の命令が並行して実行され、その後、図9Cに示すようにシナリオSの8番目と12番目の命令が並行して実行される。なお、本実施形態では各命令の実行に要する所要時間は同程度であることを前提としているが、もちろん各命令の所用時間はそれぞれ異なっていても良い。
【0036】
図10は、図5Aに示す命令キューに基づいて命令実行処理を実行する場合の命令の実行順序を示す図である。このように本実施形態によると、シナリオの5番目の命令から8番目の命令と、シナリオの9番目の命令から12番目の命令が並列に実行されることになる。したがって、シナリオSで指定されている直列的な実行順に従って直列に命令を実行する場合と比較して、シナリオSに記載されている全ての命令を実行するのに要する時間を短縮できる。また、各命令キューにはシナリオSで規定された実行順に矛盾しない順序で命令が並べられるため、その命令キューに対応するリソースを占有する命令を、シナリオに記載された命令の実行順と矛盾しない順序で実行することができる。さらに、シナリオ作成者は、リソースを指定した命令を実行順に直列的に並べたシナリオを作成すれば、当該シナリオに基づいてロボット制御装置が並列に実行可能な命令を並列に実行してくれる。そのため並列に実行可能かどうかシナリオ作成者が考慮して並列実行するようにスケジューリングしたシナリオを作成する必要がないため、シナリオ作成者の作業負担を軽減することができる。
【0037】
2.他の実施形態
尚、本発明の技術的範囲は、上述した実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。例えば、動作主体は、ロボットアームの他にも、ロボット全体の位置を移動させる足に相当する部分や、対象を撮影するカメラの画角を変更させる目に相当する部分など、他にもロボットを構成する様々なリソースに適用可能である。
【0038】
また、前記実施形態では、命令で指定されるリソースの個数は2つであったが、3つ以上あってもよい。また、3つ以上の命令が並列に実行可となる場合、実行可になった3つ以上の命令のうち少なくとも2つの命令を並列に実行できればよい。もちろん実行可になった3以上の命令の全てを並列に実行させてもよい。
【符号の説明】
【0039】
100:ロボットシステム、10:制御部、11:制御部、12:ロボット制御プログラム、12a:シナリオ取得部、12b:命令キュー生成部、12c:命令実行部、20:ロボット、21:アームコントローラー、22:アームコントローラー、23:右アーム、24:左アーム、P1:第一の位置、P2:第二の位置、S:シナリオ、W1:第一のワーク、W2:第二のワーク

【特許請求の範囲】
【請求項1】
複数の動作主体のそれぞれを互いに異なるリソースとして含む複数の前記リソースのうち少なくとも一つの前記動作主体を占有する命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、
前記リソースごとに、当該リソースを占有する未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、
占有する前記リソースの全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、
を備えることを特徴とするロボット制御装置。
【請求項2】
複数の前記リソースは、前記命令に占有される複数の動作対象物のそれぞれを互いに異なる前記リソースとして含む、
ことを特徴とする請求項1に記載のロボット制御装置。
【請求項3】
複数の前記リソースは、前記命令に占有される複数の動作位置のそれぞれを互いに異なる前記リソースとして含む、
ことを特徴とする請求項1または請求項2に記載のロボット制御装置。
【請求項4】
複数の前記動作主体のそれぞれは、互いに異なる複数のロボットアームのそれぞれである、
ことを特徴とする請求項1〜請求項3のいずれかに記載のロボット制御装置。
【請求項5】
前記シナリオ取得手段は、シナリオ作成者によって指定された前記リソースを占有する前記命令を前記シナリオ作成者によって指定された前記直列的な実行順に複数並べた前記シナリオを取得する、
ことを特徴とする請求項1〜請求項4のいずれかに記載のロボット制御装置。
【請求項6】
複数の動作主体のそれぞれを互いに異なるリソースとして含む複数の前記リソースのうち少なくとも一つの前記動作主体を占有する命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得手段と、
前記リソースごとに、当該リソースを占有する未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成手段と、
占有する前記リソースの全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行手段と、
複数の前記動作主体と、
を備えることを特徴とするロボットシステム。
【請求項7】
複数の動作主体のそれぞれを互いに異なるリソースとして含む複数の前記リソースのうち少なくとも一つの前記動作主体を占有する命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得工程と、
前記リソースごとに、当該リソースを占有する未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成工程と、
占有する前記リソースの全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行工程と、
を含むことを特徴とするロボット制御方法。
【請求項8】
複数の動作主体のそれぞれを互いに異なるリソースとして含む複数の前記リソースのうち少なくとも一つの前記動作主体を占有する命令を直列的な実行順に複数並べたシナリオを取得するシナリオ取得機能と、
前記リソースごとに、当該リソースを占有する未実行の前記命令を前記シナリオの前記実行順に従って並べた命令キューを生成する命令キュー生成機能と、
占有する前記リソースの全てに対応する前記命令キューにおいて前記実行順が最も先である前記命令を複数並列に実行させる命令実行機能と、
をコンピューターに実現させることを特徴とするロボット制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2013−59846(P2013−59846A)
【公開日】平成25年4月4日(2013.4.4)
【国際特許分類】
【出願番号】特願2011−201467(P2011−201467)
【出願日】平成23年9月15日(2011.9.15)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】