(57)【特許請求の範囲】
【請求項１】
アームと、
前記アームを動作させる制御部と、
前記アームに作用する外力を検出する力検出部と、
を含み、
前記制御部は、
前記アームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、
ロボット。
【請求項２】
請求項１に記載のロボットであって、
前記パラメーター値は、前記コンプライアントモーション制御による前記第１物体の移動量である、
ロボット。
【請求項３】
請求項２に記載のロボットであって、
前記制御部は、
算出した前記指標となる量によって補正された前記移動量を算出する、
ロボット。
【請求項４】
請求項１に記載のロボットであって、
前記パラメーター値は、前記コンプライアントモーション制御の制御変数である、
ロボット。
【請求項５】
請求項４に記載のロボットであって、
前記制御部は、
算出した前記指標となる量によって前記制御変数を補正し、補正した前記制御変数に基づく前記コンプライアントモーション制御による前記第１物体の移動量を算出する、
ロボット。
【請求項６】
請求項１から５のうちいずれか一項に記載のロボットであって、
前記制御部は、前記コンプライアントモーション制御のうちインピーダンス制御のパラメーター値を変更する、
ロボット。
【請求項７】
アームと、前記アームに作用する外力を検出する力検出部とを備えるロボットと、
前記アームを動作させる制御装置と、
を含み、
前記制御装置は、
前記アームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、
ロボットシステム。
【請求項８】
ロボットのアームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記ロボットが備える力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、
制御装置。
【請求項９】
ロボットのアームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記ロボットが備える力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ロボット、ロボットシステム、制御装置、及び制御方法に関する。
【背景技術】
【０００２】
力センサーからの出力値に基づいたコンプライアントモーション制御（力制御）によるロボットの制御方法が研究・開発されている。
【０００３】
これに関し、力センサーからの出力値に基づいてロボットが他の物体と干渉（すなわち、接触）しているか否かを判定し、その判定結果に応じて特許文献１で言われている位置制御と力制御を使い分けるロボットの制御装置や調整装置が知られている（特許文献１、２参照）。
【０００４】
また、受け付けられたジョグ操作等に基づいてロボットが把持している物体を他の物体に接触させながらインピーダンス制御の制御変数を決定する組み込み知能コントローラーが知られている（特許文献３参照）。このコントローラーは、ジョグ操作等によるロボットの動きに応じてインピーダンス制御の制御変数を決定するため、ユーザーの教示作業を簡略化し、利便性を向上させることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１４２９０９号公報
【特許文献２】特開２０１１−８８２２５号公報
【特許文献３】特開２０１４−６５６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の制御装置は、所定値に対する力センサーからの出力値の大小に応じて位置制御と力制御を切り替えるため、この切り替えに係る制御が複雑化してしまうという問題があった。また、ロボットに加わる力の大きさは、ロボットが把持している物体と他の物体との接触状態の変化に応じて変化する。しかし、この制御装置は、ロボットが把持している物体と他の物体との接触状態の変化に応じて、ロボット２０が把持する物体の剛性を変化させることができなかった。これらにより、この制御装置は、良好な組み立て作業を実施することが困難であった。
【０００７】
また、特許文献２の調整装置は、位置制御と力制御の切り替えを判断するニューラルネットワークの学習を必要とし、ユーザーに煩雑な教示作業を強いるという問題があった。
【０００８】
また、特許文献３のコントローラーは、ロボットに作業を行わせる前に決定した制御変数を作業中に、力センサーからの出力値に応じて変化させることができないため、特許文献１の制御装置と同様に、ロボットが把持している物体と他の物体との相対的な位置及び姿勢の変化に応じて、ロボット２０が把持する物体の剛性を変化させることができず、良好な組み立て作業を実施することが困難であった。
【０００９】
そこで本発明は、上記従来技術の問題に鑑みてなされたものであり、物体間の接触状態の変化に応じたコンプライアントモーション制御を行うことができるロボット、ロボットシステム、制御装置、及び制御方法を提供する。
【課題を解決するための手段】
【００１０】
本発明の一態様は、アームと、前記アームを動作させる制御部と、を含み、前記制御部は、前記アームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する、ロボットである。
この構成により、ロボットは、アームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットは、物体間の接触状態の変化に応じたコンプライアントモーション制御を行うことができる。
【００１１】
また、本発明の他の態様は、ロボットにおいて、前記制御部は、前記第２物体との前記相対位置姿勢に基づく前記第１物体の移動可能な範囲に応じて前記パラメーター値を変更する、構成が用いられてもよい。
この構成により、ロボットは、第２物体との相対位置姿勢に基づく第１物体の移動可能な範囲に応じてコンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットは、第１物体と第２物体が接触していない場合においても、相対位置姿勢に応じてコンプライアントモーション制御のパラメーター値を変更することができる。
【００１２】
また、本発明の他の態様は、ロボットにおいて、前記制御部は、前記移動可能な範囲に基づいて、前記第１物体と前記第２物体の相対位置姿勢に応じた前記第１物体の動かし難さ又は動かし易さの指標となる量を算出し、算出された前記指標となる量に基づいて前記パラメーター値を変更する、構成が用いられてもよい。
この構成により、ロボットは、第２物体との相対位置姿勢による第１物体の移動可能な範囲に基づいて、第１物体と第２物体の相対位置姿勢に応じた第１物体の動かし難さ又は動かし易さの指標となる量を算出し、算出された指標となる量に基づいてコンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットは、把持している物体が動かし難い場合、その物体の剛性を小さくし、把持している物体を動かし易い場合、その物体の剛性を大きくするように調整することができる。
【００１３】
また、本発明の他の態様は、ロボットにおいて、前記制御部は、前記コンプライアントモーション制御のうちインピーダンス制御のパラメーター値を変更する、構成が用いられてもよい。
この構成により、ロボットは、コンプライアントモーション制御のうちインピーダンス制御のパラメーター値を変更する。これにより、ロボットは、第１物体と第２物体の相対位置姿勢に応じてインピーダンス制御のパラメーター値を変更することで、ロボットが把持する物体の剛性を調整することができる。
【００１４】
また、本発明の他の態様は、アームを備えるロボットと、前記アームを動作させる制御装置と、を含み、前記制御装置は、前記アームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する、ロボットシステムである。
この構成により、ロボットシステムは、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットシステムは、物体間の相対的な位置及び姿勢に応じたコンプライアントモーション制御を行うことができる。
【００１５】
また、本発明の他の態様は、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する、制御装置である。
この構成により、制御装置は、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する。これにより、制御装置は、物体間の相対的な位置及び姿勢に応じたコンプライアントモーション制御を行うことができる。
【００１６】
また、本発明の他の態様は、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する、制御方法である。
この構成により、制御方法は、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する。これにより、制御方法は、物体間の相対的な位置及び姿勢に応じたコンプライアントモーション制御を行うことができる。
また、本発明の他の態様は、アームと、前記アームを動作させる制御部と、前記アームに作用する外力を検出する力検出部と、を含み、前記制御部は、前記アームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、ロボットである。
また、本発明の他の態様は、ロボットにおいて、前記パラメーター値は、前記コンプライアントモーション制御による前記第１物体の移動量である、構成が用いられてもよい。
また、本発明の他の態様は、ロボットにおいて、前記制御部は、算出した前記指標となる量によって補正された前記移動量を算出する、構成が用いられてもよい。
また、本発明の他の態様は、ロボットにおいて、前記パラメーター値は、前記コンプライアントモーション制御の制御変数である、構成が用いられてもよい。
また、本発明の他の態様は、ロボットにおいて、前記制御部は、算出した前記指標となる量によって前記制御変数を補正し、補正した前記制御変数に基づく前記コンプライアントモーション制御による前記第１物体の移動量を算出する、構成が用いられてもよい。
また、本発明の他の態様は、アームと、前記アームに作用する外力を検出する力検出部とを備えるロボットと、前記アームを動作させる制御装置と、を含み、前記制御装置は、前記アームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、ロボットシステムである。
また、本発明の他の態様は、ロボットのアームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記ロボットが備える力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、制御装置である。
また、本発明の他の態様は、ロボットのアームとともに動く第１物体と第２物体との相対位置姿勢に基づく前記第１物体の移動可能な範囲の広さを表す量を、前記第１物体の動かし難さ又は動かし易さの指標となる量として算出し、算出された前記指標となる量に基づいて、前記ロボットが備える力検出部により検出された外力に基づくコンプライアントモーション制御のパラメーター値を変更する、制御方法である。
【００１７】
以上により、ロボット、ロボットシステム、制御装置、及び制御方法は、ロボットのアームとともに動く第１物体と、第２物体との相対位置姿勢に応じて、コンプライアントモーション制御のパラメーター値を変更する。これにより、ロボット、ロボットシステム、制御装置、及び制御方法は、物体間の相対的な位置及び姿勢に応じたコンプライアントモーション制御を行うことができる。
【図面の簡単な説明】
【００１８】
【図１】第１実施形態に係るロボットシステム１の一例を示す構成図である。
【図２】組付対象Ｏを含む二次元平面に沿ってロボット２０が操作対象Ｎを移動させて組付対象Ｏに組み付ける様子の一例を示す図である。
【図３】制御装置３０のハードウェア構成の一例を示す図である。
【図４】制御装置３０の機能構成の一例を示す図である。
【図５】制御装置３０が操作対象Ｎの可動領域を算出し、所定の作業を行うまでの処理の流れの一例を示すフローチャートである。
【図６】図５に示したステップＳ１００の可動領域算出処理における並進可動領域算出処理の流れの一例を示すフローチャートである。
【図７】図５に示したステップＳ１００の可動領域算出処理における回転可動領域算出処理の流れの一例を示すフローチャートである。
【図８】ステップＳ１００で選択された座標が示す仮想空間の点に配置された操作対象Ｎの一例を示す図である。
【図９】図５に示したステップＳ１１０のポテンシャル算出処理の流れの一例を示すフローチャートである。
【図１０】このようにして算出された並進ポテンシャルの一例を表すグラフ及び回転ポテンシャルの一例を表すグラフをそれぞれ示す図である。
【図１１】平滑化処理部３９により生成された滑らかな回転ポテンシャルの一例を表すグラフを示す図である。
【図１２】図５に示したステップＳ１３０のロボット制御処理の流れの一例を示すフローチャートである。
【図１３】可動領域算出部３７ａによる並進可動領域算出処理の流れの一例を示すフローチャートである。
【図１４】可動領域算出部３７ａによる回転可動領域算出処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
＜第１実施形態＞
以下、本発明の第１実施形態について、図面を参照して説明する。図１は、第１実施形態に係るロボットシステム１の一例を示す構成図である。ロボットシステム１は、ロボット２０と、制御装置３０を具備する。
【００２０】
ロボットシステム１は、ロボット２０が把持している物体と、他の物体との相対的な位置及び姿勢に基づいてコンプライアントモーション制御の制御変数を変化させながらロボット２０に作業を行わせる。ロボットシステム１は、このような作業の一例として、ロボット２０が把持している物体を他の物体に組み付ける組み付け作業をロボット２０に行わせる。以下では、説明の便宜上、ロボット２０が把持している物体を操作対象Ｎと称し、他の物体を組付対象Ｏと称して説明する。なお、操作対象Ｎは、第１物体の一例であり、組付対象Ｏは、第２物体の一例であり、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢は、相対位置姿勢の一例である。また、制御変数は、パラメーター値の一例である。
【００２１】
また、前述の他の物体は、操作対象Ｎが組み付けられる組付対象Ｏに代えて、操作対象Ｎを移動させる際に障害となる物体や、何らかの治具、壁面、作業台等の位置及び姿勢がロボット２０の座標原点の位置及び姿勢に対して変化しないように設置された物体であれば如何なる物体であってもよい。なお、ロボット２０の座標原点とは、例えば、ロボット２０の支持台の重心の位置及び姿勢等であるが、ロボット２０の他の部位の位置及び姿勢等であってもよい。以下では、この組み付け作業を所定の作業と称し、ロボットシステム１がロボット２０に所定の作業を行わせる場合について説明する。
【００２２】
図１において、組付対象Ｏは治具Ｆに支持されているが、この構成に代えて、テーブルや何らかの台等に設置される構成であってもよい。その場合、組付対象Ｏの位置及び姿勢は、ロボット２０の座標原点の位置及び姿勢に対して変化しないように設置されるとする。また、操作対象Ｎは、ロボット２０により把持される物体に代えて、ロボット２０のエンドエフェクターＥＮＤの所定部位やマニピュレーターＭＮＰの所定部位等であってもよい。
【００２３】
図１において点線で示した物体ＶＮは、組付対象Ｏに組み付けられた状態の操作対象Ｎを示している。操作対象Ｎを組付対象Ｏに組み付けるようにロボット２０を制御する際、ロボットシステム１は、前述したようにコンプライアントモーション制御によってロボット２０を制御する。また、ロボットシステム１は、コンプライアントモーション制御における制御変数を、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に応じて変化させる。以下では、コンプライアントモーション制御の一例として、ロボットシステム１がインピーダンス制御によってロボット２０を制御する場合について説明する。
【００２４】
ここで、操作対象Ｎの位置及び姿勢は、例えば、操作対象Ｎの重心の位置及び姿勢によって表されるが、これに代えて、操作対象Ｎとともに動く他の何らかの点の位置及び姿勢等によって表されてもよい。また、組付対象Ｏの位置及び姿勢は、例えば、組付対象Ｏの重心の位置及び姿勢によって表されるが、これに代えて、組付対象Ｏとともに固定される他の何らかの点の位置及び姿勢等によって表されてもよい。
【００２５】
ロボット２０は、例えば、物体（この一例では、操作対象Ｎ）を把持可能な爪部を備えるエンドエフェクターＥＮＤと、マニピュレーターＭＮＰと、力センサー２１と、図示しない複数のアクチュエーターを備えた単腕のロボットである。単腕のロボットとは、エンドエフェクターＥＮＤとマニピュレーターＭＮＰ（又は、マニピュレーターＭＮＰのみ）により構成される１本の腕を有するロボットを示す。
【００２６】
なお、ロボット２０は、単腕のロボットである構成に代えて、スカラロボット（水平多関節ロボット）や双腕のロボット等であってもよい。スカラロボットとは、マニピュレーターが水平方向にのみ動き、マニピュレーターの先端のスライド軸のみが上下に動くロボットである。また、双腕のロボットとは、エンドエフェクターＥＮＤとマニピュレーターＭＮＰ（又は、マニピュレーターＭＮＰのみ）によりそれぞれ構成される２本の腕を有するロボットを示す。
【００２７】
ロボット２０の腕は、６軸垂直多関節型となっており、支持台とマニピュレーターＭＮＰとエンドエフェクターＥＮＤとがアクチュエーターによる連携した動作よって６軸の自由度の動作を行うことができる。なお、ロボット２０の腕は、５自由度（５軸）以下で動作するものであってもよく、７自由度（７軸）以上で動作するものであってもよい。以下では、エンドエフェクターＥＮＤ及びマニピュレーターＭＮＰを備えた腕によって行われるロボット２０の動作について説明する。
【００２８】
力センサー２１は、ロボット２０のエンドエフェクターＥＮＤとマニピュレーターＭＮＰとの間に備えられており、エンドエフェクターＥＮＤ（あるいは、エンドエフェクターＥＮＤに把持された操作対象Ｎ）に作用した力やモーメントを検出する。力センサー２１は、検出した力やモーメントを示す情報（以下、力センサー情報と称する）を、通信により制御装置３０へ出力する。力センサー２１により検出された力センサー情報は、例えば、制御装置３０によるロボット２０のインピーダンス制御に用いられる。なお、この力センサー情報は、他の処理に用いられてもよい。
【００２９】
ロボット２０は、例えばケーブルによって制御装置３０と通信可能に接続されている。ケーブルを介した有線通信は、例えば、イーサネット（登録商標）やＵＳＢ（Universal  Serial  Bus）等の規格によって行われる。なお、ロボット２０と制御装置３０とは、Ｗｉ−Ｆｉ（登録商標）等の通信規格により行われる無線通信によって接続されてもよい。なお、ロボット２０は、図１に示したようにロボット２０の外部に設置された制御装置３０と接続される構成とするが、この構成に代えて、制御装置３０がロボット２０に内蔵される構成であってもよい。
【００３０】
ロボット２０は、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢と、力センサー２１により検出された力センサー情報とに基づいた制御信号を制御装置３０から取得し、取得した制御信号に基づいて所定の作業を行う。以下では、説明の便宜上、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢を、単に相対位置姿勢と称して説明する。
【００３１】
制御装置３０は、予め記憶された組付対象Ｏの位置及び姿勢と、予め記憶された組付対象Ｏを含む作業領域を示す情報とに基づいてインピーダンス制御の制御変数を算出する。組付対象Ｏを含む作業領域とは、例えば、操作対象Ｎを組付対象Ｏに組み付けるために操作対象Ｎの重心が通過する経路を含む平面又は空間の一部又は全部の範囲を示す。以下では、説明の便宜上、組付対象Ｏを含む作業領域を、単に作業領域と称して説明する。また、作業領域を示す情報とは、例えば、作業領域が長方形状の平面であった場合、その長方形の各頂点を示す座標の組み合わせ等である。
【００３２】
また、制御装置３０は、ロボット２０の力センサー２１から力センサー情報を取得する。制御装置３０は、算出されたインピーダンス制御の制御変数と、取得された力センサー情報とに基づくインピーダンス制御によって、ロボット２０に所定の作業（すなわち、操作対象Ｎを組付対象Ｏに組み付ける組み付け作業）を行わせる。
【００３３】
なお、以下では、説明を簡略化するため、制御装置３０からの制御信号に基づいてロボット２０が操作対象Ｎを組付対象Ｏに組み付ける際、図２に示すように組付対象Ｏを含む二次元平面（ｘｙ平面）に沿ってのみロボット２０が操作対象Ｎを移動させる場合について説明するが、これに代えて、ロボット２０が操作対象Ｎを三次元空間を移動させて組付対象Ｏに組み付ける構成であってもよい。
【００３４】
図２は、組付対象Ｏを含む二次元平面に沿ってロボット２０が操作対象Ｎを移動させて組付対象Ｏに組み付ける様子の一例を示す図である。図２に示したｘ軸及びｙ軸は、組付対象Ｏを含む二次元平面（すなわち、作業領域）上の座標軸である。より具体的には、ロボットシステム１は、例えば、エンドエフェクターＥＮＤにより把持された操作対象Ｎを、図２に示した矢印（前述の経路）に沿って組付対象Ｏに組み付けるようにロボット２０を制御する。
【００３５】
この組み付けの際、ロボットシステム１は、図２に示した座標軸により示される二次元平面に沿ってのみ操作対象Ｎが移動するようにロボット２０を制御する。なお、操作対象Ｎを移動させる経路（移動経路）は、予め制御装置３０に記憶されている構成であるとするが、これに代えて、制御装置３０がこの経路を算出する構成であってもよい。制御装置３０がこの経路を算出する場合、例えば、ロボットシステム１は、作業領域を含む範囲を撮像可能な撮像部を具備し、撮像部により撮像された撮像画像に基づいてこの経路を算出する。
【００３６】
次に、図３を参照して、制御装置３０のハードウェア構成について説明する。図３は、制御装置３０のハードウェア構成の一例を示す図である。制御装置３０は、例えば、ＣＰＵ（Central  Processing  Unit）３１と、記憶部３２と、入力受付部３３と、通信部３４を備え、通信部３４を介してロボット２０と通信を行う。これらの構成要素は、バスＢｕｓを介して相互に通信可能に接続されている。ＣＰＵ３１は、記憶部３２に格納された各種プログラムを実行する。
【００３７】
記憶部３２は、例えば、ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）、ＥＥＰＲＯＭ（Electrically  Erasable  Programmable  Read−Only  Memory）、ＲＯＭ（Read−Only  Memory）、ＲＡＭ（Random  Access  Memory）などを含み、制御装置３０が処理する各種情報や画像、プログラム、組付対象Ｏの位置及び姿勢を示す情報、所定の作業を行う際の作業領域を示す情報等を格納する。なお、記憶部３２は、制御装置３０に内蔵されるものに代えて、ＵＳＢ等のデジタル入出力ポート等によって接続された外付け型の記憶装置でもよい。
【００３８】
入力受付部３３は、例えば、キーボードやマウス、タッチパッド、その他の入力装置である。なお、入力受付部３３は、タッチパネルとして表示部と一体に構成されてもよい。
通信部３４は、例えば、ＵＳＢ等のデジタル入出力ポートやイーサネット（登録商標）ポート等を含んで構成される。
【００３９】
次に、図４を参照して、制御装置３０の機能構成について説明する。図４は、制御装置３０の機能構成の一例を示す図である。制御装置３０は、記憶部３２と、制御部３６を備える。制御部３６が備える機能部のうち一部又は全部は、例えば、ＣＰＵ３１が、記憶部３２に記憶された各種プログラムを実行することで実現される。また、これらの機能部のうち一部または全部は、ＬＳＩ（Large  Scale  Integration）やＡＳＩＣ（Application  Specific  Integrated  Circuit）等のハードウェア機能部であってもよい。
【００４０】
制御部３６は、制御装置３０の全体を制御する。制御部３６は、可動領域算出部３７と、ポテンシャル算出部３８と、平滑化処理部３９と、ロボット制御部４０を備える。
可動領域算出部３７は、組付対象Ｏの位置及び姿勢を示す情報と、作業領域を示す情報とを記憶部３２から読み込む。以下では、説明の便宜上、組付対象Ｏの位置及び姿勢を組付対象位置姿勢と称して説明する。可動領域算出部３７は、読み込まれた組付対象位置姿勢を示す情報及び作業領域を示す情報に基づいて、操作対象Ｎの可動領域を算出する。
【００４１】
なお、組付対象位置姿勢を示す情報は、予め記憶部３２により記憶されているとするが、これに代えて、ロボットシステム１が撮像部を備え、撮像部により撮像された撮像画像に基づいて検出される構成であってもよい。また、作業領域を示す情報は、予め記憶部３２により記憶されているとするが、これに代えて、ロボットシステム１が撮像部を備え、撮像部により撮像された撮像画像に基づいて検出される構成であってもよい。
【００４２】
ここで、操作対象Ｎの可動領域とは、作業領域内の各点において定義される量であり、作業領域内において操作対象Ｎが組付対象Ｏと接触せずに動くことができる範囲を定量的に示す量である。この一例において、操作対象Ｎの可動領域とは、作業領域を表す二次元平面上のある点からこの二次元平面内において組付対象Ｏと接触せずに操作対象Ｎがｘ方向及びｙ方向に移動可能な距離の総和（以下、並進可動領域と称する）と、その点において組付対象Ｏと接触せずに正方向（例えば、反時計回り）及び負方向（例えば、時計回り）に回転可能な回転角の総和（以下、回転可動領域と称する）との２つの量によって定義される量であり、その二次元平面上の各点において定義される量である。
【００４３】
なお、操作対象Ｎの可動領域は、作業領域内の各点における操作対象Ｎに係る他の量によって定義されてもよい。また、操作対象Ｎの可動領域は、作業領域内の各点において定義される構成に代えて、例えば、作業領域を複数の領域に分割した場合のそれぞれの領域毎に定義される構成であってもよい。また、可動領域算出部３７は、並進可動領域と回転可動領域の両方を算出する構成に代えて、並進可動領域と回転可動領域のうちいずれか一方のみを算出する構成（すなわち、操作対象Ｎの可動領域は、並進可動領域と回転可動領域のうちいずれか一方によって定義される構成）であってもよい。
【００４４】
ポテンシャル算出部３８は、可動領域算出部３７により算出された操作対象Ｎの可動領域（並進可動領域と回転可動領域のうちいずれか一方又は両方）に基づいて、作業領域内の各点における操作対象Ｎの動かし難さ（又は、動かし易さ）の指標となる量を算出する。以下では、ポテンシャル算出部３８により作業領域内の各点において算出されるこの量を、ポテンシャルと称して説明する。このポテンシャルは、本実施形態において作業領域内の各点において算出されるため、作業領域内の各点を示す座標の関数として表される。
【００４５】
なお、このように称する理由は、作業領域の各点における操作対象Ｎの剛性、すなわちエンドエフェクターＥＮＤにより把持された操作対象Ｎの動かし難さ（もしくは、動かし易さ）の指標となる量を、空間のある点において物体に働く保存力に係るポテンシャルエネルギーになぞらえたためである。また、作業領域内における物体（例えば、操作対象Ｎ）の位置及び姿勢は、作業領域内において組付対象Ｏの位置及び姿勢が変化しないため、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢を表す。従って、これらの説明を換言すると、ポテンシャル算出部３８は、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に応じた操作対象Ｎの動かし難さの指標となる量を、作業領域内の各点におけるポテンシャルとして算出する。
【００４６】
平滑化処理部３９は、ポテンシャル算出部３８によって算出された作業領域の各点におけるポテンシャルを表す関数に対して、ローパスフィルターを適用し、ポテンシャルを表す関数を平滑化（すなわち、平均化）する。以下では、説明の便宜上、平滑化処理部３９がポテンシャルを表す関数をこのように変換することを、滑らかなポテンシャルを生成すると称して説明する。また、以下では、ローパスフィルターを適用する前のポテンシャルを表す関数を、不連続に変化するポテンシャルと称して説明する。不連続に変化するポテンシャルに基づいてロボット２０を制御しようとすると、例えば、アクチュエーター等に負担が掛かり、故障の原因となりかねない。そのため、平滑化処理部３９は、算出された不連続に変化するポテンシャルにローパスフィルターを適用することで、滑らかなポテンシャルを生成する。
【００４７】
ロボット制御部４０は、ロボット２０のＴＣＰと操作対象Ｎとの相対的な位置及び姿勢を示す情報と、作業領域を示す情報とを記憶部３２から読み込む。ロボット制御部４０は、ロボット２０が備える各アクチュエーターの回転角と、ロボット２０のＴＣＰと操作対象Ｎとの相対的な位置及び姿勢と、作業領域を示す情報とに基づいて、操作対象Ｎの作業領域内での位置及び姿勢（すなわち、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢）を算出する。また、ロボット制御部４０は、力センサー２１から力センサー情報を取得する。ロボット制御部４０は、算出された操作対象Ｎの作業領域内での位置及び姿勢と、平滑化処理部３９により生成された滑らかなポテンシャルと、力センサー２１から取得した力センサー情報とに基づくインピーダンス制御によってロボット２０に所定の作業を行わせる。ここで、ロボット２０のＴＣＰと操作対象Ｎとの相対的な位置及び姿勢を示す情報は、予め記憶部３２により記憶されているとするが、これに代えて、ロボットシステム１が撮像部を備え、撮像部により撮像された撮像画像に基づいて算出又は検出される構成であってもよい。
【００４８】
以下、図５を参照して、制御装置３０が操作対象Ｎの可動領域を算出し、所定の作業を行うまでの処理について説明する。図５は、制御装置３０が操作対象Ｎの可動領域を算出し、所定の作業を行うまでの処理の流れの一例を示すフローチャートである。以下では、一例として、予めロボット２０がエンドエフェクターＥＮＤにより操作対象Ｎを把持しているとして説明する。まず、可動領域算出部３７は、操作対象Ｎの可動領域を算出するための可動領域算出処理を行う（ステップＳ１００）。
【００４９】
この一例において、可動領域算出処理は、２つの処理で構成され、一方が並進可動領域算出処理であり、他方が回転可動領域算出処理である。並進可動領域算出処理は、作業領域内の各点における操作対象Ｎの並進可動領域を算出する処理である。また、回転可動領域算出処理は、作業領域内の各点における操作対象Ｎの回転可動領域を算出する処理である。可動領域算出部３７は、ステップＳ１００における可動領域算出処理において、並進可動領域算出処理と回転可動領域算出処理のいずれか一方を先に行ってもよく、両方を同時に行ってもよい。なお、図４において説明したように、可動領域算出部３７は、可動領域算出処理において、並進可動領域算出処理と回転可動領域のうちいずれか一方のみを行う構成であってもよい。
【００５０】
次に、ポテンシャル算出部３８は、ステップＳ１００で可動領域算出部３７により算出された操作対象Ｎの並進可動領域と回転可動領域のうちいずれか一方又は両方に基づいて、作業領域内の各点におけるポテンシャルを算出するためのポテンシャル算出処理を行う（ステップＳ１１０）。本実施形態において、ポテンシャル算出部３８は、ポテンシャル算出処理において、操作対象Ｎの並進可動領域と回転可動領域の両方に基づいて、作業領域内の各点におけるポテンシャルを算出するとして説明する。
【００５１】
次に、平滑化処理部３９は、ステップＳ１１０で算出された不連続に変化するポテンシャルにローパスフィルターを適用することで、滑らかに変化するポテンシャルを生成（平滑化）する（ステップＳ１２０）。次に、ロボット制御部４０は、ステップＳ１２０で平滑化処理部３９により生成された滑らかなポテンシャルに基づくインピーダンス制御によってロボット２０に所定の作業を行わせるロボット制御処理を行う（ステップＳ１３０）。
【００５２】
ここで、図６及び図７を参照して、図５に示したステップＳ１００の可動領域算出処理について説明する。図６は、図５に示したステップＳ１００の可動領域算出処理における並進可動領域算出処理の流れの一例を示すフローチャートである。まず、可動領域算出部３７は、作業領域を示す情報を記憶部３２から読み込み、読み込まれた作業領域を示す情報に基づいて作業領域を表す仮想空間を生成する。そして、可動領域算出部３７は、生成された仮想空間の各点を示す座標を１つずつ選択し、選択された座標毎に、ステップＳ２１０からステップＳ２７０までの処理を繰り返し行う（ステップＳ２００）。
【００５３】
まず、可動領域算出部３７は、ステップＳ２００で選択された座標が示す仮想空間の点に、仮想的に操作対象Ｎを配置する。この時、可動領域算出部３７は、仮想空間の点に操作対象Ｎの重心の位置が一致するように操作対象Ｎを配置する。また、可動領域算出部３７は、仮想空間の点に配置された操作対象Ｎの姿勢を、所定の初期姿勢に初期化する（ステップＳ２１０）。なお、所定の初期姿勢とは、例えば、予め決められた操作対象Ｎの重心を通る中心線と、ｘ軸又はｙ軸との成す角度がゼロ度となるような姿勢であるが、これに限られず、他の姿勢であってもよい。
【００５４】
次に、可動領域算出部３７は、数値を示す情報を格納可能な変数Ｄを生成し、変数Ｄの値をゼロに初期化する（ステップＳ２２０）。次に、可動領域算出部３７は、ステップＳ２６０における操作対象Ｎの回転に係る回転角の累積値が３６０°に達したか否かを判定する（ステップＳ２３０）。操作対象Ｎの回転に係る回転角の累積値が３６０°に達していないと判定した場合（ステップＳ２３０−Ｎｏ）、可動領域算出部３７は、ステップＳ２００で選択された座標が示す仮想空間の点に配置された操作対象Ｎがｘ軸の正方向、ｘ軸の負方向、ｙ軸の正方向、ｙ軸の負方向のそれぞれの方向（以下、４つの方向と称する）への移動可能な距離の和を算出する（ステップＳ２４０）。
【００５５】
なお、可動領域算出部３７により算出されるこれらの移動可能な距離の和は、４つ方向それぞれへの移動可能な距離の和に代えて、４つの方向のうちのいずれか１つへの移動距離であってもよく、４つの方向それぞれへの移動可能な距離の一部の組み合わせの和であってもよく、１以上の他の方向への移動可能な距離の和（他の方向が１つのみの場合、和ではなく、その方向への移動可能な距離）であってもよく、上記の４つの方向それぞれへの移動可能な距離と他の方向への移動可能な距離との和であってもよい。例えば、可動領域算出部３７は、操作対象Ｎが移動可能な距離の和として、１以上の他の方向（例えば、ｘ軸の延伸方向とｙ軸の延伸方向との間の方向（斜め方向）等）への移動可能な距離の和を算出する場合、それらの方向への距離を三平方の定理等、距離空間において距離を算出する方法によって算出する構成となる。
【００５６】
次に、可動領域算出部３７は、ステップＳ２４０で算出された４つの方向への移動可能な距離の和を、ステップＳ２２０で生成された変数Ｄに格納されている値に加算する（ステップＳ２５０）。次に、可動領域算出部３７は、ステップＳ２００で選択された座標が示す仮想空間の点に配置された操作対象Ｎの姿勢を、所定角度だけ回転させる（ステップＳ２６０）。なお、所定角度は、その倍数に３６０°を含む任意の角度であることが望ましく、この一例において、５°や１０°等であるとするが、その倍数に３６０°を含まない他の角度であってもよい。
【００５７】
ステップＳ２３０からステップＳ２６０までの処理をまとめて換言すると、可動領域算出部３７は、ステップＳ２００で選択された座標が示す仮想空間の点に配置された操作対象Ｎの姿勢を所定角度ずつ変化させ、それぞれの姿勢毎に前述の４つの方向への移動可能な距離の和を算出し、算出された姿勢毎の４つの方向への移動可能な距離の和を変数Ｄに加算する。
【００５８】
ここで、図８を参照して、ステップＳ２３０からステップＳ２６０までの処理について説明する。図８は、ステップＳ１００で選択された座標が示す仮想空間の点に配置された操作対象Ｎの一例を示す図である。図８において、座標（ｘ，ｙ）を、ステップＳ２００で選択された座標であるとして説明する。点Ｇ（ｘ，ｙ）は、座標（ｘ，ｙ）に配置された操作対象Ｎの重心の位置を示す。また、枠ＶＳは、可動領域算出部３７により生成された仮想空間であって作業領域を表す仮想空間を示す。以下、この枠ＶＳによって囲まれた範囲を仮想空間ＶＳと称して説明する。なお、図８に示した座標軸は、この仮想空間ＶＳ上の位置及び姿勢を表す座標軸である。また、図８において示した操作対象Ｎの姿勢は、所定の初期姿勢であるとして説明する。
【００５９】
可動領域算出部３７は、座標（ｘ，ｙ）に配置された操作対象Ｎを前述の４つの方向のそれぞれに移動させる。この時、可動領域算出部３７は、操作対象Ｎの輪郭が、仮想空間ＶＳの枠や組付対象Ｏの輪郭と干渉（すなわち、接触）するまで操作対象Ｎを移動させた時の移動距離を、４つの方向のそれぞれの方向に移動可能な距離として算出する。図８において、距離Ｄ＋ｘは、ｘ軸の正方向への移動可能な距離であり、距離Ｄ−ｘは、ｘ軸の負方向への移動可能な距離である。また、図８において、距離Ｄ＋ｙは、ｙ軸の正方向への移動可能な距離であり、距離Ｄ−ｙは、ｙ軸の負方向への移動可能な距離である。可動領域算出部３７は、これらの距離Ｄ＋ｘ、距離Ｄ−ｘ、距離Ｄ＋ｙ、距離Ｄ−ｙの和を変数Ｄに格納された値に加算する。
【００６０】
そして、可動領域算出部３７は、操作対象Ｎの姿勢を所定角度ずつ３６０°まで変化させ、所定角度変化させる毎にその時の姿勢において、このような４つの方向への移動可能な距離の和を算出し、算出された４つの方向への移動可能な距離の和を変数Ｄに格納された値に加算していく。この４つの方向への移動可能な距離の和は、操作対象Ｎの位置及び姿勢に応じて異なる値を取る。従って、変数Ｄに加算されていく値は、操作対象Ｎの位置及び姿勢に応じた値となる。このようにして、可動領域算出部３７は、ステップＳ２３０からステップＳ２６０までの処理を行う。
【００６１】
一方、ステップＳ２３０で操作対象Ｎの回転に係る回転角の累積値が３６０°に達していると判定した場合（ステップＳ２３０−Ｙｅｓ）、可動領域算出部３７は、変数Ｄに格納された値を、ステップＳ１００で選択された座標における並進可動領域Ｆｔとし（ステップＳ２７０）、その後、ステップＳ２００に戻って次の仮想空間の座標を選択する。以下では、仮想空間ＶＳ内での各点を示す座標を座標（ｘ，ｙ）とした場合、その座標における並進可動領域Ｆｔの値を並進可動領域Ｆｔ（ｘ，ｙ）と表す。なお、仮想空間の各点を示す座標と、作業領域の各点を示す座標とは、キャリブレーション等によって予め対応付けられているとする。そのため、仮想空間ＶＳ内の各点は、作業領域内の各点を示す。
【００６２】
図７は、図５に示したステップＳ１００の可動領域算出処理における回転可動領域算出処理の流れの一例を示すフローチャートである。まず、可動領域算出部３７は、作業領域を示す情報を記憶部３２から読み込み、読み込まれた作業領域を示す情報に基づいて作業領域を表す仮想空間を生成する。そして、可動領域算出部３７は、生成された仮想空間の各点を示す座標を１つずつ選択し、選択された座標毎に、ステップＳ３１０からステップＳ３６０までの処理を繰り返し行う（ステップＳ３００）。なお、可動領域算出部３７により回転可動領域算出処理が図６に示した並進可動領域算出処理の後に（又は並進可動領域算出処理と並列に）行われる場合、すでに仮想空間が生成されているため、ステップＳ３００において新たに仮想空間を生成しなくてもよい。
【００６３】
まず、可動領域算出部３７は、ステップＳ３００で選択された座標が示す仮想空間の点に、仮想的に操作対象Ｎを配置する。この時、可動領域算出部３７は、仮想空間の点に操作対象Ｎの重心の位置が一致するように操作対象Ｎが配置する。また、可動領域算出部３７は、仮想空間の点に配置された操作対象Ｎの姿勢を、前述の所定の初期姿勢に初期化する（ステップＳ３１０）。
【００６４】
次に、可動領域算出部３７は、数値を示す情報を格納可能な変数Ｅを生成し、変数Ｅの値をゼロに初期化する（ステップＳ３２０）。次に、可動領域算出部３７は、現時点においてステップＳ３００で選択された座標が示す仮想空間の点に配置された操作対象Ｎが、図８に示した仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）しているか否かを判定する（ステップＳ３３０）。
【００６５】
操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に接触していないと判定した場合（ステップＳ３３０−Ｎｏ）、可動領域算出部３７は、ステップＳ３００で選択された座標が示す仮想空間の点に配置された操作対象Ｎを、例えば、操作対象Ｎの重心を中心として正方向と負方向のそれぞれに、操作対象Ｎの輪郭が仮想空間ＶＳの枠や組付対象Ｏの輪郭に接触するまで回転させる。ただし、操作対象Ｎの輪郭が仮想空間ＶＳの枠や組付対象Ｏの輪郭に接触しない場合、正方向と負方向のそれぞれの回転角は、３６０°であるとする。可動領域算出部３７は、正方向への回転角と、負方向への回転角との和を回転可能角度として算出し（ステップＳ３４０）、変数Ｅに格納された値に加算する（ステップＳ３５０）。
【００６６】
一方、ステップＳ３３０で操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）していると判定した場合（ステップＳ３３０−Ｙｅｓ）、可動領域算出部３７は、変数Ｅに格納された値を、回転可動領域Ｆｒとし（ステップＳ３６０）、その後、ステップＳ３００に戻って次の仮想空間の座標を選択する。以下では、仮想空間ＶＳ内での各点を示す座標を座標（ｘ，ｙ）とした場合、その座標における回転可動領域Ｆｒの値を回転可動領域Ｆｒ（ｘ，ｙ）と表す。
【００６７】
ここで、図９を参照して、図５に示したステップＳ１１０のポテンシャル算出処理について説明する。図９は、図５に示したステップＳ１１０のポテンシャル算出処理の流れの一例を示すフローチャートである。まず、ポテンシャル算出部３８は、ステップＳ１００で可動領域算出部３７により算出された仮想空間ＶＳ内の各点（すなわち、作業領域内の各点）における可動領域、すなわち並進可動領域Ｆｔ（ｘ，ｙ）及び回転可動領域Ｆｒ（ｘ，ｙ）に基づいて、並進可動領域Ｆｔ（ｘ，ｙ）の全ての点の中での最大値ＦｔＭＡＸと、回転可動領域Ｆｒ（ｘ，ｙ）の全ての点の中での最大値ＦｒＭＡＸを検出する（ステップＳ４００）。
【００６８】
次に、ポテンシャル算出部３８は、ステップＳ４００で検出された並進可動領域Ｆｔ（ｘ，ｙ）の最大値ＦｔＭＡＸと、回転可動領域Ｆｒ（ｘ，ｙ）の最大値ＦｒＭＡＸとに基づいて、作業領域内の各点におけるポテンシャルを算出する（ステップＳ４１０）。ここで、このポテンシャルを算出する処理について説明する。ポテンシャル算出部３８は、以下に示す式（１）及び式（２）に基づいて作業領域内の各点におけるポテンシャルを算出する。
【００６９】
Ｐｔ（ｘ，ｙ）＝ＦｔＭＡＸ−Ｆｔ（ｘ，ｙ）  ・・・（１）
【００７０】
Ｐｒ（ｘ，ｙ）＝ＦｒＭＡＸ−Ｆｒ（ｘ，ｙ）  ・・・（２）
【００７１】
ここで、Ｐｔ（ｘ，ｙ）は、作業領域内のある点を示す座標（ｘ，ｙ）におけるポテンシャルであり、並進可動領域に基づいて算出されるポテンシャル（以下、並進ポテンシャルと称する）を表す。また、Ｐｒ（ｘ，ｙ）は、作業領域内のある点を示す座標（ｘ，ｙ）におけるポテンシャルであり、回転可動領域に基づいて算出されるポテンシャル（以下、回転ポテンシャルと称する）を表す。
【００７２】
上記の式（１）は、並進可動領域の最大値ＦｔＭＡＸから、作業領域内のある点を示す座標（ｘ，ｙ）における並進可動領域Ｆｔ（ｘ，ｙ）を減算した値を、座標（ｘ，ｙ）における並進ポテンシャルとして定義する式である。このように並進ポテンシャルを定義することで、作業領域内の点のうち並進ポテンシャルが大きな点では、エンドエフェクターＥＮＤにより把持された操作対象Ｎの剛性が大きい、すなわち操作対象Ｎを動かしづらい（並進させ難い）ことを表すことができる。
【００７３】
また、上記の式（２）は、回転可動領域の最大値ＦｒＭＡＸから、作業領域内のある点を示す座標（ｘ，ｙ）における回転可動領域Ｆｒ（ｘ，ｙ）を減算した値を、座標（ｘ，ｙ）における回転ポテンシャルとして定義する式である。このように回転ポテンシャルを定義することで、作業領域内の点のうち回転ポテンシャルが大きな点では、エンドエフェクターＥＮＤにより把持された操作対象Ｎの剛性が大きい、すなわち操作対象Ｎを動かし難い（回転させ難い）ことを表すことができる。
【００７４】
図１０は、このようにして算出された並進ポテンシャルの一例を表すグラフ及び回転ポテンシャルの一例を表すグラフをそれぞれ示す図である。図１０（Ａ）には、並進ポテンシャルの一例を表すグラフを示す。図１０（Ｂ）には、回転ポテンシャルの一例を表すグラフを示す。これらのグラフから、ポテンシャル算出部３８により算出された並進ポテンシャル及び回転ポテンシャルは、その大きさがそれぞれ不連続に変化することが分かる。
【００７５】
ここで、制御装置３０が備える制御部３６の平滑化処理部３９は、図５に示したステップＳ１２０でこれらの不連続に変化するポテンシャルにローパスフィルターを適用することで、図１１に示すような滑らかなポテンシャルを生成する。図１１は、平滑化処理部３９により生成された滑らかな回転ポテンシャルの一例を表すグラフを示す図である。平滑化処理部３９が図１１に示すような滑らかなポテンシャルを生成するため、ロボット制御部４０は、滑らかな並進ポテンシャル及び滑らかな回転ポテンシャルに基づいて、ロボット２０に所定の作業を行わせることができ、その結果、マニピュレーターＭＮＰのアクチュエーターに掛かる負荷を抑制しつつ、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に応じたインピーダンス制御によって良好な組み立て作業を実施することができる。
【００７６】
ここで、図１２を参照して、図５に示したステップＳ１３０のロボット制御処理について説明する。図１２は、図５に示したステップＳ１３０のロボット制御処理の流れの一例を示すフローチャートである。まず、ロボット制御部４０は、記憶部３２から操作対象Ｎの移動経路を示す情報を読み込む（ステップＳ５００）。操作対象Ｎの移動経路とは、現在（初期状態）の操作対象Ｎの位置及び姿勢から、操作対象Ｎが組付対象Ｏに組み付けられた場合の組付対象Ｏの位置及び姿勢に至るまでの操作対象Ｎの移動経路を示す。なお、移動経路を示す情報は、予め記憶部３２により記憶されているとするが、これに代えて、ロボット制御部４０により算出される構成であってもよい。
【００７７】
次に、ロボット制御部４０は、ロボット２０が備える複数のアクチュエーターそれぞれの回転角を読み込み、読み込まれた回転角に基づいて順運動学から作業領域内における操作対象Ｎの位置及び姿勢を算出する（ステップＳ５１０）。次に、ロボット制御部４０は、力センサー２１から力センサー情報を取得する（ステップＳ５２０）。次に、ロボット制御部４０は、インピーダンス制御の制御変数を読み込む（ステップＳ５３０）。なお、インピーダンス制御の制御変数は、予め記憶部３２により記憶されているとする。次に、ロボット制御部４０は、ステップＳ５１０で算出された作業領域内における操作対象Ｎの位置及び姿勢に基づいて、ステップＳ５３０で読み込まれた制御変数を調整するための調整量を算出する（ステップＳ５４０）。ここで、インピーダンス制御の制御変数と、その制御変数を調整する調整量について説明する。
【００７８】
ロボット制御部４０は、操作対象Ｎを把持するエンドエフェクターＥＮＤに外力が加わった際（すなわち、力センサー２１により外力が検出された際）、操作対象Ｎを組付対象Ｏに組み付けるための移動経路に沿った方向への移動量ｒｔとは別に、操作対象ＮやエンドエフェクターＥＮＤに過大な力が加わらないように外力を逃がす方向へ操作対象Ｎを微小移動させる。この時の操作対象Ｎの微小移動量Δｒは、以下の式（３）に示した運動方程式に基づいて算出される。なお、移動量ｒｔ及び微小移動量Δｒは、ベクトル量である。
【００７９】
【数１】
0006443837.tif 000002
【００８０】
ここで、Ｆｅｘｔは、ロボット制御部４０がステップＳ５２０で力センサー２１から取得する力センサー情報に含まれる外力を表すベクトルである。また、Ｍ，Ｄ，Ｋはそれぞれ順に、慣性行列、粘性行列、スチフネス行列であり、インピーダンス制御の制御変数である。ロボット制御部４０は、ステップＳ５３０でこれらの制御変数を記憶部３２から読み込む。ロボット制御部４０は、上記の式（３）を解くことで、微小移動量Δｒを算出する。
【００８１】
ロボット制御部４０がロボット２０に所定の作業を行わせるために操作対象Ｎを移動させる際の移動量ｒは、ステップＳ５００で読み込まれた移動経路に沿った方向への移動量ｒｔと、力を逃がす方向への微小移動量Δｒとに基づいて、以下の式（４）、式（５）から算出される。なお、移動量ｒは、ベクトル量である。
【００８２】
【数２】
0006443837.tif 000003
【００８３】
【数３】
0006443837.tif 000004
【００８４】
ここで、Ｔは、現在の操作対象Ｎの位置を示す座標（ｘ，ｙ）における並進ポテンシャルＰｔ（ｘ，ｙ）及び回転ポテンシャルＰｒ（ｘ，ｙ）に基づいて算出される量であって微小移動量Δｒの大きさを調整する調整量である。なお、ＰｔＭＡＸは、並進ポテンシャルＰｔ（ｘ，ｙ）が取り得る最大値であり、ＰｒＭＡＸは、回転ポテンシャルＰｒ（ｘ，ｙ）が取り得る最大値である。また、上記の式（５）における係数０．４５は、ある条件下において実験的に求められたロボット２０が良好に制御される最適値の例であり、他の値であってもよい。
【００８５】
上記の式（４）のように調整量Ｔによってインピーダンス制御の制御変数によって算出された微小移動量Δｒを調整することは、すなわち間接的にインピーダンス制御の制御変数を調整することに相当する。調整量Ｔが大きい場合（すなわち、並進ポテンシャルや回転ポテンシャルが小さい場合）、力を逃がす方向への微小移動量は、大きくなる（すなわち、剛性が低い）。一方、調整量Ｔが小さい場合（すなわち、並進ポテンシャルや回転ポテンシャルが大きい場合）、力を逃がす方向への微小移動量は、小さくなる（すなわち、剛性が高い）。
【００８６】
ロボット制御部４０は、図５に示したステップＳ１２０で平滑化処理部３９により生成された滑らかに変化する並進ポテンシャルＰｔ（ｘ，ｙ）及び回転ポテンシャルＰｒ（ｘ，ｙ）と、上記の式（５）とに基づいて調整量Ｔを算出する。
【００８７】
ステップＳ５４０で調整量Ｔを算出した後、ロボット制御部４０は、ステップＳ５１０で取得された力センサー情報と、ステップＳ５３０で読み込まれたインピーダンス制御の制御変数とに基づいて、微小移動量Δｒを算出する。ロボット制御部４０は、算出された微小移動量Δｒと、ステップＳ５００で算出された移動経路と、ステップＳ５４０で算出された調整量Ｔと、上記の式（４）とに基づいて移動量ｒを算出する。そして、ロボット制御部４０は、算出された移動量ｒに基づいて、操作対象Ｎを移動させる（ステップＳ５５０）。
【００８８】
次に、ロボット制御部４０は、操作対象Ｎが組付対象Ｏに組み付けられたか否かを、ステップＳ５５０で移動された後の操作対象Ｎの位置及び姿勢に基づいて判定する（ステップＳ５６０）。ロボット制御部４０は、操作対象Ｎが組付対象Ｏに組み付けられていないと判定した場合（ステップＳ５６０−Ｎｏ）、ステップＳ５１０に戻って再び操作対象Ｎの位置及び姿勢を算出する。一方、ロボット制御部４０は、操作対象Ｎが組付対象Ｏに組み付けられたと判定した場合（ステップＳ５６０−Ｙｅｓ）、処理を終了する。
【００８９】
なお、ロボット制御部４０は、ステップＳ５４０で調整量Ｔを算出する構成に代えて、図５に示したステップＳ１２０で平滑化処理部３９により生成された滑らかに変化する並進ポテンシャルＰｔ（ｘ，ｙ）及び回転ポテンシャルＰｒ（ｘ，ｙ）に基づいて、インピーダンス制御の制御変数である慣性行列Ｍ、粘性行列Ｄ、スチフネス行列Ｋをそれぞれ算出する構成であってもよい。この場合、ロボット制御部４０は、ステップＳ５５０で、算出されたインピーダンス制御の制御変数である慣性行列Ｍ、粘性行列Ｄ、スチフネス行列Ｋと、上記の式（３）とに基づいて、微小移動量Δｒを算出する。そして、ロボット制御部４０は、上記の式（５）によって算出される最大の値よりも大きな値をＴに代入された上記の式（４）に基づいて移動量ｒを算出する。なお、式（４）に代入する値は、この一例において、１であるとするが、１以上の値であってもよい。
【００９０】
以上説明したように、第１実施形態におけるロボットシステム１は、マニピュレーターＭＮＰとともに動く操作対象Ｎと、組付対象Ｏとの相対的な位置及び姿勢に応じて、コンプライアントモーション制御の制御変数を調整（変更）する。これにより、ロボットシステム１は、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に応じたコンプライアントモーション制御を行うことができる。
【００９１】
また、ロボットシステム１は、組付対象Ｏとの相対位置姿勢に基づく操作対象Ｎの移動可能な範囲に応じてコンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットシステム１は、操作対象Ｎと組付対象Ｏが接触していない場合においても、相対位置姿勢に応じてコンプライアントモーション制御のパラメーター値を変更することができる。
【００９２】
ロボットシステム１は、組付対象Ｏとの相対位置姿勢による操作対象Ｎの移動可能な範囲に基づいて、操作対象Ｎと組付対象Ｏの相対位置姿勢に応じた操作対象Ｎの動かし難さ又は動かし易さの指標となる量を算出し、算出された指標となる量に基づいてコンプライアントモーション制御のパラメーター値を変更する。これにより、ロボットシステム１は、把持している操作対象Ｎが動かし難い場合、操作対象Ｎの剛性を小さくし、把持している操作対象Ｎを動かし易い場合、操作対象Ｎの剛性を大きくするように調整することができる。
【００９３】
また、ロボットシステム１は、組付対象Ｏとの相対位置姿勢に基づく操作対象Ｎの移動可能な範囲に応じた操作対象Ｎの動かし難さ又は動かし易さの指標となる量を算出し、算出された指標となる量に基づいてコンプライアントモーション制御のパラメーター値を変更する。
【００９４】
また、ロボットシステム１は、コンプライアントモーション制御のうちインピーダンス制御の制御変数を調整する。これにより、ロボットシステム１は、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に応じてインピーダンス制御の制御変数を調整することで、ロボット２０が把持する操作対象Ｎの剛性を調整することができる。
【００９５】
＜第２実施形態＞
以下、本発明の第２実施形態について、図面を参照して説明する。第２実施形態では、制御部３６は、可動領域算出部３７に代えて、可動領域算出部３７ａを備える。可動領域算出部３７ａは、可動領域算出部３７によるステップＳ１００の可動領域算出処理に代えて、以下で説明する可動領域算出処理を行う。より具体的には、可動領域算出部３７ａは、ステップＳ１００において、図１３に示す並進可動領域算出処理と、図１４に示す回転可動領域算出処理とを行う。なお、第２実施形態では、第１の実施形態と同様な構成部には、同じ符号を付してある。
【００９６】
以下、図１３を参照して、可動領域算出部３７ａによる並進可動領域算出処理について説明する。図１３は、可動領域算出部３７ａによる並進可動領域算出処理の流れの一例を示すフローチャートである。図１３に示した並進可動領域算出処理は、図６に示した並進可動領域を位置の関数として算出する並進可動領域算出処理と異なり、並進可動領域を位置と姿勢の関数として算出する。まず、可動領域算出部３７ａは、作業領域を示す情報を記憶部３２から読み込み、読み込まれた作業領域を示す情報に基づいて作業領域を表す仮想空間を生成する。そして、可動領域算出部３７ａは、生成された仮想空間の各点を示す座標を１つずつ選択し、選択された座標毎に、ステップＳ６１０からステップＳ６５０までの処理を繰り返し行う（ステップＳ６００）。
【００９７】
次に、可動領域算出部３７ａは、ステップＳ６００で選択された座標が示す仮想空間の点に、仮想的に操作対象Ｎを配置する。この時、可動領域算出部３７ａは、仮想空間の点に操作対象Ｎの重心の位置が一致するように操作対象Ｎが配置する。また、可動領域算出部３７ａは、仮想空間の点に配置された操作対象Ｎの姿勢を、所定の初期姿勢となるまで操作対象Ｎを回転させる。そして、可動領域算出部３７ａは、操作対象Ｎの姿勢を所定角度ずつ変え、それぞれの姿勢毎にステップＳ６２０からステップＳ６５０までの処理を繰り返し行う（ステップＳ６１０）。
【００９８】
次に、可動領域算出部３７ａは、数値を示す情報を格納可能な変数Ｄを生成し、変数Ｄの値をゼロに初期化する（ステップＳ６２０）。次に、可動領域算出部３７ａは、ステップＳ６００で選択された座標が示す仮想空間の点に、ステップＳ６１０で選択された姿勢で配置された操作対象Ｎが４つの方向（すなわち、ｘ軸の正方向、ｘ軸の負方向、ｙ軸の正方向、ｙ軸の負方向）のそれぞれへの移動可能な距離の和を算出する（ステップＳ６３０）。次に、可動領域算出部３７ａは、ステップＳ６３０で算出された４つの方向への移動可能な距離の和を、ステップＳ６２０で生成された変数Ｄに格納されている値に加算する（ステップＳ６４０）。
【００９９】
以下、図１４を参照して、可動領域算出部３７ａによる回転可動領域算出処理について説明する。図１４は、可動領域算出部３７ａによる回転可動領域算出処理の流れの一例を示すフローチャートである。まず、可動領域算出部３７ａは、作業領域を示す情報を記憶部３２から読み込み、読み込まれた作業領域を示す情報に基づいて作業領域を表す仮想空間を生成する。そして、可動領域算出部３７ａは、生成された仮想空間の各点を示す座標を１つずつ選択し、選択された座標毎に、ステップＳ７１０からステップＳ８５０までの処理を繰り返し行う（ステップＳ７００）。なお、可動領域算出部３７ａにより回転可動領域算出処理が図１３に示した並進可動領域算出処理の後に（又は並列に）行われる場合、すでに仮想空間が生成されているため、ステップＳ７００において新たに仮想空間を生成しなくてもよい。
【０１００】
次に、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に、仮想的に操作対象Ｎを配置する。この時、可動領域算出部３７ａは、仮想空間の点に操作対象Ｎの重心の位置が一致するように操作対象Ｎが配置する。また、可動領域算出部３７ａは、仮想空間の点に配置された操作対象Ｎの姿勢を、所定の初期姿勢となるまで操作対象Ｎを回転させる。そして、可動領域算出部３７ａは、操作対象Ｎの姿勢を所定角度ずつ変え、それぞれの姿勢毎にステップＳ７２０からステップＳ８５０までの処理を繰り返し行う（ステップＳ７１０）。
【０１０１】
次に、可動領域算出部３７ａは、数値を示す情報を格納可能な変数Ｄ＋を生成し、変数Ｄ＋の値をゼロに初期化する（ステップＳ７２０）。次に、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に配置された操作対象Ｎであって、現在の姿勢の操作対象Ｎが、図８に示した仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）しているか否かを判定する（ステップＳ７３０）。
【０１０２】
操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に接触していないと判定した場合（ステップＳ７３０−Ｎｏ）、可動領域算出部３７ａは、ステップＳ７５０における操作対象Ｎの回転に係る回転角の累積値が３６０°に達したか否かを判定する（ステップＳ７４０）。操作対象Ｎの回転に係る回転角の累積値が３６０°に達していないと判定した場合（ステップＳ７４０−Ｎｏ）、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に配置された操作対象Ｎであって、現在の姿勢の操作対象Ｎを、例えば、操作対象Ｎの重心を中心として正方向に所定角度だけ回転させ（ステップＳ７５０）、再びステップＳ７３０の判定を行う。ここで、所定角度は、その倍数に３６０°を含む任意の角度であることが望ましく、この一例において、５°や１０°等であるとするが、その倍数に３６０°を含まない他の角度であってもよい。一方、操作対象Ｎの回転に係る回転角の累積値が３６０°に達していると判定した場合（ステップＳ７４０−Ｙｅｓ）、可動領域算出部３７ａは、ステップＳ７５０における操作対象Ｎの回転に係る回転角の累積値を変数Ｄ＋に代入する（ステップＳ７６０）。
【０１０３】
一方、ステップＳ７３０で操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）していると判定した場合（ステップＳ７３０−Ｙｅｓ）、可動領域算出部３７ａは、ステップＳ７６０に遷移し、ステップＳ７５０における操作対象Ｎの回転に係る回転角の累積値を変数Ｄ＋に代入する。次に、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に配置された操作対象Ｎの姿勢を、ステップＳ７１０で選択された姿勢に戻す（ステップＳ７７０）。
【０１０４】
次に、可動領域算出部３７ａは、数値を示す情報を格納可能な変数Ｄ−を生成し、変数Ｄ−の値をゼロに初期化する（ステップＳ７８０）。次に、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に配置された操作対象Ｎであって、現在の姿勢の操作対象Ｎが、図８に示した仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）しているか否かを判定する（ステップＳ７９０）。
【０１０５】
操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に接触していないと判定した場合（ステップＳ７９０−Ｎｏ）、可動領域算出部３７ａは、ステップＳ８１０における操作対象Ｎの回転に係る回転角の絶対値の累積値が３６０°に達したか否かを判定する（ステップＳ８００）。操作対象Ｎの回転に係る回転角の累積値が３６０°に達していないと判定した場合（ステップＳ８００−Ｎｏ）、可動領域算出部３７ａは、ステップＳ７００で選択された座標が示す仮想空間の点に配置された操作対象Ｎであって、現在の姿勢の操作対象Ｎを、例えば、操作対象Ｎの重心を中心として負方向に所定角度だけ回転させ（ステップＳ８１０）、再びステップＳ７９０の判定を行う。ここで、所定角度は、その倍数に３６０°を含む任意の角度であることが望ましく、この一例において、５°や１０°等であるとするが、その倍数に３６０°を含まない他の角度であってもよい。一方、操作対象Ｎの回転に係る回転角の累積値が３６０°に達していると判定した場合（ステップＳ８００−Ｙｅｓ）、可動領域算出部３７ａは、ステップＳ８１０における操作対象Ｎの回転に係る回転角の累積値を変数Ｄ−に代入する（ステップＳ８２０）。
【０１０６】
一方、ステップＳ７９０で操作対象Ｎが仮想空間ＶＳの枠や組付対象Ｏの輪郭に干渉（すなわち、接触）していると判定した場合（ステップＳ７９０−Ｙｅｓ）、可動領域算出部３７ａは、ステップＳ８２０に遷移し、ステップＳ８１０における操作対象Ｎの回転に係る回転角の累積値を変数Ｄ−に代入する。次に、可動領域算出部３７ａは、変数Ｄ＋に代入されている値が変数Ｄ−に代入されている値未満であるか否かを判定する（ステップＳ８３０）。変数Ｄ＋に代入されている値が変数Ｄ−に代入されている値未満であると判定した場合（ステップＳ８３０−Ｙｅｓ）、可動領域算出部３７ａは、変数Ｄ＋の値を回転可動領域に代入する（ステップＳ８４０）。一方、変数Ｄ＋に代入されている値が変数Ｄ−に代入されている値以上であると判定した場合（ステップＳ８３０−Ｎｏ）、可動領域算出部３７ａは、変数Ｄ−の値を回転可動領域に代入する（ステップＳ８５０）。
【０１０７】
このように、可動領域算出部３７ａは、ステップＳ６００からステップＳ６５０までの処理と、ステップＳ７００からステップＳ８５０までの処理とをそれぞれ繰り返し行うことで、作業領域内の各点における操作対象Ｎの並進可動領域及び回転可動領域を、操作対象Ｎの姿勢毎に算出する。これにより、制御部３６は、操作対象Ｎと組付対象Ｏの相対的な位置及び姿勢に基づくコンプライアントモーション制御の制御変数の調整を、第１実施形態と同様に行うことができる。
【０１０８】
なお、ステップＳ７３０において、可動領域算出部３７ａは、変数Ｄ−に代入されている値が変数Ｄ＋に代入されている値未満であるか否かを判定する構成であってもよい。また、可動領域算出部３７ａは、ステップＳ７３０からステップＳ７６０までの処理と、ステップＳ７８０からステップＳ８２０までの処理とを逆の順で行う構成であってもよく、同時に行う構成であってもよい。
【０１０９】
以上説明したように、第２実施形態におけるロボットシステム１は、図１３及び図１４に示した並進可動領域算出処理と及び回転可動領域算出処理を行うことで、第１実施形態と同様の効果を得ることができる。
【０１１０】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない限り、変更、置換、削除等されてもよい。
【０１１１】
また、以上に説明した装置（例えば、ロボットシステム１の制御装置３０）における任意の構成部の機能を実現するためのプログラムを、コンピューター読み取り可能な記録媒体に記録し、そのプログラムをコンピューターシステムに読み込ませて実行するようにしてもよい。なお、ここでいう「コンピューターシステム」とは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）−ＲＯＭ等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリー（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のように、一定時間プログラムを保持しているものも含むものとする。
【０１１２】
また、上記のプログラムは、このプログラムを記憶装置等に格納したコンピューターシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピューターシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記のプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、上記のプログラムは、前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【符号の説明】
【０１１３】
１  ロボットシステム、２０  ロボット、３０  制御装置、３１  ＣＰＵ、３２  記憶部、３３  入力受付部、３４  通信部、３６  制御部、３７  可動領域算出部、３８  ポテンシャル算出部、３９  平滑化処理部、４０  ロボット制御部
【図１】
0006443837.tif 000005
【図２】
0006443837.tif 000006
【図３】
0006443837.tif 000007
【図４】
0006443837.tif 000008
【図５】
0006443837.tif 000009
【図６】
0006443837.tif 000010
【図７】
0006443837.tif 000011
【図８】
0006443837.tif 000012
【図９】
0006443837.tif 000013
【図１０】
0006443837.tif 000014
【図１１】
0006443837.tif 000015
【図１２】
0006443837.tif 000016
【図１３】
0006443837.tif 000017
【図１４】
0006443837.tif 000018