〔実施形態1〕
以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図1から図15に基づいて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、例えば干渉判定装置10をロボット干渉判定装置の典型例として説明を行う。本発明の一態様に係る干渉判定装置10についての理解を容易にするため、先ず、干渉判定装置10を含む制御システム1の概要を、図2を用いて説明する。
§1.適用例
(制御システムの全体概要)
図2は、制御システム1の全体概要を示す図である。図2に例示するように、制御システム1は、干渉判定装置10と、ロボット制御装置であるコントローラ20と、センサ40(計測装置)とを含んでいる。図2においては、センサ40として、センサ40(1)およびセンサ40(2)が描かれているが、制御システム1が含むセンサ40が複数であることは必須ではなく、制御システム1が含むセンサ40は1つであってもよい。以下の説明において、センサ40(1)とセンサ40(2)とを区別する必要がない場合には、単に「センサ40」と表記する。
制御システム1は、図2に示すような、ロボット30と作業者50(対象物)とが共存する工場等の生産現場において、ロボット30と作業者50とが不用意に接触するのを回避するための制御を実行する。特に、制御システム1は、作業者50と、ロボット30のアーム等、多関節マニピュレータを備えるロボット30の所定部分(例えば、所定の可動部)とが不用意に接触するのを回避するための制御を実行する。ただし、以下の説明においては、記載の簡潔性を担保するため、作業者50と「ロボット30の所定部分」との接触を回避することを、作業者50とロボット30との接触を回避すると記載することがある。つまり、以下の説明において、「ロボット30」との語は、ロボット30の全体だけでなく、作業者50との接触が回避されるべき「ロボット30の所定部分」を指す場合にも用いる。同様に、以下の説明においては、「速度ベクトル」および「加速度ベクトル」は、各々、「速度」および「加速度」と略記することがある。
センサ40は、主として作業者50(対象物)の二次元位置または三次元位置を非接触方式で計測し、特に、時間ごとの作業者50の二次元位置または三次元位置を非接触方式で計測し、計測結果を干渉判定装置10に通知する。センサ40は、例えば、公知のライダー(LiDAR、Light Detection and Ranging)またはレーダー(RADAR、Radio Detection and Ranging)などを用いて実現することができ、例えば、作業者50の可動領域、つまり、作業領域全体を監視できるように配置される。センサ40は、例えばEthernet(登録商標)等の産業用ネットワークを介して、干渉判定装置10に接続している。
図2に示すように、制御システム1は、複数のセンサ40を用いて、作業者50の二次元位置または三次元位置を計測してもよく、その場合、異なる種類の複数のセンサ40を組み合わせてもよく、つまり、異種FUSION構成としてもよい。例えば、図2において、センサ40(1)およびセンサ40(2)の一方を二次元センサとし、他方を三次元センサとしてもよい。異なる種類の複数のセンサ40を組み合わせて用いることにより、多元的な計測が可能となる。また、制御システム1は、同種の複数のセンサ40を用いることによって、計測する作業者50の二次元位置または三次元位置の精度を向上させてもよい。ただし、前述の通り、制御システム1が含むセンサ40が複数であることは必須ではなく、制御システム1は1つのセンサ40によって、作業者50の二次元位置または三次元位置を計測してもよい。
コントローラ20は、ロボット30の動作を制御するロボット制御装置であり、例えば、後述するアームタスク23に格納されている目標軌道および動作プログラムなどのデータに従って、ロボット30の動作を制御する。また、コントローラ20は、干渉判定装置10からの指示信号に従って、ロボット30の動作を制御する。例えば、コントローラ20は、目標軌道を用いて生成したロボット30への指令値を、干渉判定装置10からの指示信号に従って修正し、修正した指令値に従った動作をロボット30に実行させる。コントローラ20は、例えばPLC(Programmable Logic Controller)、IPC(Industrial PC)などを用いて実現することができる。
ロボット30は、コントローラ20と接続しており、コントローラ20によって動作を制御され、例えば、複数のアームが複数の関節で接続されている多関節マニピュレータを備える。
干渉判定装置10は、センサ40から取得する「時間ごとの作業者50の二次元位置または三次元位置」を用いて、作業者50の未来の(言い換えれば、将来の)「位置(二次元位置または三次元位置)および速度ベクトル」を予測する。例えば、干渉判定装置10は、t0時点の「作業者50の、位置および速度ベクトル」を用いて、t0+Δt時点の「作業者50の、位置および速度ベクトル」を、t0時点で予測する。
また、干渉判定装置10は、コントローラ20(特に、アームタスク23)から、例えば、ロボット30の動作を規定する「目標軌道および動作プログラム」などの情報(制御情報)を取得する。干渉判定装置10は、取得した情報を用いて、ロボット30(例えば、ロボット30のアーム)の未来の「位置(二次元位置または三次元位置)および速度ベクトル」を予測する(算出する)。例えば、干渉判定装置10は、ロボット30の制御情報を用いて、t0+Δt時点の「ロボット30の、位置および速度ベクトル」を、t0時点で予測する。
干渉判定装置10は、作業者50の未来(t0+Δt時点)の速度ベクトルとロボット30の未来の速度ベクトルとを用いて、未来における安全距離を算出する。また、干渉判定装置10は、作業者50の未来(t0+Δt時点)の位置とロボット30の未来の位置とを用いて、未来における分離距離を算出する。干渉判定装置10は、算出した「未来(t0+Δt時点)における安全距離」と「未来(t0+Δt時点)における分離距離」とを比較して、作業者50とロボット30との未来における干渉の可能性を判定し、判定結果をコントローラ20に通知する。「安全距離」および「分離距離」の概念について、詳細は図6を用いて後述する。
具体的には、「未来における分離距離」が「未来における安全距離」よりも大きい場合、干渉判定装置10は、作業者50とロボット30とが未来において干渉する可能性はないと判定し、この判定結果をコントローラ20に通知する。また、「未来における分離距離」が「未来における安全距離」以下である場合、干渉判定装置10は、作業者50とロボット30とが未来において干渉する可能性があると判定し、干渉を回避する指示をコントローラ20に送信する。干渉判定装置10は、干渉を回避する指示と共に、作業者50の未来の「位置および速度ベクトル」等の干渉状態情報を、コントローラ20に送信してもよい。
干渉判定装置10により干渉可能性があると判定されると、干渉判定装置10またはコントローラ20は、ロボット30の動作の予定(軌道計画)を修正して、未来における作業者50とロボット30との干渉を回避する。
例えば、干渉判定装置10は、「作業者50とロボット30とが未来(t=t0+Δt)において干渉し得る」と現時点(t=t0)で判定すると、「未来における安全距離」を「未来における分離距離」以下とする指示(指示信号)を、コントローラ20に送信してもよい。すなわち、干渉判定装置10は、「未来における安全距離」を「未来における分離距離」以下とする指示を、コントローラ20に現時点で送信してもよい。干渉判定装置10は、ロボット30の、現時点から未来までの「速度ベクトルおよび目標軌道」の少なくとも一方を調整するように、コントローラ20に現時点で指示することで、「未来における安全距離」を「未来における分離距離」以下の大きさにしてもよい。
ただし、干渉可能性があると判定した干渉判定装置10は、この判定結果と干渉状態情報とをコントローラ20に送信し、干渉回避のための軌道計画の具体的な修正内容の決定については、コントローラ20に実行させるようにしてもよい。
(干渉判定装置についての整理)
干渉判定装置10は、「未来における安全距離」および「未来における分離距離」の算出を動的に(つまり、随時)算出し、未来における干渉可能性の判定(干渉判定)を動的に行って、判定結果をコントローラ20に通知する。干渉判定装置10は、干渉の可能性があると判定すると、適宜、干渉の回避をコントローラ20に指示し、例えば、ロボット30の速度ベクトルおよび軌道の少なくとも一方を修正させる。言い換えれば、干渉判定装置10は、時々刻々に、未来における干渉判定を行って、ロボット30の速度ベクトルおよび軌道の少なくとも一方の修正などを、時々刻々に指示する。
したがって、干渉判定装置10は、安全柵を用いずにロボット30と作業者50との干渉を回避することができるので、生産現場等の省スペース化を実現することができる。また、干渉判定装置10は、未来における干渉可能性の判定に基づいて、現在から未来までのロボット30の速度ベクトルおよび目標軌道の少なくとも一方を調整するので、ロボット30によるスムーズな干渉回避動作を計画することができる。言い換えれば、未来についての予測情報を用いてロボット30の動作を計画するので、ロボット30の急減速、無駄な減速、無駄な停止などの発生を抑制することができ、成功率の高い軌道(つまり、動作の計画)を生成することが可能となる。「成功率が低い」とは、例えば、ロボット30と作業者50との干渉を回避するために、ロボット30の動作の計画(軌道)を何度も作り直す必要があることをいう。ユーザは、干渉判定装置10を用いることにより、生産現場等の省スペース化および生産効率の向上を実現することができる。
すなわち、干渉判定装置10(ロボット干渉判定装置)は、所定の領域内に存在する作業者50(対象物)の、現時点(t0)までの位置の変化を示す情報(例えば、現時点における現在位置xh(t0)および現在速度ベクトルvh(t0))を取得する人状態情報生成部112(対象物状態取得部)と、ロボット30(ロボットにおける所定の可動部)の所定時間Δt後における予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)を取得するロボット状態取得部121と、作業者50の現時点までの位置の変化を示す情報に基づいて、所定時間Δt後における作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出する人軌道予測部113(予測部)と、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)と、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)とに基づき、作業者50とロボット30との接触が生じる可能性があるか否かをリアルタイムで判定する未来干渉判定部122(干渉判定部)と、を備えている。
前記の構成によれば、干渉判定装置10は、「作業者50の、現時点までの位置の変化を示す情報」を取得し、この「現時点までの位置の変化を示す情報」を用いて、所定時間Δt後における作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を予測する(算出する)。「作業者50の、現時点までの位置の変化を示す情報」は、例えば、作業者50の現在位置xh(t0)および現在速度ベクトルvh(t0)である。また、図15の表において入力として示す各種の情報も、各々、前記対象物の、現時点までの位置の変化を示す情報の例である。
そして、干渉判定装置10は、算出した作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)と、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)とに基づき、作業者50とロボット30との接触が生じる可能性があるか否かをリアルタイムで判定する。
干渉判定装置10は、安全柵を用いずにロボット30と作業者50との干渉を回避することができるので、生産現場等の省スペース化を実現することができる。
また、干渉判定装置10は、ロボット30と作業者50との、所定時間Δt(つまり、未来)における干渉の可能性を現時点t0で判定するので、干渉の可能性があると判定した場合にも、干渉回避のための処理を現時点t0で余裕を持って実行できる。
ここで、現時点t0での干渉の可能性を現時点t0で判定する装置が、現時点t0での干渉の可能性があると判定した場合、現時点t0での干渉を回避するためには、ロボット30の急減速および急停止等の動作が必要となり、どうしても生産効率が低下する。
これに対し、干渉判定装置10は、未来における干渉の可能性を現時点t0で判定するので、現時点t0での干渉の可能性を現時点t0で判定する場合に比べて、干渉を回避するために必要なロボット30の動作を、円滑かつ必要最小限のものにすることができる。つまり、干渉判定装置10は、ロボット30と作業者50との干渉を回避しつつ、ロボット30の急減速および急停止等による生産効率の低下を抑制することができる。
したがって、干渉判定装置10は、工場等の生産現場において、例えば作業者50等である人(対象物)とロボット30との干渉を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
前述の通り、対象物は、例えば作業者50等の人であり、具体的には、人の全体または人の一部であり、また、人以外のモノ(例えば、モバイルロボットなど)であってもよい。対象物の位置とは、対象物が人(作業者50)の全体である場合には、例えば、人の重心の位置である。対象物が人の一部または人以外のモノである場合には、対象物の位置とは、人の一部の位置、または、人以外のモノの位置である。
人軌道予測部113による予測速度ベクトルvh(t0+Δt)の算出は、対象物の各時点における位置xh(t)および速度ベクトルvh(t)の履歴を学習した結果を利用するものであってもよい。また、人軌道予測部113による予測速度ベクトルvh(t0+Δt)の算出は、単純予測を利用するもの、つまり、現在速度ベクトルvh(t0)の継続を前提とするものであってもよい。
干渉判定装置10について、ロボット30は、複数のアームが複数の関節で接続されている多関節マニピュレータを備えている。干渉判定装置10によって作業者50との干渉が判定される対象は、ロボット30の全体であってもよいし、ロボット30における所定の可動部、例えば、ロボット30の多関節マニピュレータの所定の1以上の部分であってもよい。
前記の構成によれば、干渉判定装置10は、複数のアームが複数の関節で接続されている多関節マニピュレータを備えたロボット30と、作業者50との、所定時間Δt後(つまり、未来)における干渉の可能性を、現時点t0で判定する。
したがって、干渉判定装置10は、工場等の生産現場において、例えば作業者50等である対象物と、多関節マニピュレータを備えたロボット30との干渉を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
干渉判定装置10において、人軌道予測部113は、各時点における、作業者50の位置xh(t)、速度ベクトルvh(t)、および、加速度ベクトルah(t)の少なくとも1つの履歴を学習することによって予測用データ(学習済モデル)を生成する学習部114を備える。人軌道予測部113は、予測用データによって、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出する。
前記の構成によれば、干渉判定装置10は、作業者50の各時点における位置xh(t)、速度ベクトルvh(t)、および、加速度ベクトルah(t)の少なくとも1つの履歴を学習して学習済モデル(予測用データ)を生成する。そして、干渉判定装置10は、生成した学習済モデルを用いて、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出する。
したがって、干渉判定装置10は、作業者50の状態・動作(位置、速度ベクトル、加速度ベクトルの少なくとも1つ)に係る履歴の学習によって生成した予測用データを用いて、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を高精度に算出することができるとの効果を奏する。
干渉判定装置10において、学習部114は、作業者50の、現時点までの位置の変化を示す情報(例えば、作業者50の現在位置xh(t0)および現在速度ベクトルvh(t0)の少なくとも一方)を入力とし、作業者50の加速度またはその後の位置xh(t0+Δt)を出力とする学習を行うことによって、予測用データを生成する。
前記の構成によれば、干渉判定装置10は、作業者50の、現時点までの位置の変化を示す情報を入力とし、作業者50の加速度またはその後の位置xh(t0+Δt)を出力とする学習を行う。
例えば、干渉判定装置10は、時刻ごとの(つまり、各時点における)、作業者50の位置および速度ベクトルを入力とし、時刻ごとの、作業者50の加速度を出力とする学習用データについて、学習を行う。
干渉判定装置10は、作業者50の、現時点までの位置の変化を示す情報を入力とし、作業者50の加速度またはその後の位置xh(t0+Δt)を出力とする学習用データを学習することで、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出するための、高精度な予測用データを生成することができるとの効果を奏する。
干渉判定装置10は、作業者50を識別する識別部115をさらに備え、人軌道予測部113は、識別部115による識別結果に応じて作業者50の予測位置および予測速度ベクトルの算出方法を変更する。
前記の構成によれば、干渉判定装置10は、複数の作業者50の各々を識別し、複数の作業者50の各々の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を、複数の作業者50の各々に応じて、算出する。
ここで、例えば複数の作業者50の各々は、身長、体重等が異なり、また、各々に特有の動作の癖などを備えている。したがって、複数の作業者50の各々について、予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を高精度に算出するには、複数の作業者50の各々の状態・動作の履歴情報を学習し、その学習結果を利用するのが望ましい。
干渉判定装置10は、複数の作業者50の各々を識別し、各々に応じた算出方法により、つまり、各々についての予測用データを用いて、各々の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出する。したがって、干渉判定装置10は、複数の作業者50の各々の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を、各々についての学習済モデル(予測用データ)を用いて、高精度に算出することができるとの効果を奏する。
干渉判定装置10において、人状態情報生成部112は、非接触で作業者50の二次元または三次元位置を計測するセンサ40(計測装置)による計測結果の履歴に基づき、作業者50の、現時点までの位置の変化を示す情報(例えば、現在位置xh(t0)および現在速度ベクトルvh(t0))を取得する。
前記の構成によれば、干渉判定装置10は、作業者50の計測位置xh(t)の履歴を用いて、作業者50の、現時点までの位置の変化を示す情報を取得する。干渉判定装置10は、作業者50の、現時点までの位置の変化を示す情報として、例えば、現時点における、作業者50の現在位置xh(t0)および現在速度ベクトルvh(t0)を取得する。
したがって、干渉判定装置10は、作業者50の、現時点までの位置の変化を示す情報を、作業者50の計測位置xh(t)の履歴を用いて高精度に算出し、取得することができるとの効果を奏する。
干渉判定装置10において、ロボット状態取得部121は、ロボット30の動作を制御するコントローラ20(ロボット制御装置)から制御情報を取得することにより、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)を取得する。
前記の構成によれば、干渉判定装置10は、コントローラ20から、ロボット30に対する制御を規定する制御情報を取得することにより、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)を取得する。したがって、干渉判定装置10は、前記制御情報から、ロボット30についての、高精度な予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)を取得することができるとの効果を奏する。前記制御情報は、例えば、コントローラ20がロボット30に対する制御を実行する際に用いる動作プログラム等であり、干渉判定装置10は、動作プログラム等を解析して、ロボット30の予測位置および予測速度ベクトルを算出する。
また、ロボット状態取得部121は、ロボット30(特に、ロボット30の可動部)の位置情報を解析して、ロボット30(特に、ロボット30の可動部)の予測位置および予測速度ベクトルを算出してもよい。例えば、ロボット状態取得部121は、コントローラ20から、ロボット30(特に、ロボット30の可動部)の位置情報を取得し、位置情報の履歴に基づいて、予測位置および予測速度ベクトルを算出してもよい。
さらに、ロボット状態取得部121は、コントローラ20からロボット30に送信される制御信号から、ロボット30(特に、ロボット30の可動部)の予測位置および予測速度ベクトルを算出してもよい。例えば、ロボット状態取得部121は、コントローラ20からロボット30に送信される制御信号の内容(各関節のモータ制御信号など)を解析して、ロボット30(特に、ロボット30の可動部)の予測位置および予測速度ベクトルを算出してもよい。
干渉判定装置10は、未来干渉判定部122が、作業者50とロボット30との接触が生じる可能性があると判定した場合に、ロボット30の動作を制御するコントローラ20に対して干渉回避を指示する指示信号を送信する制御指示調整部123(指示部)をさらに備える。
前記の構成によれば、干渉判定装置10は、作業者50とロボット30との接触が生じる可能性があると判定した場合、ロボット30の動作を制御するコントローラ20に対して干渉回避を指示する指示信号を送信する。したがって、干渉判定装置10は、接触が生じる可能性があると判定すると、コントローラ20に前記指示信号を送信して、接触を回避することができるとの効果を奏する。
前記指示信号は、単に干渉の可能性を警告するだけの信号(警告信号)であってもよく、接触を回避するためのロボット30の具体的な動作の決定は、コントローラ20に実行させてもよい。また、前記指示信号は、ロボット30の動作内容を指示する信号であってもよく、例えば、ロボット30の動作を停止させ、または、ロボット30に干渉を回避させることを指示する信号であってもよい。さらに、前記指示信号は、ロボット30の動作を詳細に規定する制御指令であってもよく、例えば、動作を停止させるまでの時間、干渉を回避するための動作の方向・時間・距離などの内容を含む信号であってもよい。
干渉判定装置10において、未来干渉判定部122が、作業者50とロボット30との接触が生じる可能性があると判定した場合に、制御指示調整部123は、コントローラ20に対して、ロボット30の移動速度および軌道の少なくともいずれか一方の調整指示を示す前記指示信号を送信してもよい。
前記の構成によれば、干渉判定装置10は、作業者50とロボット30との接触が生じる可能性があると判定した場合、コントローラ20に対して、ロボット30の移動速度および軌道の少なくとも一方の調整指示を示す前記指示信号を送信する。したがって、干渉判定装置10は、接触が生じる可能性があると判定すると、ロボット30の移動速度および軌道の少なくとも一方を調整させ、接触を回避することができるとの効果を奏する。
コントローラ20(ロボット制御装置)は、干渉判定装置10から前記指示信号を受信する受信部22と、前記指示信号に基づき、ロボット30の動作を制御するロボット制御部21と、を備えている。
前記の構成によれば、コントローラ20は、干渉判定装置10から前記指示信号を受信し、受信した前記指示信号に基づいて、ロボット30の動作を制御する。したがって、コントローラ20は、工場等の生産現場において、例えば作業者50等である対象物とロボット30との干渉を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
制御システム1(ロボット制御システム)は、干渉判定装置10と、コントローラ20と、非接触で作業者50の二次元または三次元位置を計測し、計測結果を干渉判定装置10に送信するセンサ40(計測装置)と、を含んでいる。
前記の構成によれば、制御システム1は、干渉判定装置10と、コントローラ20と、計測結果(測域データ)を干渉判定装置10に送信するセンサ40とを含む。したがって、制御システム1は、工場等の生産現場において、例えば作業者50等である対象物とロボット30との干渉を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
これまでに図2を用いて概要を説明してきた干渉判定装置10等について、次に、その構成の詳細について図1を参照しながら説明し、その後、干渉判定装置10等が実行する処理について、図3から図5を参照しながら説明していく。
§2.構成例
(干渉判定装置の詳細)
図1は、干渉判定装置10等の要部構成を示すブロック図である。図1に示すように、干渉判定装置10は、記憶部130以外の機能ブロックとして、人軌道処理部110と、調停部120と、を備えている。
人軌道処理部110は、作業者50の未来の「位置(二次元位置または三次元位置)および速度ベクトル」の予測等を実行し、予測した作業者50の未来の「位置および速度ベクトル」を、調停部120に通知する。人軌道処理部110は、センサ情報取得部111と、人状態情報生成部112と、人軌道予測部113と、学習部114と、識別部115とを含む。
調停部120は、作業者50およびロボット30の各々についての、未来の「位置(二次元位置または三次元位置)および速度ベクトル」を用いて、作業者50とロボット30との未来における干渉の可能性を判定する。調停部120は、作業者50とロボット30とが未来において干渉する可能性があると判定すると、例えば、コントローラ20に、未来における作業者50とロボット30との干渉を回避するように指示する。調停部120は、ロボット状態取得部121と、未来干渉判定部122と、制御指示調整部123とを含む。
干渉判定装置10は、上述の各機能ブロックに加えて、判定結果を表示する構成などを備えていてもよいが、記載の簡潔性を担保するため、本実施の形態に直接関係のない構成は、説明およびブロック図から省略している。ただし、実施の実情に則して、干渉判定装置10は、当該省略された構成を備えてもよい。図1に例示した上述の各機能ブロックは、例えば、CPU(central processing unit)等が、ROM(read only memory)、NVRAM(non-Volatile random access memory)等で実現された記憶装置(記憶部130)に記憶されているプログラムを不図示のRAM(random access memory)等に読み出して実行することで実現できる。以下、干渉判定装置10における各機能ブロックについて説明する。
(記憶部以外の機能ブロックの詳細)
センサ情報取得部111は、センサ40から、センサ40の計測した「作業者50の時間ごとの二次元位置または三次元位置」を示すデータ(測域データ)を取得し、取得した測域データを、人状態情報生成部112に出力する。図2に例示するセンサ40(1)およびセンサ40(2)のように、センサ40が複数のセンサ40(1)~(n)(nは2以上の整数)を含む場合、センサ情報取得部111は、複数のセンサ40の各々から取得した測域データを統合する。センサ情報取得部111は、例えば、複数のセンサ40の各々から、複数のセンサ40の各々のセンサ視点からの測域データを取得し、取得した複数の測域データの各々の角度および座標を変換し、複数の測域データを統合する。一例として、センサ情報取得部111は、X軸方向の測域データと、Y軸方向の測域データとを統合して、X-Y平面上の位置データを取得する。センサ情報取得部111は、統合した測域データを、人状態情報生成部112に出力する。
人状態情報生成部112は、センサ情報取得部111から取得した測域データを用いて、「作業者50の時間ごとの二次元位置または三次元位置」を算出し、算出した「作業者50の時間ごとの二次元位置または三次元位置」を人状態履歴データ131に格納する。また、人状態情報生成部112は、人状態履歴データ131の格納データと、センサ情報取得部111から取得した測域データを用いて算出した「作業者50の時間ごとの二次元位置または三次元位置」とから、「作業者50の時間ごとの速度ベクトル」を算出する。人状態情報生成部112は、算出した「作業者50の時間ごとの速度ベクトル」を人状態履歴データ131に格納する。
つまり、人状態情報生成部112は、センサ40から取得した測域データを用いて、「作業者50の時間ごとの、位置および速度ベクトル」を算出し(取得し)、取得した「作業者50の時間ごとの、位置および速度ベクトル」を人軌道予測部113に出力する。以下の説明においては、「作業者50の、位置および速度ベクトル」を「作業者50の状態」とも称し、「作業者50の時間ごとの、位置(および速度ベクトル)」の履歴を「作業者50の状態履歴(動作履歴)」とも称する。
ここで、センサ40からの測域データには、例えば、作業者50以外の対象についての計測結果等がノイズとして含まれている。そこで、人状態情報生成部112は、測域データからノイズを除去して、「作業者50の時間ごとの位置」を算出する。
人状態情報生成部112は、例えば、「作業者50の時間ごとの位置(二次元位置または三次元位置)」として、「時間ごとの、作業者50の重心の位置(重心位置)」を算出する。「重心」は「体幹」と言い換えてもよい。すなわち、人状態情報生成部112が人軌道予測部113に出力し、人状態履歴データ131に格納する「作業者50の時間ごとの位置」は、「時間ごとの、作業者50の重心位置」である。同様に、人状態情報生成部112が人軌道予測部113に出力し、人状態履歴データ131に格納する「作業者50の時間ごとの速度ベクトル」は、「時間ごとの、作業者50の重心の速度ベクトル」である。
人状態情報生成部112による重心位置の算出方法について、詳細は図9を用いて後述するが、人状態情報生成部112は、測域データが示す作業者50の存在位置情報(作業者50の存在を示す点群)から、作業者50の重心の位置を算出する。
人状態情報生成部112は、識別部115から、複数の作業者50の各々を識別する情報(識別情報)を取得し、取得した識別情報を、「作業者50の時間ごとの、位置および速度ベクトル」と組み合わせて、人状態履歴データ131に格納する。人状態情報生成部112は、複数の作業者50の各々について、その「時間ごとの、位置および速度ベクトル」を、人状態履歴データ131に格納する。つまり、人状態情報生成部112は、複数の作業者50の各々の「時間ごとの、位置および速度ベクトル」の履歴を人状態履歴データ131に格納する。
また、人状態情報生成部112は、識別部115から取得する作業者50の識別情報と、「現在の、作業者50の位置および速度ベクトル」とから、複数の作業者50の各々の「現在の、位置および速度ベクトル」を生成する。人状態情報生成部112は、生成した、複数の作業者50の各々の「現在の、位置および速度ベクトル」を、人軌道予測部113に通知する。
人軌道予測部113は、人状態情報生成部112から通知される「現在の、作業者50の位置および速度ベクトル」を、学習部114が生成した学習済モデル(予測用データ)に入力して、「未来の、作業者50の位置および速度ベクトル」を予測する。人軌道予測部113は、予測した「未来の、作業者50の位置および速度ベクトル」を、調停部120(特に、未来干渉判定部122)に通知する。
ここで、人軌道予測部113は、例えば、人状態情報生成部112から通知される「現在の、作業者50の重心の位置および速度ベクトル」を用いて、「未来の、作業者50の重心の位置および速度ベクトル」を予測する。
言い換えれば、人軌道予測部113は、現在までの作業者50の重心位置を示す情報から、作業者50の未来の(つまり、将来の)人軌道(重心位置の移動を示す軌道)を予測し、予測した未来の人軌道を調停部120(特に、未来干渉判定部122)に通知する。
特に、人軌道予測部113は、複数の作業者50の各々の「現在の、位置および速度ベクトル」から、複数の作業者50の各々の予測用データ(学習済モデル)を用いて、複数の作業者50の各々の「未来の、位置および速度ベクトル」を予測する。人軌道予測部113は、予測した、複数の作業者50の各々の「未来の、位置および速度ベクトル」を、調停部120(特に、未来干渉判定部122)に通知する。
人軌道予測部113は、学習部114による作業者50の状態履歴の学習の結果を用いて、「現在の、作業者50の重心の位置および速度ベクトル」から、「未来の、作業者50の重心の位置および速度ベクトル」を予測する。
学習部114は、時刻ごとの(特に、現在の)、作業者50の位置(特に、重心位置)および速度ベクトルを入力とし、時刻ごとの、作業者50の加速度を出力とする学習用データについて、学習を行う。
ただし、学習用データが、「入力;時刻ごとの、作業者50の位置および速度ベクトル」と、「出力:時刻ごとの、作業者50の加速度」との組み合わせであることは必須ではない。詳細は図15を用いて後述するが、学習用データは、時刻ごとの(特に、現在の)、作業者50の位置および速度ベクトルの少なくともいずれか一方を入力とし、作業者50の加速度またはその後の位置を出力とするものであればよい。
学習部114は、学習によって、予測用データ(特に、後述する「予測用フィルタ前データ」)を生成する。学習部114は、例えば、DBT(Deep Binary Tree)と呼ばれる学習アルゴリズムを用いた学習によって、学習済モデルとして、予測用データを生成する。言い換えれば、学習部114は、学習済モデルとして予測用データを生成する。人軌道予測部113は、この予測用データを用いて、「現在の、作業者50の重心の位置および速度ベクトル」から、「未来の、作業者50の重心の位置および速度ベクトル」を予測する。
学習部114は、例えばバッチ学習を行う場合、必要十分な量の作業者50の状態履歴(動作履歴)が蓄積されてから、学習を開始する。必要十分な量の作業者50の状態履歴(動作履歴)が蓄積された後は、学習部114は、時々刻々と最新のものに更新される作業者50の状態履歴(動作履歴)を用いて生成した最新の学習用データを学習して、時々刻々と学習済モデル(予測用データ)を更新する。作業者50の動作は時々刻々と変化するため、或る時点から所定時間後の「作業者50の、位置および速度ベクトル」を高精度に予測するには、その或る時点の最新の状態履歴を用いて生成した最新の学習用データを学習して得た学習済モデルを用いるのが望ましい。
学習部114がバッチ学習を行うことは必須ではなく、学習部114は、オンライン学習を行ってもよい。また、学習部114は、学習の方法を、バッチ学習からオンライン学習に切り替えてもよい。例えば、制御システム1の試験運転時に蓄積し、または、実運用の開始から所定期間の間に蓄積した作業者50の状態履歴(動作履歴)について、学習部114は、バッチ学習を行ってもよい。そして、実運用を開始した後、または、「実運用の開始後、バッチ学習により学習済モデルを生成した」後は、学習部114は、オンライン学習によって時々刻々と学習済モデル(予測用データ)を更新してもよい。
学習部114は、人状態履歴データ131に格納された、複数の作業者50の各々の状態履歴(動作履歴)から、複数の作業者50の各々の学習用データを生成し、この「複数の作業者50の各々の学習用データ」を学習する。学習部114は、複数の作業者50の各々の学習用データを学習して、複数の作業者50の各々の予測用データ(学習済モデル)を生成し、つまり、複数の作業者50の各々について、「未来の、位置および速度ベクトル」を予測するための学習済モデルを生成する。
識別部115は、複数の作業者50の各々を識別する情報(識別情報)を取得し、取得した識別情報を人状態情報生成部112に通知する。識別部115は、例えば、複数の作業者50の各々が携帯するIDカードから識別情報を取得してもよい。また、識別部115は、例えば、複数の作業者50の各々について顔認証等を実行して、識別情報を取得してもよい。
ロボット状態取得部121は、未来(つまり、所定時間後)における「ロボット30の、位置および速度ベクトル」を取得し、取得した未来における「ロボット30の、位置および速度ベクトル」を、未来干渉判定部122に通知する。例えば、ロボット状態取得部121は、コントローラ20(特に、アームタスク23)から、コントローラ20がロボット30を制御する際に用いる制御情報(ロボット30の動作を規定する「目標軌道および動作プログラム」などの情報)を取得する。ロボット状態取得部121は、取得した制御情報を解析して、未来における「ロボット30の、位置および速度ベクトル」を取得する。
未来干渉判定部122は、未来(つまり、所定時間後)における「作業者50の、位置および速度ベクトル」と、未来における「ロボット30の、位置および速度ベクトル」とを用いて、作業者50とロボット30との接触が生じる可能性があるかを判定する。特に、未来干渉判定部122は、時々刻々に、未来における「作業者50の、位置および速度ベクトル」と、未来における「ロボット30の、位置および速度ベクトル」とを用いて、作業者50とロボット30との接触が生じる可能性があるかを判定する。未来干渉判定部122は、判定結果を制御指示調整部123に通知する。
前述の通り、人軌道予測部113は、現時点(t=t0)で、現時点から所定時間(Δt)が経過した時点(t=t0+Δt)における「作業者50の、位置および速度ベクトル」を予測し、予測結果を未来干渉判定部122に通知する。また、ロボット状態取得部121は、現時点(t=t0)で、現時点から所定時間(Δt)が経過した時点(t=t0+Δt)における「ロボット30の、位置および速度ベクトル」を取得し、取得した情報を未来干渉判定部122に通知する。
「t0+Δt」時点から、ロボット30の移動が停止する時点までのいずれかの時点において、作業者50の推定位置とロボット30の推定位置との距離が所定値以内となると、未来干渉判定部122は、作業者50とロボット30とが接触し得ると判定する。作業者50およびロボット30の各々の推定位置の算出方法について、詳細は図7を用いて後述する。
制御指示調整部123は、未来干渉判定部122によって「作業者50とロボット30とが接触し得る」と判定されると、作業者50とロボット30との干渉を回避するよう指示する指示信号を、コントローラ20に送信する。制御指示調整部123は、例えば、「ロボット30の動作を停止させずに、ロボット30の移動速度および軌道の少なくとも一方を調整するよう指示する指示信号」を、または、「ロボット30の動作を停止するよう指示する指示信号」を、送信する。
(記憶部の詳細)
記憶部130は、干渉判定装置10が使用する各種データを格納する記憶装置である。なお、記憶部130は、干渉判定装置10が実行する(1)制御プログラム、(2)OSプログラム、(3)干渉判定装置10が有する各種機能を実行するためのアプリケーションプログラム、および、(4)該アプリケーションプログラムを実行するときに読み出す各種データを非一時的に記憶してもよい。上記の(1)~(4)のデータは、例えば、ROM(read only memory)、フラッシュメモリ、EPROM(Erasable Programmable ROM)、EEPROM(登録商標)(Electrically EPROM)、HDD(Hard Disc Drive)等の不揮発性記憶装置に記憶される。干渉判定装置10は、図示しない一時記憶部を備えていてもよい。一時記憶部は、干渉判定装置10が実行する各種処理の過程で、演算に使用するデータおよび演算結果等を一時的に記憶するいわゆるワーキングメモリであり、RAM(Random Access Memory)等の揮発性記憶装置で構成される。どのデータをどの記憶装置に記憶するのかについては、干渉判定装置10の使用目的、利便性、コスト、または、物理的な制約等から適宜決定される。記憶部130はさらに人状態履歴データ131を格納している。
人状態履歴データ131には、「作業者50の時間ごとの、位置および速度ベクトル」(の履歴)が格納され、特に、複数の作業者50の各々の「時間ごとの、位置および速度ベクトル」(の履歴)が格納される。
(コントローラの詳細)
コントローラ20は、ロボット30の動作を制御するロボット制御装置であり、例えば、後述するアームタスク23に格納されている目標軌道および動作プログラムなどのデータに従って、ロボット30の動作を制御する。また、コントローラ20は、干渉判定装置10からの指示信号に従って、ロボット30の動作を制御する。すなわち、図1に例示するように、コントローラ20は、ロボット制御部21と、受信部22と、アームタスク23とを備えている。受信部22は、干渉判定装置10から指示信号を受信し、受信した指示信号をロボット制御部21に通知する。アームタスク23は、ロボット30の動作を規定する「目標軌道および動作プログラム」などの情報を格納している。ロボット制御部21は、受信部22から通知された指示信号と、アームタスク23に格納されている「目標軌道および動作プログラム」などの情報とに基づき、ロボット30の動作を制御する。
§3.動作例
図3は、制御システム1において実行される処理の概要を示すフロー図である。図3に示すように、制御システム1においては、先ず、センサ情報取得部111によってセンサ情報統合処理(S110)が実行され、次に、人状態情報生成部112によって人存在領域計算処理(S120)が実行される。人軌道予測部113によって人軌道計算処理(S130)が実行されると、未来干渉判定部122は、人軌道計算処理の結果等を用いて、未来干渉判定処理(S140)を実行する。未来干渉判定部122による未来干渉判定処理の結果、作業者50とロボット30とが未来において干渉する可能性があると判定されると、制御指示調整部123によって制御指示調整処理(S150)が実行される。そして、制御指示調整処理の結果等を用いて、コントローラ20はロボット30を制御し、例えば、ロボット30のアームを制御する処理であるアームコントロール(S160)を実行する。
図4は、図3のフロー図における人軌道計算処理までの詳細を示すフロー図である。図4に示すように、図3のセンサ情報統合処理(S110)は、センサ40から、センサ40の計測した「作業者50の、時間ごとの(特に、現時点の)二次元位置または三次元位置」を示す測域データを取得する処理であるセンサ情報取得処理(S111)を含む。
前述の通り、センサ40が複数のセンサ(例えば、センサ40(1)およびセンサ40(2))を含む場合、センサ情報取得部111は、複数のセンサ40の各々から、複数のセンサ40の各々の測域データを取得する。そして、センサ情報取得部111は、取得した複数の測域データを統合する(測域データ統合処理、S112)。
図4に示すように、図3の人存在領域計算処理は、人推定処理(S121)、人重心計算処理(S122)、および、人重心バッファリング処理(S123)を含む。
先ず、人状態情報生成部112は、センサ情報取得部111から取得した測域データについて、ノイズ(作業者50以外の対象についての計測結果等)を除去し、測域データから作業者50の存在を示すデータだけを抽出する(人推定処理)。人状態情報生成部112は、例えば、人状態履歴データ131に格納された「作業者50の時間ごとの、位置」(の履歴)を用いて、センサ情報取得部111から取得した測域データ(作業者50の、現時点の位置を示すデータ)からノイズを除去する。
人状態情報生成部112は、ノイズ除去した測域データから、つまり、作業者50の存在を示すデータ(点群)から、作業者50の現時点の重心位置を計算する。例えば、人状態情報生成部112は、作業者50の存在を示す点群の平均から、作業者50の現時点の重心位置を算出する(人重心計算処理)。
人状態情報生成部112は、算出した作業者50の現時点の重心位置を、現在時刻と共に人状態履歴データ131に格納する(人重心バッファリング処理)。また、人状態情報生成部112は、人状態履歴データ131に格納済の「作業者50の、時間ごとの位置」(の履歴)と、作業者50の現時点の位置とから、作業者50の現時点の速度を算出する。人状態情報生成部112は、算出した「作業者50の、現時点の速度」を、「作業者50の、現時点の位置(重心位置)」および現在時刻と共に、人状態履歴データ131に格納する。
図3の人軌道計算処理は、図4に示すように、人軌道学習処理(S131)、学習結果を用いた人軌道予測処理(S132)、および、調停部への予測結果出力処理(S133)を含んでいる。
人軌道学習処理において、学習部114は、時刻ごとの(特に、現在の)、作業者50の位置(特に、重心位置)および速度ベクトルを入力とし、時刻ごとの、作業者50の加速度を出力とする学習用データについて、学習を行う。学習部114は、学習によって、学習済モデルとして予測用データを生成する。
人軌道予測処理において、人軌道予測部113は、作業者50の「現在の、位置および速度ベクトル」を、予測用データ(学習済モデル)に入力して、「未来の、作業者50の位置および速度ベクトル」を予測する。そして、人軌道予測部113は、人軌道予測処理の結果を、つまり、予測した「未来の、作業者50の位置および速度ベクトル」を、調停部120に通知する(S133)。
図5は、図3のフロー図における未来干渉判定処理からアームコントロール処理までの詳細を示すフロー図である。図3の未来干渉判定処理は、図5に示すように、ロボット軌道取得処理(S141)および未来の安全距離計算処理(S143)等を含んでいる。
ロボット軌道取得処理(S141)において、ロボット状態取得部121は、未来における「ロボット30の、位置および速度ベクトル」を取得し、取得した未来における「ロボット30の、位置および速度ベクトル」を、未来干渉判定部122に通知する。例えば、ロボット状態取得部121は、アームタスク23から、ロボット30に係る制御情報を取得し、取得した制御情報を解析して、未来(つまり、所定時間後)における「ロボット30の、位置および速度ベクトル」を取得する。
未来干渉判定部122は、人軌道予測の結果がバッファリングされているか、つまり、人軌道予測部113から「未来の、作業者50の位置および速度ベクトル」が通知されているか、を判定する(S142)。人軌道予測部113から「未来の、作業者50の位置および速度ベクトル」が通知されていない場合(S142でfalse)、未来干渉判定部122は未来の安全距離計算処理を実行ができず、その旨を、制御指示調整部123を介してコントローラ20に通知する。
人軌道予測部113から「未来の、作業者50の位置および速度ベクトル」が通知されている場合(S142でtrue)、未来干渉判定部122は、未来の安全距離計算処理(S143)を実行する。例えば、未来干渉判定部122は、作業者50およびロボット30の各々の未来における速度ベクトルにより、未来における安全距離を算出する。また、作業者50およびロボット30の各々の未来における位置により、未来における分離距離を算出する。未来干渉判定部122は、算出した未来における安全距離と、未来における分離距離と比較し、未来において安全距離が保たれるかを、つまり、未来における分離距離が未来における安全距離よりも大きいかを、判定する(S144)。
未来において安全距離が保たれる場合(S144でtrue)、未来干渉判定部122は、制御情報に従って動作するロボット30の動作を修正する必要はないと判定し、その旨を、制御指示調整部123を介してコントローラ20に通知する。未来において安全距離が保たれない場合(S144でfalse)、つまり、「作業者50とロボット30とが接触し得る」と判定すると、未来干渉判定部122は、「作業者50とロボット30とが接触し得る」との判定結果を、制御指示調整部123に通知する。
「作業者50とロボット30とが接触し得る」との判定結果を未来干渉判定部122から通知されると、制御指示調整部123は、安全軌道生成処理(S151)を実行する。例えば、制御指示調整部123は、未来における安全距離と、未来における分離距離とを比較して、ロボット30を停止させる指示信号を、または、ロボット30の速度および軌道の少なくとも一方を調整させる指示信号を、コントローラ20に送信する。
コントローラ20(特に、ロボット制御部21)は、ロボット30(例えば、ロボット30のアーム)の動作を制御するアームコントロール処理(S160)を実行する。受信部22が、干渉判定装置10から、未来の安全距離計算処理を実行していないとの報告、または、未来において安全距離が保たれるとの報告を受信すると、ロボット制御部21は、アームタスク23に格納されている制御情報に基づき、ロボット30を制御する。受信部22が、干渉判定装置10から、指示信号と作業者50とロボット30とが接触し得るとの報告とを受信すると、ロボット制御部21は、アームタスク23に格納されている制御情報に従ったロボット30に対する制御を、指示信号に従って修正する。
これまでに図3、図4、および図5を参照しながら説明してきた干渉判定装置10が実行する処理(言い換えれば、干渉判定装置10が実行するロボット干渉判定方法)は、以下のように整理することができる。すなわち、干渉判定装置10が実行する制御方法(ロボット干渉判定方法)は、所定の領域内に存在する作業者50(対象物)の、現時点(t0)までの位置の変化を示す情報(例えば、現時点における現在位置xh(t0)および現在速度ベクトルvh(t0))を取得する対象物状態取得ステップ(人存在領域計算処理、S120)と、ロボット30(ロボットにおける所定の可動部)の所定時間Δt後における予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)を取得するロボット状態取得ステップ(ロボット軌道取得処理、S141)と、作業者50の現時点までの位置の変化を示す情報に基づいて、所定時間Δt後における作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を算出する予測ステップ(人軌道予測処理、S132)と、作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)と、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)とに基づき、作業者50とロボット30との接触が生じる可能性があるか否かをリアルタイムで判定する干渉判定ステップ(S144)と、を含んでいる。
前記の方法によれば、前記ロボット干渉判定方法は、「作業者50の、現時点までの位置の変化を示す情報」を取得し、この「現時点までの位置の変化を示す情報」を用いて、所定時間Δt後における作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)を予測する(算出する)。「作業者50の、現時点までの位置の変化を示す情報」は、例えば、作業者50の現在位置xh(t0)および現在速度ベクトルvh(t0)である。また、図15の表において入力として示す各種の情報も、各々、前記対象物の、現時点までの位置の変化を示す情報の例である。
そして、前記ロボット干渉判定方法は、算出した作業者50の予測位置xh(t0+Δt)および予測速度ベクトルvh(t0+Δt)と、ロボット30の予測位置xr(t0+Δt)および予測速度ベクトルvr(t0+Δt)とに基づき、作業者50とロボット30との接触が生じる可能性があるか否かをリアルタイムで判定する。
前記ロボット干渉判定方法は、安全柵を用いずにロボット30と作業者50との干渉を回避することができるので、生産現場等の省スペース化を実現することができる。
また、前記ロボット干渉判定方法は、ロボット30と作業者50との、所定時間Δt(つまり、未来)における干渉の可能性を現時点t0で判定するので、干渉の可能性があると判定した場合にも、干渉回避のための処理を現時点t0で余裕を持って実行できる。
ここで、現時点t0での干渉の可能性を現時点t0で判定する装置が、現時点t0での干渉の可能性があると判定した場合、現時点t0での干渉を回避するためには、ロボット30の急減速および急停止等の動作が必要となり、どうしても生産効率が低下する。
これに対し、前記ロボット干渉判定方法は、未来における干渉の可能性を現時点t0で判定するので、現時点t0での干渉の可能性を現時点t0で判定する場合に比べて、干渉を回避するために必要なロボット30の動作を、円滑かつ必要最小限のものにすることができる。つまり、前記ロボット干渉判定方法は、ロボット30と作業者50との干渉を回避しつつ、ロボット30の急減速および急停止等による生産効率の低下を抑制することができる。
したがって、前記ロボット干渉判定方法は、工場等の生産現場において、例えば作業者50等である人(対象物)とロボット30との干渉を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
(学習処理および人軌道予測処理について)
図6は、干渉判定装置10が実行する学習処理と、学習処理の結果を利用した人軌道予測処理とについて説明する図である。具体的には、図6の(A)は、干渉判定装置10(特に、学習部114)が実行する学習処理を、図6の(B)は、干渉判定装置10(特に、人軌道予測部113)が実行する人軌道予測処理を、示している。
(学習処理について)
学習部114は、人状態履歴データ131に格納された「作業者50の時間ごとの、位置(重心位置)」(の履歴)を用いて、以下の式により、「作業者50の時間ごとの、速度ベクトルおよび加速度ベクトル」を計算する。すなわち、「xt」を「時刻tにおける、作業者50の位置(重心位置)」とし、「vt」を「時刻tにおける、作業者50の速度ベクトル」とし、「Δt」を「微小時間」として、vtは、
と定義する。
また、「時刻tにおける、作業者50の加速度ベクトル」を示す「at」は、
と定義する。
学習部114は、上述の数式1および2を用いて計算した、「時刻tにおける、作業者50の速度ベクトルvtおよび加速度ベクトルat」と、「時刻tにおける、作業者50の位置(重心位置)xt」について、図6の(A)に示す学習を行う。すなわち、学習部114は、時刻tにおける位置xtおよび時刻tにおける速度ベクトルvtの入力に対し時刻tの加速度ベクトルatの出力を学習する。学習部114は、例えば、DBTと呼ばれる学習アルゴリズムを用いた学習の結果として、予測用データを生成する。
(人軌道予測処理について)
図6の(B)に示すように、人軌道予測部113は、例えばDBTを用いた学習により学習部114が生成した学習済モデル(予測用データ)を用いて、「時刻tにおける、作業者50の加速度ベクトルの予測値apt」を取得する。すなわち、人軌道予測部113は、予測用データ(学習済モデル)に、「時刻tにおける、作業者50の位置xt」および「時刻tにおける、作業者50の速度ベクトルvt」を入力して、「時刻tにおける、作業者50の加速度ベクトルの予測値apt」を取得する(第1予測処理)。そして、人軌道予測部113は、「時刻t+Δtにおける、作業者50の速度ベクトルvt+Δt」および「時刻t+Δtにおける、作業者50の位置xt+Δt」の各々を以下の式により計算する(第2予測処理)。すなわち、「xt」を「時刻tにおける、作業者50の位置(重心位置)」とし、「vt」を「時刻tにおける、作業者50の速度ベクトル」とし、「apt」を「時刻tにおける予測加速度ベクトル」とし、「Δt」を「微小時間」として、vt+Δtは、
として計算される。
また、「時刻t+Δtにおける、作業者50の位置」を示す「xt+Δt」は、
として計算される。
人軌道予測部113は、第1予測処理および第2予測処理を繰り返すことによって、人軌道予測を、つまり、作業者50の位置(重心位置)の変化の軌跡の予測を行う。
(未来干渉判定処理について)
図7は、干渉判定装置10が実行する未来干渉判定処理の一例を説明する図である。干渉判定装置10は、例えば、ISO/TC15066の5.5.4.2.3に規定される「安全距離Sp」との概念を用いて、未来干渉判定処理を実行する。安全距離Spの概念について、以下に概要を説明する。
(安全距離Spについて)
或る時点(時刻t0)において、センサ等により、その或る時点における「人の、速度ベクトル(vh(t0))および位置(xh(t0))」と、その或る時点における「ロボット(ロボット可動部)の、速度ベクトル(vr(t0))および位置(xr(t0))」とを取得する。時刻t0時点における、ロボットの速度ベクトルvr(t0)および位置xr(t0)は、ロボットの制御情報を用いて算出してもよい。
xh(t0)とxr(t0)との差により、その或る時点の「人とロボットとの分離距離(Dr(t0))」を算出する。また、vh(t0)とvr(t0)とにより、以下に示す安全距離計算公式を用いて、その或る時点における「人に接触する前にロボットが停止するための、所要の最短距離(最短安全許容距離(Sp(t0)))」を算出する。そして、Dr(t0)とSp(t0)とを比較し、「Dr(t0)がSp(t0)よりも大きい」場合、人とロボットとは干渉しないと判定し、「Dr(t0)がSp(t0)以下である」場合、干渉すると判定をする。
ISO/TC15066の5.5.4.2.3において、安全距離Spは、以下の安全距離計算公式により定義される。すなわち、或る時点(時刻t0)における安全距離Sp(t0)は、「Sp(t0)=Sh+Sr+Ss+c+Zd+Zr」と規定されている。以下の説明において、或る時点(時刻t0)は、「センサ(例えば、センサ40)が人(例えば、作業者50)を検知した時間(時刻)」とも言い換えることができる。また、以下の説明において、時刻t0からTr経過した「時刻t0+Tr」において、ロボット(例えば、ロボット30)が停止動作を開始し始めるものとし、ロボットが停止するのはさらにTsが経過した「時刻t0+Tr+Ts」であるものとする。また、ロボットが停止動作を開始し始めてから、ロボットが停止するまでのロボットの速度ベクトルを、つまり、減速動作中のロボットの速度ベクトルを、「vs(t)」と表わすものとする。減速動作中のロボットの速度ベクトルvs(t)は、ロボットの制御情報を用いて算出してもよい。
図7に示すように、上述の安全距離計算公式において、「Sh」は、「現時点(時刻t0)からロボットの移動が停止する時点(t0+Tr+Ts)までに、人が移動する距離」を示しており、つまり、
である。
「Sr」は、「現時点(時刻t0)からロボットが停止動作を開始する時点t0+Trまでに、ロボットが移動する距離」を示しており、つまり、
である。
「Ss」は、「ロボットが停止動作を開始する時点t0+Trからロボットの移動が停止する時点t0+Tr+Tsまでに、ロボットが移動する距離」を示しており、つまり、
である。
また、上述の安全距離計算公式において、「c」は、「Depth penetration factor」と呼ばれる、人の中心(重心)等の検知位置から、その人の腕などの部分までの距離を示している。「Zd」は「人体を検知するセンサの測定誤差」を示しており、「Zr」は「ロボット制御における制御位置の誤差」を示している。
安全距離Spの概念において、或る時点(時刻t0)の分離距離Dr(t0)と、或る時点における、人およびロボットの各々の速度ベクトル(vh(t0)およびvr(t0))から算出される最短安全許容距離Sp(t0)との大小が判定される。時刻t0における分離距離Dr(t0)が、最短安全許容距離Sp(t0)よりも大きいと、人とロボットとは干渉しないと判定され、Dr(t0)がSp(t0)以下であると、干渉すると判定される。
図7に例示される通り、分離距離Dr(t0)と最短安全許容距離Sp(t0)とが等しい場合、「ロボットの移動が停止する時点(t0+Tr+Ts)における、人の位置(推定位置)」と、「ロボットの移動が停止する時点(t0+Tr+Ts)における、ロボットの位置(推定位置)」との差(距離)は、「c+Zd+Zr」に一致することになる。図7に示すように、「ロボットの移動が停止する時点(t0+Tr+Ts)における、人の推定位置」は、「人が、現時点(時刻t0)の位置からShだけ移動した位置」である。また、「ロボットの移動が停止する時点における、ロボットの推定位置」は、「ロボットが、現時点(時刻t0)の位置からSr+Ssだけ移動した位置」である。
ここで、c、Zd、Zrの各々を予め求めておくことにより、「c+Zd+Zr」は所定値として扱うことができる。つまり、安全距離Spの概念は、ロボットの移動停止時点(t0+Tr+Ts)における、人の推定位置とロボットの推定位置との距離が、所定値(c+Zd+Zr)以下(以内)となると、人とロボットとが干渉すると判定するものと理解することができる。
(干渉判定装置への適用)
干渉判定装置10は、未来(t0+Δt)における「作業者50の位置および速度ベクトル」と、未来における「ロボット30の位置および速度ベクトル」とを用いて、未来における最短安全許容距離Sp(t0+Δt)を算出する。そして、干渉判定装置10は、未来(t0+Δt)における最短安全許容距離Sp(t0+Δt)を用いて、未来における作業者50とロボット30との干渉の可能性を判定する。
具体的には、先ず、人軌道予測部113が、「現時点(つまり、時刻t0)の、作業者50の位置および速度ベクトル」を、学習部114が生成した予測用データに入力して、「未来(t0+Δt)における、作業者50の位置および速度ベクトル」を予測する。また、ロボット状態取得部121は、制御情報を解析して、未来(t0+Δt)における「ロボット30の、位置および速度ベクトル」を取得する。
次に、未来干渉判定部122は、未来(t0+Δt)における、作業者50およびロボット30の各々の「位置および速度ベクトル」から、ロボットの移動停止時点(t0+Δt+Tr+Ts)における、作業者50およびロボット30の各々の位置を算出する。未来干渉判定部122は、未来における、作業者50およびロボット30の各々の「位置および速度ベクトル」から、安全距離計算公式により、ロボットの移動停止時点における、作業者50およびロボット30の各々の推定位置を算出する。未来干渉判定部122は、ロボットの移動停止時点(t0+Δt+Tr+Ts)における、作業者50の推定位置とロボット30の推定位置との距離が、所定値(c+Zd+Zr)以下であると、人とロボットとが干渉すると判定する。
未来干渉判定部122により、人とロボットとが干渉すると判定されると、制御指示調整部123は、両者の干渉を回避するよう指示する指示信号を生成し、例えば、未来における最短安全許容距離Sp(t0+Δt)を小さくするよう指示する指示信号を生成する。言い換えれば、制御指示調整部123は、ロボット30の移動速度および軌道の少なくとも一方を調整して、ロボットの移動停止時点(t0+Δt+Tr+Ts)における、ロボット30の推定位置を修正する指示信号を生成する。制御指示調整部123は、ロボットの移動停止時点(t0+Δt+Tr+Ts)における、作業者50の推定位置とロボット30の推定位置との距離を、所定値(c+Zd+Zr)よりも大きくするための指示信号を、コントローラ20に送信する。
干渉判定装置10は、各時点で、「各時点の未来における、作業者50およびロボット30の各々の、位置および速度ベクトル」を用いて、作業者50とロボット30との干渉の可能性を判定する。そして、干渉の可能性があると判定した時点で、干渉判定装置10は、例えばロボット30の移動速度および軌道の少なくとも一方を調整して、未来における最短安全許容距離Sp(t0+Δt)を小さくさせる。
図7を用いて説明してきた「安全距離Sp」との概念、および、この概念の干渉判定装置10への適用は、以下のように整理することができる。すなわち、干渉判定装置10において、未来干渉判定部122は、現時点(t0)から所定時間Δtが経過した時点(t0+Δt時点)から、ロボット30が移動停止動作を開始し、ロボット30の移動が停止するまでの時間における、作業者50の推定位置とロボット30の推定位置との距離が所定値以内となる場合に、作業者50とロボット30との接触が生じる可能性があると判定する。
前記の構成によれば、干渉判定装置10は、現時点t0から所定時間Δtが経過した時点(t0+Δt時点)から、ロボット30の移動が停止する時点までのいずれかの時点において、作業者50の推定位置とロボット30の推定位置との距離が所定値以内となると、作業者50とロボット30との接触が生じる可能性があると判定する。
つまり、干渉判定装置10は、ロボット30の移動が停止した時点での作業者50の推定位置とロボット30の推定位置との距離だけでなく、その途中までの各時点における作業者50の推定位置とロボット30の推定位置との距離を用いて、前述の判定を行う。
したがって、干渉判定装置10は、「現時点t0から所定時間Δtが経過した時点であるt0+Δt時点」から、「ロボット30の移動が停止する時点」までの各時点における接触の可能性を考慮した判定を行うことができるとの効果を奏する。
(指示信号について)
制御指示調整部123は、未来干渉判定部122によって「作業者50とロボット30とが接触し得る」と判定されると、作業者50とロボット30との干渉を回避するよう指示する指示信号を、コントローラ20に送信する。制御指示調整部123は、以下のような指示信号をコントローラ20に送信することによって、干渉回避動作によるロボット30の生産性低下を回避・抑制してもよい。
(生産性を向上するための調整)
干渉判定装置10は、「未来において、接触が発生し得る」との判定を「t=t0」の時点において下した場合、未来における接触を回避するために、ロボット30の速度および軌道の少なくとも一方の調整を、「t=t0」の時点において実行する。
干渉判定装置10は、「t=t0」の時点での調整後に、「未来において、接触が発生し得る」との判定を「t=t0+t’」の時点において下した場合、未来における接触を回避するために、ロボット30の速度および軌道の少なくとも一方の調整を、「t=t0+t’」の時点で実行する。
干渉判定装置10は、「t=t0」の時点での調整後に、「未来において、接触は発生しない」との判定を「t=t0+t’」の時点において下した場合、生産性を向上するための調整を、ロボット30の速度および軌道の少なくともについて、「t=t0+t’」の時点で実行する。生産性を向上するための調整とは、例えば、ロボット30の速度(加速)および軌道の少なくとも一方を、「t=t0」の時点での調整の前の状態に戻す調整である。
すなわち、干渉判定装置10において、制御指示調整部123による前記調整指示の後に、未来干渉判定部122が、作業者50とロボット30との接触が生じる可能性がないと判定した場合に、制御指示調整部123は、コントローラ20に対して、ロボット30の移動速度および軌道の少なくともいずれか一方を、前記調整指示が行われる前の状態に戻す指示を示す前記指示信号を送信してもよい。
前記の構成によれば、干渉判定装置10は、前記調整指示の後に、作業者50とロボット30との接触が生じる可能性がなくなると、ロボット30の移動速度および軌道の少なくとも一方を、調整の前の状態に戻すように、コントローラ20に指示する。したがって、干渉判定装置10は、前記調整指示の後に、作業者50とロボット30との接触が生じる可能性がなくなると、ロボット30の移動速度および軌道の少なくとも一方を、調整の前の状態に戻すことができるとの効果を奏する。
(距離に応じた調整内容)
「未来において、接触が発生し得る」と判定した場合であっても、ロボット30の動作を停止するのではなく、ロボット30の速度および軌道の少なくとも一方を調整すれば接触を回避できるときには、干渉判定装置10は、ロボット30の動作を停止させない。干渉判定装置10は、ロボット30の速度および軌道の少なくとも一方を調整して、ロボット30と作業者50との接触を回避する。
ロボット30の速度および軌道の少なくとも一方を調整しただけでは接触を回避できないと判定した場合、干渉判定装置10は、ロボット30の動作を停止させる。例えば、ロボット30と作業者50との距離が予め設定しておいた制限距離以下となって、ロボット30の速度および軌道の少なくとも一方を調整しただけでは接触を回避できないと判定した場合、干渉判定装置10は、ロボット30の動作を停止させる。
すなわち、干渉判定装置10において、未来干渉判定部122が、作業者50とロボット30との接触が生じる可能性を示す可能性評価値が第1の閾値以上であると判定した場合に、制御指示調整部123は、コントローラ20に対して、ロボット30の移動速度および軌道の少なくともいずれか一方の調整指示を示す前記指示信号を送信する。また、前記可能性評価値が、前記第1の閾値よりも高い第2の閾値以上となったと未来干渉判定部122が判定した場合に、制御指示調整部123は、コントローラ20に対して、ロボット30を停止させる指示を示す前記指示信号を送信する。
前記の構成によれば、干渉判定装置10は、前記可能性評価値が第1の閾値以上であると、ロボット30の移動速度および軌道の少なくとも一方の調整を指示し、前記可能性評価値が第2の閾値以上となると、ロボット30の停止を指示する。つまり、干渉判定装置10は、作業者50とロボット30との接触が生じる可能性に応じて、ロボット30の移動を制御する。作業者50とロボット30との接触が生じる可能性がそれほど高くない(つまり、第1の閾値以上で第2の閾値未満である)場合、干渉判定装置10は、ロボット30を停止させずに、ロボット30の移動速度および軌道の少なくともいずれか一方を調整する。作業者50とロボット30との接触が生じる可能性が第2の閾値以上である場合、干渉判定装置10は、ロボット30を停止させる。
したがって、干渉判定装置10は、接触が生じる可能性に応じて、接触を回避するに必要十分な動作をロボット30に実行させるので、接触を回避しつつ、生産効率およびスペース効率の低下を抑制することができるとの効果を奏する。
(制御システムの適用環境について)
図8は、制御システム1を適用する環境の一例を示す図である。制御システム1を適用する環境として、例えば、図8に示すような、作業者50とロボット30とがそれぞれ机の前で作業し、作業の成果物を手前のベルトコンベアに流す状況を想定することができる。図8に示す例では、通路と作業領域との間の距離が1.6m程度であって、ベルトコンベアが存在すると仮定し、また、作業者50が立って作業できるように机の高さを1mと想定した。図8に示す例では、作業者50を挟むように、作業者50の両脇にセンサ40を配置することによって、センサ40によって検出することのできない作業者50の領域をできるだけ小さくした。
センサ40の配置に際しては、センサ40を配置する高さについて、以下の点に留意した。すなわち、センサ40を作業者50の頭の高さに配置するのは、センサ40のレーザなどの測定波が作業者50の目に入射する可能性があるため、望ましくない。センサ40を作業者50の腰の高さに配置するのは、体幹計算(つまり、重心位置の算出)の結果が作業者50の状態に左右されにくいため、望ましい。センサ40を作業者50の太ももの高さに配置するのは、太ももの開き具合により体幹計算の結果がずれるため、望ましくない。センサ40を作業者50のくるぶしの高さに配置するのは、作業者50の足の幅(足をどの程度開いているか)によって体幹計算の結果がずれるため、望ましくない。
(重心の算出方法について)
図9は、センサ40の計測結果を利用して作業者の重心を算出する方法の一例を説明する図である。図9において、星印は作業者50の重心の位置(重心位置)を示しており、星印の周囲を囲む各点は、測域データが示す作業者50の存在位置(作業者50の存在を示す点)を示している。人状態情報生成部112は、図9に示すような作業者50の存在を示す点群から、公知の重心算出方法を利用して、星印で示す作業者50の重心位置を算出する。
(学習処理および人軌道予測処理についての留意点)
人軌道予測処理、および、人軌道予測処理の実行に際して利用する学習済モデルを生成する学習処理について、干渉判定装置10は、具体的には以下に示す処理を実行する。人状態情報生成部112は、「作業者50の時間ごとの、重心位置(体幹位置)」を取得し、この「作業者50の時間ごとの、重心位置(体幹位置)」の履歴から、学習部114が学習する学習用データが生成される。学習部114は、「作業者50の時間ごとの、重心位置(体幹位置)」の履歴から、「学習用フィルタ前データ(つまり、フィルタ処理の実行前の学習用データ)」を生成し、この学習用フィルタ前データを整形して、「学習用フィルタ済データ」を取得する。そして、学習部114は、この学習用フィルタ済データについて学習を行い、学習済モデルとして、「予測用フィルタ前データ」を生成する。人軌道予測部113は、「予測用フィルタ前データ」を整形して「予測用フィルタ済データ」を取得し、この「予測用フィルタ済データ」を用いて、「未来の、作業者50の重心の位置および速度ベクトル」を予測する。以下、図10および図11の各々を用いて、学習用データおよび予測用データの各々について、整形処理(フィルタ処理)を説明する。
(学習用データの整形について)
図10は、学習処理の前に実行する学習用データの整形方法の一例を示す図である。学習部114は、以下の2つの方針に従って、学習用データの整形を実行する。第一に、学習部114は、学習用データの整形に際して、元のデータ(つまり、学習用フィルタ前データ)にできるだけ沿うような波形を、「学習用フィルタ済データ」として生成する。
また、図10の(A)に示すように、「実測値の加速度(つまり、フィルタ前の加速度)」は、ほぼノイズのようなデータとなる。そこで、第二に、学習部114は、図10の(B)に示す「フィルタ済の加速度」を、図10の(B)に示す「フィルタ済の速度」から計算して取得する。
学習部114は、例えばバッチ学習をする場合、未来のデータも用いて、重み付け移動平均フィルタを適用して、学習用フィルタ前データから学習用フィルタ済データを生成する。学習部114は、生成した学習用フィルタ済データを学習用データとして、これを学習する。
(予測用データの整形について)
図11は、学習処理によって生成した予測用データの整形方法の一例を示す図である。人軌道予測部113は、以下の2つの方針に従って、予測用データの整形を実行する。第一に、人軌道予測部113は、リアルタイムで予測を実行するため、過去のデータ(現時点よりも前の予測用データ)のみを用いる。
また、図11の(A)に示すように、「フィルタ前の加速度」は、ほぼノイズのようなデータとなる。そこで、第二に、人軌道予測部113は、図11の(B)に示す「フィルタ済の加速度」を、図11の(B)に示す「フィルタ済の速度」から計算して取得する。
人軌道予測部113は、学習部114による学習用データの整形と同様に、重み付け移動平均フィルタを適用して、予測用フィルタ前データから予測用フィルタ済データを生成する。人軌道予測部113は、生成した予測用フィルタ済データを学習済モデルとして用いて、「現在の、作業者50の重心の位置および速度ベクトル」を入力して、「未来の、作業者50の重心の位置および速度ベクトル」を予測する。
(人軌道予測処理の精度について)
工場等の生産現場では主に反復動作が行われると考えられるため、簡単な反復動作を予測対象として、干渉判定装置10の実行する人軌道予測処理について、予測精度を実験によって検証した。具体的には、「1分間に30往復程度、その場で体を左右に揺らし、体幹(重心)の移動範囲は約30cm」という内容の反復動作について、実験を行った。
図12は、干渉判定装置10が実行する人軌道予測処理の精度を示す図であり、特に、0秒時点での予測用データから2秒先まで予測した結果の抜粋を示している。図12に示すように、ヒト位置予測結果が約0.5秒あたりまでは高精度な予測ができていることを確認することができた。
図13は、干渉判定装置10が実行する人軌道予測処理の精度を示す、図12とは別の図である。具体的には、図13は、予測モデル(関数)の精度の確認方法として、クロスバリデーションを実施した場合の結果を示している。すなわち、先ず、センサ40によって測定したデータを、トレーニングセットとテストセットとに分けた。次に、トレーニングセットを用いて構築した予測モデル(関数)に、テストセットの説明変数を代入して、目的変数の計算値を取得した。そして、取得した計算値と、テストセットの目的変数の測定値とを比較した。その際、予測値と実測値との絶対誤差を計算し、予測結果の数だけ平均を計算した。
図12に示すのと同様に、図13に示す検証結果においても、ヒト位置予測結果が約0.5秒あたりまでは高精度な予測ができていることを確認することができた。
§4.変形例
(人位置検出方法について)
図14は、図8に例示したセンサ40の配置例とは異なる、センサ40の配置例を示す図である。図8に例示したように、複数または単数のセンサ40を作業者50の近傍に設置してもよいし、図14の(A)に例示するように、複数または単数のセンサ40をロボット30に設置してもよい。また、図14の(B)Bに例示するように、複数または単数のセンサ40を生産現場等の天井に設置してもよい。
(学習および人軌道予測について)
これまで、人軌道予測部113が、学習部114による作業者50の状態履歴の学習の結果を用いて、「現在の、作業者50の重心の位置および速度ベクトル」から、「未来の、作業者50の重心の位置および速度ベクトル」を予測する例を説明してきた。しかしながら、「未来の、作業者50の重心の位置および速度ベクトル」を予測するのに、学習部114による学習の結果を用いることは、人軌道予測部113にとって必須ではない。
例えば、人軌道予測部113は、単純予測によって、つまり、「現在の、作業者50の速度ベクトル」が不変であると想定して、「未来の、作業者50の位置および速度ベクトル」を予測してもよい。
また、学習部114による作業者50の状態履歴の学習について、学習用データは図6の(A)に示すものに限られるものではない。図15に、学習部114が学習する学習用データの例を示す。
図15は、干渉判定装置10が学習する学習用データの例を示す図である。図15において、「x」は「人(作業者50)の重心の位置(重心位置)」を、「v」は「人(作業者50)の重心の速度」を、「a」は「人(作業者50)の重心の加速度」を示している。また、「t」は「現在時刻」を、「c」は「時刻tまでに人が停止した時間」を示している。図15に示す表において、各データは、一次元ないし二次元のデータとする。図15において、複数時刻のデータを扱っているパターンではサンプリング間隔は線形だけでなく非線形な場合もあり、また、入力と出力とのサンプリング間隔が異なるパターンもある。図15に示す表における各データは、例えば、重み付き移動平均による整形データであるものとする。
図15に示すように、学習部114は、各時点における、作業者50の位置xh(t)、速度ベクトルvh(t)、および、加速度ベクトルah(t)の少なくとも1つの履歴を学習する。図15には、学習用モデルについて、作業者50の各時点における位置、速度ベクトル、および、加速度ベクトルの少なくとも1つの履歴(「現時点の、位置、速度ベクトル、および、加速度ベクトルの少なくとも2つ」を含む)を入力とする例が示されている。同様に、図15には、学習用モデルについて、「作業者50の各時点における位置の履歴」または「現時点の加速度ベクトル」を出力とする例が示されている。
前述の通り、学習部114は、例えば、作業者50の現在位置および現在速度ベクトルの少なくともいずれか一方を入力とし、作業者50の加速度またはその後の位置を出力とする学習用データについて、学習を行う。
ただし、学習部114の行う学習はこれに限られるものではない。図15に例示するように、学習部114は、「作業者50(対象物)の、現時点までの位置の変化を示す情報」を入力とし、「作業者50の、未来における位置の変化を示す情報」を出力とする学習データを学習すればよい。
(学習アルゴリズムについて)
また、これまでに説明してきた例では、学習部114が学習アルゴリズムとしてDBT(Deep Binary Tree)を利用する例について説明してきたが、学習部114が利用する学習アルゴリズムは、DBTに限られるものではない。学習部114はニューラルネットワーク等を用いた学習を実行し、学習済モデルとして、予測用データを生成してもよい。
〔ソフトウェアによる実現例〕
干渉判定装置10の機能ブロック(具体的には、センサ情報取得部111、人状態情報生成部112、人軌道予測部113、学習部114、識別部115、ロボット状態取得部121、未来干渉判定部122、および、制御指示調整部123)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(CenTral Processing Unit)を用いてソフトウェアによって実現してもよい。
後者の場合、干渉判定装置10は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
〔実施形態2〕
本発明の他の実施形態について、以下に説明する。なお、説明の便宜上、上記実施形態にて説明した部材と同じ機能を有する部材については、同じ符号を付記し、その説明を繰り返さない。実施形態1では、作業者とロボットとの干渉を回避する例を説明した。ただしこれに限らず、作業者の軌道の予測結果を他の目的に使用してもよい。
そもそも、ニューラルネットワーク等を用いた学習アルゴリズム(例えばDeep Learning等)では、追加学習によって学習済モデルの更新を行うために、学習のためのパラメータを手動で調整する必要がある。作業者(人)が同じ作業を繰り返し行う場合であっても、作業者の動作パターンは、作業者の疲労等に応じて変化し得る。そのため、精度の高い予測を行うためには、学習済モデルの更新を行う必要がある。しかしながら、手動でパラメータ調整が必要な学習アルゴリズムを用いると、リアルタイムで学習済モデルの更新を適切に行うことが難しい。
一方で、DLT(Dynamics Learning Tree)またはDBT(Deep Binary Tree)のような学習アルゴリズムは、パラメータ調整を必要としないオンライン追加学習により学習済モデルを更新する。それゆえ、DLTまたはDBTを学習アルゴリズムとして用い、リアルタイムで学習済モデルの更新を行うことで、作業者の動作を適切に予測することができる。ここで、オンライン追加学習は、単にネットワークを介して追加学習を行うことを指すのではなく、現場で生じる新しいデータ(人の動き)を用いてリアルタイムで追加学習を行うことを指している。
[構成例]
(人動作予測装置の構成)
図16は、人動作予測装置60の要部構成を示すブロック図である。人動作予測装置60は、人軌道処理部110、および記憶部130を備える。人軌道処理部110は、作業者50の未来の「位置(二次元位置または三次元位置)および速度ベクトル」の予測を実行し、予測した作業者50の未来の「位置および速度ベクトル」を、外部の他の装置に出力する。他の装置は、サーバ、ロボットを制御するコントローラ、または表示装置等であってよい。
人動作予測装置60の一態様では、人軌道予測部113は、所定期間における作業者50の位置の履歴を学習済モデル(予測用データ)の入力として、学習済モデルの更新および「未来の、作業者50の位置」の予測を行う。
人状態情報生成部112は、複数の作業者50の各々の「時間ごとの、位置」の履歴を人状態履歴データ131に格納する。人状態情報生成部112は、生成した、複数の作業者50の各々の「現在の、位置」を、人軌道予測部113に通知する。また、人状態情報生成部112は、「現在を含む所定期間における作業者50の位置」(位置の履歴)を、人軌道予測部113に通知する。
人軌道予測部113は、人状態情報生成部112から通知される「現在を含む所定期間における作業者50の位置」を、学習部114が生成した学習済モデル(予測用データ)に入力して、「未来の、作業者50の位置」を予測する。
ここで、人軌道予測部113は、例えば、人状態情報生成部112から通知される「現在を含む所定期間における作業者50の位置」(位置の履歴)を用いて、「未来の、作業者50の重心の位置」を予測する。
言い換えれば、人軌道予測部113は、現在までの作業者50の重心位置を示す情報から、作業者50の未来の(つまり、将来の)人軌道(重心位置の移動を示す軌道)を予測する。
学習部114は、所定期間における時刻ごとの作業者50の位置(特に、重心位置)を入力とし、所定期間より後の作業者50の位置を出力とする学習用データについて、学習を行う。学習部114は、例えばDLTまたはDBTと呼ばれる学習アルゴリズムを用いて、学習済モデルを生成する。また、実運用を開始した後(一度、学習済モデルを生成した後)、学習部114は、該学習アルゴリズムを用いて、学習済モデルを更新する。
[動作例]
図4に示す処理フローと同様に、人動作予測装置60では、センサ情報取得部111によってセンサ情報統合処理(S110)が実行され、人状態情報生成部112によって人存在領域計算処理(S120)が実行され、人軌道予測部113によって人軌道計算処理(S130)が実行される。ただし、予測結果出力処理(S133)では、実施形態1の調停部の代わりに他の装置へ予測結果が出力される。
(学習済モデルの更新)
人軌道学習処理(S131、学習ステップ)において、学習部114は、所定期間における時刻ごとの作業者50の位置(位置の履歴)を入力とし、所定期間より後の作業者50の位置を出力とする学習用データについて、学習を行う。学習部114は、学習によって、学習済モデルを更新する。
より具体的には、学習部114は、所定期間における「作業者50の時間ごとの、重心位置(体幹位置)」の履歴から、「学習用フィルタ前データ(つまり、フィルタ処理の実行前の学習用データ)」を生成し、この学習用フィルタ前データを整形して、「学習用フィルタ済データ」を取得する。学習部114は、学習用フィルタ前データに、学習用時間方向重み付きフィルタ(第2時間方向重み付きフィルタ)を適用し、学習用フィルタ済データを生成する。学習用時間方向重み付きフィルタは、時間方向の重み付き移動平均フィルタであり、例えば以下で示される。
Xt=0.1xt-2+0.2xt-1+0.4xt+0.2xt+1+0.1xt+2
xは学習用フィルタ前データにおける位置を示し、添字tは時刻を示し、Xは学習用フィルタ済データにおける位置を示す。学習用時間方向重み付きフィルタは、対象時刻tの前後を含む期間(時刻t-2からt+2)における位置xの履歴に重みを付けて平均したものを、対象時刻tのフィルタ後の位置Xtとする。
所定期間は、異なる複数の作業を順に行う作業者50の、複数の作業の期間が含まれるようにあらかじめ設定されている。学習部114は、この学習用フィルタ済データを学習済モデルに対する入力および出力として使用することで、学習済モデルを更新する。なお、学習済モデルを生成するときも、学習部114は、同様にして学習を行う。
(人軌道予測)
人軌道予測処理(S132)において、人軌道予測部113は、所定期間(現時点を含む)における時刻ごとの作業者50の位置(位置の履歴)を、学習済モデルに入力して、「未来の、作業者50の位置」を予測する。
より具体的には、人軌道予測部113は、所定期間における「作業者50の時間ごとの、重心位置(体幹位置)」の履歴から、「予測用フィルタ前データ(つまり、フィルタ処理の実行前の予測用データ)」を生成し、この予測用フィルタ前データを整形して、「予測用フィルタ済データ」を取得する。人軌道予測部113は、予測用フィルタ前データに、予測用時間方向重み付きフィルタ(第1時間方向重み付きフィルタ)を適用し、予測用フィルタ済データを生成する。予測用時間方向重み付きフィルタは、時間方向の重み付き移動平均フィルタであり、例えば以下で示される。
Xt=0.05xt-4+0.05xt-3+0.1xt-2+0.2xt-1+0.6xt
xは予測用フィルタ前データにおける位置を示し、添字tは時刻を示し、Xは予測用フィルタ済データにおける位置を示す。予測用時間方向重み付きフィルタは、対象時刻t以前の期間(時刻t-4からt)における位置xの履歴に重みを付けて平均したものを、対象時刻tのフィルタ後の位置Xtとする。
所定期間は、異なる複数の作業を順に行う作業者50の、複数の作業の期間が含まれるようにあらかじめ設定されている。人軌道予測部113は、この予測用フィルタ済データを学習済モデルに対する入力として使用することで、学習済モデルの出力として現時点より未来の作業者50の位置を得る。また、人軌道予測部113は、予測した未来の作業者50の位置を用いてさらに未来の作業者50の位置を予測することもできる。このようにして、人軌道予測部113は、「未来の、作業者50の位置」を予測する。
ここでは、学習用時間方向重み付きフィルタが予測用時間方向重み付きフィルタと異なる例を示したが、同じフィルタ(予測用時間方向重み付きフィルタ)を用いてもよい。
(参考例の予測結果)
図17は、参考例の入力データと予測結果とを示す図である。横軸は時間[s]を示し、縦軸は作業者50の位置(x座標、y座標)[m]を示す。時刻t1が現時点であり、時刻t1以前の所定期間P1における作業者50の位置(x軸入力値、y軸入力値)が、直近の未来を予測するために学習済モデルへの入力データとして用いられる。時刻t1より後のx軸予測値、y軸予測値は、学習済モデルも出力として得られた作業者50の位置の予測結果である。時刻t1より後のx軸実測値、y軸実測値は、後に実際に測定された作業者50の位置を示す。なお位置のデータは0.04秒毎のデータである。
参考例では、所定期間P1は、作業者50の予測直前の1つの作業Aの時間が含まれる程度に短く設定されている。1つの作業においては、作業者50はあまり動かない場合がある。そのような場合、予測の精度が低下し、予測値(ここではy軸予測値)は実測値と大きく異なってしまうことがある。
(動作例の予測結果)
図18は、動作例の人動作予測装置60の入力データと予測結果とを示す図である。横軸は時間[s]を示し、縦軸は作業者50の位置(x座標、y座標)[m]を示す。時刻t2が現時点であり、時刻t2以前の所定期間P2における作業者50の位置(x軸入力値、y軸入力値)が、直近の未来を予測するために学習済モデルへの入力データとして用いられる。時刻t2より後のx軸予測値、y軸予測値は、学習済モデルも出力として得られた作業者50の位置の予測結果である。時刻t2より後のx軸実測値、y軸実測値は、後に実際に測定された作業者50の位置を示す。なお位置のデータは0.04秒毎のデータである。
動作例では、所定期間P2は、各作業の時間より長く設定されている。具体的には、所定期間P2は、作業者50の予測直前の1つの作業Aだけでなく、作業Aの前の作業Bの期間も含むように長く設定されている。そのため、学習済モデルへの入力データには、複数の作業A、Bに関する作業者50の位置の履歴が含まれる。また、入力データには、作業Aから別の作業Bへの遷移過程の作業者50の位置の履歴が含まれる。このように、予測直前の作業Aの前の作業Bにおける作業者50の情報も予測に使用することにより、予測の精度が向上する。動作例の予測値(x軸予測値、y軸予測値)は実測値とよく一致している。
(予測精度)
図19は、時間窓の幅と予測誤差との関係を示す図である。横軸は、時間窓の幅(入力データとして使用する所定期間の長さ)[s]を示す。縦軸は、未来のある時刻における作業者50の位置についての予測誤差(実測値と予測値との差)[m]を示す。時間窓の幅(所定期間P2の長さ)が小さいと、予測精度が落ちる(予測誤差が大きくなる)ことが分かる。一方で、異なる2つの作業A、Bを含む程度に時間窓の幅がある程度長ければ(この例では、8.96秒以上であれば)、時間窓の幅が少し変化しても、予測精度はあまり変わらない。
[変形例]
以上では、作業者50の位置の履歴を学習済モデルへの入力とし、未来の位置を出力させる例を説明したが、本発明はこれに限らない。例えば、作業者50の位置の履歴、速度ベクトルの履歴、および/または、加速度ベクトルの履歴を学習済モデルへの入力とし、未来の作業者50の位置、速度ベクトル、および/または、加速度ベクトルを学習済モデルからの出力としてもよい。作業者50の位置の履歴、速度ベクトルの履歴、および/または、加速度ベクトルの履歴は、作業者50の位置の変化を示す情報である。また、未来の期間の作業者50の位置の履歴、速度ベクトルの履歴、および/または、加速度ベクトルの履歴を学習済モデルからの出力としてもよい。
また、作業者50の位置は、作業者50の重心に限らず、作業者50の1つまたは複数の部位の位置であってもよい。
また、学習部114はニューラルネットワーク等を用いた学習を実行し、学習済モデルを生成してもよい。
〔ソフトウェアによる実現例〕
人動作予測装置60の機能ブロック(具体的には、センサ情報取得部111、人状態情報生成部112、人軌道予測部113、学習部114、および識別部115)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェアによって実現してもよい。
後者の場合、人動作予測装置60は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。