(57)【要約】  ｍ次元作業空間において動作するｎ個の関節を有するロボットデバイスに対する所望の動作コマンドは、それが関節移動限界に対する違反を生じないか判断するために分析される。ゼロでない数量であるＮ個の関節が、関節移動限界に達した場合、修正動作コマンドが以下の式に従って再構築される。    ［外７４］2014508657.tif 000094は現在は限界でない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、    ［外７５］2014508657.tif 000095はＪｍｏｄの転置行列であり、Ｗは重み付け係数を含むｍ×ｍ行列であり、    ［外７６］2014508657.tif 000096はエンドエフェクター速度に対する所望の動作コマンドである。Ｊｍｏｄは、ロボットデバイスの現在の関節角度状態情報を使用して、ロボットデバイスに対するｍ×ｎのヤコビアン行列Ｊを決定することによって構築され、行列Ｊｍｏｄを生成するためにヤコビアン行列Ｊを使用する。Ｊｍｏｄは、Ｌ個の動作的に制限された関節に対応する行を除いてＪの全ての行を含んでいる。
2014508657.tif 000002
【特許請求の範囲】
【請求項１】
ロボットデバイスにおける複数の関節をコントロールする方法であって、
前記関節の少なくとも一部は、それぞれの関節移動限界を有し、
前記方法は：
前記ロボットデバイスに対する所望の動作コマンドが、前記ロボットデバイスの少なくとも一つの第１の関節移動限界の違反を生じるかを判断する段階と；
前記ロボットデバイスの現在の状態および前記所望の動作コマンドを使用して、前記ロボットデバイスに対する修正動作コマンドを再構築する段階であり、
前記修正動作コマンドは、前記少なくとも一つの第１の関節移動限界の違反を防ぎ、
前記修正動作コマンドは、前記所望の動作コマンドと同一ではなく、前記ロボットデバイスによって処理されると前記ロボットデバイスの移動を生じさせる、
段階と；
前記所望の動作コマンドの代わりに前記修正動作コマンドを使用して、前記ロボットデバイスの対応する移動を生じさせる段階と、を含む、
ことを特徴とする方法。
【請求項２】
前記ロボットデバイスに対する前記修正動作コマンドを再構築する段階は、さらに、
前記関節のそれぞれの移動を重み付けるために重み付け係数を使用する段階、を含む、
請求項１に記載の方法。
【請求項３】
前記ロボットデバイスは、前記ロボットデバイスのエンドエフェクターに係るｍ次元作業空間に対するｎ個の関節を含み、
前記所望の動作コマンドは、前記ｎ個の関節のうちＮ個についてそれぞれの関節移動限界に対する違反を生じ、
前記ロボットデバイスに対する前記修正動作コマンドを再構築する段階は、以下の式を解く段階、を含み、
【数１５】
2014508657.tif 000080
ここで、
［外６４］
2014508657.tif 000081
は現在制限されていない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、
［外６５］
2014508657.tif 000082
はＪｍｏｄの転置行列であり、Ｗは前記重み付け係数を含むｍ×ｍ行列であり、そして、
［外６６］
2014508657.tif 000083
は前記エンドエフェクターに対する所望の動作コマンドである、
請求項２に記載の方法。
【請求項４】
前記ロボットデバイスに対する前記修正動作コマンドを再構築する段階は、さらに、以下の式を解く段階、を含み、
【数１６】
2014508657.tif 000084
ここで、
［外６７］
2014508657.tif 000085
はｎ×１の新たな関節速度コマンドであり、ｒｅ（）はＬ個の動作的に制限された各関節に対してそれぞれの既定の値を挿入して
［外６８］
2014508657.tif 000086
を生成する関数である、
請求項３に記載の方法。
【請求項５】
前記方法は、さらに、
以下のステップを使用して前記ｍ×（ｎ−Ｌ）の行列Ｊｍｏｄを生成する段階、を含み、
前記ステップは、
前記ロボットデバイスの現在の状態を使用して前記ロボットデバイスに対するｍ×ｎのヤコビアン行列Ｊを決定するステップであり、前記ロボットデバイスの前記現在の状態は前記ｎ個の各関節の現在の変位を含むステップと、
行列Ｊｍｏｄを生成するために前記ヤコビアン行列Ｊをするステップであり、行列Ｊｍｏｄは前記Ｌ個の動作的に制限された関節に対応する行を除いて行列Ｊにおける全ての行を含んでいるステップと、を含む、
請求項３に記載の方法。
【請求項６】
ロボットデバイスをコントロールするシステムであって、
前記ロボットデバイスは、ｍ次元作業空間において動作するエンドエフェクターを移動する関節を含み、
前記ロボットデバイスは、ｎ個のアクチュエーターによって駆動され、
前記システムは、前記アクチュエーターをコントロールするために、アクチュエーター駆動回路と通信し、
前記システムは：
前記アクチュエーター駆動回路と通信する少なくとも一つの中央処理装置（ＣＰＵ）と、
前記少なくとも一つのＣＰＵと通信するメモリーであり、前記少なくとも一つのＣＰＵによって実行可能であって前記少なくとも一つのＣＰＵに以下のステップを実行させるプログラムコードを含んでいるメモリーと、を含み、
前記ステップは、
前記ロボットデバイスに対する所望の動作コマンドが、前記ｎ個の駆動された関節のうち少なくとも一つが対応する関節移動限界の違反を生じるかを判断するステップと；
前記ロボットデバイスの現在の状態および前記所望の動作コマンドを使用して、前記ロボットデバイスに対する修正動作コマンドを再構築するステップであり、
前記修正動作コマンドは、前記ｎ個の駆動された関節のうち少なくとも一つの関節移動限界の違反を防ぎ、
前記修正動作コマンドは、前記所望の動作コマンドと同一ではなく、前記アクチュエーター駆動回路に送られると前記ｎ個の関節の少なくとも一部分の移動を生じさせる、
ステップと；
前記所望の動作コマンドの代わりに前記修正動作コマンドを使用して、前記ロボットデバイスの対応する移動を生じさせるように前記アクチュエーター駆動回路をコントロールするステップと、を含む、
ことを特徴とするシステム。
【請求項７】
前記ロボットデバイスに対する前記修正動作コマンドを再構築するステップは、さらに、
前記関節のそれぞれの移動を重み付けるために重み付け係数を使用するステップ、を含む、
請求項６に記載のシステム。
【請求項８】
前記所望の動作コマンドは、前記ｎ個の関節のうちＮ個についてそれぞれの関節移動限界に対する違反を生じ、
前記ロボットデバイスに対する前記修正動作コマンドを再構築するステップは、以下の式を解くステップ、を含み、
【数１７】
2014508657.tif 000087
ここで、
［外６９］
2014508657.tif 000088
は現在制限されていない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、
［外７０］
2014508657.tif 000089
はＪｍｏｄの転置行列であり、Ｗは前記重み付け係数を含むｍ×ｍ行列であり、そして、
［外７１］
2014508657.tif 000090
は前記エンドエフェクターに対する所望の動作コマンドである、
請求項７に記載のシステム。
【請求項９】
前記ロボットデバイスに対する前記修正動作コマンドを再構築するステップは、さらに、以下の式を解くステップ、を含み、
【数１８】
2014508657.tif 000091
ここで、
［外７２］
2014508657.tif 000092
はｎ×１の新たな関節速度コマンドであり、ｒｅ（）はＬ個の動作的に制限された各関節に対してそれぞれの既定の値を挿入して
［外７３］
2014508657.tif 000093
を生成する関数である、
請求項８に記載のシステム。
【請求項１０】
前記プログラムコードは、さらに、
以下の段階を使用して前記ｍ×（ｎ−Ｌ）の行列Ｊｍｏｄを生成するステップ、を含み、
前記段階は、
前記ロボットデバイスの現在の状態を使用して前記ロボットデバイスに対するｍ×ｎのヤコビアン行列Ｊを決定するステップであり、前記ロボットデバイスの前記現在の状態は前記ｎ個の各関節の現在の変位を含む段階と、
行列Ｊｍｏｄを生成するために前記ヤコビアン行列Ｊをする段階であり、行列Ｊｍｏｄは前記Ｌ個の動作的に制限された関節に対応する行を除いて行列Ｊにおける全ての行を含んでいる段階と、を含む、
請求項８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の構成は、一般的にロボット関節のコントロールに関する。より特定的には、本発明の実施例は、ロボットシステムにおける関節限界（ｊｏｉｎｔ  ｌｉｍｉｔ）に達するハンドリング状況に対する方法および関連のシステムを開示する。
【背景技術】
【０００２】
ロボットシステムは、ますます一般的なものになってきており、製造やリモートセンシングといった、幅広い分野における用途が見出されている。図１に示すように、ロボットシステム１０は、ベース１４に取り付けられたロボットアーム１２を含んでよく、移動可能である。アーム１２は、エンドエフェクター（ｅｎｄ−ｅｆｆｅｃｔｏｒ）１６、および、例えば離れたオペレーターの望むとおりにエンドエフェクターを移動して位置決めするための複数の関節１８を有している。それぞれの関節は、関節１８の角度位置を変化させるために、従来技術として知られるそれぞれのモーターまたはアクチュエーターを有している。エンドエフェクター１６を所望の位置および速度にさせるために各関節１８の角度および空間的位置を判断することは、この分野におけるよく知られた問題である。
【０００３】
ロボットシステム、特にシステム１０といった人間のオペレーターによってコントロールされるシステムが、しばしば経験する１つの問題は、エンドエフェクター１６の所望の速度によって、一つまたはそれ以上の関節１８がその関節限界に達してしまう状況が生じることである。その結果、ロボットアーム１２は、物理的にコマンドを満足することができない。そうした状況におけるシステム１０の典型的な対応は、コマンドを無視して何もしないことであり、一方で、おそらくオペレーターに対して所望の動作が実行できないことを伝えている。エンドエフェクター１６の移動に対するこの“全か無か（ａｌｌ  ｏｒ  ｎｏｔｈｉｎｇ）”のアプローチは、しかしながら、ユーザーにとって不満足なものになりがちである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ロボットアームの移動をコントロールするための代替的な方法および関連するシステムを提供することが、従って、望まれる。
【課題を解決するための手段】
【０００５】
一つの実施態様において、ロボットデバイスにおける複数の関節をコントロールするための方法が開示される。関節の少なくとも一部分は、それぞれの関節移動限界を有するものである。関節のタイプ（例えば、回転型、直進型、等）に基づいて、関節の移動は、回転または直進、等であり、よって、関節移動限界はそれぞれに応じて表現することができる（例えば、角度移動における限界）。大多数のロボットは、回転型関節を使用しており、関節移動は関節角に関して表現される。単純化のために、本発明を説明する目的のためには回転型関節だけが議論されるが、説明されるアルゴリズムは、あらゆるタイプの関節をあらゆる組み合わせにおいて使用するロボットメカニズムに対して適用可能であることが理解されるべきである。
【０００６】
ロボットデバイスに対する所望の動作コマンドは、それが関節限界の違反を生じさせないかを判断するために分析される。そして、ロボットデバイスにおける関節の現在の角度状態と所望の動作コマンドを使用して、ロボットデバイスに対する修正動作コマンドが構築される。修正動作コマンドは、各関節限界の全てに違反しないように構築される。修正動作コマンドは、所望の動作コマンドと同一のものではなく、ロボットデバイスによって実行されると、ロボットデバイスの移動を生じる。そして、修正動作コマンドは、所望の動作コマンドの代わりに使用され、対応するロボットデバイスの移動を生じる。
【０００７】
種々の実施例においては、修正動作コマンドを生成するために、関節のそれぞれの移動を重み付けする重み付け係数が使用される。特に、ロボットデバイスがｎ個の関節を含む望ましい実施例において、ロボットはｍ次元の作業空間において動作する。そこでは、所望の動作コマンドによりｎ個の関節のうちＬ個の関節がそれぞれの関節限界に違反し、ロボットデバイスのための修正関節動作コマンドが以下の式に従って構築される。
【数１】
2014508657.tif 000003
【数２】
2014508657.tif 000004
ここで、
［外１］
2014508657.tif 000005
は現在は限界でない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、
［外２］
2014508657.tif 000006
はｎ×１の新たな関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、
［外３］
2014508657.tif 000007
はＪｍｏｄの転置行列であり、Ｗは重み付け係数を含むｍ×ｍ行列であり、
［外４］
2014508657.tif 000008
はロボットツール速度に対する所望の動作コマンドである。
【０００８】
Ｊｍｏｄは、ロボットデバイスの現在の関節角度状態情報を使用して、ロボットデバイスに対するｍ×ｎのヤコビアン（Ｊａｃｏｂｉａｎ）行列Ｊを決定することによって構築され得る。そして、行列Ｊｍｏｄを生成するためにヤコビアン行列Ｊを使用する。Ｊｍｏｄは、Ｌ個の関節に対応する行（ｃｏｌｕｍｎ）を除いてＪの全ての行を含んでいる。新たな関節速度コマンド、
［外５］
2014508657.tif 000009
、は、再構築関数ｒｅ（）を介して
［外６］
2014508657.tif 000010
から再構築される。この関数は、動作的に限界にあるそれの関節の代わりに、単純にゼロを用いるものである。そして、所望の動作コマンドの代わりに新たな関節速度コマンドを使用することで、ツール速度
［外７］
2014508657.tif 000011
を結果として生じる。
【数３】
2014508657.tif 000012
ここで、
［外８］
2014508657.tif 000013
は、あらゆる関節限界に違反することなくオリジナルのコマンドであるツール速度
［外９］
2014508657.tif 000014
にできる限り近いツール速度である。そして、所定の実施例において、
［外１０］
2014508657.tif 000015
がロボットデバイスのあらゆる関節限界の違反を生じさせることはないかがチェックされる。
【０００９】
上記の方法を使用したロボットデバイスをコントロールするためのシステムも、また、開示される。
【図面の簡単な説明】
【００１０】
本発明の実施例が以降の図面を参照して説明される。類似の数字は、すべての図面を通じて同様なアイテムを表している。
【図１】図１は、ロボットアームを含むロボットシステムの斜視図である。
【図２】図２は、ロボットシステムの実施例のダイヤグラムである。
【図３】図３は、ロボットアーム位置決めアルゴリズムの実施例の論理的フローチャートである。
【図４】図４は、図３に示された論理的ブロックの詳細な論理的フローチャートである。
【図５】図５は、図４に示されたサブブロックの論理的フローチャートである。
【図６】図６は、図４に示されたサブブロックの別の論理的フローチャートである。
【発明を実施するための形態】
【００１１】
本発明の種々の実施例が、添付の図面を参照して説明される。全ての図面にわたり、類似の番号は、類似または均等なエレメントを表すために使用されている。図面は、縮尺に合ったものではなく、本発明の実施例を単に説明するためだけに提供されるものである。以降に、本発明のいくつかの実施態様が、説明のためのアプリケーション例に関して記載される。本発明の完全な理解を提供するために、数多くの特定の詳細、関係、および、方法が説明されていることが理解されるべきである。しかしながら、当業者であれば、本発明は、一つまたはそれ以上の特定の詳細部がなくても、または、他の方法によっても、実施され得ることが直ちに理解されよう。他の実施例においては、本発明をわかりにくくすることのないように、周知の構成またはオペレーティグシステムの詳細は示されていない。本発明は、示された動作またはイベントの順序に限定されない。いくつかの動作は、異なる順序において、及び／又は、他の動作またはイベントと同時に、発生し得るからである。さらに、本発明に従った方法論を実施するために、説明された全ての動作またはイベントが必要とされるものではない。単純化のために、本発明を説明する目的のためには回転型関節だけが議論されるが、説明されるアルゴリズムは、あらゆるタイプの関節をあらゆる組み合わせにおいて使用するロボットメカニズムに対して適用可能であることが理解されるべきである。
【００１２】
図１に示すように、ロボットシステム１０は、ベース１４に取り付けられたロボットアーム１２を含んでよく、移動可能である。アーム１２は、エンドエフェクター１６、および、例えば離れたオペレーターの望むとおりにエンドエフェクターを移動して位置決めするための複数の関節１８を有している。それぞれの関節は、関節１８の移動（この場合は角度）位置を変化させるために、従来技術として知られるそれぞれのモーターまたはアクチュエーターを有している。エンドエフェクター１６を所望の位置および速度にさせるためには、各関節１８の角度および空間的位置を判断することが必要である。一般的に、この問題に対する解決策は以下の式を参照して理解される。
【数４】
2014508657.tif 000016
ここで、
［外１１］
2014508657.tif 000017
はエンドエフェクター１６の速度ベクトルであり、
［外１２］
2014508657.tif 000018
は関節１８の関節速度ベクトルであり、Jは現在の状態におけるアーム１２に対するヤコビアン行列である。上記参照の式において、
［外１３］
2014508657.tif 000019
はｍ次元のベクトルである。しばしば、ｍは６であり、３つの直線成分と３つの回転成分を有している。しかしながら、ｍに係る他の値も確かに可能であることが正しく理解されよう。各関節１８の現在の角度位置は、ベクトルｑによって提供され、その時間微分は
［外１４］
2014508657.tif 000020
であり、関節１８の所望の移動である。ベクトルｑは、例えば、関節１８自身より得られたフィードバックから構築され得る。つまり、各関節１８は、関節１８の現在の移動位置を示すセンサーを含むことができる。関節１８の現在の移動位置を示すために、他の手段を備えることもできる。一般的な事項として、ヤコビアン行列Ｊはｑを使用して算出することができる。各関節１８間の機械的リンクの形状および範囲に係る長さ、そして、任意的に、エンドエフェクター１０のタイプまたは状態に応じたツールオフセット値が使用される。ヤコビアン行列Ｊは、関節１８に関する位置センサーからの入力に基づいて生成され得る。
【００１３】
図２を参照すると、ロボットシステム１００においてロボットアームの移動をコントロールするために種々の実施例を使用することができる。特に、ロボットアーム１１０のエンドエフェクター１１６の速度と位置をコントロールするために、種々の実施例の方法が使用され得る。ロボットアーム１１０は、実質的にありふれたものでよく、エンドエフェクター１１６で終了する複数の直列の接続された関節１１２を含んでいる。エンドエフェクター１１６は、クランプ、カッター、または、ロボットシステム１００に対して明らかにされた所望のタスク（ｔａｓｋ）を達成するために好適なあらゆる他のツールであってよい。各関節１１２は、関節１１２の位置（角度または他のもの）をコントロールするモーターまたはアクチュエーター１１４をそれぞれ含んでいる。典型的に、アクチュエーターは、空気圧または油圧式の駆動デバイス、ステッパーモーター、ＤＣモーター、および、業界において知られた類似のもの、を含む。以降の目的のために、“アクチュエーター”は、それぞれの関節の移動を生じるあらゆるデバイスを含むように意図されている。
【００１４】
好適な実施例において、ロボットシステム１００は、ロボットアーム１１０の種々のアクチュエーター１１４、および、エンドエフェクター１１６をコントロールするコントロール回路１２０を含んでいる。このコントロール回路１２０は、メモリー１３０と通信できる一つまたはそれ以上の中央処理装置（ＣＰＵ）を含んでいる。以降の目的のために一つのＣＰＵ１４０が考えられているが、ここにおいて説明される機能性を提供するためには、従来技術として知られるように、複数のＣＰＵ１４０を使用することができることが正しく理解されるであろう。加えて、用語“ＣＰＵ”は、データ処理能力を有するあらゆるタイプの回路を含むように意図されている。メモリー１３０は、ＣＰＵ１４０によって実行可能なプログラムコード１３２を保管しており、アクチュエーター駆動回路１５０に対してコマンドを送付することを含んでおり、以下に説明される種々のステップをＣＰＵ１４０に実行させる。メモリー１３０および関連するプログラムコード１３２は、例えば、マイクロコードと同様に、揮発性メモリーまたは不揮発性メモリーの中に保持された機械で読み取り可能または翻訳可能なコードを含み得る。アクチュエーター駆動回路１５０およびＣＰＵ１４０はお互いに通信することができ、ＣＰＵ１４０がアクチュエーター１１４をコントロールするようにさせる、ＣＰＵ１４０からのコマンドを受け容れる。
【００１５】
アクチュエーター駆動回路１５０は、コマンドに応じた方法で、関節１１２に対する各アクチュエーター１１４をコントロールすることによって、それぞれの関節１１２の速度および角度位置を設定する。アクチュエーター駆動回路１５０は、ありふれたものであってよい。この説明目的のために、単一の論理的ユニットとして扱われているが、アクチュエーター駆動回路１５０は、実際にはロボットシステム１００にわたって分散されてもよい。例えば、アクチュエーター駆動回路の一部分がそれぞれのアクチュエーター１１４の近くに存在し得る。同様に、以降の目的のために、コントロール回路１２０は、ユニットとして供にバンドルされ、望ましくはロボットシステム１００のボディの中に配置される。しかしながら、コントロール回路１２０の種々の態様が広まり得ることが正しく理解されよう。例えば、アクチュエーター駆動回路１５０は、ロボットシステム１００のシャシー（ｃｈａｓｓｉｓ）に中に配置され、ネットワークハードウェアに接続されてもよい。一方、メモリー１３０とＣＰＵ１４０は、ベースステーションといった、アクチュエーター駆動回路１５０からの遠位にあり、従来技術として知られるように、ネットワークハードウェアを介してロボットシステム１００の残余部分を離れてコントロールしている。従って、図２は、最小限の構成のみを説明したものであり、種々のユニット１１０、１３０、１４０、および、１５０の実際の物理的な配置を制限するものではないように理解されるべきである。
【００１６】
プログラムコード１３２は、図３から図６で説明される論理的オペレーションを実施するようにＣＰＵ１４０によって実行可能なステップを含んでいる。加えて、メモリー１３０は、以降に説明される種々の論理的オペレーションを実行するためにプログラムコード１３２によって使用されるデータを含んでいる。例えば、データ１３４は、関節１１２間のリンクの長さに関する情報を含み、現在の関節１１２の角度位置ｑを保管し、エンドエフェクター１１６に関する情報を含む、といったことができる。従って、データ１３４は、ロボットアーム１１０に対するヤコビアン行列Ｊを構築するための十分な情報を含んでいることが理解されよう。特に図３を参照すると、プログラムコード１３２によって提供される論理フロー１０００とデータ１３４が示されている。特に、第１の論理システム２００は、システム１０００に対するヤコビアン行列を定め、関節１２２の移動のインテリジェント（ｉｎｔｅｌｌｉｇｅｎｔ）な限界を取り扱う。第２の論理システム３００は、肩の特異性ハンドラーであり、入力データとして第１のブロック２００からの出力を受け入れて、従来技術として知られるように、関節の特異性が生じることを防いでいる。第３の論理システム４００は、作業空間速度と加速度リミッターである。第３の論理システム４００は、入力として第２の論理システム３００からの出力を受け入れて、それぞれの限界が超えられないことを保証するために、各関節１１２の速度と加速度をコントロールする。このことは、従来技術として知られた従来の方法で実行され得る。実施例として、これを実行する簡単な方法は、所望の関節速度コマンドを以前の関節速度と比較して、結果として生じる関節加速度を算出することである。
【数５】
2014508657.tif 000021
ここで
［外１５］
2014508657.tif 000022
は関節ｉの加速度であり、新たな所望の関節速度
［外１６］
2014508657.tif 000023
を実行する場合、
［外１７］
2014508657.tif 000024
は以前の時間ステップにおける関節ｉの加速度であり、そして、Δｔは速度コマンド間の時間である。もし、
［外１８］
2014508657.tif 000025
または
［外１９］
2014508657.tif 000026
が関節ｉの加速度限界を超えている場合には、許される速度（または加速度）に対する所望の速度（または加速度）の比率をｒｉとする。例えば、
［外２０］
2014508657.tif 000027
＝１００ｄｅｇ／ｓであるが、関節ｉは５０ｄｅｇ／ｓでしか移動できない場合、ｒｉ＝１００／５０＝２となる。ｎ個の関節の全てを考慮した後、生じるｒｉの最大値をｒｍａｘとする。すると、モーターに送付される関節速度コマンド、
［外２１］
2014508657.tif 000028
は、以下のように算出される。
【数６】
2014508657.tif 000029
【００１７】
そして、第３の論理システム４００の出力は、ロボットアーム１１０をコントロールするために、入力としてアクチュエーター駆動回路１５０に提供される。これらの論理システム２００、３００、および、４００のそれぞれは、ロボットシステム１００の全体機能をコントロールするプログラムコード１３２の中のサブルーチン（ｓｕｂｒｏｕｔｉｎｅ）として考えることができる。論理システム３００と４００はありふれたものなので、以降においてさらなる説明は提供されない。
【００１８】
図４は、論理システム２００の詳細なロジックダイヤグラムである。第１のステップとして、論理システム２００は、ヤコビアン行列ジェネレーター２１０を含んでいる。ヤコビアン行列ジェネレーター２１０は、システムのロボットアームに対するヤコビアン行列Ｊ２１１を生成する。行列Ｊ２１１は、ｍ×ｎ行列であり、“ｎ”は関節１１２の数量であって、“ｍ”はロボットのエンドエフェクター１１６の自由度の数、つまり、ロボットツール作業空間の次元、である。以降の開示においては、実施例として６次元の速度ベクトルが説明される。３次元の直線成分と３次元の角度成分を有するものである。しかしながら、ここにおいて説明されるシステムおよび方法は、任意の次元について容易に一般化され得ることが理解されるべきである。ヤコビアン行列ジェネレーター２１０は、ロボットアーム１１０に対するヤコビアン行列Ｊ２１１を生成するために既知の技術を使用する。入力として、各関節１１２の現在の角度位置含むｎ×１ベクトルｑ２０１、ツールオフセット値２０２、および、関節１１２間のリンク長さに関するデータ１３４の中に保管された情報、を使用している。ヤコビアン行列の公式は従来技術としてよく知られている。例えば、“Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｒｏｂｏｔｉｃｓ:Ｍｅｃｈａｎｉｃｓ  ａｎｄ  Ｃｏｎｔｒｏｌ”Ｊｏｈｎ  Ｊ.  Ｃｒａｉｇ著（１９８９年）がある。ツールオフセット値２０２は、そのときに使用されている特定のエンドエフェクター１１６に応じて変化するもので、例えば、ロボットアーム１１０の端部に取り付けられた座標系に関してエンドエフェクター１１６の終点の位置を示す３×１ベクトルであり得る。
【００１９】
入力データｑは、従来技術として知られたあらゆる技術によって生成され得る。実施例として、コントロール回路１２０は、各関節１１２のそれぞれのセンサー１１８から現在の関節角度情報を獲得することによって、関接１１２に対する角度位置ベクトルｑ２０１を生成することができる。つまり、ＣＰＵ１４０は、従来技術として知られるように、各センサー１１８をそれぞれクエリー（ｑｕｅｒｙ）することにより、関節角度情報ｑ２０１を生成し、メモリー１３０の中に保管することができる。しかしながら、センサー１１８を必要としないで、現在の関節角度情報ｑ２０１を獲得するための他の方法が存在することが正しく理解されるべきである。例えば、ＣＰＵ１４０は、ステッパーモーターが使用されるイベントにおいて、それぞれのアクチュエーター１１４によって行われたステップの数および方向の経緯を追うことができる。または、そうでなければ、アクチュエーター１１４として使用されるモーターの回転移動を追跡することができる。簡潔には、関節１１２に対する現在の移動変位情報ｑ２０１は、従来技術として知られるように、ハードウェア、ソフトウェア、または、その２つの組み合わせから獲得することができるのである。
【００２０】
第２のステップとして、ヤコビアン行列ジェネレーター２１０によるヤコビアン行列Ｊ２１１出力は、初期関節限界チェック２２０に提供される。初期関節限界チェックは、関節速度
［外２２］
2014508657.tif 000030
の初期（“ノミナル（ｎｏｍｉｎａｌ）”）推定値を定めるために、ヤコビアン行列２１１、および、ユーザーから得られた所望のエンドエフェクター１１６速度
［外２３］
2014508657.tif 000031
を使用する。Ｊが正方行列であり、かつ、可逆行列である場合には、この推定値は、ヤコビアン行列Ｊ２１１の逆行列Ｊ−１を生成する行列インバーターを使用して見出すことができる。上記Ｃｒａｉｇ（１９８９年）に記載された技術といった、既知の技術を使用するものである。この場合に、ノミナル関節速度ベクトル
［外２４］
2014508657.tif 000032
は、以下のとおりである。
【数７】
2014508657.tif 000033
【００２１】
Ｊ２１１が正方行列でない場合には、
［外２５］
2014508657.tif 000034
を算出するために他のよく知られた方法が利用可能である。方法は、上記Ｃｒａｉｇ（１９８９年）といった技術を参照して見出すことができる。
【００２２】
入力ベクトル
［外２６］
2014508657.tif 000035
は、ロボットシステムのオペレーターによって示されたように、エンドエフェクター１１６に対する所望の動作コマンドを表しており、かつ、ｑ２０１およびツールオフセット値２０２のように、ロボットアーム１１０をコントロールするためのアルゴリズムへの入力である。例えば、既知の入力/出力インターフェイス技術を使用して、ロボットシステム１００のオペレーターは、コントロール回路１２０に対してコマンドを送付することができ、コマンドが処理されると、オペレーター所望の移動ベクトル
［外２７］
2014508657.tif 000036
を生じる。従って、
［外２８］
2014508657.tif 000037
２０３は通常の方法で獲得することができ、同様に、
［外２９］
2014508657.tif 000038
も通常の方法で算出することができる。算出されたｎ×１ベクトル
［外３０］
2014508657.tif 000039
は、従って、関節限界が存在しない場合において、エンドエフェクター１１６に対する所望の移動
［外３１］
2014508657.tif 000040
２０３を得るために必要な従来の関節１１２の角速度を表している。
【００２３】
第４のステップとして、初期関節限界チェック２２０の一部でもあり得るが、コントロール回路１２０は、次に、ノミナル関節速度ベクトル
［外３２］
2014508657.tif 000041
によって示された関節１１２の移動が有効であるか、または、一つまたはそれ以上の関節１１２についてそれぞれの移動限界の違反を生じていないか、をチェックする。つまり、試しに、角度境界の上限と下限を、それぞれより高くまたはより低く拡張してみるのである。特に、コントロール回路１２０は、入力として
［外３３］
2014508657.tif 000042
およびｑ２０１を受け入れ、各関節１１２に対するこれらの値を使用して、関節１１２の移動限界に達しているかどうかを判断する。もし、そうであるなら、
［外３４］
2014508657.tif 000043
によって特定される所望の関節速度が、関節１１２の関節限界の違反を生じさせるかどうか、つまり、関節が、角度境界の上限を超えて、または、角度境界の下限を下回って移動するかを判断する。限界に到達し、所望の関節速度
［外３５］
2014508657.tif 000044
が、関節１１２の限界違反を生じさせる場合には、その関節１１２に対して関節動作限界フラグ２４１が設定される。角度限界に達したことを示すものである。従って、関節動作限界フラグ２４１は、“ｎ”個のコンポーネントを有し得る。それぞれ関節１１２に対して１つである。関節限界チェックは、従来技術として知られるように、従来の方法で実行されてよい。実施例として、初期関節限界２４０のロジックを説明するフローチャートが、図５に示されている。このプロセスは、完全な動作限界ベクトル２４１を形成するために、ｎ回繰り返され得る。加えて、関節動作限界フラグ２４１のいずれかが設定された場合には、設定限界フラグ２４２が設定される。設定限界フラグは、例えば、ユーザーに対して、限界に達したことを警告するために使用され得る。
【００２４】
第５のステップとして、改良関節限界ロジック２５０は、関節動作限界フラグ２４１、オペレーター所望の移動ベクトル
［外３６］
2014508657.tif 000045
、ヤコビアン行列２１１、およびスカラー量の重み付けファクター２０４を受け入れ、修正関節速度コマンド
［外３７］
2014508657.tif 000046
２６１を生成する。
［外３８］
2014508657.tif 000047
ベクトル２６１は、ｎ×１の関節速度ベクトルであり、結果として新たな速度
［外３９］
2014508657.tif 000048
でエンドエフェクター１１６を移動させ、かつ、所望の速度ベクトル
［外４０］
2014508657.tif 000049
２０３に対する“最も近いフィット（ｃｌｏｓｅｓｔ  ｆｉｔ）”を表している。関節１１２によって達せられる動作角度限界２４１の観点でロボットアーム１１０が実際に実行することができるものである。従って、
［外４１］
2014508657.tif 000050
２０３があらゆる関節１１２についてそれぞれの限界を超えさせることがない退化した（ｄｅｇｅｎｅｒａｔｅ）条件の下では、
［外４２］
2014508657.tif 000051
２０３と
［外４３］
2014508657.tif 000052
２５１は同一のものである。
【００２５】
［外４４］
2014508657.tif 000053
を構築する詳細は、図６に示されており、インテリジェント関節リミッター２５０の実施例の詳細が説明されている。改良関節限界ロジック２５０は、第１の論理サブシステム２１０より得られた入力ヤコビアン行列Ｊ２１１から派生する行列Ｊｍｏｄを構築する。Ｊｍｏｄ２５１を構築するために、ロボットアーム１１０に対してヤコビアン行列Ｊ２１１が第１に構築される。全ての関節１１２の現在の角度状態ｑ２０１とツールオフセットベクトル２０２を使用して、上述の標準的な方法によるものである。そして、関節１１２の動作限界フラグ２４１が設定されている場合（つまり、ＡｃｔｉｖｅＬｉｍｉｔｓｉ＝１）、その関節１１２に対する行列の行が取り除かれる。結果として、ヤコビアン行列Ｊ２１１はｍ×ｎ行列からｍ×（ｎ−１）の修正行列に変更される。修正ヤコビアン行列Ｊｍｏｄ２５１においてその限界の関節１１２が表れないようにである。もちろん、動作限界フラグ２４１によって示されるように、一つまたはそれ以上の関節１１２が限界に達し得る。Ｌを限界に達した関節の数量を示すものとすると、動作限界フラグ２４１によって示されるように、ヤコビアン行列Ｊ２１１の合計Ｌ個の行が取り除かれ、ｍ×（ｎ−Ｌ）行列の修正ヤコビアン行列Ｊｍｏｄ２５１を結果として生じる。
【００２６】
次に、重み付け係数２５２の行列（ここにおいては、重み付け行列Ｗ２５２としても参照される）が、例えば、ユーザー指定の角度重み付け係数２０４に基づいて形成される。重み付け行列Ｗ２５２は、ヤコビアン行列Ｊ２１１のように、ｍ×ｍの行列であり、”ｍ”は、エンドエフェクター１１６速度ベクトルの次元である。重み付け行列Ｗ２５２は、設定としての、異なる方向における所望の動作が一致することの相対的な重要性に対する重み付けを該して考慮している。例えば、典型的な６次元の作業空間（３つの直進次元と３つの回転次元）に対するＷ２５２の式は、以下のとおりである。角度重み付け係数２０４をａとすると、Ｗ２５２は、以下のとおりに表わされる。
【数８】
2014508657.tif 000054
【００２７】
Ｗ２５２の目的は、ユーザーに対して、コマンドされた直線速度、または、コマンドされた回転速度を一致させることがより重要であるかどうかについてガイダンスを提供することである。ユーザーは、直進速度誤差verroと角速度誤差ωerroを与えられて、実質的にスタートしており、これらの２つの誤差は、以下の場合に“等しく”重要である。
【数９】
2014508657.tif 000055
【００２８】
verrorとωerrorの単位が異なるせいで、角度重み付け係数は単位を有することに留意すべきである（例えば、
［外４５］
2014508657.tif 000056
）。上記に示した他にもＷ２５２を定式化する多くの代替方法が存在することは知っておく価値がある。なぜなら、Ｗ２５２は論理システム１０００への形成可能な入力であり、その実際の構築は、デバイス１００の製造者またはユーザーによるといった、実行される所定の実施例に望まれる特性に基づいて決定され得るからである。例えば、ある方向における速度誤差が他の方向におけるよりも重要である場合には、このことを表わすようにＷ２５２を修正することができる（例えば、上記の例における値１をより大きい又は小さい値に置き換えることによる）。
【００２９】
改良関節限界ロジック２５０は、次に、以下の式に従って、ロボットデバイスに対する修正関節動作コマンドを構築する。
【数１０】
2014508657.tif 000057
【数１１】
2014508657.tif 000058
ここで、
［外４６］
2014508657.tif 000059
２５３は現在制限されていない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、
［外４７］
2014508657.tif 000060
２５４はｎ×１の新たな関節速度コマンドであり、Ｊｍｏｄ２５１はｍ×（ｎ−Ｌ）行列であり、
［外４８］
2014508657.tif 000061
はＪｍｏｄ２５１の転置行列であり、Ｗ２５２は重み付け係数２０４を使用して生成されたｍ×ｍ行列であり、そして、
［外４９］
2014508657.tif 000062
２０３はエンドエフェクター１１６に対する所望の動作コマンドである。
【００３０】
新たな関節速度コマンド
［外５０］
2014508657.tif 000063
２５４は、再構築関数ｒｅ（）を介して
［外５１］
2014508657.tif 000064
から再構築される。この関数は、動作的に制限されているそれぞれの関節に対して単純にゼロ（０）で置き換えるものである。実施例として、６つの関節をもったロボットであり、関節２と関節４が関節限界に達し、限界を超えるのを防ぐ必要があるものと想定してみる。すると、
【数１２】
2014508657.tif 000065
上記の式が以下の
［外５２］
2014508657.tif 000066
２５３の結果を生じたものと仮定する。
【数１３】
2014508657.tif 000067
すると、
［外５３］
2014508657.tif 000068
２５４は以下のようになる。
【数１４】
2014508657.tif 000069
【００３１】
次に、オリジナルのコマンドに代えて新たな関節速度コマンド２５４を使用して、新たなエンドエフェクター速度
［外５４］
2014508657.tif 000070
を結果として得る。それは、あらゆる関節１１２の角度限界に違反することなく、オリジナルのコマンドされたツール速度
［外５５］
2014508657.tif 000071
２０３に可能な限り近いエンドエフェクター１１６速度である。
【００３２】
論理的には、
［外５６］
2014508657.tif 000072
２５４は、あらゆる関節１１２の角度限界に違反することがない、各関節１１２の移動を示している。事実上は、しかしながら、丸め誤差のようなもののために、
［外５７］
2014508657.tif 000073
２５４が、実際に、全ての関節１１２に対する関節限界の中に留まっていることを確認することが望ましい。これが、ダブルチェック（ｄｏｕｂｌｅ−ｃｈｅｃｋ）論理サブシステム２７０の機能である。従来技術として知られている、あらゆる好適な方法が
［外５８］
2014508657.tif 000074
２５４を確かめるために使用されてよい。論理サブシステム２７０の出力２７１は、典型的には単に
［外５９］
2014508657.tif 000075
２５４であるが、次に、それに従って関節１１２をコントロールするために、アクチュエーター駆動回路１５０への入力として使用され得る。もちろん、図３について上述のように、出力コマンド２７１（例えば、
［外６０］
2014508657.tif 000076
２５４）をさらに分析することが望ましい。単一性３００をチェックしたり、速度と加速度が関節能力４００以内にあることを保証するといったことである。
【００３３】
論理システム２００によって提供されるインテリジェント関節限界ハンドリングの利点は、エンドエフェクター１１６の“全か無か（ａｌｌ  ｏｒ  ｎｏｔｈｉｎｇ）”行為を避けられることである。一つまたはそれ以上の関節１１２限界に達し、ユーザーから提供された所望の動作コマンド
［外６１］
2014508657.tif 000077
２０３をエンドエフェクター１１６が超えるとしても、エンドエフェクター１１６は、単純には停止しない。むしろ、エンドエフェクター１１６は、所望のコマンド
［外６２］
2014508657.tif 000078
２０３に最も近似している方向において移動を続けようとする。従って、エンドエフェクター１１６は、概してユーザーの所望のゴールに向かう移動を続ける。つまり、修正関節動作コマンド２５４がロボットシステム１００によって後に実行されると、さらに、所望の動作コマンド
［外６３］
2014508657.tif 000079
２０３に可能な限り近いロボットアーム１１０の移動を生じさせる。単にアーム１１０を完全に凍結または停止するのではなく、むしろ、アーム１１０における少なくとも一つのアクチュエーター１１４の実際の動作を、また、生じさせる。移動の“近さ（ｃｌｏｓｅｎｅｓｓ）”は、重み付け行列Ｗ２５２を使用して、ユーザー、製造者、または、両者によって設定され得る。従って、論理システム２００は、高度に変更可能であり、デバイス、手元の作業、ユーザー、および、それらの組み合わせの要求に適合することができる。
【図１】
2014508657.tif 000097
【図２】
2014508657.tif 000098
【図３】
2014508657.tif 000099
【図４】
2014508657.tif 000100
【図５】
2014508657.tif 000101
【図６】
2014508657.tif 000102
【手続補正書】
【提出日】平成25年9月20日(2013.9.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ロボットデバイスにおける複数の関節をコントロールする方法であって、
前記関節の少なくとも一部は、それぞれの関節移動限界を有し、
前記方法は：
前記ロボットデバイスに対する所望の動作コマンドが、前記ロボットデバイスの少なくとも一つの第１の関節移動限界の違反を生じるかを判断する段階と；
前記ロボットデバイスの現在の状態および前記所望の動作コマンドを使用して、前記ロボットデバイスに対する修正動作コマンドを再構築する段階であり、
前記修正動作コマンドは、前記少なくとも一つの第１の関節移動限界の違反を防ぎ、
前記修正動作コマンドは、前記所望の動作コマンドと同一ではなく、前記ロボットデバイスによって処理されると前記ロボットデバイスの移動を生じさせる、
段階と；
前記所望の動作コマンドの代わりに前記修正動作コマンドを使用して、前記ロボットデバイスの対応する移動を生じさせる段階と、を有し、
前記ロボットデバイスは、前記ロボットデバイスのエンドエフェクターに係るｍ次元作業空間に対するｎ個の関節を含み、
前記所望の動作コマンドは、前記ｎ個の関節のうちＮ個についてそれぞれの関節移動限界に対する違反を生じ、
前記ロボットデバイスに対する前記修正動作コマンドを再構築する段階は、以下の式を解く段階、を含み、
【数１】
2014508657.tif 000103
ここで、
［外１］
2014508657.tif 000104
は現在制限されていない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、
［外２］
2014508657.tif 000105
はＪｍｏｄの転置行列であり、Ｗは前記重み付け係数を含むｍ×ｍ行列であり、そして、
［外３］
2014508657.tif 000106
は前記エンドエフェクターに対する所望の動作コマンドである、
ことを特徴とする方法。
【請求項２】
前記ロボットデバイスに対する前記修正動作コマンドを再構築する段階は、さらに、以下の式を解く段階、を含み、
【数２】
2014508657.tif 000107
ここで、
［外４］
2014508657.tif 000108
はｎ×１の新たな関節速度コマンドであり、ｒｅ（）はＬ個の動作的に制限された各関節に対してそれぞれの既定の値を挿入して
［外５］
2014508657.tif 000109
を生成する関数である、
請求項１に記載の方法。
【請求項３】
前記方法は、さらに、
以下のステップを使用して前記ｍ×（ｎ−Ｌ）の行列Ｊｍｏｄを生成する段階、を含み、
前記ステップは、
前記ロボットデバイスの現在の状態を使用して前記ロボットデバイスに対するｍ×ｎのヤコビアン行列Ｊを決定するステップであり、前記ロボットデバイスの前記現在の状態は前記ｎ個の各関節の現在の変位を含むステップと、
行列Ｊｍｏｄを生成するために前記ヤコビアン行列Ｊをするステップであり、行列Ｊｍｏｄは前記Ｌ個の動作的に制限された関節に対応する行を除いて行列Ｊにおける全ての行を含んでいるステップと、を含む、
請求項１に記載の方法。
【請求項４】
ロボットデバイスをコントロールするシステムであって、
前記ロボットデバイスは、ｍ次元作業空間において動作するエンドエフェクターを移動する関節を含み、
前記ロボットデバイスは、ｎ個のアクチュエーターによって駆動され、
前記システムは、前記アクチュエーターをコントロールするために、アクチュエーター駆動回路と通信し、
前記システムは：
前記アクチュエーター駆動回路と通信する少なくとも一つの中央処理装置（ＣＰＵ）と、
前記少なくとも一つのＣＰＵと通信するメモリーであり、前記少なくとも一つのＣＰＵによって実行可能であって前記少なくとも一つのＣＰＵに以下のステップを実行させるプログラムコードを含んでいるメモリーと、を含み、
前記ステップは、
前記ロボットデバイスに対する所望の動作コマンドが、前記ｎ個の駆動された関節のうち少なくとも一つが対応する関節移動限界の違反を生じるかを判断するステップと；
前記ロボットデバイスの現在の状態および前記所望の動作コマンドを使用して、前記ロボットデバイスに対する修正動作コマンドを再構築するステップであり、
前記修正動作コマンドは、前記ｎ個の駆動された関節のうち少なくとも一つの関節移動限界の違反を防ぎ、
前記修正動作コマンドは、前記所望の動作コマンドと同一ではなく、前記アクチュエーター駆動回路に送られると前記ｎ個の関節の少なくとも一部分の移動を生じさせる、
ステップと；
前記所望の動作コマンドの代わりに前記修正動作コマンドを使用して、前記ロボットデバイスの対応する移動を生じさせるように前記アクチュエーター駆動回路をコントロールするステップと、を含み、
前記所望の動作コマンドは、前記ｎ個の関節のうちＮ個についてそれぞれの関節移動限界に対する違反を生じ、
前記ロボットデバイスに対する前記修正動作コマンドを再構築するステップは、以下の式を解くステップ、を含み、
【数３】
2014508657.tif 000110
ここで、
［外６］
2014508657.tif 000111
は現在制限されていない関節に対する（ｎ−Ｌ）×１の関節速度コマンドであり、Ｊｍｏｄはｍ×（ｎ−Ｌ）行列であり、
［外７］
2014508657.tif 000112
はＪｍｏｄの転置行列であり、Ｗは前記重み付け係数を含むｍ×ｍ行列であり、そして、
［外８］
2014508657.tif 000113
は前記エンドエフェクターに対する所望の動作コマンドである、
ことを特徴とするシステム。
【請求項５】
前記ロボットデバイスに対する前記修正動作コマンドを再構築するステップは、さらに、以下の式を解くステップ、を含み、
【数４】
2014508657.tif 000114
ここで、
［外９］
2014508657.tif 000115
はｎ×１の新たな関節速度コマンドであり、ｒｅ（）はＬ個の動作的に制限された各関節に対してそれぞれの既定の値を挿入して
［外１０］
2014508657.tif 000116
を生成する関数である、
請求項４に記載のシステム。
【請求項６】
前記プログラムコードは、さらに、
以下の段階を使用して前記ｍ×（ｎ−Ｌ）の行列Ｊｍｏｄを生成するステップ、を含み、
前記段階は、
前記ロボットデバイスの現在の状態を使用して前記ロボットデバイスに対するｍ×ｎのヤコビアン行列Ｊを決定するステップであり、前記ロボットデバイスの前記現在の状態は前記ｎ個の各関節の現在の変位を含む段階と、
行列Ｊｍｏｄを生成するために前記ヤコビアン行列Ｊをする段階であり、行列Ｊｍｏｄは前記Ｌ個の動作的に制限された関節に対応する行を除いて行列Ｊにおける全ての行を含んでいる段階と、を含む、
請求項４に記載のシステム。
【国際調査報告】
2014508657.tif 000117
2014508657.tif 000118
2014508657.tif 000119