(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024111358
(43)【公開日】2024-08-19
(54)【発明の名称】直接教示装置及び直接教示方法
(51)【国際特許分類】
B25J 9/22 20060101AFI20240809BHJP
B25J 13/08 20060101ALI20240809BHJP
【FI】
B25J9/22 Z
B25J13/08 Z
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2023015784
(22)【出願日】2023-02-06
(71)【出願人】
【識別番号】000006666
【氏名又は名称】アズビル株式会社
(74)【代理人】
【識別番号】110003166
【氏名又は名称】弁理士法人山王内外特許事務所
(72)【発明者】
【氏名】田原 鉄也
【テーマコード(参考)】
3C707
【Fターム(参考)】
3C707BS10
3C707HS27
3C707KS21
3C707KS35
3C707KS36
3C707KV01
3C707KV12
3C707KW05
3C707KX10
3C707LS03
3C707LU07
3C707LV19
3C707LV24
(57)【要約】
【課題】従来に対し、操作者がロボットアーム1における手先以外を操作しても手先の姿勢の挙動が分かりやすくなる。
【解決手段】複数の関節に加えられた外力トルクを計測する外力トルク計測部202と、外力トルクに基づいて、従動制御を行う従動制御部203と、操作位置を判定する操作位置判定部204と、複数の関節の関節角を計測する位置姿勢計測部205と、関節角に基づいて、手先の姿勢を演算する姿勢演算部206と、姿勢に基づいて、手先の姿勢制御を行う姿勢制御部207と、従動制御部203による制御結果及び姿勢制御部207による制御結果に基づいて、ロボットアーム1を駆動する駆動制御部208とを備え、姿勢制御部207は、操作位置がロボットアーム1における手先部分であると判定された場合に、姿勢制御を無効とする。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ロボットアームが有する複数の関節に加えられた外力トルクを計測する外力トルク計測部と、
前記外力トルク計測部により計測された外力トルクに基づいて、前記ロボットアームの従動制御を行う従動制御部と、
前記ロボットアームの操作を行う操作者が操作を行っている当該ロボットアームにおける操作位置を判定する操作位置判定部と、
前記ロボットアームが有する複数の関節の関節角を計測する位置姿勢計測部と、
前記位置姿勢計測部により計測された関節角に基づいて、前記ロボットアームにおける手先の姿勢を演算する姿勢演算部と、
前記姿勢演算部により演算された姿勢に基づいて、前記ロボットアームにおける手先の姿勢制御を行う姿勢制御部と、
前記従動制御部による制御結果及び前記姿勢制御部による制御結果に基づいて、前記ロボットアームを駆動する駆動制御部とを備え、
前記姿勢制御部は、前記操作位置判定部により操作者の操作位置が前記ロボットアームにおける手先部分であると判定された場合に、姿勢制御を無効とする
ことを特徴とする直接教示装置。
【請求項2】
前記姿勢制御部は、前記操作位置判定部により操作者が前記ロボットアームにおける手先部分以外を操作していると判定される直前での、当該ロボットアームにおける手先の姿勢に基づいて、当該ロボットアームにおける手先の姿勢制御を行う
ことを特徴とする請求項1記載の直接教示装置。
【請求項3】
前記姿勢制御部は、前記ロボットアームにおける手先部分の関節のみを制御することで、当該ロボットアームにおける手先の姿勢制御を行う
ことを特徴とする請求項2記載の直接教示装置。
【請求項4】
前記姿勢制御部は、所定の座標系における所定の回転軸回りの回転を抑制するように、前記ロボットアームにおける手先の姿勢制御を行う
ことを特徴とする請求項2記載の直接教示装置。
【請求項5】
前記姿勢制御部は、所定の座標系における所定の回転軸回りの回転を抑制するように、前記ロボットアームにおける手先の姿勢制御を行う
ことを特徴とする請求項3記載の直接教示装置。
【請求項6】
前記操作位置判定部は、前記ロボットアームにおける手先と手首とを接続する関節及び当該関節よりも手先側にある関節のうちの何れか1つ以上で、前記外力トルク計測部により計測された外力トルクの大きさが所定の値よりも大きい場合に、操作者の操作位置が当該ロボットアームにおける手先部分であると判定する
ことを特徴とする請求項1記載の直接教示装置。
【請求項7】
前記操作位置判定部は、前記ロボットアームにおける手先部分に設けられて当該手先部分における人の接触有無を検知する接触センサによる検知結果に基づいて、操作者の操作位置が当該ロボットアームにおける手先部分であるか否かを判定する
ことを特徴とする請求項1記載の直接教示装置。
【請求項8】
前記操作位置判定部は、前記ロボットアームに設けられて光を検知する光電センサによる検知結果に基づいて、操作者の操作位置が当該ロボットアームにおける手先部分であるか否かを判定する
ことを特徴とする請求項1記載の直接教示装置。
【請求項9】
外力トルク計測部が、ロボットアームが有する複数の関節に加えられた外力トルクを計測するステップと、
従動制御部が、前記外力トルク計測部により計測された外力トルクに基づいて、前記ロボットアームの従動制御を行うステップと、
操作位置判定部が、前記ロボットアームの操作を行う操作者が操作を行っている当該ロボットアームにおける操作位置を判定するステップと、
位置姿勢計測部が、前記ロボットアームが有する複数の関節の関節角を計測するステップと、
姿勢演算部が、前記位置姿勢計測部により計測された関節角に基づいて、前記ロボットアームにおける手先の姿勢を演算するステップと、
姿勢制御部が、前記姿勢演算部により演算された姿勢に基づいて、前記ロボットアームにおける手先の姿勢制御を行うステップと、
駆動制御部が、前記従動制御部による制御結果及び前記姿勢制御部による制御結果に基づいて、前記ロボットアームを駆動するステップとを有し、
前記姿勢制御部は、前記操作位置判定部により操作者の操作位置が前記ロボットアームにおける手先部分であると判定された場合に、姿勢制御を無効とする
ことを特徴とする直接教示方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ロボットアームに対して直接教示を行う直接教示装置及び直接教示方法に関する。
【背景技術】
【0002】
産業用ロボットでは、ロボットアームに作業をさせるために、前もって教示と呼ばれる作業を行う。この教示は、ティーチングとも呼ばれる。このロボットアームに対して教示を行う方法の中に、直接教示と呼ばれる方法がある。この直接教示は、ダイレクト教示とも呼ばれる。
例えば特許文献1では、トルク検出手段を用いたロボットアームに対する直接教示方法が開示されている。
【0003】
この特許文献1に開示された直接教示方法の概略構成図を
図13に示す。
この直接教示方法では、
図13に示すように、ロボットアーム1及びロボットコントローラ(直接教示装置)2bを備えている。
【0004】
ロボットアーム1には、各関節に、トルクセンサ101が設けられている。
トルクセンサ101は、自身が設けられた関節に加えられたトルクを検知する。
【0005】
ロボットコントローラ2bは、従動制御部201b及び駆動制御部202bを有している。
従動制御部201bは、各トルクセンサ101により検知されたトルクに基づいて、操作者が加えた外力トルクの方向にロボットアーム1を動かす制御を行う。
駆動制御部202bは、従動制御部201bによる制御に従ってロボットアーム1を駆動する。
【0006】
これにより、従来の直接教示方法では、操作者がロボットアーム1の任意の部分に力を加えてロボットアーム1を直接操作でき、所望の姿勢になったところで手先の位置等を記録することで、直接教示が実現できる。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
このように、特許文献1に開示された従来の直接教示方法では、ロボットアーム1における手先だけでなく、人の手首又は腕にあたる部分に力を加えることでもロボットアーム1を操作できる。
しかしながら、操作者がロボットアーム1における手先以外の部分を操作した場合、ロボットアーム1における手先の姿勢が意図しない方向になる場合があり、直感的に分かりにくいという課題がある。
【0009】
例として、
図14に示すロボットアーム1において、操作者が、手先が鉛直下向きの状態から、部位A又は部位Bを上方に操作した場合で説明する。部位Aはロボットアーム1における手先である。また、部位Bは人手首に相当する部分である。
【0010】
操作者が部位Aを上方に操作した場合には、
図15Aに示すように、ロボットアーム1における手先の姿勢は概ね鉛直下向きのままになる。なお、手先の姿勢は、手先の向きともいえる。
すなわち、操作者が部位Aを上方に操作した場合には、当該操作によってロボットアーム1における関節Ja,Jb,Jcにトルクが発生して、当該関節Ja,Jb,Jcが全て動く。その結果、ロボットアーム1における手先の姿勢を維持したまま手先の位置を変えることができる。
【0011】
一方、操作者が部位Bを上方に操作した場合には、
図15Bに示すように、ロボットアーム1における手先の姿勢が変わる。
すなわち、操作者が部位Bを上方に操作した場合には、当該操作によってロボットアーム1における関節Ja,Jbにはトルクが発生するが、人が力を加えた点である力点よりも手先側にある関節Jcにはトルクが発生せず、当該関節Jcは動かない。その結果、関節Jcが動かないことによって、ロボットアーム1における手先の位置に連動して当該手先の姿勢が変わる。
【0012】
この違いは、ロボットアームの構造又は力学を理解している者には自明であるが、一般の使用者は必ずしも理解できるとは限らない。
特に初心者は、手首である部位Bを操作した場合でも手先である部位Aを操作した場合と同じように動くことを期待する可能性がある。
また、ロボットアームの操作に慣れた者であっても、部位Bを操作してしまうとロボットアームにおける手先の姿勢が変わるため、その手先の姿勢を元に戻すために再度操作が必要であり、ひと手間増えることになる。
【0013】
本開示は、上記のような課題を解決するためになされたもので、従来に対し、操作者がロボットアームにおける手先以外を操作しても手先の姿勢の挙動が分かりやすくなる直接教示装置を提供することを目的としている。
【課題を解決するための手段】
【0014】
本開示に係る直接教示装置は、ロボットアームが有する複数の関節に加えられた外力トルクを計測する外力トルク計測部と、外力トルク計測部により計測された外力トルクに基づいて、ロボットアームの従動制御を行う従動制御部と、ロボットアームの操作を行う操作者が操作を行っている当該ロボットアームにおける操作位置を判定する操作位置判定部と、ロボットアームが有する複数の関節の関節角を計測する位置姿勢計測部と、位置姿勢計測部により計測された関節角に基づいて、ロボットアームにおける手先の姿勢を演算する姿勢演算部と、姿勢演算部により演算された姿勢に基づいて、ロボットアームにおける手先の姿勢制御を行う姿勢制御部と、従動制御部による制御結果及び姿勢制御部による制御結果に基づいて、ロボットアームを駆動する駆動制御部とを備え、姿勢制御部は、操作位置判定部により操作者の操作位置がロボットアームにおける手先部分であると判定された場合に、姿勢制御を無効とすることを特徴とする。
【発明の効果】
【0015】
本開示によれば、上記のように構成したので、従来に対し、操作者がロボットアームにおける手先以外を操作しても手先の姿勢の挙動が分かりやすくなる。
【図面の簡単な説明】
【0016】
【
図1】実施の形態1に係るロボットシステムの構成例を示す図である。
【
図2】実施の形態1に係るロボットシステムの構成例を示す図である。
【
図3】実施の形態1における姿勢制御部の構成例を示す図である。
【
図4】実施の形態1に係るロボットコントローラの動作例を示すフローチャートである。
【
図5】実施の形態1における操作位置判定部による判定例を示す図である。
【
図6】実施の形態1に係るロボットシステムの別の構成例を示す図である。
【
図7】実施の形態1に係るロボットシステムの別の構成例を示す図である。
【
図8】実施の形態1における姿勢制御部の動作例を示すフローチャートである。
【
図9】実施の形態3に係るロボットコントローラで解決する課題の背景を説明するための図である。
【
図10】実施の形態3における姿勢制御部の構成例を示す図である。
【
図11】
図11A、
図11Bは、実施の形態3における修正姿勢偏差演算部の動作例(所定の座標系AにおけるZ軸回りの回転を抑制した姿勢制御を行う場合)を示す図である。
【
図12】
図12A、
図12Bは、実施の形態3における修正姿勢偏差演算部の動作例(所定の座標系AにおけるY軸回り及びZ軸回りの回転を抑制した姿勢制御を行う場合)を示す図である。
【
図13】従来のロボットシステムの構成例を示す図である。
【
図14】従来のロボットシステムにおける課題を説明するための図である。
【
図15】
図15A、
図15Bは、従来のロボットシステムにおける課題を説明するための図であって、
図15Aは操作者が部位Aを上方に操作した場合を示す図であり、
図15Bは操作者が部位Bを上方に操作した場合を示す図である。
【発明を実施するための形態】
【0017】
以下、実施の形態について図面を参照しながら詳細に説明する。
実施の形態1.
図1及び
図2は実施の形態1に係るロボットシステムの構成例を示す図である。
ロボットシステムは、
図1及び
図2に示すように、ロボットアーム1及びロボットコントローラ(直接教示装置)2を備えている。
【0018】
ロボットアーム1は、
図1及び
図2に示すように、複数の関節を有している。なお、
図1では、ロボットアーム1が、6つの関節を有する垂直多関節型ロボットアームである場合を示している。すなわち、
図1に示すように、このロボットアーム1は、ベース側から手先側に向かって、第1軸である関節11a、第2軸である関節11b、第3軸である関節11c、第4軸である関節11d、第5軸である関節11e、及び、第6軸である関節11fを有している。また、
図1における符号11gはロボットアーム1における手先を示している。なお、
図2では、ロボットアーム1が有する一部の関節の図示を省略している。
このようなロボットアーム1は、一般には、手先にあたる部分にエンドエフェクタが取り付けられ、各種作業を行う。
【0019】
また、
図2に示すように、ロボットアーム1には、各関節に、トルクセンサ101、モータ102(不図示)、及び、エンコーダ103(不図示)が設けられている。
トルクセンサ101は、関節の回転部に設けられ、当該関節に加えられたトルクを検知する。
モータ102は、関節の回転部に設けられ、当該関節を駆動する。
エンコーダ103は、モータ102に設けられ、当該モータ102が設けられた関節の関節角を検知する。
【0020】
なお、
図1では、ロボットアーム1が、6つの関節を有する垂直多関節型ロボットアームである場合を示している。
しかしながら、ロボットアーム1としてはこれに限らず、例えば、6軸以外のロボットアーム、又は、水平多関節型ロボットアームであってもよい。すなわち、ロボットアーム1は、操作者が手先を操作して外力をかけた場合に、その外力によるトルクが各関節にかかる構造のロボットアームであればよい。
【0021】
ロボットコントローラ2は、
図2に示すように、重力補償制御部201、外力トルク計測部202、従動制御部203、操作位置判定部204、位置姿勢計測部205、姿勢演算部206、姿勢制御部207、及び、駆動制御部208を備えている。
【0022】
なお、ロボットコントローラ2は、システムLSI(Large Scale Integration)等の処理回路、又はメモリ等に記憶されたプログラムを実行するCPU(Central Processing Unit)等により実現される。
【0023】
重力補償制御部201は、ロボットアーム1に対して重力補償制御を行う。この重力補償制御部201による重力補償制御の結果である重力補償制御指令値を示す信号は、駆動制御部208に出力される。
重力補償制御指令値は、例えば、ロボットアーム1が有する各関節に加えられた重力によって発生する重力トルクと釣り合うトルクを発生させるようなモータ電流の指令値である。
【0024】
なお、この重力補償制御部201は、ロボットアーム1が
図1に示すような垂直多関節型ロボットアームである場合のように、各関節に重力によるトルクが加えられる構造又は設置条件である場合等には必要であるが、そうでない場合には不要である。
【0025】
外力トルク計測部202は、ロボットアーム1が有する各関節に加えられた外力トルクを計測する。この際、例えば、外力トルク計測部202は、ロボットアーム1に設けられた各トルクセンサ101による検知結果を用いる。この外力トルク計測部202により計測された外力トルクを示す信号は、従動制御部203に出力される。
また、操作位置判定部204における判定方法によっては、外力トルク計測部202により計測された外力トルクを示す信号が、この操作位置判定部204にも出力される。
【0026】
従動制御部203は、外力トルク計測部202により計測された外力トルクに基づいて、ロボットアーム1の従動制御を行う。この従動制御部203による従動制御の結果である従動制御指令値を示す信号は、駆動制御部208に出力される。
【0027】
操作位置判定部204は、ロボットアーム1の操作を行う操作者が操作を行っている当該ロボットアーム1における操作位置を判定する。この操作位置判定部204により判定された操作位置を示す信号は、姿勢制御部207に出力される。
【0028】
なお、操作位置判定部204による操作位置の判定方法としては、例えば、操作位置判定部204が、ロボットアーム1における手先と手首とを接続する関節及び当該関節よりも手先側にある関節のうちの何れか1つ以上で、外力トルク計測部202により計測された外力トルクの大きさが所定の値よりも大きい場合に、操作者の操作位置が当該ロボットアーム1における手先部分であると判定する方法が挙げられる。
なお、ロボットアーム1における手先と手首とを接続する関節とは、操作者がロボットアーム1における手先部分を操作した場合には外力トルクが発生するが、操作者がロボットアーム1における手首部分を操作した場合には外力トルクが発生しない関節である。
【0029】
また、操作位置判定部204による操作位置の判定方法としては、例えば、操作位置判定部204が、ロボットアーム1における手先部分に設けられて当該手先部分における人の接触有無を検知する接触センサ104(
図6参照)による検知結果に基づいて、操作者の操作位置が当該ロボットアーム1における手先部分であるか否かを判定する方法も挙げられる。
【0030】
また、操作位置判定部204による操作位置の判定方法としては、例えば、操作位置判定部204が、ロボットアーム1に設けられて光を検知する光電センサ105(
図7参照)による検知結果に基づいて、操作者の操作位置が当該ロボットアーム1における手先部分であるか否かを判定する方法も挙げられる。
【0031】
位置姿勢計測部205は、ロボットアーム1が有する各関節の関節角を計測する。この際、例えば、位置姿勢計測部205は、ロボットアーム1に設けられた各エンコーダ103による検知結果等を用いる。この位置姿勢計測部205により計測された関節角を示す信号は、姿勢演算部206に出力される。
【0032】
姿勢演算部206は、位置姿勢計測部205により計測された関節角に基づいて、ロボットアーム1における手先の姿勢を演算する。この手先の姿勢は、手先の向きともいえる。この姿勢演算部206により演算された姿勢を示す信号は、姿勢制御部207に出力される。
【0033】
姿勢制御部207は、姿勢演算部206により演算された姿勢に基づいて、ロボットアーム1における手先の姿勢制御を行う。この際、姿勢制御部207は、操作位置判定部204により操作者がロボットアーム1における手先部分以外を操作していると判定される直前での、当該ロボットアーム1における手先の姿勢に基づいて、当該ロボットアーム1における手先の姿勢制御を行う。この姿勢制御部207による姿勢制御の結果である姿勢制御指令値を示す信号は、駆動制御部208に出力される。
なお、姿勢制御部207は、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分であると判定された場合には、姿勢制御を無効とする。
この姿勢制御部207の構成例については、後述する。
【0034】
駆動制御部208は、重力補償制御部201による制御結果、従動制御部203による制御結果及び姿勢制御部207による制御結果に基づいて、ロボットアーム1を駆動する。
なお、ロボットコントローラ2に重力補償制御部201が設けられていない場合には、駆動制御部208は、従動制御部203による制御結果及び姿勢制御部207による制御結果に基づいて、ロボットアーム1を駆動する。
【0035】
次に、姿勢制御部207の構成例について、
図3を参照しながら説明する。
姿勢制御部207は、
図3に示すように、姿勢記憶部2071、姿勢偏差演算器2072、ゲイン乗算器2073、座標変換部2074、速度演算部2075、速度制御部2076、及び、指令値出力制御部2077を有している。
【0036】
姿勢記憶部2071は、操作位置判定部204により判定される操作位置が、ロボットアーム1における手先部分から手先部分以外に変わる際でのロボットアーム1の姿勢の計測値を、姿勢目標値として記憶する。
なお、姿勢記憶部2071はメモリ等によって構成される。
【0037】
また、
図3では、姿勢記憶部2071が姿勢制御部207の内部に設けられた場合を示した。しかしながら、これに限らず、姿勢記憶部2071は姿勢制御部207の外部に設けられていてもよい。
【0038】
姿勢偏差演算器2072は、姿勢記憶部2071に記憶された姿勢目標値と、姿勢演算部206により演算された姿勢との偏差を算出する。なお、姿勢演算部206により演算された姿勢は、姿勢の現在値である。この姿勢偏差演算器2072により算出された偏差を示す信号は、ゲイン乗算器2073に出力される。
【0039】
ゲイン乗算器2073は、姿勢偏差演算器2072により算出された偏差にゲインを乗算して、速度指令値を得る。この速度指令値は、デカルト座標系で表される速度指令値である。また、ゲインを大きな値にするほど、姿勢制御が速くなる。このゲイン乗算器2073により得られた速度指令値を示す信号は、座標変換部2074に出力される。
【0040】
座標変換部2074は、ゲイン乗算器2073により得られた速度指令値を、ロボットアーム1が有する各関節の速度指令値に変換する。この座標変換部2074による変換後の速度指令値を示す信号は、速度制御部2076に出力される。
【0041】
速度演算部2075は、位置姿勢計測部205により計測された関節角を時間微分することで、関節速度を演算する。この速度演算部2075により演算された関節速度を示す信号は、速度制御部2076に出力される。
【0042】
速度制御部2076は、速度演算部2075により演算された各関節の関節速度が、座標変換部2074により変換された各関節の速度指令値と一致するように速度制御を行う。この速度制御部2076による速度制御の結果である姿勢制御指令値は、指令値出力制御部2077に出力される。
姿勢制御指令値は、例えばモータ102を駆動する電流の指令値である。
【0043】
次いで、指令値出力制御部2077は、操作位置判定部204による判定結果に基づいて、速度制御部2076により得られた姿勢制御指令値の出力を制御する。
この際、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分であると判定されている場合には、指令値出力制御部2077は、速度制御部2076により得られた姿勢制御指令値の出力を停止し、0を出力する。
一方、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分以外であると判定されている場合には、指令値出力制御部2077は、速度制御部2076により得られた姿勢制御指令値を出力する。
【0044】
次に、
図1及び
図2に示す実施の形態1に係るロボットコントローラ2の全体動作例について、
図4を参照しながら説明する。
ここで、実施の形態1に係るロボットコントローラ2では、操作者の操作位置がロボットアーム1における手先部分であるのかそれ以外であるのかを判別する手段を追加し、操作位置が手先部分以外である場合に手先の姿勢を制御する。これにより、実施の形態1に係るロボットコントローラ2では、操作位置が手先部分以外である場合でも手先の姿勢の挙動を分かりやすくできる。
なお、操作者の操作位置がロボットアーム1における手先部分であるのかそれ以外であるのかは、例えば各関節に発生するトルクに基づいて判定可能である。従来技術の課題でも述べた通り、操作者が力を加えた位置よりも手先側にある関節では操作者が加えた外力によるトルクは検知できないので、このことを利用して操作者が力を加えているのが手先部分か否かを区別することができる。また、手先部分に人が接触したことを検知するセンサを設置することでも、操作者の操作位置が手先部分か否か判別できる。
そして、実施の形態1に係るロボットコントローラ2は、操作者の操作位置が手先部分以外であると判定すれば、従来技術と同様な従動制御に加えて手先の姿勢を制御する。例えば、実施の形態1に係るロボットコントローラ2は、操作者が操作する前に手先の姿勢が鉛直下向きを向いていれば、操作者が力を加えていない手先の関節の角度を制御して鉛直下向き方向を維持する。こうすれば、手先部分以外を操作した場合は手先の位置だけが変わり、姿勢は維持されるので、ロボットアーム1の挙動がわかりやすくなる。また、実施の形態1に係るロボットコントローラ2では、手先部分以外を操作した後で再度手先を操作して姿勢を元に戻すといったことも不要になり、使い勝手がよくなる。なお、実施の形態2に係るロボットコントローラ2は、操作者の操作位置が手先部分であると判定した場合には、従来と同じ従動制御を行えば、操作者が手先部分を操作することで手先の姿勢を変更することができる。
【0045】
図1及び
図2に示す実施の形態1に係るロボットコントローラ2の全体動作例では、
図4に示すように、まず、重力補償制御部201は、重力補償制御を行う(ステップST401)。この重力補償制御部201による重力補償制御の結果である重力補償制御指令値を示す信号は、駆動制御部208に出力される。重力補償制御指令値は、例えば、ロボットアーム1が有する各関節に加えられた重力によって発生する重力トルクと釣り合うトルクを発生させるようなモータ電流の指令値である。
ロボットアーム1が、各関節に重力トルクがかかる垂直多関節型ロボットアーム等である場合には、この電流をモータ102に印加することで、各関節が重力の影響で動くことを防止できる。
【0046】
また、外力トルク計測部202は、ロボットアーム1が有する各関節に加えられた外力トルクを計測する(ステップST402)。この外力トルク計測部202により計測された外力トルクを示す信号は、従動制御部203に出力される。
また、操作位置判定部204による判定方法によっては、外力トルク計測部202により計測された外力トルクを示す信号が、この操作位置判定部204にも出力される。
【0047】
なお、外力トルク計測部202による外力トルクの計測では、各関節に加えられたトルクの検知が必要となる。そこで、例えば、外力トルク計測部202は、ロボットアーム1に設けられた各トルクセンサ101による検知結果を用いる。
【0048】
また、外力トルク計測部202は、上記以外の他の方法として、例えば、ロボットアーム1に設けられたモータ102の電流又はエンコーダ103による検知結果等から間接的にトルクを推定するオブザーバを用い、各関節に加えられたトルクを検知してもよい。
【0049】
また、ロボットアーム1が垂直多関節型ロボットアームである場合には、通常、各関節に重力トルクが加えられるため、前述の方法で得られた各関節に加えられたトルクには重力トルクが含まれる。そのため、外力トルク計測部202は、操作者が加えた外力トルクのみを得るために、各関節に加えられたトルクから重力トルクを引いて外力トルクを推定する必要がある。このような技術は例えば特許文献2等で開示されており公知である。
なお、重力トルクは、前述の重力補償制御部201で算出されるため、外力トルク計測部202はその値を利用できる。
【特許文献2】特開平01-066715号公報
【0050】
また、外力トルク計測部202は、各関節に加えられたトルクから、重力トルク以外の外乱成分を推定して除去してもよい。
【0051】
なお、重力補償制御部201と同様に、各関節に重力トルクが加えられない場合には、外力トルク計測部202における重力トルクを引く処理は不要である。その場合には、各関節に加えられたトルクから重力トルク以外の外乱成分を除いたものが外力トルクとなる。
また、重力トルク以外の外乱成分が無い、ごく小さい場合には、各関節に加えられたトルクがそのまま外力トルクとなる。
【0052】
次いで、操作者がロボットアーム1に対して加えた外力トルクに応じて当該ロボットアーム1を動作させるべく、従動制御部203は、外力トルク計測部202により計測された外力トルクに基づいて、ロボットアーム1の従動制御を行う(ステップST403)。この従動制御部203による従動制御の結果である従動制御指令値を示す信号は、駆動制御部208に出力される
【0053】
従動制御部203による従動制御の具体的な一例としては、各関節に対し、外力トルク計測部202により計測された外力トルクに所定のゲインを乗算した値を、従動制御指令値として出力する方法がある。この従動制御指令値は電流指令値である。この従動制御を数式で記述すると下式(1)のようになる。式(1)において、i
Dは従動制御指令値を示し、K
Dはゲインを示し、τ
extは外力トルクを示す。なお、i
D及びτ
extは関節数×1のベクトルであり、K
Dは関節数×関節数の行列である。
【0054】
また、操作位置判定部204は、ロボットアーム1の操作を行う操作者が操作を行っている当該ロボットアーム1における操作位置を判定する(ステップST404)。すなわち、操作位置判定部204は、操作者による操作位置がロボットアーム1における手先部分であるのか又はそれ以外の部分であるのかを判定する。この操作位置判定部204により判定された操作位置を示す信号は、姿勢制御部207に出力される。
この操作位置判定部204は、実施の形態1に係るロボットコントローラ2の実現にとって、重要な部分の一つである。
【0055】
ここで、ロボットアーム1のどの部分から先が手先部分であるのかは、ロボットアーム1の構造に依存するため、事前に定義する。当然ながら、ある位置を手先部分として定義したら、その位置よりも手先側に位置する部分も手先部分である。
【0056】
なお、操作位置判定部204による操作位置の判定方法としては、例えば、操作位置判定部204が、ロボットアーム1における手先と手首とを接続する関節及び当該関節よりも手先側にある関節のうちの何れか1つ以上で、外力トルク計測部202により計測された外力トルクの大きさが所定の値よりも大きい場合に、操作者の操作位置が当該ロボットアーム1における手先部分であると判定する方法が挙げられる。
【0057】
図15を用いて説明した通り、操作者がロボットアーム1における手先部分ではなく手首又は腕にあたる部分を操作した場合、
図15における関節Jcには操作者が操作したことによって発生する外力トルクは加えられない。
一方、操作者がロボットアーム1における手先部分を操作した場合は、関節Jcには操作者が操作したことによって発生する外力トルクが加えられる。
そこで、上記の違いを利用して、操作者の操作位置がロボットアーム1における手先部分であるのか、それ以外の部分であるのかを判定する。
【0058】
ここで、操作者がロボットアーム1における手先部分を操作した場合には外力トルクが発生するが、操作者がロボットアーム1における手首部分を操作した場合には外力トルクが発生しない関節のことを、ロボットアーム1における手先と手首とを接続する関節と定義する。
そして、操作者がロボットアーム1における手先部分を操作すると、手先と手首とを接続する関節及び当該関節よりも手先側にある関節で外力トルクが検知されることを利用して、操作位置判定部204は、操作者の操作位置を
図5のように判定する。
【0059】
すなわち、操作位置判定部204は、ロボットアーム1における何れかの関節で外力トルクの大きさの絶対値が所定のしきい値より大きく、且つ、ロボットアーム1における手先と手首とを接続する関節及び当該関節よりも手先側にある関節で外力トルクの大きさの絶対値が所定のしきい値より大きい場合には、操作者の操作位置はロボットアーム1における手先部分であると判定する。
一方、操作位置判定部204は、ロボットアーム1における何れかの関節で外力トルクの大きさの絶対値が所定のしきい値より大きいが、ロボットアーム1における手先と手首とを接続する関節及び当該関節よりも手先側にある関節で外力トルクの大きさの絶対値が所定のしきい値より大きくはない場合には、操作者の操作位置はロボットアーム1における手先部分以外の部分であると判定する。
【0060】
また、操作位置判定部204は、操作者が操作していない、すなわち、どの関節でも操作者が操作したことによって発生する外力トルクが検知されていない、ことを判定してもよい。
この場合、
図5に示すように、操作位置判定部204は、ロボットアーム1における何れの関節でも外力トルクの大きさの絶対値が所定のしきい値より大きくない場合には、操作者は操作を行っていないと判定する。
【0061】
なお、操作位置判定部204は、上記の判定において用いる所定のしきい値については、関節によって変えてもよい。
【0062】
なお、操作者が手先と手首とを接続する関節よりもベース側の関節(例えば
図15であれば関節Ja,Jb)を操作した場合に、手先と手首とを接続する関節及び当該関節よりも手先側にある関節でもトルクを検知することがある。これは、慣性力の関節間の干渉によるものである。すなわち、ロボットアーム1の慣性行列の非対角項成分に起因する。
そのため、この影響が無視できないようであれば、操作位置判定部204は、外力トルクに対して慣性補償を適用して、その影響を低減した上で判定を行ってもよい。
【0063】
なお、上記では、操作位置判定部204による判定方法として、外力トルク計測部202により計測された外力トルクを用いる方法を示した。
しかしながら、これに限らず、操作位置判定部204は、外力トルク計測部202により計測された外力トルクを用いずに判定を行うことも可能である。
【0064】
例えば
図6のように、ロボットアーム1における手先部分に、人の接触有無を直接検知可能な接触センサ104を設け、操作位置判定部204は、この接触センサ104による検知結果に基づいて、判定を行ってもよい。なお、接触センサ104としては、例えば静電容量式のセンサが挙げられる。
この場合、操作位置判定部204は、上記接触センサ104により人の接触が検知された場合には、操作者の操作位置はロボットアーム1における手先部分であると判定する。また、操作位置判定部204は、上記接触センサ104により人の接触が検知されない場合には、操作者の操作位置はロボットアーム1における手先部分以外の部分であると判定する。
【0065】
なお、この場合、操作位置判定部204は、操作位置が手先部分以外の部分である場合と、どこも操作されていない場合との区別ができない。しかしながら、どこも操作されていない場合に姿勢制御部207が有効になったとしても姿勢制御部207は何もしないので、大きな影響は無い。
【0066】
また、例えば
図7のように、ロボットアーム1に対し、操作者が操作を行った場合に光が遮られるような位置に、光を検知可能な光電センサ105を設け、操作位置判定部204は、この光電センサ105による検知結果に基づいて、判定を行ってもよい。
この方法は、光電センサ105における投光部1051から受光部1052へと投光された光を、操作者の手が遮ることを検知することで、操作者が操作している位置を検知する方法である。この方法では、ロボットアーム1における手先部分以外の部分で操作者が操作する可能性がある部分に、光電センサ105における投光部1051と受光部1052のペアを設置して、受光部1052が光を検知した結果を示す信号を操作位置判定部204に出力する。
この場合、操作位置判定部204は、上記受光部1052により光が検知されている場合には、操作者の操作位置がロボットアーム1における手先部分であると判定する。また、操作位置判定部204は、上記受光部1052により光が検知されていない場合、すなわち、光が遮られた場合には、操作者の操作位置はロボットアーム1における手先部分以外の部分であると判定する。
【0067】
なお、この場合、操作位置判定部204は、操作位置がロボットアーム1における手先部分である場合と、どこも操作されていない場合との区別ができない。しかしながら、どこも操作されていない場合に姿勢制御部207が無効になったとしても、どこも操作されていないということは姿勢制御部207を機能させる必要が無いということなので、影響は無い。
【0068】
この他、例えば、ロボットアーム1を操作する操作者を撮像する外部カメラを設け、操作位置判定部204が、当該外部カメラにより撮像された画像に基づいて、操作者の操作位置がロボットアーム1における手先部分であるのか又は手先部分以外の部分であるのかを判定してもよい。
【0069】
また、位置姿勢計測部205は、ロボットアーム1が有する各関節の関節角を計測する(ステップST405)。この際、例えば、位置姿勢計測部205は、ロボットアーム1に設けられた各エンコーダ103による検知結果等を用いる。この位置姿勢計測部205により計測された関節角を示す信号は、姿勢演算部206に出力される。
【0070】
次いで、姿勢演算部206は、位置姿勢計測部205により計測された関節角に基づいて、ロボットアーム1における手先の姿勢を演算する(ステップST406)。この姿勢演算部206により演算された姿勢を示す信号は、姿勢制御部207に出力される。
なお、各関節角からロボットアーム1における手先の位置及び姿勢は順運動学によって求められるため、姿勢演算部206は、これによってロボットアーム1における手先の姿勢を演算できる。そして、姿勢演算部206による演算結果は、姿勢を表す回転行列、四元数、又は、オイラー角等の形で出力される。
【0071】
次いで、姿勢制御部207は、姿勢演算部206により演算された姿勢に基づいて、ロボットアーム1の手先の姿勢制御を行う(ステップST407)。この際、姿勢制御部207は、操作位置判定部204により操作者がロボットアーム1における手先部分以外を操作していると判定される直前での、当該ロボットアーム1における手先の姿勢に基づいて、当該ロボットアーム1における手先の姿勢制御を行う。この姿勢制御部207による姿勢制御の結果である姿勢制御指令値を示す信号は、駆動制御部208に出力される。
この姿勢制御は、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分以外であると判定されている場合に有効となる。一方、この姿勢制御は、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分であると判定されている場合には、無効となる。
【0072】
この姿勢制御部207は、操作位置判定部204と並び、実施の形態1に係るロボットコントローラ2を実現する上で重要な部分である。この姿勢制御部207の動作例について、後述する。
【0073】
次いで、駆動制御部208は、重力補償制御部201による制御結果、従動制御部203による制御結果、及び、姿勢制御部207の制御結果に基づいて、ロボットアーム1を駆動する(ステップST408)。すなわち、駆動制御部208は、上記各制御結果に基づいて、ロボットアーム1が有する各モータ102の駆動を制御する。
より具体的には、下式(2)のように、駆動制御部208は、重力補償制御部201が出力した重力補償制御指令値、従動制御部203が出力した従動制御指令値、及び、姿勢制御部207が出力した姿勢制御指令値を加算によって合成して、モータ102を駆動する電流の指令値を算出する。そして、駆動制御部208は、この電流の指令値に基づいて各関節を駆動するモータ102を制御する。式(2)において、i
mはモータ102を駆動する電流の指令値を示し、i
Gは重力補償制御指令値を示し、i
Dは従動制御指令値を示し、i
Pは姿勢制御指令値を示している。
【0074】
次に、
図3に示す実施の形態1における姿勢制御部207の動作例について、
図8を参照しながら説明する。
【0075】
なお、姿勢記憶部2071は、操作位置判定部204により判定される操作位置が、ロボットアーム1における手先部分から手先部分以外に変わる際でのロボットアーム1の姿勢の計測値を、姿勢目標値として記憶する。
そして、姿勢制御部207が、この姿勢目標値とロボットアーム1の姿勢が一致するように制御することで、ロボットコントローラ2は、手先部分以外が操作された場合にロボットアーム1の姿勢が変わらないようにすることが可能になる。
【0076】
図3に示す実施の形態1における姿勢制御部207の動作例では、
図8に示すように、まず、姿勢偏差演算器2072は、姿勢記憶部2071に記憶された姿勢目標値と、姿勢演算部206により演算された姿勢との偏差を算出する(ステップST801)。この姿勢偏差演算器2072により算出された偏差を示す信号は、ゲイン乗算器2073に出力される。
ここで、姿勢の偏差は、現在値の姿勢から指令値の姿勢への回転変換を求めることで得ることができる。得られた偏差は下式(3)のように表すことができる。この式(3)において、Δrx,Δry,Δrzは姿勢の偏差のそれぞれX軸、Y軸、Z軸に対する回転量である。
【0077】
次いで、ゲイン乗算器2073は、姿勢偏差演算器2072により算出された姿勢の偏差にゲインを乗算して、速度指令値を得る(ステップST802)。この速度指令値は、デカルト座標系で表される速度指令値である。また、ゲインを大きな値にするほど、姿勢制御が速くなる。このゲイン乗算器2073により得られた速度指令値を示す信号は、座標変換部2074に出力される。
【0078】
次いで、座標変換部2074は、ゲイン乗算器2073により得られた速度指令値にヤコビ行列の逆行列を乗算することで、当該速度指令値をロボットアーム1が有する各関節の速度指令値に変換する(ステップST803)。この座標変換部2074による変換後の速度指令値を示す信号は、速度制御部2076に出力される。
各関節の速度指令値は下式(4)のように表される。式(4)において、ωは各関節の速度指令値を示し、J(θ)はヤコビ行列を示し、θは各関節の角度の計測値を示し、K
pはゲイン乗算器2073のゲインを示し、eは姿勢の偏差を示す。なお、ωは関節数×1のベクトルであり、J(θ)は6×関節数の行列であり、θは関節数×1のベクトルであり、K
pは3×3の行列である。
【0079】
この式(4)において、偏差を表すベクトルの上から3つの要素が0なのは、デカルト座標系で表される指令値のうち、手先の並進速度の指令値である速度指令値のX,Y,Z成分が0であることを意味する。姿勢制御部207は、姿勢制御を目的としており、手先の位置は制御しないので、手先の並進速度の指令値は0とする。そして、Kpeがデカルト座標系で表される指令値のうち、手先の姿勢の速度指令値である。このベクトルにヤコビ行列の逆行列を乗算することで、デカルト座標系の速度の指令値を各関節の速度指令値に変換する。なお、ヤコビ行列は各関節の値によって変化する行列なので、各関節の動きにあわせて更新する必要がある。
また、関節数が7以上のロボットアーム1の場合、ヤコビ行列の逆行列は一意に定まらないが、逆行列の代わりに疑似逆行列を用いる等すれば、同様の演算により各関節の速度指令値を算出できる。
【0080】
次いで、速度演算部2075は、位置姿勢計測部205により計測された関節角を時間微分することで、関節速度を演算する(ステップST804)。この速度演算部2075により演算された関節速度を示す信号は、速度制御部2076に出力される。
【0081】
次いで、速度制御部2076は、速度演算部2075により演算された各関節の関節速度が、座標変換部2074により変換された各関節の速度指令値と一致するように速度制御を行う(ステップST805)。この速度制御部2076による速度制御の結果である姿勢制御指令値は、指令値出力制御部2077に出力される。姿勢制御指令値は、例えばモータ102を駆動する電流の指令値である。
この速度制御は、例えば、各関節の速度指令値と関節速度との差である偏差に対してPI(比例積分)制御を行うことで実現できる。
【0082】
次いで、指令値出力制御部2077は、操作位置判定部204による判定結果に基づいて、速度制御部2076により得られた姿勢制御指令値の出力を制御する(ステップST806)。
この際、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分であると判定されている場合には、指令値出力制御部2077は、速度制御部2076により得られた姿勢制御指令値の出力を停止し、0を出力する。これにより、操作者が手先部分を操作している間は姿勢制御が無効となるので、操作者の操作に応じてロボットアーム1が駆動される。
一方、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分以外であると判定されている場合には、指令値出力制御部2077は、速度制御部2076により得られた姿勢制御指令値を出力する。これにより、操作者が手先部分以外を操作している間は姿勢制御が有効となるので、操作者の操作によってロボットアーム1における手先の姿勢が変わらないように制御される。
【0083】
次に、実施の形態1に係るロボットコントローラ2による効果について説明する。
実施の形態1に係るロボットコントローラ2では、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分以外であると判定されると、姿勢制御部207が有効となり、ロボットアーム1における手先の姿勢が制御される。
操作者がロボットアーム1における手先部分以外を操作した場合、通常の直接教示であれば従動制御部203による制御によってロボットアーム1における手先の姿勢が変わる。これに対し、実施の形態1では姿勢制御部207による姿勢制御が従動制御部203による制御と並行して行われる。その結果、実施の形態1に係るロボットアーム1では、操作者がロボットアーム1における手先部分以外を操作した場合でも、ロボットアーム1における姿勢、又は、当該姿勢を決める3要素のうち一部はそのままに保たれる。これにより、操作者がロボットアーム1における手先部分以外を操作した場合は、ロボットアーム1における手先の位置だけが変わり姿勢は保たれるので、姿勢を保ったまま手先を操作した場合に近い操作感が得られ、初心者であっても戸惑いにくくなる。
また、ロボットアーム1における手先の大まかな位置を決める場合は手首の部分を操作し、手先の細かい位置と姿勢を決める場合は手先の部分を操作するといった使い分けが容易になるので、直接教示に慣れた人に対しても効率良い操作を提供できる。
【0084】
なお、上記では、重力補償制御部201、従動制御部203及び姿勢制御部207が電流の指令値を出力し、駆動制御部208がそれらを加算して合成することでモータ102を駆動する電流の指令値を出力する場合を例に説明を行った。しかしながら、これに限定されない。
例えば、従動制御部203及び姿勢制御部207が速度の指令値を出力し、駆動制御部208がその速度指令値を加算して合成した指令値に基づいて速度制御を行って電流の指令値を算出し、駆動制御部208がその電流の指令値に重力補償制御部201が出力する電流の指令値を合算してモータ102を駆動する電流の指令値を出力するようにしてもよい。
【0085】
以上のように、この実施の形態1によれば、ロボットコントローラ(直接教示装置)2は、ロボットアーム1が有する複数の関節に加えられた外力トルクを計測する外力トルク計測部202と、外力トルク計測部202により計測された外力トルクに基づいて、ロボットアーム1の従動制御を行う従動制御部203と、ロボットアーム1の操作を行う操作者が操作を行っている当該ロボットアーム1における操作位置を判定する操作位置判定部204と、ロボットアーム1が有する複数の関節の関節角を計測する位置姿勢計測部205と、位置姿勢計測部205により計測された関節角に基づいて、ロボットアーム1における手先の姿勢を演算する姿勢演算部206と、姿勢演算部206により演算された姿勢に基づいて、ロボットアーム1における手先の姿勢制御を行う姿勢制御部207と、従動制御部203による制御結果及び姿勢制御部207による制御結果に基づいて、ロボットアーム1を駆動する駆動制御部208とを備え、姿勢制御部207は、操作位置判定部204により操作者の操作位置がロボットアーム1における手先部分であると判定された場合に、姿勢制御を無効とする。
姿勢制御部207は、操作位置判定部204により操作者がロボットアーム1における手先部分以外を操作していると判定される直前での、当該ロボットアーム1における手先の姿勢に基づいて、当該ロボットアーム1における手先の姿勢制御を行う。
これにより、実施の形態1に係るロボットコントローラ(直接教示装置)2は、従来に対し、操作者がロボットアーム1の手先部分以外を操作しても手先の姿勢の挙動が分かりやすくなる。
【0086】
また、操作位置判定部204は、ロボットアーム1における手先と手首とを接続する関節及び当該関節よりも手先側にある関節のうちの何れか1つ以上で、外力トルク計測部202により計測された外力トルクの大きさが所定の値よりも大きい場合に、操作者の操作位置が当該ロボットアーム1における手先部分であると判定してもよい。
また、操作位置判定部204は、ロボットアーム1における手先部分に設けられて当該手先部分における人の接触有無を検知する接触センサ104による検知結果に基づいて、操作者の操作位置が当該ロボットアーム1における手先部分であるか否かを判定してもよい。
また、操作位置判定部204は、ロボットアーム1に設けられて光を検知する光電センサ105による検知結果に基づいて、操作者の操作位置が当該ロボットアーム1における手先部分であるか否かを判定してもよい。
これらにより、実施の形態1に係るロボットコントローラ(直接教示装置)2は、操作者の操作位置がロボットアーム1における手先部分であるのか又は当該手先部分以外の部分であるのかを判別可能となる。
【0087】
実施の形態2.
実施の形態1における姿勢制御部207では、ロボットアーム1が有する関節のうちの全ての関節を制御対象としている。この場合、姿勢制御部207は、姿勢制御指令値としてロボットアーム1が有する全ての関節を駆動する指令値を出力しうる。そのため、操作者がロボットアーム1における手先部分以外を操作している場合、当該手先部分以外の関節も姿勢制御部207によって駆動されうる。
図1で言うと、姿勢制御部207が関節Ja,Jbを駆動することがある。このため、操作者による操作と競合し、操作者の操作感を損ねる可能性がある。
実施の形態2は上記のような課題を解決するものであり、姿勢制御部207が手先部分の関節だけを制御することで、操作者の操作感を改善するものである。
【0088】
実施の形態2に係るロボットコントローラ2及び姿勢制御部207の構成例及びフローチャートは、実施の形態1で示した
図2~
図4、
図8と同じである。一方、実施の形態2では、姿勢制御部207が有する座標変換部2074の演算が一部異なるため、異なる部分についてのみ説明を行う。
【0089】
実施の形態2における姿勢制御部207は、ロボットアーム1における手先部分の関節のみを制御することで、当該ロボットアーム1における手先の姿勢制御を行う。
【0090】
実施の形態2における座標変換部2074は、ヤコビ行列であるJ(θ)の一部を取り出した行列を用いて座標変換を行う。なお、上記ヤコビ行列の一部を取り出した行列を、ヤコビ行列の部分行列とも呼ぶ。この際、部分行列の行としては、ロボットアーム1の姿勢に対応する3行だけを取り出す。また、部分行列の列としては、手先部分の関節に対応する列だけを取り出す。例えば、ロボットアーム1における手先の3軸の関節に対応する列だけを取り出す。
そして、座標変換部2074は、ゲイン乗算器2073により得られた速度指令値に上記部分行列の逆行列を乗算することで、当該速度指令値をロボットアーム1が有する各関節の速度指令値に変換する。この座標変換部2074による変換後の速度指令値を示す信号は、速度制御部2076に出力される。
【0091】
この場合、各関節の速度指令値は下式(5)のように表される。式(5)において、J
p(θ)は部分行列を示し、0
3×3は3×3のゼロ行列を示している。なお、J
p(θ)は例えば3×3の行列である。
【0092】
このように算出された各関節の速度指令値は、ロボットアーム1における手先部分の関節だけ駆動されるような指令値となる。
上記の点以外は、実施の形態1と同様である。
【0093】
以上のように、この実施の形態2によれば、姿勢制御部207は、ロボットアーム1における手先部分の関節のみを制御することで、当該ロボットアーム1における手先の姿勢制御を行う。これにより、実施の形態2に係るロボットコントローラ(直接教示装置)2は、実施の形態1に係るロボットコントローラ(直接教示装置)2に対し、操作者がロボットアーム1における手先部分以外を操作した場合での姿勢制御が、当該手先部分の関節だけを駆動するように行われるため、操作者が当該手先部分以外を操作した場合の操作感が改善されるという効果がある。
【0094】
実施の形態3.
実施の形態1に係るロボットコントローラ2及び実施の形態2に係るロボットコントローラ2では、姿勢制御部207がロボットアーム1の姿勢を、X軸、Y軸及びZ軸の全ての回転軸回りに対して制御する。これに対し、実施の形態3に係るロボットコントローラ2では、姿勢制御部207が所定の座標系における一部の回転軸回りに対してのみ制御を行う場合を示す。
【0095】
実施の形態3に係るロボットコントローラ2が解決する課題の背景について、
図9を用いて説明する。
操作者がロボットアーム1における手先部分以外を操作している場合にロボットアーム1の姿勢を制御し、姿勢が変わらないようにすることで操作感を改善するといっても、全ての回転軸に対して姿勢を維持する必要が無い場合がある。
例えば
図9において、操作者がロボットアーム1における手首を第1の操作方向に操作することでロボットアーム1における手先の姿勢がY軸回りに回転して当該手先が下向きからずれるのは避けたいが、操作者が当該手首を第2の操作方向に操作することで当該手先の姿勢がZ軸回りに回転しても当該手先は下向きのままであるため問題は無く許容できる。むしろ、ロボットアーム1における手先の姿勢が姿勢制御によってZ軸回りに回転するのは避けたいといった場合である。実施の形態3はこのような場合に対応するものである。
【0096】
実施の形態3における姿勢制御部207は、所定の座標系における所定の回転軸回りの回転を抑制するように、ロボットアーム1における手先の姿勢制御を行う。
実施の形態3における姿勢制御部207の構成例を
図10に示す。この
図10に示す実施の形態3における姿勢制御部207では、
図3に示す実施の形態1、2における姿勢制御部207に対し、姿勢偏差演算器2072が修正姿勢偏差演算部2078に変更されている。
図10に示す実施の形態3における姿勢制御部207のその他の構成例は、
図3に示す実施の形態1,2における姿勢制御部207の構成例と同様であり、同一の符号を付して異なる部分についてのみ説明を行う。
【0097】
実施の形態1,2における姿勢偏差演算器2072は、姿勢記憶部2071に記憶された姿勢目標値と姿勢演算部206により演算された姿勢との偏差を回転変換として算出するが、この回転変換には制限はなく、あらゆる方向に回転可能である。
これに対し、実施の形態3における修正姿勢偏差演算部2078は、姿勢記憶部2071に記憶された姿勢目標値と姿勢演算部206により演算された姿勢との偏差を修正し、特定の軸回りの回転を抑制するような値である修正偏差を算出する。
【0098】
まず、姿勢制御部207が、所定の座標系AにおけるZ軸回りに姿勢が回転するのを抑制する姿勢制御を行う場合について、
図11を参照しながら説明する。
ここで、所定の座標系Aは、ベース座標系又はワーク座標系等の任意の座標系である。また、ツール座標系のように現在の姿勢に連動して変化する座標系であってもよい。所定の座標系Aを任意にとることができるので、以下はある一軸に対する回転を抑制する場合一般に適用できる。なお、
図11において、
AXは座標系AにおけるX軸を表し、他の同様の表現の符号についても同様の内容を表すものとする。
【0099】
修正姿勢偏差演算部2078は、所定の座標系A、姿勢記憶部2071に記憶された姿勢目標値、及び、姿勢演算部206により演算された姿勢に基づいて、Z軸回りの回転を抑制するような修正偏差を演算によって求める。
以下に、修正姿勢偏差演算部2078による修正偏差の演算手順の一例を示す。ここでは、所定の座標系をAで表し、姿勢目標値に対応する座標系をTで表し、姿勢計測値に対応する座標系をMで表す。また、座標系Bから座標系Cへ姿勢を変換する行列をCRBで表す。
【0100】
この場合、まず、修正姿勢偏差演算部2078は、姿勢目標値と姿勢演算部206により演算された姿勢との偏差を回転行列表現した行列Dを求める(第1の手順)。この演算は、実施の形態1,2における姿勢偏差演算器2072が行う演算と同じである。また、この演算は、座標系Mから座標系Tに変換する行列TRMと同じである。
【0101】
次に、修正姿勢偏差演算部2078は、下式(6)のように、所定の座標系AにおけるZ軸を座標系Tに変換したベクトル
Tqを求める(第2の手順)。これは、姿勢目標値に対応する座標系Tで、所定の座標系AにおけるZ軸の向きを表したベクトルになる。すなわち,
Tqは所定の座標系AにおけるZ軸と平行になる。
【0102】
次に、修正姿勢偏差演算部2078は、下式(7)のように、ベクトル
TqをD'で変換したベクトル
Tq'を求める(第3の手順)。なお、D'はDの転置である。
【0103】
次に、修正姿勢偏差演算部2078は、ベクトルTq'とベクトルTqの両方に直交する回転軸Trを求める(第4の手順)。
【0104】
次に、修正姿勢偏差演算部2078は、第4の手順で求めた回転軸に沿ってベクトル
Tq'からベクトル
Tqに回転させた場合の回転角Θの大きさを下式(8)で求める(第5の手順)。なお、式(8)における括弧内の「ドット」は、2つのベクトルの内積を表す。
【0105】
次に、修正姿勢偏差演算部2078は、下式(9)で求められる値が負になった場合は、回転角Θの符号を反転させる(第6の手順)。これは、式(7)では、回転角の大きさは求められるが、回転角の符号、すなわち回転させる方向までは求められないためである。式(9)のように、ベクトル
Tq'とベクトル
Tqとの外積と、回転軸を表すベクトル
Trとの内積から回転方向を求めることができる。なお、式(9)における括弧内の「×」は、2つのベクトルの外積を表す。
【0106】
次に、修正姿勢偏差演算部2078は、第4の手順で求めた回転軸Trと、第5の手順及び第6の手順で求めた回転角Θからなる回転変換を算出する(第7の手順)。この回転変換が修正偏差を表す回転変換になる。
【0107】
この修正偏差を表す回転変換を姿勢の現在値に適用すると、実施の形態1,2と異なり、所定の座標系AにおけるZ軸回りの回転に関する偏差が解消されずに残る。なお、実施の形態1,2では偏差を表す回転変換を姿勢の現在値に適用すると姿勢目標値に一致する。これにより、実施の形態3における姿勢制御部207では、所定の座標系AにおけるZ軸回りの回転を抑制した姿勢制御が可能となる。
【0108】
あとは、姿勢制御部207は、修正偏差を用いて姿勢制御を行う。残りの手順は実施の形態1,2と同様であるため、その説明を省略する。
【0109】
次に、別の例として、姿勢制御部207が、所定の座標系AにおけるX軸回りの姿勢回転だけを行い、Y軸回り及びZ軸回りに姿勢が回転するのを抑制する姿勢制御を行う場合について、
図12を参照しながら説明する。なお、
図12において、
AXは座標系AにおけるX軸を表し、他の同様の表現の符号についても同様の内容を表すものとする。
【0110】
この場合、まず、修正姿勢偏差演算部2078は、姿勢目標値と姿勢演算部206により演算された姿勢との偏差を回転行列表現した行列Dを求める(第1の手順)。この手順は、上記で示した手順と同じである。
【0111】
次に、修正姿勢偏差演算部2078は、姿勢目標値に対応する座標系Tで、所定の座標系AにおけるX軸と平行でないベクトルを適当にひとつ選択する(第2の手順)。ここでは、例えば、座標系TにおけるZ軸TZを選択したとする。
【0112】
次に、修正姿勢偏差演算部2078は、第2の手順で選択したベクトルをD’で回転変換したベクトルを求める(第3の手順)。これは座標系MにおけるZ軸MZを座標系Tで表したものになる。
【0113】
次に、修正姿勢偏差演算部2078は、第2の手順で選択したベクトルを所定の座標系AにおけるYZ平面に投影したベクトルTqを求める(第4の手順)。
【0114】
次に、修正姿勢偏差演算部2078は、第3の手順で求めたベクトルを所定の座標系AにおけるYZ平面に投影したベクトルTq'を求める(第5の手順)。
【0115】
次に、修正姿勢偏差演算部2078は、回転軸を求める(第6の手順)。所定の座標系AにおけるX軸についてのみ姿勢回転を許容することから、座標系AにおけるX軸AXが回転軸となる。
【0116】
次に、修正姿勢偏差演算部2078は、回転軸に沿って、ベクトルTq'からベクトルTqに回転させた場合の回転角Θの大きさを式(8)で求める(第7の手順)。
【0117】
次に、修正姿勢偏差演算部2078は、式(9)で求められる値が負になった場合は、回転角Θの符号を反転させる(第8の手順)。
【0118】
次に、修正姿勢偏差演算部2078は、第6の手順で求めた回転軸と、第7の手順及び第8の手順で求めた回転角Θとからなる回転変換を算出する(第9の手順)。この回転変換が、修正偏差とを表す回転変換になる。
【0119】
この修正偏差を表す回転変換を姿勢の現在値に適用すると、所定の座標系AにおけるX軸回りについての姿勢回転が行われ、所定の座標系AにおけるY軸回り、Z軸周りの回転は抑制される。
【0120】
あとは、姿勢制御部207は、修正偏差を用いて姿勢制御を行う。残りの手順は実施の形態1,2と同様であるため、その説明を省略する。
【0121】
なお、所定の座標系における所定の座標軸周りの回転を抑制する方法は上記に限らない。大半の垂直多関節型ロボットアームでは、手先軸(例えば
図1に示すような6関節ロボットアームならば第6軸)における関節の速度指令値を0にすることで、ツール座標系におけるZ軸回りの姿勢制御を停止できるので、上記手順よりも簡便な方法で同様な効果が得られる場合がある。
【0122】
また、ロボットアーム1の構造によっては、手先部分における関節の角度とツール座標系で表した姿勢の関係が単純な場合があるが、この場合も姿勢制御部207が手先部分における関節のうち特定の関節だけを制御する、又は、特定の関節だけ制御しない、すなわち動かさないことで、上述の手順と同様な結果を得られる場合がある。
特に、実施の形態2のように手先部分の関節だけで姿勢制御する場合は、手先部分における関節の角度とツール座標系で表した姿勢の関係が単純であることを利用して、簡便な方法で所定の座標系における一部回転軸回りに対する制御のみを実現できる。
これは、手先部分における関節の角度と手先の姿勢の関係を利用した制御では手先の位置を考慮した制御ができないためで、実施の形態1のように手先の位置を変えずに姿勢制御を行う場合には適用できないのに対し、実施の形態2のように手先の姿勢だけ制御すればよく手先の位置は成り行きに任せてよい場合には適用できるからである。
【0123】
以上のように、この実施の形態3によれば、姿勢制御部207は、所定の座標系における所定の回転軸回りの回転を抑制するように、ロボットアーム1における手先の姿勢制御を行う。これにより、実施の形態3に係るロボットコントローラ(直接教示装置)2は、実施の形態1,2に係るロボットコントローラ(直接教示装置)2に対してより柔軟な制御が可能となる。
【0124】
なお、各実施の形態の自由な組合わせ、或いは各実施の形態の任意の構成要素の変形、若しくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【0125】
1 ロボットアーム
2 ロボットコントローラ(直接教示装置)
11a~11f 関節
11g 手先
101 トルクセンサ
102 モータ
103 エンコーダ
104 接触センサ
105 光電センサ
201 重力補償制御部
202 外力トルク計測部
203 従動制御部
204 操作位置判定部
205 位置姿勢計測部
206 姿勢演算部
207 姿勢制御部
208 駆動制御部
1051 投光部
1052 受光部
2071 姿勢記憶部
2072 姿勢偏差演算器
2073 ゲイン乗算器
2074 座標変換部
2075 速度演算部
2076 速度制御部
2077 指令値出力制御部
2078 修正姿勢偏差演算部