干渉判定装置および干渉判定方法
【課題】干渉のない立体交差を考慮しつつも、干渉判定を短時間で行う。
【解決手段】
識別番号を割り当てる識別番号割当部421と、干渉情報を格納する干渉情報格納部412と、干渉条件情報を格納する干渉条件情報格納部413と、3次元空間を2次元平面上に投影し、2次元平面をn1×n2のマス目に区切るマス目管理部424と、障害物対応マス目を特定し障害物占有情報で初期化するメモリ領域初期化部425と、ロボット対応マス目を特定しロボット占有情報を記録する占有情報記録部426と、ロボット占有情報と干渉条件情報間の論理積を求め、論理積の全ての桁が「0」なら「干渉無し」と、少なくとも一つの桁が「1」なら「干渉有り」と判断する判断部427を備える。ロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、障害物占有情報と識別番号間の論理和がロボット占有情報となる。
【解決手段】
識別番号を割り当てる識別番号割当部421と、干渉情報を格納する干渉情報格納部412と、干渉条件情報を格納する干渉条件情報格納部413と、3次元空間を2次元平面上に投影し、2次元平面をn1×n2のマス目に区切るマス目管理部424と、障害物対応マス目を特定し障害物占有情報で初期化するメモリ領域初期化部425と、ロボット対応マス目を特定しロボット占有情報を記録する占有情報記録部426と、ロボット占有情報と干渉条件情報間の論理積を求め、論理積の全ての桁が「0」なら「干渉無し」と、少なくとも一つの桁が「1」なら「干渉有り」と判断する判断部427を備える。ロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、障害物占有情報と識別番号間の論理和がロボット占有情報となる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、干渉判定装置および干渉判定方法に関するものである。
【背景技術】
【0002】
先端に昇降軸を持つ二台の水平多関節アームを人間の両腕のように配置した双腕ロボットは、設置に要するスペースの割に自由度が高く、また両腕の作業領域の少なくとも一部が重複していることからワークを押さえつつねじ締めを行うなどの複合作業が可能であるという利点がある。しかし、各アームは移動経路で衝突する危険があり、作業者はその動きを予測することが困難である。そこで、双腕ロボットの各アームが他方のアームの作業領域に一部でも重複するような作業領域内で移動する際、互いのアームが相手の移動軌道上に重なるかどうかという干渉判定が必要となる。また、双腕ロボットが実際に作業を行う上で、左右のアーム同士以外にも、治具や安全柵などの障害物との干渉が生じる可能性があり、水平多関節アームと障害物の干渉判定も必要になる場合がある。
【0003】
干渉判定を行う方法としては、いくつかの方式が存在する。例えば、工作機械を制御する数値制御装置で干渉チェックを行うために、「複数の機械構造物の干渉領域を各々定義し、前記干渉領域を移動させ、前記各々の機械構造物の干渉領域がそれぞれ干渉するかをチェックする機能を有する数値制御装置について、前記干渉領域として、直方体、円筒、平面の立体図形で定義し、各々の立体図形が交差するか交差しないかにより干渉をチェックする」という方式がある(特許文献1参照)。また、干渉判定を行う他の方法として、水平多関節ロボットに対して、「3次元ロボットモデルを2次元平面上に投影した2次元ロボットモデルに変換」し、「3次元障害物モデルを2次元障害物モデルとして分割」したものとの干渉判定を行う方式も存在する(特許文献2参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009−054043号公報
【特許文献2】特開2004−202627号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記の特許文献1の発明のように、3次元方向の運動を行う3次元物体に対する干渉判定は、定義が容易な3次元の単純近似モデルに変換して行われることが多い。しかしながら、双腕ロボットの2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作と治具の上昇下降を考えない)場合に、これを3次元モデルで扱うことは処理時間の短縮やメモリ確保の観点で有益ではない。
【0006】
また、特許文献2の発明においては、障害物モデルの分割は3次元障害物モデルの高さ毎に行われ、水平多関節ロボットの設置面からアームまでの高さ(高さは一定であるが、ある厚みを持つ)と一致する障害物モデルのみが干渉判定の対象となる。そのため、2次元ロボットモデルを用いているにもかかわらず、立体交差が可能な部分を干渉判定から除外した結果を短時間で得ることができる。この方式の優れている点は、水平多関節ロボットの高さと一致する分割面のみを判定すればよいという点である。しかしながら、例えば水平多関節ロボットを複数の分割面に分けなければならないような場合には、それぞれの分割面で干渉判定を行わなければならない。双腕ロボットもこれに該当し、ロボットアームを構成する各部分(第1リンク、第2リンク、先端の昇降軸など)で異なる高さを持つために干渉判定を行うべき分割面が多数になる可能性があり、このような場合には、演算量が増加し、処理に長時間を要するという問題がある。また、特許文献2の発明においては、2次元平面上に投影した2次元ロボットモデルの占有領域の重複だけで干渉判定を行っており、干渉のない立体交差は存在しないことを前提としている。つまり、特許文献2の場合において、干渉のない立体交差は考慮の対象に入っていない。しかし、干渉のない立体交差があるか否かを更に考慮に入れることにより、干渉判定の精度が更に向上することが期待される。
【0007】
そこで、本発明は上記に鑑みてなされたもので、干渉のない立体交差を考慮しつつも、干渉判定を短時間で行うことが可能な干渉判定装置および干渉判定方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明の干渉判定装置は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当てる識別番号割当手段と、前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報を干渉情報として格納する干渉情報格納手段と、前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報を、前記干渉判定対象部位ごとに格納する干渉条件情報格納手段と、前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定してそのメモリ領域を初期化する手段であって、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する手段であって、当該特定したロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する判断手段と、を備えることを特徴とする。
【0009】
また、本発明の干渉判定方法は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定方法であって、複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当て、前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報が干渉情報として格納され、前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報が、前記干渉判定対象部位ごとに格納され、前記ロボットおよび前記障害物の存在する空間が2次元平面上に投影された上で、前記2次元平面がn1×n2のマス目に区切られるとともに、前記n1×n2のマス目それぞれに対応するメモリ領域が確保され、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目が特定されそのメモリ領域が初期化されるステップにおいて、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報が前記障害物対応マス目のメモリ領域に記録されることにより、前記障害物対応マス目のメモリ領域が初期化され、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目が特定され、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報が前記ロボット対応マス目のメモリ領域に記録されるステップにおいて、当該特定されたロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和が前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録され、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積が前記ロボット対応マス目ごとに求められ、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断され、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断される、ことを特徴とする。
【0010】
このような本発明の干渉判定装置および干渉判定方法では、識別番号、干渉情報、干渉条件情報、障害物占有情報、およびロボット占有情報がロボットの干渉判定対象部位同士、およびロボットと障害物との間の干渉を判定するための必須の情報として用いられる。このうち、特に干渉情報および干渉条件情報は、ロボットの干渉判定対象部位がロボットの他の部位および障害物との間で立体交差する際に干渉を伴わない場合の値および干渉を伴う場合の値に基づいた情報である。したがって、これら干渉情報および干渉条件情報を用いることにより、本発明による干渉判定の結果にはロボットの干渉判定対象部位同士、およびロボットと障害物との間の立体交差時の干渉の有無が考慮されることとなる。これにより、干渉判定の精度が向上される。
【0011】
また、本発明においては、ロボットおよび障害物の存在する空間を2次元平面上に投影した上で干渉判定を行うため、例えば3次元での干渉判定に比べ、干渉判定処理を短時間で行うことが可能となる。また、本発明で用いる干渉情報は「0」または「1」を表す情報であり、そのデータ量が少ないことから、装置全体における計算量や計算時間が短縮できる。
【0012】
また、本発明においては、メモリ領域初期化手段が障害物対応マス目のメモリ領域を障害物占有情報で初期化する。次に、占有情報記録手段はロボット対応マス目のメモリ領域が障害物占有情報で初期化されている場合に、つまり干渉判定を行うために特定したロボット対応マス目が障害物対応マス目でもある場合に、当該障害物占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として記録する。次に、判断手段は、このように記録されたロボット占有情報に基づき干渉判定を行う。以上により、干渉判定結果には、常に、ロボットの干渉判定対象部位と障害物間の干渉有無が反映されることとなる。しかも、障害物対応マス目は障害物占有情報で初期化されているので、障害物の干渉有無を判定するために障害物を干渉判定の対象として別途判定処理を行わなくて済む。障害物対応マス目のメモリ領域が障害物占有情報で初期化されたことをベースとして、ロボットの干渉判定対象部位に対する干渉判定処理を行えば、その干渉判定結果には、常に、ロボットの干渉判定対象部位と障害物間の干渉有無が含まれることとなるからである。これにより、干渉判定処理を更に短時間で行うことが可能となる。
【0013】
また、本発明において、前記メモリ領域初期化手段は、前記n1×n2のマス目のうち前記障害物に対応しないマス目のメモリ領域に「0」を表す情報を記録することにより、該マス目のメモリ領域を初期化し、前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域が前記「0」を表す情報により初期化されている場合には、前記ロボットの前記干渉判定対象部位の前記識別番号を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録しても良い。
【0014】
この発明によれば、障害物に対応しないマス目のメモリ領域を初期化するための具体的な手法、および当該初期化されたメモリ領域にロボット占有情報を記録するための具体的な手法が提供される。
【0015】
また、本発明において、前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合には、前記既存のロボット占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を新たなロボット占有情報として前記ロボット対応マス目のメモリ領域に記録しても良い。
【0016】
この発明によれば、既存のロボット占有情報が記録されている場合に、新たなロボット占有情報を記録するための具体的な手法が提供される。
【0017】
また、本発明において、前記干渉条件情報格納手段は、下記の数式(1)により計算される情報Ciを前記干渉条件情報として格納しても良い。
【数1】
ただし、hは前記干渉判定対象部位の数に前記障害物の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の前記干渉判定対象部位の前記干渉条件情報であり、IDjはj番目の前記干渉判定対象部位または前記障害物の前記識別番号であり、tijはi番目の前記干渉判定対象部位とj番目の前記干渉判定対象部位または前記障害物における前記干渉情報である。
【0018】
この発明によれば、干渉条件情報を計算するための具体的な手法が提供される。
【0019】
また、本発明において、前記ロボットの動作における動作開始時刻と動作終了時刻との間が一定時間間隔ごとに区切られ、当該区切られた各時刻における前記干渉判定対象部位の位置に対して、前記占有情報記録手段は、前記各時刻における前記ロボット対応マス目を特定し、前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録し、前記判断手段は、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断しても良い。
【0020】
この発明によれば、ロボットの動作における動作開始時刻と動作終了時刻との間の各時刻に対して干渉判定が行われる。これにより、動作中の全ての時刻において干渉が生じないことを判断した上で、安全にロボットを動作させることができる。
【0021】
また、本発明において、前記ロボットは、水平多関節アームを有する双腕ロボットであっても良い。
【0022】
この発明は、ロボットが水平多関節アームを有する双腕ロボットである場合に特に有用である。
【0023】
また、本発明において、前記識別番号、前記干渉条件情報、前記障害物占有情報、および前記ロボット占有情報は、前記ロボットの前記干渉判定対象部位の数に前記障害物の数を足した数と同数の前記複数の桁数を有する情報であっても良い。
【0024】
この発明は、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が、ロボットの干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することから、各情報が必要最小限の桁数を有することとなり、演算に無駄がなく、必要最小限のメモリ量を用いて演算を行うことができる。また、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報がロボットの干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することにより、例えば干渉判定対象部位や障害物の数が増えた場合には、増えた箇所に関する干渉条件を設定した上で、増えた箇所の数だけ識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報の桁数を増やして、本発明における干渉判定を行うことができる。このように、本発明によれば、干渉判定対象部位や障害物の数が増えた場合に、柔軟な対応が可能である。また、「0」か「1」かの少ないデータ量で計算を行うことから、干渉判定対象部位や障害物の数が増えたことに伴って、装置全体の計算量や計算時間が極端に増えることを防止できる。
【0025】
また、本発明の干渉判定装置は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定して、前記障害物が前記障害物対応マス目を占有するか否かを示す障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記干渉判定対象部位が前記ロボット対応マス目を占有するか否かを示すロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、前記占有情報記録手段が前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に前記障害物占有情報が記録されている場合には、前記障害物との間で干渉が生じると判断し、そのメモリ領域に既に前記ロボットの他の干渉判定対象部位の前記ロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する判断手段と、を備えることを特徴とする。
【0026】
このような本発明の干渉判定装置は、マス目管理手段、メモリ領域初期化手段、占有情報記録手段、および判断手段のみを必須の構成要素とする簡素な構成となり、このような構成により、簡易的な干渉判定処理が可能となる。この簡易的な干渉判定処理は、干渉判定対象部位が少なく、2次元平面上での動作(例えばアームの旋回動作)だけを考慮すれば良いロボットおよび障害物に対して特に有効である。すなわち、マス目を使って2次元平面上での干渉判定を行うため、3次元的な空間やモデルを用いて干渉判定を行う場合に比べて極めて少ないデータ量で計算ができ、干渉判定を高速化でき、ロボットの2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作や冶具の上昇下降がない)場合に特に有効である。
【発明の効果】
【0027】
本発明によれば、干渉のない立体交差を考慮しつつも、干渉判定を短時間で行うことが可能な干渉判定装置および干渉判定方法を提供することができる。
【図面の簡単な説明】
【0028】
【図1】双腕ロボットシステム100の構成概要図である。
【図2】双腕ロボット3の側面概要図である。
【図3】双腕ロボット3の上面概要図である。
【図4】干渉判定部4の機能的構成要素を示したブロック図である。
【図5】識別番号割当部421が双腕ロボット3の干渉判定対象部位および障害物5に割り当てた識別番号IDiの一例を示す図である。
【図6】干渉情報生成部422が作成したテーブルの一例を示す図である。
【図7】干渉条件情報生成部423により生成された干渉条件情報の一例を示す図である。
【図8】干渉条件情報生成部423により生成された干渉条件情報の一例を示す図である。
【図9】マス目管理部424により作成された判定領域6の一例を示す図である。
【図10】双腕ロボットシステム100にて行われるメイン処理を示すフローチャートである。
【図11】干渉判定部4による干渉判定処理を示すフローチャートである。
【図12】図11のステップS204を詳細に示すフローチャートである。
【図13】図11のステップS206にて諸元等格納部411に記憶された角度テーブルの一例を示す図である。
【図14】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=1の場合)。
【図15】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=2の場合)。
【図16】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=6の場合)。
【図17】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士且つ双腕ロボット3と障害物5との間で干渉し、i=5の場合)。
【図18】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士且つ双腕ロボット3と障害物5との間で干渉し、i=6の場合)。
【図19】占有領域の特定方法を説明するための図である。
【図20】占有領域の特定方法を説明するための図である(手順1)。
【図21】占有領域の特定方法を説明するための図である(手順2)。
【図22】占有領域の特定方法を説明するための図である(手順3)。
【発明を実施するための形態】
【0029】
以下、添付図面を参照して本発明にかかる干渉判定装置および干渉判定方法の好適な実施形態を詳細に説明する。なお、図面の説明において同一の要素には同一の符号を付し、重複する説明を省略する。
【0030】
[双腕ロボットシステム100の全体構成]
まず、本発明の実施形態に係る双腕ロボットシステム100の全体構成について、図1〜3を参照しながら説明する。図1は、双腕ロボットシステム100の構成概要図である。図1に示すように、双腕ロボットシステム100は、軌道生成部1、サーボドライバ2a〜2d、双腕ロボット3、および干渉判定部4を含んで構成され、各構成要素は例えば図1にて矢印で表現される通信手段により互いに通信できるように接続されている。図2は双腕ロボット3の側面概要図であり、図3は双腕ロボット3の上面概要図である。
【0031】
双腕ロボット3は、例えば図2および図3に示されるように、先端に昇降軸313および323を持つ二台の水平多関節アーム31および32を有する。水平多関節アーム31および32は、人間の両腕のように作業領域の少なくとも一部が重複する間隔で例えば障害物5を挟んで配置される。各アームの第1軸311および321の付け根(双腕ロボット3の肩部分)と、第2軸312および322の付け根(双腕ロボット3のひじ部分)には、それぞれ、サーボモータ3a〜3dが設けられている。この構成により各軸は水平方向に旋回移動できるようになっている。
【0032】
図1にて示される軌道生成部1は、双腕ロボット3の各部位が現在位置から目標位置まで移動できるように、各関節の移動量および移動速度を演算し、各サーボドライバに指令を送る部分である。軌道生成部1は、記憶部11および演算部12を含んで構成される。記憶部11は、軌道生成に必要な双腕ロボット3の概形寸法や移動に関する補間情報ならびに速度情報などの諸元と、教示もしくはロボット言語によるプログラミングによって記述されたロボットの動作順序を制御する動作プログラム、および干渉判定に必要な干渉条件を格納する部分である。演算部12は、双腕ロボット3の各部位が現在位置から目標位置まで移動できるように、各関節の移動量および移動速度を演算する部分である。双腕ロボット3の移動前に、軌道生成部1の演算部12は干渉判定部4へ、移動前の位置から移動後の位置に移動する場合の移動中および移動後の干渉の有無を問い合わせる。
【0033】
サーボドライバ2a〜2dは、軌道生成部1からの指令を受けて、双腕ロボット3の各関節に設けられたサーボモータ3a〜3dをそれぞれ駆動し、駆動後の現在位置を軌道生成部1にフィードバックする部分である。
【0034】
[干渉判定部4の構成]
以下、双腕ロボットシステム100の一構成要素である干渉判定部4(特許請求の範囲における「干渉判定装置」に相当)の構成について、図4〜図9を更に参照しながら詳細に説明する。干渉判定部4は、軌道生成部1から問い合わせを受けて、3次元で動作する双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5(ワークまたは治具)との間の干渉判定を行う部分である。図4は、干渉判定部4の機能的構成要素を示したブロック図である。図4に示されるように、干渉判定部4は、格納部41および干渉判定演算部42を含んで構成される。
【0035】
干渉判定部4の格納部41は、諸元等格納部411、干渉情報格納部412(特許請求の範囲における「干渉情報格納手段」に相当)、および干渉条件情報格納部413(特許請求の範囲における「干渉条件情報格納手段」に相当)を含んで構成される。諸元等格納部411は、電源投入後に受け取った双腕ロボット3の諸元、および軌道生成部1からの問い合わせ毎に受け取った移動前後の双腕ロボット3の部位毎の角度を格納する部分である。干渉情報格納部412は、双腕ロボット3および障害物5における干渉情報を格納する部分である。干渉情報は、後に詳細に説明されるように、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に、干渉を伴わない場合には「0」を、干渉を伴う場合には「1」を表す情報である。干渉条件情報格納部413は、干渉条件情報を双腕ロボット3の干渉判定対象部位ごとに格納する部分である。干渉条件情報は、後に詳細に説明されるように、干渉情報に基づき設定され、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴うか否かを表す情報である。
【0036】
干渉判定部4の干渉判定演算部42は、格納部41に格納された各情報に基づき干渉判定を行う部分である。干渉判定演算部42は、双腕ロボット3の移動前後の各関節の角度に対して、更に一定時間毎に分割された移動過程の各関節の角度に対して、それぞれ干渉判定を行う。干渉判定演算部42は、図4に示されるように、識別番号割当部421(特許請求の範囲における「識別番号割当手段」に相当)、干渉情報生成部422(特許請求の範囲における「干渉情報格納手段」に相当)、干渉条件情報生成部423(特許請求の範囲における「干渉条件情報格納手段」に相当)、マス目管理部424(特許請求の範囲における「マス目管理手段」に相当)、メモリ領域初期化部425(特許請求の範囲における「メモリ領域初期化手段」に相当)、占有情報記録部426(特許請求の範囲における「占有情報記録手段」に相当)、および判断部427(特許請求の範囲における「判断手段」に相当)を含んで構成される。以下、干渉判定演算部42を構成する各構成要素について詳細に説明する。
【0037】
[識別番号割当部421]
識別番号割当部421は、双腕ロボット3の干渉判定対象部位および障害物5に識別番号を割り当てる部分である。各識別番号は、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し且つ他の全ての識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定される情報である。具体的に、識別番号割当部421が図2および図3にて示した双腕ロボット3の干渉判定対象部位および障害物5に割り当てた識別番号IDiの一例を図5に示す。図5の一例において、識別番号割当部421は、アーム31の第1軸(第1リンク)311に対して、識別番号ID1として「1000000」を割り当てている。また、識別番号割当部421は、アーム32の昇降軸323に対して、識別番号ID6として「0000010」を割り当てている。更に、識別番号割当部421は、障害物5に対して、識別番号ID7として「0000001」を割り当てている。ここで挙げた一例においては、双腕ロボット3の干渉判定対象部位および障害物5が合計で「7つ」あるため、各識別番号IDiの桁数は「7」となっている。また、本実施形態においては、識別番号を「IDi」で表示する場合に、双腕ロボット3の干渉判定対象部位に対して先に「i」の値を割り当て、その後に障害物5に対して「i」の値を割り当てることとする。つまり、上記一例においては双腕ロボット3の干渉判定対象部位が6つあるため、ID1からID6までを双腕ロボット3の干渉判定対象部位に割り当て、障害物5をID7とする。また、障害物5の数は複数であっても良く、例えば障害物5が3つある場合には、各識別番号IDiの桁数を「9」とすれば良い。また、ID1からID7までの桁ごとの論理積を計算すると、全ての桁において「0」となる。
【0038】
[干渉情報生成部422]
干渉情報生成部422は、双腕ロボット3の干渉判定対象部位と他の部位との間、および双腕ロボット3の干渉判定対象部位と障害物5との間で、干渉のない立体交差が存在しない場合(つまり立体交差する際に干渉を伴う場合)は「1」とし、干渉のない立体交差が可能である場合(つまり立体交差する際に干渉を伴わない場合)もしくは自分自身との関係は「0」としたテーブルを作成する部分である。
【0039】
具体的に、干渉情報生成部422が作成したテーブルの一例を図6に示す。図6の一例において、例えばi=1およびj=2の場合における干渉の有無を示す干渉情報t12の値は「0」であり、これはi=1に相当するアーム31の第1軸311とj=2に相当するアーム31の第2軸312との間では、干渉のない立体交差が存在すること、つまり立体交差する際に干渉を伴わないことを示す。また、例えばi=4およびj=3の場合における干渉の有無を示す干渉情報t43の値は「1」であり、これはi=4に相当するアーム32の第1軸321とj=3に相当するアーム31の昇降軸313との間では、干渉のない立体交差が存在しないこと、つまり立体交差する際に干渉を伴うことを示す。また、例えばi=5およびj=5の場合における干渉の有無を示す干渉情報t55の値は「0」であり、これはi=5に相当するアーム32の第2軸322が自分自身との間で干渉することは有り得ないことを示す。
【0040】
干渉情報生成部422は、このようにして作成したテーブルを格納部41の干渉情報格納部412に格納させる。なお、干渉情報生成部422は、識別番号ID7の障害物5に対しては、干渉情報t71、t72などを求めなくても良い。双腕ロボット3側の干渉情報t17、t27などにおいて障害物5との干渉の有無が既に考慮されているからである。また、この意味では、干渉情報tijの値と干渉情報tjiの値は常に同じであるため、図6の一例をtijかtjiのうち何れか一方のみを明らかにしたテーブルにしても良い。
【0041】
[干渉条件情報生成部423]
干渉条件情報生成部423は、干渉条件情報を生成する部分である。干渉条件情報は、干渉情報に基づき設定され、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴うか否かを表す情報である。干渉条件情報生成部423は、下記の数式(1)により計算される情報Ciを干渉条件情報として生成する。
【数2】
ただし、hは双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の干渉判定対象部位の干渉条件情報であり、IDjはj番目の干渉判定対象部位または障害物の識別番号であり、tijはi番目の干渉判定対象部位とj番目の干渉判定対象部位または障害物における干渉情報である。
【0042】
以下、干渉条件情報生成部423による干渉条件情報の生成方法を詳細に説明する。まず、簡単な一例として、干渉判定対象部位が2個のみで障害物はないケースを考える。すなわち、右腕(ID1=01)と左腕(ID2=10)のみの干渉判定を行う場合を考える。この場合に干渉条件情報生成部423により生成される干渉条件情報を図7に示す。なお、図7の一例においては、右腕と左腕とが立体交差する際に干渉を伴うとして、干渉情報が設定されている。つまり、t12=1であり、t21=1である。
【0043】
図7の一例において、i=1の識別番号ID1の部位である右腕に対して干渉条件情報C1を求めると、上記式(1)に従い、
C1=ID1・t11+ID2・t12…(2)
である。そして、図7の一例において、ID1=01、t11=0、ID2=10、t12=1であるため、それぞれの値を上記式(2)に代入すると、
C1=01・0+10・1=10…(3)
となり、識別番号ID1の右腕の干渉条件情報C1の値は10として求められる。
【0044】
続いて、より複雑な例として、図2および図3にて示した双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数が7つであるケースを考える。説明の便宜上、図5および図6の場合と同様の識別番号および干渉情報について考える。この場合に干渉条件情報生成部423により生成される干渉条件情報を図8に示す。この場合において、i=1の識別番号ID1の部位であるアーム31の第1軸311に対して干渉条件情報C1を求めると、上記式(1)に従い、
C1=ID1・t11+ID2・t12+ID3・t13+ID4・t14+ID5・t15+ID6・t16+ID7・t17…(4)
である。そして、ID1=1000000、t11=0、ID2=0100000、t12=0、ID3=0010000、t13=1、ID4=0001000、t14=1、ID5=0000100、t15=0、ID6=0000010、t16=1、ID7=0000001、t17=0であるため、それぞれの値を上記式(4)に代入すると、
C1=1000000・0
+0100000・0
+0010000・1
+0001000・1
+0000100・0
+0000010・1
+0000001・0
=0011010…(5)
となり、識別番号ID1のアーム31の第1軸311の干渉条件情報C1の値は0011010として求められる。
【0045】
同様に、他の干渉判定対象部位に対して干渉条件情報を求めることができ、その結果が図8にC2〜C6の値として示されている。干渉条件情報生成部423は、このようにして生成した干渉条件情報を格納部41の干渉条件情報格納部413に格納させる。なお、干渉条件情報生成部423は、識別番号ID7の障害物5に対しては干渉条件情報を求めなくても良い。障害物5に対して別途干渉判定処理を行わなくても、判定結果を全体としてみれば、双腕ロボット3の干渉判定対象部位と障害物5との間の干渉有無が常に含まれているからである。
【0046】
[マス目管理部424]
マス目管理部424は、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する部分である。図9は、マス目管理部424により作成された判定領域6の一例を示す。判定領域6は、双腕ロボット3の姿勢および障害物5の位置を演算するために要する諸元を格納した諸元等格納部411の値を元に、双腕ロボット3の動作する範囲を包含する空間、もしくは双腕ロボット3の動作する範囲の一部であって干渉判定の対象となる空間を2次元平面上に投影したn1×n2の2次元平面のマス目で表現されるものである。
【0047】
[メモリ領域初期化部425]
メモリ領域初期化部425は、障害物対応マス目および障害物非対応マス目のメモリ領域を初期化する部分である。「障害物対応マス目」は、マス目管理部424によるn1×n2のマス目のうち障害物5に対応するマス目を言い、「障害物非対応マス目」はn1×n2のマス目のうち障害物5に対応しないマス目を言う。具体的に、メモリ領域初期化部425は、n1×n2の全てのマス目に対して、そのメモリ領域に「0」を表す情報を記録する。その後、メモリ領域初期化部425は、障害物対応マス目を特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録することにより、障害物対応マス目のメモリ領域を初期化する。「障害物占有情報」は、障害物5の識別番号に基づく情報であり、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有する情報である。本実施形態では、「障害物占有情報」が「障害物5の識別番号」である場合を一例として挙げて、以下説明する。メモリ領域初期化部425による障害物占有情報の記録により、個々のマス目を占有する障害物5に対応するビットが立った状態となる。なお、障害物対応マス目として特定されない障害物非対応マス目は、そのメモリ領域に「0」を表す情報が記録されたままで初期化されたことになる。
【0048】
図9は、メモリ領域初期化部425により初期化される障害物対応マス目および障害物非対応マス目の一例を示す図としても参照することができる。図9の一例において、2次元平面上に投影した障害物5が存在する領域が符号5mで示されるように特定されており、当該領域に対応するマス目、つまり障害物5の領域5mに全部または一部がかかっているマス目が、障害物対応マス目としてハッチング表示されている。なお、以下の説明において「領域に対応するマス目」という場合には、当該領域に全部または一部がかかっているマス目のことを指す。また、上記障害物対応マス目を除外した全てのマス目が本実施形態で言う障害物非対応マス目である。なお、個々のマス目を特定する方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する。
【0049】
[占有情報記録部426]
占有情報記録部426は、マス目管理部424による上記n1×n2のマス目のうち、双腕ロボット3の干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する部分である。「ロボット占有情報」は、双腕ロボット3の干渉判定対象部位の識別番号に基づく情報であり、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有する情報である。占有情報記録部426によるロボット占有情報の記録により、個々のマス目を占有する双腕ロボット3の干渉判定対象部位に対応するビットが立った状態となる。
【0050】
図9は、占有情報記録部426が特定したロボット対応マス目の一例を示す図としても参照することができる。図9の一例において、2次元平面上に投影した判定対象となる姿勢をとった双腕ロボット3の干渉判定対象部位が存在する領域が符号311m、312m、313m、321m、322m、および323mで示されるように特定されている。また、各領域に対応するマス目のうち符号312mおよび313mで表示された領域に対応するロボット対応マス目がハッチング表示されている。ロボット対応マス目が重なる部分についてはハッチング表示も重なっている。なお、個々のマス目を特定する方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する。
【0051】
占有情報記録部426によるロボット占有情報の記録方法は、大きく3つのパターンに分けられる。1つ目のパターンは、特定したロボット対応マス目のメモリ領域が「0」を表す情報により初期化されている場合に、双腕ロボット3の干渉判定対象部位の識別番号をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後のロボット占有情報は、当該ロボット対応マス目を双腕ロボット3の当該干渉判定対象部位が占有することを表すこととなる。
【0052】
2つ目のパターンは、特定したロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、当該障害物占有情報と双腕ロボット3の干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後のロボット占有情報は、当該ロボット対応マス目を障害物5と双腕ロボット3の当該干渉判定対象部位の両方が占有することを表すこととなる。なお、「ロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合」とは、言い換えれば、既に障害物5が占有している領域が双腕ロボット3の干渉判定対象部位の存在する領域としても特定されたことである。
【0053】
3つ目のパターンは、特定したロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合に、当該既存のロボット占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和を新たなロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後の新たなロボット占有情報は、当該ロボット対応マス目を双腕ロボット3の既存の干渉判定対象部位と現在の干渉判定対象部位の両方が占有することを表すこととなる。なお、「ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合」とは、言い換えれば、既に他の干渉判定対象部位が占有している領域が現在の干渉判定対象部位の存在する領域としても特定されたことである。
【0054】
[判断部427]
判断部427は、ロボット占有情報および干渉条件情報における桁ごとの論理積をロボット対応マス目ごとに求め、当該論理積の結果に基づき干渉判断を行うものである。判断部427は、当該論理積の結果が全ての桁において「0」であれば、双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間で干渉は生じないと判断する。一方で、判断部427は、当該論理積の結果が少なくとも一つの桁において「1」であれば、双腕ロボット3の干渉判定対象部位同士、または双腕ロボット3と障害物5との間で干渉が生じると判断する。判断部427は、干渉判断の結果を示す情報を軌道生成部1に出力する。判断部427は、干渉判断の結果を出力する際に、干渉が生じている箇所を特定する情報をともに出力するようにしても良い。
【0055】
[双腕ロボットシステム100の動作]
続いて、双腕ロボットシステム100により行われる動作について、図10〜図18を参照しながら説明する。下記の説明は、双腕ロボットシステム100におけるメイン処理と、干渉判定部4による干渉判定処理とに大別される。
【0056】
[メイン処理]
まず、双腕ロボットシステム100におけるメイン処理について図10を参照しながら説明する。図10は、双腕ロボットシステム100にて行われるメイン処理を示すフローチャートである。
【0057】
最初に、軌道生成部1の演算部12が、記憶部11に格納されているパラメータを干渉判定部4の干渉判定演算部42に送信する。このパラメータは、干渉判定の対象部位毎に設定されるものであり、上述した干渉情報tijを含む(ステップS101)。
【0058】
次に、軌道生成部1の演算部12が、各サーボドライバ2a〜2dから双腕ロボット3の各部位の現在角度を読み込む(ステップS102)。
【0059】
次に、軌道生成部1の演算部12が、記憶部11に格納された動作プログラムを解析して、双腕ロボット3の各部位の移動先の角度(目標角度)を求める(ステップS103)。
【0060】
次に、軌道生成部1の演算部12が、双腕ロボット3の各部位の現在角度と目標角度を干渉判定部4の干渉判定演算部42に送信する(ステップS104)。
【0061】
次に、軌道生成部1の演算部12は干渉判定部4の干渉判定演算部42からの判定結果信号を待つ(ステップS105)。この間、干渉判定部4では詳細を後述する干渉判定処理が行われ、双腕ロボット3のアーム31,32の移動の全体で部位同士または双腕ロボット3と障害物5との間で干渉が生じないかどうかが判定される。そして、干渉判定部4の干渉判定演算部42からの判定結果信号が「干渉なし」の場合(ステップS106:YES)、軌道生成部1の演算部12は、表示部(図示せず)に「干渉なし」の表示をさせ(ステップS107)、記憶部11に格納されている動作プログラムを実行させ、双腕ロボット3の動作制御を行う(ステップS108)。
【0062】
一方で、干渉判定部4の干渉判定演算部42からの判定結果信号が「干渉あり」の場合には(ステップS106:NO)、軌道生成部1の演算部12は、表示部(図示せず)に「干渉あり」の表示をさせ(ステップS109)、そのまま処理を終了させる。以上のように軌道生成部1は、双腕ロボット3の移動の全体で部位同士または障害物5との間での干渉が生じない判定結果が得られるまでサーボドライバ2a〜2dに指令を送らずに待機し、干渉が生じる場合には双腕ロボット3の各部位の移動を開始させない。
【0063】
[干渉判定処理]
引き続き、干渉判定部4による干渉判定処理について図11〜図13を参照しながら説明する。図11は、干渉判定部4による干渉判定処理全体を示すフローチャートであり、図12はステップS204を詳細に示すフローチャートであり、図13はステップS206の説明で参照する図である。
【0064】
最初に、識別番号割当部421が双腕ロボット3の干渉判定対象部位および障害物5に識別番号IDi(i=1〜h)を割り当てる(ステップS201、図5参照)。
【0065】
次に、干渉条件情報生成部423が、ステップS201にて割り当てられた識別番号IDiと、干渉情報生成部422により作成され干渉情報格納部412に格納されたテーブル(図6参照)に記載された干渉情報tijに基づいて、上述した式(1)に従い干渉条件情報Ciを生成する(ステップS202、図7および図8参照)。
【0066】
次に、マス目管理部424が、判定領域(n1×n2のマス目領域、図9参照)に対応するメモリ領域を確保する(ステップS203)。
【0067】
次に、メモリ領域初期化部425が、マス目管理部424が確保したn1×n2の判定領域のメモリ領域を初期化する(ステップS204)。
【0068】
具体的には、図12に示されるように、メモリ領域初期化部425が、まず、マス目管理部424が確保したn1×n2の全てのマス目に対して、そのメモリ領域に「0」を表す情報を記録する(ステップS301)。
【0069】
次に、メモリ領域初期化部425は、n1×n2のマス目領域のうち、障害物対応マス目を特定する。なお、個々のマス目を特定する具体的な方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する(ステップS302)。
【0070】
次に、メモリ領域初期化部425は、障害物占有情報として障害物5の識別番号を当該特定した障害物対応マス目のメモリ領域に記録することにより、障害物対応マス目のメモリ領域を初期化する。メモリ領域初期化部425による障害物占有情報の記録により、個々のマス目を占有する障害物5に対応するビットが立った状態となる。一方で、障害物対応マス目として特定されない障害物非対応マス目は、上記ステップS301にてそのメモリ領域に「0」を表す情報が記録されたままで初期化されたことになる(ステップS303)。
【0071】
次に、ステップS303の初期化処理におけるメモリ領域の各値(以下、「初期値」ともいう)が格納される。この格納処理は格納部41にて行われてもよく、図示はしないが例えば「初期値格納部」を格納部41に更に設けても良い(ステップS304)。
【0072】
なお、上記ステップS301およびステップS303においては、初期値をメモリ領域に記録しているが、これに限らず、ステップS301およびステップS303の段階では初期値を記録せずに記録すべき初期値を特定だけしておき、ステップS304で格納した初期値を後述するステップS207にて初めて記録するようにしても良い。なお、以下では、ステップS301およびステップS303で特定されステップS304で格納された初期値がステップS207で初めて記録されるものとして説明する。
【0073】
次に、図11に戻り、干渉判定演算部42はステップS104(図10参照)にて軌道生成部1から双腕ロボット3の各部位の現在角度と目標角度が入力されることを待つ(ステップS205)。
【0074】
軌道生成部1から双腕ロボット3の各部位の現在角度と目標角度の入力があった場合に(ステップS205:YES)、干渉判定演算部42は、双腕ロボット3の各部位の目標角度と現在角度の差Δθおよび各部位の速度パラメータから一定時間間隔の各部位の角度を求め、これを諸元等格納部411の角度テーブルに記憶する。図示はしないが、この処理のために干渉判定演算部42が別途の処理部を備えていても良い。図13は諸元等格納部411に記憶された角度テーブルの一例を示す。図13に示されるように、角度テーブルは、一定時間間隔毎のレコード(レコード数:m)に部位毎のフィールドを備えて構成されるものである(ステップS206)。
【0075】
以下、ステップS207からステップS214までのループ1が開始される。ステップS206の次に、メモリ領域初期化部425が、判定領域のn1×n2のマス目それぞれに対応するメモリ領域にステップS302〜S304における初期値(障害物占有情報または「0」を表す情報)を書き込む(ステップS207)。この処理は、ループ1の各処理が始まる前に判定領域のn1×n2のマス目それぞれに対応するメモリ領域を初期化する処理である。
【0076】
次に、占有情報記録部426が、図13にて例示した角度テーブルからk番目(k=1〜m)のレコードの角度データを読み込む(ステップS208)。
【0077】
以下、ステップS209からステップS211までのループ2が開始される。ステップS208の次に、占有情報記録部426が、干渉判定の対象部位iの角度データと寸法パラメータから判定領域(二次元平面)において干渉判定の対象部位iが占有するマス目、すなわちロボット対応マス目を特定する。なお、ロボット対応マス目を特定する具体的な方法については、後述の[占有領域の特定方法]の欄で詳細に説明する。また、占有情報記録部426は、特定した当該ロボット対応マス目に対応するメモリ領域に記録されている値(初期値または既存のロボット占有情報)を取得する(ステップS209)。
【0078】
次に、占有情報記録部426が、当該特定したロボット対応マス目のメモリ領域にロボット占有情報を記録する。占有情報記録部426は、特定したロボット対応マス目のメモリ領域に「0」を表す情報が記録されている場合に、つまりメモリ領域が「0」を表す情報により初期化されたままである場合に、双腕ロボット3の干渉判定対象部位の識別番号をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。また、占有情報記録部426は、特定したロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、当該障害物占有情報と双腕ロボット3の干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。更に、占有情報記録部426は、特定したロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合に、当該既存のロボット占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和を新たなロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。言い換えれば、占有情報記録部426は、干渉判定の対象部位iが占有するメモリ領域に既に記録されている情報が0である場合にはロボット占有情報として識別番号IDiを書き込み、既に記録されている情報が0以外である場合には当該記録情報と識別番号IDiの論理和を新たなロボット占有情報として書き込む(ステップS210)。
【0079】
次に、判断部427が、最前のステップS210の処理でロボット占有情報を書き込んだ全てのメモリ領域について、干渉条件情報Ciとの論理積を求める(ステップS211)。
【0080】
ステップS209からステップS211までの処理を「i=h−障害物の数」となるまで、すなわち双腕ロボット3の全ての干渉判定対象部位について繰り返す。今まで例示したようにhが7で障害物5の数が1である場合には、ステップS209からステップS211までの処理が「i=1」から「i=6」となるまで6回繰り返される。これにより、ループ2が終了し、ある時点kにおける双腕ロボット3の姿勢に対する干渉判定が終了する。なお、ループ2の処理の具体例については、下記の[ループ2の処理の具体例]の欄で後述する。
【0081】
ループ2が終了した時点で、判断部427はステップS211にて求めたそれぞれの論理積が全ての桁において0か否かを判断する(ステップS212)。ステップS212の判断にて、全ての論理積が全ての桁において0ならば(ステップS212:YES)、判断部427は「干渉なし」を表す情報を格納部41に記憶させる(ステップS213)。一方で、ステップS212の判断にて、何れかの論理積の少なくとも一つの桁において0でないものがある場合には(ステップS212:NO)、判断部427は「干渉あり」を表す情報を格納部41に記憶させる(ステップS214)。格納部41はこの記憶処理のために別途の記憶手段を更に備えていても良く、諸元等格納部411がこの記憶処理を行っても良い。
【0082】
ステップS207からステップS214までの処理をk=mとなるまで、すなわち双腕ロボット3の各部位の目標角度まで繰り返す。これにより、ループ1が終了し、双腕ロボット3の各アームが目標とする姿勢に移行するまでの全ての姿勢における干渉判定処理が終了する。
【0083】
ループ1が終了した時点で、判断部427は、ステップS213またはステップS214にて格納部41に記憶された一定時間間隔毎の判定結果情報から最終的な判定結果を求め、これを判定結果信号として軌道生成部1に送る。判定結果は、一定時間間隔毎の判定結果情報の全てが干渉なしなら「干渉なし」、一つでも干渉ありがあれば「干渉あり」となる(ステップS215)。このような干渉判定処理により、双腕ロボット3のアーム31,32が初期の姿勢から目標とする姿勢まで動作する間の一定時間間隔毎の各姿勢について、双腕ロボット3の部位同士および双腕ロボット3と障害物5との間の干渉の有無を確認することができる。
【0084】
[ループ2の処理の具体例、その1]
続いて、図14〜図16を参照しながら、ループ2の処理の具体例(その1)について説明する。図14〜図16は、ループ1内のある時刻(例えばk番目の時刻)におけるステップS209からステップS211までの処理の具体例を示す。図14はi=1の場合の処理の具体例であり、図15はi=2の場合の処理の具体例であり、図16はi=6の場合の処理の具体例である。
【0085】
図14が示すi=1の場合には、アーム31の第1軸311に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第1軸311の占有領域(図14にてドットを付した領域H1に対応するマス目、ロボット対応マス目)を特定する。次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む。この時、ロボット対応マス目の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている(ステップS209)。初期値として「0」を表す情報が記録されていることから、領域H1のマス目に対応するメモリ領域には第1軸311の識別番号ID1=「1000000」が書き込まれる(ステップS210)。次に、判断部427が、最前のステップS210で書き込まれたロボット占有情報それぞれと干渉条件情報C1との論理積を求める(ステップS211)。つまり、判断部427は、下記の式(6)にて示される論理積を求める。
領域H1のマス目に係る論理積=
1000000
×0011010
=0000000・・・(6)
【0086】
図15が示すi=2の場合には、アーム31の第2軸312に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第2軸312の占有領域(図15にてドットを付した領域H2およびハッチを付した領域H3に対応するマス目、ロボット対応マス目)を特定する。領域H2は第2軸312のみが存在する領域であり、領域H3は第2軸312と第1軸311が重なる領域である(ステップS209)。次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H2の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H2のマス目に対応するメモリ領域には第2軸312の識別番号ID2=「0100000」が書き込まれる。一方、i=1での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H3のマス目に対しては、既存のロボット占有情報「1000000」と第2軸312の識別番号ID2=「0100000」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(7)によって示されるロボット占有情報を領域H3のマス目に対応するメモリ領域に記録する。
領域H3のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
1000000
+0100000
=1100000・・・(7)
【0087】
次に、判断部427が、領域H2と領域H3のそれぞれに対応するマス目について、次の式(8)および式(9)によって示されるロボット占有情報と干渉条件情報C2との論理積をマス目ごとに求める。
領域H2のマス目に係る論理積=
0100000
×0000110
=0000000・・・(8)
領域H3のマス目に係る論理積=
1100000
×0000110
=0000000・・・(9)
【0088】
前述のようにして、i=3で昇降軸313、i=4で第1軸321、i=5で第2軸322と、それぞれ判定対象となる部位毎に処理が進み、図16が示すi=6の場合には、アーム32の昇降軸323に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において昇降軸323の占有領域(図16にてドットを付した領域H4、ハッチを付した領域H5、領域H6、および領域H7に対応するマス目、ロボット対応マス目)を特定する。領域H4は昇降軸323のみが存在する領域であり、領域H5は昇降軸323とアーム32の第2軸322が重なる領域であり、領域H6は昇降軸323とアーム31の第2軸312が重なる領域であり、領域H7は昇降軸323とアーム31の第1軸311および第2軸312が重なる領域である(ステップS209)。
【0089】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H4の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H4のマス目に対応するメモリ領域には昇降軸323の識別番号ID6=「0000010」が書き込まれる。一方、i=5での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H5のマス目に対しては、既存のロボット占有情報としてのアーム32の第2軸322の識別番号ID5=「0000100」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(10)によって示されるロボット占有情報を領域H5のマス目に対応するメモリ領域に記録する。
領域H5のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000100
+0000010
=0000110・・・(10)
【0090】
また、i=2での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H6のマス目に対しては、既存のロボット占有情報としてのアーム1の第2軸312の識別番号ID2=「0100000」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(11)によって示されるロボット占有情報を領域H6のマス目に対応するメモリ領域に記録する。
0100000
+0000010
=0100010・・・(11)
【0091】
更に、i=1およびi=2での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H7のマス目に対しては、既存のロボット占有情報としてのアーム1の第1軸311の識別番号ID1=「1000000」と第2軸312の識別番号ID2=「0100000」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(12)によって示されるロボット占有情報を領域H7のマス目に対応するメモリ領域に記録する。
1000000
+0100000
+0000010
=1100010・・・(12)
【0092】
次に、判断部427が、領域H4ないし領域H7のそれぞれに対応するマス目について、次の式(13)ないし式(16)によって示されるロボット占有情報と干渉条件情報C6との論理積をマス目ごとに求める。
領域H4のマス目に係る論理積=
0000010
×1111001
=0000000・・・(13)
領域H5のマス目に係る論理積=
0000110
×1111001
=0000000・・・(14)
領域H6のマス目に係る論理積=
0100010
×1111001
=0100000・・・(15)
領域H7のマス目に係る論理積=
1100010
×1111001
=1100000・・・(16)
【0093】
以上、ループ2の処理の具体例(その1)について説明したが、このようにしてループ2が終了する(全ての干渉判定対象部位についてロボット占有情報と干渉条件情報との論理積が求まる)と、判断部427は、それぞれの論理積が0か否かを判断する(ステップS212)。この場合、判断部427は、上述の具体例におけるi=1およびi=2の時のように論理積の結果が全ての桁で0であれば、干渉は生じないと判断する。実際、具体例のi=1の場合、第1軸311が自分自身と干渉することはあり得ない。また、i=2の場合は、第1軸311と第2軸312とは関節でつながって立体交差しており、干渉することはあり得ない。一方、上述の具体例におけるi=6の時のように論理積の結果が0でない(少なくとも一つの桁が1である)場合は、干渉が生じると判断する。なお、干渉が生じる場所は、上記の式(15)および式(16)において値が「1」である桁と同一桁で値を「1」とする識別番号の部位である。つまり、上記の式(15)において値が「1」である桁は左から二番目の桁であり、この桁で値を「1」とする識別番号の部位はアーム31の第2軸312(識別番号「0100000」)である。したがって、昇降軸323はアーム31の第2軸312と干渉することがわかる。また、式(16)において値が「1」である桁は左から一番目と二番目の各桁であり、これらの桁で値を「1」とする識別番号の部位はアーム31の第1軸311(識別番号「1000000」)と第2軸312(識別番号「0100000」)である。したがって、昇降軸323はアーム31の第1軸311と第2軸312とが重なる位置、つまり右ひじ部においても干渉を生じることがわかる。
【0094】
なお、図14〜図16では説明の便宜上マス目(メモリ領域)を大きく設定して説明した。しかし、実際のマス目は図14〜図16の例よりもっと小さい設定となる。
【0095】
[ループ2の処理の具体例、その2]
以上の[ループ2の処理の具体例、その1]では、双腕ロボット3の部位同士で生じる干渉を判定する例について説明した。以下の[ループ2の処理の具体例、その2]では、双腕ロボット3と障害物5との間で生じる干渉を更に判定する例について説明する。図17および図18は、この例における状況を示す図であり、ループ1内のある時刻(例えばk番目の時刻)におけるステップS209からステップS211までの処理の具体例を示す。図17はi=5の場合を示し、図18はi=6の場合を示す。図14〜図16と比較すると、障害物5と双腕ロボット3との間で干渉が生じている点が相違する。
【0096】
干渉判定を行うために、i=1〜6の場合のそれぞれについて、上記説明した[ループ2の処理の具体例、その1]と同様の処理が行われる。i=1〜4の場合は[ループ2の処理の具体例、その1]と相違点がないためここでは説明を省略し、i=5およびi=6の場合について詳細に説明する。
【0097】
図17が示すi=5の場合には、アーム32の第2軸322に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第2軸322の占有領域(図17にてドットを付した領域H8、ハッチを付した領域H9および領域H10に対応するマス目、ロボット対応マス目)を特定する。領域H8は第2軸322のみが存在する領域であり、領域H9は第2軸322とアーム32の第1軸321が重なる領域であり、領域H10は第2軸322と障害物5が重なる領域である(ステップS209)。
【0098】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H8の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されておらず、またi=1〜4の処理でロボット対応マス目として特定もされていないことから、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H8のマス目に対応するメモリ領域には第2軸322の識別番号ID5=「0000100」が書き込まれる。
【0099】
一方、i=4での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H9のマス目に対しては、既存のロボット占有情報「0001000」と第2軸322の識別番号ID5=「0000100」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(17)によって示されるロボット占有情報を領域H9のマス目に対応するメモリ領域に記録する。
領域H9のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0001000
+0000100
=0001100・・・(17)
【0100】
更に、領域H10のメモリ領域は、ステップS204で「障害物対応マス目」として特定されたため、ステップS207で障害物占有情報が初期値として記録されている。そのため、領域H10のマス目に対応するメモリ領域には、当該障害物占有情報と第2軸322の識別番号ID5=「0000100」の論理和がロボット占有情報として書き込まれる。障害物占有情報が障害物5の識別番号ID7=「0000001」である場合に、占有情報記録部426は、下記の式(18)によって示されるロボット占有情報を領域H10のマス目に対応するメモリ領域に記録する。
領域H10のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000001
+0000100
=0000101・・・(18)
【0101】
次に、判断部427が、領域H8ないし領域H10のそれぞれに対応するマス目について、次の式(19)ないし式(21)によって示されるロボット占有情報と干渉条件情報C5との論理積をマス目ごとに求める。
領域H8のマス目に係る論理積=
0000100
×0110000
=0000000・・・(19)
領域H9のマス目に係る論理積=
0001100
×0110000
=0000000・・・(20)
領域H10のマス目に係る論理積=
0000101
×0110000
=0000000・・・(21)
【0102】
i=5の場合において、判断部427は、論理積の結果が全ての桁で0であるため、干渉は生じないと判断する。実際、アーム32の第2軸322が自分自身と干渉することはあり得ず、また第1軸321とは関節でつながっているため干渉することはあり得ない。更に、図17においては、アーム32の第2軸322が障害物5と干渉するようにもみえるが、これは2次元に投影したためそうみえるだけであり、実際は高さが異なるため、干渉は生じない。これは、図2を参照すると、第2軸322と障害物5の高さが異なるため干渉が生じないことが明らかであり、その故に図6ではi=5およびj=7の場合の値が「0」である。
【0103】
次に、図18が示すi=6の場合には、アーム32の昇降軸323に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において昇降軸323の占有領域(図18にてドットを付した領域H11、ハッチを付した領域H12、領域H13、H14、および領域H15に対応するマス目、ロボット対応マス目)を特定する。領域H11は昇降軸323のみが存在する領域であり、領域H12は昇降軸323とアーム32の第2軸322が重なる領域であり、領域H13は昇降軸323とアーム31の第2軸312が重なる領域であり、領域H14は昇降軸323とアーム31の第1軸311および第2軸312が重なる領域であり、領域H15は第2軸322および昇降軸323と障害物5が重なる領域である(ステップS209)。
【0104】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H11には、上記[ループ2の処理の具体例、その1]の説明における領域H4と同様で、「0000010」がロボット占有情報として書き込まれる。同様に、領域H12には上記説明の領域H5と同様で「0000110」が書き込まれ、領域H13には上記説明の領域H6と同様で「0100010」が書き込まれ、領域H14には上記説明の領域H7と同様で「1100010」が書き込まれる。
【0105】
領域H15のメモリ領域は、ステップS204で「障害物対応マス目」として特定されたため、ステップS207で障害物占有情報(本例では、障害物5の識別番号「0000001」)が初期値として記録されていたところ、先のi=5の処理において、第2軸322も占有することとなっている。そのため、領域H15のメモリ領域には、当該障害物占有情報「0000001」と第2軸322の識別番号ID5=「0000100」の論理和「0000101」がロボット占有情報として既に書き込まれている(上記式(18)参照)。したがって、i=6の処理においては、既存のロボット占有情報「0000101」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(22)によって示されるロボット占有情報を領域H15のマス目に対応するメモリ領域に記録する。
領域H15のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000001
+0000100
+0000010
=0000111・・・(22)
【0106】
次に、判断部427が、領域H11ないし領域H15のそれぞれに対応するマス目について、次の式(23)ないし式(27)によって示されるロボット占有情報と干渉条件情報C6との論理積をマス目ごとに求める。
領域H11のマス目に係る論理積=
0000010
×1111001
=0000000・・・(23)
領域H12のマス目に係る論理積=
0000110
×1111001
=0000000・・・(24)
領域H13のマス目に係る論理積=
0100010
×1111001
=0100000・・・(25)
領域H14のマス目に係る論理積=
1100010
×1111001
=1100000・・・(26)
領域H15のマス目に係る論理積=
0000111
×1111001
=0000001・・・(27)
【0107】
i=6の場合において、判断部427は、領域H11および領域H12のように、論理積の結果が全ての桁で0であれば、干渉は生じないと判断する。実際、アーム32の昇降軸323が自分自身と干渉することはあり得ず、また第2軸322とは関節でつながっているため干渉することはあり得ない。一方、領域H13、領域H14および領域H15のように、論理積の結果が全ての桁で0ではない(少なくとも一つの桁が1である)場合は、干渉が生じると判断する。領域H13および領域H14での干渉については、上記[ループ2の処理の具体例、その1]で説明した通りである。領域H15での論理積の結果はアーム32の昇降軸323が障害物5と干渉することを表す。上記の式(27)において値が「1」である桁は左から七番目の桁であり、この桁で値を「1」とする識別番号の有するのは障害物5(識別番号「0000001」)であるからである。以上の判断結果において、障害物5との間の干渉有無は、障害物5を個別に干渉判断の対象とした場合ではなく、i=6の昇降軸323に対する干渉判断において明らかにされていることに注目すべきである。つまり、本実施形態によれば、障害物5の干渉有無を判定するために、障害物5を干渉判定の対象として別途判定処理を行わなくて済む。
【0108】
[占有領域の特定方法]
前述したように、占有情報記録部426およびメモリ領域初期化部425は、マス目管理部424が作成したn1×n2のマス目(判定領域、図9参照)のうち、ある時点における双腕ロボット3の干渉判定対象部位または障害物5が存在する領域(以下、「占有領域」ともいう)に対応するマス目を特定する。つまり、占有情報記録部426は「ロボット対応マス目」を特定し、メモリ領域初期化部425は「障害物対応マス目」を特定する。以下、占有情報記録部426およびメモリ領域初期化部425による占有領域の特定方法について、図19〜図22を参照し、具体例を挙げながら詳細に説明する。
【0109】
図19は、占有情報記録部426による占有領域の特定方法を説明するための図である。この図19に示す例は、前後に関節AAおよび関節BBを有するアームCCがXY平面上において存在する領域(アームCCの占有領域、図19ではグレーで表示された領域K)を特定する例である。また、図19に示す例は、例えば前述したアーム31の第1軸311に対して、それに対応するロボット対応マス目を特定するための例として理解されることができ、この場合の第1軸311は図19に示すアームCCに該当する。なお、この場合の第1軸311は、例えばオーバル形状である。また、実際のXY平面は、図9に示した判定領域に係るn1×n2のマス目が全て存在可能な平面領域が確保されるが、図19では説明の便宜上、アームCCの部分だけを拡大して示している。その特定方法としては、図19のXY平面上に存在する点(マス目を構成する4つの頂点)に対して、下記の手順1〜手順3を行い、各点がアームCCの占有領域に含まれるか否かを判定することで、XY平面上におけるアームCCの占有領域を特定することができる。
【0110】
この例において、関節AAの中心座標、関節BBの中心座標、およびアームCCの幅は、既知の情報である。これらの既知の情報は、軌道生成部1の記憶部11に格納されており、干渉判定演算部42に送信される。図19において、関節AAの中心座標は点A(x1、y1)であり、関節BBの中心座標は点B(x2、y2)であり、アームCCの幅はwである。また、関節AAおよび関節BBの半径R=w/2である。つまり、
点A(x1、y1):関節AAの中心座標
点B(x2、y2):関節BBの中心座標
w:アームの幅(R=w/2)
である。また、この例において、点DはアームCCの占有領域に入っているか否かの判定対象となる点である。つまり、
点D(x0、y0):任意のマス目の任意の頂点
である。また、各補助線および補助点の定義は以下のとおりである。
l1:点A、点Bを通る直線
l11:関節AAおよび関節BBを近似した円(点A、Bを中心とした半径Rの円)の接線(下側)
l12:関節AAおよび関節BBを近似した円(点A、Bを中心とした半径Rの円)の接線(上側)
l2:点Dを通り、l1と垂直に交わる直線(つまりl1とl2は垂直関係)
点C(x3、y3):l1とl2の交点
点Ai、Bi:点A、Bを中心とした半径Rの円の接線l1iとの接点
点E’:点AからX軸に垂線を引いたときにY座標がA1と同じになる点
点B’:点DからX軸に垂線を引いたときにl1と交わる点
なお、関節AAおよび関節BBの半径は同じとする。ゆえに、l1、l11、およびl12は互いに並行である。また、関節AAおよび関節BBの近似円及び線分l11及びl12に囲まれた範囲(領域K)がアームCCに相当する。
【0111】
(手順1)
最初に、図20に示すルールに従い、判定対象部位(アームCC)が位置する座標系を特定し、占有される可能性のあるマス目領域を限定する。点Dの座標(x0、y0)が、
(xmin< x0< xmax)…(28)
および
(ymin <y0 < ymax)…(29)
を満たすならば、点Dは判定対象部位の占有領域に含まれる可能性がある。この範囲外のマス目は、下記の手順3の項で後述する円形部分に含まれるか、もしくは判定対象部位の占有領域に含まれないことになる。
【0112】
ここで、x12wおよびy12wは、三角形ABEと三角形AA1E’との相似関係より、
Lab:a12:b12= R:y12w:x12w
(但し、a12=y1−y2、b12=x1−x2)
が成り立つから、方向性を加味して、
x12w= −R b12/Lab
y12w= −R a12/Lab
として与えられる。Labは、三平方の定理から、
【数3】
となる。
【0113】
(手順2)
次に、上記の式(28)および(29)、つまり(xmin <x0 < xmax)および(ymin< y0< ymax)を満たす各マス目の点Dが、図21にてグレーで表示された領域K1に入るか否かを判定する。これには、点Dから線分l1までの垂線の長さLcdがR以下となるかどうか、すなわち、
Lcd≦ R…(30)
となるかどうかを判定すればよい。これが成立すれば、点Dを有するマス目は占有領域に含まれることになる。
【0114】
ここで、Lcdは、以下の通り、軌道生成部1の記憶部11に格納されていたパラメータ等から与えられる既知の条件値から求めることができる。まず、線分l1の方程式は、傾きをa1、切片をb1とすると、
a1 x+ b1= y
である。これにより、図21における点B’の座標は、X座標が点Dと同じx0であるから、(x0、a1x0 + b1) である。したがって、2点DB’間の距離Ldb’は、
Ldb’ =y0 − (a1x0 + b1)
である。ここで、三角形ABEと三角形DB’Cとが相似関係となることから、
Ldb’ :Lcd = Lab : (x2− x1)
が成り立つ。これを、2点CD間の距離Lcdについて解けば、
Lcd= (x2 −x1) Ldb’ /Lab
= (x2 −x1) {y0 − (a1x0 + b1)} / Lab
= −(x1− x2) [y0 − {(y1 - y2)/(x1 - x2)} x0− (y2x1- x2y1)/(x1 - x2) ]/ Lab
= {(y1 - y2)x0−(x1− x2)y0+ (y2x1- x2y1)} /Lab
但し、上記の通り、
【数4】
である。
【0115】
(手順3)
最後に、全てのマス目を対象に、点Dが図22にてグレーで表示された円形領域K2に入るか否かを判定する。座標(xi、yi)を中心とする半径Rの円の方程式は、
(x −xi)2+ (y −yi)2 =R2
であるから、円の境界を含む内側は、
(x −xi)2+ (y −yi)2 ≦R2
と表現できる。ここで、点D(x0、y0)に対して関節AAおよび関節BBの2つの円を考えれば、
(x0−x1)2+ (y0 −y1)2 ≦R2…(31)
(x0−x2)2+ (y0 −y2)2 ≦R2…(32)
のいずれかが成立すれば、点D(x0、y0)を有するマス目は占有領域に含まれることになる。
【0116】
(まとめ)
以上の説明のように、上記の手順1で特定した領域に存在する各マス目の4つの頂点座標が手順2の条件(式(30))に該当するか否かを判定し、さらに、全てのマス目の4つの頂点座標が手順3(式(31)または式(32))の条件に該当するか否かを判定する。そして、何れかの頂点が何れかの条件に該当する場合には、そのマス目はアームCC、すなわち判定対象部位iの占有領域に含まれると判定する。
【0117】
(占有領域が四角形である場合の占有領域の特定方法)
以上では、特定対象がオーバル形状である場合の占有領域の特定方法を説明したが、特定対象がオーバル形状でなく四角形である場合においても占有領域を特定する必要がある。例えば、図3等に示した双腕ロボット3の昇降軸313または323が干渉判定対象部位でありそれらの占有領域を特定する場合や、四角形の障害物5の占有領域を特定する場合である。なお、図示はしないが、仮に障害物5がオーバル形状である場合には、上記の手順1〜3の特定方法によりオーバル形状の障害物5の占有領域を特定すれば良い。
【0118】
図19は、この場合における占有情報記録部426またはメモリ領域初期化部425による占有領域の特定方法を説明するための図としても参照することができる。双腕ロボット3の昇降軸313,323または障害物5が図19に示す四角形A1A2B2B1であり、A1、A2、B2、B1の座標がそれぞれ(xA1、yA1)、(xA2、yA2)、(xB2、yB2)、(xB1、yB1)である場合に、点D(x0、y0)が以下の数式(33)および(34)を満たせば、点D(x0、y0)を有するマス目は四角形A1A2B2B1の占有領域に含まれることとなる。これにより、「ロボット対応マス目」または「障害物対応マス目」が特定される。
Min(xA1、xA2、xB2、xB1) ≦ x0≦ Max(xA1、xA2、xB2、xB1)…(33)
Min(yA1、yA2、yB2、yB1) ≦y0≦ Max(yA1、yA2、yB2、yB1)…(34)
ここで、Min(xA1、xA2、xB2、xB1)はxA1、xA2、xB2およびxB1中の最小値を、Max(xA1、xA2、xB2、xB1)はxA1、xA2、xB2およびxB1中の最大値を、Min(yA1、yA2、yB2、yB1)はyA1、yA2、yB2およびyB1中の最小値を、Max(yA1、yA2、yB2、yB1)はyA1、yA2、yB2およびyB1中の最大値を表す。
【0119】
一方で、点D(x0、y0)が数式(33)および(34)を満たない場合には、点D(x0、y0)を有するマス目は四角形A1A2B2B1の占有領域に含まれないことになる。これにより「ロボット対応マス目」または「障害物対応マス目」が特定できる。
【0120】
[本実施形態の作用及び効果]
続いて、本実施形態にかかる双腕ロボットシステム100の作用及び効果について説明する。本実施形態の双腕ロボットシステム100では、識別番号、干渉情報、干渉条件情報、障害物占有情報、およびロボット占有情報が双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間の干渉を判定するための必須の情報として用いられる。このうち、特に干渉情報および干渉条件情報は、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴わない場合の値および干渉を伴う場合の値に基づいた情報である。したがって、これら干渉情報および干渉条件情報を用いることにより、本実施形態による干渉判定の結果には双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間の立体交差時の干渉の有無が考慮されることとなる。これにより、干渉判定の精度が向上される。
【0121】
また、本実施形態においては、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で干渉判定を行うため、例えば3次元での干渉判定に比べ、干渉判定処理を短時間で行うことが可能となる。また、本実施形態で用いる干渉情報は「0」または「1」を表す情報であり、そのデータ量が少ないことから、装置全体における計算量や計算時間が短縮できる。
【0122】
また、本実施形態においては、メモリ領域初期化部425が障害物対応マス目のメモリ領域を障害物占有情報で初期化する。次に、占有情報記録部426はロボット対応マス目のメモリ領域が障害物占有情報で初期化されている場合に、つまり干渉判定を行うために特定したロボット対応マス目が障害物対応マス目でもある場合に、当該障害物占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として記録する。次に、判断部427は、このように記録されたロボット占有情報に基づき干渉判定を行う。以上により、干渉判定結果には、常に、双腕ロボット3の干渉判定対象部位と障害物5間の干渉有無が反映されることとなる。しかも、障害物対応マス目は障害物占有情報で初期化されているので、障害物5の干渉有無を判定するために障害物5を干渉判定の対象として別途判定処理を行わなくて済む。障害物対応マス目のメモリ領域が障害物占有情報で初期化されたことをベースとして、双腕ロボット3の干渉判定対象部位に対する干渉判定処理を行えば、その干渉判定結果には、常に、双腕ロボット3の干渉判定対象部位と障害物5間の干渉有無が含まれることとなるからである。これにより、干渉判定処理を更に短時間で行うことが可能となる。
【0123】
また、本実施形態によれば、双腕ロボット3の動作における動作開始時刻と動作終了時刻との間の各時刻に対して干渉判定が行われる。これにより、動作中の全ての時刻において干渉が生じないことを判断した上で、安全に双腕ロボット3を動作させることができる。
【0124】
また、本実施形態では、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が、双腕ロボット3の干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することから、各情報が必要最小限の桁数を有することとなり、演算に無駄がなく、必要最小限のメモリ量を用いて演算を行うことができる。また、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が双腕ロボット3の干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することにより、例えば干渉判定対象部位や障害物5の数が増えた場合には、増えた箇所に関する干渉条件を設定した上で、増えた箇所の数だけ識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報の桁数を増やして、本実施形態における干渉判定を行うことができる。このように、本実施形態によれば、干渉判定対象部位や障害物5の数が増えた場合に、柔軟な対応が可能である。また、「0」か「1」かの少ないデータ量で計算を行うことから、干渉判定対象部位や障害物5の数が増えたことに伴って、装置全体の計算量や計算時間が極端に増えることを防止できる。
【0125】
以上で説明した軌道生成部1および干渉判定部4は実際に双腕ロボット3を動作させる前に事前に干渉判定を行うシミュレーション装置としても利用することができる。つまり、図1に示した双腕ロボット3やサーボドライバ2a〜2dが実際には存在しない場合でも、これらの機械部分をパソコン上で擬似的に構成し、双腕ロボット3と障害物5との間の干渉判定をシミュレーションすることができる。
【0126】
[他の実施形態]
以上、本発明の好適な実施形態について説明したが、本発明が上記実施形態に限定されないことは言うまでもない。例えば、図示はしないが、干渉判定演算部42をマス目管理部424、メモリ領域初期化部425、占有情報記録部426、および判断部427のみを必須の構成要素とする簡素な構成としてもよい。
【0127】
この場合のマス目管理部424は、前述の通り、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する。また、メモリ領域初期化部425は、n1×n2のマス目のうち障害物5に対応するマス目である障害物対応マス目を特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録することにより、当該障害物対応マス目のメモリ領域を初期化する。ここで、障害物占有情報は、障害物5が障害物対応マス目を占有するか否かを示す情報である。また、占有情報記録部426は、n1×n2のマス目のうち双腕ロボット3の干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ここで、ロボット占有情報は、干渉判定対象部位がロボット対応マス目を占有するか否かを示す情報である。また、判断部427は、占有情報記録部426がロボット占有情報をロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に障害物占有情報が記録されている場合には、障害物5との間で干渉が生じると判断する。一方で、判断部427は、そのメモリ領域に既に双腕ロボット3の他の干渉判定対象部位のロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する。
【0128】
以上のような構成により、以下に示すような簡易的な干渉判定処理が可能となる。説明の便宜上、簡単な例として例えば、右腕(識別番号ID=100)、左腕(識別番号ID=010)、および障害物(識別番号ID=001)のみの干渉判定を行う場合を考える。この場合に、最初に、マス目管理部424が、双腕ロボット3および障害物5の存在空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する。次に、メモリ領域初期化部425が、ID=001の障害物5が占有するマス目を障害物対応マス目として特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録する。障害物占有情報は、例えば「ID=001を示す旨の情報」である。なお、障害物非対応マス目には「0を表す情報」を記録しても良く、または何も記録しなくても良い。
【0129】
次に、占有情報記録部426が、ID=100の右腕が占有するマス目を特定し、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ロボット占有情報は、例えば「ID=100を示す旨の情報」である。この「ID=100を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=001を示す旨の情報」が書き込まれたメモリ領域に「ID=100を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=100の右腕とID=001の障害物5との間で「干渉が生じる」と判定する。一方で、「ID=100を示す旨の情報」を書き込むメモリ領域の何れにも「ID=001を示す旨の情報」が書き込まれていない場合には、ID=001の障害物5との間で「干渉しない」と判定する。
【0130】
更に、占有情報記録部426が、ID=010の左腕が占有するマス目を特定し、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ロボット占有情報は、例えば「ID=010を示す旨の情報」である。この「ID=010を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=001を示す旨の情報」が書き込まれたメモリ領域に「ID=010を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=010の左腕とID=001の障害物5との間で「干渉が生じる」と判定する。一方で、「ID=010を示す旨の情報」を書き込むメモリ領域の何れにも「ID=001を示す旨の情報」が書き込まれていない場合には、ID=001の障害物5との間で「干渉しない」と判定する。また、「ID=010を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=100を示す旨の情報」が書き込まれたメモリ領域に「ID=010を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=010の左腕とID=100の右腕との間で「干渉が生じる」と判定する。一方で、「ID=010を示す旨の情報」を書き込むメモリ領域の何れにも「ID=100を示す旨の情報」が書き込まれていない場合には、ID=100の右腕との間で「干渉しない」と判定する。
【0131】
以上のような簡易的な干渉判定処理は、干渉判定対象部位が少なく、2次元平面上での動作(例えばアームの旋回動作)だけを考慮すれば良いロボットおよび障害物に対して特に有効である。すなわち、マス目を使って2次元平面上での干渉判定を行うため、3次元的な空間やモデルを用いて干渉判定を行う場合に比べて極めて少ないデータ量で計算ができ、干渉判定を高速化でき、双腕ロボット3の2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作や冶具の上昇下降がない)場合に特に有効である。
【符号の説明】
【0132】
100…双腕ロボットシステム、1…軌道生成部、11…記憶部、12…演算部、2a〜2d…サーボドライバ、3a〜3d…サーボモータ、3…双腕ロボット、31,32…水平多関節アーム、311…アーム31の第1軸、312…アーム31の第2軸、313…アーム31の昇降軸、321…アーム32の第1軸、322…アーム32の第2軸、323…アーム32の昇降軸、4…干渉判定部、41…格納部、411…諸元等格納部、412…干渉情報格納部、413…干渉条件情報格納部、42…干渉判定演算部、421…識別番号割当部、422…干渉情報生成部、423…干渉条件情報生成部、424…マス目管理部、425…メモリ領域初期化部、426…占有情報記録部、427…判断部、5…障害物、6…判定領域。
【技術分野】
【0001】
本発明は、干渉判定装置および干渉判定方法に関するものである。
【背景技術】
【0002】
先端に昇降軸を持つ二台の水平多関節アームを人間の両腕のように配置した双腕ロボットは、設置に要するスペースの割に自由度が高く、また両腕の作業領域の少なくとも一部が重複していることからワークを押さえつつねじ締めを行うなどの複合作業が可能であるという利点がある。しかし、各アームは移動経路で衝突する危険があり、作業者はその動きを予測することが困難である。そこで、双腕ロボットの各アームが他方のアームの作業領域に一部でも重複するような作業領域内で移動する際、互いのアームが相手の移動軌道上に重なるかどうかという干渉判定が必要となる。また、双腕ロボットが実際に作業を行う上で、左右のアーム同士以外にも、治具や安全柵などの障害物との干渉が生じる可能性があり、水平多関節アームと障害物の干渉判定も必要になる場合がある。
【0003】
干渉判定を行う方法としては、いくつかの方式が存在する。例えば、工作機械を制御する数値制御装置で干渉チェックを行うために、「複数の機械構造物の干渉領域を各々定義し、前記干渉領域を移動させ、前記各々の機械構造物の干渉領域がそれぞれ干渉するかをチェックする機能を有する数値制御装置について、前記干渉領域として、直方体、円筒、平面の立体図形で定義し、各々の立体図形が交差するか交差しないかにより干渉をチェックする」という方式がある(特許文献1参照)。また、干渉判定を行う他の方法として、水平多関節ロボットに対して、「3次元ロボットモデルを2次元平面上に投影した2次元ロボットモデルに変換」し、「3次元障害物モデルを2次元障害物モデルとして分割」したものとの干渉判定を行う方式も存在する(特許文献2参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009−054043号公報
【特許文献2】特開2004−202627号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記の特許文献1の発明のように、3次元方向の運動を行う3次元物体に対する干渉判定は、定義が容易な3次元の単純近似モデルに変換して行われることが多い。しかしながら、双腕ロボットの2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作と治具の上昇下降を考えない)場合に、これを3次元モデルで扱うことは処理時間の短縮やメモリ確保の観点で有益ではない。
【0006】
また、特許文献2の発明においては、障害物モデルの分割は3次元障害物モデルの高さ毎に行われ、水平多関節ロボットの設置面からアームまでの高さ(高さは一定であるが、ある厚みを持つ)と一致する障害物モデルのみが干渉判定の対象となる。そのため、2次元ロボットモデルを用いているにもかかわらず、立体交差が可能な部分を干渉判定から除外した結果を短時間で得ることができる。この方式の優れている点は、水平多関節ロボットの高さと一致する分割面のみを判定すればよいという点である。しかしながら、例えば水平多関節ロボットを複数の分割面に分けなければならないような場合には、それぞれの分割面で干渉判定を行わなければならない。双腕ロボットもこれに該当し、ロボットアームを構成する各部分(第1リンク、第2リンク、先端の昇降軸など)で異なる高さを持つために干渉判定を行うべき分割面が多数になる可能性があり、このような場合には、演算量が増加し、処理に長時間を要するという問題がある。また、特許文献2の発明においては、2次元平面上に投影した2次元ロボットモデルの占有領域の重複だけで干渉判定を行っており、干渉のない立体交差は存在しないことを前提としている。つまり、特許文献2の場合において、干渉のない立体交差は考慮の対象に入っていない。しかし、干渉のない立体交差があるか否かを更に考慮に入れることにより、干渉判定の精度が更に向上することが期待される。
【0007】
そこで、本発明は上記に鑑みてなされたもので、干渉のない立体交差を考慮しつつも、干渉判定を短時間で行うことが可能な干渉判定装置および干渉判定方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明の干渉判定装置は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当てる識別番号割当手段と、前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報を干渉情報として格納する干渉情報格納手段と、前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報を、前記干渉判定対象部位ごとに格納する干渉条件情報格納手段と、前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定してそのメモリ領域を初期化する手段であって、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する手段であって、当該特定したロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する判断手段と、を備えることを特徴とする。
【0009】
また、本発明の干渉判定方法は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定方法であって、複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当て、前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報が干渉情報として格納され、前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報が、前記干渉判定対象部位ごとに格納され、前記ロボットおよび前記障害物の存在する空間が2次元平面上に投影された上で、前記2次元平面がn1×n2のマス目に区切られるとともに、前記n1×n2のマス目それぞれに対応するメモリ領域が確保され、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目が特定されそのメモリ領域が初期化されるステップにおいて、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報が前記障害物対応マス目のメモリ領域に記録されることにより、前記障害物対応マス目のメモリ領域が初期化され、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目が特定され、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報が前記ロボット対応マス目のメモリ領域に記録されるステップにおいて、当該特定されたロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和が前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録され、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積が前記ロボット対応マス目ごとに求められ、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断され、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断される、ことを特徴とする。
【0010】
このような本発明の干渉判定装置および干渉判定方法では、識別番号、干渉情報、干渉条件情報、障害物占有情報、およびロボット占有情報がロボットの干渉判定対象部位同士、およびロボットと障害物との間の干渉を判定するための必須の情報として用いられる。このうち、特に干渉情報および干渉条件情報は、ロボットの干渉判定対象部位がロボットの他の部位および障害物との間で立体交差する際に干渉を伴わない場合の値および干渉を伴う場合の値に基づいた情報である。したがって、これら干渉情報および干渉条件情報を用いることにより、本発明による干渉判定の結果にはロボットの干渉判定対象部位同士、およびロボットと障害物との間の立体交差時の干渉の有無が考慮されることとなる。これにより、干渉判定の精度が向上される。
【0011】
また、本発明においては、ロボットおよび障害物の存在する空間を2次元平面上に投影した上で干渉判定を行うため、例えば3次元での干渉判定に比べ、干渉判定処理を短時間で行うことが可能となる。また、本発明で用いる干渉情報は「0」または「1」を表す情報であり、そのデータ量が少ないことから、装置全体における計算量や計算時間が短縮できる。
【0012】
また、本発明においては、メモリ領域初期化手段が障害物対応マス目のメモリ領域を障害物占有情報で初期化する。次に、占有情報記録手段はロボット対応マス目のメモリ領域が障害物占有情報で初期化されている場合に、つまり干渉判定を行うために特定したロボット対応マス目が障害物対応マス目でもある場合に、当該障害物占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として記録する。次に、判断手段は、このように記録されたロボット占有情報に基づき干渉判定を行う。以上により、干渉判定結果には、常に、ロボットの干渉判定対象部位と障害物間の干渉有無が反映されることとなる。しかも、障害物対応マス目は障害物占有情報で初期化されているので、障害物の干渉有無を判定するために障害物を干渉判定の対象として別途判定処理を行わなくて済む。障害物対応マス目のメモリ領域が障害物占有情報で初期化されたことをベースとして、ロボットの干渉判定対象部位に対する干渉判定処理を行えば、その干渉判定結果には、常に、ロボットの干渉判定対象部位と障害物間の干渉有無が含まれることとなるからである。これにより、干渉判定処理を更に短時間で行うことが可能となる。
【0013】
また、本発明において、前記メモリ領域初期化手段は、前記n1×n2のマス目のうち前記障害物に対応しないマス目のメモリ領域に「0」を表す情報を記録することにより、該マス目のメモリ領域を初期化し、前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域が前記「0」を表す情報により初期化されている場合には、前記ロボットの前記干渉判定対象部位の前記識別番号を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録しても良い。
【0014】
この発明によれば、障害物に対応しないマス目のメモリ領域を初期化するための具体的な手法、および当該初期化されたメモリ領域にロボット占有情報を記録するための具体的な手法が提供される。
【0015】
また、本発明において、前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合には、前記既存のロボット占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を新たなロボット占有情報として前記ロボット対応マス目のメモリ領域に記録しても良い。
【0016】
この発明によれば、既存のロボット占有情報が記録されている場合に、新たなロボット占有情報を記録するための具体的な手法が提供される。
【0017】
また、本発明において、前記干渉条件情報格納手段は、下記の数式(1)により計算される情報Ciを前記干渉条件情報として格納しても良い。
【数1】
ただし、hは前記干渉判定対象部位の数に前記障害物の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の前記干渉判定対象部位の前記干渉条件情報であり、IDjはj番目の前記干渉判定対象部位または前記障害物の前記識別番号であり、tijはi番目の前記干渉判定対象部位とj番目の前記干渉判定対象部位または前記障害物における前記干渉情報である。
【0018】
この発明によれば、干渉条件情報を計算するための具体的な手法が提供される。
【0019】
また、本発明において、前記ロボットの動作における動作開始時刻と動作終了時刻との間が一定時間間隔ごとに区切られ、当該区切られた各時刻における前記干渉判定対象部位の位置に対して、前記占有情報記録手段は、前記各時刻における前記ロボット対応マス目を特定し、前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録し、前記判断手段は、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断しても良い。
【0020】
この発明によれば、ロボットの動作における動作開始時刻と動作終了時刻との間の各時刻に対して干渉判定が行われる。これにより、動作中の全ての時刻において干渉が生じないことを判断した上で、安全にロボットを動作させることができる。
【0021】
また、本発明において、前記ロボットは、水平多関節アームを有する双腕ロボットであっても良い。
【0022】
この発明は、ロボットが水平多関節アームを有する双腕ロボットである場合に特に有用である。
【0023】
また、本発明において、前記識別番号、前記干渉条件情報、前記障害物占有情報、および前記ロボット占有情報は、前記ロボットの前記干渉判定対象部位の数に前記障害物の数を足した数と同数の前記複数の桁数を有する情報であっても良い。
【0024】
この発明は、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が、ロボットの干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することから、各情報が必要最小限の桁数を有することとなり、演算に無駄がなく、必要最小限のメモリ量を用いて演算を行うことができる。また、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報がロボットの干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することにより、例えば干渉判定対象部位や障害物の数が増えた場合には、増えた箇所に関する干渉条件を設定した上で、増えた箇所の数だけ識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報の桁数を増やして、本発明における干渉判定を行うことができる。このように、本発明によれば、干渉判定対象部位や障害物の数が増えた場合に、柔軟な対応が可能である。また、「0」か「1」かの少ないデータ量で計算を行うことから、干渉判定対象部位や障害物の数が増えたことに伴って、装置全体の計算量や計算時間が極端に増えることを防止できる。
【0025】
また、本発明の干渉判定装置は、3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定して、前記障害物が前記障害物対応マス目を占有するか否かを示す障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記干渉判定対象部位が前記ロボット対応マス目を占有するか否かを示すロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、前記占有情報記録手段が前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に前記障害物占有情報が記録されている場合には、前記障害物との間で干渉が生じると判断し、そのメモリ領域に既に前記ロボットの他の干渉判定対象部位の前記ロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する判断手段と、を備えることを特徴とする。
【0026】
このような本発明の干渉判定装置は、マス目管理手段、メモリ領域初期化手段、占有情報記録手段、および判断手段のみを必須の構成要素とする簡素な構成となり、このような構成により、簡易的な干渉判定処理が可能となる。この簡易的な干渉判定処理は、干渉判定対象部位が少なく、2次元平面上での動作(例えばアームの旋回動作)だけを考慮すれば良いロボットおよび障害物に対して特に有効である。すなわち、マス目を使って2次元平面上での干渉判定を行うため、3次元的な空間やモデルを用いて干渉判定を行う場合に比べて極めて少ないデータ量で計算ができ、干渉判定を高速化でき、ロボットの2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作や冶具の上昇下降がない)場合に特に有効である。
【発明の効果】
【0027】
本発明によれば、干渉のない立体交差を考慮しつつも、干渉判定を短時間で行うことが可能な干渉判定装置および干渉判定方法を提供することができる。
【図面の簡単な説明】
【0028】
【図1】双腕ロボットシステム100の構成概要図である。
【図2】双腕ロボット3の側面概要図である。
【図3】双腕ロボット3の上面概要図である。
【図4】干渉判定部4の機能的構成要素を示したブロック図である。
【図5】識別番号割当部421が双腕ロボット3の干渉判定対象部位および障害物5に割り当てた識別番号IDiの一例を示す図である。
【図6】干渉情報生成部422が作成したテーブルの一例を示す図である。
【図7】干渉条件情報生成部423により生成された干渉条件情報の一例を示す図である。
【図8】干渉条件情報生成部423により生成された干渉条件情報の一例を示す図である。
【図9】マス目管理部424により作成された判定領域6の一例を示す図である。
【図10】双腕ロボットシステム100にて行われるメイン処理を示すフローチャートである。
【図11】干渉判定部4による干渉判定処理を示すフローチャートである。
【図12】図11のステップS204を詳細に示すフローチャートである。
【図13】図11のステップS206にて諸元等格納部411に記憶された角度テーブルの一例を示す図である。
【図14】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=1の場合)。
【図15】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=2の場合)。
【図16】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士で干渉し、i=6の場合)。
【図17】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士且つ双腕ロボット3と障害物5との間で干渉し、i=5の場合)。
【図18】図11のループ1内のある時刻におけるループ2の処理の具体例を示す図である(双腕ロボット3の部位同士且つ双腕ロボット3と障害物5との間で干渉し、i=6の場合)。
【図19】占有領域の特定方法を説明するための図である。
【図20】占有領域の特定方法を説明するための図である(手順1)。
【図21】占有領域の特定方法を説明するための図である(手順2)。
【図22】占有領域の特定方法を説明するための図である(手順3)。
【発明を実施するための形態】
【0029】
以下、添付図面を参照して本発明にかかる干渉判定装置および干渉判定方法の好適な実施形態を詳細に説明する。なお、図面の説明において同一の要素には同一の符号を付し、重複する説明を省略する。
【0030】
[双腕ロボットシステム100の全体構成]
まず、本発明の実施形態に係る双腕ロボットシステム100の全体構成について、図1〜3を参照しながら説明する。図1は、双腕ロボットシステム100の構成概要図である。図1に示すように、双腕ロボットシステム100は、軌道生成部1、サーボドライバ2a〜2d、双腕ロボット3、および干渉判定部4を含んで構成され、各構成要素は例えば図1にて矢印で表現される通信手段により互いに通信できるように接続されている。図2は双腕ロボット3の側面概要図であり、図3は双腕ロボット3の上面概要図である。
【0031】
双腕ロボット3は、例えば図2および図3に示されるように、先端に昇降軸313および323を持つ二台の水平多関節アーム31および32を有する。水平多関節アーム31および32は、人間の両腕のように作業領域の少なくとも一部が重複する間隔で例えば障害物5を挟んで配置される。各アームの第1軸311および321の付け根(双腕ロボット3の肩部分)と、第2軸312および322の付け根(双腕ロボット3のひじ部分)には、それぞれ、サーボモータ3a〜3dが設けられている。この構成により各軸は水平方向に旋回移動できるようになっている。
【0032】
図1にて示される軌道生成部1は、双腕ロボット3の各部位が現在位置から目標位置まで移動できるように、各関節の移動量および移動速度を演算し、各サーボドライバに指令を送る部分である。軌道生成部1は、記憶部11および演算部12を含んで構成される。記憶部11は、軌道生成に必要な双腕ロボット3の概形寸法や移動に関する補間情報ならびに速度情報などの諸元と、教示もしくはロボット言語によるプログラミングによって記述されたロボットの動作順序を制御する動作プログラム、および干渉判定に必要な干渉条件を格納する部分である。演算部12は、双腕ロボット3の各部位が現在位置から目標位置まで移動できるように、各関節の移動量および移動速度を演算する部分である。双腕ロボット3の移動前に、軌道生成部1の演算部12は干渉判定部4へ、移動前の位置から移動後の位置に移動する場合の移動中および移動後の干渉の有無を問い合わせる。
【0033】
サーボドライバ2a〜2dは、軌道生成部1からの指令を受けて、双腕ロボット3の各関節に設けられたサーボモータ3a〜3dをそれぞれ駆動し、駆動後の現在位置を軌道生成部1にフィードバックする部分である。
【0034】
[干渉判定部4の構成]
以下、双腕ロボットシステム100の一構成要素である干渉判定部4(特許請求の範囲における「干渉判定装置」に相当)の構成について、図4〜図9を更に参照しながら詳細に説明する。干渉判定部4は、軌道生成部1から問い合わせを受けて、3次元で動作する双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5(ワークまたは治具)との間の干渉判定を行う部分である。図4は、干渉判定部4の機能的構成要素を示したブロック図である。図4に示されるように、干渉判定部4は、格納部41および干渉判定演算部42を含んで構成される。
【0035】
干渉判定部4の格納部41は、諸元等格納部411、干渉情報格納部412(特許請求の範囲における「干渉情報格納手段」に相当)、および干渉条件情報格納部413(特許請求の範囲における「干渉条件情報格納手段」に相当)を含んで構成される。諸元等格納部411は、電源投入後に受け取った双腕ロボット3の諸元、および軌道生成部1からの問い合わせ毎に受け取った移動前後の双腕ロボット3の部位毎の角度を格納する部分である。干渉情報格納部412は、双腕ロボット3および障害物5における干渉情報を格納する部分である。干渉情報は、後に詳細に説明されるように、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に、干渉を伴わない場合には「0」を、干渉を伴う場合には「1」を表す情報である。干渉条件情報格納部413は、干渉条件情報を双腕ロボット3の干渉判定対象部位ごとに格納する部分である。干渉条件情報は、後に詳細に説明されるように、干渉情報に基づき設定され、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴うか否かを表す情報である。
【0036】
干渉判定部4の干渉判定演算部42は、格納部41に格納された各情報に基づき干渉判定を行う部分である。干渉判定演算部42は、双腕ロボット3の移動前後の各関節の角度に対して、更に一定時間毎に分割された移動過程の各関節の角度に対して、それぞれ干渉判定を行う。干渉判定演算部42は、図4に示されるように、識別番号割当部421(特許請求の範囲における「識別番号割当手段」に相当)、干渉情報生成部422(特許請求の範囲における「干渉情報格納手段」に相当)、干渉条件情報生成部423(特許請求の範囲における「干渉条件情報格納手段」に相当)、マス目管理部424(特許請求の範囲における「マス目管理手段」に相当)、メモリ領域初期化部425(特許請求の範囲における「メモリ領域初期化手段」に相当)、占有情報記録部426(特許請求の範囲における「占有情報記録手段」に相当)、および判断部427(特許請求の範囲における「判断手段」に相当)を含んで構成される。以下、干渉判定演算部42を構成する各構成要素について詳細に説明する。
【0037】
[識別番号割当部421]
識別番号割当部421は、双腕ロボット3の干渉判定対象部位および障害物5に識別番号を割り当てる部分である。各識別番号は、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し且つ他の全ての識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定される情報である。具体的に、識別番号割当部421が図2および図3にて示した双腕ロボット3の干渉判定対象部位および障害物5に割り当てた識別番号IDiの一例を図5に示す。図5の一例において、識別番号割当部421は、アーム31の第1軸(第1リンク)311に対して、識別番号ID1として「1000000」を割り当てている。また、識別番号割当部421は、アーム32の昇降軸323に対して、識別番号ID6として「0000010」を割り当てている。更に、識別番号割当部421は、障害物5に対して、識別番号ID7として「0000001」を割り当てている。ここで挙げた一例においては、双腕ロボット3の干渉判定対象部位および障害物5が合計で「7つ」あるため、各識別番号IDiの桁数は「7」となっている。また、本実施形態においては、識別番号を「IDi」で表示する場合に、双腕ロボット3の干渉判定対象部位に対して先に「i」の値を割り当て、その後に障害物5に対して「i」の値を割り当てることとする。つまり、上記一例においては双腕ロボット3の干渉判定対象部位が6つあるため、ID1からID6までを双腕ロボット3の干渉判定対象部位に割り当て、障害物5をID7とする。また、障害物5の数は複数であっても良く、例えば障害物5が3つある場合には、各識別番号IDiの桁数を「9」とすれば良い。また、ID1からID7までの桁ごとの論理積を計算すると、全ての桁において「0」となる。
【0038】
[干渉情報生成部422]
干渉情報生成部422は、双腕ロボット3の干渉判定対象部位と他の部位との間、および双腕ロボット3の干渉判定対象部位と障害物5との間で、干渉のない立体交差が存在しない場合(つまり立体交差する際に干渉を伴う場合)は「1」とし、干渉のない立体交差が可能である場合(つまり立体交差する際に干渉を伴わない場合)もしくは自分自身との関係は「0」としたテーブルを作成する部分である。
【0039】
具体的に、干渉情報生成部422が作成したテーブルの一例を図6に示す。図6の一例において、例えばi=1およびj=2の場合における干渉の有無を示す干渉情報t12の値は「0」であり、これはi=1に相当するアーム31の第1軸311とj=2に相当するアーム31の第2軸312との間では、干渉のない立体交差が存在すること、つまり立体交差する際に干渉を伴わないことを示す。また、例えばi=4およびj=3の場合における干渉の有無を示す干渉情報t43の値は「1」であり、これはi=4に相当するアーム32の第1軸321とj=3に相当するアーム31の昇降軸313との間では、干渉のない立体交差が存在しないこと、つまり立体交差する際に干渉を伴うことを示す。また、例えばi=5およびj=5の場合における干渉の有無を示す干渉情報t55の値は「0」であり、これはi=5に相当するアーム32の第2軸322が自分自身との間で干渉することは有り得ないことを示す。
【0040】
干渉情報生成部422は、このようにして作成したテーブルを格納部41の干渉情報格納部412に格納させる。なお、干渉情報生成部422は、識別番号ID7の障害物5に対しては、干渉情報t71、t72などを求めなくても良い。双腕ロボット3側の干渉情報t17、t27などにおいて障害物5との干渉の有無が既に考慮されているからである。また、この意味では、干渉情報tijの値と干渉情報tjiの値は常に同じであるため、図6の一例をtijかtjiのうち何れか一方のみを明らかにしたテーブルにしても良い。
【0041】
[干渉条件情報生成部423]
干渉条件情報生成部423は、干渉条件情報を生成する部分である。干渉条件情報は、干渉情報に基づき設定され、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有し、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴うか否かを表す情報である。干渉条件情報生成部423は、下記の数式(1)により計算される情報Ciを干渉条件情報として生成する。
【数2】
ただし、hは双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の干渉判定対象部位の干渉条件情報であり、IDjはj番目の干渉判定対象部位または障害物の識別番号であり、tijはi番目の干渉判定対象部位とj番目の干渉判定対象部位または障害物における干渉情報である。
【0042】
以下、干渉条件情報生成部423による干渉条件情報の生成方法を詳細に説明する。まず、簡単な一例として、干渉判定対象部位が2個のみで障害物はないケースを考える。すなわち、右腕(ID1=01)と左腕(ID2=10)のみの干渉判定を行う場合を考える。この場合に干渉条件情報生成部423により生成される干渉条件情報を図7に示す。なお、図7の一例においては、右腕と左腕とが立体交差する際に干渉を伴うとして、干渉情報が設定されている。つまり、t12=1であり、t21=1である。
【0043】
図7の一例において、i=1の識別番号ID1の部位である右腕に対して干渉条件情報C1を求めると、上記式(1)に従い、
C1=ID1・t11+ID2・t12…(2)
である。そして、図7の一例において、ID1=01、t11=0、ID2=10、t12=1であるため、それぞれの値を上記式(2)に代入すると、
C1=01・0+10・1=10…(3)
となり、識別番号ID1の右腕の干渉条件情報C1の値は10として求められる。
【0044】
続いて、より複雑な例として、図2および図3にて示した双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数が7つであるケースを考える。説明の便宜上、図5および図6の場合と同様の識別番号および干渉情報について考える。この場合に干渉条件情報生成部423により生成される干渉条件情報を図8に示す。この場合において、i=1の識別番号ID1の部位であるアーム31の第1軸311に対して干渉条件情報C1を求めると、上記式(1)に従い、
C1=ID1・t11+ID2・t12+ID3・t13+ID4・t14+ID5・t15+ID6・t16+ID7・t17…(4)
である。そして、ID1=1000000、t11=0、ID2=0100000、t12=0、ID3=0010000、t13=1、ID4=0001000、t14=1、ID5=0000100、t15=0、ID6=0000010、t16=1、ID7=0000001、t17=0であるため、それぞれの値を上記式(4)に代入すると、
C1=1000000・0
+0100000・0
+0010000・1
+0001000・1
+0000100・0
+0000010・1
+0000001・0
=0011010…(5)
となり、識別番号ID1のアーム31の第1軸311の干渉条件情報C1の値は0011010として求められる。
【0045】
同様に、他の干渉判定対象部位に対して干渉条件情報を求めることができ、その結果が図8にC2〜C6の値として示されている。干渉条件情報生成部423は、このようにして生成した干渉条件情報を格納部41の干渉条件情報格納部413に格納させる。なお、干渉条件情報生成部423は、識別番号ID7の障害物5に対しては干渉条件情報を求めなくても良い。障害物5に対して別途干渉判定処理を行わなくても、判定結果を全体としてみれば、双腕ロボット3の干渉判定対象部位と障害物5との間の干渉有無が常に含まれているからである。
【0046】
[マス目管理部424]
マス目管理部424は、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する部分である。図9は、マス目管理部424により作成された判定領域6の一例を示す。判定領域6は、双腕ロボット3の姿勢および障害物5の位置を演算するために要する諸元を格納した諸元等格納部411の値を元に、双腕ロボット3の動作する範囲を包含する空間、もしくは双腕ロボット3の動作する範囲の一部であって干渉判定の対象となる空間を2次元平面上に投影したn1×n2の2次元平面のマス目で表現されるものである。
【0047】
[メモリ領域初期化部425]
メモリ領域初期化部425は、障害物対応マス目および障害物非対応マス目のメモリ領域を初期化する部分である。「障害物対応マス目」は、マス目管理部424によるn1×n2のマス目のうち障害物5に対応するマス目を言い、「障害物非対応マス目」はn1×n2のマス目のうち障害物5に対応しないマス目を言う。具体的に、メモリ領域初期化部425は、n1×n2の全てのマス目に対して、そのメモリ領域に「0」を表す情報を記録する。その後、メモリ領域初期化部425は、障害物対応マス目を特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録することにより、障害物対応マス目のメモリ領域を初期化する。「障害物占有情報」は、障害物5の識別番号に基づく情報であり、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有する情報である。本実施形態では、「障害物占有情報」が「障害物5の識別番号」である場合を一例として挙げて、以下説明する。メモリ領域初期化部425による障害物占有情報の記録により、個々のマス目を占有する障害物5に対応するビットが立った状態となる。なお、障害物対応マス目として特定されない障害物非対応マス目は、そのメモリ領域に「0」を表す情報が記録されたままで初期化されたことになる。
【0048】
図9は、メモリ領域初期化部425により初期化される障害物対応マス目および障害物非対応マス目の一例を示す図としても参照することができる。図9の一例において、2次元平面上に投影した障害物5が存在する領域が符号5mで示されるように特定されており、当該領域に対応するマス目、つまり障害物5の領域5mに全部または一部がかかっているマス目が、障害物対応マス目としてハッチング表示されている。なお、以下の説明において「領域に対応するマス目」という場合には、当該領域に全部または一部がかかっているマス目のことを指す。また、上記障害物対応マス目を除外した全てのマス目が本実施形態で言う障害物非対応マス目である。なお、個々のマス目を特定する方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する。
【0049】
[占有情報記録部426]
占有情報記録部426は、マス目管理部424による上記n1×n2のマス目のうち、双腕ロボット3の干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する部分である。「ロボット占有情報」は、双腕ロボット3の干渉判定対象部位の識別番号に基づく情報であり、双腕ロボット3の干渉判定対象部位の数に障害物5の数を足した数と同数の複数の桁数を有する情報である。占有情報記録部426によるロボット占有情報の記録により、個々のマス目を占有する双腕ロボット3の干渉判定対象部位に対応するビットが立った状態となる。
【0050】
図9は、占有情報記録部426が特定したロボット対応マス目の一例を示す図としても参照することができる。図9の一例において、2次元平面上に投影した判定対象となる姿勢をとった双腕ロボット3の干渉判定対象部位が存在する領域が符号311m、312m、313m、321m、322m、および323mで示されるように特定されている。また、各領域に対応するマス目のうち符号312mおよび313mで表示された領域に対応するロボット対応マス目がハッチング表示されている。ロボット対応マス目が重なる部分についてはハッチング表示も重なっている。なお、個々のマス目を特定する方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する。
【0051】
占有情報記録部426によるロボット占有情報の記録方法は、大きく3つのパターンに分けられる。1つ目のパターンは、特定したロボット対応マス目のメモリ領域が「0」を表す情報により初期化されている場合に、双腕ロボット3の干渉判定対象部位の識別番号をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後のロボット占有情報は、当該ロボット対応マス目を双腕ロボット3の当該干渉判定対象部位が占有することを表すこととなる。
【0052】
2つ目のパターンは、特定したロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、当該障害物占有情報と双腕ロボット3の干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後のロボット占有情報は、当該ロボット対応マス目を障害物5と双腕ロボット3の当該干渉判定対象部位の両方が占有することを表すこととなる。なお、「ロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合」とは、言い換えれば、既に障害物5が占有している領域が双腕ロボット3の干渉判定対象部位の存在する領域としても特定されたことである。
【0053】
3つ目のパターンは、特定したロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合に、当該既存のロボット占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和を新たなロボット占有情報として当該ロボット対応マス目のメモリ領域に記録するパターンである。これにより、記録後の新たなロボット占有情報は、当該ロボット対応マス目を双腕ロボット3の既存の干渉判定対象部位と現在の干渉判定対象部位の両方が占有することを表すこととなる。なお、「ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合」とは、言い換えれば、既に他の干渉判定対象部位が占有している領域が現在の干渉判定対象部位の存在する領域としても特定されたことである。
【0054】
[判断部427]
判断部427は、ロボット占有情報および干渉条件情報における桁ごとの論理積をロボット対応マス目ごとに求め、当該論理積の結果に基づき干渉判断を行うものである。判断部427は、当該論理積の結果が全ての桁において「0」であれば、双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間で干渉は生じないと判断する。一方で、判断部427は、当該論理積の結果が少なくとも一つの桁において「1」であれば、双腕ロボット3の干渉判定対象部位同士、または双腕ロボット3と障害物5との間で干渉が生じると判断する。判断部427は、干渉判断の結果を示す情報を軌道生成部1に出力する。判断部427は、干渉判断の結果を出力する際に、干渉が生じている箇所を特定する情報をともに出力するようにしても良い。
【0055】
[双腕ロボットシステム100の動作]
続いて、双腕ロボットシステム100により行われる動作について、図10〜図18を参照しながら説明する。下記の説明は、双腕ロボットシステム100におけるメイン処理と、干渉判定部4による干渉判定処理とに大別される。
【0056】
[メイン処理]
まず、双腕ロボットシステム100におけるメイン処理について図10を参照しながら説明する。図10は、双腕ロボットシステム100にて行われるメイン処理を示すフローチャートである。
【0057】
最初に、軌道生成部1の演算部12が、記憶部11に格納されているパラメータを干渉判定部4の干渉判定演算部42に送信する。このパラメータは、干渉判定の対象部位毎に設定されるものであり、上述した干渉情報tijを含む(ステップS101)。
【0058】
次に、軌道生成部1の演算部12が、各サーボドライバ2a〜2dから双腕ロボット3の各部位の現在角度を読み込む(ステップS102)。
【0059】
次に、軌道生成部1の演算部12が、記憶部11に格納された動作プログラムを解析して、双腕ロボット3の各部位の移動先の角度(目標角度)を求める(ステップS103)。
【0060】
次に、軌道生成部1の演算部12が、双腕ロボット3の各部位の現在角度と目標角度を干渉判定部4の干渉判定演算部42に送信する(ステップS104)。
【0061】
次に、軌道生成部1の演算部12は干渉判定部4の干渉判定演算部42からの判定結果信号を待つ(ステップS105)。この間、干渉判定部4では詳細を後述する干渉判定処理が行われ、双腕ロボット3のアーム31,32の移動の全体で部位同士または双腕ロボット3と障害物5との間で干渉が生じないかどうかが判定される。そして、干渉判定部4の干渉判定演算部42からの判定結果信号が「干渉なし」の場合(ステップS106:YES)、軌道生成部1の演算部12は、表示部(図示せず)に「干渉なし」の表示をさせ(ステップS107)、記憶部11に格納されている動作プログラムを実行させ、双腕ロボット3の動作制御を行う(ステップS108)。
【0062】
一方で、干渉判定部4の干渉判定演算部42からの判定結果信号が「干渉あり」の場合には(ステップS106:NO)、軌道生成部1の演算部12は、表示部(図示せず)に「干渉あり」の表示をさせ(ステップS109)、そのまま処理を終了させる。以上のように軌道生成部1は、双腕ロボット3の移動の全体で部位同士または障害物5との間での干渉が生じない判定結果が得られるまでサーボドライバ2a〜2dに指令を送らずに待機し、干渉が生じる場合には双腕ロボット3の各部位の移動を開始させない。
【0063】
[干渉判定処理]
引き続き、干渉判定部4による干渉判定処理について図11〜図13を参照しながら説明する。図11は、干渉判定部4による干渉判定処理全体を示すフローチャートであり、図12はステップS204を詳細に示すフローチャートであり、図13はステップS206の説明で参照する図である。
【0064】
最初に、識別番号割当部421が双腕ロボット3の干渉判定対象部位および障害物5に識別番号IDi(i=1〜h)を割り当てる(ステップS201、図5参照)。
【0065】
次に、干渉条件情報生成部423が、ステップS201にて割り当てられた識別番号IDiと、干渉情報生成部422により作成され干渉情報格納部412に格納されたテーブル(図6参照)に記載された干渉情報tijに基づいて、上述した式(1)に従い干渉条件情報Ciを生成する(ステップS202、図7および図8参照)。
【0066】
次に、マス目管理部424が、判定領域(n1×n2のマス目領域、図9参照)に対応するメモリ領域を確保する(ステップS203)。
【0067】
次に、メモリ領域初期化部425が、マス目管理部424が確保したn1×n2の判定領域のメモリ領域を初期化する(ステップS204)。
【0068】
具体的には、図12に示されるように、メモリ領域初期化部425が、まず、マス目管理部424が確保したn1×n2の全てのマス目に対して、そのメモリ領域に「0」を表す情報を記録する(ステップS301)。
【0069】
次に、メモリ領域初期化部425は、n1×n2のマス目領域のうち、障害物対応マス目を特定する。なお、個々のマス目を特定する具体的な方法については、後述の[占有領域の特定方法]の欄にて詳細に説明する(ステップS302)。
【0070】
次に、メモリ領域初期化部425は、障害物占有情報として障害物5の識別番号を当該特定した障害物対応マス目のメモリ領域に記録することにより、障害物対応マス目のメモリ領域を初期化する。メモリ領域初期化部425による障害物占有情報の記録により、個々のマス目を占有する障害物5に対応するビットが立った状態となる。一方で、障害物対応マス目として特定されない障害物非対応マス目は、上記ステップS301にてそのメモリ領域に「0」を表す情報が記録されたままで初期化されたことになる(ステップS303)。
【0071】
次に、ステップS303の初期化処理におけるメモリ領域の各値(以下、「初期値」ともいう)が格納される。この格納処理は格納部41にて行われてもよく、図示はしないが例えば「初期値格納部」を格納部41に更に設けても良い(ステップS304)。
【0072】
なお、上記ステップS301およびステップS303においては、初期値をメモリ領域に記録しているが、これに限らず、ステップS301およびステップS303の段階では初期値を記録せずに記録すべき初期値を特定だけしておき、ステップS304で格納した初期値を後述するステップS207にて初めて記録するようにしても良い。なお、以下では、ステップS301およびステップS303で特定されステップS304で格納された初期値がステップS207で初めて記録されるものとして説明する。
【0073】
次に、図11に戻り、干渉判定演算部42はステップS104(図10参照)にて軌道生成部1から双腕ロボット3の各部位の現在角度と目標角度が入力されることを待つ(ステップS205)。
【0074】
軌道生成部1から双腕ロボット3の各部位の現在角度と目標角度の入力があった場合に(ステップS205:YES)、干渉判定演算部42は、双腕ロボット3の各部位の目標角度と現在角度の差Δθおよび各部位の速度パラメータから一定時間間隔の各部位の角度を求め、これを諸元等格納部411の角度テーブルに記憶する。図示はしないが、この処理のために干渉判定演算部42が別途の処理部を備えていても良い。図13は諸元等格納部411に記憶された角度テーブルの一例を示す。図13に示されるように、角度テーブルは、一定時間間隔毎のレコード(レコード数:m)に部位毎のフィールドを備えて構成されるものである(ステップS206)。
【0075】
以下、ステップS207からステップS214までのループ1が開始される。ステップS206の次に、メモリ領域初期化部425が、判定領域のn1×n2のマス目それぞれに対応するメモリ領域にステップS302〜S304における初期値(障害物占有情報または「0」を表す情報)を書き込む(ステップS207)。この処理は、ループ1の各処理が始まる前に判定領域のn1×n2のマス目それぞれに対応するメモリ領域を初期化する処理である。
【0076】
次に、占有情報記録部426が、図13にて例示した角度テーブルからk番目(k=1〜m)のレコードの角度データを読み込む(ステップS208)。
【0077】
以下、ステップS209からステップS211までのループ2が開始される。ステップS208の次に、占有情報記録部426が、干渉判定の対象部位iの角度データと寸法パラメータから判定領域(二次元平面)において干渉判定の対象部位iが占有するマス目、すなわちロボット対応マス目を特定する。なお、ロボット対応マス目を特定する具体的な方法については、後述の[占有領域の特定方法]の欄で詳細に説明する。また、占有情報記録部426は、特定した当該ロボット対応マス目に対応するメモリ領域に記録されている値(初期値または既存のロボット占有情報)を取得する(ステップS209)。
【0078】
次に、占有情報記録部426が、当該特定したロボット対応マス目のメモリ領域にロボット占有情報を記録する。占有情報記録部426は、特定したロボット対応マス目のメモリ領域に「0」を表す情報が記録されている場合に、つまりメモリ領域が「0」を表す情報により初期化されたままである場合に、双腕ロボット3の干渉判定対象部位の識別番号をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。また、占有情報記録部426は、特定したロボット対応マス目のメモリ領域に障害物占有情報が記録されている場合に、当該障害物占有情報と双腕ロボット3の干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。更に、占有情報記録部426は、特定したロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合に、当該既存のロボット占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和を新たなロボット占有情報として当該ロボット対応マス目のメモリ領域に記録する。言い換えれば、占有情報記録部426は、干渉判定の対象部位iが占有するメモリ領域に既に記録されている情報が0である場合にはロボット占有情報として識別番号IDiを書き込み、既に記録されている情報が0以外である場合には当該記録情報と識別番号IDiの論理和を新たなロボット占有情報として書き込む(ステップS210)。
【0079】
次に、判断部427が、最前のステップS210の処理でロボット占有情報を書き込んだ全てのメモリ領域について、干渉条件情報Ciとの論理積を求める(ステップS211)。
【0080】
ステップS209からステップS211までの処理を「i=h−障害物の数」となるまで、すなわち双腕ロボット3の全ての干渉判定対象部位について繰り返す。今まで例示したようにhが7で障害物5の数が1である場合には、ステップS209からステップS211までの処理が「i=1」から「i=6」となるまで6回繰り返される。これにより、ループ2が終了し、ある時点kにおける双腕ロボット3の姿勢に対する干渉判定が終了する。なお、ループ2の処理の具体例については、下記の[ループ2の処理の具体例]の欄で後述する。
【0081】
ループ2が終了した時点で、判断部427はステップS211にて求めたそれぞれの論理積が全ての桁において0か否かを判断する(ステップS212)。ステップS212の判断にて、全ての論理積が全ての桁において0ならば(ステップS212:YES)、判断部427は「干渉なし」を表す情報を格納部41に記憶させる(ステップS213)。一方で、ステップS212の判断にて、何れかの論理積の少なくとも一つの桁において0でないものがある場合には(ステップS212:NO)、判断部427は「干渉あり」を表す情報を格納部41に記憶させる(ステップS214)。格納部41はこの記憶処理のために別途の記憶手段を更に備えていても良く、諸元等格納部411がこの記憶処理を行っても良い。
【0082】
ステップS207からステップS214までの処理をk=mとなるまで、すなわち双腕ロボット3の各部位の目標角度まで繰り返す。これにより、ループ1が終了し、双腕ロボット3の各アームが目標とする姿勢に移行するまでの全ての姿勢における干渉判定処理が終了する。
【0083】
ループ1が終了した時点で、判断部427は、ステップS213またはステップS214にて格納部41に記憶された一定時間間隔毎の判定結果情報から最終的な判定結果を求め、これを判定結果信号として軌道生成部1に送る。判定結果は、一定時間間隔毎の判定結果情報の全てが干渉なしなら「干渉なし」、一つでも干渉ありがあれば「干渉あり」となる(ステップS215)。このような干渉判定処理により、双腕ロボット3のアーム31,32が初期の姿勢から目標とする姿勢まで動作する間の一定時間間隔毎の各姿勢について、双腕ロボット3の部位同士および双腕ロボット3と障害物5との間の干渉の有無を確認することができる。
【0084】
[ループ2の処理の具体例、その1]
続いて、図14〜図16を参照しながら、ループ2の処理の具体例(その1)について説明する。図14〜図16は、ループ1内のある時刻(例えばk番目の時刻)におけるステップS209からステップS211までの処理の具体例を示す。図14はi=1の場合の処理の具体例であり、図15はi=2の場合の処理の具体例であり、図16はi=6の場合の処理の具体例である。
【0085】
図14が示すi=1の場合には、アーム31の第1軸311に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第1軸311の占有領域(図14にてドットを付した領域H1に対応するマス目、ロボット対応マス目)を特定する。次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む。この時、ロボット対応マス目の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている(ステップS209)。初期値として「0」を表す情報が記録されていることから、領域H1のマス目に対応するメモリ領域には第1軸311の識別番号ID1=「1000000」が書き込まれる(ステップS210)。次に、判断部427が、最前のステップS210で書き込まれたロボット占有情報それぞれと干渉条件情報C1との論理積を求める(ステップS211)。つまり、判断部427は、下記の式(6)にて示される論理積を求める。
領域H1のマス目に係る論理積=
1000000
×0011010
=0000000・・・(6)
【0086】
図15が示すi=2の場合には、アーム31の第2軸312に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第2軸312の占有領域(図15にてドットを付した領域H2およびハッチを付した領域H3に対応するマス目、ロボット対応マス目)を特定する。領域H2は第2軸312のみが存在する領域であり、領域H3は第2軸312と第1軸311が重なる領域である(ステップS209)。次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H2の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H2のマス目に対応するメモリ領域には第2軸312の識別番号ID2=「0100000」が書き込まれる。一方、i=1での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H3のマス目に対しては、既存のロボット占有情報「1000000」と第2軸312の識別番号ID2=「0100000」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(7)によって示されるロボット占有情報を領域H3のマス目に対応するメモリ領域に記録する。
領域H3のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
1000000
+0100000
=1100000・・・(7)
【0087】
次に、判断部427が、領域H2と領域H3のそれぞれに対応するマス目について、次の式(8)および式(9)によって示されるロボット占有情報と干渉条件情報C2との論理積をマス目ごとに求める。
領域H2のマス目に係る論理積=
0100000
×0000110
=0000000・・・(8)
領域H3のマス目に係る論理積=
1100000
×0000110
=0000000・・・(9)
【0088】
前述のようにして、i=3で昇降軸313、i=4で第1軸321、i=5で第2軸322と、それぞれ判定対象となる部位毎に処理が進み、図16が示すi=6の場合には、アーム32の昇降軸323に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において昇降軸323の占有領域(図16にてドットを付した領域H4、ハッチを付した領域H5、領域H6、および領域H7に対応するマス目、ロボット対応マス目)を特定する。領域H4は昇降軸323のみが存在する領域であり、領域H5は昇降軸323とアーム32の第2軸322が重なる領域であり、領域H6は昇降軸323とアーム31の第2軸312が重なる領域であり、領域H7は昇降軸323とアーム31の第1軸311および第2軸312が重なる領域である(ステップS209)。
【0089】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H4の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されていないため、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H4のマス目に対応するメモリ領域には昇降軸323の識別番号ID6=「0000010」が書き込まれる。一方、i=5での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H5のマス目に対しては、既存のロボット占有情報としてのアーム32の第2軸322の識別番号ID5=「0000100」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(10)によって示されるロボット占有情報を領域H5のマス目に対応するメモリ領域に記録する。
領域H5のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000100
+0000010
=0000110・・・(10)
【0090】
また、i=2での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H6のマス目に対しては、既存のロボット占有情報としてのアーム1の第2軸312の識別番号ID2=「0100000」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(11)によって示されるロボット占有情報を領域H6のマス目に対応するメモリ領域に記録する。
0100000
+0000010
=0100010・・・(11)
【0091】
更に、i=1およびi=2での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H7のマス目に対しては、既存のロボット占有情報としてのアーム1の第1軸311の識別番号ID1=「1000000」と第2軸312の識別番号ID2=「0100000」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(12)によって示されるロボット占有情報を領域H7のマス目に対応するメモリ領域に記録する。
1000000
+0100000
+0000010
=1100010・・・(12)
【0092】
次に、判断部427が、領域H4ないし領域H7のそれぞれに対応するマス目について、次の式(13)ないし式(16)によって示されるロボット占有情報と干渉条件情報C6との論理積をマス目ごとに求める。
領域H4のマス目に係る論理積=
0000010
×1111001
=0000000・・・(13)
領域H5のマス目に係る論理積=
0000110
×1111001
=0000000・・・(14)
領域H6のマス目に係る論理積=
0100010
×1111001
=0100000・・・(15)
領域H7のマス目に係る論理積=
1100010
×1111001
=1100000・・・(16)
【0093】
以上、ループ2の処理の具体例(その1)について説明したが、このようにしてループ2が終了する(全ての干渉判定対象部位についてロボット占有情報と干渉条件情報との論理積が求まる)と、判断部427は、それぞれの論理積が0か否かを判断する(ステップS212)。この場合、判断部427は、上述の具体例におけるi=1およびi=2の時のように論理積の結果が全ての桁で0であれば、干渉は生じないと判断する。実際、具体例のi=1の場合、第1軸311が自分自身と干渉することはあり得ない。また、i=2の場合は、第1軸311と第2軸312とは関節でつながって立体交差しており、干渉することはあり得ない。一方、上述の具体例におけるi=6の時のように論理積の結果が0でない(少なくとも一つの桁が1である)場合は、干渉が生じると判断する。なお、干渉が生じる場所は、上記の式(15)および式(16)において値が「1」である桁と同一桁で値を「1」とする識別番号の部位である。つまり、上記の式(15)において値が「1」である桁は左から二番目の桁であり、この桁で値を「1」とする識別番号の部位はアーム31の第2軸312(識別番号「0100000」)である。したがって、昇降軸323はアーム31の第2軸312と干渉することがわかる。また、式(16)において値が「1」である桁は左から一番目と二番目の各桁であり、これらの桁で値を「1」とする識別番号の部位はアーム31の第1軸311(識別番号「1000000」)と第2軸312(識別番号「0100000」)である。したがって、昇降軸323はアーム31の第1軸311と第2軸312とが重なる位置、つまり右ひじ部においても干渉を生じることがわかる。
【0094】
なお、図14〜図16では説明の便宜上マス目(メモリ領域)を大きく設定して説明した。しかし、実際のマス目は図14〜図16の例よりもっと小さい設定となる。
【0095】
[ループ2の処理の具体例、その2]
以上の[ループ2の処理の具体例、その1]では、双腕ロボット3の部位同士で生じる干渉を判定する例について説明した。以下の[ループ2の処理の具体例、その2]では、双腕ロボット3と障害物5との間で生じる干渉を更に判定する例について説明する。図17および図18は、この例における状況を示す図であり、ループ1内のある時刻(例えばk番目の時刻)におけるステップS209からステップS211までの処理の具体例を示す。図17はi=5の場合を示し、図18はi=6の場合を示す。図14〜図16と比較すると、障害物5と双腕ロボット3との間で干渉が生じている点が相違する。
【0096】
干渉判定を行うために、i=1〜6の場合のそれぞれについて、上記説明した[ループ2の処理の具体例、その1]と同様の処理が行われる。i=1〜4の場合は[ループ2の処理の具体例、その1]と相違点がないためここでは説明を省略し、i=5およびi=6の場合について詳細に説明する。
【0097】
図17が示すi=5の場合には、アーム32の第2軸322に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において第2軸322の占有領域(図17にてドットを付した領域H8、ハッチを付した領域H9および領域H10に対応するマス目、ロボット対応マス目)を特定する。領域H8は第2軸322のみが存在する領域であり、領域H9は第2軸322とアーム32の第1軸321が重なる領域であり、領域H10は第2軸322と障害物5が重なる領域である(ステップS209)。
【0098】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H8の全てのメモリ領域は、ステップS204で「障害物対応マス目」として特定されておらず、またi=1〜4の処理でロボット対応マス目として特定もされていないことから、ステップS207で「0」を表す情報が初期値として記録されている。そのため、領域H8のマス目に対応するメモリ領域には第2軸322の識別番号ID5=「0000100」が書き込まれる。
【0099】
一方、i=4での書き込みにより、メモリ領域に既存のロボット占有情報が記録されている領域H9のマス目に対しては、既存のロボット占有情報「0001000」と第2軸322の識別番号ID5=「0000100」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(17)によって示されるロボット占有情報を領域H9のマス目に対応するメモリ領域に記録する。
領域H9のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0001000
+0000100
=0001100・・・(17)
【0100】
更に、領域H10のメモリ領域は、ステップS204で「障害物対応マス目」として特定されたため、ステップS207で障害物占有情報が初期値として記録されている。そのため、領域H10のマス目に対応するメモリ領域には、当該障害物占有情報と第2軸322の識別番号ID5=「0000100」の論理和がロボット占有情報として書き込まれる。障害物占有情報が障害物5の識別番号ID7=「0000001」である場合に、占有情報記録部426は、下記の式(18)によって示されるロボット占有情報を領域H10のマス目に対応するメモリ領域に記録する。
領域H10のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000001
+0000100
=0000101・・・(18)
【0101】
次に、判断部427が、領域H8ないし領域H10のそれぞれに対応するマス目について、次の式(19)ないし式(21)によって示されるロボット占有情報と干渉条件情報C5との論理積をマス目ごとに求める。
領域H8のマス目に係る論理積=
0000100
×0110000
=0000000・・・(19)
領域H9のマス目に係る論理積=
0001100
×0110000
=0000000・・・(20)
領域H10のマス目に係る論理積=
0000101
×0110000
=0000000・・・(21)
【0102】
i=5の場合において、判断部427は、論理積の結果が全ての桁で0であるため、干渉は生じないと判断する。実際、アーム32の第2軸322が自分自身と干渉することはあり得ず、また第1軸321とは関節でつながっているため干渉することはあり得ない。更に、図17においては、アーム32の第2軸322が障害物5と干渉するようにもみえるが、これは2次元に投影したためそうみえるだけであり、実際は高さが異なるため、干渉は生じない。これは、図2を参照すると、第2軸322と障害物5の高さが異なるため干渉が生じないことが明らかであり、その故に図6ではi=5およびj=7の場合の値が「0」である。
【0103】
次に、図18が示すi=6の場合には、アーム32の昇降軸323に対してステップS209からステップS211までの処理が行われる。すなわち、最初に、占有情報記録部426が判定領域6において昇降軸323の占有領域(図18にてドットを付した領域H11、ハッチを付した領域H12、領域H13、H14、および領域H15に対応するマス目、ロボット対応マス目)を特定する。領域H11は昇降軸323のみが存在する領域であり、領域H12は昇降軸323とアーム32の第2軸322が重なる領域であり、領域H13は昇降軸323とアーム31の第2軸312が重なる領域であり、領域H14は昇降軸323とアーム31の第1軸311および第2軸312が重なる領域であり、領域H15は第2軸322および昇降軸323と障害物5が重なる領域である(ステップS209)。
【0104】
次に、占有情報記録部426が当該特定したロボット対応マス目に対応するメモリ領域にロボット占有情報を書き込む(ステップS210)。領域H11には、上記[ループ2の処理の具体例、その1]の説明における領域H4と同様で、「0000010」がロボット占有情報として書き込まれる。同様に、領域H12には上記説明の領域H5と同様で「0000110」が書き込まれ、領域H13には上記説明の領域H6と同様で「0100010」が書き込まれ、領域H14には上記説明の領域H7と同様で「1100010」が書き込まれる。
【0105】
領域H15のメモリ領域は、ステップS204で「障害物対応マス目」として特定されたため、ステップS207で障害物占有情報(本例では、障害物5の識別番号「0000001」)が初期値として記録されていたところ、先のi=5の処理において、第2軸322も占有することとなっている。そのため、領域H15のメモリ領域には、当該障害物占有情報「0000001」と第2軸322の識別番号ID5=「0000100」の論理和「0000101」がロボット占有情報として既に書き込まれている(上記式(18)参照)。したがって、i=6の処理においては、既存のロボット占有情報「0000101」と昇降軸323の識別番号ID6=「0000010」の論理和が新たなロボット占有情報として書き込まれる。つまり、占有情報記録部426は、下記の式(22)によって示されるロボット占有情報を領域H15のマス目に対応するメモリ領域に記録する。
領域H15のマス目に対応するメモリ領域に書き込まれるロボット占有情報=
0000001
+0000100
+0000010
=0000111・・・(22)
【0106】
次に、判断部427が、領域H11ないし領域H15のそれぞれに対応するマス目について、次の式(23)ないし式(27)によって示されるロボット占有情報と干渉条件情報C6との論理積をマス目ごとに求める。
領域H11のマス目に係る論理積=
0000010
×1111001
=0000000・・・(23)
領域H12のマス目に係る論理積=
0000110
×1111001
=0000000・・・(24)
領域H13のマス目に係る論理積=
0100010
×1111001
=0100000・・・(25)
領域H14のマス目に係る論理積=
1100010
×1111001
=1100000・・・(26)
領域H15のマス目に係る論理積=
0000111
×1111001
=0000001・・・(27)
【0107】
i=6の場合において、判断部427は、領域H11および領域H12のように、論理積の結果が全ての桁で0であれば、干渉は生じないと判断する。実際、アーム32の昇降軸323が自分自身と干渉することはあり得ず、また第2軸322とは関節でつながっているため干渉することはあり得ない。一方、領域H13、領域H14および領域H15のように、論理積の結果が全ての桁で0ではない(少なくとも一つの桁が1である)場合は、干渉が生じると判断する。領域H13および領域H14での干渉については、上記[ループ2の処理の具体例、その1]で説明した通りである。領域H15での論理積の結果はアーム32の昇降軸323が障害物5と干渉することを表す。上記の式(27)において値が「1」である桁は左から七番目の桁であり、この桁で値を「1」とする識別番号の有するのは障害物5(識別番号「0000001」)であるからである。以上の判断結果において、障害物5との間の干渉有無は、障害物5を個別に干渉判断の対象とした場合ではなく、i=6の昇降軸323に対する干渉判断において明らかにされていることに注目すべきである。つまり、本実施形態によれば、障害物5の干渉有無を判定するために、障害物5を干渉判定の対象として別途判定処理を行わなくて済む。
【0108】
[占有領域の特定方法]
前述したように、占有情報記録部426およびメモリ領域初期化部425は、マス目管理部424が作成したn1×n2のマス目(判定領域、図9参照)のうち、ある時点における双腕ロボット3の干渉判定対象部位または障害物5が存在する領域(以下、「占有領域」ともいう)に対応するマス目を特定する。つまり、占有情報記録部426は「ロボット対応マス目」を特定し、メモリ領域初期化部425は「障害物対応マス目」を特定する。以下、占有情報記録部426およびメモリ領域初期化部425による占有領域の特定方法について、図19〜図22を参照し、具体例を挙げながら詳細に説明する。
【0109】
図19は、占有情報記録部426による占有領域の特定方法を説明するための図である。この図19に示す例は、前後に関節AAおよび関節BBを有するアームCCがXY平面上において存在する領域(アームCCの占有領域、図19ではグレーで表示された領域K)を特定する例である。また、図19に示す例は、例えば前述したアーム31の第1軸311に対して、それに対応するロボット対応マス目を特定するための例として理解されることができ、この場合の第1軸311は図19に示すアームCCに該当する。なお、この場合の第1軸311は、例えばオーバル形状である。また、実際のXY平面は、図9に示した判定領域に係るn1×n2のマス目が全て存在可能な平面領域が確保されるが、図19では説明の便宜上、アームCCの部分だけを拡大して示している。その特定方法としては、図19のXY平面上に存在する点(マス目を構成する4つの頂点)に対して、下記の手順1〜手順3を行い、各点がアームCCの占有領域に含まれるか否かを判定することで、XY平面上におけるアームCCの占有領域を特定することができる。
【0110】
この例において、関節AAの中心座標、関節BBの中心座標、およびアームCCの幅は、既知の情報である。これらの既知の情報は、軌道生成部1の記憶部11に格納されており、干渉判定演算部42に送信される。図19において、関節AAの中心座標は点A(x1、y1)であり、関節BBの中心座標は点B(x2、y2)であり、アームCCの幅はwである。また、関節AAおよび関節BBの半径R=w/2である。つまり、
点A(x1、y1):関節AAの中心座標
点B(x2、y2):関節BBの中心座標
w:アームの幅(R=w/2)
である。また、この例において、点DはアームCCの占有領域に入っているか否かの判定対象となる点である。つまり、
点D(x0、y0):任意のマス目の任意の頂点
である。また、各補助線および補助点の定義は以下のとおりである。
l1:点A、点Bを通る直線
l11:関節AAおよび関節BBを近似した円(点A、Bを中心とした半径Rの円)の接線(下側)
l12:関節AAおよび関節BBを近似した円(点A、Bを中心とした半径Rの円)の接線(上側)
l2:点Dを通り、l1と垂直に交わる直線(つまりl1とl2は垂直関係)
点C(x3、y3):l1とl2の交点
点Ai、Bi:点A、Bを中心とした半径Rの円の接線l1iとの接点
点E’:点AからX軸に垂線を引いたときにY座標がA1と同じになる点
点B’:点DからX軸に垂線を引いたときにl1と交わる点
なお、関節AAおよび関節BBの半径は同じとする。ゆえに、l1、l11、およびl12は互いに並行である。また、関節AAおよび関節BBの近似円及び線分l11及びl12に囲まれた範囲(領域K)がアームCCに相当する。
【0111】
(手順1)
最初に、図20に示すルールに従い、判定対象部位(アームCC)が位置する座標系を特定し、占有される可能性のあるマス目領域を限定する。点Dの座標(x0、y0)が、
(xmin< x0< xmax)…(28)
および
(ymin <y0 < ymax)…(29)
を満たすならば、点Dは判定対象部位の占有領域に含まれる可能性がある。この範囲外のマス目は、下記の手順3の項で後述する円形部分に含まれるか、もしくは判定対象部位の占有領域に含まれないことになる。
【0112】
ここで、x12wおよびy12wは、三角形ABEと三角形AA1E’との相似関係より、
Lab:a12:b12= R:y12w:x12w
(但し、a12=y1−y2、b12=x1−x2)
が成り立つから、方向性を加味して、
x12w= −R b12/Lab
y12w= −R a12/Lab
として与えられる。Labは、三平方の定理から、
【数3】
となる。
【0113】
(手順2)
次に、上記の式(28)および(29)、つまり(xmin <x0 < xmax)および(ymin< y0< ymax)を満たす各マス目の点Dが、図21にてグレーで表示された領域K1に入るか否かを判定する。これには、点Dから線分l1までの垂線の長さLcdがR以下となるかどうか、すなわち、
Lcd≦ R…(30)
となるかどうかを判定すればよい。これが成立すれば、点Dを有するマス目は占有領域に含まれることになる。
【0114】
ここで、Lcdは、以下の通り、軌道生成部1の記憶部11に格納されていたパラメータ等から与えられる既知の条件値から求めることができる。まず、線分l1の方程式は、傾きをa1、切片をb1とすると、
a1 x+ b1= y
である。これにより、図21における点B’の座標は、X座標が点Dと同じx0であるから、(x0、a1x0 + b1) である。したがって、2点DB’間の距離Ldb’は、
Ldb’ =y0 − (a1x0 + b1)
である。ここで、三角形ABEと三角形DB’Cとが相似関係となることから、
Ldb’ :Lcd = Lab : (x2− x1)
が成り立つ。これを、2点CD間の距離Lcdについて解けば、
Lcd= (x2 −x1) Ldb’ /Lab
= (x2 −x1) {y0 − (a1x0 + b1)} / Lab
= −(x1− x2) [y0 − {(y1 - y2)/(x1 - x2)} x0− (y2x1- x2y1)/(x1 - x2) ]/ Lab
= {(y1 - y2)x0−(x1− x2)y0+ (y2x1- x2y1)} /Lab
但し、上記の通り、
【数4】
である。
【0115】
(手順3)
最後に、全てのマス目を対象に、点Dが図22にてグレーで表示された円形領域K2に入るか否かを判定する。座標(xi、yi)を中心とする半径Rの円の方程式は、
(x −xi)2+ (y −yi)2 =R2
であるから、円の境界を含む内側は、
(x −xi)2+ (y −yi)2 ≦R2
と表現できる。ここで、点D(x0、y0)に対して関節AAおよび関節BBの2つの円を考えれば、
(x0−x1)2+ (y0 −y1)2 ≦R2…(31)
(x0−x2)2+ (y0 −y2)2 ≦R2…(32)
のいずれかが成立すれば、点D(x0、y0)を有するマス目は占有領域に含まれることになる。
【0116】
(まとめ)
以上の説明のように、上記の手順1で特定した領域に存在する各マス目の4つの頂点座標が手順2の条件(式(30))に該当するか否かを判定し、さらに、全てのマス目の4つの頂点座標が手順3(式(31)または式(32))の条件に該当するか否かを判定する。そして、何れかの頂点が何れかの条件に該当する場合には、そのマス目はアームCC、すなわち判定対象部位iの占有領域に含まれると判定する。
【0117】
(占有領域が四角形である場合の占有領域の特定方法)
以上では、特定対象がオーバル形状である場合の占有領域の特定方法を説明したが、特定対象がオーバル形状でなく四角形である場合においても占有領域を特定する必要がある。例えば、図3等に示した双腕ロボット3の昇降軸313または323が干渉判定対象部位でありそれらの占有領域を特定する場合や、四角形の障害物5の占有領域を特定する場合である。なお、図示はしないが、仮に障害物5がオーバル形状である場合には、上記の手順1〜3の特定方法によりオーバル形状の障害物5の占有領域を特定すれば良い。
【0118】
図19は、この場合における占有情報記録部426またはメモリ領域初期化部425による占有領域の特定方法を説明するための図としても参照することができる。双腕ロボット3の昇降軸313,323または障害物5が図19に示す四角形A1A2B2B1であり、A1、A2、B2、B1の座標がそれぞれ(xA1、yA1)、(xA2、yA2)、(xB2、yB2)、(xB1、yB1)である場合に、点D(x0、y0)が以下の数式(33)および(34)を満たせば、点D(x0、y0)を有するマス目は四角形A1A2B2B1の占有領域に含まれることとなる。これにより、「ロボット対応マス目」または「障害物対応マス目」が特定される。
Min(xA1、xA2、xB2、xB1) ≦ x0≦ Max(xA1、xA2、xB2、xB1)…(33)
Min(yA1、yA2、yB2、yB1) ≦y0≦ Max(yA1、yA2、yB2、yB1)…(34)
ここで、Min(xA1、xA2、xB2、xB1)はxA1、xA2、xB2およびxB1中の最小値を、Max(xA1、xA2、xB2、xB1)はxA1、xA2、xB2およびxB1中の最大値を、Min(yA1、yA2、yB2、yB1)はyA1、yA2、yB2およびyB1中の最小値を、Max(yA1、yA2、yB2、yB1)はyA1、yA2、yB2およびyB1中の最大値を表す。
【0119】
一方で、点D(x0、y0)が数式(33)および(34)を満たない場合には、点D(x0、y0)を有するマス目は四角形A1A2B2B1の占有領域に含まれないことになる。これにより「ロボット対応マス目」または「障害物対応マス目」が特定できる。
【0120】
[本実施形態の作用及び効果]
続いて、本実施形態にかかる双腕ロボットシステム100の作用及び効果について説明する。本実施形態の双腕ロボットシステム100では、識別番号、干渉情報、干渉条件情報、障害物占有情報、およびロボット占有情報が双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間の干渉を判定するための必須の情報として用いられる。このうち、特に干渉情報および干渉条件情報は、双腕ロボット3の干渉判定対象部位が双腕ロボット3の他の部位および障害物5との間で立体交差する際に干渉を伴わない場合の値および干渉を伴う場合の値に基づいた情報である。したがって、これら干渉情報および干渉条件情報を用いることにより、本実施形態による干渉判定の結果には双腕ロボット3の干渉判定対象部位同士、および双腕ロボット3と障害物5との間の立体交差時の干渉の有無が考慮されることとなる。これにより、干渉判定の精度が向上される。
【0121】
また、本実施形態においては、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で干渉判定を行うため、例えば3次元での干渉判定に比べ、干渉判定処理を短時間で行うことが可能となる。また、本実施形態で用いる干渉情報は「0」または「1」を表す情報であり、そのデータ量が少ないことから、装置全体における計算量や計算時間が短縮できる。
【0122】
また、本実施形態においては、メモリ領域初期化部425が障害物対応マス目のメモリ領域を障害物占有情報で初期化する。次に、占有情報記録部426はロボット対応マス目のメモリ領域が障害物占有情報で初期化されている場合に、つまり干渉判定を行うために特定したロボット対応マス目が障害物対応マス目でもある場合に、当該障害物占有情報と干渉判定対象部位の識別番号との間の桁ごとの論理和をロボット占有情報として記録する。次に、判断部427は、このように記録されたロボット占有情報に基づき干渉判定を行う。以上により、干渉判定結果には、常に、双腕ロボット3の干渉判定対象部位と障害物5間の干渉有無が反映されることとなる。しかも、障害物対応マス目は障害物占有情報で初期化されているので、障害物5の干渉有無を判定するために障害物5を干渉判定の対象として別途判定処理を行わなくて済む。障害物対応マス目のメモリ領域が障害物占有情報で初期化されたことをベースとして、双腕ロボット3の干渉判定対象部位に対する干渉判定処理を行えば、その干渉判定結果には、常に、双腕ロボット3の干渉判定対象部位と障害物5間の干渉有無が含まれることとなるからである。これにより、干渉判定処理を更に短時間で行うことが可能となる。
【0123】
また、本実施形態によれば、双腕ロボット3の動作における動作開始時刻と動作終了時刻との間の各時刻に対して干渉判定が行われる。これにより、動作中の全ての時刻において干渉が生じないことを判断した上で、安全に双腕ロボット3を動作させることができる。
【0124】
また、本実施形態では、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が、双腕ロボット3の干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することから、各情報が必要最小限の桁数を有することとなり、演算に無駄がなく、必要最小限のメモリ量を用いて演算を行うことができる。また、識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報が双腕ロボット3の干渉判定対象部位の数に障害物の数を足した数と同数の桁数を有することにより、例えば干渉判定対象部位や障害物5の数が増えた場合には、増えた箇所に関する干渉条件を設定した上で、増えた箇所の数だけ識別番号、干渉条件情報、障害物占有情報、およびロボット占有情報の桁数を増やして、本実施形態における干渉判定を行うことができる。このように、本実施形態によれば、干渉判定対象部位や障害物5の数が増えた場合に、柔軟な対応が可能である。また、「0」か「1」かの少ないデータ量で計算を行うことから、干渉判定対象部位や障害物5の数が増えたことに伴って、装置全体の計算量や計算時間が極端に増えることを防止できる。
【0125】
以上で説明した軌道生成部1および干渉判定部4は実際に双腕ロボット3を動作させる前に事前に干渉判定を行うシミュレーション装置としても利用することができる。つまり、図1に示した双腕ロボット3やサーボドライバ2a〜2dが実際には存在しない場合でも、これらの機械部分をパソコン上で擬似的に構成し、双腕ロボット3と障害物5との間の干渉判定をシミュレーションすることができる。
【0126】
[他の実施形態]
以上、本発明の好適な実施形態について説明したが、本発明が上記実施形態に限定されないことは言うまでもない。例えば、図示はしないが、干渉判定演算部42をマス目管理部424、メモリ領域初期化部425、占有情報記録部426、および判断部427のみを必須の構成要素とする簡素な構成としてもよい。
【0127】
この場合のマス目管理部424は、前述の通り、双腕ロボット3および障害物5の存在する空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する。また、メモリ領域初期化部425は、n1×n2のマス目のうち障害物5に対応するマス目である障害物対応マス目を特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録することにより、当該障害物対応マス目のメモリ領域を初期化する。ここで、障害物占有情報は、障害物5が障害物対応マス目を占有するか否かを示す情報である。また、占有情報記録部426は、n1×n2のマス目のうち双腕ロボット3の干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ここで、ロボット占有情報は、干渉判定対象部位がロボット対応マス目を占有するか否かを示す情報である。また、判断部427は、占有情報記録部426がロボット占有情報をロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に障害物占有情報が記録されている場合には、障害物5との間で干渉が生じると判断する。一方で、判断部427は、そのメモリ領域に既に双腕ロボット3の他の干渉判定対象部位のロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する。
【0128】
以上のような構成により、以下に示すような簡易的な干渉判定処理が可能となる。説明の便宜上、簡単な例として例えば、右腕(識別番号ID=100)、左腕(識別番号ID=010)、および障害物(識別番号ID=001)のみの干渉判定を行う場合を考える。この場合に、最初に、マス目管理部424が、双腕ロボット3および障害物5の存在空間を2次元平面上に投影した上で、その2次元平面をn1×n2のマス目に区切った判定領域を作成するとともに、そのn1×n2の個々のマス目に対応するメモリ領域を確保する。次に、メモリ領域初期化部425が、ID=001の障害物5が占有するマス目を障害物対応マス目として特定して、障害物占有情報を当該特定した障害物対応マス目のメモリ領域に記録する。障害物占有情報は、例えば「ID=001を示す旨の情報」である。なお、障害物非対応マス目には「0を表す情報」を記録しても良く、または何も記録しなくても良い。
【0129】
次に、占有情報記録部426が、ID=100の右腕が占有するマス目を特定し、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ロボット占有情報は、例えば「ID=100を示す旨の情報」である。この「ID=100を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=001を示す旨の情報」が書き込まれたメモリ領域に「ID=100を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=100の右腕とID=001の障害物5との間で「干渉が生じる」と判定する。一方で、「ID=100を示す旨の情報」を書き込むメモリ領域の何れにも「ID=001を示す旨の情報」が書き込まれていない場合には、ID=001の障害物5との間で「干渉しない」と判定する。
【0130】
更に、占有情報記録部426が、ID=010の左腕が占有するマス目を特定し、ロボット占有情報を当該特定したロボット対応マス目のメモリ領域に記録する。ロボット占有情報は、例えば「ID=010を示す旨の情報」である。この「ID=010を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=001を示す旨の情報」が書き込まれたメモリ領域に「ID=010を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=010の左腕とID=001の障害物5との間で「干渉が生じる」と判定する。一方で、「ID=010を示す旨の情報」を書き込むメモリ領域の何れにも「ID=001を示す旨の情報」が書き込まれていない場合には、ID=001の障害物5との間で「干渉しない」と判定する。また、「ID=010を示す旨の情報」の書き込み処理時に、占有情報記録部426が既に「ID=100を示す旨の情報」が書き込まれたメモリ領域に「ID=010を示す旨の情報」を書き込まなければならなくなった場合には、判断部427は、ID=010の左腕とID=100の右腕との間で「干渉が生じる」と判定する。一方で、「ID=010を示す旨の情報」を書き込むメモリ領域の何れにも「ID=100を示す旨の情報」が書き込まれていない場合には、ID=100の右腕との間で「干渉しない」と判定する。
【0131】
以上のような簡易的な干渉判定処理は、干渉判定対象部位が少なく、2次元平面上での動作(例えばアームの旋回動作)だけを考慮すれば良いロボットおよび障害物に対して特に有効である。すなわち、マス目を使って2次元平面上での干渉判定を行うため、3次元的な空間やモデルを用いて干渉判定を行う場合に比べて極めて少ないデータ量で計算ができ、干渉判定を高速化でき、双腕ロボット3の2次元方向の運動のみを考慮する(ロボットアームの昇降軸の動作や冶具の上昇下降がない)場合に特に有効である。
【符号の説明】
【0132】
100…双腕ロボットシステム、1…軌道生成部、11…記憶部、12…演算部、2a〜2d…サーボドライバ、3a〜3d…サーボモータ、3…双腕ロボット、31,32…水平多関節アーム、311…アーム31の第1軸、312…アーム31の第2軸、313…アーム31の昇降軸、321…アーム32の第1軸、322…アーム32の第2軸、323…アーム32の昇降軸、4…干渉判定部、41…格納部、411…諸元等格納部、412…干渉情報格納部、413…干渉条件情報格納部、42…干渉判定演算部、421…識別番号割当部、422…干渉情報生成部、423…干渉条件情報生成部、424…マス目管理部、425…メモリ領域初期化部、426…占有情報記録部、427…判断部、5…障害物、6…判定領域。
【特許請求の範囲】
【請求項1】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、
複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当てる識別番号割当手段と、
前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報を干渉情報として格納する干渉情報格納手段と、
前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報を、前記干渉判定対象部位ごとに格納する干渉条件情報格納手段と、
前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定してそのメモリ領域を初期化する手段であって、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する手段であって、当該特定したロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、
前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する判断手段と、
を備えることを特徴とする干渉判定装置。
【請求項2】
前記メモリ領域初期化手段は、前記n1×n2のマス目のうち前記障害物に対応しないマス目のメモリ領域に「0」を表す情報を記録することにより、該マス目のメモリ領域を初期化し、
前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域が前記「0」を表す情報により初期化されている場合には、前記ロボットの前記干渉判定対象部位の前記識別番号を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する、
ことを特徴とする請求項1に記載の干渉判定装置。
【請求項3】
前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合には、前記既存のロボット占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を新たなロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する、
ことを特徴とする請求項1または2に記載の干渉判定装置。
【請求項4】
前記干渉条件情報格納手段は、下記の数式(1)により計算される情報Ciを前記干渉条件情報として格納することを特徴とする請求項1〜3の何れか1項に記載の干渉判定装置。
【数1】
ただし、hは前記干渉判定対象部位の数に前記障害物の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の前記干渉判定対象部位の前記干渉条件情報であり、IDjはj番目の前記干渉判定対象部位または前記障害物の前記識別番号であり、tijはi番目の前記干渉判定対象部位とj番目の前記干渉判定対象部位または前記障害物における前記干渉情報である。
【請求項5】
前記ロボットの動作における動作開始時刻と動作終了時刻との間が一定時間間隔ごとに区切られ、当該区切られた各時刻における前記干渉判定対象部位の位置に対して、
前記占有情報記録手段は、前記各時刻における前記ロボット対応マス目を特定し、前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録し、
前記判断手段は、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する、
ことを特徴とする請求項1〜4の何れか1項に記載の干渉判定装置。
【請求項6】
前記ロボットは、水平多関節アームを有する双腕ロボットである、
ことを特徴とする請求項1〜5の何れか1項に記載の干渉判定装置。
【請求項7】
前記識別番号、前記干渉条件情報、前記障害物占有情報、および前記ロボット占有情報は、前記ロボットの前記干渉判定対象部位の数に前記障害物の数を足した数と同数の前記複数の桁数を有する情報である、
ことを特徴とする請求項1〜6の何れか1項に記載の干渉判定装置。
【請求項8】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、
前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定して、前記障害物が前記障害物対応マス目を占有するか否かを示す障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記干渉判定対象部位が前記ロボット対応マス目を占有するか否かを示すロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、
前記占有情報記録手段が前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に前記障害物占有情報が記録されている場合には、前記障害物との間で干渉が生じると判断し、そのメモリ領域に既に前記ロボットの他の干渉判定対象部位の前記ロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する判断手段と、
を備えることを特徴とする干渉判定装置。
【請求項9】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定方法であって、
複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当て、
前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報が干渉情報として格納され、
前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報が、前記干渉判定対象部位ごとに格納され、
前記ロボットおよび前記障害物の存在する空間が2次元平面上に投影された上で、前記2次元平面がn1×n2のマス目に区切られるとともに、前記n1×n2のマス目それぞれに対応するメモリ領域が確保され、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目が特定されそのメモリ領域が初期化されるステップにおいて、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報が前記障害物対応マス目のメモリ領域に記録されることにより、前記障害物対応マス目のメモリ領域が初期化され、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目が特定され、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報が前記ロボット対応マス目のメモリ領域に記録されるステップにおいて、当該特定されたロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和が前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録され、
前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積が前記ロボット対応マス目ごとに求められ、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断され、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断される、
ことを特徴とする干渉判定方法。
【請求項1】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、
複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当てる識別番号割当手段と、
前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報を干渉情報として格納する干渉情報格納手段と、
前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報を、前記干渉判定対象部位ごとに格納する干渉条件情報格納手段と、
前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定してそのメモリ領域を初期化する手段であって、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する手段であって、当該特定したロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、
前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する判断手段と、
を備えることを特徴とする干渉判定装置。
【請求項2】
前記メモリ領域初期化手段は、前記n1×n2のマス目のうち前記障害物に対応しないマス目のメモリ領域に「0」を表す情報を記録することにより、該マス目のメモリ領域を初期化し、
前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域が前記「0」を表す情報により初期化されている場合には、前記ロボットの前記干渉判定対象部位の前記識別番号を前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する、
ことを特徴とする請求項1に記載の干渉判定装置。
【請求項3】
前記占有情報記録手段は、前記ロボット対応マス目のメモリ領域に既存のロボット占有情報が記録されている場合には、前記既存のロボット占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和を新たなロボット占有情報として前記ロボット対応マス目のメモリ領域に記録する、
ことを特徴とする請求項1または2に記載の干渉判定装置。
【請求項4】
前記干渉条件情報格納手段は、下記の数式(1)により計算される情報Ciを前記干渉条件情報として格納することを特徴とする請求項1〜3の何れか1項に記載の干渉判定装置。
【数1】
ただし、hは前記干渉判定対象部位の数に前記障害物の数を足した数であり、iおよびjは1以上h以下の自然数であり、Ciはi番目の前記干渉判定対象部位の前記干渉条件情報であり、IDjはj番目の前記干渉判定対象部位または前記障害物の前記識別番号であり、tijはi番目の前記干渉判定対象部位とj番目の前記干渉判定対象部位または前記障害物における前記干渉情報である。
【請求項5】
前記ロボットの動作における動作開始時刻と動作終了時刻との間が一定時間間隔ごとに区切られ、当該区切られた各時刻における前記干渉判定対象部位の位置に対して、
前記占有情報記録手段は、前記各時刻における前記ロボット対応マス目を特定し、前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録し、
前記判断手段は、前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積を前記ロボット対応マス目ごとに求め、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断し、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断する、
ことを特徴とする請求項1〜4の何れか1項に記載の干渉判定装置。
【請求項6】
前記ロボットは、水平多関節アームを有する双腕ロボットである、
ことを特徴とする請求項1〜5の何れか1項に記載の干渉判定装置。
【請求項7】
前記識別番号、前記干渉条件情報、前記障害物占有情報、および前記ロボット占有情報は、前記ロボットの前記干渉判定対象部位の数に前記障害物の数を足した数と同数の前記複数の桁数を有する情報である、
ことを特徴とする請求項1〜6の何れか1項に記載の干渉判定装置。
【請求項8】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定装置であって、
前記ロボットおよび前記障害物の存在する空間を2次元平面上に投影した上で、前記2次元平面をn1×n2のマス目に区切るとともに、前記n1×n2のマス目それぞれに対応するメモリ領域を確保するマス目管理手段と、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目を特定して、前記障害物が前記障害物対応マス目を占有するか否かを示す障害物占有情報を前記障害物対応マス目のメモリ領域に記録することにより、前記障害物対応マス目のメモリ領域を初期化するメモリ領域初期化手段と、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目を特定して、前記干渉判定対象部位が前記ロボット対応マス目を占有するか否かを示すロボット占有情報を前記ロボット対応マス目のメモリ領域に記録する占有情報記録手段と、
前記占有情報記録手段が前記ロボット占有情報を前記ロボット対応マス目のメモリ領域に記録するときに、そのメモリ領域に既に前記障害物占有情報が記録されている場合には、前記障害物との間で干渉が生じると判断し、そのメモリ領域に既に前記ロボットの他の干渉判定対象部位の前記ロボット占有情報が記録されている場合には、当該他の干渉判定対象部位との間で干渉が生じると判断する判断手段と、
を備えることを特徴とする干渉判定装置。
【請求項9】
3次元で動作するロボットの干渉判定対象部位同士、および前記ロボットと障害物との間の干渉判定を行う干渉判定方法であって、
複数の桁数を有し且つ他の識別番号との間で桁ごとの論理積を計算すると全ての桁が「0」となるように設定された識別番号を、前記ロボットの前記干渉判定対象部位および前記障害物に割り当て、
前記ロボットの前記干渉判定対象部位が前記ロボットの他の部位および前記障害物との間で立体交差する際に干渉を伴わない場合には「0」、立体交差する際に干渉を伴う場合には「1」を表す情報が干渉情報として格納され、
前記干渉情報に基づき設定され、前記複数の桁数を有し、前記干渉判定対象部位が前記他の部位および前記障害物との間で立体交差する際に干渉を伴うか否かを表す情報である干渉条件情報が、前記干渉判定対象部位ごとに格納され、
前記ロボットおよび前記障害物の存在する空間が2次元平面上に投影された上で、前記2次元平面がn1×n2のマス目に区切られるとともに、前記n1×n2のマス目それぞれに対応するメモリ領域が確保され、
前記n1×n2のマス目のうち前記障害物に対応するマス目である障害物対応マス目が特定されそのメモリ領域が初期化されるステップにおいて、前記障害物の前記識別番号に基づく情報であり前記複数の桁数を有する障害物占有情報が前記障害物対応マス目のメモリ領域に記録されることにより、前記障害物対応マス目のメモリ領域が初期化され、
前記n1×n2のマス目のうち前記ロボットの前記干渉判定対象部位に対応するマス目であるロボット対応マス目が特定され、前記ロボットの前記干渉判定対象部位の前記識別番号に基づく情報であり前記複数の桁数を有するロボット占有情報が前記ロボット対応マス目のメモリ領域に記録されるステップにおいて、当該特定されたロボット対応マス目のメモリ領域に前記障害物占有情報が記録されている場合に、前記障害物占有情報と前記干渉判定対象部位の前記識別番号との間の桁ごとの論理和が前記ロボット占有情報として前記ロボット対応マス目のメモリ領域に記録され、
前記ロボット占有情報および前記干渉条件情報における桁ごとの論理積が前記ロボット対応マス目ごとに求められ、前記論理積の結果が全ての桁において「0」であれば前記ロボットの前記干渉判定対象部位同士、および前記ロボットと前記障害物との間で干渉は生じないと判断され、前記論理積の結果が少なくとも一つの桁において「1」であれば前記ロボットの前記干渉判定対象部位同士、または前記ロボットと前記障害物との間で干渉が生じると判断される、
ことを特徴とする干渉判定方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2012−61582(P2012−61582A)
【公開日】平成24年3月29日(2012.3.29)
【国際特許分類】
【出願番号】特願2010−209602(P2010−209602)
【出願日】平成22年9月17日(2010.9.17)
【出願人】(000227467)日東精工株式会社 (263)
【Fターム(参考)】
【公開日】平成24年3月29日(2012.3.29)
【国際特許分類】
【出願日】平成22年9月17日(2010.9.17)
【出願人】(000227467)日東精工株式会社 (263)
【Fターム(参考)】
[ Back to top ]