(57)【要約】【課題】ダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化する。【解決手段】ロボット２の各軸の角度制御を行うコントローラ３は、アーム先端の姿勢を目標姿勢に維持しつつアーム先端の位置を変化させるようにダイレクトティーチングが行われる際、根元側軸（１，２，３軸）を外力に従って自由に動作する状態とした操作軸に設定するとともに、先端側軸（４，５，６軸）を角度制御可能な状態とした制御軸に設定する。コントローラ３は、アーム先端の位置を目標位置に維持しつつアーム先端の姿勢を変化させるようにダイレクトティーチングが行われる際、先端側軸を操作軸に設定するとともに、根元側軸を制御軸に設定する。コントローラ３は、ダイレクトティーチングが行われる際、操作軸の現在角度と、目標姿勢または目標位置と、を入力として逆運動学計算により制御軸の指令角度を算出する。【選択図】図４
2020131314.tif 000002
【特許請求の範囲】
【請求項１】
垂直多関節型のロボットを制御するものであり、ユーザが前記ロボットを直接動かして前記ロボットのアーム先端の位置姿勢を教示するダイレクトティーチングに対応したロボットの制御装置であって、
前記ロボットの各軸の角度制御を行う角度制御部と、
前記アーム先端の姿勢を目標姿勢に維持しつつ前記アーム先端の位置を変化させるように前記ダイレクトティーチングが行われる際、前記各軸のうち、前記アーム先端の位置を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、前記アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を前記角度制御部により制御される状態とした制御軸に設定する軸設定部と、
を備え、
前記角度制御部は、前記ダイレクトティーチングが行われる際、前記操作軸の現在角度および前記目標姿勢を入力として逆運動学計算により前記制御軸の指令角度を算出するロボットの制御装置。
【請求項２】
垂直多関節型のロボットを制御するものであり、ユーザが前記ロボットを直接動かして前記ロボットのアーム先端の位置姿勢を教示するダイレクトティーチングに対応したロボットの制御装置であって、
前記ロボットの各軸の角度制御を行う角度制御部と、
前記アーム先端の位置を目標位置に維持しつつ前記アーム先端の姿勢を変化させるように前記ダイレクトティーチングが行われる際、前記各軸のうち、前記アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、前記アーム先端の位置を決定するうえで支配的な要因となり得る軸を前記角度制御部により制御される状態とした制御軸に設定する軸設定部と、
を備え、
前記角度制御部は、前記ダイレクトティーチングが行われる際、前記操作軸の現在角度および前記目標位置を入力として逆運動学計算により前記制御軸の指令角度を算出するロボットの制御装置。
【請求項３】
前記角度制御部は、
前記制御軸の指令角度が算出されると、その指令角度に基づいて算出される前記制御軸の指令角速度および指令角加速度がそれぞれ予め定められた最大角速度および最大角加速度を超えないように前記指令角度を補正する加速補正処理を実行する請求項１または２に記載のロボットの制御装置。
【請求項４】
前記角度制御部は、
前記ロボットが特異点近傍であるか否かを検出する特異点検出処理と、
前記特異点検出処理により前記特異点近傍であることが検出されると、その時点以降の前記指令角度を、前回の前記指令角度に置換する指令角度置換処理と、
を実行する請求項１から３のいずれか一項に記載のロボットの制御装置。
【請求項５】
垂直多関節型のロボットを制御するものであり、ユーザが前記ロボットを直接動かして前記ロボットのアーム先端の位置姿勢を教示するダイレクトティーチングを行うことができるロボットの制御方法であって、
前記ロボットの各軸の角度制御を行う角度制御処理と、
前記アーム先端の姿勢を目標姿勢に維持しつつ前記アーム先端の位置を変化させるように前記ダイレクトティーチングが行われる際、前記各軸のうち、前記アーム先端の位置を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、前記アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を前記角度制御処理により制御される状態とした制御軸に設定する軸設定処理と、
を含み、
前記角度制御処理では、前記ダイレクトティーチングが行われる際、前記操作軸の現在角度および前記目標姿勢を入力として逆運動学計算により前記制御軸の指令角度を算出するロボットの制御方法。
【請求項６】
垂直多関節型のロボットを制御するものであり、ユーザが前記ロボットを直接動かして前記ロボットのアーム先端の位置姿勢を教示するダイレクトティーチングを行うことができるロボットの制御方法であって、
前記ロボットの各軸の角度制御を行う角度制御処理と、
前記アーム先端の位置を目標位置に維持しつつ前記アーム先端の姿勢を変化させるように前記ダイレクトティーチングが行われる際、前記各軸のうち、前記アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、前記アーム先端の位置を決定するうえで支配的な要因となり得る軸を前記角度制御処理により制御される状態とした制御軸に設定する軸設定処理と、
を含み、
前記角度制御処理では、前記ダイレクトティーチングが行われる際、前記操作軸の現在角度および前記目標位置を入力として逆運動学計算により前記制御軸の指令角度を算出するロボットの制御方法。
【請求項７】
前記角度制御処理には、
前記制御軸の指令角度が算出されると、その指令角度に基づいて算出される前記制御軸の指令角速度および指令角加速度がそれぞれ予め定められた最大角速度および最大角加速度を超えないように前記指令角度を補正する加速補正処理が含まれる請求項５または６に記載のロボットの制御方法。
【請求項８】
前記角度制御処理には、
前記ロボットが特異点近傍であるか否かを検出する特異点検出処理と、
前記特異点検出処理により前記特異点近傍であることが検出されると、その時点以降の前記指令角度を、前回の前記指令角度に置換する指令角度置換処理と、
が含まれる請求項５から７のいずれか一項に記載のロボットの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザがロボットを直接動かしてロボットのアーム先端の位置姿勢を教示するダイレクトティーチングに対応したロボットの制御装置およびロボットの制御方法に関する。
【背景技術】
【０００２】
従来、ロボットに所定の作業を行わせるために動作をティーチング（教示）する方法として、ユーザが専用の操作端末を用いて遠隔でティーチングを行う手法（以下、遠隔ティーチングと称す）と、ユーザ（人）がロボットに直接触れて動かすことによりティーチングを行う手法（以下、ダイレクトティーチングと称す）と、がある。ダイレクトティーチングには、ユーザが、専門知識を必要とすることなく直感的に操作を行うことができるというメリットがある。
【０００３】
ただし、ダイレクトティーチングでは、ユーザが手の感覚を頼りにロボットのアーム先端の位置および姿勢を調節することになるため、遠隔ティーチングのようにキー操作や数値入力で位置および姿勢を調節する場合に比べ、ユーザの意図した通りに位置および姿勢を変化させることが難しかった。具体的には、ユーザが、先端に取り付けられたハンドなどのツールの姿勢を保ちつつ位置だけを変化させようとしても、理想的な形で力を加えることは非常に難しく、どうしても余分な力が加わってしまい、先端の姿勢が意図とは異なる形で変化してしまうことがある。また、ユーザが、ツールの位置を保ちつつ姿勢だけを変化させようとしても、上述したように理想的な形で力を加えることが困難であることから、先端の位置が意図せずに変化してしまうことがある。
【０００４】
このようなダイレクトティーチングにおける課題を解決するため、様々な技術が考えられている。例えば、特許文献１には、ロボットのアーム先端にジョイスティックや力覚センサを取り付け、それらを入力装置として先端の位置および姿勢のうちいずれか一方だけを変更し制御する方法が開示されている。また、ロボットの各関節にトルクセンサを取り付けたり、電流値から外力推定を行ったり、することにより力覚センサを取り付けるものと同等の機能を実現することも考えられる。
【０００５】
しかし、このような従来技術では、センサを追加することに伴い、製造コストの上昇、重量増加に起因する性能の劣化など、別の問題が生じることになる。さらに、力覚センサなどを用いて力を制御する方法では、ロボットのポーズ（姿勢）や力の加え方によっては振動的な動きになるおそれがある。そのため、上記方法では、パラメータ設定を保守的にするなどして振動を抑制する必要があり、その結果、操作感が悪化してしまい、本来の目的である教示作業を簡単化するという効果が得られない。
【０００６】
一方、特許文献２には、ロボットの各関節を、ユーザの操作に対して受動的に振る舞う関節、つまり人為的に操作可能な関節と、各関節の角度の変化から逆算して位置または姿勢を維持するための角度制御を行う関節と、の２つのグループに分ける手法が開示されている。特許文献２の手法では、現在の先端の位置・姿勢に対して維持しようとする姿勢成分を置換（上書き）するようになっているため、操作可能な関節がユーザにより大きく動かされるなどして操作可能な関節を大きく動かさなければならない指令値が出力された場合には、角度制御可能な関節しか制御することができないことから、本来の目的である先端の姿勢を維持することができなくなるおそれがある。このように、特許文献２の手法では、ユーザの意図した通りに位置および姿勢を変化させることが難しかった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−２８５８７０号公報
【特許文献２】特開昭６０−２３３７０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記したように、特許文献１、２に記載された技術を含めた従来の技術は、ダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作が簡単化されているとは言い難いものであった。
【０００９】
本発明は上記事情に鑑みてなされたものであり、その目的は、ダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化することができるロボットの制御装置およびロボットの制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
請求項１に記載のロボットの制御装置は、垂直多関節型のロボットを制御するものであり、ユーザがロボットを直接動かしてロボットのアーム先端の位置姿勢を教示するダイレクトティーチングに対応している。上記したロボットの制御装置は、ロボットの各軸の角度制御を行う角度制御部および軸設定部を備える。軸設定部は、アーム先端の姿勢を目標姿勢に維持しつつアーム先端の位置を変化させるようにダイレクトティーチングが行われる際、各軸のうち、アーム先端の位置を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を角度制御部により制御される状態とした制御軸に設定する。角度制御部は、ダイレクトティーチングが行われる際、操作軸の現在角度および目標姿勢を入力として逆運動学計算により制御軸の指令角度を算出する。
【００１１】
このような構成によれば、ユーザの操作（ロボットに触れて動かすこと）に応じて操作軸が自由に動作するため、ユーザの意図通りにアーム先端の位置を変化させることができる。そして、この際、ユーザの操作に応じて動作する操作軸の現在角度およびアーム先端の目標姿勢に基づいて制御軸の指令角度が算出されるようになっている。つまり、この場合、維持したい姿勢以外の目標値を未知数としたまま厳密な制御軸の目標値を算出するようになっているため、アーム先端の姿勢を目標姿勢に維持させることができる。
【００１２】
このようなことから、上記構成によれば、ユーザは、特に難しい操作を必要とすることなく、アーム先端の姿勢を目標姿勢に保ちつつアーム先端の位置を変化させる、つまりアーム先端の姿勢を拘束したダイレクトティーチングを行うことができる。したがって、上記構成によれば、ロボットのダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化することができるという優れた効果が得られる。
【００１３】
また、上記構成によれば、自由に操作可能な操作軸の現在角度に合わせて角度制御が有効な制御軸だけでアーム先端の姿勢を目標姿勢に一致させるように角度制御が行われることになるため、振動など不安定な動作が生じ難いという効果も得られる。さらに、上記構成によれば、力覚センサやトルクセンサなどのセンサを用いることなく、ロボットの制御装置に元々設けられる角度制御のための制御系を用いることによりアーム先端の姿勢を拘束したダイレクトティーチングを実現するようになっているため、製造コストの低減にも寄与することができる。
【００１４】
請求項２に記載のロボットの制御装置は、垂直多関節型のロボットを制御するものであり、ユーザがロボットを直接動かしてロボットのアーム先端の位置姿勢を教示するダイレクトティーチングに対応している。上記したロボットの制御装置は、ロボットの各軸の角度制御を行う角度制御部および軸設定部を備える。軸設定部は、アーム先端の位置を目標位置に維持しつつアーム先端の姿勢を変化させるようにダイレクトティーチングが行われる際、各軸のうち、アーム先端の姿勢を決定するうえで支配的な要因となり得る軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、アーム先端の位置を決定するうえで支配的な要因となり得る軸を角度制御部により制御される状態とした制御軸に設定する。角度制御部は、ダイレクトティーチングが行われる際、操作軸の現在角度および目標位置を入力として逆運動学計算により制御軸の指令角度を算出する。
【００１５】
このような構成によれば、ユーザの操作（ロボットに触れて動かすこと）に応じて操作軸が自由に動作するため、ユーザの意図通りにアーム先端の姿勢を変化させることができる。そして、この際、ユーザの操作に応じて動作する操作軸の現在角度およびアーム先端の目標位置に基づいて制御軸の指令角度が算出されるようになっている。つまりこの場合、維持したい位置以外の目標値を未知数としたまま厳密な制御軸の目標値を算出するようになっているため、アーム先端の位置を目標位置に維持させることができる。
【００１６】
このようなことから、上記構成によれば、ユーザは、特に難しい操作を必要とすることなく、アーム先端の位置を目標位置に保ちつつアーム先端の姿勢を変化させる、つまりアーム先端の位置を拘束したダイレクトティーチングを行うことができる。したがって、上記構成によれば、ロボットのダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化することができるという優れた効果が得られる。
【００１７】
また、上記構成によれば、自由に操作可能な操作軸の現在角度に合わせて角度制御が有効な制御軸だけでアーム先端の位置を目標位置に一致させるように角度制御が行われることになるため、振動など不安定な動作が生じ難いという効果も得られる。さらに、上記構成によれば、力覚センサやトルクセンサなどのセンサを用いることなく、ロボットの制御装置に元々設けられる角度制御のための制御系を用いることによりアーム先端の位置を拘束したダイレクトティーチングを実現するようになっているため、製造コストの低減にも寄与することができる。
【００１８】
請求項１または２に記載のロボットの制御装置においては、ダイレクトティーチングの実行中、ロボットが特異点近傍を通過する場合、操作軸が急激に操作された場合、制御軸が可動範囲外に接近する場合などには、制御軸の指令角度の変化量が過大になることがあり、そうすると、制御軸の動作が急峻な動作となって安全性が低下するおそれがある。そこで、このような点を改善するため、請求項３に記載の角度制御部は、次のような処理を実行するようになっている。
【００１９】
すなわち、角度制御部は、制御軸の指令角度が算出されると、その指令角度に基づいて算出される制御軸の指令角速度および指令角加速度がそれぞれ予め定められた最大角速度および最大角加速度を超えないように指令角度を補正する加速補正処理を実行する。これにより、制御軸の角速度および角加速度がそれぞれ最大角速度および最大角加速度以下となる安全な指令角度が生成される。
【００２０】
このようにすれば、ダイレクトティーチングの実行中にロボットが特異点近傍を通過したり、操作軸が急激に操作されたりすることによって制御軸の指令角度の変化量が過大になった場合でも、制御軸の角速度および角加速度をそれぞれ最大角速度および最大角加速度以下に抑えつつ、つまり安全な加速をしつつ、制御軸の角度を当初算出された指令角度に精度良く到達させることができる。
【００２１】
なお、このような加速補正処理が行われる場合、制御軸の動作は、ユーザの操作による操作軸の動作に対して遅れた動作となる。しかしながら、このような遅れは、ロボットのダイレクトティーチングにおいて問題とはならない。なぜなら、一般に、ロボットのダイレクトティーチングでは、ユーザがロボットに触れて動かし、その後、ロボットを停止させた状態で、アーム先端の位置や姿勢が所望する状態となっているかを確認する。このような動作が繰り返されることにより、所望する教示が行われる。つまり、ロボットのダイレクトティーチングにおいて、ユーザがロボットを動かし続けることはなく、必ず、ロボットを停止させる期間が存在する。
【００２２】
上述した制御では、操作軸の動作に対して制御軸の動作が遅れるが、その遅れ分は、ロボットが停止されている期間に取り戻すことができる。したがって、ロボットのダイレクトティーチングでは、上述した制御による制御軸の動作の遅れは、問題とはならない。このようなことから、上記構成では、制御軸の動作が遅れるような制御を敢えて採用しており、それにより、ロボットの安全性の向上を図るようになっている。
【００２３】
請求項３に記載のロボットの制御装置によれば、制御軸の動作が急峻な動作となることは回避できるものの、ロボットの特異点近傍において各軸の移動量が大きくなる現象、つまり遠く離れた関節角度に移動しようとする現象は避けることができない。ダイレクトティーチング中、ユーザは、ロボットに近付いた位置から操作軸の操作を行うことになるため、特異点近傍において各軸の移動量が大きくなる現象が発生すると、ロボットのアームなどがユーザに接触する可能性があり、その結果、安全性が低下するおそれがある。
【００２４】
そこで、このような点を改善するため、請求項４に記載の角度制御部は、次のような処理を実行するようになっている。すなわち、角度制御部は、ロボットが特異点近傍であるか否かを検出する特異点検出処理を実行する。なお、特異点近傍であることは、例えば、ヤコビアンが０になる各軸角度、５軸０度付近などにより検出することが可能である。そして、角度制御部は、特異点検出処理により特異点近傍であることが検出されると、その時点以降の指令角度を、前回の指令角度に置換する指令角度置換処理を実行する。
【００２５】
このように、上記構成では、ロボットが特異点近傍に突入すると指令角度を前回の指令角度で固定（ロック）するという処理が加えられている。このようにすれば、ロボットの特異点近傍において各軸の移動量が大きくなる現象の発生が抑制され、その結果、安全性を向上させることができる。この場合、制御軸の角度制御による位置・姿勢の維持が一時的に中断されることになるが、操作軸の操作に応じて特異点近傍を脱出することができれば、その後は再び制御軸の角度制御による位置・姿勢の維持が再開される。
【００２６】
また、上述したようにロボットが特異点近傍に突入すると指令角度を前回の指令角度でロックする処理を実行して制御軸の角度制御による位置・姿勢の維持を一時的に中断させることにより、請求項３に記載の加速補正処理による制御軸の遅れ分を取り戻すことが可能となる。つまり、上記構成によれば、特異点近傍におけるロボットの安全性を向上させつつ、加速補正処理が行われた場合における制御軸の動作の遅れを取り戻すことができる。
【００２７】
請求項５〜８に記載のロボットの制御方法は、それぞれ請求項１〜４に記載のロボットの制御装置と共通する技術思想に基づくものである。したがって、請求項５〜８に記載のロボットの制御方法によれば、それぞれ請求項１〜４に記載のロボットの制御装置と同様の効果が得られる。
【図面の簡単な説明】
【００２８】
【図１】第１実施形態に係るロボットシステムの構成を模式的に示す図
【図２】第１実施形態に係るロボットの座標系を示す図
【図３】第１実施形態に係るロボットの構成をｘｚ平面およびｙｚ平面で示す図
【図４】第１実施形態に係るコントローラが実行するダイレクトティーチングに関する処理の全体の流れを示すフローチャート
【図５】第１実施形態に係る第１モード時における操作軸および制御軸の設定状態を表す図
【図６】第１実施形態に係る第２モード時における操作軸および制御軸の設定状態を表す図
【図７】第１実施形態に係る第１指令算出処理の内容を示すフローチャート
【図８】第１実施形態に係る第２指令算出処理の内容を示すフローチャート
【図９】第１実施形態に係るロボットのアーム形態をｘｙ座標およびαｒ座標で示す図
【図１０】第１実施形態に係るロボットのアーム形態をαｚ座標で示す図
【図１１】比較例に係る操作軸が大きく動かされた場合のロボットの挙動を模式的に示す図その１
【図１２】比較例に係る操作軸が大きく動かされた場合のロボットの挙動を模式的に示す図その２
【図１３】第２実施形態に係る第１指令算出処理の内容を示すフローチャート
【図１４】第２実施形態に係る第２指令算出処理の内容を示すフローチャート
【図１５】第２実施形態に係る指令速度制限処理の内容を示すフローチャート
【図１６】第２実施形態に係るダイレクトティーチング中に各指令値が修正される様子を示す図その１
【図１７】第２実施形態に係るダイレクトティーチング中に各指令値が修正される様子を示す図その２
【図１８】第２実施形態に係る各処理が実行されることに伴う指令角度の変化の様子を示す図
【図１９】第３実施形態に係る第１指令算出処理の内容を示すフローチャート
【図２０】第３実施形態に係る第２指令算出処理の内容を示すフローチャート
【図２１】第３実施形態に係るダイレクトティーチング中に各指令値が補間される様子を示す図
【発明を実施するための形態】
【００２９】
以下、本発明をロボットの制御装置およびロボットの制御方法に適用した複数の実施形態について図面を参照して説明する。なお、各実施形態において実質的に同一の構成には同一の符号を付して説明を省略する。
（第１実施形態）
以下、第１実施形態について図１〜図１３を参照して説明する。
【００３０】
＜ロボットシステムの構成＞
図１に示すように、ロボットシステム１は、垂直多関節型のロボット２、ロボット２を制御するコントローラ３をベース４の内部に備えている。このロボットシステム１は、一般的な産業用に用いられている。ロボット２は、いわゆる６軸の垂直多関節型ロボットである。ベース４上に、ｚ方向の軸心を持つ第１軸；Ｊ１を介してショルダ５が水平方向に回転可能に連結されている。ショルダ５には、ｙ方向の軸心を持つ第２軸；Ｊ２を備え、ｙ方向に伸びる第２オフセットアーム６を介して、上方に延びる第１アーム７の下端部が垂直方向に回転可能に連結されている。第１アーム７の先端部には、Ｙ方向の軸心を持つ第３軸；Ｊ３を備え、−ｙ方向に伸びる第３オフセットアーム８を介して、第２アーム９が垂直方向に回転可能に連結されている。第２アーム９は、基部９ａおよび先端部９ｂからなる。
【００３１】
第２アーム９は、ｘ方向の軸心を持つ第４軸；Ｊ４を備え、基部９ａに対して先端部９ｂが捻り回転可能に連結されている。第２アーム９の先端部には、ｙ方向の軸心を持つ第５軸；Ｊ５を備え、−ｙ方向に伸びる第５オフセットアーム１０を介して、手首１１が垂直方向に回転可能に連結されている。手首１１には、ｘ方向の軸心を持つ第６軸；Ｊ６を介して、図２に示すフランジおよびハンド１２が捻り回転可能に連結されている。ロボット２に設けられている各軸；Ｊ１〜Ｊ６には、それぞれに対応して駆動源となる図示しないモータが設けられている。なお、以下では、第１軸、第２軸、第３軸、第４軸、第５軸、第６軸のことをそれぞれ１軸、２軸、３軸、４軸、５軸、６軸と省略することがある。
【００３２】
コントローラ３は、ロボット２の制御装置であり、図示しないＣＰＵ、ＲＯＭおよびＲＡＭなどで構成されたコンピュータからなる制御手段においてコンピュータプログラムを実行することで、ロボット２を制御している。具体的には、コントローラ３は、インバータ回路などから構成された駆動部を備えており、各モータに対応して設けられているエンコーダで検知したモータの回転位置に基づいて例えばフィードバック制御によりそれぞれのモータを駆動する。
【００３３】
コントローラ３は、ＣＰＵ、ＲＯＭ、ＲＡＭ、駆動回路および位置検出回路などを備えている。ＲＯＭは、ロボット２のシステムプログラムや動作プログラムなどを記憶している。ＲＡＭは、これらのプログラムを実行する際にパラメータの値などを記憶する。位置検出回路には、ロボット２の各関節に設けられた図示しない各エンコーダの検出信号がそれぞれ入力される。位置検出回路は、各エンコーダの検出信号に基づいて、各関節に設けられたモータの回転角度位置を検出する。
【００３４】
コントローラ３は、予め設定された動作プログラムを実行することにより、位置検出回路から入力される位置情報に基づいて、アーム先端部の制御点の位置および姿勢を制御する。本実施形態において、コントローラ３は、ＣＰ（Continuous Path）制御を行う。ＣＰ制御では、アーム先端部の制御点を目標まで動作させる際に制御点の目標となる位置および姿勢、つまり動作軌道が時間関数として設定される。目標となる位置および姿勢には、教示された位置および姿勢に加えて、教示された位置および姿勢に基づいて補間された位置および姿勢も含まれる。コントローラ３は、ＣＰ制御により、制御点の位置および姿勢が動作軌道に沿うように、アームにおける各関節の角度を制御する。コントローラ３は、位置および姿勢の制御において、現在指示されている目標となる位置および姿勢を実現するための第１軸〜第６軸の角度を算出する逆変換処理を行う。
【００３５】
図２に示すように、ロボット２の各関節には、３次元の直交座標系である第１〜第６座標系Σ１〜Σ６が規定されている。各座標系Σ１〜Σ６の原点は、第１〜第６軸線Ｊ１〜Ｊ６上の所定位置に定められている。各座標系Σ１〜Σ６のｚ軸であるｚ１〜ｚ６軸は、第１〜第６軸線Ｊ１〜Ｊ６と一致している。
【００３６】
ベース４には、ロボット座標系である第０座標系Σ０が規定されている。第０座標系Σ０は、第１軸〜第６軸が回転しても変化しない座標系である。本実施形態において、座標系Σ０の原点は、第１軸線Ｊ１上に定められている。また、座標系Σ０のｚ軸であるｚ０軸は、第１軸線Ｊ１に一致している。
【００３７】
図２に示すｄ１〜ｄ６、ａ２およびａ３は、以下のように定義される。
ｄ１：第０座標系Σ０の原点から第１座標系Σ１の原点までのリンク長
ｄ２：第１座標系Σ１の原点から第１アーム７の基部までのリンク長
ａ２：第１アーム７の基部から同先端部，第２座標系Σ２の原点までのリンク長
ｄ３：第２座標系Σ２の原点から第３オフセットアーム８の先端部までのリンク長
ａ３：第３軸Ｊ３，第４軸Ｊ４の軸心間距離
ｄ４：第３座標系Σ３の原点から第４座標系Σ４の原点までのリンク長
ｄ５：第４座標系Σ４の原点から第５座標系Σ５の原点までのリンク長
ｄ６：第５座標系Σ５の原点から第６座標系Σ６の原点までのリンク長
ａ３については図３を参照。そして、上記ｄ５が第５オフセットアーム１０のリンク長に相当する。
【００３８】
＜ダイレクトティーチングに関する機能＞
本実施形態のコントローラ３は、ユーザがロボット２を直接動かしてロボット２のアーム先端の位置姿勢を教示するダイレクトティーチングに対応している。コントローラ３は、ダイレクトティーチングに関する２つのモードを有している。１つ目のモードは、アーム先端の姿勢を拘束したダイレクトティーチングに対応する第１モードである。２つ目のモードは、アーム先端の位置を拘束したダイレクトティーチングに対応する第２モードである。
【００３９】
これらモードの設定は、ユーザによる所定の操作に応じて行われる。ユーザは、第１モードに設定することにより、アーム先端の姿勢を目標姿勢に維持しつつアーム先端の位置を変化させるようにダイレクトティーチングを行うことが可能となる。また、ユーザは、第２モードに設定することにより、アーム先端の位置を目標位置に維持しつつアーム先端の姿勢を変化させるようにダイレクトティーチングを行うことが可能となる。
【００４０】
コントローラ３は、ロボット２の各軸の角度制御を行う角度制御部としての機能に加え、軸設定部としての機能を有する。以下、このようなコントローラ３の機能について説明する。まず、ユーザによりダイレクトティーチングに関するモード設定と、維持すべき目標位置または目標姿勢を記録しておく。そして、図４のフローチャートに示すように、ステップＳ１１０では、コントローラ３は、ダイレクトティーチングに関するモード設定を確認する。ここで、ユーザにより第１モードに設定されている場合、ステップＳ１１０での判断の結果が「第１モード」となり、ステップＳ１２０に進む。
【００４１】
ステップＳ１２０に進むと、コントローラ３は、図５に示すように、ロボット２の各軸（Ｊ１〜Ｊ６）のうち、アーム先端から遠い側の、言い換えるとベース４に近い側の３つの軸である１，２，３軸（Ｊ１，Ｊ２，Ｊ３）を操作軸に設定する。ロボット２において、１，２，３軸は、アーム先端の位置を決定するうえで支配的な要因となり得る軸、つまりアーム先端の位置を支配（決定）する軸であり、以下の説明では、これらを根元側軸と総称することがある。
【００４２】
このように、コントローラ３は、第１モードに設定されると、根元側軸を操作軸に設定する。操作軸に設定された軸は、角度制御部として機能するコントローラ３により制御することができない状態にされるとともに、外力に従って自由に動作する状態とされる。すなわち、コントローラ３は、第１モードに設定されると、根元側軸の位置制御（角度制御）をオフにすることになる。
【００４３】
ステップＳ１２０の実行後は、ステップＳ１３０に進む。ステップＳ１３０に進むと、コントローラ３は、図５に示すように、アーム先端に近い側の３つの軸である４，５，６軸（Ｊ４，Ｊ５，Ｊ６）を制御軸に設定する。ロボット２において、４，５，６軸は、アーム先端の姿勢を決定するうえで支配的な要因となり得る軸、つまりアーム先端の姿勢を支配（決定）する軸であり、以下の説明では、これらを先端側軸と総称することがある。
【００４４】
このように、コントローラ３は、第１モードに設定されると、先端側軸を制御軸に設定する。制御軸に設定された軸は、角度制御部として機能するコントローラ３により制御することができる状態となる。すなわち、コントローラ３は、第１モードに設定されると、先端側軸の位置制御をオンにすることになる。ステップＳ１３０の実行後は、ステップＳ１４０に進む。ステップＳ１４０に進むと、コントローラ３は、第１指令算出処理を実行する。
【００４５】
第１指令算出処理は、操作軸（Ｊ１，Ｊ２，Ｊ３）の現在角度および目標姿勢を入力として逆運動学計算により制御軸（Ｊ４，Ｊ５，Ｊ６）の指令角度を算出するものであり、例えば図７に示すような内容の処理となる。まず、ステップＳ２１０では、コントローラ３は、逆変換入力パラメータを取得する。この場合、操作軸である１，２，３軸の現在角度「θ１，θ２，θ３」と、アーム先端の目標姿勢、つまり維持する姿勢「Ｒｘ，Ｒｙ，Ｒｚ」とが、逆変換入力パラメータとなる。
【００４６】
ステップＳ２１０の実行後は、ステップＳ２２０に進む。ステップＳ２２０に進むと、コントローラ３は、逆変換計算（逆運動学計算）により、制御軸である４，５，６軸の指令角度「θ４（ｋ＋１），θ５（ｋ＋１），θ６（ｋ＋１）」を算出する。ステップＳ２２０の実行後、第１指令算出処理が終了となる。第１指令算出処理が終了すると、コントローラ３は、算出された指令角度を用いて制御軸である４，５，６軸の位置制御（角度制御）を実行する。
【００４７】
一方、ユーザにより第２モードに設定されている場合、ステップＳ１１０での判断の結果が「第２モード」となり、ステップＳ１５０に進む。ステップＳ１５０に進むと、コントローラ３は、図６に示すように、先端側軸（Ｊ４，Ｊ５，Ｊ６）を操作軸に設定する、言い換えると、先端側軸の位置制御をオフにする。すなわち、コントローラ３は、第２モードに設定されると、先端側軸を操作軸に設定する。
【００４８】
ステップＳ１５０の実行後は、ステップＳ１６０に進む。ステップＳ１６０に進むと、コントローラ３は、図６に示すように、根元側軸（Ｊ１，Ｊ２，Ｊ３）を制御軸に設定する、言い換えると、根元側軸の位置制御をオンにする。すなわち、コントローラ３は、第２モードに設定されると、根元側軸を制御軸に設定する。ステップＳ１６０の実行後は、ステップＳ１７０に進む。ステップＳ１７０に進むと、コントローラ３は、第２指令算出処理を実行する。
【００４９】
第２指令算出処理は、操作軸（Ｊ４，Ｊ５，Ｊ６）の現在角度および目標位置を入力として逆運動学計算により制御軸（Ｊ１，Ｊ２，Ｊ３）の指令角度を算出するものであり、例えば図８に示すような内容の処理となる。まず、ステップＳ３１０では、コントローラ３は、逆変換入力パラメータを取得する。この場合、操作軸である４，５，６軸の現在角度「θ４，θ５，θ６」と、アーム先端の目標位置、つまり維持する位置「Ｘ，Ｙ，Ｚ」とが、逆変換入力パラメータとなる。
【００５０】
ステップＳ３１０の実行後は、ステップＳ３２０に進む。ステップＳ３２０に進むと、コントローラ３は、逆変換計算（逆運動学計算）により、制御軸である１，２，３軸の指令角度「θ１（ｋ＋１），θ２（ｋ＋１），θ３（ｋ＋１）」を算出する。ステップＳ３２０の実行後、第２指令算出処理が終了となる。第２指令算出処理が終了すると、コントローラ３は、算出された指令角度を用いて制御軸である１，２，３軸の位置制御（角度制御）を実行する。
【００５１】
＜順変換処理＞
続いて、本実施形態における逆変換処理（逆変換計算）を説明するための前提として、順変換処理（順変換計算）について説明する。
まず、ｚ軸回転、ｚ軸移動、ｘ軸移動、ｘ軸回転の順の座標変換で、ＤＨパラメータを表１のように決定した。θｉが、図２の状態からの各関節の回転角度になる。
【００５２】
【表１】
2020131314.tif 000003
【００５３】
ベース座標であるΣ０からメカニカルインターフェース座標Σ６までの同次変換行列は次のようになる。ｎ，ｏ，ａは、それぞれノーマルベクトル，オリエントベクトル，アプローチベクトルを示す。なお、表記を簡略化するため、ｓｉｎθｉ，ｃｏｓθｉをそれぞれｓｉ，ｃｉと表記している。また、例えばＳ２３はｓｉｎ（θ２＋θ３）を示す。
【００５４】
【数１】
2020131314.tif 000004
【００５５】
【数２】
2020131314.tif 000005
【００５６】
（８）〜（１０）式を展開すると、（１３）〜（１５）式となる。
【００５７】
【数３】
2020131314.tif 000006
【００５８】
また、第５軸，第６軸についてのノーマル，オリエント，アプローチの各ベクトルおよび位置座標については以下のようになる。
【００５９】
【数４】
2020131314.tif 000007
【００６０】
同次変換行列であるから、ツール座標上での位置ベクトルに左からかけて積をとることで、ベース座標Σ０での位置ベクトルに変換できる。つまり、関節角とＤＨパラメータとからベース座標での先端位置を求めることができる。姿勢角は、第６軸のノーマル，オリエント，アプローチの各ベクトルｎ６，ｏ６，ａ６で表されている。
【００６１】
＜第１指令算出処理における逆変換処理＞
次に、第１指令算出処理における逆変換計算（逆変換処理）の具体的な内容の一例について説明する。すなわち、ダイレクトティーチング中に姿勢のみを維持する機能を実現するための、１，２，３軸は外力に対して受動的に動く状態のときに４，５，６軸を角度制御する場合の角度指令値の計算方法の一例について説明する。
１，２，３軸角度および姿勢が同次変換行列（位置成分無視）で与えられているとする。つまり、（２０）式と位置成分を無視した（２１）式とは既知の数値となる。
【００６２】
【数５】
2020131314.tif 000008
【００６３】
このとき、４，５，６軸を求めるには、Σ３座標からΣ６座標を求められればよいため、（２３）式と（２１）式とが等号になるように解けばよい。
【００６４】
【数６】
2020131314.tif 000009
【００６５】
等号になるのは、（２４）式のときで、右辺は単純な行列演算になっている。（２４）式の右辺の計算結果を（２５）式とすれば、（２６）式を４，５，６軸角度について解けばよいことが分かる。
【００６６】
【数７】
2020131314.tif 000010
【００６７】
まず、５軸角度を求めると２つの解が得られる。どちらが適切なのかは、４，５，６軸の可動範囲のチェックと全て解いた後で現在値（現在角度）との差分がトータルで小さくなる方を選ぶといった方法が考えられる。
【００６８】
【数８】
2020131314.tif 000011
【００６９】
また、５軸角度は、次のように求めてもよい。
【００７０】
【数９】
2020131314.tif 000012
【００７１】
下記の場合には、４，６軸は不定になるため、特異点となる。
【００７２】
【数１０】
2020131314.tif 000013
【００７３】
アプローチベクトルのＸＹ成分から４軸、ノーマルベクトルとオリエントベクトルから６軸を求めると、次のようになる。
【００７４】
【数１１】
2020131314.tif 000014
【００７５】
以上説明した逆変換計算は、手首オフセットｄ５が０ではない（ｄ５≠０）本実施形態のロボット２を対象としたものであるが、手首部分のオフセットが無い（ｄ５＝０）一般的なＰＵＭＡ型６軸ロボットにも適用することができる。なお、手首オフセットｄ５が０の場合には、（２６）式が（４２）式に変わるが、４，５，６軸の角度決定に無関係な部分しか変化しないため逆変換は変わらない。
【００７６】
【数１２】
2020131314.tif 000015
【００７７】
＜第２指令算出処理における逆変換処理＞
次に、第２指令算出処理における逆変換計算（逆変換処理）の具体的な内容の一例について説明する。すなわち、ダイレクトティーチング中にツール先端の位置のみを維持する機能を実現するための、４，５，６軸は外力に対して受動的に動く状態のときに１，２，３を角度制御する場合の角度指令値の計算方法の一例について説明する。
まず、フランジ中心からツール先端位置への同次変換行列を求める。（４３）式は、予めツール定義として与えられているため、既知の数値となる。
【００７８】
【数１３】
2020131314.tif 000016
【００７９】
さらに、ベース座標系からツール先端までの同次変換行列は、（４４）式のようになる。
【００８０】
【数１４】
2020131314.tif 000017
【００８１】
この後、３Ｔ６の要素が多数出てきて式が煩雑になるため、単独で求めて定数変数に置き換えておく。
【００８２】
【数１５】
2020131314.tif 000018
【００８３】
この場合、（４４）式の位置成分と４，５，６軸角度が与えられているため、下記の（４６）式〜（５０）式から１，２，３軸角度が求められればよい。
【００８４】
【数１６】
2020131314.tif 000019
【００８５】
まず、１軸角度を求める。（４６）式を展開すると、それぞれ（５１）式、（５２）式、（５３）式のようになる。
【００８６】
【数１７】
2020131314.tif 000020
【００８７】
ここで、（５４）式のように置くと、ｘｔ，ｙｔは、１軸角度の回転行列を用いて、（５５）式のように簡単な形で表される。なお、この式に用いられているαｒ平面（αｒ座標）は、図９および図１０に示すように、ｘｙ軸を１軸角度だけ回転させた軸をとったものである。αｒ平面におけるｒ方向の成分は、１軸自体と４軸のひねり成分しか寄与せず、２軸と３軸は無関係である。さらに、この場合は４軸以降の角度は固定されているため、これまでの条件で１軸角度を求めることができる。
【００８８】
【数１８】
2020131314.tif 000021
【００８９】
ここで、（５４）式によってｒｔが求められる。さらに式を変形して、（５６）式のようにαｔを求めることができる。
【００９０】
【数１９】
2020131314.tif 000022
【００９１】
続いて、（５５）式を工夫して変形していくと、（５７）式のように、１軸角度の三角関数であるｓ１，ｃ１が求められる。
【００９２】
【数２０】
2020131314.tif 000023
【００９３】
次に、２軸角度を求める。上述した通り、αｒ平面におけるｒ方向の成分は１軸と４軸しか寄与しないため、以降の計算ではｒ方向の成分を無視して、α方向の成分のみを考えることとする。
【００９４】
【数２１】
2020131314.tif 000024
【００９５】
図１０に示すようにロボット２を側面からみたαｚ平面で考えると、下記式が成立する。
【００９６】
【数２２】
2020131314.tif 000025
【００９７】
したがって、下記式からｚ１２を導出することができる。
【００９８】
【数２３】
2020131314.tif 000026
【００９９】
式が煩雑になるため、下記のように置いておくこととする。
【０１００】
【数２４】
2020131314.tif 000027
【０１０１】
ｚ１２を消してα１２について解く。（６２）式に（６８）式を代入し、２次方程式の形にして、解の公式でα１２を求める。
【０１０２】
【数２５】
2020131314.tif 000028
【０１０３】
ｋ２＜０の場合はリーチが届かないため解なしとなる。ｚ１２も、式（６４）以降を、α１２を消してｚ１２について解く方針で進めれば同様に求められるし、あるいは、（６８）式に（７４）式を代入しても求められる。
【０１０４】
【数２６】
2020131314.tif 000029
【０１０５】
最後に３軸角度を求める。（６１）式、（６５）式、（６６）式を使って式を変形していくと、ｃ２３，ｓ２３が求められる。（８４）式を用いれば、１，２，３軸角度を求めることができる。ただし、ｎは各軸番号および２軸と３軸を足した角度を示す。
【０１０６】
【数２７】
2020131314.tif 000030
【０１０７】
以上説明した逆変換計算は、手首オフセットｄ５が０ではない（ｄ５≠０）本実施形態のロボット２を対象としたものであるが、手首部分のオフセットが無い（ｄ５＝０）一般的なＰＵＭＡ型６軸ロボットにも適用することができる。なお、手首オフセットｄ５が０の場合には、（４５）式において「ｄ５＝０」を代入して以降の計算を行うことで同様に実施することができる。
【０１０８】
以上説明したように、本実施形態によれば次のような効果が得られる。
コントローラ３は、アーム先端の姿勢を目標姿勢に維持しつつアーム先端の位置を変化させるようにダイレクトティーチングが行われる際、１，２，３軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、４，５，６軸をコントローラ３により制御される状態とした制御軸に設定する。そして、コントローラ３は、ダイレクトティーチングが行われる際、操作軸の現在角度および目標姿勢を入力として逆運動学計算により制御軸の指令角度を算出する。
【０１０９】
このような構成によれば、ユーザの操作（ロボットに触れて動かすこと）に応じて操作軸が自由に動作するため、ユーザの意図通りにアーム先端の位置を変化させることができる。そして、この際、ユーザの操作に応じて動作する操作軸の現在角度およびアーム先端の目標姿勢に基づいて制御軸の指令角度が算出されるようになっているため、アーム先端の姿勢を目標姿勢に維持させることができる。
【０１１０】
このようなことから、上記構成によれば、ユーザは、特に難しい操作を必要とすることなく、アーム先端の姿勢を目標姿勢に保ちつつアーム先端の位置を変化させる、つまりアーム先端の姿勢を拘束したダイレクトティーチングを行うことができる。したがって、本実施形態によれば、ロボット２のダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化することができるという優れた効果が得られる。
【０１１１】
コントローラ３は、アーム先端の位置を目標位置に維持しつつアーム先端の姿勢を変化させるようにダイレクトティーチングが行われる際、４，５，６軸を外力に従って自由に動作する状態とした操作軸に設定するとともに、１，２，３軸をコントローラ３により制御される状態とした制御軸に設定する。そして、コントローラ３は、ダイレクトティーチングが行われる際、操作軸の現在角度および目標位置を入力として逆運動学計算により制御軸の指令角度を算出する。
【０１１２】
このような構成によれば、ユーザの操作（ロボットに触れて動かすこと）に応じて操作軸が自由に動作するため、ユーザの意図通りにアーム先端の姿勢を変化させることができる。そして、この際、ユーザの操作に応じて動作する操作軸の現在角度およびアーム先端の目標位置に基づいて制御軸の指令角度が算出されるようになっているため、アーム先端の位置を目標位置に維持させることができる。
【０１１３】
このようなことから、上記構成によれば、ユーザは、特に難しい操作を必要とすることなく、アーム先端の位置を目標位置に保ちつつアーム先端の姿勢を変化させる、つまりアーム先端の位置を拘束したダイレクトティーチングを行うことができる。したがって、本実施形態によれば、ロボット２のダイレクトティーチングにおけるアーム先端の位置姿勢の調節操作を簡単化することができるという優れた効果が得られる。
【０１１４】
また、本実施形態によれば、自由に操作可能な操作軸の現在角度に合わせて角度制御が有効な制御軸だけでアーム先端の姿勢または位置を目標姿勢または目標位置に一致させるように角度制御が行われることになるため、振動など不安定な動作が生じ難いという効果も得られる。さらに、上記構成によれば、力覚センサやトルクセンサなどのセンサを用いることなく、ロボット２のコントローラ３に元々設けられる角度制御のための制御系を用いることによりアーム先端の姿勢を拘束したダイレクトティーチングを実現するようになっているため、製造コストの低減にも寄与することができる。
【０１１５】
このような本実施形態により得られる効果は、従来技術と比較することで一層明確になる。そこで、本明細書において特許文献２として挙げた特開昭６０−２３３７０７号公報に開示された技術を比較例とし、その比較例に対する本実施形態の優位性を図１１および図１２を参照しながら説明する。なお、図１１および図１２では、アーム先端の姿勢を拘束したダイレクトティーチングを想定している。したがって、この場合、１，２，３軸（Ｊ１，Ｊ２，Ｊ３）が外力に従って自由に動作する状態の軸（操作軸に相当）に設定されるとともに、４，５，６軸（Ｊ４，Ｊ５，Ｊ６）が位置制御可能な軸（制御軸に相当）に設定される。
【０１１６】
まず、図１１（ａ）に示すような初期姿勢において、２，３軸（Ｊ２，Ｊ３）を畳むようにユーザによる操作が行われると、ロボットは、図１１（ｂ）に示すような状態となり、アーム先端の姿勢が目標姿勢である初期姿勢からずれる。ここで、比較例では、位置はそのままで姿勢だけ上書きして逆変換が行われるため、ロボットは、図１１（ｃ）に実線で示す状態となる。
【０１１７】
比較例では、上述した逆変換の結果に基づいて、図１１（ｃ）に破線で示すように、２軸（Ｊ２）と５軸（Ｊ５）を動作させてアーム先端の姿勢を初期姿勢に維持したいが、２軸（Ｊ２）は操作軸のため動作させることができず、５軸（Ｊ５）だけが動作してしまい、その結果、図１１（ｃ）に実線で示すように、アーム先端の姿勢が初期姿勢とは異なる姿勢になってしまう。
【０１１８】
その後も、比較例では、位置はそのままで姿勢だけ上書きして逆変換が行われるため、ロボットは、図１１（ｄ）に実線で示す状態となる。比較例では、上述した逆変換の結果に基づいて、図１１（ｄ）に破線で示すように、２軸（Ｊ２）と５軸（Ｊ５）を動作させてアーム先端の姿勢を初期姿勢に維持したいが、２軸（Ｊ２）は操作軸のため動作させることができず、５軸（Ｊ５）だけが動作してしまい、その結果、図１１（ｄ）に実線で示すように、アーム先端の姿勢が初期姿勢とは異なる姿勢になってしまう。
【０１１９】
比較例では、このような動作が繰り返され、アーム先端の姿勢を初期姿勢に維持することができない。これに対し、本実施形態では、操作軸の現在角度に合わせて角度制御が有効な制御軸である４，５，６軸だけでアーム先端の姿勢を目標姿勢である初期姿勢に一致させるように角度制御が行われることになるため、図１１（ｄ）に一点鎖線で示すように、５軸（Ｊ５）だけを動作させてアーム先端の姿勢を初期姿勢に維持することができる。
【０１２０】
また、図１２（ａ）に示すような初期姿勢において、２，３軸を伸ばすようにユーザによる操作が行われると、ロボットは、図１２（ｂ）に示すような状態となり、アーム先端の姿勢が目標姿勢である初期姿勢からずれる。この場合も、比較例では、位置はそのままで姿勢だけ上書きして逆変換を実行しようとするが、図１２（ｃ）に破線で示すようにアーム先端が届かない位置となるため逆変換が不可能となる。
【０１２１】
したがって、比較例では、図１２（ｂ）および図１２（ｃ）に示すように、アーム先端の姿勢を初期姿勢に維持することができない。これに対し、本実施形態では、操作軸の現在角度に合わせて角度制御が有効な制御軸である４，５，６軸だけでアーム先端の姿勢を目標姿勢である初期姿勢に一致させるように角度制御が行われることになるため、図１２（ｃ）に一点鎖線で示すように、５軸（Ｊ５）だけを動作させてアーム先端の姿勢を初期姿勢に維持することができる。
【０１２２】
以上説明した２つのケースのように、比較例では、操作軸が大きく動かされた結果、操作軸を大きく動かさなければならない指令値が出力されることがある。しかし、このとき、制御軸しか動かすことができないため、いつまで待っても誤差が収束せずに姿勢の維持が困難となる。比較例では、既存の逆変換をそのまま利用することができるものの、一発で厳密解が得られず、徐々に解が収束していくような動作になるが、上述した２つのケースのように、いつ収束するのか不明となる。この場合、解が収束するまでにおけるロボットの挙動について、どのような挙動となるのかを一切保証することができない。
【０１２３】
また、比較例では、ロボットの特異点近傍では解が不安定になり暴走する可能性があり、その安全性に問題がある。さらに、比較例では、目標の位置・姿勢に対して各軸角度の解が複数存在するため、それらをどのように選択するかが不明確である。つまり、比較例では、形態の選択をどのように行うか不明確であり、無理やり切り替えようとすると特異点を跨ぐために暴走する可能性がある。
【０１２４】
このように、比較例では、アーム先端の位置姿勢を維持できないケースが存在するばかりか、その安全性にも問題がある。これに対し、本実施形態では、維持したい位置または姿勢以外の目標値を未知数としたまま厳密な制御軸の目標値を算出するようになっているため、安全性を良好に維持しつつ、比較例ではアーム先端の位置姿勢を維持することができないケースであっても、アーム先端の位置姿勢を確実に維持することができる。
【０１２５】
上記構成では、ベース４から連続した３つの軸である１，２，３軸を根元側軸とし、アーム先端から連続した３つの軸である４，５，６軸を先端側軸とするように、各軸を切り分けている。このようにすれば、ユーザは、アーム先端の位置を拘束して姿勢を教示しようとした際、手先から連続する３つの軸を自身の力で操作できるため、自身が考える操作（アーム先端の姿勢を調節するべく手先に近い軸を動かす操作）と、実際の操作状態とが一致し易い。
【０１２６】
また、ユーザは、アーム先端の姿勢を拘束して位置を教示しようとした際、ベース４から連続する３つの軸を自身の力で操作できるため、自身が考える操作（アーム先端の位置を調節するべくベース４に近い軸を動かす操作）と、実際の操作状態とが一致し易い。したがって、このような各軸の切り分けによれば、ダイレクトティーチング作業において、ユーザに違和感を与えることが少なくなるという効果が得られる。
【０１２７】
（第２実施形態）
以下、第１実施形態に対してコントローラ３による制御の内容、つまりロボット２の制御方法が変更された第２実施形態について図１３〜図１８を参照して説明する。
第１実施形態において、ダイレクトティーチングの実行中、ロボット２が特異点近傍を通過する場合、操作軸が急激に操作された場合などには、制御軸の指令角度の変化量が過大になることがあり、そうすると、制御軸の動作が急峻な動作となって安全性が低下するおそれがある。
【０１２８】
そこで、本実施形態では、このような点を改善するため、角度制御部として機能するコントローラ３により実行される処理である第１指令算出処理および第２指令算出処理の内容に変更が加えられている。本実施形態の第１指令算出処理は、例えば図１３に示すような内容の処理となる。この場合、ステップＳ２２０の実行後、ステップＳ２５０に進む。ステップＳ２５０に進むと、コントローラ３は、指令速度制限処理を実行する。また、本実施形態の第２指令算出処理は、例えば図１４に示すような内容の処理となる。この場合、ステップＳ３２０の実行後、ステップＳ３５０に進む。ステップＳ３５０に進むと、コントローラ３は、指令速度制限処理を実行する。
【０１２９】
指令速度制限処理の概要は、以下の通りである。まず、前提として、予めユーザ（使用者）が安全と判断する各関節（各軸）の最大角速度ωｍａｘと最大角加速度ａｍａｘを定めておく。これらパラメータ（ωｍａｘ、ａｍａｘ）の設定方法としては、例えば、実際にユーザがロボット２の挙動を確認しながらチューニングする方法などを挙げることができる。そして、コントローラ３は、制御軸の指令角度θ（ｋ＋１）が算出されると、各関節の指令角度θ（ｋ＋１）に向かって安全に加速する指令角度θ（ｋ＋１）′に補正する加速補正処理と、最終的に制御軸の角度を元の指令角度θ（ｋ＋１）に収束させるために減速する指令角度θ（ｋ＋１）″に補正する減速補正処理と、を実行する。
【０１３０】
すなわち、コントローラ３は、制御軸の指令角度θ（ｋ＋１）が算出されると、その指令角度θ（ｋ＋１）に基づいて算出される制御軸の指令角速度ω（ｋ＋１）および指令角加速度ａ（ｋ＋１）がそれぞれ予め定められた最大角速度ωｍａｘおよび最大角加速度ａｍａｘを超えないように指令角度θ（ｋ＋１）を補正する加速補正処理を実行する。これにより、制御軸の角速度および角加速度がそれぞれ最大角速度ωｍａｘおよび最大角加速度ａｍａｘ以下となる安全な指令角度θ（ｋ＋１）′が生成される。
【０１３１】
ただし、加速補正処理により補正された後の指令角度θ（ｋ＋１）′から最大減速で減速しても当初算出された指令角度θ（ｋ＋１）を超過する場合が考えられる。そこで、コントローラ３は、制御軸の角度が算出された指令角度θ（ｋ＋１）へと収束するように加速補正処理により補正された後の指令角度θ（ｋ＋１）′をさらに補正する減速補正処理を実行する。これにより、制御軸の角度が当初算出された指令角度θ（ｋ＋１）を超過する事態を防止することができる。
【０１３２】
このような指令速度制限処理の具体的な処理内容は、例えば図１５に示すようなものとなる。なお、以下の説明において用いる各記号の定義は、以下の通りとなっている。ただし、ｎは軸番号である。
θｎ（ｋ）：前回指令角度
θｎ（ｋ＋１）：指令角度
θｎ（ｋ＋１）′：指令角度（最大加速）
θｎ（ｋ＋１）″：指令角度（最大減速）
ωｎ（ｋ）：前回指令角速度
ωｎ（ｋ＋１）：指令角速度
ωｎ（ｋ＋１）′：指令角速度（最大加速）
ωｎ（ｋ＋１）″：指令角速度（最大減速）
ａｎ（ｋ＋１）：指令角加速度
ａｎ（ｋ＋１）′：指令角加速度（最大加速）
【０１３３】
まず、ステップＳ４０１では、指令角度θｎ（ｋ＋１）が取得される。ステップＳ４０２では、下記（８５）式に基づいて指令角速度ωｎ（ｋ＋１）が計算される。
ωｎ（ｋ＋１）＝｛θｎ（ｋ＋１）−θｎ（ｋ）｝／ｄｔ  …（８５）
ステップＳ４０３では、下記（８６）式に基づいて指令角加速度が計算される。
ａｎ（ｋ＋１）＝｛ωｎ（ｋ＋１）−ωｎ（ｋ）｝／ｄｔ  …（８６）
【０１３４】
ステップＳ４０４では、ステップＳ４０２で計算された指令角速度ωｎ（ｋ＋１）が最大角速度ωｎｍａｘ未満であるという条件およびステップＳ４０３で計算された指令角加速度ａｎ（ｋ＋１）が最大角加速度ａｎｍａｘ未満であるという条件の双方を満たすか否か、つまり下記（８７）式および（８８）式の双方を満たすか否かが判断される。
｜ωｎ（ｋ＋１）｜＜ωｎｍａｘ  …（８７）
｜ａｎ（ｋ＋１）｜＜ａｎｍａｘ  …（８８）
【０１３５】
ここで、上記（８７）式および（８８）式の双方を満たす場合、ステップＳ４０４で「ＹＥＳ」となり、指令速度制限処理が終了となる。つまり、この場合、速度制限が不要であるため、当初の指令角度θｎ（ｋ＋１）に基づいて制御軸の角度制御が実行される。一方、上記（８７）式および（８８）式の一方または双方を満たさない場合、ステップＳ４０４で「ＮＯ」となり、ステップＳ４０５に進む。
【０１３６】
ステップＳ４０５では、下記（８９）式に基づいて指令角加速度が修正（補正）される。ただし、ｓｇｎは、その後の括弧内の数式の計算結果の符号を返す関数である。
ａｎ（ｋ＋１）′＝ｓｇｎ｛θｎ（ｋ＋１）−θｎ（ｋ）｝・ａｎｍａｘ  …（８９）
【０１３７】
このように、ステップＳ４０５では、指令角加速度が最大角加速度ａｎｍａｘに置き換えられる（角加速度が最大値に張り付けられる）。また、この場合、加速方向は、位置偏差から計算されることになる。
【０１３８】
ステップＳ４０６では、下記（９０）式に基づいて指令角速度が再計算される。つまり、ステップＳ４０６では、最大角加速度ａｎｍａｘで加速した場合の指令角速度ωｎ（ｋ＋１）′が求められる。
ωｎ（ｋ＋１）′＝ａｎ（ｋ＋１）′・ｄｔ＋ωｎ（ｋ）  …（９０）
【０１３９】
ステップＳ４０７では、ステップＳ４０６で再計算された指令角速度ωｎ（ｋ＋１）′が最大角速度ωｎｍａｘ以下であるか否か、つまり下記（９１）を満たすか否かが判断される。
｜ωｎ（ｋ＋１）′｜≦ωｎｍａｘ  …（９１）
【０１４０】
ここで、指令角速度ωｎ（ｋ＋１）′が最大角速度ωｎｍａｘ以下である場合、ステップＳ４０７で「ＹＥＳ」となり、ステップＳ４０８を実行することなく、ステップＳ４０９に進む。一方、指令角速度ωｎ（ｋ＋１）′が最大角速度ωｎｍａｘを超える場合、ステップＳ４０７で「ＮＯ」となり、ステップＳ４０８に進む。ステップＳ４０８では、下記（９２）式に基づいて指令角速度が修正（補正）される。
ωｎ（ｋ＋１）′＝ｓｇｎ｛ωｎ（ｋ＋１）′｝・ωｎｍａｘ  …（９２）
このように、ステップＳ４０８では、指令角速度が最大角速度ωｎｍａｘに置き換えられる（角速度が最大値に張り付けられる）。
【０１４１】
ステップＳ４０９では、下記（９３）式に基づいて指令角度が再計算される。つまり、ステップＳ４０９では、最大角加速度ａｎｍａｘで加速した場合の指令角度θｎ（ｋ＋１）′が求められる。
θｎ（ｋ＋１）′＝ωｎ（ｋ＋１）′・ｄｔ＋θｎ（ｋ）  …（９３）
【０１４２】
指令角度は、ユーザによる操作軸の操作に応じて動的に変化しているため、指令角度が現在角度に近づいてくることがある。このとき、減速が間に合わずに指令角速度の方向と現在角度から指令角度へと向かう方向とが逆になることがある。そこで、ステップＳ４１０では、下記（９４）式を満たすか否かが判断される。すなわち、ステップＳ４１０では、位置偏差の符号から指令角度へ向かう方向（下記式の右辺）を割り出し、その方向が指令角速度ωｎ（ｋ＋１）′の方向（下記式の左辺）と一致するかどうかが判断される。
ｓｇｎ｛ωｎ（ｋ＋１）′｝＝ｓｇｎ｛θｎ（ｋ＋１）−θｎ（ｋ）｝  …（９４）
【０１４３】
ここで、上記（９４）式を満たさない場合、ステップＳ４１０で「ＮＯ」となり、ステップＳ４１１に進む。この場合、指令角度から離れようとしていると考えられる。そのため、ステップＳ４１１において、指令角度に向かって最大加速するように、指令角度がθｎ（ｋ＋１）′に更新されるとともに、指令角速度がωｎ（ｋ＋１）′に更新される。ステップＳ４１１の実行後は、指令速度制限処理が終了となる。
【０１４４】
一方、上記（９４）式を満たす場合、ステップＳ４１０で「ＹＥＳ」となり、ステップＳ４１２に進む。この場合、減速が間に合うかどうか確認する必要がある。そこで、ステップＳ４１２では、下記（９５）式に基づいて、指令角度から最大減速した場合の移動量Δθが計算される。
Δθ＝｛ωｎ（ｋ＋１）′｝２／｛２ａｎ（ｋ＋１）′｝  …（９５）
【０１４５】
ステップＳ４１３では、下記（９６）式に基づいて、指令角度までの残りの距離（下記式の右辺）が減速停止に必要な距離（下記式の左辺）以下であるか否かが判断される。
｜Δθ｜≧｜θｎ（ｋ＋１）−θｎ（ｋ＋１）′｜  …（９６）
【０１４６】
ここで、上記（９６）式の右辺が左辺よりも大きい場合、ステップＳ４１３で「ＮＯ」となり、ステップＳ４１１に進む。この場合、減速できる区間が十分にあるため、ステップＳ４１１において、指令角度に向かって最大加速するように、指令角度および指令角速度が更新される。一方、上記（９６）式の右辺が左辺以下である場合、ステップＳ４１３で「ＹＥＳ」となり、ステップＳ４１４に進む。
【０１４７】
この場合、移動した先から最大減速しても指令角度をオーバーしてしまうと考えられる。つまり、この場合、このまま加速すると指令角度を超過することになるため、直ちに減速を始める必要がある。そこで、ステップＳ４１４では、下記（９７）式に基づいて、最大減速速度が求められる。
ωｎ（ｋ＋１）″＝ωｎ（ｋ）−ａｎｍａｘ・ｄｔ  …（９７）
【０１４８】
ステップＳ４１５では、ステップＳ４１４で再計算された指令角速度ωｎ（ｋ＋１）″が最大角速度ωｎｍａｘ以下であるか否か、つまり下記（９８）を満たすか否かが判断される。
｜ωｎ（ｋ＋１）″｜≦ωｎｍａｘ  …（９８）
【０１４９】
ここで、指令角速度ωｎ（ｋ＋１）″が最大角速度ωｎｍａｘ以下である場合、ステップＳ４１５で「ＹＥＳ」となり、ステップＳ４１６を実行することなく、ステップＳ４１７に進む。一方、指令角速度ωｎ（ｋ＋１）″が最大角速度ωｎｍａｘを超える場合、ステップＳ４１５で「ＮＯ」となり、ステップＳ４１６に進む。ステップＳ４１６では、下記（９９）式に基づいて指令角速度が修正（補正）される。
ωｎ（ｋ＋１）″＝ｓｇｎ｛ωｎ（ｋ＋１）″｝・ωｎｍａｘ  …（９９）
このように、ステップＳ４１６では、指令角速度が最大角速度ωｎｍａｘに置き換えられる（角速度が最大値に張り付けられる）。
【０１５０】
ステップＳ４１７では、下記（１００）式に基づいて指令角度が再計算される。
θｎ（ｋ＋１）″＝ωｎ（ｋ＋１）″・ｄｔ＋θｎ（ｋ）  …（１００）
ステップＳ４１８では、最大減速するように、指令角度がθｎ（ｋ＋１）″に更新されるとともに、指令角速度がωｎ（ｋ＋１）″に更新される。ステップＳ４１８の実行後は、指令速度制限処理が終了となる。
【０１５１】
続いて、ダイレクトティーチング中に指令速度制限処理が実行されることにより各指令値（指令角度θｎ（ｔ）、指令角速度ωｎ（ｔ）、指令角加速度ａｎ（ｔ））が修正（補正）される様子の一例について図１６〜図１８を参照しながら説明する。この場合、図１６（ａ）に示すように、今回（「ｋ＋１」の時点）与えられた指令角度θｎ（ｋ＋１）は、前回（「ｋ」の時点）の指令角度θｎ（ｋ）から大きく変化した値になっているものとする。
【０１５２】
このような指令角度θｎ（ｋ＋１）に基づいて計算された指令角速度ωｎ（ｋ＋１）および指令角加速度ａｎ（ｋ＋１）は、図１６（ｂ）、（ｃ）に示すように、それぞれ最大角速度ωｎｍａｘおよび最大角加速度ａｎｍａｘを超過した値となる。そこで、図１６（ｄ）に示すように、指令角加速度ａｎ（ｔ）が最大角加速度ａｎｍａｘに制限される。そして、このように制限された指令角加速度ａｎ（ｔ）に基づいて指令角速度ωｎ（ｔ）が再計算される。ここで、図１６（ｅ）に示すように、再計算された指令角速度ωｎ（ｋ＋１）′が最大角速度ωｎｍａｘを超過する場合、指令角速度ωｎ（ｔ）が最大角速度ωｎｍａｘに制限される。
【０１５３】
その後、このように制限が行われた指令角速度ωｎ（ｋ＋１）に基づいて、指令角度θｎ（ｔ）が再計算される。これにより、図１６（ｆ）に示すような指令角度θｎ（ｋ＋１）′が生成される。この指令角度θｎ（ｋ＋１）′は、角速度と角加速度が最大値以下となる安全な指令値となる。ここまでの処理が、加速補正処理に相当する手順となる。上述した通り、加速補正処理では、与えられた指令角度から角速度・角加速度を計算してリミットチェックが行われ、角速度・角加速度を制限して安全な指令角度に補正される。
【０１５４】
次に、図１７（ａ）に示すように、初速（＝指令角速度ωｎ（ｋ＋１）′）、最大角加速度ａｎｍａｘで、減速停止するまでの距離Δθを計算し、元の指令角度θｎ（ｋ＋１）を超過しないかどうかがチェックされる。この場合、図１７（ａ）に破線で示すように、このまま加速すると、その後に減速しきれず、元の指令角度θｎ（ｋ＋１）をオーバーしてしまう。
【０１５５】
そこで、図１７（ｂ）に示すように、直ちに減速を開始するように、指令角速度ωｎ（ｔ）を下げ始める。つまり、この場合、図１７（ｃ）に示すように、指令角度θｎ（ｔ）が、指令角加速度ａｎ（ｔ）を−ａｎｍａｘとして最大減速するような指令角度θｎ（ｋ＋１）″に補正される。ここまでの処理が、減速補正処理に相当する手順となる。上述した通り、減速補正処理では、加速補正後の指令値に基づいて、元の指令角度で止まりきれるかどうかチェックが行われ、元の指令角度で止まりきれない場合は直ちに減速が開始されるような指令角度に補正される。
【０１５６】
このような処理全体の様子、つまり上記各処理が実行されることに伴う指令角度θｎ（ｔ）の変化の様子は、図１８に示すようになる。なお、図１８において、時刻ｔ１〜ｔ２の期間Ｔａは速度制限がされていない期間であり、時刻ｔ２〜ｔ３の期間Ｔｂは加速補正が行われている期間であり、時刻ｔ３〜ｔ４の期間Ｔｃは減速補正が行われている期間である。図１８に示すように、時刻ｔ２において前回値から大きく変化するような指令値（指令角度）が発生すると、期間Ｔｂにおいて安全な角速度・角加速度となるように指令角度が補正される。その後、期間Ｔｃにおいて元の指令角度で止まりきれないことが分かると、減速を始めるように指令角度が補正される。その結果、指令角度の変化量が大きくなった場合でも、安全な角速度・角加速度でもって指令角度に到達することができる。
【０１５７】
以上説明したように、本実施形態のコントローラ３は、制御軸の指令角度θｎ（ｋ＋１）が算出されると、その指令角度に基づいて算出される制御軸の指令角速度ωｎ（ｋ＋１）および指令角加速度ａｎ（ｋ＋１）がそれぞれ最大角速度ωｎｍａｘおよび最大角加速度ａｎｍａｘを超えないように指令角度を補正する加速補正処理を実行する。これにより、制御軸の角速度および角加速度がそれぞれ最大角速度ωｎｍａｘおよび最大角加速度ａｎｍａｘ以下となる安全な指令角度θｎ（ｋ＋１）′が生成される。
【０１５８】
ただし、加速補正処理により補正された後の指令角度θｎ（ｋ＋１）′から最大減速で減速しても当初算出された指令角度θｎ（ｋ＋１）を超過する場合が考えられる。そこで、コントローラ３は、制御軸の角度が指令角度θｎ（ｋ＋１）へと収束するように指令角度θｎ（ｋ＋１）′をさらに補正する減速補正処理を実行する。これにより、制御軸の角度が指令角度θｎ（ｋ＋１）を超過する事態を防止することができる。
【０１５９】
このようにすれば、ダイレクトティーチングの実行中にロボット２が特異点近傍を通過したり、操作軸が急激に操作されたりすることによって制御軸の指令角度θｎ（ｋ＋１）の変化量が過大になった場合でも、制御軸の角速度および角加速度をそれぞれ最大角速度ωｎｍａｘおよび最大角加速度ａｎｍａｘ以下に抑えつつ、つまり安全な加速をしつつ、制御軸の角度を当初算出された指令角度θｎ（ｋ＋１）に精度良く到達させることができる。
【０１６０】
なお、上述した加速補正処理などが行われる場合、制御軸の動作は、ユーザの操作による操作軸の動作に対して遅れた動作となる。しかしながら、このような遅れは、ロボット２のダイレクトティーチングにおいて問題とはならない。なぜなら、一般に、ロボットのダイレクトティーチングでは、ユーザがロボットに触れて動かし、その後、ロボットを停止させた状態で、アーム先端の位置や姿勢が所望する状態となっているかを確認する。このような動作が繰り返されることにより、所望する教示が行われる。つまり、ロボット２のダイレクトティーチングにおいて、ユーザがロボット２を動かし続けることはなく、必ず、ロボット２を停止させる期間が存在する。
【０１６１】
本実施形態の制御では、操作軸の動作に対して制御軸の動作が遅れるが、その遅れ分は、ロボット２が停止されている期間に取り戻すことができる。したがって、ロボット２のダイレクトティーチングでは、上述した制御による制御軸の動作の遅れは、問題とはならない。このようなことから、本実施形態では、制御軸の動作が遅れるような制御を敢えて採用しており、それにより、ロボット２の安全性の向上を図るようになっている。
【０１６２】
（第３実施形態）
以下、第２実施形態に対してコントローラ３による制御の内容、つまりロボット２の制御方法が変更された第３実施形態について図１９〜図２１を参照して説明する。
【０１６３】
第２実施形態によれば、制御軸の動作が急峻な動作となることは回避できるものの、ロボット２の特異点近傍において各軸の移動量が大きくなる現象、つまり遠く離れた関節角度に移動しようとする現象は避けることができない。ダイレクトティーチング中、ユーザは、ロボット２に近付いた位置から操作軸の操作を行うことになるため、特異点近傍において各軸の移動量が大きくなる現象が発生すると、ロボット２のアームなどがユーザに接触する可能性があり、その結果、安全性が低下するおそれがある。
【０１６４】
そこで、本実施形態では、このような点を改善するため、角度制御部として機能するコントローラ３により実行される処理である第１指令算出処理および第２指令算出処理の内容に変更が加えられている。本実施形態の第１指令算出処理は、例えば図１９に示すような内容の処理であり、第２実施形態の第１指令算出処理に対し、ステップＳ２３０およびＳ２４０が追加されている。
【０１６５】
この場合、ステップＳ２２０の実行後、ステップＳ２３０に進む。ステップＳ２３０に進むと、コントローラ３は、ロボット２が特異点近傍であるか否かを検出する。なお、特異点近傍であることは、例えば、ヤコビアンが０になる各軸角度、５軸０度付近などにより検出することが可能である。ここで、特異点近傍であることが検出されない場合、ステップＳ２３０で「ＮＯ」となり、ステップＳ２４０を実行することなく、ステップＳ２５０に進む。
【０１６６】
一方、特異点近傍であることが検出されると、ステップＳ２３０で「ＹＥＳ」となり、ステップＳ２４０に進む。ステップＳ２４０に進むと、コントローラ３は、今回の指令角度を、前回の指令角度で固定（ロック）する。この場合、今回の指令角度θ４（ｋ＋１）、θ５（ｋ＋１）、θ６（ｋ＋１）が、それぞれ前回の指令角度θ４（ｋ）、θ５（ｋ）、θ６（ｋ）に置換される。ステップＳ２４０の実行後は、ステップＳ２５０に進む。
【０１６７】
本実施形態の第２指令算出処理は、例えば図２０に示すような内容の処理であり、第２実施形態の第２指令算出処理に対し、ステップＳ３３０およびＳ３４０が追加されている。この場合、ステップＳ３２０の実行後、ステップＳ３３０に進む。ステップＳ３３０に進むと、コントローラ３は、ロボット２が特異点近傍であるか否かを検出する。ここで、特異点近傍であることが検出されない場合、ステップＳ３３０で「ＮＯ」となり、ステップＳ３４０を実行することなく、ステップＳ３５０に進む。
【０１６８】
一方、特異点近傍であることが検出されると、ステップＳ３３０で「ＹＥＳ」となり、ステップＳ３４０に進む。ステップＳ３４０に進むと、コントローラ３は、今回の指令角度を、前回の指令角度で固定（ロック）する。この場合、今回の指令角度θ１（ｋ＋１）、θ２（ｋ＋１）、θ３（ｋ＋１）が、それぞれ前回の指令角度θ１（ｋ）、θ２（ｋ）、θ３（ｋ）に置換される。ステップＳ３４０の実行後は、ステップＳ３５０に進む。
【０１６９】
本実施形態において、ステップＳ２３０およびＳ３３０の処理は、ロボット２が特異点近傍であるか否かを検出する特異点検出処理に相当する。また、本実施形態において、ステップＳ２４０およびＳ３４０の処理は、特異点検出処理により特異点近傍であることが検出されると、その時点以降の指令角度を、前回の指令角度に置換する指令角度置換処理に相当する。
【０１７０】
続いて、ダイレクトティーチング中に特異点検出処理、指令角度置換処理および指令速度制限処理が実行されることにより、特異点侵入時に制御軸の指令値（指令角度θｎ（ｔ））が修正（補間）される様子の一例について図２１を参照しながら説明する。図２１において、時刻ｔ１１〜ｔ１２の期間Ｔｄは特異点ではない正常な期間であり、時刻ｔ１２〜ｔ１３の期間Ｔｅは特異点である期間であり、時刻ｔ１３〜ｔ１４の期間Ｔｆは加速補正が行われている期間であり、時刻ｔ１４〜ｔ１５の期間Ｔｇは減速補正が行われている期間である。
【０１７１】
なお、図２１において、（ａ）は、特異点検出処理および指令角度置換処理が実行されない場合を表し、（ｂ）は、特異点検出処理および指令角度置換処理が実行される場合を表している。この場合、時刻ｔ１２の時点にて、ロボット２が特異点に侵入したことが検出されると、つまり特異点が検出されると、図２１（ａ）に示すように、その時点以降の指令角度θｎ（ｔ）が特異点検出時の指令角度にロック（固定）される。
【０１７２】
ただし、このとき、指令角度θｎ（ｔ）は、図２１（ｂ）に示すように、指令速度制限処理が実行されることにより、特異点検出時の指令角度に向けて緩やかに変化する。時刻ｔ１２〜時刻ｔ１３の期間Ｔｅでは、指令角度がロックされるため、制御軸の角度制御による位置・姿勢の維持が一時的に中断される。このとき、例えばティーチングペンダントなどの表示デバイスにメッセージを表示させたり、ロボット２の筐体などに設けられたＬＥＤなどの点灯状態や色を変化させたりすることによって、ユーザに対して特異点近傍であることと、位置・姿勢の維持が中断されていることとを報知するとよい。このようにすれば、ユーザは、ロボット２の現在の状況を正確に知ることができる。
【０１７３】
その後、時刻ｔ１３の時点にて、ユーザの操作によってロボット２が特異点を脱出すると、時刻ｔ１３〜時刻ｔ１５において加速補正処理および減速補正処理が行われることにより、制御軸の角速度が低減されるように指令角度の補正が行われる。図２１（ｂ）に示すように、特異点検出処理および指令角度置換処理が実行される場合、これらの処理が実行されない場合（図２１（ａ）参照）に対し、指令角度θｎ（ｔ）が遅れて変化するような挙動となる。
【０１７４】
以上説明したように、本実施形態のコントローラ３は、ロボット２が特異点近傍に突入すると、その時点以降の指令角度を前回の指令角度（特異点検出時の指令角度）で固定するという処理を実行するようになっている。このようにすれば、ロボット２の特異点近傍において各軸の移動量が大きくなる現象の発生が抑制され、その結果、安全性を向上させることができる。
【０１７５】
この場合、制御軸の角度制御による位置・姿勢の維持が一時的に中断されることになるが、操作軸の操作に応じて特異点近傍を脱出することができれば、その後は再び制御軸の角度制御による位置・姿勢の維持が再開される。また、上述したようにロボット２が特異点近傍に突入すると指令角度を前回の指令角度でロックする処理を実行して制御軸の角度制御による位置・姿勢の維持を一時的に中断させることにより、加速補正処理などによる制御軸の遅れ分を取り戻すことが可能となる。つまり、本実施形態によれば、特異点近傍におけるロボット２の安全性を向上させつつ、加速補正処理などが行われた場合における制御軸の動作の遅れを取り戻すことができる。
【０１７６】
（その他の実施形態）
なお、本発明は上記し且つ図面に記載した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で任意に変形、組み合わせ、あるいは拡張することができる。
上記実施形態で示した数値などは例示であり、それに限定されるものではない。
【０１７７】
本発明は、一般的な産業用ロボットシステムであるロボットシステム１に用いられるものに限らず、垂直多関節型のロボットを制御するものであり且つダイレクトティーチングに対応したロボットの制御全般に適用することができる。
コントローラ３を、ロボット２のベース４の外に配置してもよい。
【０１７８】
先端側軸としては、４，５，６軸に限らず、例えば３，４，６軸など、アーム先端の姿勢を決定するうえで支配的な要因となり得る軸であればよい。また、根元側軸としては、１，２，３軸に限らず、例えば１，２，５軸など、アーム先端の位置を決定するうえで支配的な要因となり得る軸であればよい。また、これらの先端側軸および根元側軸の切り分けは、制御対象となるロボットの仕様に応じて適宜変更すればよい。
【符号の説明】
【０１７９】
１…ロボットシステム、２…ロボット、３…コントローラ、Ｊ１，Ｊ２，Ｊ３…軸、Ｊ４，Ｊ５，Ｊ６…軸。
【図１】
2020131314.tif 000031
【図２】
2020131314.tif 000032
【図３】
2020131314.tif 000033
【図４】
2020131314.tif 000034
【図５】
2020131314.tif 000035
【図６】
2020131314.tif 000036
【図７】
2020131314.tif 000037
【図８】
2020131314.tif 000038
【図９】
2020131314.tif 000039
【図１０】
2020131314.tif 000040
【図１１】
2020131314.tif 000041
【図１２】
2020131314.tif 000042
【図１３】
2020131314.tif 000043
【図１４】
2020131314.tif 000044
【図１５】
2020131314.tif 000045
【図１６】
2020131314.tif 000046
【図１７】
2020131314.tif 000047
【図１８】
2020131314.tif 000048
【図１９】
2020131314.tif 000049
【図２０】
2020131314.tif 000050
【図２１】
2020131314.tif 000051