(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-08
(45)【発行日】2022-08-17
(54)【発明の名称】多関節ロボットの干渉判定装置、多関節ロボットの干渉判定方法、多関節ロボットの干渉判定プログラム、及び経路計画生成装置
(51)【国際特許分類】
B25J 19/06 20060101AFI20220809BHJP
【FI】
B25J19/06
(21)【出願番号】P 2018093928
(22)【出願日】2018-05-15
【審査請求日】2020-12-14
(73)【特許権者】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001519
【氏名又は名称】特許業務法人太陽国際特許事務所
(72)【発明者】
【氏名】藤井 春香
(72)【発明者】
【氏名】森谷 俊洋
(72)【発明者】
【氏名】小島 岳史
(72)【発明者】
【氏名】殿谷 徳和
【審査官】杉田 隼一
(56)【参考文献】
【文献】特開平09-190207(JP,A)
【文献】特開平04-280304(JP,A)
【文献】特開平03-098786(JP,A)
【文献】特開昭62-120995(JP,A)
【文献】特開平03-131494(JP,A)
【文献】特開平09-251308(JP,A)
【文献】長谷川 勉,自由空間分類表現法によるマニピュレータの衝突回避動作の計画,計測自動制御学会論文集,Vol22,N06,20-26
(58)【調査した分野】(Int.Cl.,DB名)
B25J 19/06
(57)【特許請求の範囲】
【請求項1】
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部と、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部と、
を含み、
前記領域情報は、前記干渉領域及び前記非干渉領域の何れにも属さない領域として詳細判定領域を表す情報を含む
多関節ロボットの干渉判定装置。
【請求項2】
前記干渉が、前記多関節ロボットが自己に干渉する自己干渉であり、かつ、前記座標が前記詳細判定領域に属する場合、前記判定部は、前記多関節ロボットを構成する複数のリンクの形状に基づいて前記自己干渉が発生するか否かを判定する
請求項1記載の多関節ロボットの干渉判定装置。
【請求項3】
前記多関節ロボットを構成する複数のリンクの形状及び前記複数のリンクを接続する複数の関節の可動域に基づいて前記領域情報を算出する算出部
を備えた請求項1又は請求項2記載の多関節ロボットの干渉判定装置。
【請求項4】
前記算出部は、前記干渉領域の輪郭に収まるように前記干渉領域の形状を簡易化する
請求項3記載の多関節ロボットの干渉判定装置。
【請求項5】
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部と、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部と、
前記多関節ロボットを構成する複数のリンクの形状及び前記複数のリンクを接続する複数の関節の可動域に基づいて前記領域情報を算出する算出部と、
を含み、
前記算出部は、前記多関節ロボットの根元側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第1の領域情報と、前記多関節ロボットの手先側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第2の領域情報と、を算出し、
前記取得部は、前記算出部により算出された前記第1の領域情報及び前記第2の領域情報を取得し、
前記判定部は、前記根元側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第1の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定し、前記手先側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第2の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する
多関節ロボットの干渉判定装置。
【請求項6】
前記算出部は、前記第1の領域情報のうち前記非干渉領域を表す情報を算出する場合、前記手先側のリンクの形状及び前記手先側の関節の可動域に基づいて最大可動域を算出し、算出した最大可動域と前記根元側の複数のリンクの形状とに基づいて、前記非干渉領域を表す情報を算出する
請求項
5記載の多関節ロボットの干渉判定装置。
【請求項7】
前記干渉が、前記多関節ロボットが障害物に対して干渉する障害物干渉であり、
前記算出部は、前記多関節ロボットが前記障害物に対して干渉する対障害物干渉領域と、前記多関節ロボットが前記障害物に対して干渉しない対障害物非干渉領域と、を表す領域情報を算出する
請求項3~請求項
5の何れか1項に記載の多関節ロボットの干渉判定装置。
【請求項8】
コンピュータが、
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得工程と、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得工程により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉が発生するか否かを判定する判定工程と、
を含む処理を実行し、
前記領域情報は、前記干渉領域及び前記非干渉領域の何れにも属さない領域として詳細判定領域を表す情報を含む
多関節ロボットの干渉判定方法。
【請求項9】
コンピュータが、
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得工程と、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得工程により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定工程と、
前記多関節ロボットを構成する複数のリンクの形状及び前記複数のリンクを接続する複数の関節の可動域に基づいて前記領域情報を算出する算出工程と、
を含む処理を実行し、
前記算出工程は、前記多関節ロボットの根元側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第1の領域情報と、前記多関節ロボットの手先側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第2の領域情報と、を算出し、
前記取得工程は、前記算出工程により算出された前記第1の領域情報及び前記第2の領域情報を取得し、
前記判定工程は、前記根元側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得工程により取得された前記第1の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定し、前記手先側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得工程により取得された前記第2の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する
多関節ロボットの干渉判定方法。
【請求項10】
コンピュータを、
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部、及び、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部
として機能させ、
前記領域情報は、前記干渉領域及び前記非干渉領域の何れにも属さない領域として詳細判定領域を表す情報を含む
多関節ロボットの干渉判定プログラム。
【請求項11】
コンピュータを、
多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部、
前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部、及び、
前記多関節ロボットを構成する複数のリンクの形状及び前記複数のリンクを接続する複数の関節の可動域に基づいて前記領域情報を算出する算出部
として機能させ、
前記算出部は、前記多関節ロボットの根元側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第1の領域情報と、前記多関節ロボットの手先側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第2の領域情報と、を算出し、
前記取得部は、前記算出部により算出された前記第1の領域情報及び前記第2の領域情報を取得し、
前記判定部は、前記根元側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第1の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定し、前記手先側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第2の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する
多関節ロボットの干渉判定プログラム。
【請求項12】
多関節ロボットを初期姿勢から目標姿勢まで動作させる場合に、前記多関節ロボットが自己又は障害物に対して干渉しない姿勢を探索することで経路計画を生成する経路探索装置と、
前記経路探索装置により探索された姿勢における前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する請求項1~
7の何れか1項に記載の干渉判定装置と、
を含む経路計画生成装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、多関節ロボットの干渉判定装置、多関節ロボットの干渉判定方法、多関節ロボットの干渉判定プログラム、及び経路計画生成装置に関する。
【背景技術】
【0002】
従来、ロボットの自己干渉を考慮して経路計画を作成する技術が提案されている(例えば特許文献1、2参照)。
【0003】
ロボットの自己干渉を判定する場合、従来ではロボットを構成する複数のリンクの組み合わせの各々について網羅的に判定していた。例えばリンク数をn個とした場合、リンクの形状等にもよるが、自己干渉を判定すべきリンクの組み合わせはnC2-(n-1)通りとなる。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2011-131303号公報
【文献】特開2008-30136号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
例えば関節が6個の6自由度の多関節ロボットの場合、
図24に示すように、エンドエフェクタEEも含めると少なくともリンクの数は8個となり、自己干渉を判定すべきリンクの組み合わせは最低でも21通りとなる。また、リンク数が増加した場合は、自己干渉を判定すべきリンクの組み合わせは大きく増加する。これにより、自己干渉の判定に要する時間が増加すると共に、ロボットの経路計画の作成に要する時間も増加する。また、エンドユーザーにおいては、ロボットが動作開始するまでの時間が増加すると共に、タクトタイムが増加する、という問題があった。
【0006】
本発明は、上記の点に鑑みてなされたものであり、多関節ロボットの干渉判定に要する時間を短縮することができる多関節ロボットの干渉判定装置、多関節ロボットの干渉判定方法、多関節ロボットの干渉判定プログラム、及び経路計画生成装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係る多関節ロボットの干渉判定装置は、多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部と、前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部と、を含む。
【0008】
また、前記領域情報は、前記干渉領域及び前記非干渉領域の何れにも属さない領域として詳細判定領域を表す情報を含むようにしてもよい。
【0009】
また、前記干渉が、前記多関節ロボットが自己に干渉する自己干渉であり、かつ、前記座標が前記詳細判定領域に属する場合、前記判定部は、前記多関節ロボットを構成する複数のリンクの形状に基づいて前記自己干渉が発生するか否かを判定するようにしてもよい。
【0010】
また、前記多関節ロボットを構成する複数のリンクの形状及び前記複数のリンクを接続する複数の関節の可動域に基づいて前記領域情報を算出する算出部を備えてもよい。
【0011】
また、前記算出部は、前記干渉領域の輪郭に収まるように前記干渉領域の形状を簡易化するようにしてもよい。
【0012】
また、前記算出部は、前記非干渉領域の輪郭に収まるように前記干渉領域の形状を簡易化するようにしてもよい。
【0013】
また、前記算出部は、前記多関節ロボットの根元側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第1の領域情報と、前記多関節ロボットの手先側の2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される前記干渉領域及び前記非干渉領域を表す第2の領域情報と、を算出し、前記取得部は、前記算出部により算出された前記第1の領域情報及び前記第2の領域情報を取得し、前記判定部は、前記根元側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第1の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定し、前記手先側の2つ又は3つの特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記第2の領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定するようにしてもよい。
【0014】
また、前記算出部は、前記第1の領域情報のうち前記非干渉領域を表す情報を算出する場合、前記手先側のリンクの形状及び前記手先側の関節の可動域に基づいて最大可動域を算出し、算出した最大可動域と前記根元側の複数のリンクの形状とに基づいて、前記非干渉領域を表す情報を算出するようにしてもよい。
【0015】
また、前記干渉が、前記多関節ロボットが障害物に対して干渉する障害物干渉であり、前記算出部は、前記多関節ロボットが前記障害物に対して干渉する対障害物干渉領域と、前記多関節ロボットが前記障害物に対して干渉しない対障害物非干渉領域と、を表す領域情報を算出するようにしてもよい。
【0016】
本発明に係る多関節ロボットの干渉判定方法は、コンピュータが、多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得工程と、前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得工程により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉が発生するか否かを判定する判定工程と、を含む処理を実行する方法である。
【0017】
本発明に係る多関節ロボットの干渉判定プログラムは、コンピュータを、多関節ロボットの2つ又は3つの特定の関節の回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、前記多関節ロボットが自己又は障害物に対して干渉する領域として、前記特定の関節の回転角度の大きさに基づいて定められた干渉領域と、前記多関節ロボットが自己又は障害物に対して干渉しない領域として、前記特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す領域情報を取得する取得部、及び、前記特定の関節の回転角度によって定まる姿勢を表す座標が、前記取得部により取得された前記領域情報により表される前記干渉領域及び前記非干渉領域の何れに属するかを判定することにより、前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する判定部として機能させるためのプログラムである。
【0018】
本発明に係る経路計画生成装置は、多関節ロボットを初期姿勢から目標姿勢まで動作させる場合に、前記多関節ロボットが自己又は障害物に対して干渉しない姿勢を探索することで経路計画を生成する経路探索装置と、前記経路探索装置により探索された姿勢における前記多関節ロボットが自己又は障害物に対して干渉するか否かを判定する上記記載の干渉判定装置と、を含む。
【発明の効果】
【0019】
本発明によれば、多関節ロボットの干渉判定に要する時間を短縮することができる。
【図面の簡単な説明】
【0020】
【
図1】第1実施形態に係る干渉判定装置のハードウェア構成を示すブロック図である。
【
図2】垂直多関節ロボットの一例を示す斜視図である。
【
図3】干渉判定装置の機能構成の例を示すブロック図である。
【
図4】領域情報算出処理のメインルーチンの流れを示すフローチャートである。
【
図5】領域情報算出処理のサブルーチンの流れを示すフローチャートである。
【
図6】領域情報算出処理のサブルーチンの流れを示すフローチャートである。
【
図7】領域情報算出処理のサブルーチンの流れを示すフローチャートである。
【
図8】領域情報算出処理のサブルーチンの流れを示すフローチャートである。
【
図9】コンフィグレーション空間における自己干渉領域及び自己非干渉領域の一例を示す図である。
【
図10】エッジ削減処理について説明するための図である。
【
図14】根元側の自己干渉の具体例を示す図である。
【
図15】手先側のリンクの最大可動域について説明するための図である。
【
図16】手先側のリンクの最大可動域をリンクと見なした場合の垂直多関節ロボットの一例を示す図である。
【
図17】詳細判定領域について説明するための図である。
【
図18】手先側の自己干渉領域及び自己非干渉領域の具体例を示す図である。
【
図19】干渉判定処理のメインルーチンの流れを示すフローチャートである。
【
図20】根元側のジョイントの3次元のコンフィグレーション空間の自己干渉領域及び自己非干渉領域の一例を示す図である。
【
図21】手先側のジョイントの3次元のコンフィグレーション空間の自己干渉領域及び自己非干渉領域の一例を示す図である。
【
図22】障害物の3次元モデルの一例を示す図である。
【
図23】障害物及び垂直多関節ロボットの3次元モデルの一例を示す図である。
【
図24】自己干渉を判定すべき組み合わせについて説明するための図である。
【発明を実施するための形態】
【0021】
以下、本発明の実施形態の一例を、図面を参照しつつ説明する。なお、各図面において同一又は等価な構成要素及び部分には同一の参照符号を付与している。また、図面の寸法比率は、説明の都合上誇張されている場合があり、実際の比率とは異なる場合がある。
【0022】
(第1実施形態)
【0023】
図1は、第1実施形態に係る多関節ロボットの干渉判定装置(以下、単に干渉判定装置と称する)10のハードウェア構成を示すブロック図である。
【0024】
本実施形態の干渉判定装置10は、対象となる多関節ロボットの自己干渉を判定する。多関節ロボットとしては、例えば、垂直多関節ロボット、水平多関節ロボット(スカラーロボット)、及びパラレルリンクロボット等がある。本実施形態では、一例として垂直多関節ロボットの自己干渉を判定する場合について説明する。
【0025】
図1に示すように、干渉判定装置10は、CPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13、ストレージ14、入力部15、モニタ16、光ディスク駆動装置17、及び通信インタフェース18を有する。各構成は、バス19を介して相互に通信可能に接続されている。
【0026】
本実施形態では、ROM12又はストレージ14には、自己干渉判定を実行する自己干渉判定プログラムが格納されている。CPU11は、中央演算処理ユニットであり、各種プログラムを実行したり、各構成を制御したりする。すなわち、CPU11は、ROM12又はストレージ14からプログラムを読み出し、RAM13を作業領域としてプログラムを実行する。CPU11は、ROM12又はストレージ14に記録されているプログラムに従って、上記各構成の制御及び各種の演算処理を行う。
【0027】
ROM12は、各種プログラム及び各種データを格納する。RAM13は、作業領域として一時的にプログラム又はデータを記憶する。ストレージ14は、HDD(Hard Disk Drive)又はSSD(Solid State Drive)により構成され、オペレーティングシステムを含む各種プログラム、及び各種データを格納する。
【0028】
入力部15は、キーボード151、及びマウス152等のポインティングデバイスを含み、各種の入力を行うために使用される。モニタ16は、例えば、液晶ディスプレイであり、各種の情報を表示する。モニタ16は、タッチパネル方式を採用して、入力部15として機能してもよい。光ディスク駆動装置17は、各種の記録媒体(CD-ROM又はブルーレイディスクなど)に記憶されたデータの読み込みや、記録媒体に対するデータの書き込み等を行う。
【0029】
通信インタフェース18は、他の機器と通信するためのインタフェースであり、例えば、イーサネット(登録商標)、FDDI又はWi-Fi(登録商標)等の規格が用いられる。
【0030】
次に、垂直多関節ロボットについて説明する。
【0031】
図2は、垂直多関節ロボットLBの構成を示す図である。
図2に示すように、垂直多関節ロボットLBは、ベースリンクBL、リンクL1~L6、ジョイントJ1~J6を備えた6自由度の6軸ロボットである。なお、ジョイントとは、リンク同士を接続する関節である。
【0032】
ベースリンクBLとリンクL1とは、
図2において鉛直軸S1を中心として矢印C1方向に回転するジョイントJ1を介して接続されている。従って、リンクL1は、ベースリンクBLを支点として矢印C1方向に回転する。
【0033】
リンクL1とリンクL2とは、
図2において水平軸S2を中心として矢印C2方向に回転するジョイントJ2を介して接続されている。従って、リンクL2は、リンクL1を支点として矢印C2方向に回転する。
【0034】
リンクL2とリンクL3とは、
図2において軸S3を中心として矢印C3方向に回転するジョイントJ3を介して接続されている。従って、リンクL3は、リンクL2を支点として矢印C3方向に回転する。
【0035】
リンクL3とリンクL4とは、
図2において軸S4を中心として矢印C4方向に回転するジョイントJ4を介して接続されている。従って、リンクL4は、リンクL3を支点として矢印C4方向に回転する。
【0036】
リンクL4とリンクL5とは、
図2において軸S5を中心として矢印C5方向に回転するジョイントJ5を介して接続されている。従って、リンクL5は、リンクL4を支点として矢印C5方向に回転する。
【0037】
リンクL5とリンクL6とは、
図2において軸S6を中心として矢印C6方向に回転するジョイントJ6を介して接続されている。従って、リンクL6は、リンクL5を支点として矢印C6方向に回転する。
【0038】
ジョイントJ1~J6は、予め定めた回転角度の範囲が可動域として各々設定されている。
【0039】
多関節ロボットLBの姿勢は、ジョイントJ1~J6の各々の回転角度によって定まる。すなわち、垂直多関節ロボットLBのリンクの自由度を表すパラメータをジョイントJ1~J6の回転角度θ1~θ6とし、回転角度θ1~θ6を座標軸の値とした場合、垂直多関節ロボットLBの姿勢は、コンフィグレーション空間上の座標、すなわち点として表すことができる。ここで、コンフィグレーション空間とは、回転角度θ1~θ6のうち、少なくとも2つを座標軸とした座標系を表す空間である。
【0040】
次に、干渉判定装置10の機能構成について説明する。
【0041】
図3は、干渉判定装置10の機能構成の例を示すブロック図である。
【0042】
図3に示すように、干渉判定装置10は、機能構成として、算出部101、取得部102、判定部103、及び記憶部104を有する。各機能構成は、CPU11がROM12又はストレージ14に記憶された自己干渉判定プログラムを読み出し、RAM13に展開して実行することにより実現される。
【0043】
算出部101は、垂直多関節ロボットLBを構成するリンクL1~L6の形状及びリンクL1~L6を接続するジョイントJ1~J6の可動域に基づいて領域情報を算出する。
【0044】
領域情報は、垂直多関節ロボットLBの2つ又は3つの特定のジョイントの回転角度を座標軸とするコンフィグレーション空間内に設定される領域であり、垂直多関節ロボットLBが自己干渉する領域として、特定のジョイントの回転角度の大きさに基づいて定められた干渉領域と、垂直多関節ロボットLBが自己干渉しない非干渉領域として、特定の関節の回転角度の大きさに基づいて定められた非干渉領域と、を表す情報である。
【0045】
ここで、自己干渉領域とは、垂直多関節ロボットLBが必ず自己干渉する領域として定めた領域であり、特定のジョイント以外のジョイントの回転角度に関係なく必ず自己干渉する領域として定めた領域である。また、干渉とは、リンク同士が物理的に接触すること又はリンクとエンドエフェクタとが物理的に接触することをいう。
【0046】
また、自己非干渉領域とは、垂直多関節ロボットLBが必ず自己干渉しない領域として定めた領域であり、特定のジョイント以外のジョイントの回転角度に関係なく必ず非干渉となる領域として定めた領域である。また、領域情報は、自己干渉領域及び自己非干渉領域の何れにも属さない領域として詳細判定領域を表す情報を含む。ここで、詳細判定領域とは、自己干渉するか否かを3次元の実空間に配置されたリンクの形状に基づいて具体的に判定する必要がある領域である。
【0047】
なお、本実施形態では、自己干渉領域が、垂直多関節ロボットLBが必ず自己干渉する領域である場合について説明するが、自己干渉領域は、必ず自己干渉する領域でなくてもよい。例えば、自己干渉領域の予め定めた閾値以上の領域、例えば90%以上の領域で垂直多関節ロボットLBが自己干渉する領域を自己干渉領域としてもよい。これに対し自己非干渉領域は、垂直多関節ロボットLBが必ず自己干渉しない領域でなければならない。これは、実際は自己干渉する姿勢が自己非干渉領域に含まれていた場合において、自己非干渉と判定されたとしても、実際は自己干渉する虞があるためである。従って、自己非干渉領域は、垂直多関節ロボットLBが必ず自己干渉しない領域でなければならない。
【0048】
一方、実際は自己非干渉となる姿勢が自己干渉領域に含まれていた場合において、自己干渉と判定されたとしても、単に垂直多関節ロボットLBがその姿勢を取れないだけである。このため、垂直多関節ロボットLBの動作に制限はでるものの、自己干渉することは無い。従って、実際は自己非干渉となる姿勢が自己干渉領域に含まれていても特に問題は無い。
【0049】
垂直多関節ロボットLBの根元側の相互に隣接するJ1~J3が垂直多関節ロボットLBの手先の位置を定めるのに寄与し、垂直多関節ロボットLBの手先側の相互に隣接するジョイントJ4~J6が手先の姿勢を定めるのに寄与するため、根元側のジョイントJ1~J3と、手先側のジョイントJ4~J6とに分けて自己干渉を判定する。
【0050】
特定のジョイントは、自己干渉領域及び自己非干渉領域を算出するのに適したジョイントが予め選択される。どのジョイントが自己干渉領域及び自己非干渉領域を算出するのに適しているかは、各リンクの形状及び各ジョイントの可動域に基づいて決定される。
【0051】
例えば本実施形態では、根元側のジョイントJ1~J3のうち、ジョイントJ1に接続されたリンクL1はS1軸を中心として旋回運動する。この旋回運動を考えると、自己干渉するか否かはジョイントJ1以外のジョイントJ2~J6の回転角度に大きく依存する。従って、ジョイントJ1を特定のジョイントとした場合、ジョイントJ2、J3を特定のジョイントとする場合と比較して、自己干渉領域及び自己非干渉領域の何れにも属さない詳細判定領域が広くなる。詳細判定領域は、後述の通り、3次元モデルに基づいて自己干渉を判定しなくてはならない領域であるため、詳細判定領域が広い程、自己干渉の判定に時間がかかることとなる。従って、ジョイントJ1を特定のジョイントとすることは、ジョイントJ2、J3を特定のジョイントとする場合と比較して、自己干渉領域及び自己非干渉領域を算出するのに適していない。このように、根元側のジョイントJ1~J3について、任意の一つ又は任意の組み合わせを特定のジョイントと仮定し、仮定したそれぞれの場合における詳細判定領域の大きさを比較して、最も詳細判定領域が小さくなる場合のジョイントが特定のジョイントとして決定される。なお、3次元モデルとは、3次元空間に配置された垂直多関節ロボットLBの各リンクの形状を表すモデルである。
【0052】
また、手先側のジョイントJ4~J6からも、根元側のジョイントJ1~J3と同様に、特定のジョイントが決定される。例えば、ジョイントJ6に接続されるエンドエフェクタはS6軸を中心として旋回運動する。この旋回運動を考えると、自己干渉するか否かはジョイントJ6以外のジョイントJ1~J5の回転角度に大きく依存する。従って、ジョイントJ6を特定のジョイントとした場合、ジョイントJ4、J5を特定のジョイントとする場合と比較して、自己干渉領域及び自己非干渉領域の何れにも属さない詳細判定領域が広くなる。このため、自己干渉の判定に時間がかかることとなる。従って、ジョイントJ6を特定のジョイントとすることは、ジョイントJ4、J5を特定のジョイントとする場合と比較して、自己干渉領域及び自己非干渉領域を算出するのに適していない。
【0053】
本実施形態では、一例として、垂直多関節ロボットLBの根元側のジョイントJ1~J3のうちジョイントJ2、J3を特定のジョイントとすると共に、垂直多関節ロボットLBの手先側のジョイントJ4~J6のうちジョイントJ4、J5を特定のジョイントとした場合について説明する。
【0054】
取得部102は、算出部101が算出した領域情報を取得する。なお、算出部101が算出した領域情報ではなく、外部装置によって算出された領域情報を取得するようにしてもよい。
【0055】
判定部103は、特定のジョイントの回転角度によって定まる姿勢を表す座標が、取得部102により取得された領域情報により表される自己干渉領域及び自己非干渉領域の何れに属するかを判定することにより、垂直多関節ロボットLBが自己に干渉するか否かを判定する。
【0056】
記憶部104は、後述する領域情報算出プログラム、自己干渉判定プログラム、算出部101により算出された領域情報、垂直多関節ロボットLBのベースリンクBL及びリンクL1~L6の形状データ、ジョイントJ1~J6の可動域に関する情報、ジョイントJ6に接続されるエンドエフェクタの形状データ、エンドエフェクタの処理対象であるワークの形状データ等を記憶する。
【0057】
干渉判定装置10は、経路探索装置20と接続されている。垂直多関節ロボットLBの経路計画は、垂直多関節ロボットLBを初期姿勢から目標姿勢まで動作させる場合の姿勢のリストである。経路計画を生成する際には、経路探索装置20により探索された姿勢が自己干渉するか否かを干渉判定装置10で判定する。
【0058】
経路探索装置20は、現在の姿勢から垂直多関節ロボットLBを動かす量及び方向を決定し、次の姿勢を探索する。干渉判定装置10は、経路探索装置20により探索された姿勢が自己干渉するか否かを判定し、判定結果を経路探索装置20に通知する。経路探索装置20では、探索した姿勢が自己干渉しないと判定された場合は、その姿勢を姿勢のリストに加える。一方、自己干渉すると判定された場合は、別の姿勢を探索し、干渉判定装置10に自己干渉判定を依頼する。このように経路探索装置20による経路探索処理と干渉判定装置10による干渉判定処理が繰り返されることにより経路計画が生成される。
【0059】
次に、干渉判定装置10の作用について説明する。
【0060】
図4は、干渉判定装置10のCPU11により実行される領域情報算出処理の流れを示すフローチャートである。CPU11がROM12又はストレージ14から領域情報算出プログラムを読み出して、RAM13に展開し実行することにより、領域情報算出処理が実行される。領域情報算出処理は、垂直多関節ロボットLBの経路計画を生成する際に実行される干渉判定処理に先立って実行される処理である。
【0061】
CPU11は、算出部101として、ジョイントJ2、J3のコンフィグレーション空間における自己干渉領域を算出する(ステップS100)。具体的には、
図5に示す自己干渉領域算出処理を実行してジョイントJ2、J3の自己干渉領域を算出する。
図5の自己干渉領域算出処理については後述する。
【0062】
CPU11は、算出部101として、ジョイントJ2、J3のコンフィグレーション空間における自己非干渉領域を算出する(ステップS102)。具体的には、
図6に示す自己非干渉領域算出処理を実行してジョイントJ2、J3の自己非干渉領域を算出する。
図6の自己非干渉領域算出処理については後述する。なお、ステップS100で算出される自己干渉領域の情報及びステップS102で算出される自己非干渉領域の情報は、本発明における第1の領域情報の一例である。
【0063】
CPU11は、算出部101として、ジョイントJ4、J5のコンフィグレーション空間における自己干渉領域を算出する(ステップS104)。具体的には、
図7に示す自己干渉領域算出処理を実行してジョイントJ4、J5の自己干渉領域を算出する。
図7の自己干渉領域算出処理については後述する。
【0064】
CPU11は、算出部101として、ジョイントJ4、J5のコンフィグレーション空間における自己非干渉領域を算出する(ステップS106)。具体的には、
図8に示す自己非干渉領域算出処理を実行してジョイントJ4、J5の自己非干渉領域を算出する。
図8の自己非干渉領域算出処理については後述する。なお、ステップS104で算出される自己干渉領域の情報及びステップS106で算出される自己非干渉領域の情報は、本発明における第2の領域情報の一例である。
【0065】
CPU11は、ステップS100で算出したジョイントJ2、J3のコンフィグレーション空間における自己干渉領域を表す情報と、ステップS102で算出したジョイントJ2、J3のコンフィグレーション空間における自己非干渉領域を表す情報と、ステップS104で算出したジョイントJ4、J5のコンフィグレーション空間における自己干渉領域を表す情報と、ステップS106で算出したジョイントJ4、J5のコンフィグレーション空間における自己非干渉領域を表す情報と、を領域情報としてストレージ14に記憶する(ステップS108)。
【0066】
次に、
図5を参照して、ジョイントJ2、J3の自己干渉領域を算出する処理について説明する。
【0067】
CPU11は、ジョイントJ1~J6の各々について、可動域を等間隔で予め定めた数(例えば100個)に分割してジョイント値を生成する(ステップS200)。なお、予め定めた角度(例えば1度)で可動域を分割してもよい。なお、ジョイント値とは、ジョイントの回転角度を表す値である。
【0068】
CPU11は、ステップS200で生成されたジョイントJ2、J3のジョイント値の組み合わせのうち、自己干渉するか否かの判定が未処理のジョイント値の組み合わせを選択する(ステップS202)。
【0069】
CPU11は、ステップS200で生成されたジョイントJ1、J4~J6のジョイント値の組み合わせのうち、自己干渉するか否かの判定が未処理のジョイント値の組み合わせを選択する(ステップS204)。
【0070】
CPU11は、ステップS202、S204で選択されたジョイントJ1~J6のジョイント値で表される垂直多関節ロボットLBの姿勢が自己干渉するか否かを判定する(ステップS206)。具体的には、記憶部104からベースリンクBL、リンクL1~L6の形状データを取得し、垂直多関節ロボットLBの姿勢における3次元モデルを生成する。そして、生成した3次元モデルに基づいて、自己干渉、すなわちリンク同士の干渉が発生するリンクの組み合わせが存在するか否かを判定する。
【0071】
自己干渉しないと判定された場合(ステップS208:NO)、ステップS214へ移行する。一方、自己干渉すると判定された場合(ステップS208:YES)、CPU11は、ジョイントJ1、J4~J6の全てのジョイント値の組み合わせについてステップS206の判定を実行したか否かを判定する(ステップS210)。ジョイントJ1、J4~J6の全てのジョイント値の組み合わせについてステップS206の判定を実行していない場合(ステップS210:NO)、ステップS204へ移行する。一方、ジョイントJ1、J4~J6の全てのジョイント値の組み合わせについてステップS206の判定を実行した場合(ステップS210:YES)、CPU11は、ステップS202で選択されたジョイントJ2、J3のジョイント値の組み合わせを自己干渉するジョイント値の組み合わせとして記憶部104に記憶する(ステップS212)。
【0072】
CPU11は、ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己干渉を判定したか否かを判定する(ステップS214)。ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己干渉を判定していない場合(ステップS214:NO)、ステップS202へ移行する。
【0073】
ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己干渉を判定した場合(ステップS214:YES)、CPU11は、自己干渉すると判定されたジョイントJ2、J3のジョイント値の集合を領域化する(ステップS216)。一例として、
図9には、自己干渉すると判定されたジョイントJ2、J3のジョイント値の集合である点群21A~21Cを示した。ステップS216では、各点群21A~21C毎に、点群を全て含む領域、例えばバウンディングボックス化した領域を自己干渉領域とする。具体的には、点群21A~21Cの各々について、外側の点を直線(以下、エッジと称する)で接続することにより得られた領域を自己干渉領域とする。これにより、例えば
図9に示すような自己干渉領域22A~22Cが得られる。
【0074】
CPU11は、ステップS216で領域化された自己干渉領域の輪郭に収まるように自己干渉領域の形状を簡易化する(ステップS218)。簡易化の方法としては、例えばエッジ削減処理及び凸包化処理が挙げられる。
【0075】
以下、エッジ削減処理について説明する。例えば
図10に示すように、自己干渉領域22A~22Cの各々について、複数のエッジを一つのエッジにまとめることにより、自己干渉領域を簡易化する。具体的には、例えば
図10に示すように、自己干渉領域22Aの複数のエッジ25A~25Eを、一つのエッジ27A又はエッジ27Bに置き換えることにより簡易化する。なお、エッジ27Aは自己干渉領域22Aの内側に配置され、エッジ27Bは自己干渉領域22Aの外側に配置されている。エッジ27Aのように、自己干渉領域22Aの内側に配置した場合には、簡易化後の自己干渉領域が狭くなる。このため、実際には自己非干渉となる姿勢が簡易化後の自己干渉領域に含まれる可能性が低くなるため、判定の精度が向上する。一方、エッジ27Bのように、自己干渉領域22の外側に配置した場合には、簡易化後の自己干渉領域が広くなる。このため、元々詳細判定領域に存在する姿勢も自己干渉領域に含まれることになるが、自己干渉領域が広くなるため、判定に要する時間は短縮される。
【0076】
このように自己干渉領域22A~22Cの各々についてエッジ削減処理を実行することにより、
図9に示すような自己干渉領域30A~30Cが生成される。なお、以下では、自己干渉領域30A~30Cを特に区別しない場合は単に自己干渉領域30と称する。
【0077】
次に、凸包化処理について説明する。凸包(Convex)とは、凹みが無い形状をいう。凸包は、2次元の場合は凸多角形、3次元の場合は凸多面体となる。例えば
図11に示すような形状31A~31Cは凸包である。また、非凸包(Concave)とは、凹みが有る形状をいう。例えば
図12に示すような形状33A~33Cは非凸包である。そして、凸包化とは、非凸包を凸包の集合で表すことである。例えば
図12に示した非凸包である形状33Aは、
図13に示すように、複数の凸包35A、35Bで表される。形状33B、33Cについても同様に、複数の凸包で表される。
【0078】
従って、
図9に示す自己干渉領域22Aを凸包化した場合、複数の凸包37A、37Bで表され、自己干渉領域22Bを凸包化した場合、複数の凸包39A~39Cで表される。なお、自己干渉領域22Cは元々凸包なので凸包化されない。このように自己干渉領域を凸包化することにより、凸包化しない場合と比較して、後述する干渉判定処理における自己干渉の判定に要する時間を短縮することができる。なお、ステップS218の簡易化処理を省略してもよい。すなわち、後述する干渉判定処理において、自己干渉領域22A~22Cを用いて自己干渉を判定してもよい。
【0079】
図14には、自己干渉領域における垂直多関節ロボットLBの姿勢の一例を示した。
図14に示すように、ジョイントJ2、J3のジョイント値を座標軸とするコンフィグレーション空間の自己干渉領域30にプロットされた点P1で表される垂直多関節ロボットLBの姿勢A1は、リンクL3とリンクL1とが干渉する姿勢である。また、自己干渉領域30にプロットされた点P2で表される垂直多関節ロボットLBの姿勢A2は、リンクL6とベースリンクBLとが干渉する姿勢である。また、自己干渉領域30にプロットされた点P3で表される垂直多関節ロボットLBの姿勢A3は、リンクL3とベースリンクBLとが干渉する姿勢である。また、自己干渉領域30にプロットされた点P4で表される垂直多関節ロボットLBの姿勢A4は、リンクL4とベースリンクBLとが干渉する姿勢である。
【0080】
次に、
図6を参照して、ジョイントJ2、J3の自己非干渉領域を算出する処理について説明する。
【0081】
CPU11は、ジョイントJ4~J6に接続されるリンクL4~L6及びエンドエフェクタの最大可動域を算出する(ステップS300)。具体的には、まずジョイントJ4~J6の各々に接続されるリンクL4~L6の形状データ及びジョイントJ6に接続されるエンドエフェクタの形状データを記憶部104から読み出す。そして、ジョイントJ4~J6の各々を可動域全体で可動させた場合におけるリンクL4~L6及びエンドエフェクタの最大可動域を算出する。例えば
図15に示すように、エンドエフェクタEEが接続されたジョイントJ6を可動域全体で可動させた場合、エンドエフェクタEEが可動する最大の領域は最大可動域32のようになる。また、ジョイントJ5を可動域全体で可動させた場合、エンドエフェクタEE及びリンクL6が可動する最大の領域は最大可動域34のようになる。また、ジョイントJ4を可動域全体で可動させた場合、エンドエフェクタEE、リンクL6、及びリンクL5が可動する最大の領域は最大可動域36のようになる。この場合、垂直多関節ロボットLBは、
図16に示すように、リンクL3に、
図15に示す最大可動域36で表される形状のリンクL7が接続された構成と考えられる。このように、自己非干渉領域を算出する際にリンクL4~L6及びエンドエフェクタEEの最大可動域を算出するのは、最大可動域で表されるリンクが接続された状態で自己非干渉であれば、リンク4~L6及びエンドエフェクタEEがどのような姿勢でも必ず自己非干渉であると判定できるからである。
【0082】
CPU11は、
図5のステップS200で生成されたジョイントJ2、J3のジョイント値の組み合わせのうち、自己非干渉の判定が未処理のジョイント値の組み合わせを選択する(ステップS302)。
【0083】
CPU11は、
図5のステップS200で生成されたジョイントJ1のジョイント値のうち、自己非干渉の判定が未処理のジョイント値を選択する(ステップS304)。
【0084】
CPU11は、ステップS302、S304で選択されたJ1~J3のジョイント値で表される垂直多関節ロボットLBの姿勢が自己非干渉であるか否かを判定する(ステップS306)。具体的には、記憶部104からベースリンクBL及びリンクL1~L3の形状データを取得する。そして、取得したベースリンクBL及びリンクL1~L3の形状データと、ステップS300で算出したリンクL7の形状データと、に基づいて、ベースリンクBL、リンクL1~L3、及びリンクL7で構成される垂直多関節ロボットLBの3次元モデルを生成する。そして、生成した3次元モデルに基づいて、自己非干渉であるか否かを判定する。
【0085】
自己非干渉でないと判定された場合(ステップS308:NO)、ステップS314へ移行する。一方、自己非干渉であると判定された場合(ステップS308:YES)、CPU11は、ジョイントJ1の全てのジョイント値について自己非干渉の判定を実行したか否かを判定する(ステップS310)。ジョイントJ1の全てのジョイント値について自己非干渉の判定を実行していない場合(ステップS310:NO)、ステップS304へ移行する。一方、ジョイントJ1の全てのジョイント値について自己非干渉の判定を実行した場合(ステップS310:YES)、CPU11は、ステップS302で選択されたジョイントJ2、J3のジョイント値の組み合わせを自己非干渉のジョイント値の組み合わせとして記憶部104に記憶する(ステップS312)。
【0086】
CPU11は、ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己非干渉の判定を実行したか判定する(ステップ314)。ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己非干渉を判定していない場合(ステップS314:NO)、ステップS302へ移行する。ジョイントJ2、J3の全てのジョイント値の組み合わせについて自己非干渉を判定した場合(ステップS314:YES)、CPU11は、自己非干渉であると判定されたジョイントJ2、J3のジョイント値の集合を領域化する(ステップS316)。一例として、
図9には、自己非干渉すると判定されたジョイントJ2、J3のジョイント値の集合である点群24を示した。ステップS316では、点群24を全て含む領域、例えばバウンディングボックス化した領域を自己非干渉領域とする。具体的には、点群24について、外側の点を直線で接続することにより得られた領域を自己非干渉領域とする。これにより、例えば
図9に示すような自己非干渉領域26が得られる。
【0087】
CPU11は、ステップS316で領域化された自己非干渉領域の輪郭に収まるように自己非干渉領域の形状を簡易化する(ステップS318)。簡易化の方法としては、前述した自己干渉領域の形状を簡易化する場合と同様に、例えばエッジ削減処理及び凸包化処理が挙げられる。
【0088】
前述したように、自己非干渉領域は、垂直多関節ロボットLBが必ず自己干渉しない領域でなければならない。このため、自己非干渉領域26に対してエッジ削減処理を実行する場合において、自己非干渉領域26の複数のエッジを一つのエッジに置き換える際には、当該一つのエッジを自己非干渉領域26の内側に配置する。すなわちエッジ削減後の自己非干渉領域が自己非干渉領域26よりも小さくなるようにエッジ削減処理を実行する。このように自己非干渉領域26に対してエッジ削減処理を実行した場合は、例えば
図9に示すような自己非干渉領域28が得られる。また、自己非干渉領域26を凸包化した場合、複数の凸包26A~26Cで表される。このように自己非干渉領域を凸包化することにより、凸包化しない場合と比較して、後述する干渉判定処理における自己非干渉の判定に要する時間を短縮することができる。
【0089】
図17に示すように、自己干渉領域30及び自己非干渉領域28の何れにも属さない領域は、詳細判定領域40として定められる。
【0090】
なお、自己干渉領域でも自己非干渉領域でもない詳細判定領域ができるのは、3次元空間に配置されたリンクL4、L5、L6、及びエンドエフェクタEEの形状によっては自己干渉する場合もあれば自己干渉しない場合もあるのが主な理由である。
【0091】
次に、
図7を参照して、ジョイントJ4、J5の自己干渉領域を算出する処理について説明する。
【0092】
CPU11は、
図5のステップS200で生成されたジョイントJ4、J5のジョイント値の組み合わせのうち、自己干渉するか否かの判定が未処理のジョイント値の組み合わせを選択する(ステップS400)。
【0093】
CPU11は、
図5のステップS200で生成されたジョイントJ6のうち、自己干渉するか否かの判定が未処理のジョイント値を選択する(ステップS402)。
【0094】
CPU11は、ステップS400、S402で選択されたJ4~J6のジョイント値で表される垂直多関節ロボットLBの手先側の姿勢が自己干渉するか否かを判定する(ステップS404)。具体的には、記憶部104からリンクL4~L6の形状データを取得し、垂直多関節ロボットLBの手先の姿勢における3次元モデルを生成する。そして、生成した3次元モデルに基づいて、自己干渉、すなわちリンク同士の干渉が発生するリンクの組み合わせが存在するか否かを判定する。このように、根元側のリンクL1~L3は考慮せずに、手先側のリンクL4~L6及びエンドエフェクタEEのみを考慮して自己干渉を判定する。
【0095】
自己干渉しないと判定された場合(ステップS406:NO)、ステップ412へ移行する。一方、自己干渉すると判定された場合(ステップS406:YES)、CPU11は、CPU11は、ジョイントJ6の全てのジョイント値についてステップS406の判定を実行したか否かを判定する(ステップS408)。ジョイントJ6の全てのジョイント値についてステップS406の判定を実行した場合(ステップS408:YES)、CPU11は、ステップS400で選択されたジョイントJ4、J5のジョイント値の組み合わせを自己干渉する組み合わせとして記憶部104に記憶する(ステップS410)。一方、ジョイントJ6の全てのジョイント値についてステップS406の判定を実行していない場合(ステップS408:NO)、ステップS402へ移行する。
【0096】
CPU11は、ジョイントJ4、J5の全てのジョイント値の組み合わせについてステップS402~S410の処理を実行したか否かを判定する(ステップS412)。ジョイントJ4、J5の全てのジョイント値の組み合わせについてステップS402~S410の処理を実行していない場合(ステップS412:NO)、ステップS400へ移行する。一方、ジョイントJ4、J5の全てのジョイント値の組み合わせについてステップS402~S410の処理を実行した場合(ステップS412:YES)、CPU11は、自己干渉すると判定されたジョイントJ4、J5のジョイント値の集合を自己干渉領域として領域化する(ステップ414)。この処理は、
図5のステップS216の処理と同様であるため説明は省略する。
【0097】
CPU11は、ステップS414で領域化された自己干渉領域の輪郭に収まるように自己干渉領域の形状を簡易化する(ステップS416)。この処理は、
図5のステップS218の処理と同様であるため説明は省略する。これにより、例えば
図18に示すような自己干渉領域42が得られる。
【0098】
次に、
図8を参照して、ジョイントJ4、J5の自己非干渉領域を算出する処理について説明する。
【0099】
ステップS500~S504は、
図7のステップS400~S404と同様の処理であるため説明は省略する。
【0100】
自己干渉すると判定された場合(ステップS506:NO)、ステップ512へ移行する。一方、自己干渉しないと判定された場合(ステップS506:YES)、CPU11は、ジョイントJ6の全てのジョイント値についてステップS506の判定を実行したか否かを判定する(ステップS508)。ジョイントJ6の全てのジョイント値についてステップS506の判定を実行した場合(ステップS508:YES)、CPU11は、ステップS500で選択されたジョイントJ4、J5のジョイント値の組み合わせを自己非干渉の組み合わせとして記憶部104に記憶する(ステップS510)。一方、ジョイントJ6の全てのジョイント値についてステップS506の判定を実行していない場合(ステップS508:NO)、ステップS502へ移行する。
【0101】
ステップS512、S514は、
図7のステップS412、S414と同様の処理であり、ステップS516は
図6のステップ318と同様の処理であるため説明は省略する。これにより、例えば
図18に示すような自己非干渉領域44が得られる。
【0102】
また、
図18には、自己干渉領域及び自己非干渉領域における垂直多関節ロボットLBの手先側の姿勢の一例を示した。
図18に示すように、ジョイントJ4、J5のジョイント値を座標軸とするコンフィグレーション空間の自己干渉領域42にプロットされた点P5で表される垂直多関節ロボットLBの姿勢A5は、リンクL4とエンドエフェクタEEとが干渉する姿勢である。また、自己非干渉領域44にプロットされた点P6で表される垂直多関節ロボットLBの姿勢A6は、自己干渉しない姿勢である。
【0103】
なお、
図18に示す例では、詳細判定領域はほとんど生じていないが、手先側のリンクL4~L6及びエンドエフェクタEEの形状によって詳細判定領域の大きさは異なる。
【0104】
次に、垂直多関節ロボットLBの経路計画を生成する際に実行される自己干渉判定処理について説明する。
図19は、干渉判定装置10のCPU11により実行される自己干渉判定処理の流れを示すフローチャートである。CPU11がROM12又はストレージ14から自己干渉判定プログラムを読み出して、RAM13に展開し実行することにより、自己干渉判定処理が実行される。
【0105】
CPU11は、取得部102として、ジョイントJ2、J3のコンフィグレーション空間における自己干渉領域及び自己非干渉領域を表す領域情報と、ジョイントJ4、J5のコンフィグレーション空間における自己干渉領域及び自己非干渉領域を表す領域情報と、を記憶部104から取得する(ステップS600)。
【0106】
CPU11は、経路探索装置20によって探索された姿勢を表すジョイントJ1~J6のジョイント値を経路探索装置20から取得する(ステップS602)。
【0107】
CPU11は、ステップS502で取得したジョイントJ1~J6のジョイント値のうち、ジョイントJ2、J3のジョイント値が、ステップS600で取得した領域情報で表されるジョイントJ2、J3のコンフィグレーション空間における自己干渉領域内にあるか否かを判定する(ステップS604)。
【0108】
ジョイントJ2、J3のジョイント値が自己干渉領域内にある場合(ステップS604:YES)、CPU11は、ステップS602で取得したジョイントJ1~J6のジョイント値で表される姿勢が自己干渉することを経路探索装置20に通知する(ステップS612)。
【0109】
ジョイントJ2、J3のジョイント値が自己干渉領域内にない場合(ステップS604:NO)、CPU11は、ジョイントJ2、J3のジョイント値が、ステップS600
【0110】
で取得した領域情報で表されるジョイントJ2、J3のコンフィグレーション空間における自己非干渉領域内にあるか否かを判定する(ステップS606)。
【0111】
ジョイントJ2、J3のジョイント値が自己非干渉領域内にある場合(ステップS606:YES)、ステップS614へ移行する。
【0112】
ジョイントJ2、J3のジョイント値が自己非干渉領域内にない場合(ステップS606:NO)、CPU11は、垂直多関節ロボットLBが自己干渉するか否かを詳細に判定する(ステップS608)。具体的には、記憶部104からベースリンクBL、リンクL1~L3の形状データを取得する。そして、
図24に示すベースリンクBL、L1~L3のリンク同士の組み合わせのうち、判定が「○」となっている18通りのリンクの組み合わせについて、3次元モデルを生成し、生成した3次元モデルに基づいて、自己干渉が発生するか否かを判定する処理を順次実行する。
【0113】
CPU11は、自己干渉するリンクの組み合わせが存在すると判定した場合(ステップS610:YES)、自己干渉することを経路探索装置20へ通知する(ステップS612)。
【0114】
一方、自己干渉するリンクの組み合わせが存在しないと判定した場合(ステップS610:NO)、ステップS600で取得したジョイントJ1~J6のジョイント値のうち、ジョイントJ4、J5のジョイント値が、ステップS600で取得した領域情報で表されるジョイントJ4、J5のコンフィグレーション空間における自己干渉領域内にあるか否かを判定する(ステップS614)。
【0115】
ジョイントJ4、J5のジョイント値が自己干渉領域内にある場合(ステップS614:YES)、CPU11は、自己干渉することを経路探索装置20へ通知する(ステップS612)。
【0116】
一方、ジョイントJ4、J5のジョイント値が自己干渉領域内にない場合(ステップS614:NO)、CPU11は、ジョイントJ4、J5のジョイント値が、ステップS500で取得した領域情報で表されるジョイントJ4、J5のコンフィグレーション空間における自己非干渉領域内にあるか否かを判定する(ステップS616)。
【0117】
ジョイントJ2、J3のジョイント値が自己非干渉領域内にある場合(ステップS516:YES)、CPU11は、自己非干渉であることを経路探索装置20へ通知する(ステップS622)。
【0118】
ジョイントJ2、J3のジョイント値が自己非干渉領域内にない場合(ステップS616:NO)、CPU11は、ステップS602で取得したジョイントJ1~J6のジョイント値で表される姿勢が自己干渉するか否かを詳細に判定する(ステップS618)。具体的には、記憶部104からリンクL4、L5の形状データを取得する。そして、
図24に示すL4、L5のリンク同士の組み合わせのうち、判定が「○」となっている3通りのリンクの組み合わせについて、3次元モデルを生成し、生成した3次元モデルに基づいて、自己干渉が発生するか否かを判定する処理を順次実行する。
【0119】
CPU11は、自己干渉するリンクの組み合わせが存在すると判定した場合(ステップS620:YES)、自己干渉することを経路探索装置20へ通知する(ステップS612)。一方、自己干渉するリンクの組み合わせが存在しないと判定した場合(ステップS620:NO)、CPU11は、自己非干渉であることを経路探索装置20へ通知する(ステップS622)。
【0120】
なお、領域情報を取得する処理であるステップS600の処理は、
図19の処理を最初に実行したときだけ実行すればよいため、2回目以降はステップS600の処理を省略してもよい。
【0121】
以上のように、第1実施形態の干渉判定装置10によれば、以下の効果が得られる。干渉判定装置10は、特定のジョイントの回転角度を座標軸とするコンフィグレーション空間内に自己干渉領域及び自己非干渉領域を設定し、自己干渉領域及び自己非干渉領域の何れにも属さない領域は詳細判定領域とする。そして、特定のジョイントのジョイント値の組み合わせが自己干渉領域内にあるか否かを判定することによって自己干渉するか否かを判定する。このため、従来のようにリンクの形状に基づく3次元モデルを生成して自己干渉するか否かを判定する場合と比較して、自己干渉の判定に要する時間を短縮することができる。
【0122】
また、自己干渉領域及び自己非干渉領域を簡易化するので、自己干渉の判定及び自己非干渉の判定に要する時間を更に短縮することができる。
【0123】
干渉判定装置10は、上記の実施形態に限定されず、種々の改変が可能である。例えば、
図5のフローチャートにおいて、ジョイントJ5、J6に接続されるリンクを考慮せずに自己干渉を判定してもよい。この場合、
図5のフローチャートの各ステップにおける「ジョイントJ1、J4~J6」は「ジョイントJ1、J4」に読み替えられる。この場合、ジョイントJ5、J6に接続されるリンクを考慮しないことによって自己干渉領域が狭くなり詳細判定領域が増加するが、領域情報の算出に要する時間を短縮することができる。
【0124】
また、本実施形態では、2つの特定のジョイントの回転角度を座標軸とする2次元のコンフィグレーション空間に自己干渉領域及び自己非干渉領域を設定したが、3つの特定のジョイントの回転角度を座標軸とする3次元のコンフィグレーション空間に自己干渉領域及び自己非干渉領域を設定してもよい。この場合、
図4に示したフローチャートの各ステップにおける「ジョイントJ2、J3」は「ジョイントJ1~J3」に、「ジョイントJ4、J5」は「ジョイントJ4~J6」にそれぞれ読み替えられる。また、
図5に示したフローチャートの各ステップにおける「ジョイントJ2、J3」は「ジョイントJ1~J3」に、「ジョイントJ1、J4~J6」は「ジョイントJ4~J6」にそれぞれ読み替えられる。また、
図6に示したフローチャートの各ステップにおける「ジョイントJ2、J3」は「ジョイントJ1~J3」に読み替えられる。この場合、ステップS304、S310の処理は省略される。また、
図7、8に示したフローチャートの各ステップにおける「ジョイントJ4、J5」は「ジョイントJ4~J6」に読み替えられる。この場合、
図7のステップS402、S408、
図8のステップ502、508の処理は省略される。また、
図19に示したフローチャートの各ステップにおける「ジョイントJ2、J3」は「ジョイントJ1~J3」に、「ジョイントJ4、J5」は「ジョイントJ4~J6」に読み替えられる。
【0125】
図20には、ジョイントJ1~J3の回転角度を座標軸とした3次元のコンフィグレーション空間に設定された自己干渉領域50及び自己非干渉領域52を示した。また、
図21には、ジョイントJ4~J6の回転角度を座標軸とした3次元のコンフィグレーション空間に設定された自己干渉領域54及び自己非干渉領域56を示した。
【0126】
このように、3次元のコンフィグレーション空間に自己干渉領域及び自己非干渉領域を設定した場合、2次元のコンフィグレーション空間に自己干渉領域及び自己非干渉領域を設定する場合と比較して、干渉判定に要する時間は長くなるが、精度良く自己干渉を判定することができる。
【0127】
また、本実施形態では、垂直多関節ロボットLBが6個の関節を有する6軸ロボットである場合について説明したが、垂直多関節ロボットLBが5個以下又は7個以上の関節を有する多関節ロボットに適用してもよい。
【0128】
(第2実施形態)
【0129】
第1実施形態においては、垂直多関節ロボットLBの自己干渉を判定する場合について説明したが、第2実施形態においては、垂直多関節ロボットLBが障害物に対して干渉する障害物干渉が発生するか否かを判定する場合について説明する。なお、第1実施形態と同一部分には同一符号を付し、詳細な説明は省略する。
【0130】
第2実施形態に係る干渉判定装置のハードウェア構成及び機能構成は、第1実施形態で説明した
図1、3に示す干渉判定装置10と基本的に同一であるが、干渉を判定する対象が障害物である点が異なる。
【0131】
第2実施形態における算出部101は、垂直多関節ロボットLBを構成するリンクL1~L6の形状、リンクL1~L6を接続するジョイントJ1~J6の可動域、及び障害物の形状に基づいて、垂直多関節ロボットLBが障害物に対して干渉する対障害物干渉領域と、垂直多関節ロボットLBが障害物に対して干渉しない対障害物非干渉領域と、を表す領域情報を算出する。
図22にて一例として障害物60を示した。
【0132】
第2実施形態における取得部102は、算出部101が算出した領域情報を取得する。
【0133】
第2実施形態における判定部103は、特定のジョイントの回転角度によって定まる姿勢を表す座標が、取得部102により取得された領域情報により表される対障害物干渉領域及び対障害物非干渉領域の何れに属するかを判定することにより、垂直多関節ロボットLBが障害物に対して干渉するか否かを判定する。
【0134】
第2実施形態における記憶部104は、後述する領域情報算出プログラム、対障害物干渉判定プログラム、算出部101により算出された領域情報、垂直多関節ロボットLBのベースリンクBL及びリンクL1~L6の形状データ、ジョイントJ1~J6の可動域に関する情報、ジョイントJ6に接続されるエンドエフェクタの形状データ、エンドエフェクタの処理対象であるワークの形状データ、障害物の形状データ等が記憶される。
【0135】
次に、第2実施形態における干渉判定装置10の作用について説明する。
【0136】
領域情報については、第1実施形態において3つの特定のジョイントの回転角度を座標軸とする3次元のコンフィグレーション空間に自己干渉領域及び自己非干渉領域を設定する場合と同様に、
図4~8の処理を実行することにより算出することができる。この場合、
図4~8のフローチャートの各ステップにおける「自己干渉領域」は「対障害物干渉領域」に、「自己非干渉領域」は「対障害物非干渉領域」にそれぞれ読み替えられる。また、
図5~8のフローチャートの各ステップにおける「自己干渉」は「対障害物干渉」に、「自己非干渉」は「対障害物非干渉」にそれぞれ読み替えられる。
【0137】
また、第2実施形態における
図5のステップS206では、記憶部104からベースリンクBL、リンクL1~L6の形状データ、及び障害物の形状データを取得し、垂直多関節ロボットLB及び障害物の3次元モデルを生成する。そして、生成した3次元モデルに基づいて、垂直多関節ロボットLBが障害物に対して干渉するか否かを判定する。その他の処理は第1実施形態と同様であるため説明を省略する。
【0138】
また、第2実施形態における
図6のステップS306では、記憶部104からベースリンクBL及びリンクL1~L3の形状データ、及び障害物の形状データを取得する。そして、取得したベースリンクBL及びリンクL1~L3の形状データと、ステップS300で算出したリンクL7の形状データと、に基づいて、ベースリンクBL、リンクL1~L3、及びリンクL7で構成される垂直多関節ロボットLBの3次元モデルを生成すると共に、障害物の形状データに基づいて障害物の3次元モデルを生成する。
図23には、一例としてステップS306の処理で生成された3次元モデルの垂直多関節ロボットLB及び障害物60を示した。そして、生成した3次元モデルに基づいて、垂直多関節ロボットLBが障害物に対して非干渉であるか否かを判定する。その他の処理は第1実施形態と同様であるため説明を省略する。
【0139】
また、第2実施形態における
図7のステップS404、
図8のステップS504では、記憶部104からリンクL4~L6の形状データ及び障害物の形状データを取得し、垂直多関節ロボットLBの手先の姿勢における3次元モデルを生成すると共に、障害物の3次元モデルを生成する。そして、生成した3次元モデルに基づいて、垂直多関節ロボットLBが障害物に対して干渉するか否かを判定する。その他の処理は第1実施形態と同様であるため説明を省略する。
【0140】
また、第2実施形態における
図18のステップS602では、ジョイントJ2、J3のコンフィグレーション空間における対障害物干渉領域及び対障害物非干渉領域を表す領域情報と、ジョイントJ4、J5のコンフィグレーション空間における対障害物干渉領域及び対障害物非干渉領域を表す領域情報と、を記憶部104から取得する。
【0141】
また、第2実施形態におけるステップS608では、記憶部104からベースリンクBL、リンクL1~L3の形状データを取得する。そして、ベースリンクBL、L1~L3の各リンクと障害物との組み合わせについて3次元モデルを生成し、生成した3次元モデルに基づいて、垂直多関節ロボットLBが障害物に対して干渉が発生するか否かを判定する処理を順次実行する。
【0142】
また、第2実施形態におけるステップS618では、記憶部104からリンクL4、L5の形状データを取得する。そして、L4、L5の各リンクと障害物との組み合わせについて3次元モデルを生成し、生成した3次元モデルに基づいて、垂直多関節ロボットLBが障害物に対して干渉が発生するか否かを判定する処理を順次実行する。その他の処理は第1実施形態と同様であるため説明を省略する。
【0143】
このように、第2実施形態では、干渉判定装置10は、特定のジョイントの回転角度を座標軸とするコンフィグレーション空間内に対障害物干渉領域及び対障害物非干渉領域を設定し、対障害物干渉領域及び対障害物非干渉領域の何れにも属さない領域は詳細判定領域とする。そして、特定のジョイントのジョイント値の組み合わせが対障害物干渉領域内にあるか否かを判定することによって、障害物に対して干渉するか否かを判定する。このため、リンクの形状に基づく3次元モデルを生成して障害物に干渉するか否かを判定する場合と比較して、障害物に対して干渉するか否かの判定に要する時間を短縮することができる。
【0144】
なお、上記各実施形態でCPUがソフトウェア(プログラム)を読み込んで実行した干渉判定処理を、CPU以外の各種のプロセッサが実行してもよい。この場合のプロセッサとしては、FPGA(Field-Programmable Gate Array)等の製造後に回路構成を変更可能なPLD(Programmable Logic Device)、及びASIC(Application Specific Integrated Circuit)等の特定の処理を実行させるために専用に設計された回路構成を有するプロセッサである専用電気回路等が例示される。また、干渉判定処理を、これらの各種のプロセッサのうちの1つで実行してもよいし、同種又は異種の2つ以上のプロセッサの組み合わせ(例えば、複数のFPGA、及びCPUとFPGAとの組み合わせ等)で実行してもよい。また、これらの各種のプロセッサのハードウェア的な構造は、より具体的には、半導体素子等の回路素子を組み合わせた電気回路である。
【0145】
また、上記各実施形態では、干渉判定プログラムがストレージ14又はROM12に予め記憶(インストール)されている態様を説明したが、これに限定されない。プログラムは、CD-ROM(Compact Disk Read Only Memory)、DVD-ROM(Digital Versatile Disk Read Only Memory)、及びUSB(Universal Serial Bus)メモリ等の記録媒体に記録された形態で提供されてもよい。また、プログラムは、ネットワークを介して外部装置からダウンロードされる形態としてもよい。
【符号の説明】
【0146】
10 干渉判定装置
14 ストレージ
15 入力部
16 モニタ
17 光ディスク駆動装置
18 通信インタフェース
19 バス
20 経路探索装置
22A~22C、30A~30C、42、50、54 自己干渉領域
26、28、44、52、56 自己非干渉領域
32、34、36 最大可動域
40 詳細判定領域
60 障害物
101 算出部
102 取得部
103 判定部
104 記憶部