以下に、本開示の実施の形態にかかるロボット制御装置、ロボット制御方法、およびロボット制御プログラムを図面に基づいて詳細に説明する。
実施の形態1.
図1は、実施の形態1にかかるロボット制御装置を備えたロボットシステムの概略構成を示す図である。ロボットシステム100は、ロボット101と、ロボット101を制御するロボット制御装置200とを備えている。ロボット101は、ワーク103を保持して搬送する装置であり、ワーク103を保持する手先ツール102を備えている。ロボット101は、製品の生産などに用いられる。
ワーク103は、ロボット101による搬送対象である。ロボット制御装置200は、ロボット101が有する各モータを制御することで、各モータに接続された軸のそれぞれの動作を制御するコンピュータである。ロボット制御装置200は、ロボット101が有する軸の動作を制御することで、手先ツール102の位置を制御する。
なお、以下の説明では、ワーク103を保持した状態の手先ツール102を手先ツール102という。したがって、ロボット制御装置200は、手先ツール102を含むロボット101が障害物31に衝突しないよう、ロボット101を制御する。以下の説明では、ロボット101と障害物31との衝突の例として、手先ツール102と障害物31との衝突を説明する。すなわち、実施の形態1のロボット制御装置200は、手先ツール102が障害物31に衝突しないよう、ロボット101を制御する。具体的には、ロボット制御装置200は、手先ツール102が動作始点PSから動作終点PGまで移動する際に、手先ツール102が障害物31に衝突しないようにロボット101を制御する。
図2は、実施の形態1にかかるロボット制御装置が制御するロボットの一例を示す図である。図2では、ロボット101が有する軸を図示している。図2では、ロボット101が、第1軸A1から第6軸A6の6軸を有している場合について説明するが、ロボット101が有する軸数は、5軸以下であってもよいし、7軸以上であってもよい。ロボット101は、第1軸A1から第6軸A6を動作させることで、手先ツール102を移動させる。
図3は、実施の形態1にかかるロボット制御装置の構成を示す図である。ロボット制御装置200は、障害物モデル記憶部21と、ロボットモデル記憶部22と、端点記憶部23と、動作指令生成部24と、各軸モータ制御部とを備えている。ロボット101は、各軸モータと、各軸エンコーダとを備えている。
ロボット制御装置200の各軸モータ制御部は、ロボット101の軸の数だけ配置されている。したがって、ロボット制御装置200の各軸モータ制御部は、第1軸モータ制御部B1から第6軸モータ制御部B6の6つである。なお、図3では、第2軸モータ制御部B2から第5軸モータ制御部B5の図示を省略している。
ロボット101の各軸モータは、ロボット101の軸の数だけ配置されている。したがって、ロボット101の各軸モータは、第1軸モータM1から第6軸モータM6の6つである。なお、図3では、第2軸モータM2から第5軸モータM5の図示を省略している。
ロボット101の各軸エンコーダは、ロボット101の軸の数だけ配置されている。したがって、ロボット101の各軸エンコーダは、第1軸エンコーダE1から第6軸エンコーダE6の6つである。なお、図3では、第2軸エンコーダE2から第5軸エンコーダE5の図示を省略している。
障害物モデル記憶部21は、障害物31などのロボットシステム100内に含まれる全ての障害物の障害物情報を記憶する。障害物モデルである障害物情報は、障害物31の形状および設置位置を示す情報である。障害物情報の例は、障害物31の3DCAD(Three Dimensional Computer Aided Design、3次元キャド)データである。また、障害物情報は、障害物31を外包する簡易モデルの形状および位置情報であってもよい。
ロボットモデル記憶部22は、ロボット101に関する情報であるロボット情報を記憶する。ロボット情報は、少なくとも、ロボット101の形状を示す形状情報、ロボット101の寸法を示す寸法情報、各軸モータが実現できる回転の最高速度、各軸モータのトルクの制約の情報であるトルク制約情報、および各軸モータが実現できる回転角の角度範囲の情報を含んでいる。
端点記憶部23は、動作始点PSおよび動作終点PGに関する情報である端点情報を記憶する。端点情報には、動作始点PSにおける、手先ツール102の座標、手先ツール102の姿勢の情報、およびロボット101の各軸の関節角度の情報が含まれている。また、端点情報には、動作終点PGにおける、手先ツール102の座標、手先ツール102の姿勢の情報、およびロボット101の各軸の関節角度の情報が含まれている。
動作指令生成部24は、障害物モデル記憶部21、ロボットモデル記憶部22、端点記憶部23に接続されている。動作指令生成部24は、障害物モデル記憶部21から障害物情報を読み出し、ロボットモデル記憶部22からロボット情報を読み出し、端点記憶部23から端点情報を読み出す。
動作指令生成部24は、障害物情報、ロボット情報、および端点情報に基づいて、ロボットシステム100内に配置されている障害物31を回避しながら、指定された動作始点PSから動作終点PGまで移動する際の手先ツール102の軌道を生成する。具体的には、動作指令生成部24は、ロボット情報および端点情報に基づいて、ロボット101に対する制約を満たした軌道を生成し、生成した軌道および障害物情報に基づいて、軌道が障害物31と衝突するか否かを判断する。以下、障害物情報、ロボット情報、および端点情報を動作情報という場合がある。動作指令生成部24は、生成した軌道に対応する各軸モータの動作指令を各軸モータ制御部に出力する。
ロボット101内の各軸モータには、各軸エンコーダが接続されている。各軸エンコーダは、各軸モータの関節角度のデータである関節角データをリアルタイムで取得し、各軸モータ制御部へフィードバックする。
各軸モータ制御部は、各軸エンコーダから送られてくる関節角データを用いて、各軸モータをフィードバック制御する。
次に、動作指令生成部24が手先ツール102の軌道を生成する手順について説明する。図4は、実施の形態1にかかるロボット制御装置による軌道生成の処理手順を示すフローチャートである。
動作指令生成部24は、動作情報を読み出す(ステップS110)。動作情報には、障害物情報と、ロボット情報と、端点情報とが含まれている。具体的には、動作指令生成部24は、障害物モデル記憶部21から障害物情報を読み出し、ロボットモデル記憶部22からロボット情報を読み出し、端点記憶部23から端点情報を読み出す。端点情報には、動作始点PSおよび動作終点PGにおけるロボット101の各軸の関節角度が含まれている。
次に、動作指令生成部24は、動作始点PSから動作終点PGまでの関節補間軌道R0を生成する(ステップS120)。関節補間軌道R0は、障害物31を考慮せずに手先ツール102が動作始点PSから動作終点PGまで移動する際に、ロボット101の動作時間が最短となる軌道である。
動作指令生成部24は、関節補間軌道R0に基づいて、各軸の動作指令を生成する。関節補間軌道R0に対応する動作指令が第1の動作指令である。この第1の動作指令には、他軸への動作指令である他軸指令と、代表軸への動作指令である代表軸指令とが含まれている。第1の動作指令でロボット101が動作した場合の動作時間が第1の動作時間である。
実施の形態1では、ロボット制御装置200が、動作指令として、ロボット101に含まれる各軸の速度指令値を使用する場合について説明する。動作指令生成部24は、生成した関節補間軌道R0を仮軌道に設定する。
次に、動作指令生成部24は、各軸の中から仮軌道での動作時間に対する寄与度が最大の軸である代表軸を選択する。すなわち、動作指令生成部24は、各軸の中から仮軌道での動作時間を決定する代表軸を選択する(ステップS130)。また、動作指令生成部24は、仮軌道に含まれる各軸の動作指令の中から、代表軸の動作指令を選択する。
実施の形態1では、代表軸は、各軸モータが出力可能な最高速度に対して動作始点PSから動作終点PGまでの角度変化量が最大となる軸であると定義する。代表軸は、障害物31を考慮せずに動作始点PSから動作終点PGまで最短時間で動作する場合に、動作時間に最も寄与する軸、すなわち動作時間が最長の軸とみることができる。
代表軸は、障害物31を考慮せずに動作始点PSから動作終点PGまで最短時間で動作する場合において、少なくとも1つの軸の角度変化量が十分に大きくなる動作において、軸を駆動する軸モータの角速度が、軸モータが実現できる最高速度に一致する軸となる。また、全ての軸の角度変化量が小さい場合には、代表軸は、軸モータが実現できる最高速度に対する動作中に到達する最高速度の比が1未満で最大の軸となる。なお、以下の説明では、代表軸以外の軸を他軸という場合がある。
図5は、実施の形態1にかかるロボット制御装置が選択する代表軸を説明するための図である。ここでは、ロボット101の軸数が3つである場合の代表軸について説明する。図5は、関節補間軌道R0でロボット101を動作させる場合の、代表軸および他軸の速度指令値に対応する角速度の変化を示している。
以下、代表軸または他軸を軸jという場合がある。また、代表軸を、代表軸j´という場合がある。図5では、代表軸j´に対する角速度のグラフと、代表軸以外の軸である他軸j_bに対する角速度のグラフと、代表軸j´以外の軸である他軸j_cに対する角速度のグラフとを示している。各グラフの横軸は時間であり、縦軸は軸の角速度である。
図5の上段に示すグラフが代表軸j´に対する速度指令値に対応する角速度のグラフであり、中段に示すグラフが他軸j_bに対する速度指令値に対応する角速度のグラフであり、下段に示すグラフが他軸j_cに対する速度指令値に対応する角速度のグラフである。動作指令生成部24は、代表軸j´として、以下の式(1)を満たす軸jを選択する。
ここで、θSjは、動作始点PSにおける軸jの角度であり、θGjは動作終点PGにおける軸jの角度であり、v_maxjは軸jの軸モータが実現できる最高速度である。式(1)は、仮動作の動作時間を決定する代表軸j´を選択する数式である。式(1)の右辺は、軸jの角度変化量が軸jの軸モータが実現できる最高速度v_maxjに対し、どの程度の大きさにあたるかを示している。角度変化量を最高速度v_maxjで除した値が最大となる軸jが、代表軸j´となる。すなわち、軸モータが出力可能な最高速度v_maxjに対する軸jの角度変化量の割合が最大となる軸が代表軸である。
代表軸j´に対する速度指令値に対応する角速度のグラフに示すように、代表軸j´の角度変化量が十分に大きい場合において、動作中に実現される代表軸j´の軸モータの最高速度v ̄j´は、代表軸j´の軸モータが実現できる最高速度v_maxj´に一致する。「 ̄」はオーバーバーであり、vj´の上部に付されている。以下、同様に「 ̄」は全てオーバーバーである。動作指令生成部24は、仮軌道において、代表軸j´以外の他軸で実現されるモータの最高速度vj ̄を、以下の式(2)に基づいて算出する。
図5では、他軸j_bの軸モータが実現できる最高速度をv_maxj_bで示し、他軸j_cの軸モータが実現できる最高速度をv_maxj_cで示している。また、仮軌道において他軸j_bの動作中に実現される他軸j_bの最高速度を最高速度v ̄j_bで示し、仮軌道において他軸j_cの動作中に実現される他軸j_cの最高速度を最高速度v ̄j_cで示している。
動作指令生成部24は、代表軸の動作指令を選択すると、第1の繰り返しカウンタを初期化する。すなわち、動作指令生成部24は、第1の繰り返しカウンタにi=1を代入する(ステップS140)。第1の繰り返しカウンタは、後述する経由エリアを変更する処理を繰り返す際の、繰り返し回数をカウントするカウンタである。第1の繰り返しカウンタは、ステップS220の処理で用いられる。
次に、動作指令生成部24は、経由エリアの候補を設定し、候補の中から手先ツール102の特定位置が通過する経由エリアを指定する(ステップS150)。
図6は、実施の形態1にかかるロボット制御装置が設定する経由エリアを説明するための図である。図6では、経由エリアの候補の例として、経由エリア601と、経由エリア603とを図示している。
経由エリアの候補は、ユーザが障害物31の配置に基づいて予め設定しておく。なお、動作指令生成部24が、障害物モデル記憶部21から取得した障害物情報に基づいて、障害物31が存在しないエリアに経由エリアの候補を設定してもよい。
動作指令生成部24は、経由エリアを指定する際に、複数の経由エリアの候補の中から1つの経由エリアを指定する。ここでは、動作指令生成部24が、経由エリア601を指定した場合について説明する。動作指令生成部24は、任意の時刻において手先ツール102の特定位置が経由エリア601の任意の位置を通過する軌道602を生成する。
動作指令生成部24は、ロボット101の全体を基準としたロボット動作空間、すなわちXYZ空間に対して、経由エリア601,603および軌道602を生成する。なお、動作指令生成部24は、ロボット101の関節角を基準とした関節角空間に対して、経由エリア601,603および軌道602を生成してもよい。
動作指令生成部24は、経由エリアを指定した後、第2の繰り返しカウンタを初期化する。すなわち、動作指令生成部24は、第2の繰り返しカウンタにi2=1を代入する(ステップS160)。第2の繰り返しカウンタは、1つの経由エリアに対して軌道を生成する処理を繰り返す際の、繰り返し回数をカウントするカウンタである。第2の繰り返しカウンタは、ステップS210の処理で用いられる。
動作指令生成部24は、第2の繰り返しカウンタを初期化した後、ステップS150で選択した経由エリアに基づいて、軌道を生成する。この場合において、動作指令生成部24は、生成軌道に基づいて、代表軸以外の他軸の動作指令と、代表軸の動作指令とを生成する。
動作指令生成部24は、前記の他軸の動作指令の動作時間が第1の動作時間より長い場合に他軸の動作指令を調整して関節補間軌道R0と異なる軌道を生成し、生成軌道の動作時間を短縮する(ステップS170)。他軸の動作指令に対応するロボット101の動作時間が、第2の動作時間である。ステップS170では、第2の動作時間が短くなるよう、動作指令生成部24が、他軸の動作指令を調整する。
他軸の調整後の動作指令および調整されていない代表軸の動作指令を含んだ動作指令が第2の動作指令である。この第2の動作指令に対応する軌道が第1の軌道である。動作指令生成部24は、他軸の動作指令を調整した後、調整後の動作指令を用いて軌道を生成する。この軌道が、障害物31を回避する軌道となっている場合がある。
また、動作指令生成部24は、生成した軌道が特定の条件を満たすか否かを判断する。具体的には、動作指令生成部24は、障害物情報に基づいて、生成した軌道である生成軌道が障害物31を回避するか否かを判断する(ステップS180)。なお、関節補間軌道R0は、最短の動作時間に対応する軌道なので、生成軌道での動作時間が関節補間軌道R0よりも短くなることはない。また、ここでは他軸の動作指令を調整しているだけなので、生成軌道での動作時間が関節補間軌道R0よりも長くなることはない。すなわち、この時点では、生成軌道での動作時間は、関節補間軌道R0での動作時間と同じであり、最短動作時間となっている。
生成軌道が障害物31を回避する場合(ステップS180、Yes)、動作指令生成部24は、ステップS260の処理に移行する。すなわち、動作指令生成部24は、最短動作時間の生成軌道に対応する動作指令を出力する。ここでの動作指令生成部24が記憶している生成軌道は、最短動作時間の生成軌道である。したがって、動作指令生成部24は、第2の動作指令のうち、障害物31を回避する第1の軌道に対応する動作指令を出力する。
生成軌道が障害物31に干渉する場合(ステップS180、No)、動作指令生成部24は、代表軸の動作指令を調整し、調整後の動作指令を用いて軌道を生成する(ステップS190)。他軸の調整後の動作指令および代表軸の調整後の動作指令を含んだ動作指令が第3の動作指令である。この第3の動作指令によるロボット101の動作時間が第3の動作時間であり、第3の動作指令に対応する軌道が第2の軌道である。以下、ステップS170,S190で調整された動作指令を、調整済みの動作指令という場合がある。
動作指令生成部24は、生成軌道が特定の条件を満たすか否かを判断する。具体的には、動作指令生成部24は、他軸および代表軸の調整済みの動作指令に基づいて軌道を生成する。そして、動作指令生成部24は、生成軌道が障害物31を回避し、かつ生成軌道での動作時間=関節補間軌道R0での動作時間を満たすか否かを判断する(ステップS200)。このとき、動作指令生成部24は、障害物情報に基づいて、生成軌道が障害物31を回避するか否かを判断する。
ステップS200の条件を満たす場合(ステップS200、Yes)、動作指令生成部24は、最短動作時間の生成軌道に対応する動作指令を各軸モータ制御部に出力する(ステップS260)。動作指令生成部24は、記憶しておいた生成軌道に基づいて、動作時間を算出する。動作指令生成部24は、各動作時間の中から最短動作時間を選択し、最短動作時間の生成軌道に対応する動作指令を出力する。ここでの動作指令生成部24は、第3の動作指令のうち、障害物31を回避し最短動作時間となる第2の軌道に対応する動作指令を出力する。
ステップS200の条件を満たさない場合(ステップS200、No)、動作指令生成部24は、第2の繰り返しカウンタのカウント数が、設定された最大値となっているか否かを判断する。すなわち、動作指令生成部24は、i2=最大繰り返し回数となっているか否かを判断する(ステップS210)。
i2=最大繰り返し回数となっていない場合(ステップS210、No)、動作指令生成部24は、i2に1を加算し(ステップS230)、ステップS170の処理に戻る。
この場合において、動作指令生成部24は、ロボット101の動作の条件を示す動作指令パラメータを変更してステップS170の処理を実行する。すなわち、動作指令生成部24は、動作指令パラメータを変更しながら、衝突を回避できる動作指令を探索する。具体的には、動作指令生成部24は、動作指令パラメータとして、各軸モータの角度変化の回数、各角度変化の開始タイミング、各角度変化における最高速度、各軸モータが最高速度を出力する時間の長さである出力時間、各角度変化における加速度、および各角度変化における減速度の少なくとも1つを新たな値に変更してステップS170の処理を実行する。
これにより、動作指令生成部24は、複数回にわたってステップS170の処理を実行するので、複数の条件でステップS170の処理を実行することができる。各軸モータの1回の角度変化は、各軸モータの速度が0の状態から加速または減速を行った後、各軸モータの速度が再び0になるまでの動作である。
i2=最大繰り返し回数となっている場合(ステップS210、Yes)、動作指令生成部24は、第1の繰り返しカウンタのカウント数が、設定された最大値となっているか否かを判断する。すなわち、動作指令生成部24は、i=最大繰り返し回数となっているか否かを判断する(ステップS220)。
i=最大繰り返し回数となっている場合(ステップS220、Yes)、動作指令生成部24は、最短動作時間の生成軌道に対応する動作指令を各軸モータ制御部に出力する(ステップS260)。
i=最大繰り返し回数となっていない場合(ステップS220、No)、動作指令生成部24は、経由エリアを変更する(ステップS240)。すなわち、動作指令生成部24は、設定された経由エリアの中から別の経由エリアを指定する。そして、動作指令生成部24は、iに1を加算し(ステップS250)、ステップS160の処理に戻る。
ここで、動作指令生成部24が、経由エリアに基づいて軌道を生成する処理について説明する。図7は、実施の形態1にかかるロボット制御装置が経由エリアに基づいて軌道を生成する処理の詳細な処理手順を示すフローチャートである。以下に説明するステップS310からS430の処理は、図4で説明したステップS170からS200の処理に対応している。
動作指令生成部24は、第2の繰り返しカウンタを初期化、すなわち第2の繰り返しカウンタにi2=1を代入する(ステップS160)。
動作指令生成部24は、第2の繰り返しカウンタにi2=1を代入すると、経由エリア内の任意の一点に、手先ツール102の特定位置が通過する仮の中継点(以下、仮中継点PRという)を設定する(ステップS310)。
また、動作指令生成部24は、仮中継点PRに手先ツール102の特定位置が達するように、ロボット101の各軸モータのモータ角度を決定する。換言すると、動作指令生成部24は、仮中継点PRでのロボット101の各軸モータのモータ角度を決定する(ステップS320)。すなわち、動作指令生成部24は、経由エリア内の仮中継点PRに対し、手先ツール102を含む関節角の組を設定する。
なお、動作指令生成部24の代わりに、ユーザが仮中継点PRとして、経由エリア内の任意の位置と、この時のロボット101の姿勢とを指定してもよい。また、動作指令生成部24は、仮中継点PRとして経由エリア内の点をランダムに選択してもよい。仮中継点PRは、軌道上で通過しなければならないものではなく、初期軌道を計算するために仮に指定されるものである。
次に、動作指令生成部24は、ステップS320で決定した各軸モータのモータ角度における各軸モータの角速度を指定する。すなわち、動作指令生成部24は、決定した関節角で仮中継点PRを通過する際の通過速度を指定する(ステップS330)。ここで指定される角速度は、初期軌道を計算するために仮に設定される角速度である。
次に、動作指令生成部24は、端点情報、指定した仮中継点PRの位置、および指定した角速度に基づいて、動作始点PS、動作終点PG、仮中継点PRにおいて各軸の駆動に使用できる最大駆動トルクを計算する(ステップS340)。次に、動作指令生成部24は、代表軸以外の軸である他軸の仮動作指令を生成する(ステップS350)。
図8は、実施の形態1にかかるロボット制御装置が他軸の仮動作指令を生成する処理を説明するための図である。図9は、実施の形態1にかかるロボット制御装置が他軸の仮動作指令を生成する際に用いる仮中継点を説明するための図である。図9に示すように、仮中継点PRは、経由エリア601内に設定される。
図8の上段に示すグラフが、代表軸j´に対する角速度のグラフである。また、中段に示すグラフが、他軸j_bが動作始点PSにおいて最大駆動トルクで加速した場合の角速度のグラフであり、下段に示すグラフが、他軸j_bが仮中継点PRにおいて最大駆動トルクで加速した場合の角速度のグラフである。各グラフの横軸は時間であり、縦軸は角速度である。
まず、図8の上段に示すグラフについて説明する。動作指令生成部24は、関節補間軌道R0の代表軸j´の動作指令を用いて、動作始点PSから仮中継点PRまでの動作時間t1、仮中継点PRから動作終点PGまでの動作時間t2を求める。動作始点PSにおける代表軸j´の角度θSj´から仮中継点PRにおける代表軸j´の角度θRj´までの角度変化量が、時刻t=0からt1までの代表軸j´の動作指令の積分値と一致する時刻がt1となる。
次に、代表軸j´以外の軸j_bへの仮動作指令の生成方法を、図8の中段に示すグラフを用いて説明する。動作指令生成部24は、動作始点PSにおいて最大駆動トルクで加速した場合の指令直線L1の傾きを計算する。また、動作指令生成部24は、仮中継点PRまで最大駆動トルクで減速した場合の指令直線L2の傾きを計算する。さらに、動作指令生成部24は、ロボット101の各軸モータが実現できる最高速度を示す指令直線L3を生成する。
動作指令生成部24は、指令直線L1,L2,L3、および角速度0の直線の4本の直線で囲まれた台形の面積S1を計算する。ここで、指令直線L1と角速度0の直線の交点は時刻t=0である。動作指令生成部24は、面積S1の値が軸j_bの動作始点PSから仮中継点PRまでの角度変化量の絶対値|θRj-θSj|と等しくなるように、指令直線L2と角速度0の直線の交点となる時刻を決定する。時刻t=0から、指令直線L2と角速度0の直線の交点となる時刻までの動作時間が動作時間t1jである。したがって、指令直線L2と角速度0の直線の交点は、時刻t1jである。θSjは、動作始点PSでの軸j_bの角度であり、θRjは仮中継点PRでの軸j_bの角度である。
指令直線L1の傾きをa(>0)、指令直線L2の傾きをb(<0)とすると、動作指令生成部24は、指令直線L2と角速度0の直線の交点である時刻t1jを、以下の式(3)に基づいて計算できる。
ここで、t1j>t1の場合は、前述の4本の直線で囲まれた台形の波形が動作始点PSから仮中継点PRまでの軸j_bの動作指令となる。
一方、t1j≦t1の場合、動作指令生成部24は、動作始点PSから仮中継点PRまでの動作時間がt1になるよう、動作中の最高速度をv_maxjからovrd1j*v_maxjに変更する。動作指令生成部24は、以下の式(4)をovrd1jについて解くことでovrd1j*v_maxjを計算する。
次に、図8の下段に示すグラフについて説明する。動作指令生成部24は、仮中継点PRから最大駆動トルクで加速した場合の指令直線L5の傾きを計算する。さらに、動作指令生成部24は、動作終点PGまで最大駆動トルクで減速した場合の指令直線L6の傾きを計算する。加えて、動作指令生成部24は、ロボット101の各軸モータが実現できる最高速度を示す指令直線L7を生成する。
動作指令生成部24は、指令直線L5,L6,L7、および角速度0の直線の4本の直線で囲まれた台形の面積S2を計算する。
動作指令生成部24は、S2の値が軸j_bの仮中継点PRから動作終点PGまでの角度変化量の絶対値|θGj-θRj|と等しくなるように、指令直線L6と角速度0の直線の交点である時刻t1j+t2jを決定する。θGjは動作終点PGでの軸j_bの角度、θRjは仮中継点PRでの軸j_bの角度である。ここで、角速度0の直線と指令直線L5との交点は時刻t1jの点である。したがって、時刻t1jから、指令直線L6と角速度0の直線の交点となる時刻t1j+t2jまでの動作時間は動作時間t2jである。
指令直線L5の傾きをc(>0)、指令直線L6の傾きをd(<0)とすると、動作指令生成部24は、指令直線L6と角速度0の直線の交点である時刻t1j+t2jを、以下の式(5)に基づいて計算できる。
ここで、t2j>t2の場合は、指令直線L5,L6,L7、および角速度0の直線の4本ので囲まれた台形の波形が仮中継点PRから動作終点PGまでの軸j_bの動作指令となる。
一方、t2j≦t2の場合、動作指令生成部24は、仮中継点PRから動作終点PGまでの動作時間がt2になるよう、動作中の最高速度をv_maxjからovrd2j*v_maxjに変更する。動作指令生成部24は、以下の式(6)をovrd2jについて解くことでovrd2j*v_maxjを計算する。
以下で説明するステップS360の処理は、図4で説明したステップS170の処理に対応し、ステップS370からS380の処理は、図4で説明したステップS180の処理に対応している。
動作指令生成部24は、他軸の仮動作指令を生成した後、他軸の動作指令を調整する(ステップS360)。動作指令生成部24は、他軸の動作指令を調整した軌道を生成する。他軸の動作指令を調整するステップS360の処理の詳細については後述する。実施の形態1では、他軸の動作指令を調整した後に、代表軸の動作指令を調整する。
次に、動作指令生成部24は、調整済みの、他軸の動作指令および代表軸の動作指令に基づいて、軌道での動作時間を算出し、軌道での動作時間が特定条件を満たすか否かを判断する。
具体的には、動作指令生成部24は、調整済みの、他軸の動作指令および代表軸の動作指令に基づいてロボット101を動作させた場合に、ロボット101に対する生成軌道が障害物31を回避するか否かを判断する(ステップS370)。すなわち、動作指令生成部24は、動作指令に対応する軌道でロボット101を動作させた場合に、ロボット101の全体である、ロボット101本体、手先ツール102、およびワーク103が、障害物31に衝突するか否かを判断する。
生成軌道が障害物31と干渉する場合(ステップS370、No)、動作指令生成部24は、生成軌道を出力軌道の候補として記憶せず、代表軸の動作指令を調整する(ステップS400)。動作指令生成部24は、動作指令の開始タイミングをずらすことで代表軸の動作指令を調整してもよいし、動作中の最高速度を変更することで代表軸の動作指令を調整してもよい。
一方、生成軌道が障害物31を回避する場合(ステップS370、Yes)、動作指令生成部24は、生成軌道を出力軌道の候補として記憶しておく(ステップS380)。なお、動作指令生成部24は、出力軌道の候補とともに、出力軌道の候補に対応する動作指令を記憶しておいてもよい。そして、動作指令生成部24は、ステップS260の処理に移行する。
ここで、ステップS360の詳細な処理、すなわち他軸の動作指令を調整する処理について説明する。図10は、実施の形態1にかかるロボット制御装置が他軸の動作指令を調整する処理の処理手順を示すフローチャートである。
動作指令生成部24は、図7のステップS350で生成した仮動作指令を一時的な動作指令である一時動作指令に設定する(ステップS510)。
次に、動作指令生成部24は、一時動作指令での動作時間が関節補間軌道R0での動作時間を超過する他軸を全て選択する(ステップS520)。
次に、動作指令生成部24は、選択した他軸の動作時間を短縮するよう動作指令の加減速タイミングをずらす(ステップS530)。具体的には、動作指令生成部24は、選択した他軸の動作時間を短縮するよう、加減速タイミングのずらし量を決定し、決定した加減速タイミングのずらし量に基づいて動作指令を生成する。これにより、動作指令生成部24は、選択した他軸の動作時間を短縮するよう動作指令を変更する。
図11は、実施の形態1にかかるロボット制御装置が他軸の動作指令の加減速タイミングをずらす処理を説明するための図である。図11では、他軸として軸jが選択されている場合について説明する。
図11の上段に示すグラフが代表軸に対する速度指令値に対応する角速度のグラフであり、中段に示すグラフが他軸に対する変更前の速度指令値に対応する角速度のグラフであり、下段に示すグラフが他軸に対する変更後の速度指令値に対応する角速度のグラフである。各グラフの横軸は時間であり、縦軸は軸の角速度である。図11の下段に示すグラフでは、変更前の角速度の波形を点線で示し、変更後の角速度の波形を実線で示している。なお、図11以降の図面においても、点線の波形と実線の波形の両方が記載されているグラフは、点線の波形が変更前の角速度であり、実線の波形が変更後の角速度である。
動作指令生成部24は、ステップS350で生成した仮動作指令に基づいて、軸jの動作始点PSから仮中継点PRまでの動作時間t1jと、代表軸の動作始点PSから仮中継点PRまでの動作時間t1とを算出する。動作指令生成部24は、t1j=t1が成立しているかを確認する。
次に、動作指令生成部24は、ステップS350で生成した仮動作指令に基づいて、軸jの仮中継点PRから動作終点PGまでの動作時間t2jと、代表軸の仮中継点PRから動作終点PGまでの動作時間t2とを算出する。動作指令生成部24は、t2j=t2が成立しているかを確認する。
動作指令生成部24は、t1j=t1と、t2j=t2との両方が成立しない場合には、軸jの動作指令の加減速タイミングを変更しない。
図11では、t1j=t1のみ成立し、t2j=t2が成立していない場合を示している。この場合、動作始点PSから仮中継点PRまでの動作中の軸jの軸モータの最高速度ovrd1j*v_maxjは、軸jの軸モータが実現できる最高速度v_maxjに到達しない。そこで、動作指令生成部24は、動作始点PSから仮中継点PRまでの動作中の軸jの軸モータの最高速度に、ovrd1j<ovrd1j_New<1を満たすovrd1j_Newを用いる。すなわち、動作指令生成部24は、動作始点PSから仮中継点PRまでの動作中の軸jの軸モータの最高速度を、ovrd1j_New*v_maxjに変更する。
また、動作指令生成部24は、動作始点PSでの加速度として、ステップS350で計算した指令直線L1の傾き、すなわち図8で説明した指令直線L1の傾きを使用する。同様に、動作指令生成部24は、仮中継点PRでの減速度として、ステップS350で計算した指令直線L2の傾き、すなわち図8で説明した指令直線L2の傾きを使用する。
なお、動作指令生成部24は、ovrd1j_Newの値を、経由エリア内での軌道生成の繰り返しごとに変更してもよい。換言すると、動作指令生成部24は、ステップS210でi2=最大繰り返し回数となるか否かを判断するたびに、ovrd1j_Newの値を、変更してもよい。動作指令生成部24は、例えば、繰り返しの初期はovrd1j_New=1に設定し、繰り返し回数が増えるごとにovrd1j_Newを一定量ずつ減少させる。
動作指令生成部24は、軸jの動作始点PSから仮中継点PRまでの動作時間t1jの変更後の動作時間t1j_Newを、以下の式(7)を用いて計算する。
次に、t2j=t2のみ成立し、t1j=t1が成立していない場合について説明する。この場合、仮中継点PRから動作終点PGまでの動作中の軸jのモータの最高速度ovrd2j*v_maxjは、軸jのモータが実現できる最高速度v_maxjに到達しない。そこで、動作指令生成部24は、仮中継点PRから動作終点PGまでの動作中の軸jのモータの最高速度に、ovrd2j<ovrd2j_New<1を満たすovrd2j_Newを用いる。すなわち、動作指令生成部24は、仮中継点PRから動作終点PGまでの動作中の軸jのモータの最高速度を、ovrd2j_New*v_maxjに変更する。
また、動作指令生成部24は、仮中継点PRでの加速度として、ステップS350で計算した指令直線L5の傾き、すなわち図8で説明した指令直線L5の傾きを使用する。同様に、動作指令生成部24は、動作終点PGでの減速度として、ステップS350で計算した指令直線L6の傾き、すなわち図8で説明した指令直線L6の傾きを使用する。
なお、動作指令生成部24は、ovrd2j_Newの値を、経由エリア内での軌道生成の繰り返しごとに変更してもよい。換言すると、動作指令生成部24は、ステップS210でi2=最大繰り返し回数となるか否かを判断するたびに、ovrd2j_Newの値を、変更してもよい。動作指令生成部24は、例えば、繰り返しの初期はovrd2j_New=1に設定し、繰り返し回数が増えるごとにovrd2j_Newを一定量ずつ減少させる。
動作指令生成部24は、軸jの仮中継点PRから動作終点PGまでの動作時間t2jの変更後の動作時間t2j_Newを、以下の式(8)を用いて計算する。
このように、動作指令生成部24は、ステップS530で動作指令を変更した各他軸に対し、変更後の動作指令の実行時間、すなわち変更後の動作指令に対応する動作時間を計算する。また、動作指令生成部24は、各他軸に対し、一時動作指令の実行時間、すなわち一時動作指令に対応する動作時間を計算する。
次に、動作指令生成部24は、各他軸に対し、変更後の動作指令での動作時間が、一時動作指令での動作時間以下であるか否かを判断する。すなわち、動作指令生成部24は、全他軸に対し、他軸が、変更後の動作指令での動作時間=一時動作指令での動作時間であるか否かを判断する(ステップS540)。
他軸における変更後の動作指令での動作時間=一時動作指令での動作時間である場合(ステップS540、Yes)、動作指令生成部24は、変更後の動作指令を、出力軌道の候補として記憶する。すなわち、変更後の動作指令での動作時間=一時動作指令での動作時間の他軸に対し、動作指令生成部24は、変更後の動作指令を一時動作指令に設定する(ステップS550)。
動作指令生成部24は、変更後の動作指令での動作時間>一時動作指令での動作時間の他軸に対しては(ステップS540、No)、一時動作指令を変更せず、ステップS560の処理に進む。
動作指令生成部24は、ステップS530で動作指令を変更した他軸のうち、一時動作指令での動作時間が関節補間軌道R0での動作時間を超過する他軸を選択する(ステップS560)。
次に、動作指令生成部24は、ステップS520で選択した他軸の動作時間を短縮するよう動作指令の仮中継点PRにおける他軸の角度である軸角度をずらす(ステップS570)。動作指令生成部24は、仮中継点PRにおける軸角度をずらした動作指令を生成する。
図12は、実施の形態1にかかるロボット制御装置が動作時間を短縮するよう他軸の動作指令の仮中継点における軸角度をずらす処理を説明するための図である。図12では、軸jが選択されている場合について説明する。
図12の上段に示すグラフが代表軸に対する速度指令値に対応する角速度のグラフであり、中段に示すグラフが他軸に対する変更前の速度指令値に対応する角速度のグラフであり、下段に示すグラフが他軸に対する変更後の速度指令値に対応する角速度のグラフである。各グラフの横軸は時間であり、縦軸は軸の角速度である。
動作指令生成部24は、仮中継点PRにおける軸jの角度を、θRjからθRj_Newに変更する。また、動作指令生成部24は、動作始点PSでの加速度として、ステップS350で計算した指令直線L1の傾き、すなわち図8で説明した指令直線L1の傾きを使用する。また、動作指令生成部24は、仮中継点PRでの減速度として、ステップS350で計算した指令直線L2の傾き、すなわち図8で説明した指令直線L2の傾きを使用する。
また、動作指令生成部24は、仮中継点PRでの加速度として、ステップS350で計算した指令直線L5の傾き、すなわち図8で説明した指令直線L5の傾きを使用する。また、動作指令生成部24は、動作終点PGでの減速度として、ステップS350で計算した指令直線L6の傾き、すなわち図8で説明した指令直線L6の傾きを使用する。
動作指令生成部24は、θRj_Newを以下の式(9)を満たす範囲から指定する。
動作指令生成部24は、軸jの動作始点PSから仮中継点PRまでの動作時間t1jの変更後である動作時間t1j_Newの値を、以下の式(10)を用いて計算する。図12では、ovrd1j_New=1の場合を示している。
動作指令生成部24は、軸jの仮中継点PRから動作終点PGまでの動作時間t2jの変更後である動作時間t2j_Newの値を、以下の式(11)を用いて計算する。図12では、ovrd2j_New=1の場合を示している。
図12に示すように動作指令生成部24は、動作時間を短縮するよう軸jの動作指令の仮中継点PRにおける軸角度をずらすことで、角度変化量を減らすことができる。軸角度を変更する前の台形の面積T1と、軸角度を変更した後の台形の面積T2との差分が、角度変化量の削減量に対応している。
次に、動作指令生成部24は、各他軸に対し、変更後の動作指令での動作時間が、一時動作指令での動作時間以下であるか否かを判断する。すなわち、動作指令生成部24は、全他軸に対し、他軸が、変更後の動作指令での動作時間=一時動作指令での動作時間であるか否かを判断する(ステップS580)。
他軸に対する変更後の動作指令での動作時間=一時動作指令での動作時間である場合(ステップS580、Yes)、動作指令生成部24は、変更後の動作指令を、出力軌道の候補として記憶する。すなわち、変更後の動作指令での動作時間=一時動作指令での動作時間の他軸に対し、動作指令生成部24は、変更後の動作指令を一時動作指令に設定する(ステップS590)。動作指令生成部24は、ステップS550またはステップS590で設定した一時動作指令に対応する軌道を生成する。
他軸に対する変更後の動作指令での動作時間=一時動作指令での動作時間でない場合(ステップS580、No)、動作指令生成部24は、一時動作指令を変更しない。すなわち、動作指令生成部24は、変更後の動作指令での動作時間>一時動作指令での動作時間の軸に対しては、一時動作指令を変更せず、他軸の動作指令を調整する処理を終了する。
以下で説明するステップS400の処理は、図4で説明したステップS190の処理に対応し、ステップS410からS430の処理は、図4で説明したステップS200の処理に対応している。
図13は、実施の形態1にかかるロボット制御装置が代表軸の動作指令の開始タイミングをずらすことで代表軸の動作指令を調整する処理を説明するための図である。図14は、実施の形態1にかかるロボット制御装置が動作中の代表軸の最高速度を変更することで代表軸の動作指令を調整する処理を説明するための図である。
図13の上段に示すグラフが、代表軸に対する角速度のグラフであり、下段に示すグラフが、他軸に対する角速度のグラフである。また、図14の上段に示すグラフが、代表軸に対する角速度のグラフであり、下段に示すグラフが、他軸に対する角速度のグラフである。図13および図14に示す各グラフの横軸は時間であり、縦軸は軸の角速度である。
動作指令生成部24は、ステップS360で調整した他軸の動作指令のうち、最も動作時間の長い他軸j_lの動作時間t1jl+t2jlに合わせるよう代表軸の動作指令を調整する(ステップS400)。
動作指令生成部24は、図13に示す方法および図14に示す方法のうちの何れかの方法に基づいて、代表軸の動作指令を調整する。図13に示す方法と、図14に示す方法とでは、手先ツール102が通過する位置が変わる。このため、動作指令生成部24は、例えば、一方の方法を用いて代表軸の動作指令を生成し、生成軌道が障害物31と衝突する場合のみ、他方の方法を用いて代表軸の動作指令を生成する。
まず、図13を用いて、動作指令生成部24が、代表軸の動作指令の開始タイミングをずらすことで代表軸の動作指令を調整する方法について説明する。動作指令生成部24は、動作指令の開始タイミングのずれ量である時間Δtを、調整後の代表軸の動作時間(Δt+Δt1j´+Δt2j´)が、他軸のうち最も動作時間の長い他軸j_lの動作時間(Δt1j_l+Δt2j_l)を超えない範囲で選択する。
つぎに、図14を用いて、動作指令生成部24が、代表軸の動作中の最高速度を変更することで代表軸の動作指令を調整する方法について説明する。動作指令生成部24は、最高速度を、v_maxj´からovrdj´*v_maxj´に変更する。動作指令生成部24は、ovrdj´として、以下の式(12)をovrdj´について解いた値を使用する。動作指令生成部24は、加速度および減速度として、調整前の代表軸の動作指令と同じ値を使用する。式(12)では、代表軸の動作指令における加速度がa_j´であり、減速度がb_j´である。
次に、動作指令生成部24は、他軸の調整済みの動作指令および代表軸の調整済みの動作指令に基づいて軌道を生成し、生成軌道が特定の条件を満たすか否かを判断する。具体的には、動作指令生成部24は、他軸の調整済みの動作指令および代表軸の調整済みの動作指令に基づいた生成軌道でロボット101を動作させた場合、手先ツール102が障害物31と干渉するか否かを判断する。すなわち、動作指令生成部24は、生成軌道が障害物31を回避するか否かを判断する(ステップS410)。
生成軌道が障害物31を回避する場合(ステップS410、Yes)、動作指令生成部24は、生成軌道を出力軌道の候補として記憶しておく(ステップS420)。なお、動作指令生成部24は、出力軌道の候補とともに、出力軌道の候補に対応する動作指令を記憶しておいてもよい。
一方、生成軌道が障害物31と干渉する場合(ステップS410、No)、動作指令生成部24は、生成軌道を出力軌道の候補として記憶せず、指定の経由エリアを通過する別の軌道を生成する処理の繰り返し処理に移行する。すなわち、動作指令生成部24は、第2の繰り返しカウンタのカウント数であるi2が、i2=最大繰り返し回数となっているか否かを判断する(ステップS210)。
次に、動作指令生成部24は、調整済みの、他軸の動作指令および代表軸の動作指令に基づいて、ロボット101を動作させた場合の動作時間が、関節補間軌道R0での動作時間以下となるか否かを判断する。すなわち、動作指令生成部24は、生成軌道での動作時間=関節補間軌道R0での動作時間であるか否かを判断する(ステップS430)。
生成軌道での動作時間=関節補間軌道R0での動作時間である場合(ステップS430、Yes)、動作指令生成部24は、ステップS260の処理に移行する。生成軌道での動作時間>関節補間軌道R0での動作時間である場合(ステップS430、No)、動作指令生成部24は、指定の経由エリアを通過する別の軌道を生成する処理の繰り返し処理に移行する。すなわち、動作指令生成部24は、第2の繰り返しカウンタのカウント数であるi2が、i2=最大繰り返し回数となっているか否かを判断する(ステップS210)。
i2=最大繰り返し回数となっていない場合(ステップS210、No)、動作指令生成部24は、i2に1を加算し(ステップS230)、ステップS310の処理に戻る。
i2=最大繰り返し回数となっている場合(ステップS210、Yes)、動作指令生成部24は、ステップS380またはステップS420の処理において、障害物31を回避する生成軌道の記憶数が1つ以上であるか否かを判断する(ステップS215)。
動作指令生成部24は、障害物31を回避する生成軌道の記憶数が1つ以上である場合(ステップS215、Yes)、経由エリアを変更する処理の繰り返し処理に移行する。すなわち、動作指令生成部24は、障害物31を回避する軌道を1つ以上記憶している場合には、図4で説明したステップS220の処理に移行する。
一方、動作指令生成部24は、障害物31を回避する生成軌道の記憶数が0である場合(ステップS215、No)、動作指令生成部24は、新たな経由エリアを追加する(ステップS216)。この後、動作指令生成部24は、ステップS140の処理に戻る。
図4で説明したように、i=最大繰り返し回数となっている場合(ステップS220、Yes)、動作指令生成部24は、最短動作時間の生成軌道に対応する動作指令を各軸モータ制御部に出力する(ステップS260)。
一方、i=最大繰り返し回数となっていない場合(ステップS220、No)、動作指令生成部24は、経由エリアを変更する(ステップS240)。そして、動作指令生成部24は、図4で説明したステップS250の処理を実行し、その後、ステップS160の処理に戻る。
実施の形態1では、動作指令生成部24が、ロボット101と障害物31とが衝突しない生成軌道を記憶しておき、この生成軌道に対応する動作指令を出力するので、ロボット101と障害物31との衝突を回避できる。これにより、ロボット制御装置200は、生産効率を向上させることが可能となる。
また、動作指令生成部24は、経由エリアがユーザによって指定されなくても、動作指令を探索することができるので、経由エリアを指定して軌道を生成する場合よりも動作時間が短縮された軌道の生成が容易となる。
また、動作指令生成部24は、まず代表軸の動作指令を変更することなく軌道を生成する場合、動作時間を増加させることなく衝突を回避した軌道を生成できる。また、動作指令生成部24は、代表軸の動作指令を変更しなければ干渉回避可能な軌道が生成できない場合には、代表軸の動作指令を変更して軌道を生成するので、衝突を回避する軌道が複雑な場合であっても、干渉を回避できる軌道を生成することが可能となる。
また、動作指令生成部24は、経由エリアに基づいて動作指令を探索するので、衝突を回避することができる動作指令の探索に要する時間を削減できる。
また、動作指令生成部24は、最初に指定した経由エリア以外の経由エリアの候補を追加するので、動作時間が最短となる軌道の導出が容易になる。
このように、実施の形態1によれば、動作指令生成部24は、他軸の動作指令を調整した後、代表軸の動作指令を、関節補間軌道R0における代表軸の動作指令から変更する。そして、動作指令生成部24は、変更後の動作指令に対して軌道を生成し、障害物31との干渉がない場合には、生成軌道を出力軌道の候補として記憶しておく。したがって、動作指令生成部24は、障害物31との衝突を回避し、且つロボット101によって実行可能な軌道のみを、出力軌道の候補として生成することが可能となる。
また、動作指令生成部24は、生成軌道での動作時間が関節補間軌道R0での動作時間より長い場合には、経由エリアを変更して新たな軌道を生成する。したがって、動作指令生成部24は、経由点を限定する場合と比較して、動作時間を同等以下とする軌道を生成できる。
また、動作指令生成部24は、生成軌道に従って動作した場合に動作時間が関節補間軌道R0での動作時間以下の軌道を優先して出力する。また、動作指令生成部24は、全ての生成軌道が関節補間軌道R0での動作時間よりも長い場合には、生成軌道の中で最も動作時間が短い軌道を選択する。したがって、動作指令生成部24は、障害物31との干渉を回避する軌道の中で動作時間が最短となる軌道を選択できる。
また、動作指令生成部24は、各軸モータが出力可能な最高速度に対して動作時の角度変化量が最大となる軸を代表軸に設定し、代表軸の動作指令を選択している。動作指令生成部24は、選択した代表軸の動作指令を初期値として、障害物31を回避するよう各軸モータの動作指令を探索するので、動作時間が短い経路を効率良く探索できる。さらに、動作指令生成部24は、経由点を陽に指定せず各軸モータの動作指令を探索するので、経由点を陽に指定する場合と比較して動作時間の短縮が可能となる。
実施の形態2.
次に、図4、図14、および図15から図27を用いて実施の形態2について説明する。実施の形態2では、ロボット制御装置200が、複数の経由エリアがある場合に軌道を生成する。
図15は、実施の形態2にかかるロボット制御装置を備えたロボットシステムの概略構成を示す図である。図16は、実施の形態2にかかるロボット制御装置が設定する経由エリアを説明するための図である。図15の各構成要素のうち図1に示す実施の形態1のロボットシステム100と同一機能を達成する構成要素については同一符号を付しており、重複する説明は省略する。
実施の形態2のロボットシステム100は、2つの経由エリア601a,601bを用いる点で実施の形態1のロボットシステム100と異なる。なお、経由エリアは3つ以上であってもよい。複数からなる経由エリア601a,601bが存在する場合の一例は、ロボットシステム100内に複数の障害物31,32が配置されている場合である。
ロボットシステム100の動作指令生成部24は、手先ツール102の特定位置を動作始点PSから動作終点PGまで移動させる際に、手先ツール102が障害物31,32に衝突しないようにロボット101を制御する。
次に、動作指令生成部24が手先ツール102の軌道を生成する手順について説明する。実施の形態2でも、動作指令生成部24は、実施の形態1の図4で説明した処理手順で主要なステップを実行し軌道を生成する。このため、図4で説明した主要なステップの処理のうち、実施の形態1と異なる処理について説明する。
実施の形態2のステップS150では、動作指令生成部24は、手先ツール102の特定位置が通過する経由エリアの候補を複数設定する。そして、動作指令生成部24は、設定した複数の経由エリアの候補の中から任意の数(複数)の経由エリアを設定する。すなわち、動作指令生成部24は、設定した複数の経由エリアの候補の中から、複数の経由エリアを指定する。動作指令生成部24は、例えば、図16に示すように2つの経由エリア601a,601bを指定する。
経由エリアの候補は、ユーザが障害物31,32の配置に基づいて予め設定しておく。なお、動作指令生成部24は、障害物モデル記憶部21から取得した障害物情報に基づいて、障害物31が存在しないエリアに経由エリアの候補を設定してもよい。
動作指令生成部24は、複数の経由エリアを設定すると、設定した複数の経由エリアに基づいて軌道を生成する。具体的には、動作指令生成部24は、任意の時刻において手先ツール102の特定位置が各経由エリアの任意の位置を通過する軌道を生成する。
実施の形態2では、動作指令生成部24が、経由エリアに基づいて軌道を生成する処理が、実施の形態1とは異なる。図17は、実施の形態2にかかるロボット制御装置が経由エリアに基づいて軌道を生成する処理の詳細な処理手順を示すフローチャートである。図17に示す処理のうち、図7で説明した処理と同様の処理については重複する説明を省略する。
以下の説明では、実施の形態2のステップS150で選択した経由エリアの組に含まれる経由エリアを、それぞれ経由エリアmと呼ぶ。mは1から経由エリアの組に含まれる経由エリアの総数までの自然数とする。mで示される各数値は、手先ツール102が通過する順番に対応している。
動作指令生成部24は、第2の繰り返しカウンタを初期化、すなわち第2の繰り返しカウンタにi2=1を代入する(ステップS160)。動作指令生成部24は、経由エリアm内の任意の一点である仮中継点PRに、手先ツール102の特定位置が通過する仮中継点PRを設定する(ステップS310)。これらの、ステップS160,S310の処理は、実施の形態1で説明したステップS160,S310の処理と同様である。なお、以下の説明では、仮中継点PRのうちX(Xは1からmの自然数)番目の仮中継点PRをPXという場合がある。
つぎに、動作指令生成部24は、仮中継点PRでのロボット101の各軸モータのモータ角度を決定する(ステップS320)。すなわち、動作指令生成部24は、経由エリアm内の仮中継点PRに対し、手先ツール102を含む関節角の組を設定する。
なお、動作指令生成部24の代わりに、ユーザが仮中継点PRとして、経由エリア内の任意の位置と、この時のロボット101の姿勢とを指定してもよい。また、動作指令生成部24は、仮中継点PRとして経由エリア内の点をランダムに選択してもよい。動作指令生成部24は、仮中継点PRの指定を、m個の経由エリアの全てに対して実行する。
動作指令生成部24は、モータ角度を決定すると、代表軸以外の軸である他軸の仮動作指令を生成する(ステップS350)。具体的には、動作指令生成部24は、動作始点PS、動作終点PG、および仮中継点PRの位置に基づいて、他軸の仮動作指令を生成する。
動作指令生成部24は、他軸の仮動作指令を生成した後、他軸の動作指令を調整する(ステップS360)。他軸の仮動作指令を生成するステップS350の処理、および他軸の動作指令を調整するステップS360の処理の詳細については後述する。以下、ステップS370以降の処理は、実施の形態1で説明した処理と同様の処理である。
図18は、実施の形態2にかかるロボット制御装置が他軸の仮動作指令を生成する処理を説明するための図である。図18のグラフは、経由エリアが2つの場合における、関節補間軌道の各軸モータの角速度を示している。すなわち、図18ではm=2である。
図18の上段に示す2つのグラフが、代表軸に対する角速度のグラフである。また、中段に示すグラフおよび下段に示すグラフが、他軸に対する角速度のグラフである。各グラフの横軸は時間であり、縦軸は角速度である。
動作指令生成部24は、手先ツール102を、動作始点PSからm個の仮中継点PRごとに停止させて動作終点PGまで移動させる関節補間軌道を生成する。以下、実施の形態2での関節補間軌道を関節補間軌道R1という。図18の上段に示すグラフのうち左側のグラフが関節補間軌道R1に対応し、右側のグラフが関節補間軌道R0に対応する。
ロボット101に含まれる全ての軸は同じ動作時間を有している。ここで、動作始点PSから仮中継点P1までの動作時間をt1j、仮中継点Pk-1から仮中継点Pkまでの動作時間をtkj(kは2からmまでの自然数)、仮中継点PRから動作終点PGまでの動作時間をtm+1jとする。
動作指令生成部24は、代表軸に対し、関節補間軌道R1における動作指令ではなく関節補間軌道R0における動作指令を使用する。動作指令生成部24は、代表軸に対し、関節補間軌道R0における動作指令を用いて動作始点PSから仮中継点P1まで動作する際の動作時間t1jを計算する。
また、動作指令生成部24は、代表軸に対し、関節補間軌道R0における動作指令を用いて、仮中継点Pk-1から仮中継点Pkまで動作する際の動作時間tkjを計算する。図18では、仮中継点Pk-1=P1であり、仮中継点Pk=P2であり、動作時間tkj=t2である。
また、動作指令生成部24は、代表軸に対し、関節補間軌道R0における動作指令を用いて、仮中継点PRから動作終点PGまで動作する際の動作時間tm+1jを計算する。図18では、仮中継点PR=P2であり、動作時間tm+1j=t3である。
例えば、動作始点PSにおける代表軸j´の角度θsj´から仮中継点P1における代表軸j´の角度θR1´までの角度変化量が、時刻t=0からt1jまでの代表軸j´の動作指令の積分値と一致する時刻がt1jとなる。
動作指令生成部24は、実施の形態1と同様の処理によって他軸の動作時間t1j,tkj,tm+1jを計算する。ここでは、動作始点PSから仮中継点P1まで動作する際の動作時間が動作時間t1jであり、仮中継点Pk-1から仮中継点Pkまで動作する際の動作時間が動作時間t2jであり、仮中継点PRから動作終点PGまで動作する際の動作時間が動作時間t3jである。
ここで、図17のステップS360の詳細な処理、すなわち他軸の動作指令を調整する処理について説明する。図19は、実施の形態2にかかるロボット制御装置が他軸の動作指令を調整する処理の処理手順を示すフローチャートである。図19に示す処理のうち、図10で説明した処理と同様の処理については重複する説明を省略する。
動作指令生成部24は、図17のステップS350で生成した仮動作指令を一時的な動作指令である一時動作指令に設定する(ステップS510)。
次に、動作指令生成部24は、移動方向が同じで連続する区間の動作を統合する(ステップS521)。換言すると、動作指令生成部24は、各軸の一時動作指令の中で連続方向の角度変化を行う区間を統合する。移動方向が同じで連続する区間の組は、軸jについて仮中継点Pk-1から仮中継点Pkまでの区間と、仮中継点Pkから仮中継点Pk+1までの区間とが存在する場合に、以下の式(13)が成立する区間の組である。
図20は、実施の形態2にかかるロボット制御装置が統合する連続方向の動作指令を説明するための図である。図20のグラフは、移動方向である回転方向が同じで連続する区間の角速度を示している。図20の左に示すグラフが、統合前の角速度のグラフであり、右に示すグラフが、統合後の角速度のグラフである。各グラフの横軸は時間であり、縦軸は角速度である。
図20では、仮中継点Pk-1からPkまでの区間の動作時間をt1jで示し、仮中継点PkからPk+1までの区間の動作時間をt2jで示し、仮中継点Pk+1からPk+2までの区間の動作時間をt3jで示している。
仮中継点Pk-1からPkまでの区間と、仮中継点PkからPk+1までの区間とが同じ回転方向の動作である。したがって、動作指令生成部24は、仮中継点Pk-1からPkまでの区間と、仮中継点PkからPk+1までの区間とを統合する。これにより、動作指令生成部24は、連続して同じ方向に角度変化する区間を統合する。
この場合において、動作指令生成部24は、統合後の区間での加速度には、仮中継点Pk-1からPkまでの区間の加速度と同一の加速度を使用する。また、動作指令生成部24は、統合後の減速度には、仮中継点Pk-1からPkまでの区間と同一の減速度を使用する。また、動作指令生成部24は、統合後の区間の動作時間を、仮中継点Pk-1からPkまでの区間の動作時間と、仮中継点PkからPk+1までの区間の動作時間の和とする。統合後の区間における軸jの動作指令の最高速度v ̄k-1jは、以下の式(14)をv ̄k-1jについて解くことで決定される。ここで、加速度はa、減速度はbとする。
以下の説明では、統合後の区間で、軸jの角速度が0となる時刻におけるmj(<m)個の軸jの角度θkjとなる位置を、統合後の仮中継点と呼ぶ。
次に、動作指令生成部24は、選択した他軸の動作時間を短縮するよう動作指令の加減速タイミングをずらす(ステップS530)。具体的には、動作指令生成部24は、選択した他軸の動作時間を短縮するよう、加減速タイミングのずらし量を決定し、決定した加減速タイミングのずらし量に基づいて動作指令を生成する。
図21は、実施の形態2にかかるロボット制御装置が動作時間を短縮するよう他軸の動作指令の加減速タイミングをずらす処理を説明するための図である。図21では、他軸として軸jが選択されている場合について説明する。
図21の上段に示すグラフが、代表軸に対する関節補間軌道R0の速度指令値に対応する角速度のグラフである。中段に示すグラフが他軸に対する変更前の速度指令値に対応する角速度のグラフであり、下段に示すグラフが他軸に対する変更後の速度指令値に対応する角速度のグラフである。各グラフの横軸は時間であり、縦軸は軸の角速度である。
図21では、仮中継点Pk-1からPkまでの区間の動作時間をt1jで示し、仮中継点PkからPk+1までの区間の動作時間をt2jで示し、仮中継点Pk+1からPk+2までの区間の動作時間をt3jで示している。
動作指令生成部24は、動作始点PSから統合後の仮中継点P1までの動作指令から順番に動作指令の最高速度を変更することで動作時間を短縮する。具体的には、動作指令生成部24は、統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの動作指令の最高速度を、最高速度ovrdkj*v_maxjから最高速度ovrdkj_New*v_maxj(0<ovrdkj_New<1)に変更する。
また、動作指令生成部24は、統合後の仮中継点Pk-1での加速度に、ステップS521で使用した加速度を使用する。同様に、動作指令生成部24は、統合後の仮中継点Pk-1での減速度に、ステップS521で使用した減速度を使用する。
なお、動作指令生成部24は、ovrdkj_Newの値を、経由エリア内での軌道生成の繰り返しごとに変更してもよい。動作指令生成部24は、例えば、繰り返しの初期はovrdkj_New=1に設定し、繰り返し回数が増えるごとにovrdkj_Newを一定量ずつ減少させる。
動作指令生成部24は、統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの動作時間tkjの変更後の動作時間tkj_Newを、以下の式(15)を用いて計算する。
図21の下段のグラフでは、k=1の場合の動作時間を図示している。すなわち、図21の下段のグラフでは、変更後の動作時間である動作時間t1j_Newを図示している。
図21に示すように動作指令生成部24は、動作時間を短縮するよう軸jの動作指令の仮中継点Pkにおける軸角度をずらすことで、角度変化量を減らすことができる。軸角度を変更する前の台形の面積T3と、軸角度を変更した後の台形の面積T4との差分が、角度変化量の削減量に対応している。
次に、動作指令生成部24は、ステップS530で動作指令を変更した各他軸について、変更後の動作指令での動作時間が、一時動作指令での動作時間以下であるか否かを判断する。すなわち、動作指令生成部24は、全他軸に対し、他軸が、変更後の動作指令での動作時間=一時動作指令での動作時間であるか否かを判断する(ステップS540)。
他軸における変更後の動作指令での動作時間=一時動作指令での動作時間である場合(ステップS540、Yes)、動作指令生成部24は、変更後の動作指令を、出力軌道の候補として記憶する。すなわち、変更後の動作指令での動作時間=一時動作指令での動作時間の他軸に対し、動作指令生成部24は、変更後の動作指令を一時動作指令に設定する(ステップS550)。
動作指令生成部24は、変更後の動作指令での動作時間>一時動作指令での動作時間の他軸に対しては(ステップS540、No)、一時動作指令を変更せず、ステップS560の処理に進む。
動作指令生成部24は、ステップS530で変更した他軸のうち、一時動作指令での動作時間が関節補間軌道R0での動作時間を超過する他軸を選択する(ステップS560)。
次に、動作指令生成部24は、ステップS521で統合した他軸の動作時間を短縮するよう動作指令の仮中継点PRにおける軸角度をずらす(ステップS571)。動作指令生成部24は、仮中継点PRの軸角度をずらした動作指令を生成する。以下、ステップS580以降の処理は、実施の形態1で説明した処理と同様の処理である。
図22は、実施の形態2にかかるロボット制御装置が動作時間を短縮するよう他軸の動作指令の仮中継点における軸角度をずらす処理を説明するための図である。図22では、軸jが選択されている場合について説明する。
図22の上段に示すグラフが、代表軸に対する関節補間軌道R0の速度指令値に対応する角速度のグラフである。中段に示すグラフが他軸に対する変更前の速度指令値に対応する角速度のグラフであり、下段に示すグラフが他軸に対する変更後の速度指令値に対応する角速度のグラフである。各グラフの横軸は時間であり、縦軸は軸の角速度である。
動作指令生成部24は、仮中継点PRにおける軸jの角度を、θRkjからθRkj_Newに変更する。また、動作指令生成部24は、動作始点PSでの加速度として、ステップS521で用いた加速度を使用する。また、動作指令生成部24は、仮中継点PRでの減速度として、ステップS521で用いた減速度を使用する。
動作指令生成部24は、θRkj_Newを以下の式(16)を満たす範囲から指定する。
動作指令生成部24は、軸jの統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの変更後の動作時間tkj_Newの値を、以下の式(17)を用いて計算する。図22では、ovrdkj_New=1の場合を示している。ここで、加速度をa、減速度をbとする。
動作指令生成部24は、軸jの統合後の仮中継点Pkから統合後の仮中継点Pk+1までの変更後の動作時間tk+1j_Newの値を、以下の式(18)を用いて計算する。図22では、ovrdk+1j_New=1の場合を示している。ここで、加速度をc、減速度をdとする。
図22の下段のグラフでは、k=1の場合の動作時間を図示している。すなわち、図22の下段のグラフでは、変更後の動作時間である動作時間t1j_Newおよび動作時間t2j_Newを図示している。
図22に示すように動作指令生成部24は、動作時間を短縮するよう軸jの動作指令の仮中継点Pkにおける軸角度をずらすことで、角度変化量を減らすことができる。軸角度を変更する前の台形の面積T5と、軸角度を変更した後の台形の面積T6との差分が、角度変化量の削減量に対応している。
ここで、動作指令生成部24が、代表軸の動作指令を調整する処理であるステップS400の処理について説明する。動作指令生成部24は、例えば、動作指令の開始タイミングをずらすことで代表軸の動作指令を調整してもよい。また、動作指令生成部24は、動作中の最高速度を一括変更することで代表軸の動作指令を調整してもよいし、動作中の最高速度を局所変更することで代表軸の動作指令を調整してもよい。
図23は、実施の形態2にかかるロボット制御装置が代表軸の動作指令の開始タイミングをずらすことで代表軸の動作指令を調整する処理を説明するための図である。図24は、実施の形態2にかかるロボット制御装置が動作中の代表軸の最高速度を一括変更することで代表軸の動作指令を調整する処理を説明するための図である。図25は、実施の形態2にかかるロボット制御装置が動作中の代表軸の最高速度を局所変更することで代表軸の動作指令を調整する処理を説明するための図である。
図23から図25の上段に示すグラフは、何れも代表軸に対する関節補間軌道R0での角速度のグラフであり、下段に示すグラフは、何れも他軸に対する関節補間軌道R1での角速度のグラフである。
動作指令生成部24は、ステップS360で調整した他軸の動作指令のうち、最も動作時間の長い軸j_lの動作時間Σ1
m´tkj_l_Newに合わせるよう、代表軸の動作指令を調整する。
図23に示すように、動作指令生成部24は、動作指令の開始タイミングをずらすことで代表軸の動作指令を調整する場合、Δtだけ動作指令の開始タイミングをずらす。この場合において、動作指令生成部24は、調整後の代表軸の動作時間Δt+Σ1
mtkが最も動作時間の長い軸j_lの動作時間Σ1
m´tkj_l_Newを超えない範囲のΔtを選択する。
図24に示すように、動作指令生成部24は、動作中の最高速度を一括変更することで代表軸の動作指令を調整する場合、最高速度をv_maxj´からovrdj´*v_maxj´に変更する。動作指令生成部24は、ovrdj´として、以下の式(19)をovrdj´について解いた値を使用する。また、動作指令生成部24は、加速度および減速度として、調整前の代表軸の動作指令と同じ加速度および減速度を使用する。式(19)では、代表軸の動作指令における加速度がa_j´であり、減速度がb_j´である。
図25に示すように、動作指令生成部24は、動作中の最高速度を局所変更することで代表軸の動作指令を調整する場合、軸j_lの統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの動作に対応する代表軸の動作指令区間の動作時間をtkj_l_Newに変更する。ここで、軸j_lの統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの動作が、統合前の仮中継点Pk´-1から統合前の仮中継点Pk´+ΔkまでのΔk+1個の動作指令の統合である場合、対応する代表軸の動作指令区間は時刻tk´から時刻tk´+Δkの区間である。
軸j_lの統合後の仮中継点Pk-1から統合後の仮中継点Pkまでの動作に対する代表軸の最高速度をovrdkj´*v_maxj´とする。また、実施の形態2では、動作指令区間を切り替える際の速度変更にかかる時間は、後の動作区間に含まれるものとする。この場合において、動作指令生成部24は、ステップS360で調整した他軸の動作指令と、代表軸の仮中継点PRの位置および速度情報とから、時刻tkj_l_Newにおいて代表軸の駆動に使用できる最大駆動トルクを計算する。次に、動作指令生成部24は、軸jを最大駆動トルクで駆動した場合の加速度akを求める。ここでの動作指令生成部24は、以下の式(20)を解くことによってovrdkj´を決定する。
図25では、代表軸の変更後の最高速度として、ovrd1j´*v_maxj´と、ovrd2j´*v_maxj´と、ovrd3j´*v_maxj´とを図示している。
動作指令生成部24は、ステップS160からS230まで、実施の形態1と同様の処理を実行する。ここで、実施の形態2のステップS240の処理、すなわち動作指令生成部24が経由エリアを変更する処理について説明する。
動作指令生成部24は、生成した軌道が障害物31,32の何れかと干渉する場合、ステップS150で設定した経由エリアの候補の中から1つの候補を指定し、現在の経由エリアを指定した経由エリアに変更する。また、動作指令生成部24は、干渉点を基準に、現在の経由エリアを、干渉点から特定距離だけ離れた空間の経由エリアに変更してもよい。干渉点は、動作指令生成部24が生成した軌道が、障害物31,32の何れかと初めて衝突する時刻におけるロボット101と衝突する障害物との交差部分の位置である。
図26は、実施の形態2にかかるロボット制御装置が干渉点から特定距離だけ離れた空間に経由エリアを変更する処理を説明するための図である。図26では、障害物が障害物31~33の3つである場合について説明する。ここでは、軌道が、初めて衝突する障害物が障害物31である場合を示している。
動作指令生成部24は、干渉点PXを通過する経由エリア(図示せず)を、干渉点PXから特定距離だけ離れた経由エリア604に変更する。ここでの特定距離は、例えば、手先ツール102の特定位置の寸法の数倍程度の距離である。なお、特定距離は、ロボット101の特定位置の寸法の数倍程度の距離であってもよい。動作指令生成部24が経由エリア604を追加する方向は、干渉点PXから見て障害物31の物体中心から遠ざかる方向が望ましい。
動作指令生成部24は、ステップS150で設定した経由エリアの候補の中から1つの候補を指定して経由エリアを変更し、全ての候補に対して動作指令を調整する処理を実行しても出力する軌道が無い場合には、経由エリアを追加してもよい。
また、動作指令生成部24は、生成軌道での動作時間が関節補間軌道R0での動作時間よりも長い場合には、ステップS150で指定した経由エリアの候補の中から1つの候補を選択し、現在の経由エリアを指定した経由エリアに変更する。また、動作指令生成部24は、図27に示すように、現在の経由エリアの位置を、障害物31~33を内部に含まない範囲で移動させてもよい。
図27は、実施の形態2にかかるロボット制御装置が、障害物を内部に含まない位置に経由エリアを変更する処理を説明するための図である。図26では、障害物が障害物41の1つである場合について説明する。ここでは、変更前の経由エリアを経由エリア605として示し、変更後の経由エリアを経由エリア606として示している。
経由エリア605から経由エリア606への移動方向は、ロボット101の各軸の角度変化量が減少する方向が望ましい。
動作指令生成部24は、経由エリア605の位置を経由エリア606の位置に移動させても動作時間が短縮されない場合には、ステップS150で設定した経由エリアの候補の中から1つの候補を指定して経由エリアを変更してもよい。
実施の形態2でも、動作指令生成部24は、実施の形態1と同様に、生成軌道に従って動作した場合に動作時間が関節補間軌道R0での動作時間以下となる軌道を優先して出力する。また、動作指令生成部24は、全ての生成軌道が関節補間軌道R0での動作時間よりも長い場合には、生成軌道の中で最も動作時間が短い軌道を選択する。したがって、動作指令生成部24は、障害物31との干渉を回避する軌道の中で動作時間が最短となる軌道を選択できる。
このように、実施の形態2によれば、動作指令生成部24は、複数の障害物が配置され、複数の経由エリアを設定する場合であっても、実施の形態1と同様に経由エリアを通過する軌道を生成することができる。すなわち、動作指令生成部24は、他軸の動作指令を調整した後、代表軸の動作指令を調整し、調整後の動作指令に対して軌道を生成する。そして、動作指令生成部24は、障害物31との干渉がない場合には、生成軌道を出力軌道の候補として記憶しておく。したがって、動作指令生成部24は、各障害物との衝突を回避し、且つロボット101によって実行可能な軌道のみを、出力軌道の候補として生成することが可能となる。
また、動作指令生成部24は、実施の形態1と同様に、経由点を限定して経由点の位置を変更しない場合と比較して、動作時間を同等以下とする軌道を生成できる。また、動作指令生成部24は、実施の形態1と同様に、障害物との干渉を回避する軌道の中で動作時間が最短となる軌道を生成できる。
実施の形態3.
次に、図28から図31を用いて実施の形態3について説明する。実施の形態3では、ロボット制御装置200が、機械学習によって各軸の動作指令を調整する。実施の形態3でも、実施の形態1と同様に、手先ツール102の特定位置が動作始点PSから動作終点PGまで移動する際に、手先ツール102が障害物31と衝突しないように動作する軌道を生成する方法を説明する。
実施の形態3では、手先ツール102の経由エリアは指定されない。また、実施の形態3のロボット101およびロボット制御装置200の構成は、実施の形態1のロボット101およびロボット制御装置200の構成と同じである。
以下、実施の形態3において動作指令生成部24が、手先ツール102の軌道を生成する処理について説明する。図28は、実施の形態3にかかるロボット制御装置による軌道生成の処理手順を示すフローチャートである。実施の形態3のロボット制御装置200は、動作指令生成部24が、実施の形態1の図4で説明した、ステップS110からS140の処理と同様の処理を実行する。
また、動作指令生成部24は、ステップS140の処理の後、機械学習を用い、ロボット動作の制約下で障害物31との干渉を回避する軌道の中で動作時間が最短となる軌道に対応する各軸モータの動作指令を生成する学習処理を実行する。この学習処理には、他軸の動作指令を調整して動作時間を短縮する処理と、少なくとも代表軸を含む各軸モータの動作指令を調整して軌道を生成する処理とが含まれている。
具体的には、動作指令生成部24は、ステップS140の処理の後、ステップS170からS200の処理を実行する。この場合において、動作指令生成部24は、ステップS190の代わりにステップS191の処理を実行する。すなわち、生成軌道が障害物31を回避できない場合(ステップS180、No)、動作指令生成部24は、代表軸を含む全軸の動作指令を調整し、軌道を生成する(ステップS191)。ステップS191の処理である全軸の動作指令を調整する処理の詳細については、後述する。
動作指令生成部24は、ステップS200の処理において、軌道がステップS200の条件を満たさない場合(ステップS200、No)、第1の繰り返しカウンタのカウント数が、設定された最大値となっているか否かを判断する。すなわち、動作指令生成部24は、i=最大繰り返し回数となっているか否かを判断する(ステップS220)。
i=最大繰り返し回数となっていない場合(ステップS220、No)、iに1を加算し(ステップS250)、ステップS170の処理に戻る。一方、i=最大繰り返し回数となっている場合(ステップS220、Yes)、動作指令生成部24は、最短動作時間の生成軌道に対応する動作指令を各軸モータ制御部に出力する(ステップS260)。
ここで、実施の形態3におけるステップS170の処理、すなわち他軸の動作指令を調整する処理の詳細について図29を用いて説明する。図29は、実施の形態3にかかるロボット制御装置が他軸の動作指令を調整する処理の処理手順を示すフローチャートである。図30は、実施の形態3にかかるロボット制御装置が用いる各軸モータの動作指令を説明するための図である。図30では、各軸モータの動作指令の値を表現するパラメータを図示している。
実施の形態3では、動作指令生成部24は、各軸モータの動作指令としてモータ速度指令を使用する。また、実施の形態3では、動作指令生成部24は、各軸モータの動作指令の調整を簡易化するために、図30に示すパラメータを動作指令パラメータとして使用する。
1つ目の動作指令パラメータは、動作中の角度変化の回数である。動作中の角度変化は、各軸モータの速度が0の状態から加速を行い、指定の最高速度に到達したら一定速度で稼働し、ある程度の時間が経過したら減速を行うという一連のモータ動作における角度変化である。実施の形態3では、ロボット101の軸jの軸モータであるj軸モータの動作中の角度変化の回数をjkとする。
2つ目の動作指令パラメータは、各角度変化の開始タイミングである。各角度変化の開始タイミングは、ロボット101のj軸モータの動作指令に対しjk個存在する。実施の形態3では、jk番目の角度変化の開始タイミングをtimejkとする。
3つ目の動作指令パラメータは、各角度変化における角速度の最高速度である。各角度変化における最高速度は、ロボット101のj軸モータの動作指令に対しjk個存在する。実施の形態3では、jk番目の角度変化における最高速度をv_maxjkとする。
4つ目の動作指令パラメータは、各軸モータが最高速度を出力する時間の長さである。各軸モータが最高速度を出力する時間の長さは、ロボット101のj軸モータの動作指令に対しjk個存在する。実施の形態3では、jk番目の角度変化における各軸モータが最高速度を出力する時間の長さである出力時間をctjkとする。
5つ目の動作指令パラメータは、各角度変化における加速度である。各角度変化における加速度は、ロボット101のj軸モータの動作指令に対しjk個存在する。実施の形態3では、jk番目の各角度変化における加速度をajkとする。
6つ目の動作指令パラメータは、各角度変化における減速度である。各角度変化における減速度はロボット101のj軸モータの動作指令に対しjk個存在する。実施の形態3では、jk番目の各角度変化における減速度をdjkとする。
まず、動作指令生成部24は、全ての他軸に対して動作中の角度変化の回数であるjkを設定する(ステップS810)。関節補間軌道R0においては、全ての軸がjk=1である。
動作指令生成部24は、障害物31との間で干渉を回避する軌道を学習して生成する。この干渉を回避する軌道は、関節補間軌道R0よりも自由度が高いので、動作指令生成部24は、jk=2以上となる軸が複数存在するよう軌道を生成することが望ましい。
次に、動作指令生成部24は、各角度変化について、加速度ajkおよび減速度djkの仮の値を設定する(ステップS820)。この場合において、動作指令生成部24は、ajkおよびdjkとして、各軸モータが単体で出力可能な最大加速度を超えない値を設定する。
次に、動作指令生成部24は、一次学習を繰り返す処理で繰り返し回数の判断に用いるカウンタである第1の学習用カウンタを初期化する。すなわち、動作指令生成部24は、第1の学習用カウンタにi2=1を代入する(ステップS830)。第1の学習用カウンタは、後述するステップS870の処理で用いられるカウンタである。
次に、動作指令生成部24は、動作指令パラメータのうち、開始タイミングtimejk、最高速度v_maxjk、および出力時間ctjkの候補である候補C1を生成する(ステップS840)。具体的には、動作指令生成部24は、動作指令パラメータのうち、角度変化の開始タイミングtimejkと、各角度変化における最高速度v_maxjkと、各軸モータが最高速度を出力する出力時間ctjkの初期値と、を設定した動作指令の候補C1を生成する。ここでの動作指令生成部24は、v_maxjkとして、各軸モータの出力可能な最高速度を超えない値を設定する。また、動作指令生成部24は、timejkとして、関節補間軌道R0での動作時間を超えない値を設定する。
動作指令生成部24は、次のステップS850の処理で使用するパラメータ学習アルゴリズムに基づいて、生成する候補C1の組数を決定する。ステップS850の処理で使用するパラメータ学習アルゴリズムは、動作指令パラメータを学習するアルゴリズムである。すなわち、ステップS850の処理で使用するパラメータ学習アルゴリズムは、動作指令を表現するパラメータの評価関数(後述する評価関数J1)を学習するアルゴリズムである。
動作指令生成部24は、例えば、ステップS850の処理で群強化学習または遺伝アルゴリズムを使用する場合には、候補C1となる動作指令パラメータの組を複数用意する。また、動作指令生成部24は、ステップS850の処理でベイズ最適化を使用する場合には、候補C1となる動作指令パラメータの組を一組用意する。
次に、動作指令生成部24は、評価関数J1に基づいて、生成した各候補C1の値を更新する(ステップS850)。すなわち、動作指令生成部24は、評価関数J1に基づいて、角度変化の開始タイミングtimejk、各角度変化における最高速度v_maxjk、および各軸モータが最高速度を出力する出力時間ctjkの各値を更新する。動作指令生成部24は、評価関数J1の評価値V1を最小化するように、動作指令パラメータの各候補C1の値を更新する。
動作指令生成部24は、評価関数J1として、例えば、以下の式(21)に示す関数を使用する。式(21)では、c1はc1>0を満たす任意の定数であり、tactは、使用した動作指令パラメータの候補C1における動作指令での動作時間である。
式(21)に示す関数の第1項は、動作中にロボット101と障害物31との衝突が発生した場合に大きくなる。式(21)に示す関数の第2項は、候補C1となる動作指令パラメータから動作指令を生成した際の動作時間に比例する。式(21)に示す関数の値である評価値V1を小さくする候補C1は、ロボット101と障害物31の衝突を回避し、動作時間が抑制された候補である。すなわち、動作指令生成部24は、評価関数J1を学習するパラメータ学習アルゴリズムに基づいて、ロボット101と障害物31との衝突を回避しつつ第3の動作時間を抑制したパラメータの候補C1を生成する。評価値V1は、動作時間が短いほど低くなる。
前述したように、動作指令生成部24が用いるステップS850のパラメータ学習アルゴリズムは、例えば、群強化学習、遺伝アルゴリズム、ベイズ最適化などの任意のブラックボックス最適化手法である。
次に、動作指令生成部24は、更新した動作指令パラメータの候補C1のうち、評価関数J1の値である評価値V1が、事前に指定しておいた指定値TH1以下となる候補C1が1つ以上存在するか否かを確認する(ステップS860)。事前に指定しておく指定値TH1は、例えば、関節補間軌道R0での動作時間の2倍程度の値である。
評価値V1が指定値TH1以下となる候補C1が存在しない場合(ステップS860、No)、動作指令生成部24は、繰り返し回数が最大繰り返し回数となっているか否かを判断する。すなわち、動作指令生成部24は、i2=最大繰り返し回数となっているか否かを判断する(ステップS870)。
i2=最大繰り返し回数である場合(ステップS870、Yes)、ステップS191の処理、すなわち代表軸を含む全軸の動作指令を調整する処理に移行する。i2=最大繰り返し回数でない場合(ステップS870、No)、動作指令生成部24は、i2に1を加算し(ステップS880)、ステップS850の処理に戻る。
動作指令生成部24は、評価値V1が指定値TH1以下となる候補C1が存在せず(ステップS860、No)、i2=最大繰り返し回数でない場合(ステップS870、No)、ステップS850からS880までの処理を繰り返す。
評価値V1が指定値TH1以下となる候補C1が1つでも存在する場合(ステップS860、Yes)、動作指令生成部24は、一次学習を繰り返す処理で繰り返し回数の判断に用いるカウンタである第2の学習用カウンタを初期化する。すなわち、動作指令生成部24は、第2の学習用カウンタにi3=1を代入する(ステップS890)。第2の学習用カウンタは、後述するステップS930の処理で用いられるカウンタである。
次に、動作指令生成部24は、評価値V1が指定値TH1以下となるパラメータの候補C1に基づいて、動作指令パラメータのうち、開始タイミングtimejk、最高速度v_maxjk、出力時間ctjk、加速度ajk、および減速度djkの候補である候補C2を生成する(ステップS900)。具体的には、動作指令生成部24は、動作指令パラメータのうち、角度変化の開始タイミングtimejkと、各角度変化における最高速度v_maxjkと、各軸モータが最高速度を出力する出力時間ctjkと、加速度ajkの初期値と、および減速度djkの初期値とを設定した動作指令の候補である候補C2を生成する。ここでの動作指令生成部24は、ステップS860において評価値V1が指定値TH1以下となる候補C1のtimejk、v_maxjk、およびctjkを用いる。
動作指令生成部24は、次のステップS910の処理で使用するパラメータ学習アルゴリズムに基づいて、生成する候補C2の数を決定する。ステップS910の処理で使用するパラメータ学習アルゴリズムは、動作指令パラメータを学習するアルゴリズムである。すなわち、ステップS910の処理で使用するパラメータ学習アルゴリズムは、動作指令を表現するパラメータの評価関数(後述する評価関数J2)を学習するアルゴリズムである。
動作指令生成部24は、例えば、ステップS910の処理で群強化学習または遺伝アルゴリズムを使用する場合には、候補C2となる動作指令パラメータの組を複数用意する。また、動作指令生成部24は、ステップS910の処理でベイズ最適化を使用する場合には、候補C2となる動作指令パラメータの組を一組用意する。
次に、動作指令生成部24は、評価関数J2に基づいて、生成した各候補C2の値を更新する(ステップS910)。すなわち、動作指令生成部24は、評価関数J2に基づいて、角度変化の開始タイミングtimejk、各角度変化における最高速度v_maxjk、各軸モータが最高速度を出力する出力時間ctjk、加速度ajk、および減速度djkの各値を更新する。動作指令生成部24は、評価関数J2の評価値V2を最小化するように、動作指令パラメータの各候補C2の値を更新する。
動作指令生成部24は、評価関数J2として、例えば、以下の式(22)に示す関数を使用する。式(22)では、c1はc1>0を満たす任意の定数であり、c2はc2>0を満たす任意の定数である。また、tactは、使用した動作指令パラメータの候補C2における動作指令での動作時間である。torque_oは、動作中にトルク制約を超過した軸があった場合、最大超過量の絶対値であり、動作中に何れの軸もトルク制約を超過しない場合は0とする。
式(22)に示す関数の第1項は、動作中にロボット101と障害物31との衝突が発生した場合に大きくなる。式(22)に示す関数の第2項は、候補C2となる動作指令パラメータから動作指令を生成した際の動作時間に比例する。式(22)に示す関数の第3項は、ロボット101のトルク制約に関する項であり、制約を違反するほど第3項の値が大きくなる。ここで、ロボット101のトルク制約は、ロボット101の姿勢および各軸速度に依存するため動作中で値が変化する。式(22)に示す関数の値である評価値V2を小さくする候補C2は、ロボット101と障害物31の衝突を回避し、動作中のロボット101のトルク制約を満たし、かつ動作時間が抑制された候補である。すなわち、動作指令生成部24は、評価関数J2を学習するパラメータ学習アルゴリズムに基づいて、ロボット101と障害物31との衝突を回避し、かつ動作中のロボット101のトルク制約を満たし、かつ第3の動作時間を抑制したパラメータの候補C2を生成する。評価値V2は、動作時間が短いほど低くなる。
前述したように、動作指令生成部24が用いるステップS910のパラメータ学習アルゴリズムは、例えば、群強化学習、遺伝アルゴリズム、ベイズ最適化などの任意のブラックボックス最適化手法である。
次に、動作指令生成部24は、更新した動作指令パラメータの候補C2のうち、評価関数J2の値である評価値V2が、事前に指定しておいた指定値TH2以下となる候補C2が1つ以上存在するか否かを確認する(ステップS920)。事前に指定しておく指定値TH2は、例えば、関節補間軌道R0での動作時間の値である。
評価値V2が指定値TH2以下となる候補C2が1つでも存在する場合(ステップS920、Yes)、動作指令生成部24は、評価値V2が最小となる候補C2を他軸の動作指令に設定する(ステップS950)。すなわち、動作指令生成部24は、動作時間が最短となる候補C2を1つ選択し、選択した候補C2を、他軸の動作指令を調整する際のパラメータに設定する。
一方、評価値V2が指定値TH2以下となる候補C2が存在しない場合(ステップS920、No)、動作指令生成部24は、繰り返し回数が最大繰り返し回数となっているか否かを判断する。すなわち、動作指令生成部24は、i3=最大繰り返し回数となっているか否かを判断する(ステップS930)。
i3=最大繰り返し回数である場合(ステップS930、Yes)、動作指令生成部24は、評価値V2が最小となる候補C2を他軸の動作指令に設定する(ステップS950)。
i3=最大繰り返し回数でない場合(ステップS930、No)、動作指令生成部24は、i3に1を加算し(ステップS940)、ステップS910の処理に戻る。
動作指令生成部24は、評価値V2が指定値TH2以下となる候補C2が存在せず(ステップS920、No)、i3=最大繰り返し回数でない場合(ステップS930、No)、ステップS910からS940までの処理を繰り返す。そして、動作指令生成部24は、評価値V2が指定値TH2以下となる候補C2が1つでも存在するか、またはi3=最大繰り返し回数になると、評価値V2が最小となる候補C2を他軸の動作指令に設定する(ステップS950)。この後、動作指令生成部24は、ステップS170の処理を実行する。
図28に示したステップS170の処理が完了すると、動作指令生成部24は、ステップS950で設定した動作指令を用いてロボット101を動作させた場合の動作時間が関節補間軌道R0での動作時間以下であるか否かを確認する。すなわち、動作指令生成部24は、生成軌道が障害物31を回避するか否かを判断する(ステップS180)。
動作指令生成部24は、生成軌道が障害物31を回避する場合(ステップS180、Yes)、ステップS260の処理を実行する。一方、生成軌道が障害物31を回避できない場合(ステップS180、No)、動作指令生成部24は、代表軸を含む全軸の動作指令を調整し、調整後の動作指令で軌道を生成する(ステップS191)。
ここで、実施の形態3におけるステップS191の処理、すなわち代表軸を含む全軸の動作指令を調整する処理の詳細について図31を用いて説明する。図31は、実施の形態3にかかるロボット制御装置が全軸の動作指令を調整する処理の処理手順を示すフローチャートである。
まず、動作指令生成部24は、代表軸を含む全軸に対して動作中の角度変化の回数であるjkを設定する(ステップS1010)。動作指令生成部24は、他軸のjkについては、ステップS950で設定された値に設定することが望ましい。
次に、動作指令生成部24は、各角度変化について、加速度ajkおよび減速度djkの仮の値を設定する(ステップS1020)。動作指令生成部24は、他軸の加速度ajkおよび減速度djkについては、ステップS950で設定された値に設定することが望ましい。
次に、動作指令生成部24は、学習を繰り返す処理で繰り返し回数の判断に用いるカウンタである第3の学習用カウンタを初期化する。すなわち、動作指令生成部24は、第3の学習用カウンタにi4=1を代入する(ステップS1030)。第3の学習用カウンタは、後述するステップS1070の処理で用いられるカウンタである。
次に、動作指令生成部24は、動作指令パラメータのうち、開始タイミングtimejk、最高速度v_maxjk、出力時間ctjk、加速度ajk、および減速度djkの候補である候補C3を生成する(ステップS1040)。具体的には、動作指令生成部24は、動作指令パラメータのうち、角度変化の開始タイミングtimejkと、各角度変化における最高速度v_maxjkと、各軸モータが最高速度を出力する出力時間ctjkと、加速度ajkの初期値、および減速度djkの初期値を設定した動作指令の候補である候補C3を生成する。
動作指令生成部24は、次のステップS1050の処理で使用するパラメータ学習アルゴリズムに基づいて、生成する候補C3の数を決定する。ステップS1050の処理で使用するパラメータ学習アルゴリズムは、動作指令パラメータを学習するアルゴリズムである。すなわち、ステップS1050の処理で使用するパラメータ学習アルゴリズムは、動作指令を表現するパラメータの評価関数(後述する評価関数J3)を学習するアルゴリズムである。
動作指令生成部24は、例えば、ステップS1050の処理で群強化学習または遺伝アルゴリズムを使用する場合には、候補C3となる動作指令パラメータの組を複数用意する。また、動作指令生成部24は、ステップS1050の処理でベイズ最適化を使用する場合には、候補C3となる動作指令パラメータの組を一組用意する。
次に、動作指令生成部24は、評価関数J3に基づいて、生成した各候補C3の値を更新する(ステップS1050)。すなわち、動作指令生成部24は、評価関数J3に基づいて、角度変化の開始タイミングtimejk、各角度変化における最高速度v_maxjk、各軸モータが最高速度を出力する出力時間ctjk、加速度ajk、および減速度djkの各値を更新する。動作指令生成部24は、評価関数J3の評価値V3を最小化するように、動作指令パラメータの各候補C3の値を更新する。
動作指令生成部24は、評価関数J3として、例えば、上述の式(22)に示す数式のJ2をJ3に入れ替えた数式を使用する。この式(22)に示す関数の値である評価値V3を小さくする候補C3は、ロボット101と障害物31との衝突を回避し、動作中のロボット101のトルク制約を満たし、かつ動作時間が抑制された候補である。すなわち、動作指令生成部24は、評価関数J3を学習するパラメータ学習アルゴリズムに基づいて、ロボット101と障害物31との衝突を回避し、かつ動作中のロボット101のトルク制約を満たし、かつ第3の動作時間を抑制したパラメータの候補C3を生成する。評価値V3は、動作時間が短いほど低くなる。
前述したように、動作指令生成部24が用いるステップS1050のパラメータ学習アルゴリズムは、例えば、群強化学習、遺伝アルゴリズム、ベイズ最適化などの任意のブラックボックス最適化手法である。
次に、動作指令生成部24は、更新した動作指令パラメータの候補C3のうち、評価関数J3の値である評価値V3が、事前に指定しておいた指定値TH3以下となる候補C3が1つ以上存在するか否かを確認する(ステップS1060)。事前に指定しておく指定値TH3は、例えば、関節補間軌道R0での動作時間の値である。
評価値V3が指定値TH3以下となる候補C3が1つでも存在する場合(ステップS1060、Yes)、動作指令生成部24は、評価値V3が最小となる候補C3を各軸の動作指令に設定する(ステップS1090)。すなわち、動作指令生成部24は、動作時間が最短となる候補C3を1つ選択し、選択した候補C3を、各軸の動作指令を調整する際のパラメータに設定する。
一方、評価値V3が指定値TH3以下となる候補C3が存在しない場合(ステップS1060、No)、動作指令生成部24は、繰り返し回数が最大繰り返し回数となっているか否かを判断する。すなわち、動作指令生成部24は、i4=最大繰り返し回数となっているか否かを判断する(ステップS1070)。
i4=最大繰り返し回数である場合(ステップS1070、Yes)、動作指令生成部24は、評価値V3が最小となる候補C3を各軸の動作指令に設定する(ステップS1090)。
i4=最大繰り返し回数でない場合(ステップS1070、No)、動作指令生成部24は、i4に1を加算し(ステップS1080)、ステップS1050の処理に戻る。
動作指令生成部24は、評価値V3が指定値TH3以下となる候補C3が存在せず(ステップS1060、No)、i4=最大繰り返し回数でない場合(ステップS1070、No)、ステップS1050からS1080までの処理を繰り返す。そして、動作指令生成部24は、評価値V3が指定値TH3以下となる候補C3が1つでも存在するか、またはi4=最大繰り返し回数になると、評価値V3が最小となる候補C3を他軸の動作指令に設定する(ステップS1090)。この後、動作指令生成部24は、図28で説明したステップS200以降の処理を実行する。
ステップS220の処理において、i=最大繰り返し回数となっていない場合(ステップS220、No)、動作指令生成部24は、iに1を加算し(ステップS250)、ステップS170の処理に戻る。すなわち、第1の繰り返しカウンタの値が、最大繰り返し回数に達していない場合、動作指令生成部24は、ステップS170の処理に戻って他軸の動作指令を調整し、軌道を再生成する。この場合において、動作指令生成部24は、ステップS170の処理で設定する動作中の角度変更回数のjkを変更することで、前回の試行とは異なる軌道を生成することが可能である。
実施の形態3でも、動作指令生成部24は、実施の形態1,2と同様に、生成軌道に従って動作した場合に動作時間が関節補間軌道R0での動作時間以下となる軌道を優先して出力する。また、動作指令生成部24は、全ての生成軌道が関節補間軌道R0での動作時間よりも長い場合には、生成軌道の中で最も動作時間が短い軌道を選択する。したがって、動作指令生成部24は、障害物31との干渉を回避する軌道の中で動作時間が最短となる軌道を選択できる。なお、実施の形態3で説明した学習処理を実施の形態2での軌道の生成処理に適用してもよい。
このように、実施の形態3によれば、動作指令生成部24は、各軸モータの動作指令を有限個数の動作指令パラメータで表現し、動作指令パラメータを既存の学習アルゴリズムを用いて調整することで軌道を生成している。したがって、動作指令生成部24は、有限回数の調整試行で障害物31を回避する軌道を生成できる。また、動作指令生成部24は、衝突を回避した動作指令を、短時間で算出することが可能となる。
ここで、ロボット制御装置200のハードウェア構成について説明する。図32は、実施の形態1から3にかかるロボット制御装置のハードウェア構成を示す図である。
ロボット制御装置200は、図32に示した制御回路、すなわちプロセッサ301およびメモリ302により実現することができる。プロセッサ301の例は、CPU(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、DSP(Digital Signal Processor)ともいう)またはシステムLSI(Large Scale Integration)である。メモリ302の例は、RAM(Random Access Memory)またはROM(Read Only Memory)である。
ロボット制御装置200は、プロセッサ301が、メモリ302で記憶されている、ロボット制御装置200の動作を実行するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、ロボット制御装置200の手順または方法をコンピュータに実行させるものであるともいえる。ロボット制御装置200で実行されるプログラムは、動作指令生成部24、および各軸モータ制御部を含むモジュール構成となっており、これらが主記憶装置上にロードされ、これらが主記憶装置上に生成される。
メモリ302は、障害物情報、ロボット情報および端点情報を記憶する。メモリ302は、プロセッサ301が各種処理を実行する際の一時メモリにも使用される。
プロセッサ301が実行するプログラムは、インストール可能な形式または実行可能な形式のファイルで、コンピュータが読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されてもよい。また、プロセッサ301が実行するプログラムは、インターネットなどのネットワーク経由でロボット制御装置200に提供されてもよい。
また、ロボット制御装置200を専用のハードウェアで実現してもよい。また、ロボット制御装置200の機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。
以上の実施の形態に示した構成は、一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、実施の形態同士を組み合わせることも可能であるし、要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。