(57)【要約】 【課題】効率よく、かつ高速にロボットおよび周辺機器のレイアウトを最適化できるようにする。【解決手段】ロボットアーム、周辺機器を含むロボット作業空間にロボットアームおよび周辺機器を配置するレイアウトを設定する。ロボットアームが周辺機器にアクセスする特定動作に対応し、ロボットアームの基準部位を通過させる教示点を決定する（教示点決定手段３０）。また、ロボットアーム、周辺機器の初期レイアウトを決定する手段（初期レイアウト決定手段３２）を有する。レイアウト評価手段３６およびレイアウト移動手段３８は、メタヒューリスティクス演算により用いて、初期レイアウトから、各機器を移動させてレイアウトを更新する。また、初期レイアウトないし更新されたレイアウトで、特定動作に対する適応度に関する評価値を用いて当該のレイアウトを設定し、最適なレイアウトを決定する。【選択図】図２
2018020410.tif 000002
【特許請求の範囲】
【請求項１】
ロボットアームと、周辺機器と、を含むロボット作業空間に前記ロボットアームおよび前記周辺機器を配置するレイアウトを設定するレイアウト設定方法において、
制御装置が、前記ロボット作業空間において前記ロボットアームが前記周辺機器にアクセスする特定動作に対応し、前記ロボットアームの基準部位を通過させる教示点を決定する教示点決定工程と、
前記制御装置が、前記ロボットアームおよび前記周辺機器の初期レイアウトを決定する初期レイアウト決定工程と、
前記制御装置が、前記教示点に基づき前記ロボットアームの軌道を生成する軌道生成工程と、
前記制御装置が、メタヒューリスティクス演算を用いて、前記初期レイアウトを出発点として、前記ロボットアームまたは前記周辺機器の配置を移動させてレイアウトを更新するレイアウト更新工程と、
前記制御装置が、前記初期レイアウト、または、前記レイアウト更新工程で更新されたレイアウトに対応する前記ロボットアームおよび前記周辺機器の配置構成において、前記特定動作に対する適応度に関する評価値を用いて当該のレイアウトを評価し、前記特定動作に適したレイアウトを決定するレイアウト設定工程と、
を備えたレイアウト設定方法。
【請求項２】
請求項１に記載のレイアウト設定方法において、前記制御装置が、レイアウト更新工程において行う前記メタヒューリスティクス演算が、粒子群最適化演算であるレイアウト設定方法。
【請求項３】
請求項２に記載のレイアウト設定方法において、前記制御装置が、レイアウト更新工程において、前記粒子群最適化演算において、前記作業空間において前記ロボットアーム、および前記周辺機器が前記粒子群最適化演算における粒子に対応づけられ、この粒子の前記ロボットアーム、および前記周辺機器の位置姿勢に相当する位置、および速度を変化させる粒子群最適化演算を行うことにより、新たなレイアウトを生成するレイアウト設定方法。
【請求項４】
請求項１から３のいずれか１項に記載のレイアウト設定方法において、前記制御装置は、前記レイアウト設定工程において、前記軌道生成工程で生成した軌道で前記ロボットアームが動作する動作時間を前記特定動作に対する適応度に関する評価値として用いて当該のレイアウトを設定するレイアウト設定方法。
【請求項５】
請求項１から４のいずれか１項に記載のレイアウト設定方法において、前記制御装置は、前記軌道生成工程において、前記ロボットアームが、軌道生成に係わる動作でアクセスする対象の周辺機器とは異なる他の周辺機器に対して、または、前記ロボット作業空間に含まれる障害物に対して、干渉するのを回避可能な軌道生成を行うレイアウト設定方法。
【請求項６】
請求項５に記載のレイアウト設定方法において、前記制御装置は、前記レイアウト設定工程において、前記ロボットアームと、前記他の周辺機器または前記障害物と、の干渉量を前記特定動作に対する適応度に関する評価値として用いて当該のレイアウトを設定するレイアウト設定方法。
【請求項７】
請求項５に記載のレイアウト設定方法において、前記制御装置は、前記レイアウト設定工程において、前記軌道生成工程で、前記ロボットアームと、前記他の周辺機器または前記障害物と、の干渉を回避可能な軌道を生成できた回数を前記特定動作に対する適応度に関する評価値として用いて当該のレイアウトを設定するレイアウト設定方法。
【請求項８】
請求項５に記載のレイアウト設定方法において、前記制御装置は、前記レイアウト設定工程において、前記教示点決定工程によって決定された各々の教示点に関して、前記ロボットアームの逆キネマティクス演算が成立した教示点の数を前記特定動作に対する適応度に関する評価値として用いて当該のレイアウトを設定するレイアウト設定方法。
【請求項９】
請求項１から８のいずれか１項に記載の各工程を前記制御装置に実行させる制御プログラム。
【請求項１０】
請求項９に記載の制御プログラムを格納したコンピュータ読み取り可能な記録媒体。
【請求項１１】
請求項１から８のいずれか１項に記載の前記ロボットアーム、前記周辺機器、および前記ロボット作業空間の３Ｄデータに基づき、前記初期レイアウト、または、前記レイアウト更新工程で更新されたレイアウトにおける前記ロボット作業空間における前記ロボットアーム、前記周辺機器の配置構成を３Ｄ出力する３Ｄ出力装置を備えたレイアウト設定装置。
【請求項１２】
請求項１１に記載のレイアウト設定装置において、前記３Ｄ出力装置で操作者に前記ロボット作業空間における前記ロボットアームおよび前記周辺機器の配置構成の状態を確認させつつ、前記操作者に前記初期レイアウトを作成させるか、または、前記初期レイアウト、または前記レイアウト更新工程で更新されたレイアウトを修正させるユーザーインターフェースを備えたレイアウト設定装置。
【請求項１３】
請求項１１または１２に記載のレイアウト設定装置において、前記制御装置が、前記レイアウト更新工程、または、前記軌道生成工程を実行している時、前記ロボット作業空間における、前記ロボットアームおよび前記周辺機器の配置構成の状態、または、前記ロボットアームの位置姿勢を前記３Ｄ出力装置によって、リアルタイムで３Ｄ出力するレイアウト設定装置。
【請求項１４】
請求項１から８のいずれか１項に記載のレイアウト設定方法を用いて配置されたロボットアームによって部品を製造する部品の製造方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボットアームと、周辺機器と、を含むロボット作業空間に前記ロボットアームおよび前記周辺機器を配置するレイアウトを設定するレイアウト設定方法、およびレイアウト設定装置に関する。
【背景技術】
【０００２】
近年、自動車や電機（電気）製品の生産ラインでは、複数台の産業用ロボットアームを投入して、溶接や組み立てなどの作業を自動化されている。このようなロボットによる作業環境には、ロボットアームと周辺機器から成るロボット設備が配置される。ここで、ロボットアームを除く周辺機器としては、例えば、ワーク、ワーク置き台や、冶具等が考えられる。また、このような作業環境には、室内の凹凸や支柱、通気ダクトなどの障害物が存在する場合もある。このようなロボット作業環境において、ロボットアームは、上記のような障害物や、作業対象とは異なる周辺機器との干渉を避けつつ、しかも効率よく動作させなければならない。
【０００３】
ここで、ロボットアームを上記のような干渉を避けつつ、しかも効率よく動作させる、という目的の達成には、ロボットアームと周辺機器のレイアウト（配置設計）が大きな影響を持つ。
【０００４】
旧来では、ロボットアームと周辺機器のレイアウト、即ち、作業環境中への配置位置の決定は、室内の障害物を考慮した上でレイアウト平面図のような紙上の手作業で行われることもあった。
【０００５】
しかしながら、現在では、例えばロボットアームシミュレータのようなシミュレータ装置が知られており、このような装置を利用してレイアウト最適化を行い、工程設計（管理）者のレイアウト作業を支援することが考えられる。
【０００６】
この種のシミュレータ装置は、シミュレーション技術を利用して、ロボットアームと、ワークなどの３ＤのＣＡＤデータなどを用いて、ロボットアームの動作をプログラミング（教示）するために用いられる。この種のシミュレータ装置を利用し、レイアウト最適化を行うには、ロボットアームとワークの他に、あるいはさらに周辺機器、室内の障害物などの３ＤのＣＡＤデータを追加し、その仮想環境中でロボットアームを動作させる。
【０００７】
例えば、オフラインで、ロボットアームシミュレータを使用して、ロボットアームの動作シミュレーションを行う場合、作業環境を想定した画面上にロボットアームと、ワーク置き台、冶具等の周辺機器の３次元モデルを配置して表示する。
【０００８】
当然ながら、ロボットアームおよび周辺機器を作業環境に相当する画面上のどこに配置するかによってシミュレーション結果は大きく異なってくる。ロボットアームの配置が不適切である場合、ロボットアームの教示点あるいは動作経路の一部がロボットアームの動作不可能な領域に入ったりする可能性がある。また、所望の教示点あるいは動作経路を辿る動作をロボットアームに実行させると周辺機器との干渉を起こす可能性もある。
【０００９】
従来の、主にロボットアームの動作をプログラミング（教示）するためのシミュレータ装置では、基本的にはレイアウトの評価や検証を行う機能が実装されていない。従って、従来では、シミュレータ装置を用いる場合でも、レイアウトの評価や検証の殆どを作業者が行っていた。
【００１０】
例えば、従来では、全ての教示点や動作経路全体に対して、ロボットアームが動作可能となり、且つ、周辺機器とロボットアームが干渉しないという条件を満たす、ロボットアームおよび周辺機器の配置を、作業者が画面上で試行錯誤的に求めていた。しかし、ロボットアームおよび周辺機器の配置を定めてロボットシステムを構築しても、その後、配置が最適でないために、ロボットアームのサイクルタイムが規定値以下にならないというような問題が発生する場合が珍しくなかった。そのようなケースでは、ロボットアームおよび周辺機器の配置を再検討して設置し直すことで対応していた。
【００１１】
特に、製品の種類が頻繁に変わる環境では、製品の種類が変更される度に工程設計者が配置作業を全てやり直すことになるので、実際にロボットアームが稼動して生産を行なう工程よりも、配置作業の工程の比率が増大し、生産性が極端に低下してしまう。また、工程設計者が配置作業に直接に係わる割合が大きいので、人件費が高騰する問題も生じる。
【００１２】
従来では、ロボットアームの移動時間を短くすることのできる最適な作業対象物の配置を決定する装置が開示されている（例えば下記の特許文献１、２）。
【００１３】
特許文献１の構成では、次のような制御が行われる。まず、ロボットアームの配置可能範囲に配置した格子点を配置可能候補点Ｑｋ（１  ＜＝  ｋ  ＜＝  ｍ）とする。この配置可能候補点Ｑｋの中から、逆運動学が解け、周辺機器との干渉もなく、動作余裕度が基準値をクリアしている点だけを残し、仮配置可能範囲とする。仮配置可能範囲内の諸点にロボットアームを配置して動作シミュレーションを実行し、それら諸点の配置を評価するためのデータを収集する。収集したデータは、いくつかの観点の評価基準と照らし合わせて、それぞれ評価される。さらに、１つまたは複数の観点についての評価結果を評価関数で評価し、最適配置（場合によっては、複数個）を選び出す。
【００１４】
また、特許文献２の構成では、次のような制御が行われる。まず、作業対象物の配置候補位置を複数指定し、次に、所定の位置と複数の配置候補位置のそれぞれを通過するロボットアーム移動経路を指定する。次に、各ロボットアーム移動経路のそれぞれにおけるロボットアームの移動をシミュレーションし、その移動の際のロボットアームの回転角度が反映されたロボットアーム移動時間をそれぞれ求める。最後に、ロボットアーム移動時間が最も短くなるロボットアーム移動経路に対応する配置候補位置を最適な配置として決定する。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００５−２２０６２号公報
【特許文献２】特開２００８−５２７４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
特許文献１で開示された手法では、作業空間を配置可能範囲を適当な数で分割して得た格子点から、逆運動学が解け、周辺機器との干渉もなく、動作余裕度が基準値をクリアしている点だけを残し、仮配置可能範囲とする。そして仮配置可能範囲の全ての格子点でのロボットアーム動作シミュレーションを行い、配置構成を評価している。従って、格子点の間に最適点が存在している場合は、最適点に到達できず、精度を高めるためには、格子点を多くしなければならない可能性がある。
【００１７】
そして、仮配置可能範囲にある格子点の数が多くなればなるほど、その評価を行う計算時間も多くなる。特に、ロボットアームの配置だけを考える場合、配置候補に比例して計算時間が増大する。さらに、ロボットアームだけでなく、ワークや周辺機器の配置を考慮に入れた場合、その組み合わせはそれぞれの配置候補の数の積になるため、演算処理量が莫大になる可能性がある。たとえば、ロボットアームと周辺機器の配置候補が、それぞれ１００の格子点で表現されていた場合には、１００×１００×１００＝１００００００通りの評価を行わなければならなくなる。
【００１８】
即ち、特許文献１に示されるような手法では、配置候補の評価演算の効率については殆ど考慮されておらず、対象とする作業環境の規模などによっては、莫大な計算機資源が必要になる可能性がある。また、特許文献１の構成では、干渉回避動作は自動で生成しておらず、決められた経路だけをロボットアームが通る。このため、例えば干渉せずに目的の動作を実現できる別の経路があってもその配置で動作は不可能と判定してしまう可能性があり、配置の最適性が落ちる恐れがある。
【００１９】
また、特許文献２に示されるような手法では、特許文献１同様、作業対象物の全ての配置候補位置に対し、シミュレーションを行い、評価を行っているため、ワークの配置候補の数が増えれば増えるほど、計算時間が増大する。また、ロボットアームの配置を考える場合は、ワークとロボットアームの配置の数の積の数だけの配置候補の評価を行わなければいけないという問題がある。また、特許文献２の手法でも、干渉回避動作の自動生成や評価は行われていない。このため、特許文献１の場合と同様、特許文献２の手法によっても、作業環境の規模などによっては、莫大な計算機資源が必要になる可能性があり、最適な配置を探索できない可能性がある。
【００２０】
上記のように、従来技術では、ロボット設備の配置の組み合わせを全て試行し評価を行っているため、この方法では計算時間が大きくなってしまう問題がある。また、従来技術では、干渉回避動作の自動生成や評価の機能を欠いており、最適な配置を探索し切れない可能性がある。
【００２１】
そこで、本発明の課題は、上記の問題点に鑑み、ロボットアームの干渉を回避する軌道生成と、ロボット設備のレイアウトの最適化を効率的に行うことにより、高速にロボット設備のレイアウトを最適化できるようにすることにある。
【課題を解決するための手段】
【００２２】
以上の課題を解決するため、本発明においては、ロボットアームと、周辺機器と、を含むロボット作業空間に前記ロボットアームおよび前記周辺機器を配置するレイアウトを設定するレイアウト設定方法において、制御装置が、前記ロボット作業空間において前記ロボットアームが前記周辺機器にアクセスする特定動作に対応し、前記ロボットアームの基準部位を通過させる教示点を決定する教示点決定工程と、前記制御装置が、前記ロボットアームおよび前記周辺機器の初期レイアウトを決定する初期レイアウト決定工程と、前記制御装置が、前記教示点に基づき前記ロボットアームの軌道を生成する軌道生成工程と、前記制御装置が、メタヒューリスティクス演算を用いて、前記初期レイアウトを出発点として、前記ロボットアームまたは前記周辺機器の配置を移動させてレイアウトを更新するレイアウト更新工程と、前記制御装置が、前記初期レイアウト、または、前記レイアウト更新工程で更新されたレイアウトに対応する前記ロボットアームおよび前記周辺機器の配置構成において、前記特定動作に対する適応度に関する評価値を用いて当該のレイアウトを評価し、前記特定動作に適した最適なレイアウトを決定するレイアウト設定工程と、を備えた構成を採用した。
【発明の効果】
【００２３】
上記構成によれば、ロボットアームに特定動作を実行させるために最適なロボットアームおよび周辺装置のレイアウトおよび最適な動作を効率よく、高速に計算することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明のレイアウト評価ないし最適化処理を適用可能なロボットアームと周辺機器、あるいはこれらをレイアウト最適化装置でシミュレーション表示した表示画面を示す説明図である。
【図２】本発明を適用可能なレイアウト最適化装置の構成を示すブロック図である。
【図３】本発明の実施形態１に係るレイアウト最適化処理を示したフローチャート図である。
【図４】本発明の実施形態１に係るレイアウトの初期化処理を示したフローチャート図である。
【図５】本発明の実施形態２に係るレイアウト最適化処理を示したフローチャート図である。
【図６】本発明の実施形態２に係るレイアウトの評価処理を示したフローチャート図である。
【図７】本発明の実施形態２に係るレイアウトの最大評価値の更新を示したフローチャート図である。
【図８】本発明の実施形態３に係るレイアウト最適化処理を示したフローチャート図である。
【図９】本発明の実施形態３に係る粒子群最適化の粒子の位置および適応度の更新処理を示したフローチャート図である。
【図１０】本発明の実施形態３に係るレイアウトの評価処理を示したフローチャート図である。
【図１１】本発明の実施形態３に係るレイアウトの評価処理を示したフローチャート図である。
【発明を実施するための形態】
【００２５】
以下、添付図面に示す実施例を参照して本発明を実施するための形態につき説明する。なお、以下に示す実施例はあくまでも一例であり、例えば細部の構成については本発明の趣旨を逸脱しない範囲において当業者が適宜変更することができる。また、本実施形態で取り上げる数値は、参考数値であって、本発明を限定するものではない。
【００２６】
＜実施形態１＞
以下、本発明の実施形態１について説明する。一般に、ロボットアームは関節とリンク機構で構成される。関節には回転関節や直動関節の他、球体関節などさまざまな種類がある。関節の動作はモータ等で能動的に動作する場合と、動力源を持たずに受動的に動作する場合がある。各関節間はリンク機構により連結されるが、この連結形態によって、関節とリンク機構が交互に直列されたシリアルリンク型と関節とリンクの組合せが並列となったパラレルリンク型などがある。以下では、回転関節を有するシリアルリンク型のロボットアームを例に説明するが、以下に示す制御は、パラレルリンク型や直動関節を有するロボットアームを用いる場合でも実施可能である。
【００２７】
図１は、本発明のレイアウト最適化装置１００（図２）でそのレイアウトを評価するロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３、ワークＷなど）または、これらをシミュレーション表示した表示画面（２１）の表示状態を示す。図２は、ロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３、ワークＷなど）のレイアウトを評価し、アームの特定動作に適したレイアウトを取得（決定）するレイアウト最適化装置１００の構成を示す。
【００２８】
図１は、ロボットアームＡ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３障害物Ｏなどが、ロボットアームＡの作業空間（ロボット作業空間）に相当するベースＢ上に配置されている状態示している。ここで、ロボットアームＡは、３つの関節（３軸多関節）を有し、ワークなどの作業の対象物を把持するためのハンドを手先に備えるものとする。
【００２９】
なお、ロボットアームＡは、一般的にはロボットアーム自体が動作するような動作体として広く観念されるものであればよく、本発明は特にロボットアームＡの構成によって限定されるものではない。例えば、図１では、ロボットアームＡを１台のみ図示しているが、６軸多関節ロボットアームを２つ以上配置する場合でも以下に示す制御は実施可能である。
【００３０】
本実施形態におけるレイアウトとは、ロボット作業空間に、例えば図１のように、ロボットアームＡ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、障害物Ｏが一定の位置関係で配置された配置構成、より詳しくは、これらの位置・姿勢の総称である。
【００３１】
レイアウト最適化装置１００（図２）は、ロボットシミュレータのような装置とほぼ同様のハードウェア構成を有する。特にレイアウト最適化装置１００は、ＬＣＤパネルなどの表示デバイスによるディスプレイ２１を備えており、ベースＢ上の作業環境の状態を適当な３Ｄ表示形式で表示できるものとする。例えば、図１の破線（２１）で示すように、図１は、レイアウト最適化装置１００のディスプレイ２１におけるロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３、ワークＷなど）のシミュレーション（３Ｄ）表示として見てもよい。
【００３２】
図２において、レイアウト最適化装置１００は、本実施形態のレイアウト設定方法を実施するレイアウト設定装置に相当する。レイアウト最適化装置１００は、ロボットの作業環境をシミュレーション（３Ｄ）表示可能なディスプレイ２１を備えている。従って、後述のレイアウト評価処理に加え、例えば、ロボットアームＡに同様の作業環境中で動作させるための制御（教示）データのプログラミング（教示）や、修正、あるいはその評価のための機能を備えていてもよい。この種のシミュレーション（３Ｄ）表示を利用した各種の機能は公知であって、ここではその詳細な説明は省略する。
【００３３】
レイアウト最適化装置１００は、ディスプレイ２１の他に、作業者がデータ入力等を行うための操作部２（ユーザーインターフェース）、レイアウト評価ないし最適化処理を行う演算処理部３、種々のデータを格納する記憶部４と、を備えている。
【００３４】
ディスプレイ２１は、操作装置２２とともに操作部２（ユーザーインターフェース）を構成する。操作装置２２として用いるデバイスには、キーボード（ＫＢ）、マウスやトラックパッド（ボール）、デジタイザパッドのようなポインティングデバイス（ＰＤ）などが考えられる。
【００３５】
演算処理部３は、教示点決定手段３０、初期レイアウト決定手段３２、軌道生成手段３４と、レイアウト評価手段３６、レイアウト移動手段３８、の各機能ブロックで示す演算（制御）機能を有する。実際には、演算処理部３の上記の各「手段」（３０、３２、３４、３６、３８）は、ＣＰＵ６０１に後述のフローチャートで示すような処理（制御プログラム）を実行させることにより実現される。従って、上記の各「〜手段」（３０、３２、３４、３６、３８）は、「〜工程」（３０、３２、３４、３６、３８）と読み換えても差しつかえない。
【００３６】
記憶部４は、実際には、ＣＰＵ６０１がアクセス可能なＲＯＭ６０２、ＲＡＭ６０３、ＨＤＤやＳＳＤ（あるいは他のメモリデバイス）のような外部記憶装置６０４を用いて構成される。後述の制御（処理）に用いられるメモリ（変数、定数）領域は、これらの記憶デバイス（６０２〜６０４）上に配置される。また、後述の制御（処理）に用いられるメモリ（変数、定数）領域は、特定の記憶デバイスの特定アドレスに固定的に配置されない場合もある。例えば、ＣＰＵ６０１がプログラムを実行するＯＳ環境では、ＲＡＭ６０３と外部記憶装置６０４を組合せて構成された仮想記憶領域を利用できる場合がある。上記のようなメモリ（変数、定数）領域のためにこのような仮想記憶を利用する場合には、メモリの利用状態によって、特定のメモリ（変数、定数）領域は流動的に制御される。
【００３７】
また、記憶部４の一部には、後述のＣＰＵ６０１が実行する制御手順を記述した制御プログラムを記憶させた（例えば着脱自在な）コンピュータ読み取り可能な記録媒体を含んでいてよい。このような記録媒体としては、外部記憶装置６０４や、ＲＯＭ６０２の一部に配置したＥ（Ｅ（ＰＲＯＭのような記憶デバイス、光学ドライブで用いられる光ディスクや光磁気ディスクなどが考えられる。
【００３８】
演算処理部３（ＣＰＵ６０１、ＲＯＭ６０２、ＲＡＭ６０３、外部記憶装置６０４…）は、ハードウェア的にはインターフェース６０５を介して外部装置と接続される。図２では、インターフェース６０５には、上記の操作部２（ディスプレイ２１、操作装置２２）が接続される。また、インターフェース６０５には、ネットワーク６１０、ロボットアームＡ（ないしそのロボット制御装置）を接続できるようにしてもよい。操作部２を用いたグラフィカル環境を用いてロボット教示データを作成する機能を設ける場合には、例えばインターフェース６０５を介してロボットアームＡ（ないしそのロボット制御装置）に作成したロボット教示データを送信することができる。また、ロボットアームＡは、ネットワーク６１０を介して接続してもよい。ネットワーク６１０は、他の外部装置（ロボットアーム、サーバ装置、あるいは他のレイアウト設定装置）の通信にも利用可能である。また、ネットワーク６１０を経由して、後述の制御プログラムをダウンロードし、ＲＯＭ６０２や外部記憶装置６０４などの所定領域にインストールしたり、あるいはインストール済みの一部や全部をアップデート（更新）することもできる。
【００３９】
なお、インターフェース６０５は、ここでは簡略化のため、１ブロックで図示してあるが、実際には接続される機器に応じたインターフェース装置によって構成される。例えば、ロボットアームとの接続には、各種のシリアルないしパラレルバスのようなインターフェースが用いられる。ネットワーク６１０との接続には各種の有線、無線接続方式によって構成されたネットワークインターフェースが用いられる。
【００４０】
演算処理部３の教示点決定手段３０は、ロボットアームＡの姿勢を決定する教示点を決定する手段である。後述のレイアウト最適化においては、ロボットアームＡに実行させる特定動作に適したレイアウトを探索する。
【００４１】
教示点決定手段３０は、このロボットアームＡに実行させる特定動作に対応する教示点を決定するためのもので、例えば操作部２の操作装置２２およびディスプレイ２１から成るユーザーインターフェースを用いることが考えられる。例えば、ディスプレイ２１に３Ｄ表示したロボットアームＡを操作装置２２のポインティングデバイスなどで作業者に操作させる。そして、ロボットアームＡの基準部位（手先位置など）を所望の位置に移動させて、特定の決定操作を行うことを繰り返し、各基準部位を通過させる位置を教示点として決定する。
【００４２】
なお、教示点決定手段３０による教示は、後述（例えば図３のＳ１０２）のように、評価するレイアウトの生成前に１度（だけ）行う。生成した多数のレイアウトでは、それぞれロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３、ワークＷなど）の各部の配置が異なるため、それらの全てについて教示点決定手段３０による教示を行うのは現実的ではない。
【００４３】
例えば、評価すべきレイアウト生成前に、教示点決定手段３０として上記のようなＧＵＩによるインターフェースを用いる場合には、作業者（操作者）には、適当な位置に上記の各部をレイアウトして教示作業を行わせてよい。その場合、例えば入力する教示点の値としては、下記のようなローカル座標を用いることにより、異なるレイアウトにおいても通用する、ロボットアームに実行させたい特定動作に対応した教示点群を生成することができる。
【００４４】
ロボットアームＡの教示点表現としては、アームの基準部位（例えばロボットアームＡの手先など）の位置・姿勢を用いる方法がある。この教示点そのものは、ロボットアーム座標系に固定されるものではなく、作業環境全体に配置された世界（ワールド）座標系や、周辺機器に固定されるローカル座標系などによって指定できる。一般に、この種のロボット制御では、制御の都合によって、上記の世界（ワールド）座標系、ローカル座標系など任意の座標系が用いられる。また、必要に応じて、演算処理部３（ＣＰＵ６０１）は適当な同次変換行列演算を利用することにより、各座標系の座標値は相互に変換することができる。
【００４５】
例えば、ワークＷの置き台にワークを置く動作を実現する場合は、ワークの置き台の上部にロボットアームの手先が来るように教示点を決定する。この場合、ワークの置き台がたとえ移動したとしても、教示点はワークの置き台と共に相対位置を保って共に移動するのが望ましい。従って、ロボットアームＡの手先の教示点を特定する場合は、ワークの置き台のような移動対象物に固定された座標系で指定できるようにしておくほうが、処理上、都合が良い。
【００４６】
なお、ロボットアームの手先の教示点から、ロボットアームの各軸関節角度を計算し、ロボットアームの具体的な姿勢を求めるためには、逆キネマティクス（逆運動学）計算を行う。例えば、図１におけるロボットアームＡが、手先の位置・姿勢を示す教示点Ｔ１を与えられた場合、そのＴ１の位置・姿勢に、ロボットアームＡの手先位置が来るように、ロボットアームＡの関節角度（θ１，θ２，θ３）を算出する。また、図２の初期レイアウト決定手段３２は、レイアウト最適化を行う際のレイアウトの初期値を決定する手段である。たとえば、ロボットアームＡ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢が移動可能な場合に、これらの位置・姿勢を、例えば作業者が操作部２を用いて入力し、決定する。あるいは、レイアウトの初期値は、ＣＰＵ６０１がランダム（乱数）演算などを利用して決定してもよい。それ以外にも、前回最適化を行った際の最適化結果を初期レイアウトとして設定することも可能である。
【００４７】
軌道生成手段３４は、ロボットアームの動作経路を生成する手段および、その経路上をある単位時間ごとにロボットアームの関節値を指令する軌道を生成する手段からなる。ロボットアームの動作経路とはロボットアームの動作の軌跡を表すものであり、ここでは速度といった時間的概念は含まない。一方、ある単位時間ごとにロボットアームの関節値を指令する軌道データは、ロボットアームの動作速度の情報を含む。経路を生成する手段として、干渉を避けて開始点と目標点を接続する経路を生成する手法がある。
【００４８】
このような経路生成方法には、ポテンシャル法、ＰＲＭ  （Ｐｒｏｂａｂｉｌｉｓｔｉｃ  Ｒｏａｄｍａｐ  Ｍｅｔｈｏｄ）、ＲＲＴ  （Ｒａｐｉｄｌｙ−ｅｘｐｌｏｒｉｎｇ  Ｒａｎｄｏｍ  Ｔｒｅｅ）といった多くの方法がある。本発明は、経路生成手段の実装形態により限定されるものではなく、例えば可視グラフ法、セル分割法、ボロノイ図法などの他の経路生成方法も利用することができる。
【００４９】
また、上記のような手法で生成した経路は、回り道をしていたり尖っていたりするため無駄が多く、経路修正が必要な場合がある。例えば、軌道生成手段３４は、そのような経路修正を行うための経路短縮化処理の機能をさらに含んでいてよい。例えば、経路生成手段で生成した経路に対し補間点を新たに追加し、任意の２点をつなぐ直線で周辺環境との干渉がない場合は、２点の間にある経路の代わりに新たにその直線を経路として置き換えるという作業を、繰り返し行うような手法を採用してよい。
【００５０】
軌道生成手段３４は、以上のような経路生成により算出された経路に対し、ロボットアームの関節角度の変化速度を計算し、ロボットアームの関節値をある単位時間ごとに指令する軌道を生成する。ここで、軌道とは、ロボットアームの姿勢の変位や速度を時間の関数として扱い表したものである。
【００５１】
軌道生成方法には、ロボットアームの最適速度を計算する最短時間制御の手法が知られている。このような最短時間制御は、例えば経路補間手段で決定された経路に対し、関節トルク、関節角速度、関節角加速度、関節角加加速度、ＴＣＰ速度、ＴＣＰ加速度などに関する物理的制約を守りつつ時間を最短にするという最適化問題を解くよう構成される。
【００５２】
また、軌道生成手段３４において、干渉を回避する経路を生成する際には、物体同士が干渉するかどうかを判断する必要がある。例えば、ロボットアームＡと障害物Ｏの３ＤＣＡＤデータをポリゴン（例えば三角形等の多角形）の集合として表した場合には、ロボットアームＡの現在の姿勢のポリゴンの集合と障害物Ｏのポリゴンの集合が幾何学的に接触しているかどうかを判定して判断する。なお、３ＤＣＡＤデータの表現には必ずしもポリゴン形式を用いる必要はなく、いわゆるボクセル表現のデータを利用してもよい。
【００５３】
レイアウト評価手段３６およびレイアウト移動手段３８（レイアウト更新手段）は、ロボットアームＡ、ワークＷ、および各種周辺機器の配置（レイアウト）を生成し、また、最適化する。その場合、本実施形態では、メタヒューリスティクス演算、特に本実施形態では粒子群最適化技術を用いて効率的にレイアウトを生成し、また最適化できるようにする。
【００５４】
本実施形態では、例えば、初期レイアウトによって指定された配置範囲内の諸点にロボットアームＡ、ワークＷ、周辺機器を配置し、そこでの干渉回避軌道を生成し、それら諸点の配置について諸観点から評価をする。その評価値から、粒子群最適化演算における「粒子」の位置と速度の更新をすることによって、ロボットアームＡ、ワークＷ、周辺機器の配置を、ベストな配置へと向かって遷移させる。所定の回数もしくは、所定の評価値を超えた時点で、その時点での最良の配置を、最適配置として出力する。
【００５５】
ここで、メタヒューリスティクス演算、特に本実施形態で利用する粒子群最適化演算につき説明する。この粒子群最適化処理は、一般に群知能を演算する処理過程として分類されている。ここで、群知能とは、分権化し自己組織化されたシステムの集合的ふるまいの研究に基づく人工知能技術である。
【００５６】
一般に、群知能ないし粒子群最適化処理では、単純なエージェントの個体群から構成され、各個体は個体自身の情報と個体群の持つ情報の双方を用いて動作する。この場合、各個体の振舞いには偶然性が作用するとともに、各個体間の相互作用の影響が働く。従って、このような群知能演算（処理）では、例えばある群の状態から次の状態を生成する処理を繰り返すような、いわゆるメタヒューリスティック（発見的、ないし学習的）な演算過程が用いられる。
【００５７】
個々のエージェントがどう行動すべきかを命じている集中的な制御構造は通常存在しないが、そのようなエージェント間の相互作用はしばしば全体の行動の創発をもたらす。このような群知能システムの自然界の例として、アリの巣コロニー、鳥の群れ、動物の群れ、細菌のコロニー、魚の群れなどがある。特に、自然界に存在する群知能システムをエミュレートするアルゴリズムとしては、蟻コロニー最適化、カッコウ探索、粒子群最適化、といった演算手法が知られている。
【００５８】
本実施形態では、レイアウト生成および最適化に粒子群最適化演算を利用する。粒子群最適化（ＰＳＯ：Ｐａｒｔｉｃｌｅ  Ｓｗａｒｍ  Ｏｐｔｉｍｉｚａｔｉｏｎ）とは、群知能の一種である。例えば、昆虫や魚の群では、一匹が一定の目的（例えば食料の発見や天敵回避行動、など）にかなう良さそうな移動経路を発見すると、群れの残りはどこにいても素早くそれに倣うことができる。
【００５９】
粒子群最適化演算は、このような群知能の振舞いを、多次元空間中で、位置と速度を持つ粒子群でモデル化するものである。粒子群最適化演算で定義した粒子は空間を飛びまわり、最善な位置を探すが、ある位置がベストであるか否かはその粒子群の演算モデルの目的に沿って作成した評価関数で行う。群れのメンバーは良い位置について情報交換し、それに基づいて自身の位置と速度を調整する。このコミュニケーションは、例えば、最も良い位置にいる粒子ｉが全体に通知されることで行われる。
【００６０】
粒子群最適化演算の代表的な演算式を以下の式（１）および（２）に示す。粒子群最適化において、評価される粒子は位置ｘｉおよび速度ｖｉの情報を持つ。位置ｘｉと速度ｖｉ位置ｘｉと速度ｖｉの更新は下式（１）、（２）によって行われ、これが繰り返される。記号「←」は代入を示す。
【００６１】
【数１】
2018020410.tif 000003
【００６２】
【数２】
2018020410.tif 000004
【００６３】
式（２）において、ｗｉは慣性定数であり、多くの場合、１より若干小さい値が最適である。また、ｃ１ｉとｃ２ｉは群のうちで良い位置に向かう粒子の割合であり、１に近い値が多くの場合、最適である。ｒ１ｉとｒ２ｉは［０，１］（０〜１）の範囲の値をとる乱数である。
【００６４】
なお、本明細書では、数式およびテキストでは、添え字ｉは粒子ｉの情報という意味で用いる。ただし、フローチャート図中では、便宜上、上記のようにしてサフィックスではない通常表記を用いている。また、本明細書では、数式中の＾（ハット）は、最適化されたデータを示す。例えばｘｉ＾は、その粒子がこれまでに発見したベストな位置、ｘｇ＾は群全体としてこれまでに発見したベストな位置に相当する。なお、数式イメージにおいて文字式上に配置されている＾（ハット）は、テキストやフローチャート図中では、便宜上、上記のように後置して表記するものとする。さらに、以下では、ｏｉ＾は粒子単体でのこれまでで最も高い評価値、ｏｇ＾を粒子全体でのこれまでで最も高い評価値とし、Ｎを粒子の数とする。
【００６５】
魚や昆虫などの生物の群の振舞いを解析する場合、上記の「粒子」はこれらの生物の個体の１つに対応づけられる。本実施形態では、粒子群最適化をロボット作業環境のレイアウト生成や評価に利用するため、ロボットアームＡ、周辺機器（ワーク置き台Ｐ１〜Ｐ３、ワークＷなど）の特定の配置状態（レイアウト）を１つの粒子に対応づける。
【００６６】
即ち、本実施形態では、粒子群最適化における粒子ｉの位置ｘｉは、ロボットアームＡ（ロボットアーム固定台Ｆ）の位置・姿勢、およびワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を一つのベクトルで表現したものである。また、速度ｖｉはロボットアーム固定台Ｆの速度、ワーク置き台Ｐ１、Ｐ２、Ｐ３の速度を一つのベクトルで表現したものである。
【００６７】
そして、特定の粒子（特定のレイアウト）の評価は、例えば、ロボットアームＡに行わせたい、特定操作（例えばワークＷをワーク置き台Ｐ１、Ｐ２、Ｐ３の任意の位置の間で移動させるような操作）の速度ないし所要時間によって行う。当然ながら、この特定の粒子（特定のレイアウト）の評価においては、目的のロボット動作が、逆キネマティクス（逆運動学）的に可能か否か、障害物Ｏを回避した上で実行可能か、などが考慮される。
【００６８】
図３は、本実施形態によるレイアウト最適化の主要な制御手順を示している。以下に示す制御手順は、演算処理部３、特にその制御主体であるＣＰＵ６０１が本実施形態の制御手順を記述した制御プログラムを実行することにより実現される。この制御プログラムは、ＲＯＭ６０２や外部記憶装置６０４などに格納しておくことができる。
【００６９】
ここで、本実施形態のレイアウト最適化において、ロボットアームＡに行わせるロボット動作（特定動作）は次のようなものであるものとする。
【００７０】
例えば図１のような配置において、ロボットアームＡは、ワークＷを把持し、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる。続いて、ロボットアームＡは、ワークＷを把持してワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで障害物Ｏとの干渉を避けて移動させる。特定の粒子（特定のレイアウト）の評価では、本実施形態では、上記のような特定のロボット動作が逆キネマティクス（逆運動学）的に可能であり、かつ障害物Ｏを回避した上で実行可能であることを条件とした上、その所要時間（速度）を評価する。
【００７１】
そして、本実施形態のレイアウト最適化では、この特定のロボット動作を行うのに適したレイアウト、即ち最適化されたロボットアームＡの固定台Ｆ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を取得する。
【００７２】
まず、図３のステップＳ１００では、ベースＢ上の作業空間の３次元形状、ロボットアームＡ、ロボットアーム固定台Ｆ、障害物Ｏ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・形状情報を取得する。
【００７３】
これらのうち、ロボットアームＡ、ロボットアーム固定台Ｆ、障害物Ｏ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の形状情報は例えば設計情報であり、例えば３次元ＣＡＤデータなど（３Ｄデータ）を用いて設定することができる。これらの事物の形状（設計）情報は、例えばネットワーク６１０を介して他のサーバなどに記録されているデータを受信することができる。また、これらの事物の形状（設計）情報は、予めカメラ（不図示）で撮影した映像や、各種センサによる計測等で収集したデータを用いて設定してもよい。
【００７４】
次にステップＳ１０２では、上記のロボットアームＡに行わせる特定動作に対応する教示点、および教示点に基づき軌道を生成する時の補間方法の設定を行う（教示点決定工程）。ロボットアームＡの教示点は、教示点決定手段３０を用いて、手先の位置・姿勢を入力して決定する。この時、例えば前述のように、作業者が、操作装置２２のポインティングデバイスなどによりディスプレイ２１に３Ｄ表示したロボットアームＡで動かして入力する手法が用いる。また、補間方法は、特定の教示点までどのような補間方法で軌道を補間するか指定するものである。例えば、このような補間処理には、関節空間補間、直線補間・円弧補間等が挙げられる。補間処理の選択には、操作部２のディスプレイ２１と操作装置２２を用いたＧＵＩメニューの選択、あるいはコマンドラインインターフェースなどを利用すればよい。ここでは教示点Ｔ１、Ｔ２、Ｔ３に関節補間で移動すると指定されたものとする。
【００７５】
ステップＳ１０４では、ロボットアームＡの固定台Ｆと、周辺装置（周辺設備）、即ちワーク置き台Ｐ１、Ｐ２、Ｐ３の、位置および姿勢の範囲を指定する。例えば、ロボットアームＡの固定台Ｆの位置・姿勢の範囲を指定する場合、タスク空間（ベースＢ上の作業環境：以下同様とする）上における座標パラメータの上限と下限を指定することが考えられる。ここで、ロボットアームの固定台Ｆの位置は、例えばタスク空間におけるｘ、ｙ、ｚと、各軸廻りの回転量をＺＹＸオイラー角としてα、β、γによって表現する。そして、各座標値およびオイラー角の配置範囲は、各々、次のような最小値〜最大値の範囲に設定する。即ち、これらの範囲は、ｘｍｉｎ＜ｘ＜ｘｍａｘ、ｙｍｉｎ＜ｙ＜ｙｍａｘ、ｚｍｉｎ＜ｚ＜ｚｍａｘ、αｍｉｎ＜α＜αｍａｘ  、βｍｉｎ＜β＜βｍａｘ、γｍｉｎ＜γ＜γｍａｘの各下限（ｍｉｎ）〜上限（ｍａｘ）の範囲である。同様に、ワーク置き台Ｐ１、Ｐ２、Ｐ３についても、ベースＢ上のタスク（作業）空間上における座標パラメータの上限と下限を指定する。
【００７６】
ステップＳ１０５では、粒子群最適化における粒子の数Ｎ、粒子ｉのパラメータｗｉ、ｃ１ｉ、ｃ２ｉ、ｒ１ｉ、ｒ２ｉを粒子数分、決定する。これらは作業者が操作部２から入力させるか、予め選択した固定値を用いてもよい。
【００７７】
ステップＳ１０６では、ステップＳ１０８〜Ｓ１１６のループを制御するループ変数ｉを１に初期化する。ステップＳ１０８〜Ｓ１１６のループでは、ｉ＝１〜Ｎまでループ変数ｉを変化させ、Ｎ個の粒子ｉにそれぞれ相当するレイアウトを生成する。
【００７８】
ステップＳ１０８では、初期レイアウト決定手段３２により、粒子の位置ｘｉの初期化を行う。ここでは例えば、ｘｉはランダムな値で初期化してもよいし、他の条件で最適化した結果を用いるなどをしてもよい。いずれにせよ、ステップＳ１０２で指定した配置範囲内の座標値を用いて初期化を行う。
【００７９】
本実施形態１では、レイアウトの評価をロボットアームの動作時間のみで評価を行うため、図４の初期レイアウト生成処理（ステップＳ１０８）では、レイアウトに対応する粒子の配置（ｘｉ：位置）は、次のように生成される。即ち、ロボット設備同士が干渉もせず、教示点において、ロボットアームが逆キネマティクスを解け、ロボットアームの関節角度制限を超えない姿勢をとれ、干渉を回避する経路を生成できるレイアウトで初期化を行う。
【００８０】
ステップＳ１０８の初期レイアウト生成処理は図４のような流れで実行される（初期レイアウト決定工程）。図４のステップＳ２００では、粒子ｉの位置ｘｉをランダムに初期化する。即ち、適当なランダム処理演算を用いて、レイアウト、即ちロボットアームＡ（ロボットアーム固定台Ｆ）の位置・姿勢、およびワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を表現したベクトル（ｘｉ）を生成する。
【００８１】
ステップＳ２０１以降では、ステップＳ２００の初期化で得られた粒子ｉの位置ｘｉに対応するレイアウトを評価する。
【００８２】
まず、ステップＳ２０１では、ｘｉのレイアウトにおいて、ロボットアームＡ、ロボットアームＡの固定台Ｆ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３、障害物Ｏが互いに干渉しているか干渉チェック計算をする。ただし、ロボットアームＡがワークＷを把持している状態（工程）においては、ロボットアームＡとワークＷとの干渉チェックは行わないとする。
【００８３】
ステップＳ２０２で、ステップＳ２０１での干渉チェックでの結果、干渉が起きていた場合は、ステップＳ２００に戻り、他のレイアウト（粒子ｘｉ）を新たに生成する。
【００８４】
ステップＳ２０３では、与えられた手先の教示点Ｔ１、Ｔ２、Ｔ３から、ロボットアームＡの逆キネマティクス計算を解く。即ち、ロボットアームＡが、手先などの基準部位を教示点Ｔ１、Ｔ２、Ｔ３に移動させた時のロボットアームＡの各関節の位置（回転関節ならその回転角度）を計算する逆キネマティクス演算を行う。一般に、ロボットアームＡのリンクの長さは固定である。また、各関節には例えば関節可動範囲が定められている。そして、ステップＳ２０３の逆キネマティクス演算は、各リンクの寸法の条件を用い、また各関節の可動範囲内で、当該の教示点を実現する各関節の位置を求めるよう実行される。
【００８５】
ステップＳ２０４では、ステップＳ２０３の逆キネマティクス計算が解けたか否かを判定する。逆キネマティクス計算が解ける、すなわち、当該の教示点を実現するロボットアームＡの各関節の位置を取得できている場合にはステップＳ２０６へ移行する。もし、計算されたロボットアームＡのいずれかの関節の位置（回転関節ならその回転角度）が可動範囲を超えるなどしており、アームがその姿勢を取れない場合は、逆キネマティクス計算が解けなかった、という判断になる。また、逆キネマティクス計算が解けない場合には、ロボットアームＡのアームの手先が教示点に届かない場合なども含まれる。この場合にはステップＳ２００に復帰して、他のレイアウト（粒子ｘｉ）を新たに生成する。
【００８６】
ステップＳ２０６では、軌道生成手段３４により干渉回避軌道を生成する（軌道生成工程）。指定されている教示点リストから、各周辺機器、障害物Ｏなどとの干渉を回避可能な干渉回避軌道を生成する。一般にロボット制御では、例えば、ＲＲＴ（Ｒａｐｉｄｌｙ−ｅｘｐｌｏｒｉｎｇ  Ｒａｎｄｏｍ  Ｔｒｅｅｓ）などと呼ばれる回避経路生成技術が知られている。このようなロボットアームが周辺機器や障害物Ｏとの干渉を避けて、始点と終点を示す教示点の間を補間し、その後に、ロボットアームの移動速度情報を含んだ軌道列に補間し直すことにより干渉回避軌道を生成する。
【００８７】
本実施形態で用いる特定動作では、図１の環境でロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けながら移動させる。その後、ロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けながら移動させる。本実施形態では、このような特定動作について動作軌道を生成する。
【００８８】
ステップＳ２０８では、ステップＳ２０６の干渉回避軌道の生成結果を判定する。例えば、干渉回避軌道を一つでも生成できなかった場合は、ステップＳ２００に復帰して、他のレイアウト（粒子ｘｉ）を新たに生成する。また、ＲＲＴなどの経路探索アルゴリズムで、試行回数が閾値を越えた場合も、干渉回避軌道の生成失敗と判断するようにしてもよい。
【００８９】
ステップＳ２１０では、生成した干渉回避軌道に基づき、ロボットアームＡに実行させる特定動作の動作時間ｔｉを計算する。ここでは、ロボットアームＡの関節駆動に関して、関節に組み込まれているモータや減速機（いずれも不図示）の駆動制御値の上限などの条件を用いる。また、例えば振動軽減などの目的で関節の加速度や加加速度の上限値などを用いることができる。
【００９０】
図４のようにして、ランダムに生成した特定のレイアウト（粒子（ｘｉ））でロボットアームＡに実行させる特定動作の動作時間ｔｉを計算する。ここでは、干渉がなく、逆キネマティクス演算が可能で、回避軌道が生成できる粒子のみが初期化によって残され、それらのレイアウトにおける特定動作の動作時間ｔｉを計算する。
【００９１】
その後、図３のステップＳ１１０において、例えば次式（３）のように粒子ｉのレイアウトの評価値ｏｉの計算を行う。
【００９２】
【数３】
2018020410.tif 000005
【００９３】
粒子ｉのレイアウトの評価値ｏｉを計算する上記の式（３）では、動作時間ｔｉを分母に作用させており、従って、評価値ｏｉは特定動作に要する動作時間ｔｉが短いほど高い数値になる。
【００９４】
ステップＳ１１４では、粒子ｉのベスト位置ｘｉ＾をｘｉで初期化し、ステップＳ１１５ではループ変数ｉを１だけインクリメントし、ステップＳ１１６では、ループ変数ｉがＮ未満（ループ続行条件）か判定する。ステップＳ１１６においてｉの値がＮを超える、即ちステップＳ１０８〜Ｓ１１６のループをＮ回実行するとステップＳ１１８に移行する。ステップＳ１１８では、粒子全てで最も評価値の高い位置ｘｇ＾を、ｉ＝１〜Ｎにおいて最も評価値ｏｉの高い粒子ｉの位置ｘｉで初期化する。
【００９５】
ステップＳ１２０で、最適化の終了条件を満たしているか判定する。終了条件は、例えば、全体で最も評価がこれまでで高かった評価値ｏｇ＾が、予め定めておいた評価値の閾値を超えているかどうかで判定する。ステップＳ１２０で終了条件を満たしていない場合は、ステップＳ１２２に遷移する。また、ステップＳ１２０で終了条件を満たしていたら、ステップＳ１４０で最適位置（ｘｇ＾）に相当するレイアウトを出力し、レイアウト最適化を終了する。
【００９６】
なお、ステップＳ１４０における最適レイアウト出力では、操作部２のディスプレイ２１の３Ｄ表示（３Ｄ出力）によって、当該のレイアウトに相当する位置にロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３）が配置された状態を出力する。あるいは不図示のプリンタなどを用いて印刷出力により３Ｄ出力を行ってもよい。あるいは、最適レイアウトに対応するロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３）の各座標値を数値出力（表示／印刷）してもよい。この数値出力は、上記の３Ｄ表示中の適当な位置に重畳出力させてもよい。
【００９７】
また、上記のステップＳ１０８〜Ｓ１１６のループなどにおいて、ランダム処理によって粒子ｉに相当するレイアウトを生成する時、同時に当該のレイアウトにおけるロボットアームＡと周辺機器（ワーク置き台Ｐ１〜Ｐ３）の３Ｄ出力するようにしてもよい。即ち、初期レイアウト生成やレイアウト更新、軌道生成を実行している時、ロボット作業空間における、ロボットアームＡおよび各周辺機器の配置構成の状態や、ロボットアームの位置姿勢をリアルタイムで３Ｄ出力（ディスプレイ表示、あるいは印刷）する。このような３Ｄ出力によって、作業者にレイアウト最適化処理の様子を確認させることができる。
【００９８】
ステップＳ１２０で上記の最適化終了条件を満たしていない場合には、粒子ｉの位置（ｘｉ）を更新しつつ、位置および評価値の最適値（ｘｉ＾、ｏｉ＾）を更新するループ（Ｓ１２２〜Ｓ１３３）を実行する。まず、ステップＳ１２２ではループ変数ｉを１に初期化する。
【００９９】
ステップＳ１２４では、ｘｉを式（１）および（２）に従い更新する。即ち、式（２）により、粒子ｉの速度ｖｉの値を更新し、その値に基づき、粒子ｉの位置ｘｉを新しい位置ｘｉに更新する。これにより、粒子ｉに対応するレイアウトが、そのレイアウトを出発点として変更された新しいレイアウトに更新される。そして、ステップＳ１２６において、この更新されたレイアウトにおいて、ステップＳ１１０と同様に粒子ｉの評価値ｏｉの計算を行う。
【０１００】
ステップＳ１２８では、それまでのベストの評価値であるｏｉ＾と、ステップＳ１２６で計算したｏｉを比較し、ｏｉの方が高かったら、ステップＳ１３０において、ｘｉ＾にｘｉを、ｏｉ＾にｏｉを代入する。即ち、新しく更新されたレイアウトで評価値ｏｉが高かった場合は、ｘｉ＾、即ち粒子ｉの位置（ｘｉ）の最適値ｘｉ＾をｘｉにより更新し、評価値の最適値ｏｉ＾をｏｉで更新する。
【０１０１】
ステップＳ１３２では、ループ変数ｉを１だけインクリメントし、ステップＳ１３３ではループ変数ｉがＮ以下（ループ続行条件）かを判定し、Ｎ以下ならステップＳ１２４に戻り、上記の処理を繰り返し、ｉがＮを超えていたらステップＳ１３４に進む。
【０１０２】
上記のループ（Ｓ１２４〜１３３）が終了すると、ステップＳ１３４では、下式（４）のように当該のループで得られたｏｉの中の最大値をｏｇに代入する。
【０１０３】
【数４】
2018020410.tif 000006
【０１０４】
即ち、この演算操作は、ｏｉが最大となる粒子ｉの位置ｘｉで、ｘｇを更新する。
【０１０５】
ステップＳ１３６では、ｏｇ＾とｏｇの比較し、ｏｇがｏｇ＾を超えていたら、ステップＳ１３８で、ｘｇ＾をｘｇにｏｇ＾をｏｇに更新し、ステップＳ１２０に復帰する。ステップＳ１２０で上記の終了条件が満たされていれば、上記のようにしてステップＳ１４０で最適レイアウトを出力する。
【０１０６】
以上のように、本実施形態によれば、ロボットアームＡの特定動作（所定の工程）に適したロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）のレイアウトおよび動作を効率よく、高速に計算することができる。また、本実施形態のレイアウト最適化処理によって設定された最適なレイアウトで配置したロボットアームおよび周辺装置を有するロボットシステムによって効率よく高速に各種工業製品などの部品を製造することができる。その場合、教示点決定手段（３０）によって、実際のワークＷ（部品）の組立作業に相当する教示点列を設定して、上述のレイアウト最適化処理を実行する。これにより、特定のワークＷ（部品）の組立作業に最適なレイアウトを決定することができ、ロボットアームＡに当該の組立作業を効率よく実行させることができる。
【０１０７】
なお、本実施形態においては、ロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）のレイアウト生成や最適化のための更新にメタヒューリスティクス演算、特に、群知能の一つである粒子群最適化を利用する例を示した。しかしながら、ロボット作業環境のレイアウトを最適化する手法は粒子群最適化に限定されるものではなく、例えば蟻コロニー最適化、カッコウ探索などとして知られている他の最適化演算手法を利用してもよい。その場合には、本実施形態と同様に、各最適化演算手法における評価対象のエージェント（蟻、カッコウなど）の表現にロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）の位置姿勢を対応づければ良い。
【０１０８】
その場合、当該の最適化演算手法によって、ロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）のレイアウトを初期化し、あるいはそれを出発点として更新しつつ、評価値を求める。そして、得られたベストな評価値に相当するレイアウトを出力し設定する。その場合、本実施形態では、評価値としては、ロボットアームの動作速度ないし所要時間を用いる。
【０１０９】
なお、本実施形態１で示した実例はいずれも例示に過ぎず、それらによって本発明の特許請求の範囲が限定されるものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれるのはいうまでもない。
【０１１０】
＜実施形態２＞
本実施形態２では、上記実施形態１とはレイアウトの評価の方法を変更している。実施形態１では、初期レイアウトを生成する時、周辺機器（ワーク置き台Ｐ１〜Ｐ３）や障害物ＯとロボットアームＡが干渉をせず、教示点での逆キネマティクスも解け、干渉回避軌道生成にも成功するレイアウトのみを残し、それを評価している。
【０１１１】
これに対して、本実施形態２では、初期レイアウトを生成する際には、ランダムに粒子の位置の初期化を行うだけで、干渉をするか、教示点での逆キネマティクスを解けるか、また、干渉回避軌道生成にも成功するかのチェックを行わない。
【０１１２】
また、実施形態１では、粒子の位置の初期化でロボットアームＡが干渉しないこと、教示点での逆キネマティクスが解けることを条件としているため、逆にレイアウトの評価を行う時はロボットアームの動作時間のみを評価している。これに対して、本実施形態２では、レイアウト評価の段階で、干渉をする場合、教示点での逆キネマティクスを解けない場合、干渉回避軌道生成に失敗する場合には、評価値を与える。その場合、干渉をする場合、教示点での逆キネマティクスを解けない場合、干渉回避軌道生成に失敗する場合には、低い評価値を与えるように制御する。
【０１１３】
また、本実施形態２では、評価値を取り扱うために「評価指標」を用いる。本実施形態２でいう評価指標とは、評価を行う種類に相当し、さらに、その他の評価指標との優先順位の意味を有する。本実施形態２では、ｐｉを粒子（ｉ）単体での評価指標の優先順位、ｐｉ＾を粒子単体でのこれまでで最も高い評価を得た際の評価指標の優先順位、また、ｐｇ＾を粒子全体でのそれまでの処理で最も高い評価における評価指標の優先順位とする。
【０１１４】
本実施形態２では、レイアウト最適化装置１００や演算処理部３の構成は上記実施形態１と同様であるものとし、上記実施形態１と異なるレイアウト最適化を行う制御手順につき説明する。
【０１１５】
図５は、本実施形態２によるレイアウト最適化を行う制御手順全体の流れを示している。
【０１１６】
ここで、本実施形態２のレイアウト最適化において、ロボットアームＡに行わせるロボット動作（特定動作）は次のようなものであるものとする。即ち、図１のような配置において、ロボットアームＡは、ワークＷを把持し、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる。続いて、ロボットアームＡは、ワークＷを把持してワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで障害物Ｏとの干渉を避けて移動させる。
【０１１７】
そして、本実施形態２のレイアウト最適化では、この特定のロボット動作を行うのに適したレイアウト、即ち最適化されたロボットアームＡの固定台Ｆ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を取得する。
【０１１８】
まず、図５のステップＳ３００では、ベースＢ上の作業空間の３次元形状、ロボットアームＡ、ロボットアーム固定台Ｆ、障害物Ｏ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・形状情報を取得する。これらの形状情報の取得については、実施形態１（図３ステップＳ１００）と同様の手法を利用すればよい。
【０１１９】
次にステップＳ３０２では、上記のロボットアームＡに行わせる特定動作に対応する教示点および、補間方法の設定を行う。この教示点および、補間方法の設定についても、実施形態１（図３ステップＳ１０２）と同様の手法を用いることができる。ここでは教示点Ｔ１、Ｔ２、Ｔ３に関節補間で移動すると指定されたものとする。
【０１２０】
ステップＳ３０４では、ロボットアームＡの固定台Ｆと、周辺装置（周辺設備）、即ちワーク置き台Ｐ１、Ｐ２、Ｐ３の位置および姿勢の範囲を指定する。例えば、ロボットアームの固定台Ｆの位置・姿勢の範囲を指定する場合、タスク空間上における座標パラメータの上限と下限を指定することが考えられる。ここで、ロボットアームの固定台Ｆの位置は、例えばタスク空間におけるｘ、ｙ、ｚと、各軸廻りの回転量をＺＹＸオイラー角としてα、β、γによって表現する。そして、各座標値およびオイラー角の配置範囲は、各々、次のような最小値〜最大値の範囲に設定する。即ち、これらの範囲は、ｘｍｉｎ＜ｘ＜ｘｍａｘ、ｙｍｉｎ＜ｙ＜ｙｍａｘ、ｚｍｉｎ＜ｚ＜ｚｍａｘ、αｍｉｎ＜α＜αｍａｘ  、βｍｉｎ＜β＜βｍａｘ、γｍｉｎ＜γ＜γｍａｘの各下限（ｍｉｎ）〜上限（ｍａｘ）の範囲である。同様に、ワーク置き台Ｐ１、Ｐ２、Ｐ３についても、ベースＢ上のタスク（作業）空間上における座標パラメータの上限と下限を指定する。
【０１２１】
ステップＳ３０６で、粒子群最適化における粒子の数Ｎ、粒子ｉのパラメータｗｉ、ｃ１ｉ、ｃ２ｉ、ｒ１ｉ、ｒ２ｉを粒子数分、決定する。これらは作業者が操作部２から入力させるか、予め選択した固定値を用いてもよい。
【０１２２】
ステップＳ３０８では、ステップＳ３１０〜Ｓ３２０のループ処理の実行回数を制御するためのループ変数ｉを１に初期化する。ステップＳ３１０〜Ｓ３２０のループでは、ｉ＝１〜Ｎまでループ変数ｉを変化させ、Ｎ個の粒子ｉにそれぞれ相当するレイアウトを生成する。
【０１２３】
ステップＳ３１０で、初期レイアウト決定手段３２により、粒子の位置ｘｉの初期化を行う。この初期化処理は、例えば図４のステップＳ２００と同様で、粒子ｉの位置ｘｉをランダムに初期化する（初期レイアウト決定工程）。即ち、適当なランダム処理演算を用いて、レイアウト、即ちロボットアームＡ（ロボットアーム固定台Ｆ）の位置・姿勢、およびワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を表現したベクトル（ｘｉ）を生成する。ステップＳ７１０では、上記のようにランダム演算によって粒子群を初期化してもよいし、他の条件で最適化した結果を用いるなどをしてもよい。いずれにせよ、ステップＳ３０４で指定した配置範囲内の座標値を用いて初期化を行う。
【０１２４】
ステップＳ３１２では、生成した粒子ｉに相当するレイアウトを評価する。このレイアウト評価は図６のような流れで実行される。
【０１２５】
まず、図６のステップＳ５００では、粒子ｉの位置ｘｉに相当する配置において、ロボットアームＡ、ロボットアームＡの固定台Ｆ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３、障害物Ｏなどが互いに干渉しているか干渉チェック計算をする。
【０１２６】
ステップＳ５０１では、ステップＳ５００で行った干渉チェックの結果を判定する。上記の各部（アームと、周辺機器や障害物Ｏとのいずれか）の干渉が起きている場合は、ステップＳ５０２に移行する。また、干渉が生じていない場合にはステップＳ５０７に進む。
【０１２７】
干渉が生じている場合、ステップＳ５０２では、その干渉量として、干渉した物体同士の中で最もめり込み量が高い最大めり込み量ｄを計算する。この（最大）めり込み量は、例えば上記の各部に相当する物体形状を表現したポリゴンやワイヤフレーム輪郭どうしがめり込んでいる距離などに相当する物理量で表現する。
【０１２８】
ステップＳ５０４で、ステップＳ５０２で計算しためり込み量に応じて評価値ｏｉを計算する。評価値ｏｉは、めり込み量が多いほど評価値が低く、めり込み量が少ないほど評価値が高くなるように生成する。例えば、次式（５）のように評価値ｏｉを計算する。ここでは０割を避けるため分母に１を足している。
【０１２９】
【数５】
2018020410.tif 000007
【０１３０】
ステップＳ５０６では、粒子ｉの評価指標ｐｉに０を代入する。前記のように、評価指標とは、評価を行う種類に相当し、さらに、その他の評価指標との優先順位の意味がある。干渉した場合の評価指標ｐｉは０（優先順位が最も低い）とする。
【０１３１】
ステップＳ５０７では、ロボットアームＡの手先の位置・姿勢に関する全ての教示点Ｔ１、Ｔ２、Ｔ３においてロボットアームＡの逆キネマティクス計算を行う。
【０１３２】
ステップＳ５０８で、ステップＳ５０７で全ての教示点Ｔ１、Ｔ２、Ｔ３において逆キネマティクス計算によって全ての関節位置（角度）を生成できたか否かを判定する。ここで一つでも逆キネマティクス計算が失敗していた場合は、ステップＳ５１０に遷移する。逆キネマティクス演算が全て成功している場合はステップＳ５１６に移行する。なお、逆キネマティクス（逆運動学）計算が不可能になる原因は、実施形態１で説明したのと同様である。例えば、教示点をワーク置き台の上部にロボットアームの手先位置が来るように設定していた場合、ワーク置き台がロボットアームと離れすぎていた場合、教示点にアームの手先が届かなくなり、逆キネマティクスが解けなくなる。
【０１３３】
ステップＳ５０８で、一つでも逆キネマティクス計算が失敗していた場合には、ステップＳ５１０で逆キネマティクスが解けた回数ｎｋをカウントする。たとえば、Ｔ１の姿勢だけで逆キネマティクスが解け、Ｔ２、Ｔ３の姿勢では逆キネマティクスが解けなかった（１つの教示点で成功、他の２つで失敗）場合には、ｎｋ＝１とする。本実施形態２では、ｎｋの値が大きい（高い）ほど評価値が高いとする。
【０１３４】
ステップＳ５１２で、ステップＳ５１２で計算したｎｋから、評価値を計算する。以下のように評価値ｏｉを計算する。
【０１３５】
【数６】
2018020410.tif 000008
【０１３６】
ステップＳ５１４では、評価指標ｐｉに１を代入する。
【０１３７】
図６のステップＳ５１６では、軌道生成手段３４により干渉回避軌道を生成する（軌道生成工程）。ここでは前述の実施形態１と同様に、ＲＲＴなどの回避経路生成技術を用いて、ロボットアームＡが周辺機器周辺機器（ワーク置き台Ｐ１〜Ｐ３）や障害物Ｏとの干渉を避けて、始点と終点を示す教示点の間を補間する。そして、その後、ロボットアームの移動速度情報を含んだ軌道列に補間し直し、軌道を出力する。
【０１３８】
前記のように、本実施形態２において、ロボットアームＡに行わせる特定動作は次のようなものである。即ち、図１の環境でロボットアームＡは、ワークＷを持ち、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる。続いて、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けて移動させるという動作である。
【０１３９】
ステップＳ５１８では、ステップＳ５１６の干渉回避軌道の生成に全て成功したか否かを判定する。ここで回避軌道の生成に失敗する例としては、ＲＲＴなどの経路探索アルゴリズムで試行回数が閾値を越えた場合などが考えられる。
【０１４０】
ステップＳ５２０では、ステップＳ５１８で干渉回避軌道生成に失敗したと判定した場合の処理として、軌道生成に成功した回数ｎｐを計算する。ここで、例えば、Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる動作は軌道生成ができたとする。しかし、その後、ロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けて移動させるという軌道は生成できなかった場合、評価値ｎｐはｎｐ＝１とする。
【０１４１】
ステップＳ５２２では、ステップＳ５２０で計算したｎｐから評価値を決定する。軌道生成ができた回数が多いほうが評価値が高くなるよう、次式（７）のように評価値ｏｉを計算する。
【０１４２】
【数７】
2018020410.tif 000009
【０１４３】
ステップＳ５２４では、評価指標ｐｉに２を代入する。この評価指標ｐｉの優先順位「２」は本実施形態２では最も高い優先順位である。ただし、この優先順位の設定はあくまでも一例であり、ロボットシステムの用途や行わせる特定動作によって上記の例と異なっていてもよい。また、操作部２のメニューダイアログなどによって、評価指標ｐｉの優先順位の割り当てを変更できるようなユーザーインターフェースを設けておくことも考えられる。このようなユーザーインターフェースは、例えば、上記の「障害物や周辺機器との干渉」、「逆キネマティクス演算の成否」、「（回避）軌道生成の成否」などに割り当てる評価指標ｐｉの優先順位を作業者が任意に設定できるよう構成しておく。
【０１４４】
ステップＳ５２６では、ステップＳ５１６で計算した干渉回避軌道から、ロボットアームＡの動作時間ｔを算出する。
【０１４５】
ステップＳ５２８では、ステップＳ５２６で計算したロボットアームの動作時間ｔから、評価値を計算する。例えば、動作時間が短ければ評価値が高くなるよう、次式（８）のようにロボットアームＡの動作時間ｔの逆数を評価値とする。ただし０割を防ぐため分母には定数１を足している。
【０１４６】
【数８】
2018020410.tif 000010
【０１４７】
図６のステップＳ３１２でレイアウト評価を終了すると、図５のステップＳ３１４において、ｘｉ＾、ｏｉ＾、ｐｉ＾をそれぞれｘｉ、ｏｉ、ｐｉで初期化する。
【０１４８】
ステップＳ３１６では、ｘｇ＾、ｏｇ＾、ｐｇ＾を更新する。この更新の処理手順は図７に示してある。
【０１４９】
図７のステップＳ６００では、粒子全体での最大評価指標ｐｇ＾とｐｉが一致するかを判定する。ここで、ｐｇ＾とｐｉが一致した場合にはステップＳ６０２に移行し、一致しない場合にはステップＳ６０８に移行する。
【０１５０】
ステップＳ６０２では、粒子群全体での最大評価値ｏｇ＾と粒子単体での評価値ｏｉの大小を比較し、ｏｉの方が大きかったらＳ６０４に移行し、この条件が成立しなかった場合には更新処理を終了する。
【０１５１】
続いて、ステップＳ６０４ではｏｇ＾にｏｉを代入し、ステップＳ６０６ではｘｇ＾にｘｉを代入する。
【０１５２】
一方、ステップＳ６０８では、ｐｇ＾とｐｉを比較し、ｐｉが大きかったらステップＳ６１０に遷移し、そうでなかったら更新処理を終了する。
【０１５３】
ステップＳ６１０ではｐｇ＾にｐｉを代入し、ステップＳ６１２ではｏｇ＾にｏｉを代入する。ま、ステップＳ６１４ではｘｇ＾にｘｉを代入する。
【０１５４】
以上のようにして、ｘｇ＾、ｘｏ＾、ｘｐ＾の更新処理（図７、図５のステップＳ３１６）を終了すると、図５のステップＳ３１８において、ループ変数ｉに１だけインクリメントする。そして、ステップＳ３２０でｉがＮ以下か判定し、Ｎ以下なら（まだＮ個の初期レイアウトを全て処理していないため）ステップＳ３１０に復帰する。
【０１５５】
ステップＳ３２２では、最適化の終了条件を満たしているか判定する。ここで判断する終了条件は、例えば、全体で最も評価がこれまでで高かった評価値ｐｇ＾が評価値の閾値を超えているかどうかで判定する。このような終了条件を満たしていたらステップＳ３４０でｘｇ＾を出力しレイアウト最適化を終了する。この出力処理には、上述の実施形態１で説明したのと同様の手法を用いることができる。
【０１５６】
初めてステップＳ３２２に到達した時は、終了条件が成立しておらず、ステップＳ３２４以降のレイアウト評価処理が実行される。
【０１５７】
レイアウト評価処理では、まず、ステップＳ３２４においてループ変数ｉを１に初期化する。ステップＳ３２６では、粒子ｉの位置ｘｉを例えば式（１）、（２）に従い更新する。
【０１５８】
ステップＳ３２８では、ステップＳ３１２と同様に粒子ｉの評価値ｏｉおよびｐｉの計算を行う。また、ステップＳ３３２で、ｘｉ＾、ｏｉ＾、ｐｉ＾を図７のレイアウト評価処理（ステップＳ３１６）によって更新する。ただし、ステップＳ３３２では、図７のｘｇ＾、ｏｇ＾、ｐｇ＾を、それぞれｘｉ＾、ｏｉ＾、ｐｉ＾に置き換えた処理を行うものとする。
【０１５９】
ステップＳ３３３では、ループ変数ｉを１だけインクリメントし、ステップＳ３３４で、ｉがＮ以下か判定し、Ｎ以下なら（まだＮ個のレイアウトを全て処理していないため）、ステップＳ３２２に戻り、上記の処理を繰り返す。
【０１６０】
ステップＳ３３８では、図７のレイアウト評価処理（ステップＳ３１６）によって、ステップＳ３１６同様にｘｇ＾、ｏｇ＾、ｐｇ＾を更新する。
【０１６１】
以上のように、本実施形態によれば、ロボットアームＡの特定動作（所定の工程）に適したロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）のレイアウトおよび動作を効率よく、高速に計算することができる。
【０１６２】
なお、本実施形態２では、実施形態１とはレイアウトの評価の方法を変更しており、レイアウトの評価を行う際に、干渉をする場合、教示点での逆キネマティクスを解けない場合、干渉回避軌道生成に失敗する場合にも、評価値を与えている。そして、レイアウト評価（図５Ｓ３２２〜Ｓ３３４）においては、これらの評価値を作用させてレイアウトに相当する粒子ｉを更新しつつ、粒子群最適化により最適化を行うため、より効率的に良好なレイアウトを設定することができる。
【０１６３】
なお、実施形態１と同様、本実施形態２においても、レイアウト評価（最適化）に用いた粒子群最適化処理は、他のメタヒューリスティクス演算、特に、群知能処理に変更することができる。また、本実施形態２においても、以上に示した実例はいずれも例示に過ぎず、それらによって本発明の特許請求の範囲が限定されるものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれるのはいうまでもない。
【０１６４】
＜実施形態３＞
本実施形態３は、干渉が起こるレイアウト、ロボットアームＡの逆キネマティクス計算が計算できないレイアウト、干渉回避軌道が生成できないレイアウトの扱いが上記の実施形態１および２とは異なる。
【０１６５】
実施形態１および２では、レイアウトの評価を行う際に、最適化計算を１回で終わらせていたが、本実施形態３では、まず、互いに干渉せずに、ロボットアームＡの逆キネマティクス計算ができた教示点数を評価値として、レイアウトの最適化計算を行う。計算過程で、干渉せずに、逆キネマティクス計算が全ての教示点でできるレイアウトが一つでも生成できたら、再度、粒子群最適化の粒子の初期化を行い、最適化計算を繰り返す。最適化計算を繰り返すことで、粒子数分、干渉せず、また逆キネマティクス計算が全ての教示点で成立するレイアウトを生成することができる。その後、動作時間および、干渉回避軌道が生成できるかどうかの評価に基づきレイアウト最適化を行い、良好なレイアウトを生成する。
【０１６６】
図８は、実施形態１の図３、実施形態２の図５に相当するもので、本実施形態３によるレイアウト最適化の制御手順を示している。本実施形態３のレイアウト最適化方法においても、ロボットアームＡに行わせるロボット動作（特定動作）は次のようなものであるものとする。即ち、図１の環境でロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる。その後、ロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けて移動させる。
【０１６７】
そして、本実施形態３のレイアウト最適化では、この特定のロボット動作を行うのに適したレイアウト、即ち最適化されたロボットアームＡの固定台Ｆ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を取得する。
【０１６８】
まず、図８のステップＳ７００では、ベースＢ上の作業空間の３次元形状、ロボットアームＡ、ロボットアーム固定台Ｆ、障害物Ｏ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・形状情報を取得する。これらの形状情報の取得については、実施形態１（図３ステップＳ１００）、あるいは実施形態２（図５ステップＳ３００）と同様の手法を利用すればよい。
【０１６９】
次にステップＳ７０２では、上記のロボットアームＡに行わせる特定動作に対応する教示点および、補間方法の設定を行う。この教示点および、補間方法の設定についても、実施形態１（図３ステップＳ１０２）、あるいは実施形態２（図５ステップＳ３０２）と同様の手法を用いることができる。ここでは教示点Ｔ１、Ｔ２、Ｔ３に関節補間で移動すると指定されたとする。
【０１７０】
ステップＳ７０４では、ロボットアームＡの固定台Ｆと、周辺装置（周辺設備）、即ちワーク置き台Ｐ１、Ｐ２、Ｐ３の位置および姿勢の範囲を指定する。例えば、ロボットアームの固定台Ｆの位置・姿勢の範囲を指定する場合、タスク空間上における座標パラメータの上限と下限を指定することが考えられる。本実施形態においても、ここで、ロボットアームの固定台Ｆの位置は、例えばタスク空間におけるｘ、ｙ、ｚと、各軸廻りの回転量をＺＹＸオイラー角としてα、β、γによって表現する。そして、各座標値およびオイラー角の配置範囲は、各々、次のような最小値〜最大値の範囲に設定する。即ち、これらの範囲は、ｘｍｉｎ＜ｘ＜ｘｍａｘ、ｙｍｉｎ＜ｙ＜ｙｍａｘ、ｚｍｉｎ＜ｚ＜ｚｍａｘ、αｍｉｎ＜α＜αｍａｘ  、βｍｉｎ＜β＜βｍａｘ、γｍｉｎ＜γ＜γｍａｘの各下限（ｍｉｎ）〜上限（ｍａｘ）の範囲である。ステップＳ７０４では、この範囲内でロボットアームＡの固定台Ｆと、周辺装置（周辺設備）、即ちワーク置き台Ｐ１、Ｐ２、Ｐ３の位置および姿勢の範囲を指定する。同様に、ワーク置き台Ｐ１、Ｐ２、Ｐ３についても、ベースＢ上のタスク（作業）空間上における座標パラメータの上限と下限を指定する。
【０１７１】
ステップＳ７０５では、粒子群最適化における粒子の数Ｎ、粒子ｉのパラメータｗｉ、ｃ１ｉ、ｃ２ｉ、ｒ１ｉ、ｒ２ｉを粒子数分、決定する。これらは作業者が操作部２から入力させるか、予め選択した固定値を用いてもよい。
【０１７２】
続いて、ステップＳ７０６ではループ変数ｊを、ステップＳ７０８ではループ変数ｉを、それぞれ１で初期化する。これループ変数ｊはステップＳ７０８〜Ｓ７４０のループ処理の実行回数を、また、ループ変数ｉはステップＳ７１０〜Ｓ７１８のループ処理の実行回数をそれぞれ制御するために用いられる。
【０１７３】
ステップＳ７１０では、初期レイアウト決定手段３２により、粒子の位置ｘｉの初期化を行う（初期レイアウト決定工程）。この初期化処理は、例えば、図４のステップＳ２００と同様で、粒子ｉの位置ｘｉを初期化する。適当なランダム処理演算を用いて、レイアウト、即ちロボットアームＡ（ロボットアーム固定台Ｆ）の位置・姿勢、およびワーク置き台Ｐ１、Ｐ２、Ｐ３の位置・姿勢を表現したベクトル（ｘｉ）を生成する。ステップＳ７１０では、上記のようにランダム演算によって粒子群を初期化してもよいし、他の条件で最適化した結果を用いるなどをしてもよい。いずれにせよ、ステップＳ７０４で指定した配置範囲内の座標値を用いて初期化を行う。
【０１７４】
ステップＳ７１２では、生成した粒子ｉに相当するレイアウトを評価する。このレイアウト評価は図１０のような流れで実行される。
【０１７５】
図１０のステップＳ８００では、粒子ｉの位置ｘｉに相当する配置において、ロボットアームＡ、ロボットアームＡの固定台Ｆ、ワークＷ、ワーク置き台Ｐ１、Ｐ２、Ｐ３、障害物Ｏが互いに干渉しているか干渉チェック計算をする。
【０１７６】
ステップＳ８０１では、ステップＳ８００で行った干渉チェックの結果を判定する。上記の各部（アームと、周辺機器や障害物Ｏとのいずれか）の干渉が起きている場合は、ステップＳ８０２に進む。干渉が生じていない場合にはステップＳ８０４に進む。
【０１７７】
干渉が生じている場合、ステップＳ８０２では、干渉していた場合の評価値としてｏｉに０を代入し、レイアウト評価を終了する。
【０１７８】
一方、ステップＳ８０４では、特定動作に対応するロボットアームＡの手先の位置・姿勢に関する全ての教示点Ｔ１、Ｔ２、Ｔ３においてロボットアームＡの逆キネマティクス計算を行い、逆キネマティクスが解けた回数ｎｋをカウントする。例えば、教示点Ｔ１の姿勢だけで逆キネマティクスが解け、Ｔ２、Ｔ３の姿勢では逆キネマティクスが解けなかった場合にはｎｋ＝１とする（１回だけ成功）。この逆キネマティクス（逆運動学）演算に関する評価値ｎｋは大きい（高い）ほど評価が高くなるよう生成される。
【０１７９】
ステップＳ８０６では、ステップＳ８０４で計算した評価値ｎｋから、次式（９）のようにして評価値ｏｉを計算し、レイアウト評価処理を終了する。
【０１８０】
【数９】
2018020410.tif 000011
【０１８１】
図１０のレイアウト評価（図８ステップＳ７１２）を終了すると、図８のステップＳ７１６において、ｘｉ＾、ｏｉ＾をそれぞれｘｉ、ｏｉで初期化する。
【０１８２】
ステップＳ７１７では、ループ変数ｉに１だけインクリメントし、ステップＳ７１８で、ｉがＮ以下か判定する。ここでｉがＮ以下（Ｎ個の粒子の評価を終了していない）なら、ステップＳ７１０に復帰し、上記の処理を繰り返す。
【０１８３】
ステップＳ７２０では、ｘｇ＾、ｏｇ＾を初期化する。この初期化の手順としては、評価値ｏｉが最も高い粒子を計算し、その粒子のｘｉ、ｏｉをｘｇ＾、ｏｇ＾、ｐｇ＾に代入する。
【０１８４】
ステップＳ７２２で、粒子群に対応するレイアウトの中で、互いに干渉せずに、教示点全てで逆キネマティクス計算ができるレイアウトがあるかを判定する。この判定には、図１０のステップＳ８０６、Ｓ８１０で生成した評価値ｏの値を用いることができる。ここで、もしそのような利用可能なレイアウトがあった場合はステップＳ７３８に移行し、なかった場合はステップＳ７２３に移行する。
【０１８５】
ステップＳ７２３では、粒子ｉの位置・適応度更新を行う。このステップＳ７２３の粒子ｉの位置・適応度更新の流れは図９に示してある。
【０１８６】
まず、図９のステップＳＡ００では、ループ変数ｉを１に初期化する。なお、このループ変数ｉは、スタック上などに割り当てられたローカル変数であって、図８のｉとは独立して操作可能であるものとする。
【０１８７】
ステップＳＡ０２では、ｘｉを式（１）、（２）に従い更新する。ステップＳＡ０４では、ステップＳ７１２と同様に粒子ｉの評価値ｏｉの計算を行う。
【０１８８】
続いてステップＳＡ０６では、評価値ｏｉ＾と評価値ｏｉを比較し、ｏｉの方が高かったら、ステップＳＡ０８へ、そうでなければステップＳＡ１２に移行する。
【０１８９】
ステップＳＡ０８では、ベストな粒子の位置ｘｉ＾に位置ｘｉを、また、評価値ｏｉ＾にｏｉを代入する。
【０１９０】
ステップＳＡ１０ではループ変数ｉを１だけインクリメントし、ステップＳＡ１２でｉがＮ以下か（Ｎ個の粒子を全て処理したか）を判定し、Ｎ以下なら、ステップＳＡ０２に戻り、上記の処理を繰り返す。
【０１９１】
ステップＳＡ１４では、まず、ｘｇ、ｏｇの計算を行う。ここでは、次式（１０）のようにｉ個中の評価値ｏｉの中の最大値をｏｇに代入する。
【０１９２】
【数１０】
2018020410.tif 000012
【０１９３】
また、ｏｉが最大となる粒子ｉの位置ｘｉでｘｇを更新する。
【０１９４】
ステップＳＡ１６では、ｏｇ＾とｏｇの比較を行い、ｏｇがｏｇ＾を超えていたら、ステップＳＡ１８で、ｘｇ＾をｘｇに、ｏｇ＾をｏｇの値でそれぞれ更新し、図９の位置・適応度更新（図８ステップＳ７２３）を終了する。
【０１９５】
続いて、図８のステップＳ７３８において、互いに干渉せずに、逆キネマティクス計算が全ての教示点で解ける粒子を保存粒子ｊとして選択し、粒子バッファに格納する。
【０１９６】
ステップＳ７３９では、ループ変数ｊに１だけインクリメントし、ステップＳ７４０で、ｊがＮ以下か判定し、Ｎ以下なら、ステップＳ７０８に復帰し、上記の処理を繰り返す。もしｊがＮに達している場合には、ステップＳ７４２に移行する。
【０１９７】
ステップＳ７４２では、粒子バッファにある保存粒子ｊ（ｊ＝１〜Ｎ）で、粒子ｉ（ｉ＝１〜Ｎ）の位置ｘｉ、評価値ｏｉを初期化する。
【０１９８】
ステップＳ７４４では、最適化の終了条件を満たしているか判定する。この終了条件は、例えば、全体で最も評価がこれまでで高かった評価値ｏｇ＾が評価値の閾値を超えているかどうかで判定する。この終了条件を満たしていたら、ステップＳ７６４で最適化された粒子の位置ｘｇ＾に相当するレイアウトを出力し、レイアウト最適化を終了する。ステップＳ７６４の出力処理には、上述の実施形態１で説明したのと同様の手法を用いることができる。
【０１９９】
一方、最適化の終了条件が満たされていない場合には、ステップＳ７４６で図１１に示すような処理手順により、レイアウトの評価を行う。
【０２００】
ステップＳ９００では、軌道生成手段３４により干渉回避軌道を生成する。ここでは前述の実施形態１と同様に、ＲＲＴなどの回避経路生成技術を用いて、ロボットアームＡが周辺機器周辺機器（ワーク置き台Ｐ１〜Ｐ３）や障害物Ｏとの干渉を避けて、始点と終点を示す教示点の間を補間する。そして、その後、ロボットアームの移動速度情報を含んだ軌道列に補間し直し、軌道を出力する。
【０２０１】
前記のように、本実施形態３において、ロボットアームＡに行わせる特定動作は次のようなものである。即ち、図１の環境でロボットアームＡは、ワークＷを持ち、ワーク置き台Ｐ１に固定された教示点Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる。続いて、ロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けて移動させるという動作である。
【０２０２】
ステップＳ９０２で、ステップＳ９００の干渉回避軌道の生成に全て成功したか否かを判定する。ここで回避軌道の生成に失敗する例としては、ＲＲＴなどの経路探索アルゴリズムで試行回数が閾値を越えた場合などが考えられる。
【０２０３】
ステップＳ９０２で干渉回避軌道生成に失敗したと判定した場合は、ステップＳ９０４において軌道生成に成功した回数ｎｐを計算する。たとえば、Ｔ１から、ワーク置き台Ｐ２に固定された教示点Ｔ２まで、障害物Ｏとの干渉を避けて移動させる動作は軌道生成ができたとする。しかしながら、その後、ロボットアームＡが、ワークＷを持ち、ワーク置き台Ｐ２に固定された教示点Ｔ２からワーク置き台Ｐ３に固定された教示点Ｔ３まで、障害物Ｏとの干渉を避けて移動させる軌道を生成できなかった場合は、ｎｐ＝１とする。
【０２０４】
ステップＳ９０６で、ステップＳ９０４で計算したｎｐから評価値を決定する。軌道生成ができた回数が多いほうが評価値が高いと判定し、次式（１１）のように評価値ｏｉを計算する。ただし、ここでは０割を防ぐため分母には定数１を加算している。
【０２０５】
【数１１】
2018020410.tif 000013
【０２０６】
なお、ここで評価値ｏｉをマイナスにしているのは、動作時間での評価をプラスで行い、軌道生成に成功した回数での評価はマイナスで行うことにより、次元の違う評価を一つのスカラーである評価値で連続して行うためである。ステップＳ９０６で評価値ｏｉを生成したら、図１１のレイアウトの評価処理を終了する。
【０２０７】
一方、ステップＳ９０２で全ての干渉回避軌道を生成できている場合には、ステップＳ９０８において、ステップＳ９０２で計算した干渉回避軌道からロボットアームの動作時間ｔを算出する。続いて、ステップＳ９１０では、ステップＳ９０８で計算したロボットアームの動作時間ｔから評価値ｏｉを生成する。ここでは動作時間が短ければ評価値が高くなるよう、例えば次式（１２）のような処理によって、ロボットアームの動作時間の逆数を評価値として生成する。ただし、ここでも０割を防ぐため分母には定数１を加算している。
【０２０８】
【数１２】
2018020410.tif 000014
【０２０９】
ステップＳ９１０が終了すると、図１１（図８のステップＳ７４６）のレイアウトの評価処理を終了し、ステップＳ７４４に再度遷移して、各粒子評価値（適応度）ｏｉを更新し直した粒子群について、終了条件の判定を行う。
【０２１０】
以上のように、本実施形態によれば、ロボットアームＡの特定動作（所定の工程）に適したロボットアームＡ（の固定台Ｆ）および周辺装置（ワーク置き台Ｐ１、Ｐ２、Ｐ３…）のレイアウトおよび動作を効率よく、高速に計算することができる。
【０２１１】
なお、本実施形態３では、実施形態１および２とは、干渉が起こるレイアウト、ロボットアームＡの逆キネマティクス計算が計算できないレイアウト、干渉回避軌道が生成できないレイアウトの扱いにおいて異なる。まず、互いに干渉せずに、ロボットアームＡの逆キネマティクス計算ができた教示点数を評価値として、レイアウトの最適化計算を行う。そして、逆キネマティクス計算が可能なレイアウトのみを対象として、動作時間および干渉回避軌道が生成できるかどうかの評価を行い、レイアウト最適化を行い、良好なレイアウトを生成するようにしており、最適化計算を２回に分けている。このような最適化処理を構成することによって、複数の評価指標での最適化計算を分離することができ、最適化演算を効率的に実行することができる。
【０２１２】
なお、実施形態１と同様、本実施形態２においても、レイアウト評価（最適化）に用いた粒子群最適化処理は、他のメタヒューリスティクス演算、特に、群知能処理に変更することができる。また、本実施形態２においても、以上に示した実例はいずれも例示に過ぎず、それらによって本発明の特許請求の範囲が限定されるものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれるのはいうまでもない。
【０２１３】
本発明は、上述の実施例の１以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０２１４】
Ａ…ロボットアーム、Ｂ…ベース、Ｆ…ロボットアーム固定台、Ｏ…障害物、Ｐ…ワーク置き台、Ｗ…ワーク、２…操作部、３…演算処理部、４…記憶部、１００…レイアウト最適化装置。
【図１】
2018020410.tif 000015
【図２】
2018020410.tif 000016
【図３】
2018020410.tif 000017
【図４】
2018020410.tif 000018
【図５】
2018020410.tif 000019
【図６】
2018020410.tif 000020
【図７】
2018020410.tif 000021
【図８】
2018020410.tif 000022
【図９】
2018020410.tif 000023
【図１０】
2018020410.tif 000024
【図１１】
2018020410.tif 000025