(57)【特許請求の範囲】
【請求項１】
複数のアームを有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、
前記ロボットを制御するロボット制御部と、
を含み、
前記記憶部は、
第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、使用される前記アームが異なる複数の候補プログラム情報を記憶し、
前記ロボットの作業エリアは、複数のエリアに分割され、
前記記憶部は、
前記第１の目標位置が属する移動元エリアと、前記第２の目標位置が属する移動先エリアとの組み合わせパターンに関連付けて、前記候補プログラム情報を記憶し、
前記ロボット制御部は、
前記組み合わせパターンに関連付けられて、前記記憶部に記憶される前記候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記ロボットを制御することを特徴とするロボット制御装置。
【請求項２】
請求項１において、
前記複数のエリアは、
前記ロボットの前記複数のアームのエンドポイントのうち、第ｉのアームのエンドポイントと第ｊのアームのエンドポイントが共に届く第ａのエリアと、前記第ｉのアームの前記エンドポイントだけが届く第ｂのエリアと、前記第ｊのアームの前記エンドポイントだけが届く第ｃのエリアを含み、
前記記憶部は、
前記第ａのエリアと前記第ｂのエリアと前記第ｃのエリアのうち、一つのエリアを前記移動元エリアとし、前記第ａのエリアと前記第ｂのエリアと前記第ｃのエリアのうち、一つのエリアを前記移動先エリアとする前記組み合わせパターンに関連付けて、前記候補プログラム情報を記憶することを特徴とするロボット制御装置。
【請求項３】
請求項１又は２において、
前記記憶部は、
前記ロボットの前記複数のアームのうちの第ｉのアームに設けられた把持部によりワークを把持した状態から、前記複数のアームのうちの第ｊのアームに設けられた把持部により前記ワークを把持する状態へ切り替える持ち替え命令を有する前記候補プログラム情報と、前記持ち替え命令を有さない前記候補プログラム情報の両方を記憶することを特徴とするロボット制御装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記ロボットは、
前記複数のアームを一体移動させる移動機構を有し、
前記記憶部は、
前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶することを特徴とするロボット制御装置。
【請求項５】
請求項４において、
前記複数のエリアは、
前記ロボットの前記複数のアームのエンドポイントのうち、第ｉのアームのエンドポイントと第ｊのアームのエンドポイントが共に届く第ａのエリアと、前記第ｉのアームの前記エンドポイントだけが届く第ｂのエリアと、前記第ｊのアームの前記エンドポイントだけが届く第ｃのエリアを含み、
前記第ｂのエリアは、前記移動機構を動かさない場合に前記第ｉのアームの前記エンドポイントが届く第ｄのエリアと、前記移動機構を動かす場合に前記第ｉのアームの前記エンドポイントが届く第ｅのエリアを含み、
前記第ｃのエリアは、前記移動機構を動かさない場合に前記第ｊのアームの前記エンドポイントが届く第ｆのエリアと、前記移動機構を動かす場合に前記第ｊのアームの前記エンドポイントが届く第ｇのエリアを含み、
前記記憶部は、
前記第ａのエリアと前記第ｄのエリアと前記第ｅのエリアと前記第ｆのエリアと前記第ｇのエリアのうち、一つのエリアを前記移動元エリアとし、前記第ａのエリアと前記第ｄのエリアと前記第ｅのエリアと前記第ｆのエリアと前記第ｇのエリアのうち、一つのエリアを前記移動先エリアとする前記組み合わせパターンに関連付けて、前記候補プログラム情報を記憶することを特徴とするロボット制御装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記ロボット制御部は、
前記候補プログラム情報に従って前記ロボットを動作させる場合のシミュレーション処理を行い、
前記シミュレーション処理の結果に基づいて、前記使用プログラム情報を選択することを特徴とするロボット制御装置。
【請求項７】
請求項６において、
前記ロボット制御部は、
複数の候補プログラム情報を組み合わせて仮動作プログラムを生成し、前記仮動作プログラムに従って前記ロボットを動作させる場合の前記シミュレーション処理を行い、
前記シミュレーション処理の結果に基づいて、複数の使用プログラム情報を選択し、
選択した前記複数の使用プログラム情報に基づいて、前記ロボットを制御することを特徴とするロボット制御装置。
【請求項８】
複数のアームを有し、前記複数のアームを一体移動させる移動機構を有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、
前記ロボットを制御するロボット制御部と、
を含み、
前記記憶部は、
第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶し、
前記ロボットの作業エリアは、複数のエリアに分割され、
前記記憶部は、
前記第１の目標位置が属する移動元エリアと、前記第２の目標位置が属する移動先エリアとの組み合わせパターンに関連付けて、前記候補プログラム情報を記憶し、
前記ロボット制御部は、
前記組み合わせパターンに関連付けられて、前記記憶部に記憶される前記候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記ロボットを制御することを特徴とするロボット制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボット制御装置等に関する。
【背景技術】
【０００２】
産業用ロボットを動作させるためには、例えばロボットの関節（ジョイント）をどのように変化させ、ロボットの手先（TCP：tool center point）をどの時刻にどの位置にもってゆくか、といった動作指令を逐一ロボットに与える必要がある。従来、このような動作指令は人間が記述しており、かつ、ロボットに動作指令を与えた後は、人間が確認しながらロボットを動作させる必要があった。人間が行うこの手続きを「教示（ティーチング：teaching）」と呼び、動作指令を人間が記述するための専用の言語を「ロボット言語」などと呼ぶ。従来では、教示を行うことにより初めて産業用ロボットを意図したように動作させることができた。
【０００３】
しかし、教示を行う場合に、指定した場所にロボットの手先を持ってゆくためには、ロボットの手先の位置（座標）をロボット言語で記述しなければならないが、この作業は非常にコストがかかるものであった。
【０００４】
そのため、動作指令作成コスト削減のために、例えば、ロボットのアームを人間の力で容易に動かせる状態になるように電力等を制御し、実際に人間がロボットの手を取って移動させて、目標位置を教える直接教示などが行われている。
【０００５】
しかし、実際の工程では、ロボットが部品（パーツ、ワーク）を取り上げる場合には、部品が置かれている場所が変わることが多く、直接教示により教えた目標位置に部品がない場合もある。例えば、ベルトコンベアーによって部品が運ばれてくるような場合には、部品の位置や向きが毎回変わることが多い。
【０００６】
そこで、このような場合には、カメラや３次元計測器などを用いて、ロボットの手先がどこにあるべきかを求めて、自動的にロボットの動作指令を作成する手法が用いられている。ロボットのアームが１本である場合には、このような手法を用いれば、部品やロボットの手先の位置が変わる場合でも、期待通りにロボットを動作させることが可能となる。
【０００７】
ロボットの動作プログラムの自動作成に関する発明としては、特許文献１や特許文献２に記載される従来技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−２６７７１９号公報
【特許文献２】特開２０００−１８１５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
複数のアームを有するロボット、例えば双腕ロボットを用いて、ワークを移動させる場合には、ロボットのどのハンドでワークを取りに行くか、どのハンドでワークを置くか、複数のハンド間で部品の持ち替えをすべきかなどといったことも判断する必要がある。さらに、ロボット自体の位置や向きを変更できる場合には、ロボットの位置や向きを変更すべきか否かといったことも判断する必要がある。
【００１０】
しかし、前述した特許文献１や特許文献２に記載された手法では、ロボットのアームが複数設けられ、ワークが同じ場所にあるとは限らない場合に、ロボットを作業者が意図した通りに制御できない場合がある。
【００１１】
本発明の幾つかの態様によれば、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させるための動作プログラムを作成できる動作プログラム作成装置、プログラム、ロボット制御システム及びロボットシステム等を提供することができる。
【課題を解決するための手段】
【００１２】
本発明の一態様は、複数のアームを有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、使用される前記アームが異なる複数の候補プログラム情報を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成する動作プログラム作成装置に関係する。
【００１３】
本発明の一態様では、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させるために用いられる候補プログラム情報を記憶する。またこの際に、使用されるアームが異なる候補プログラム情報を記憶しておく。
【００１４】
次に、このような候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行い、選択した使用プログラム情報に基づいて、動作プログラムを作成する。
【００１５】
よって、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させる場合に、ロボットのエンドポイントやワークの位置等に応じて、自動的に動作プログラムを作成することが可能となる。
【００１６】
また、本発明の一態様では、前記ロボットの作業エリアは、複数のエリアに分割され、前記記憶部は、前記第１の目標位置が属する移動元エリアと、前記第２の目標位置が属する移動先エリアとの組み合わせパターンに関連付けて、前記候補プログラム情報を記憶し、前記プログラム作成部は、前記組み合わせパターンに関連付けられた前記候補プログラム情報の中から、前記使用プログラム情報の前記選択処理を行って、前記動作プログラムを作成してもよい。
【００１７】
これにより、例えば上記の処理を行った後にロボットのハンド位置等を考慮して使用プログラム情報の選択処理を行えば、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択すること等が可能になる。
【００１８】
また、本発明の一態様では、前記複数のエリアは、前記ロボットの前記複数のアームのエンドポイントのうち、第ｉのアームのエンドポイントと第ｊのアームのエンドポイントが共に届く第ａのエリアと、前記第ｉのアームのエンドポイントだけが届く第ｂのエリアと、前記第ｊのアームのエンドポイントだけが届く第ｃのエリアを含み、前記記憶部は、前記第ａのエリアと前記第ｂのエリアと前記第ｃのエリアのうち、一つのエリアを前記移動元エリアとし、前記第ａのエリアと前記第ｂのエリアと前記第ｃのエリアのうち、一つのエリアを前記移動先エリアとする前記組み合わせパターンに関連付けて、前記候補プログラム情報を記憶してもよい。
【００１９】
これにより、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択すること等が可能になる。
【００２０】
また、本発明の一態様では、前記記憶部は、前記ロボットの前記複数のアームのうちの第ｉのアームに設けられた把持部によりワークを把持した状態から、前記複数のアームのうちの第ｊのアームに設けられた把持部により前記ワークを把持する状態へ切り替える持ち替え命令を有する前記候補プログラム情報と、前記持ち替え命令を有さない前記候補プログラム情報の両方を記憶してもよい。
【００２１】
これにより、例えば、持ち替え命令を用いる場合には、ロボット全体を移動又は回転させなくても、アームが一つである場合に比べて、ハンドが到達する領域を広く確保すること等が可能になる。
【００２２】
また、本発明の一態様では、前記ロボットは、複数のアームを一体移動させる移動機構を有し、前記記憶部は、前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶してもよい。
【００２３】
これにより、例えば、現在のロボットの位置及び向きでは、ハンドが届かない位置に目標位置がある場合に、一体移動命令を実行することにより、ハンドを移動させること等が可能になる。
【００２４】
また、本発明の一態様では、前記複数のエリアは、前記ロボットの前記複数のアームのエンドポイントのうち、第ｉのアームのエンドポイントと第ｊのアームのエンドポイントが共に届く第ａのエリアと、前記第ｉのアームの前記エンドポイントだけが届く第ｂのエリアと、前記第ｊのアームの前記エンドポイントだけが届く第ｃのエリアを含み、前記第ｂのエリアは、前記移動機構を動かさない場合に前記第ｉのアームの前記エンドポイントが届く第ｄのエリアと、前記移動機構を動かす場合に前記第ｉのアームの前記エンドポイントが届く第ｅのエリアを含み、前記第ｃのエリアは、前記移動機構を動かさない場合に前記第ｊのアームの前記エンドポイントが届く第ｆのエリアと、前記移動機構を動かす場合に前記第ｊのアームの前記エンドポイントが届く第ｇのエリアを含み、前記記憶部は、前記第ａのエリアと前記第ｄのエリアと前記第ｅのエリアと前記第ｆのエリアと前記第ｇのエリアのうち、一つのエリアを前記移動元エリアとし、前記第ａのエリアと前記第ｄのエリアと前記第ｅのエリアと前記第ｆのエリアと前記第ｇのエリアのうち、一つのエリアを前記移動先エリアとする前記組み合わせパターンに関連付けて、前記候補プログラム情報を記憶してもよい。
【００２５】
これにより、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に加え、移動機構の使用の有無に基づいて、使用プログラム情報を選択すること等が可能になる。
【００２６】
また、本発明の一態様では、前記プログラム作成部は、前記候補プログラム情報に従って前記ロボットを動作させる場合のシミュレーション処理を行い、前記シミュレーション処理の結果に基づいて、前記使用プログラム情報を選択してもよい。
【００２７】
これにより、例えば、最も所要時間が短い候補プログラム情報を、使用プログラム情報として選択し、動作プログラムを作成すること等が可能になる。
【００２８】
また、本発明の一態様では、前記プログラム作成部は、複数の候補プログラム情報を組み合わせて仮動作プログラムを生成し、前記仮動作プログラムに従って前記ロボットを動作させる場合の前記シミュレーション処理を行い、前記シミュレーション処理の結果に基づいて、前記複数の使用プログラム情報を選択し、選択した前記複数の使用プログラム情報に基づいて、前記動作プログラムを作成してもよい。
【００２９】
したがって、例えば、仮動作プログラム毎にシミュレーション処理を行うことにより、候補プログラム情報毎にシミュレーション処理を行う場合よりも、所要時間が短い動作プログラムを作成すること等が可能になる。
【００３０】
また、本発明の他の態様では、複数のアームを有し、前記複数のアームを一体移動させる移動機構を有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成してもよい。
【００３１】
また、本発明の他の態様では、上記各部としてコンピューターを機能させるプログラムに関係する。
【００３２】
また、本発明の他の態様では、複数のアームを有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、作成された前記動作プログラムに基づいて前記ロボットを制御するロボット制御部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、使用される前記アームが異なる複数の候補プログラム情報を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成することを特徴とするロボット制御システムに関係する。
【００３３】
また、本発明の他の態様では、複数のアームを有し、前記複数のアームを一体移動させる移動機構を有するロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、作成された前記動作プログラムに基づいて前記ロボットを制御するロボット制御部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成することを特徴とするロボット制御システムに関係する。
【００３４】
また、本発明の他の態様では、複数のアームを有するロボットと、前記ロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、作成された前記動作プログラムに基づいて前記ロボットを制御するロボット制御部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、使用される前記アームが異なる複数の候補プログラム情報を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成することを特徴とするロボットシステムに関係する。
【００３５】
また、本発明の他の態様では、複数のアームを有し、前記複数のアームを一体移動させる移動機構を有するロボットと、前記ロボットに対する命令を構成要素とする候補プログラム情報を記憶する記憶部と、前記候補プログラム情報に基づいて、前記ロボットの動作プログラムを作成するプログラム作成部と、作成された前記動作プログラムに基づいて前記ロボットを制御するロボット制御部と、を含み、前記記憶部は、第１の目標位置から第２の目標位置に、前記ロボットのエンドポイントを移動させるために用いられる前記候補プログラム情報として、前記移動機構を動かす一体移動命令を有する前記候補プログラム情報と、前記一体移動命令を有さない前記候補プログラム情報の両方を記憶し、前記プログラム作成部は、前記記憶部に記憶される前記複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した前記使用プログラム情報に基づいて、前記動作プログラムを作成することを特徴とするロボットシステムに関係する。
【図面の簡単な説明】
【００３６】
【図１】本実施形態のシステム構成図。
【図２】本実施形態の動作プログラム作成装置の構成図。
【図３】本実施形態のロボット制御システム及びロボットシステムの構成図。
【図４】図４（Ａ）〜図４（Ｃ）は、本実施形態で用いるロボットの一例。
【図５】図５（Ａ）〜図５（Ｃ）は、第１の目標位置から第２の目標位置へワークを移動させる例。
【図６】図６（Ａ）は命令の一例であり、図６（Ｂ）は候補プログラム情報の一例。
【図７】図７（Ａ）、図７（Ｂ）は、複数のエリアの一例。
【図８】組み合わせパターンに関連付けて記憶する候補プログラム情報の説明図。
【図９】ハンドの到達域に基づいて分割されたエリアの説明図。
【図１０】図１０（Ａ）、図１０（Ｂ）は、一体移動を行う場合のハンドの到達域に基づいて分割されたエリアの説明図。
【図１１】図１１（Ａ）〜図１１（Ｃ）は、一体移動命令を有する動作プログラムを実行するロボットの説明図。
【図１２】シミュレーション処理結果の説明図。
【図１３】図１３（Ａ）〜図１３（Ｃ）は、仮動作プログラムによるシミュレーション処理の説明図。
【図１４】本実施形態の処理の流れを説明するフローチャート。
【発明を実施するための形態】
【００３７】
以下、本実施形態について説明する。まず、本実施形態の概要を説明し、次に本実施形態のシステム構成例について説明する。そして、本実施形態の手法について具体例を交えつつ詳細に説明し、最後に、フローチャートを用いて本実施形態の処理の流れについて説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また、本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【００３８】
１．概要
産業用ロボットを動作させるためには、例えばロボットの関節（ジョイント）をどのように変化させ、ロボットの手先（TCP：tool center point）をどの時刻にどの位置にもってゆくか、といった動作指令を逐一ロボットに与える必要がある。従来、このような動作指令は人間が記述しており、かつ、ロボットに動作指令を与えた後は、人間が確認しながらロボットを動作させる必要があった。人間が行うこの手続きを「教示（ティーチング：teaching）」と呼び、動作指令を人間が記述するための専用の言語を「ロボット言語」などと呼ぶ。従来では、教示を行うことにより初めて産業用ロボットを意図したように動作させることができた。
【００３９】
しかし、教示を行う場合に、指定した場所にロボットの手先を持ってゆくためには、ロボットの手先の位置（座標）をロボット言語で記述しなければならないが、この作業は非常にコストがかかるものであった。
【００４０】
そのため、動作指令作成コスト削減のために、例えば、ロボットのアームを人間の力で容易に動かせる状態になるように電力等を制御し、実際に人間がロボットの手を取って移動させて、目標位置を教える直接教示などが行われている。
【００４１】
しかし、実際の工程では、ロボットが部品（パーツ）を取り上げる場合には、部品が置かれている場所が変わることが多く、直接教示により教えた目標位置に部品がない場合もある。例えば、ベルトコンベアーによって部品が運ばれてくるような場合には、部品の位置や向きが変わることが多い。
【００４２】
そこで、このような場合には、カメラや３次元計測器などを用いて、ロボットの手先がどこにあるべきかを求めて、自動的にロボットの動作指令を出力する手法が用いられている。ロボットのアームが１本である場合には、このような手法を用いれば、部品やロボットの手先の位置が変わる場合でも、期待通りにロボットを動作させることが可能となる。
【００４３】
ここで、複数のアームを有するロボットを用いて、ワークを移動させるような場合について考える。その一例として図１に、２本のアーム３２０と２つのハンド３３０を有するロボット３００を用いて、ワーク５００を移動させる様子を示す。図１では、ロボット制御システム２００により、双腕ロボット３００の動作プログラムを作成して、作成した動作プログラムに基づいて、ロボット３００を制御している。動作プログラムの詳細については、後述する。
【００４４】
図１のロボット３００のような複数のアームを有する双腕ロボットを用いてワークを移動させる場合には、ロボットのどのハンドでワークを取りに行くか、どのハンドでワークを置くか、複数のハンド間で部品の持ち替えをすべきかなどといったことも判断する必要がある。さらに、ロボット自体の位置や向きを変更できる場合には、ロボットの位置や向きを変更すべきか否かといったことも判断する必要がある。
【００４５】
しかし、前述した特許文献１や特許文献２に記載された手法では、ロボットのアームが複数設けられ、ワークが同じ場所にあるとは限らない場合に、ロボットを作業者が意図した通りに制御できない場合がある。具体的には、後述する図５（Ａ）〜図５（Ｃ）のような場合である。
【００４６】
そこで、本実施形態の動作プログラム作成装置では、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させるための動作プログラムを自動的に作成する。
【００４７】
２．システム構成例
２．１  動作プログラム作成装置の構成例
本実施形態の動作プログラム作成装置の構成例を図２に示す。動作プログラム作成装置１００は、プログラム作成部１１０と、記憶部１２０と、を含む。また、プログラム作成部１１０は、使用プログラム選択部１１２と、シミュレーション処理部１１４と、動作プログラム作成部１１６と、を含む。なお、動作プログラム作成装置１００及びプログラム作成部１１０は、図２の構成に限定されず、これらの一部の構成要素を省略したり、他の構成要素を追加したりするなどの種々の変形実施が可能である。
【００４８】
ここで、動作プログラム作成装置１００の各部について説明する。
【００４９】
まず、プログラム作成部１１０は、後述する記憶部１２０に記憶された候補プログラム情報に基づいて、複数のアームを有するロボットを動作させるための動作プログラムを作成する。
【００５０】
次に、使用プログラム選択部１１２は、後述する記憶部１２０に候補プログラム情報が複数記憶されている場合に、複数の候補プログラム情報の中から、動作プログラムの生成に用いる使用プログラム情報を選択する。
【００５１】
そして、シミュレーション処理部１１４は、使用プログラム情報又は後述する仮動作プログラムに基づいて、ロボットを動作させた場合のシミュレーション等を行う。
【００５２】
さらに、動作プログラム作成部１１６は、使用プログラム選択部１１２により選択された使用プログラム情報に基づいて、動作プログラムを作成する。
【００５３】
これらのプログラム作成部１１０及び使用プログラム選択部１１２と、シミュレーション処理部１１４と、動作プログラム作成部１１６の機能は、各種プロセッサー（ＣＰＵ等）、ＡＳＩＣ（ゲートアレイ等）などのハードウェアーや、プログラムなどにより実現できる。
【００５４】
また、記憶部１２０は、後述する候補プログラム情報などのデータベースを記憶したり、プログラム作成部１１０等のワーク領域となるもので、その機能はＲＡＭ等のメモリーやＨＤＤ（ハードディスクドライブ）などにより実現できる。
【００５５】
２．２  ロボット制御システム及びロボットシステムの構成例
図３に本実施形態のロボット制御システム及びこれを含むロボットシステムの構成例を示す。ロボット制御システム２００は、プログラム作成部１１０と、記憶部１２０と、ロボット制御部２３０と、入力部（Ｉ／Ｆ部）２４０と、を含む。また、ロボットシステム４００は、ロボット制御システム２００と、ロボット３００と、を含む。さらに、ロボット３００は、制御部３１０と、アーム３２０と、把持部（ハンド）３３０と、移動機構３４０と、Ｉ／Ｆ部３５０と、を含む。なお、ロボット制御システム２００と、これを含むロボットシステム４００と、ロボット３００は、図３の構成に限定されず、これらの一部の構成要素を省略したり、他の構成要素を追加したりするなどの種々の変形実施が可能である。また、プログラム作成部１１０及び記憶部１２０は、前述した動作プログラム作成装置１００と同様の構成でも良い。
【００５６】
ここで、ロボット制御システム２００の各部について説明する。
【００５７】
まず、ロボット制御部２３０は、プログラム作成部１１０により作成された動作プログラムに基づいて、ロボット３００を制御する。
【００５８】
そして、入力部（Ｉ／Ｆ部）２４０は、ロボット制御システム２００に対する作業者からの入力を受け付けるためや、ロボット制御システム２００とロボット３００間で情報をやり取りするためのインターフェースである。作業者からの入力等を受け付ける場合には、入力部（Ｉ／Ｆ部）２４０は、スイッチやボタン、キーボード或いはマウス等から構成されてもよい。
【００５９】
次に、ロボット３００の各部について説明する。
【００６０】
まず、制御部３１０は、ロボット制御部２３０からの情報に基づいて、ロボット３００の各部（アーム３２０及びハンド３３０、移動機構３４０等）の制御を行う。
【００６１】
ここで、アーム３２０とは、ロボット３００のパーツであって、一つ以上の関節を含む可動パーツのことをいう。また、アーム３２０のエンドポイントとは、アーム３２０の先端部分のポイントであって、ロボット３００のハンド３３０以外の他の部分と接続されていない部分のことをいう。なお、アーム３２０のエンドポイントは、ロボット３００のエンドポイントのうちの一つであり、ロボット３００のエンドポイントとは、ロボット３００の先端部のことをいう。
【００６２】
さらに、把持部（ハンド）３３０とは、ワーク５００を把持したり、持ち上げたり、吊り上げたり、吸着させたりするために用いる部品のことをいう。把持部（ハンド）３３０は、ハンドであってもよいし、フックであってもよいし、吸盤等であってもよい。なお、アームのエンドポイントの位置は、ハンドの位置としてもよい。さらに、１本のアームに対して、複数のハンドを設けても良い。
【００６３】
また、移動機構３４０とは、ロボット３００全体を移動させたり、ロボット３００全体の向きを変えたりする機構のことである。
【００６４】
そして、Ｉ／Ｆ部３５０は、ロボット制御システム２００とロボット３００間で情報をやり取りするためのインターフェースである。
【００６５】
なお、ロボット制御部２３０及び制御部３１０の機能は、各種プロセッサー（ＣＰＵ等）、ＡＳＩＣ（ゲートアレイ等）などのハードウェアーや、プログラムなどにより実現できる。また、入力部（Ｉ／Ｆ部）２４０及びＩ／Ｆ部３５０は、有線通信または無線通信を行う通信部であってもよい。
【００６６】
最後に、本実施形態の具体例を説明する際に用いる双腕ロボットを図４（Ａ）〜図４（Ｃ）に示す。図４（Ａ）に示すように、ロボットＲＢは、ＡＭＲとＡＭＬの２本のアームを持ち、アームＡＭＲはＪ０、Ｊ１、Ｊ２の３つの関節（ジョイント）を有しており、同様にアームＡＭＬは、Ｊ３、Ｊ４、Ｊ５の３つの関節を有している。図４（Ａ）に示す通り、Ｊ０とＪ３は、図の上方向に９０°まで可動し、Ｊ１、Ｊ２、Ｊ４、Ｊ５は図の上方向と下方向にそれぞれ１３５°ずつ、合わせて２７０°可動する。さらに、アームＡＭＲの先端にはハンドＨＤＲが、アームＡＭＬの先端にはハンドＨＤＬが取り付けられている。そして、ロボットＲＢの中心には、移動機構ＭＶＳが設けられており、ロボットＲＢ全体を３６０°回転移動させることができる。
【００６７】
各関節を動かすことにより、図４（Ｂ）に示すように、ハンドの位置を変えることができる。さらに、移動機構ＭＶＳを用いてロボットＲＢを回転させることにより、ハンドの到達可能領域を変えることができる。なお、具体例の説明を分かりやすくするために、ロボットＲＢを単純な構造のロボットとしているが、本実施形態で用いるロボットは本例に限定されるものではない。
【００６８】
３．本実施形態の手法
以上の本実施形態では、複数のアームを有するロボット３００に対する命令を構成要素とする候補プログラム情報を記憶する記憶部１２０と、候補プログラム情報に基づいて、ロボット３００の動作プログラムを作成するプログラム作成部１１０と、を含む。そして、記憶部１２０は、第１の目標位置から第２の目標位置に、ロボット３００のエンドポイントを移動させるために用いられる候補プログラム情報として、使用されるアームが異なる複数の候補プログラム情報を記憶する。さらに、プログラム作成部１１０は、記憶部１２０に記憶される複数の候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行って、選択した使用プログラム情報に基づいて、動作プログラムを作成する。
【００６９】
以下では、前述した教示などの従来手法と、本実施形態の手法とを比較しながら説明を行うため、図５（Ａ）〜図５（Ｃ）に、第１の目標位置から第２の目標位置へ従来手法を用いてワークを移動させる例を示す。なお、図５（Ａ）〜図５（Ｃ）のロボットＲＢは、図４（Ａ）に示すロボットと同じものである。
【００７０】
まず、図５（Ａ）のような位置に、ロボットＲＢと、第１の目標位置ＤＰ１と、第２の目標位置ＤＰ２があるとする。なお、ワークＷＫが置かれている位置が第１の目標位置ＤＰ１となる。
【００７１】
ここで、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２へワークＷＫを移動させるための動作プログラムとして、図５（Ｂ）に示すような動作プログラムを作業者があらかじめ用意しておく。また、第１の目標位置ＤＰ１と、第２の目標位置ＤＰ２は、ロボットを実際に制御する際に、ロボット制御システムに入力してもよいし、固定位置であってもよい。
【００７２】
ここでは、第１の目標位置ＤＰ１と第２の目標位置ＤＰ２が変わる場合について説明する。まず、第１の目標位置ＤＰ１と第２の目標位置ＤＰ２とが、図５（Ａ）に示すような位置にある場合には、図５（Ｂ）に示す動作プログラムを用いて、ワークＷＫを移動させることができる。
【００７３】
一方、図５（Ｃ）のような位置に、第１の目標位置ＤＰ１と第２の目標位置ＤＰ２がある場合には、図５（Ｂ）に示す動作プログラムを用いてもワークＷＫを移動させることができない。具体的に言えば、図５（Ｂ）の動作プログラムでは、まずロボットＲＢの右ハンドＨＤＲを第１の目標位置ＤＰ１に移動させることになるが、図５（Ｃ）では、第１の目標位置ＤＰ１は、左アームＡＭＬ側にあり、左ハンドＨＤＬを第１の目標位置ＤＰ１に移動させることはできても、右ハンドＨＤＲを移動させることはできない。したがって、図５（Ｂ）の動作プログラムは、図５（Ｃ）のような場合には対応できないということになる。
【００７４】
勿論、図５（Ｃ）のような場合に対応可能な動作プログラムを、図５（Ｂ）の動作プログラムとは別に作業者があらかじめ準備していれば良いが、その場合には準備コストが増加することとなる。
【００７５】
従って、本実施形態では、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させるために用いられる候補プログラム情報を記憶する。またこの際に、使用されるアームが異なる候補プログラム情報を記憶しておく。
【００７６】
以下で説明する具体例中では、ロボットのエンドポイントを、アームのエンドポイント又はハンドの位置と考える場合について説明するが、ロボットのエンドポイントはこれに限定されない。
【００７７】
ここで、第１の目標位置とは、ロボットのエンドポイントを現在位置から移動させる場合の目標位置のこという。具体的には、ワークの現在位置が第１の目標位置となる場合が多い。
【００７８】
一方、第２の目標位置とは、ロボットのエンドポイントを第１の目標位置から移動させる場合の目標位置のことをいう。具体的には、ワークの搬送先が第２の目標位置となる場合が多い。
【００７９】
ここで、候補プログラム情報とは、ロボットに対する命令を組み合わせた情報及びそのインデックスのこという。また、ロボットに対する命令とは、ロボット制御部２３０がロボットを制御する際の最小単位の情報のことをいう。言い換えれば、ロボットに対する命令とは、ロボットの一動作を表す情報を、ロボット言語で記述した情報のことをいう。
【００８０】
ロボットに対する命令の具体例としては、図６（Ａ）に示す命令１〜命令８のようなものがある。一方、候補プログラム情報の具体例としては、図６（Ｂ）に示す候補プログラム情報１〜候補プログラム情報４のようなものがある。例えば、候補プログラム情報１は、命令１と命令５と命令３と命令６とを組み合わせたものであり、命令１、命令５、命令３、命令６の順番で命令を実行することを示している。候補プログラム情報１に基づいてロボットを制御すれば、「ロボットの右ハンドを第１の目標位置に移動して（命令１）、ワークを掴み（命令５）、次に、ワークを掴んだままロボットの右ハンドを第２の目標位置へ移動させて（命令３）、ワークを置く（命令６）」という動作をロボットにさせることができる。他の候補プログラム情報も、図６（Ａ）に示した命令１〜命令８を組み合わせることによって作成することができる。
【００８１】
次に、このような候補プログラム情報の中から、使用プログラム情報を選択する選択処理を行い、選択した使用プログラム情報に基づいて、動作プログラムを作成する。
【００８２】
ここで、使用プログラム情報とは、動作プログラムを作成する際に使用される候補プログラム情報のことである。例えば、図６（Ｂ）の例で、右ハンドでワークを掴んで、左ハンドでワークを置きたい場合には、候補プログラム情報２を使用プログラム情報として選択する。
【００８３】
また、動作プログラムとは、ロボットが実行する一連の処理を表すプログラム又は情報のことをいう。多くの場合には、動作プログラムは、候補プログラム情報を組み合わせることによって作成される。
【００８４】
さらに、選択処理とは、複数の候補プログラム情報の中から、使用プログラム情報を選択する処理を含む処理のこという。選択処理の詳細については後述する。なお、候補プログラム情報が、一つしか記憶されていない場合もあり得るが、この場合には常に同じ候補プログラム情報を選択するか、選択処理を省略してもよい。
【００８５】
本実施形態では、以上のようにして、動作プログラムを作成する。これにより、複数のアームを有するロボットのエンドポイントを、第１の目標位置から第２の目標位置に移動させる場合に、ロボットのエンドポイントやワークの位置等に応じて、自動的に動作プログラムを作成することが可能となる。
【００８６】
したがって、例えば、図５（Ａ）の場合には、図６（Ｂ）の候補プログラム情報２を使用プログラム情報として選択し、図５（Ｃ）の場合には、図６（Ｂ）の候補プログラム情報４を使用プログラム情報として選択して動作プログラムを作成するため、図５（Ａ）の場合だけでなく図５（Ｃ）の場合にも対応が可能になる。さらに、作業者は、ロボットに対する命令と候補プログラム情報さえ準備すればよく、実際の作業現場の一つ一つの事例に合わせて、動作プログラムを作業者が作成する必要がなくなる。これによって、ロボットを作業現場に導入する際の準備コストを大幅に削減すること等が可能となる。
【００８７】
次に、前述した使用プログラム情報の選択処理においては、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択することが望ましい。これらの位置関係によっては、実行できない候補プログラム情報があるためである。例えば、図５（Ｃ）のような場合には、図６（Ｂ）の候補プログラム情報１や候補プログラム情報２は実行できない。
【００８８】
そこで、ロボット３００の作業エリアは、複数のエリアに分割され、記憶部１２０は、第１の目標位置が属する移動元エリアと、第２の目標位置が属する移動先エリアとの組み合わせパターンに関連付けて、候補プログラム情報を記憶してもよい。そして、プログラム作成部１１０は、組み合わせパターンに関連付けられた候補プログラム情報の中から、使用プログラム情報の選択処理を行って、動作プログラムを作成してもよい。
【００８９】
分割された複数のエリアの例を図７（Ａ）と図７（Ｂ）に示す。図７（Ａ）は、二つのエリアＡＲ１とＡＲ２とに作業エリアが分割されている。一方、図７（Ｂ）は、九つのエリアＡＲ１〜ＡＲ９に作業エリアが分割されている。本実施形態では、作業エリアの分割方法は任意であるが、作業エリアの分割方法に関する特徴的な例については後述する。また、ロボット制御システム等において、本実施形態の手法を利用する場合には、複数のエリアをあらかじめ求めて記憶しておいてもよいし、ロボットのエンドエフェクター（把持部）が変更された時に複数のエリアを求めてもよい。他にも、動作プログラムを作成する時に複数のエリアを求めても良い。
【００９０】
ここで、移動元エリアとは、第１の目標位置が属するエリアのことを言い、移動先エリアとは、第２の目標位置が属するエリアのことを言う。具体的には、図７（Ａ）では、第１の目標位置ＤＰ１はエリアＡＲ２に属しているため、エリアＡＲ２が移動元エリアとなる。一方、第２の目標位置ＤＰ２はエリアＡＲ１に属しているため、エリアＡＲ１が移動先エリアとなる。同様にして、図７（Ｂ）では、エリアＡＲ６が移動元エリアとなり、エリアＡＲ４が移動先エリアとなる。
【００９１】
また、組み合わせパターンとは、移動元エリアと移動先エリアの組み合わせのことをいう。以下では、組合せパターンを、「組合せパターン＝（移動元エリア、移動先エリア）」と記載する。具体的には、図７（Ａ）の場合には、組合せパターン＝（ＡＲ２、ＡＲ１）となり、図７（Ｂ）の場合には、組合せパターン＝（ＡＲ６、ＡＲ４）となる。
【００９２】
さらに、本実施形態では、組み合わせパターンに関連付けて、候補プログラム情報を記憶するが、その具体例を図８に示す。図８は、図７（Ａ）の場合における、組み合わせパターンと候補プログラム情報との関係を表にしたものである。また、記憶する候補プログラム情報及びこれに含まれる命令は、図６（Ａ）及び図６（Ｂ）に示したものとする。
【００９３】
例えば、組合せパターン＝（ＡＲ１、ＡＲ１）の場合には、図６（Ｂ）に示す候補プログラム情報のいずれも実行できる可能性があるため、候補プログラム情報１〜候補プログラム情報４を、組合せパターン＝（ＡＲ１、ＡＲ１）に関連付けて記憶する。一方、組合せパターン＝（ＡＲ２、ＡＲ２）の場合には、ロボットＲＢが図７（Ａ）の状態のままでは、左ハンドＨＤＬをエリアＡＲ２へ移動させることができないため、実行できる可能性のある候補プログラム情報１のみを、組合せパターン＝（ＡＲ２、ＡＲ２）に関連付けて記憶する。
【００９４】
なお、全ての候補プログラム情報を記憶しておき、候補プログラム情報のインデックスのみを組合せパターンに関連付けて記憶する等、様々な変形が可能であるが、これらの変形例も全て本実施形態に含まれるとする。
【００９５】
そして、プログラム作成部１１０は、現在の状態の組み合わせパターンに関連付けられた候補プログラム情報の中から、使用プログラム情報の選択処理を行って、動作プログラムを作成してよい。
【００９６】
これにより、例えば上記の処理を行った後にロボットのハンド位置等を考慮して使用プログラム情報の選択処理を行えば、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択すること等が可能になる。
【００９７】
さらに、前述したように、作業エリアの分割方法には様々な方法があるが、現在のロボットのハンド位置等に基づいて、複数のエリアを設定しておけば、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択することが可能になる。使用プログラム情報は、組み合わせパターンに関連付けられて記憶されているが、その組み合わせパターンがこれらの３つの要素（ロボットのハンドの位置等、第１の目標位置、第２の目標位置）に基づいて求められるためである。
【００９８】
そこで、複数のエリアは、ロボット３００の複数のアームのエンドポイントのうち、第ｉのアームのエンドポイントと第ｊのアームのエンドポイントが共に届く第ａのエリアと、第ｉのアームのエンドポイントだけが届く第ｂのエリアと、第ｊのアームのエンドポイントだけが届く第ｃのエリアを含んでもよい。そして、記憶部１２０は、第ａのエリアと第ｂのエリアと第ｃのエリアのうち、一つのエリアを移動元エリアとし、第ａのエリアと第ｂのエリアと第ｃのエリアのうち、一つのエリアを移動先エリアとする組み合わせパターンに関連付けて、候補プログラム情報を記憶してもよい。
【００９９】
なお、１≦ｉ，ｊ≦Ｌ（Ｌは自然数で、ｉ≠ｊ）であり、１≦ａ，ｂ，ｃ≦Ｍ（Ｍは自然数で、ａ≠ｂ≠ｃ）であるとする。説明の簡略化のため、以下では、Ｌ＝２、Ｍ＝３とする。
【０１００】
ここで、ロボットＲＢの各ハンドの到達域に基づいて分割されたエリアの具体例を図９に示す。第ａのエリアＡＲａは、ロボットＲＢの両方のハンドが共に届く領域である。また、第ｂのエリアＡＲｂは、ロボットＲＢの右ハンドだけが届く領域であり、第ｃのエリアＡＲｃは、ロボットＲＢの左ハンドだけが届く領域である。最後に、エリアＮＧＡＲは、現在のロボットＲＢの位置及び向きでは、どのハンドも移動させることができないエリアである。なお、一体移動命令が実行可能な場合については後述する。
【０１０１】
これにより、例えば、使用プログラム情報の選択処理において、組合せパターンから特定した複数の候補プログラム情報を、ロボットのハンド位置等に基づいてさらに限定するなどの処理をわざわざ行う必要がなくなり、このような処理を行わずとも、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に基づいて、使用プログラム情報を選択すること等が可能になる。
【０１０２】
また、記憶部１２０は、ロボット３００の複数のアームのうちの第ｉのアームに設けられた把持部によりワークを把持した状態から、複数のアームのうちの第ｊのアームに設けられた把持部によりワークを把持する状態へ切り替える持ち替え命令を有する候補プログラム情報と、持ち替え命令を有さない候補プログラム情報の両方を記憶してもよい。
【０１０３】
ここで、持ち替え命令とは、ワークを把持するハンドを他のハンドに切り替えて、ワークを持ち替えることを指示する命令のことをいう。具体的には、図６（Ａ）の命令７や命令８のことである。
【０１０４】
持ち替え命令を用いる場合には、例えば、ロボット全体を移動又は回転させなくても、アームが一つである場合に比べて、ハンドが到達する領域を広く確保することができる。また、例えばワークのＡ面を下にしてワークを把持した時に、Ａ面と異なるＢ面を下にしてワークを置くなど、ワークの向きを変更する動作を行うことができる。さらに、次の動作プログラムを実行する際に、ロボットの各部を初期位置に戻す処理の所要時間を短縮できる場合がある。本効果については、具体例を用いて後述する。他にも、第１のアームのハンドから第２のアームのハンドにワークを渡した後に、第２のアームを移動させつつ、第１のアームを他の目標位置に移動させるなど複数の命令を並行して実行すること等が可能になる。
【０１０５】
また、ロボット３００は、複数のアームを一体移動させる移動機構を有し、記憶部１２０は、移動機構を動かす一体移動命令を有する候補プログラム情報と、一体移動命令を有さない候補プログラム情報の両方を記憶してもよい。
【０１０６】
ここで、一体移動命令とは、ロボットの移動機構を動かす命令のこという。例えば、ロボット全体を並行移動させる命令や、ロボット全体を回転移動させる命令等がある。前述したように、図４（Ｃ）には、ロボット全体を回転移動させた一例を示している。一体移動命令を実行した場合には、ロボットのハンドの到達域が当然変化する。
【０１０７】
これにより、例えば、現在のロボットの位置及び向きでは、ハンドが届かない位置に目標位置がある場合に、一体移動命令を実行することにより、ハンドを移動させること等が可能になる。
【０１０８】
さらに、一体移動命令を実行可能な場合には、前述した作業エリアをさらに細かく分割することができる。
【０１０９】
すなわち、前述した第ｂのエリアは、移動機構を動かさない場合に第ｉのアームのエンドポイントが届く第ｄのエリアと、移動機構を動かす場合に第ｉのアームのエンドポイントが届く第ｅのエリアを含んでもよい。さらに、前述した第ｃのエリアは、移動機構を動かさない場合に第ｊのアームのエンドポイントが届く第ｆのエリアと、移動機構を動かす場合に第ｊのアームのエンドポイントが届く第ｇのエリアを含んでもよい。
【０１１０】
そして、記憶部１２０は、第ａのエリアと第ｄのエリアと第ｅのエリアと第ｆのエリアと第ｇのエリアのうち、一つのエリアを移動元エリアとし、第ａのエリアと第ｄのエリアと第ｅのエリアと第ｆのエリアと第ｇのエリアのうち、一つのエリアを移動先エリアとする組み合わせパターンに関連付けて、候補プログラム情報を記憶してもよい。
【０１１１】
なお、１≦ｉ，ｊ≦Ｌ（Ｌは自然数で、ｉ≠ｊ）であり、１≦ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ≦Ｍ（Ｍは自然数で、ａ≠ｂ≠ｃ≠ｄ≠ｅ≠ｆ≠ｇ）であるとする。説明の簡略化のため、以下では、Ｌ＝２、Ｍ＝８とする。
【０１１２】
一体移動命令を用いる場合のエリア設定例を図１０（Ａ）と図１０（Ｂ）に示す。この場合には、図１０（Ａ）に示すように、作業エリアはエリアＡＲ１〜ＡＲ９に分割される。また、各エリアの意味については、図１０（Ｂ）の表にまとめている。例えば、エリアＡＲ２は、移動機構を使わない場合でも、右ハンドを移動させることができるが、左ハンドは移動機構を使わなければ移動させることができない領域という意味である。
【０１１３】
さらに、図１０（Ａ）のようなエリアが設定されている場合に、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２へワークＷＫを移動させる例を、図１１（Ａ）〜図１１（Ｃ）に示す。
【０１１４】
まず、図１１（Ａ）では、第１の目標位置ＤＰ１がエリアＡＲ５に属しており、移動元エリアはエリアＡＲ５であることが分かる。エリアＡＲ５は、移動機構を使うか否かに関わらず、右ハンドは届くが、左ハンドは届かない領域である。一方、第２の目標位置ＤＰ２は、エリアＡＲ８に属しており、エリアＡＲ８が移動先エリアであることが分かる。図１０（Ｂ）に示す通り、エリアＡＲ８は、移動機構を使っても右ハンドは届かないが、左ハンドは移動機構を使えば届く領域である。従って、組み合わせパターンは（ＡＲ５、ＡＲ８）となる。
【０１１５】
本例では、まずは図１１（Ａ）に示すように、右ハンドを第１の目標位置ＤＰ１に移動させる必要がある。この時、移動機構を使う必要はない。次に、図１１（Ｂ）に示すように、ワークＷＫを把持するハンドを右ハンドから左ハンドに切り替える必要がある。そして最後に、図１１（Ｃ）に示すように、一体機構を用いて、ロボットＲＢ全体を回転させた後に、左ハンドを第２の目標位置ＤＰ２に移動させて、ワークＷＫを置けば目的が達せられる。
【０１１６】
したがって、組み合わせパターン（ＡＲ５、ＡＲ８）に関連付けて記憶されている候補プログラム情報の中から、前述した動作を行う使用プログラム情報を選択する。
【０１１７】
これにより、ロボットのハンドの位置等と、第１の目標位置と、第２の目標位置との位置関係に加え、移動機構の使用の有無に基づいて、使用プログラム情報を選択すること等が可能になる。
【０１１８】
また、プログラム作成部１１０は、候補プログラム情報に従ってロボット３００を動作させる場合のシミュレーション処理を行い、シミュレーション処理の結果に基づいて、使用プログラム情報を選択してもよい。
【０１１９】
ここで、シミュレーション処理とは、実際にはロボットを動かさずに、候補プログラム情報や後述する仮動作プログラム等に従って、ロボットの動きやプログラム実行後のロボットの各部の位置等を演算する処理等をいう。
【０１２０】
また、シミュレーション処理の結果とは、シミュレーション処理によって得られる情報のこという。例えば、シミュレーション処理によって得られる情報には、所要時間や、ハンドの移動距離、消費電力、騒音、ロボットの各ジョイントの使用頻度などがある。
【０１２１】
具体例を図１２に示す。図１２は、候補プログラム情報１〜候補プログラム情報４に従ってシミュレーション処理を行った場合の所要時間の一例である。本例では、所要時間が最も短い候補プログラム情報を使用プログラム情報として選択する。したがって、本例では、候補プログラム情報１に従ってシミュレーション処理を行った時の所要時間が１０（秒）と最も短く、候補プログラム情報１が使用プログラム情報として選択される。
【０１２２】
これにより、例えば、最も所要時間が短い候補プログラム情報を、使用プログラム情報として選択し、動作プログラムを作成すること等が可能になる。
【０１２３】
これまでは、第１の目標位置から第２の目標位置へワークを移動させるための動作プログラムを作成する手法について述べてきたが、実際には、第１の目標位置から第２の目標位置へワークを移動させ、さらに第３の目標位置へワークを移動させる場合も多い。目標位置が３つ以上ある場合も当然ある。この場合には、前述した手法を繰り返し用いても良いが、第１の目標位置から第２の目標位置へワークを移動させ、さらに第３の目標位置へ移動させるまでの一連の処理を制御する動作プログラムをまとめて作成した方が、所要時間が短い動作プログラムを作成することができる場合がある。
【０１２４】
そこで、プログラム作成部１１０は、複数の候補プログラム情報を組み合わせて仮動作プログラムを生成し、仮動作プログラムに従ってロボット３００を動作させる場合のシミュレーション処理を行ってもよい。そして、プログラム作成部１１０は、シミュレーション処理の結果に基づいて、複数の使用プログラム情報を選択し、選択した複数の使用プログラム情報に基づいて、動作プログラムを作成してもよい。
【０１２５】
ここで、仮動作プログラムとは、複数の候補プログラム情報を組み合わせたプログラムである。仮動作プログラムは、実際にロボットを動作させる際に用いる動作プログラムではなく、シミュレーション処理において用いるプログラムである。
【０１２６】
具体例を図１３（Ａ）〜図１３（Ｃ）に示す。ここでは、図１３（Ａ）のように、双腕ロボットＲＢを用いて、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２へワークＷＫを移動させ、さらに第３の目標位置ＤＰ３へ移動させる場合を考える。また、作業エリアは、エリアＡＲ１とエリアＡＲ２とに分けられており、用いられる候補プログラム情報及びこれに含まれる命令は、図６（Ａ）と図６（Ｂ）に示すものする。なお、説明の簡略化のため、一体移動命令は用いないこととする。
【０１２７】
この場合、図１３（Ｂ）に示すような４つの仮動作プログラムが作成される。例えば、仮動作プログラム１は、候補プログラム情報１を続けて用いるものであり、右ハンドＨＤＲでのみワークを把持するプログラムである。また、仮動作プログラム２は、候補プログラム情報１に従って制御した後に、候補プログラム情報２を用いるプログラムである。仮動作プログラム２では、まず右ハンドＨＤＲでワークＷＫを掴んで第２の目標位置ＤＰ２に移動させ、右ハンドＨＤＲでワークＷＫを置いた後に、左ハンドＨＤＬでワークＷＫを掴み、第３の目標位置ＤＰ３へ移動する間に、右ハンドＨＤＲにワークＷＫを持ち替えて、右ハンドＨＤＲでワークＷＫを置く。仮動作プログラム３は同様に持ち替え命令を一度実行するプログラムであり、仮動作プログラム４では持ち替え命令を二度実行するプログラムである。
【０１２８】
そして、仮動作プログラム１〜仮動作プログラム４の全てに対して、シミュレーション処理を行い、図１３（Ｃ）に示すようなシミュレーション処理結果を得たとする。なお、説明の簡略化のため、図１３（Ｃ）に示す所要時間は、目標位置への移動に要する時間を一律１０（秒）、ワークＷＫの持ち替えに要する時間を一律２（秒）、ロボットが現在の姿勢のままでは次の命令を実行できない場合に、命令を実行できる姿勢に修正することに要する時間を一律５（秒）とする。
【０１２９】
ここでは、図１２の例と同様に、所要時間が最も短い仮動作プログラムに用いられている候補プログラム情報を、使用プログラム情報として選択することにする。この場合には、仮動作プログラム１が最も全体の所要時間が短いため、仮動作プログラム１に用いられている候補プログラム情報１が使用プログラム情報として選択され、動作プログラムが作成される。なお、ここでは、作成される動作プログラムは、仮動作プログラム１と同じものになるが、本実施形態ではこれに限定さない。
【０１３０】
また、例えば仮動作プログラム１のように、続けて同じアームを使うのではなく、１回以上の持ち替えを行い、異なる命令をアーム毎にそれぞれ実行したい場合などもある。この場合には、仮動作プログラム２〜仮動作プログラム４の中から、最も優秀なプログラムを選択することになる。すると、仮動作プログラム４が最も所要時間が短くなる。仮動作プログラム４は、ワークＷＫの持ち替えを２回行うため、一見すると一番所要時間がかかるとも思われる。しかし、例えば、仮動作プログラム２に従ってロボットＲＢを制御する場合には、第２の目標位置ＤＰ２において、右ハンドＨＤＲでワークＷＫを置いているため、次に左ハンドＨＤＬでワークＷＫを掴むためには、右ハンドＨＤＲを第２の目標位置ＤＰ２から他の位置に移動させなければならない。そのため、この処理に５（秒）を要してしまい、このような処理を行う必要のない仮動作プログラム４よりも遅くなってしまう。仮動作プログラム３についても同様である。
【０１３１】
そして、仮動作プログラム４を構成する候補プログラム情報が使用プログラム情報として選択される。具体的には、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２への移動には、候補プログラム情報２が、第２の目標位置ＤＰ２から第３の目標位置ＤＰ３への移動には、候補プログラム情報４が、使用プログラム情報として選択され、動作プログラムが作成される。
【０１３２】
上述した例のように、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２へワークＷＫを移動させ、さらに第３の目標位置ＤＰ３へのワークＷＫを移動させる場合に、続けて同じアームを使うのではなく、１回以上の持ち替えを行う必要がある場合には、先に説明したように候補プログラム情報毎にシミュレーションを行う場合と、仮動作プログラム情報毎にシミュレーションを行う場合とで、使用プログラム情報として選択される候補プログラム情報が異なる。
【０１３３】
具体的には、候補プログラム情報毎にシミュレーションを行う場合、第１の目標位置ＤＰ１から第２の目標位置ＤＰ２への移動については、候補プログラム情報１が使用プログラム情報として選択される。ここで、第３の目標位置ＤＰ３へは左ハンドＨＤＬは届かない。さらに持ち替え命令も実行する必要がある。そのため、第２の目標位置ＤＰ２から第３の目標位置ＤＰ３への移動については、候補プログラム情報４が使用プログラム情報として選択される。すなわち、仮動作プログラム２と同様の構成になる。また、先に持ち替えを行う場合には仮動作プログラム３と同様の構成になる。
【０１３４】
したがって、例えば、仮動作プログラム毎にシミュレーション処理を行うことにより、候補プログラム情報毎にシミュレーション処理を行う場合よりも、所要時間が短い動作プログラムを作成すること等が可能になる。
【０１３５】
なお、本実施形態の動作プログラム作成装置１００等は、プログラムにより実現してもよい。この場合には、ＣＰＵ等のプロセッサーがプログラムを実行することで、本実施形態の動作プログラム作成装置１００等が実現される。具体的には、情報記憶媒体に記憶されたプログラムが読み出され、読み出されたプログラムをＣＰＵ等のプロセッサーが実行する。ここで、情報記憶媒体（コンピューターにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＤＶＤ、ＣＤ等）、ＨＤＤ（ハードディスクドライブ）、或いはメモリー（カード型メモリー、ＲＯＭ等）などにより実現できる。そして、ＣＰＵ等のプロセッサーは、情報記憶媒体に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち、情報記憶媒体には、本実施形態の各部としてコンピューター（操作部、処理部、記憶部、出力部を備える装置）を機能させるためのプログラム（各部の処理をコンピューターに実行させるためのプログラム）が記憶される。
【０１３６】
４．処理の流れ
以下では、図１４のフローチャートを用いて、図４（Ａ）に示す双腕ロボットを用いて、ワークを移動させる場合に、動作プログラム作成装置が行う処理の流れについて説明する。
【０１３７】
まず、作業者が第１の目標位置〜第Ｎの目標位置を入力する（Ｓ０）。ここで、Ｎは正の整数である。例えば、Ｎの範囲は、２≦Ｎ≦４であるとする。なお、第１の目標位置はワークの現在位置である。さらに、本例では、ワークを移動させる制御を行うため、二つ以上の目標位置を入力する必要がある。以下では、Ｎ＝３の場合について説明する。
【０１３８】
次に、第１の目標位置〜第３の目標位置が属するエリアを特定する（Ｓ１）。本例では、図１０（Ａ）に示すエリアＡＲ１〜エリアＡＲ９のどのエリアに各目標位置が属するかを求める。その後、カウンターｉを１に初期化する（Ｓ２）。
【０１３９】
次に、第ｉの目標位置、すなわち第１の目標位置が属するエリアと、第（ｉ＋１）の目標位置、すなわち第２の目標位置が属するエリアの組み合わせパターンを特定する（Ｓ３）。そして、求めた組み合わせパターンに関連付けて記憶されている候補プログラム情報を読み出す（Ｓ４）。その後、カウンターｉが（Ｎ−１）であるかを判定する（Ｓ５）。
【０１４０】
今、ｉ＝１、（Ｎ−１）＝２であり、条件を満たさないため、カウンターｉを更新する（Ｓ６）。その後は、ｉ＝２の場合も同様に、ステップＳ３〜ステップＳ５の処理を行う。
【０１４１】
その結果、ステップＳ５の条件を満たすこととなるため、読み出した候補プログラム情報に基づいて、仮動作プログラムを作成する（Ｓ７）。ここでは、第１の目標位置から第２の目標位置を経て、第３の目標位置へワークを移動させることができるような候補プログラム情報の組み合わせを全て求め、これを仮動作プログラムとする。
【０１４２】
次に、求めた仮動作プログラムに基づいて、ロボットを制御する場合をシミュレーションする（Ｓ８）。ここでは、求めた全ての仮動作プログラムについて、シミュレーションを行う。
【０１４３】
そして、シミュレーション処理の結果に基づいて、使用プログラム情報を選択する（Ｓ９）。本例では、第１の目標位置から第２の目標位置を経て、第３の目標位置へワークを移動させた時の所要時間が最も短くなる仮動作プログラムを動作プログラムとして用いる。そのため、所要時間が最小である仮動作プログラムに用いられた候補プログラム情報を、使用プログラム情報として選択する。
【０１４４】
最後に、使用プログラム情報を動作順に関連付けて、動作プログラムを作成する（Ｓ１０）。先に述べたように、本ステップで作成される動作プログラムは、所要時間が最小である仮動作プログラムと同じものである。ただし、本実施形態では、動作プログラムが、所要時間が最小である仮動作プログラムと異なるものであってもよい。
【０１４５】
また、ロボット制御システム及びロボットシステムの場合には、この後に、求めた動作プログラムに基づいてロボットを実際に制御する。
【０１４６】
以上のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また、動作プログラム作成装置、プログラム、ロボット制御システム及びロボットシステムの構成、動作も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【０１４７】
１００  動作プログラム作成装置、１１０  プログラム作成部、
１１２  使用プログラム選択部、１１４  シミュレーション処理部、
１１６  動作プログラム作成部、１２０  記憶部、２００  ロボット制御システム、
２３０  ロボット制御部、２４０  入力部（Ｉ／Ｆ部）、３００  ロボット、
３１０  制御部、３２０  アーム、３３０  把持部（ハンド）、３４０  移動機構、
３５０  Ｉ／Ｆ部、４００  ロボットシステム、５００  ワーク
【図１】
0005915041.tif 000002
【図２】
0005915041.tif 000003
【図３】
0005915041.tif 000004
【図４】
0005915041.tif 000005
【図５】
0005915041.tif 000006
【図６】
0005915041.tif 000007
【図７】
0005915041.tif 000008
【図８】
0005915041.tif 000009
【図９】
0005915041.tif 000010
【図１０】
0005915041.tif 000011
【図１１】
0005915041.tif 000012
【図１２】
0005915041.tif 000013
【図１３】
0005915041.tif 000014
【図１４】
0005915041.tif 000015