以下、実施形態について、図面を参照しつつ詳細に説明する。説明において、同一要素又は同一機能を有する要素には同一の符号を付し、重複する説明を省略する。
〔ロボットシステム〕
図1に示すロボットシステム1は、ロボットと作業者との協働を前提とする人協働型のシステムである。ロボットシステム1は、多関節ロボット10と、外力センサ20と、物体センサ30と、コントローラ100とを備える。
多関節ロボット10は、ワークを把持して搬送する。多関節ロボット10は、例えば6軸の垂直多関節ロボットであり、基部11と、先端部12と、ハンド13と、多関節アーム40とを有する。基部11は、多関節ロボット10用の作業エリアにおいて、例えば床面(設置面)に設置されている。多関節アーム40は、基部11及び先端部12を接続する。
多関節アーム40は複数の関節を有し、当該複数の関節の角度を変更することで基部11に対する先端部12の位置及び姿勢を調節する。例えば多関節アーム40は、旋回部41と、下アーム42と、上アーム43と、手首部46と、アクチュエータ61,62,63,64,65,66と、角度センサ71,72,73,74,75,76とを有する。旋回部41は、鉛直な軸線Ax1まわりに旋回可能となるように、基部11の上部に設けられている。すなわち多関節アーム40は、軸線Ax1まわりに旋回部41を旋回可能とする関節51を有する。
下アーム42は、軸線Ax1に交差(例えば直交)する軸線Ax2まわりに揺動可能となるように旋回部41に接続されている。すなわち多関節アーム40は、軸線Ax2まわりに下アーム42を揺動可能とする関節52を有する。なお、ここでの交差とは、所謂立体交差のように、互いにねじれの関係にある場合も含む。以下においても同様である。
上アーム43は、軸線Ax1に交差する軸線Ax3まわりに揺動可能となるように、下アーム42の端部に接続されている。すなわち多関節アーム40は、軸線Ax3まわりに上アーム43を揺動可能とする関節53を有する。軸線Ax3は軸線Ax2に平行であってもよい。
上アーム43の先端部は、上アーム43の中心に沿う軸線Ax4まわりに旋回可能となっている。すなわち多関節アーム40は、軸線Ax4まわりに上アーム43の先端部を旋回可能とする関節54を有する。換言すると、上アーム43の先端部側45は、基端部側44に対して旋回可能である。
手首部46は、軸線Ax4に交差(例えば直交)する軸線Ax5まわりに揺動可能となるように上アーム43の先端部に接続されている。すなわち多関節アーム40は、軸線Ax5まわりに手首部46を揺動可能とする関節55を有する。
先端部12は、手首部46の中心に沿う軸線Ax6まわりに旋回可能となるように、手首部46の先端部に接続されている。すなわち多関節アーム40は、軸線Ax6まわりに先端部12を旋回可能とする関節56を有する。
アクチュエータ61,62,63,64,65,66は、例えば電動モータを動力源とし、多関節アーム40の複数の可動部をそれぞれ駆動する。例えばアクチュエータ61は、軸線Ax1まわりに旋回部41を旋回させ、アクチュエータ62は軸線Ax2まわりに下アーム42を揺動させ、アクチュエータ63は軸線Ax3まわりに上アーム43を揺動させ、アクチュエータ64は軸線Ax4まわりに上アーム43の先端部を旋回させ、アクチュエータ65は軸線Ax5まわりに手首部46を揺動させ、アクチュエータ66は軸線Ax6まわりに先端部12を旋回させる。すなわちアクチュエータ61~66は、関節51~56をそれぞれ駆動する。アクチュエータ61~66の駆動力を増大させる減速機、又はベルト、ギア等の動力伝達機構がアクチュエータ61~66と関節51~56との間にそれぞれ配置されていてもよい。この場合、アクチュエータ61~66の駆動力は、当該減速機又は動力伝達機構を介して、関節51~56を駆動する。角度センサ71,72,73,74,75,76は、例えばロータリーエンコーダ又はレゾルバ等であり、関節51,52,53,54,55,56の動作角度をそれぞれ検出する。角度センサ71~76がそれぞれアクチュエータ61~66に配置されている場合には、角度センサ71~76の検出値から、各関節の動力伝達機構の総合減速比を考慮して、関節51~56の動作角度を算出する。
ハンド13は、先端部12に装着されており、ワークを把持する。例えばハンド13は、複数の指部14と、アクチュエータ15とを有する。アクチュエータ15は、例えば電動モータを動力源とし、複数の指部14を互いに近付ける又は遠ざける。以下、複数の指部14を互いに近付けることを「ハンド13を閉じる」といい、複数の指部14を互いに遠ざけることを「ハンド13を開く」という。
なお、上述した多関節ロボット10の構成はあくまで一例である。多関節ロボット10は、基部11に対する先端部12の位置及び姿勢を調節し得る限りいかに構成されていてもよい。例えば多関節ロボット10は、上記6軸の垂直多関節ロボットに冗長軸を追加した7軸のロボットであってもよい。また、多関節ロボット10は所謂スカラー型のロボットであってもよい。
外力センサ20は、多関節ロボット10に作用する外力を検出する。例えば外力センサ20は、多関節ロボット10の少なくとも一つの関節に作用するトルクを検出するトルクセンサを含む。例えば外力センサ20は、多関節ロボット10の関節51,52,53,54,55,56に作用するトルクをそれぞれ検出するトルクセンサ21,22,23,24,25,26を含む。トルクセンサ21,22,23,24,25,26は、例えばひずみゲージ式等のトルクセンサである。
物体センサ30は、多関節ロボット10の周囲に設けられ、多関節ロボット10の周囲に物体が存在するか否かを検出する。物体は、人の体を含む。物体センサ30の具体例としては、赤外線センサ、レーザスキャナ、超音波センサ、カメラ、及びマットスイッチ等のエリアセンサが挙げられる。物体センサ30は、多関節ロボット10に設けられた接触センサであってもよい。また、物体センサ30は、上述のエリアセンサと接触センサとの両方を含んでいてもよい。この場合、多関節ロボット10への物体の接触検知によっても当該物体の存在が検知される。
コントローラ100は、予め設定された動作パターンに従って多関節ロボット10を動作させる。コントローラ100は、多関節ロボット10の制御に際し、多関節ロボット10に作用する外力の検出値に基づいて多関節ロボット10と物体との接触を検知することと、外力の検出値に基づいてワークの重量を検出することとを実行するように構成されている。
図2に示すように、例えばコントローラ100は、機能上の構成(以下、「機能モジュール」という。)として、モデル保持部111と、仕分制御部112と、慣性力算出部113と、慣性力除外部114と、外力算出部115と、接触検知部116と、重量検出部117と、モデル補正部118と、退避制御部119とを有する。モデル保持部111は、多関節ロボット10のモデル情報を記憶する。モデル情報の具体例としては、多関節ロボット10の構造を複数のリンクと複数の関節とで表した場合の各リンクの長さ情報と、各リンク及び各関節の重心位置、重量情報等が挙げられる。
仕分制御部112は、ワークの重量に基づいて、ワークの仕分け作業を多関節ロボット10に実行させる。例えば仕分制御部112は、ワークの重量と、複数の重量クラスごとに予め定められた複数の搬送先とに基づいてワークの搬送先を決定し、決定した搬送先にワークを搬送するように多関節ロボット10を制御する。
慣性力算出部113は、多関節ロボット10のモデルに基づいて、多関節ロボット10の動作に伴う慣性力を算出する。例えば慣性力算出部113は、角度センサ71,72,73,74,75,76と、モデル保持部111が記憶するモデル情報とに基づく動力学演算により、関節51,52,53,54,55,56に作用する慣性トルク(慣性力に起因して生じるトルク)を算出する。
慣性力除外部114は、外力センサ20による検出値から慣性力を除外して外力を算出する。外力とは、多関節ロボット10の外から多関節ロボット10に作用する力である。例えば慣性力除外部114は、トルクセンサ21,22,23,24,25,26が検出するトルクから、慣性力算出部113が算出した慣性トルクを減算して関節51,52,53,54,55,56に作用する外力トルク(外力に起因して生じるトルク)を算出する。
外力算出部115は、外力センサ20の検出値に基づいて、ハンド13(多関節ロボット10のうちワークを把持する部分)に作用する外力を算出する。以下、ハンド13に作用する外力を「ハンド外力」という。例えば外力算出部115は、関節51,52,53,54,55,56の外力トルクの発生要因がハンド外力のみであるという仮定に基づいて、関節51,52,53,54,55,56の外力トルクに対応するハンド外力を算出する。なお、ハンド13の複数の指部14がワークを把持する力は、ハンド13における内力に相当するのでハンド外力に含まれない。
接触検知部116は、外力センサ20の検出値に基づいて多関節ロボット10と物体との接触を検知する。例えば接触検知部116は、関節51,52,53,54,55,56の少なくともいずれかの外力トルクが所定の接触閾値を超えている場合に、多関節ロボット10と物体との接触を検知する。ここでの接触の検知とは、例えば、外力緩和のために多関節ロボット10に退避動作を行わせることを必要とする接触(例えば多関節ロボット10の動作中における物体との衝突)の検知を意味する。
重量検出部117は、外力センサ20の検出値に基づいてワークの重量を検出する。例えば重量検出部117は、関節51,52,53,54,55,56の外力トルクに基づいてワークの重量を検出する。例えば重量検出部117は、外力算出部115が算出するハンド外力がワークの重力に相当するという仮定に基づいてワークの重量を検出する。
モデル補正部118は、ハンド13の重量に重量検出部117による検出結果を加算して、モデル保持部111が記憶する多関節ロボット10のモデルを補正する。退避制御部119は、物体との接触に起因する外力の増加を抑制するように多関節ロボット10を制御する。例えば退避制御部119は、多関節ロボット10の動作を停止させる。退避制御部119は、多関節ロボット10のうち外力が作用する部分を外力の方向に移動させるように多関節ロボット10を制御してもよい。例えば退避制御部119は、外力トルクに従って関節51,52,53,54,55,56を動作させるように多関節ロボット10を制御してもよい。
コントローラ100は、重量の検出結果に基づいて多関節ロボット10の動作を変更するように構成されていてもよい。例えば仕分制御部112は、重量検出部117によるワークの重量の検出結果に基づいて、ワークの仕分け作業を多関節ロボット10に実行させる。例えば仕分制御部112は、重量検出部117によるワークの重量の検出結果と、複数の重量クラスごとに予め定められた複数の搬送先とに基づいてワークの搬送先を変更する。
コントローラ100は、重量の検出結果に基づいてワークの異常を検出するように構成されていてもよい。例えばコントローラ100は、ワーク異常検知部121を更に有する。ワーク異常検知部121は、重量検出部117によるワークの重量の検出結果に基づいてワークの異常を検知する。例えばワーク異常検知部121は、ワークの設計上の重量と、重量検出部117によるワークの重量の検出結果との差が所定の検知閾値を超えている場合にワークの異常を検知する。
コントローラ100は、ハンド13がワークを把持しているか否かに基づいて、接触の検知と重量の検出とのいずれかを選択するように構成されていてもよい。コントローラ100は、ハンド13が把持しているワークが浮上しているか否かに更に基づいて接触の検知と重量の検出とのいずれかを選択するように構成されていてもよい。コントローラ100は、物体センサ30の検出結果に更に基づいて接触の検知と重量の検出とのいずれかを選択するように構成されていてもよい。コントローラ100は、ハンド13に作用する外力の方向に更に基づいて接触の検知と重量の検出とのいずれかを選択するように構成されていてもよい。
例えばコントローラ100は、機能モジュールとして、ステータス保持部122と、把持検知部123と、浮上検知部124と、搬送完了検知部125と、解放検知部126と、ステータス更新部127と、処理選択部128とを更に有する。ステータス保持部122は、多関節ロボット10の動作のステータス情報を記憶する。例えばステータス保持部122は、多関節ロボット10の動作が、予め設定された複数のステータスのいずれであるかを記憶する。複数のステータスは、ハンド13がワークを把持していない「解放」と、ハンド13が把持するワークを多関節ロボット10が浮上させている「浮上」と、ワークが搬送先に到達している「搬送完了」とを含む。
把持検知部123は、例えば仕分制御部112による動作指令に基づいて、ハンド13がワークを把持したことを検知する。例えば把持検知部123は、ハンド13を閉じる動作指令が仕分制御部112により出力されたことに基づいてハンド13がワークを把持したことを検知する。浮上検知部124は、ハンド13が把持しているワークの浮上を多関節ロボット10の動作に基づいて検知する。ここでの浮上は、設置面より上方に位置するワークがハンド13のみによって支持されている状態を意味する。例えば浮上検知部124は、角度センサ71,72,73,74,75,76による検出値とモデル保持部111が記憶するモデルとに基づく順運動学演算によりハンド13の上昇及びワークの浮上を検知する。
なお、人協働型のシステムにおいては、設置面より上方において人と多関節ロボット10との間でワークの受け渡しが行われる場合もあり得る。この場合、浮上検知部124は、設置面より上方においてハンド13がワークを把持したことと、ハンド13に作用する下向きの外力の増加とに基づいてワークの浮上を検知することが可能である。
搬送完了検知部125は、多関節ロボット10によるワークの搬送完了を検知する。例えば搬送完了検知部125は、角度センサ71,72,73,74,75,76による検出値とモデル保持部111が記憶するモデルとに基づく順運動学演算によりワークが搬送先に到達したことを検知する。
解放検知部126は、例えば仕分制御部112による動作指令に基づいて、ハンド13がワークを解放したことを検知する。例えば解放検知部126は、ハンド13を開く動作指令が仕分制御部112により出力されたことに基づいてハンド13がワークを解放したことを検知する。
ステータス更新部127は、把持検知部123、浮上検知部124、搬送完了検知部125及び解放検知部126による検知結果に基づいて、ステータス保持部122が記憶するステータスを更新する。例えばステータス更新部127は、ハンド13によるワークの把持を把持検知部123が検知した場合に、ステータスを「解放」から「把持」に変更する。また、ステータス更新部127は、ワークの浮上を浮上検知部124が検知した場合に、ステータスを「把持」から「浮上」に変更する。また、ステータス更新部127は、搬送先へのワークの到達を搬送完了検知部125が検知した場合に、ステータスを「浮上」から「搬送完了」に変更する。また、ステータス更新部127は、ワークの解放を解放検知部126が検知した場合に、ステータスを「搬送完了」から「解放」に変更する。
処理選択部128は、把持検知部123による検知結果に基づいて、接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択する。処理選択部128は、浮上検知部124による検知結果に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。処理選択部128は、物体センサ30の検出結果に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。処理選択部128は、外力算出部115により算出されるハンド外力の方向に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。
例えば処理選択部128は、ステータス保持部122が記憶するステータスと、物体センサ30の検出結果とに基づいて、接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。なお、ここでの選択は、接触の検知と重量の検出とのいずれか一方を実行させて他方を実行させないことと、接触の検知と重量の検出との両方を実行させていずれか一方の結果を選択することとの両方を含む。
図3に示すように、コントローラ100は、回路190を備える。回路190は、少なくとも一つのプロセッサ191と、メモリ192と、ストレージ193と、入出力ポート194と、ドライバ195とを含む。ストレージ193は、コンピュータによって読み取り可能な不揮発型の記憶媒体(例えばフラッシュメモリ)である。ストレージ193は、予め設定された動作パターンに従って多関節ロボット10を動作させることと、多関節ロボット10に作用する外力の検出値に基づいて多関節ロボット10と物体との接触を検知することと、外力の検出値に基づいてワークの重量を検出することとをコントローラ100に実行させるためのプログラムを記憶している。例えばストレージ193は、コントローラ100により上述した各機能モジュールを構成するためのプログラムを記憶している。
メモリ192は、ストレージ193からロードしたプログラム及びプロセッサ191による演算結果等を一時的に記憶する。プロセッサ191は、メモリ192と協働して上記プログラムを実行することで、コントローラ100の各機能モジュールを構成する。入出力ポート194は、プロセッサ191からの指令に応じてトルクセンサ21~26、物体センサ30及び角度センサ71~76からの信号を取得する。ドライバ195は、プロセッサ191からの指令に応じてアクチュエータ61~66に駆動電力を出力する。コントローラ100は、必ずしもプログラムにより各構成が構成されるものに限られない。コントローラ100の少なくとも一部の機能モジュール、例えば通信を制御する機能モジュールが、専用の論理回路又はこれを集積したASIC(Application Specific Integrated Circuit)により構成されていてもよい。
〔制御手順〕
続いて、ロボットの制御方法の一例として、コントローラ100が実行する制御手順を説明する。この制御手順は、予め設定された動作パターンに従って多関節ロボット10を動作させることと、多関節ロボット10に作用する外力の検出値に基づいて多関節ロボット10と物体との接触を検知することと、外力の検出値に基づいてワークの重量を検出することとを含む。
例えばコントローラ100は、動作パターンに基づく目標位置に多関節ロボット10を追従させることを所定の制御周期で繰り返す。例えば図4に示すように、コントローラ100は、まずステップS01,S02を実行する。ステップS01では、仕分制御部112が、予め設定された動作パターンに基づいて、最初の目標位置を設定する。目標位置は、例えば関節51,52,53,54,55,56の目標動作角度を含む。ステップS02では、ステータス更新部127が、ステータス保持部122のステータスを「解放」に変更する。
次に、コントローラ100はステップS03,S04を実行する。ステップS03では、仕分制御部112が、目標位置と、多関節ロボット10の位置との偏差を算出する。例えば、仕分制御部112は、関節51,52,53,54,55,56の目標動作角度と、角度センサ71,72,73,74,75,76による検出値との偏差を算出する。ステップS04では、仕分制御部112が、多関節ロボット10を目標位置に追従させる。例えば、仕分制御部112は、関節51,52,53,54,55,56の動作角度を目標動作角度に追従させる。より具体的に、例えば仕分制御部112は、ステップS03で算出した偏差に比例演算、比例・積分演算、又は比例・積分・微分演算を施して得られる動作指令に基づいてアクチュエータ61,62,63,64,65,66を動作させる。
次に、コントローラ100はステップS05を実行する。ステップS05では、慣性力算出部113が、多関節ロボット10のモデルに基づいて、多関節ロボット10の動作に伴う慣性力を算出し、慣性力除外部114が、外力センサ20による検出値から慣性力を除外して外力を算出する。また、ステップS05では、処理選択部128が、慣性力除外部114による算出結果(例えば上記外力トルク)に基づいて、多関節ロボット10に作用する外力があるかを確認する。例えば処理選択部128は、慣性力除外部114により算出結果が所定の検出閾値を超えている場合に、多関節ロボット10に作用する外力があると判定してもよい。
ステップS05において多関節ロボット10に作用する外力があると判定した場合、コントローラ100はステップS06を実行する。ステップS06は、外力に応じて接触の検知又はワークの重量の検出等を実行することを含む。ステップS06の具体的内容については後述する。
次に、コントローラ100はステップS07を実行する。ステップS05において多関節ロボット10に作用する外力がないと判定した場合、コントローラ100はステップS06を実行することなくステップS07を実行する。ステップS07では、仕分制御部112が、動作パターンで規定された全ての動作が完了したか否かを確認する。
ステップS07において全ての動作が完了していないと判定した場合、コントローラはステップS08,S09,S11を実行する。ステップS08では、仕分制御部112が動作パターンに基づいて次の目標位置を設定する。ステップS09では、ステータス更新部127は、把持検知部123、浮上検知部124、搬送完了検知部125及び解放検知部126による検知結果に基づいて、ステータス保持部122が記憶するステータスを更新する。ステップS09の具体的内容については後述する。ステップS11では、仕分制御部112が制御周期の経過を待機する。
その後、コントローラ100は処理をステップS03に戻す。以後、動作パターンで規定された全ての動作が完了するまでは、必要に応じ外力対応処理を実行しながら、多関節ロボット10の制御が制御周期で繰り返される。ステップS07において全ての動作が完了していると判定した場合、コントローラ100は多関節ロボット10の制御を完了する。
図5及び図6は、ステップS06の外力対応処理手順を例示するフローチャートである。図5に示すように、コントローラ100は、まずステップS21を実行する。ステップS21では、処理選択部128が、ステータス保持部122が記憶するステータスが「浮上」であるか否かを確認する。
ステップS21においてステータスが「浮上」であると判定した場合、コントローラ100はステップS22,S23を実行する。ステップS22では、外力算出部115が外力センサ20の検出値に基づいてハンド外力を算出する。ステップS23では、処理選択部128が、物体センサ30による検出結果に基づいて、多関節ロボット10の周辺に物体が存在しないかを確認する。
ステップS23において多関節ロボット10の周辺に物体が存在しないと判定した場合、コントローラ100はステップS24,S25,S26,S27を実行する。ステップS24では、重量検出部117が、外力算出部115が算出したハンド外力をワークの重量として検出する。ステップS25では、モデル補正部118が、ハンド13の重量に重量検出部117による検出結果を加算して、モデル保持部111が記憶する多関節ロボット10のモデルを補正する。ステップS26では、ワーク異常検知部121が、重量検出部117によるワークの重量の検出結果に基づいてワークの異常の有無を確認する。ワークの異常を検知した場合、ワーク異常検知部121はワークの異常をモニタ等に表示する。ステップS27では、仕分制御部112が、重量検出部117による検出結果と、複数の重量クラスごとに予め定められた複数の搬送先とに基づいてワークの搬送先を決定する。これにより、ワークの仕分けが実行されることとなる。
ステップS23において多関節ロボット10の周辺に物体が存在すると判定した場合、コントローラはステップS28を実行する。ステップS28では、処理選択部128が、ハンド外力が鉛直下向きであるかを確認する。例えば処理選択部128は、ハンド外力が下向きであり、ハンド外力の水平方向成分が実質的にゼロであるかを確認する。実質的にゼロであるとは、誤差として無視可能な値であることを意味する。以下においても同様である。
ステップS28においてハンド外力が鉛直下向きであると判定した場合、コントローラ100は上記ステップS24,S25,S26,S27を実行する。ステップS28においてハンド外力が鉛直下向きでないと判定した場合、コントローラ100はステップS31,S32を実行する。ステップS31では、接触検知部116が、多関節ロボット10と物体との接触を検知する。ステップS32では、退避制御部119が、物体との接触に起因する外力の増加を抑制するように多関節ロボット10を制御する。
ステップS21においてステータスが「浮上」でないと判定した場合、図6に示すようにコントローラ100はステップS41を実行する。ステップS41では、ステータス保持部122が記憶するステータスが「搬送完了」であるか否かを処理選択部128が確認する。
ステップS41においてステータスが「搬送完了」であると判定した場合、コントローラ100はステップS42,S43を実行する。ステップS42では、外力算出部115が外力センサ20の検出値に基づいてハンド外力を算出する。ステップS43では、処理選択部128が、物体センサ30による検出結果に基づいて、多関節ロボット10の周辺に物体が存在しないかを確認する。
ステップS43において多関節ロボット10の周辺に物体が存在しないと判定した場合、コントローラ100はステップS44を実行する。ステップS44では、仕分制御部112が搬送先へのワークの載置を検知する。
ステップS43において多関節ロボット10の周辺に物体が存在すると判定した場合、コントローラ100はステップS45を実行する。ステップS45では、処理選択部128が、ハンド外力が鉛直上向きであるかを確認する。例えば処理選択部128は、ハンド外力が上向きであり、ハンド外力の水平方向成分が実質的にゼロであるかを確認する。ステップS45においてハンド外力が鉛直上向きであると判定した場合、コントローラ100は上記ステップS44を実行する。
ステップS41においてステータスが「搬送完了」でないと判定した場合、及びステップS45においてハンド外力が鉛直上向きでないと判定した場合、コントローラ100はステップS46,S47を実行する。ステップS46では、接触検知部116が多関節ロボット10と物体との接触を検知する。ステップS47では、退避制御部119が、物体との接触に起因する外力の増加を抑制するように多関節ロボット10を制御する。以上で外力対応処理手順が完了する。
図7は、ステップS09のステータス更新手順を例示するフローチャートである。図7に示すように、コントローラ100は、まずステップS51を実行する。ステップS51では、ステータス保持部122が記憶するステータスが「解放」であるか否かをステータス更新部127が確認する。
ステップS51においてステータスが「解放」であると判定した場合、コントローラ100はステップS52を実行する。ステップS52では、ハンド13がワークを把持したか否かを把持検知部123が検知する。ステップS52においてハンド13がワークを把持したと判定した場合、コントローラ100はステップS53を実行する。ステップS53では、ステータス保持部122が記憶するステータスをステータス更新部127が「解放」から「把持」に変更する。ステップS52においてハンド13がワークを把持していないと判定した場合、コントローラ100はステップS53を実行しない。
ステップS51においてステータスが「解放」でないと判定した場合、コントローラ100はステップS54を実行する。ステップS54では、ステータス保持部122が記憶するステータスが「把持」であるか否かをステータス更新部127が確認する。
ステップS54においてステータスが「把持」であると判定した場合、コントローラ100はステップS55を実行する。ステップS55では、ハンド13が把持しているワークが浮上しているか否かを浮上検知部124が検知する。ステップS55においてワークが浮上していると判定した場合、コントローラ100はステップS56を実行する。ステップS56では、ステータス保持部122が記憶するステータスをステータス更新部127が「把持」から「浮上」に変更する。ステップS55においてワークが浮上していないと判定した場合、コントローラ100はステップS56を実行しない。
ステップS54においてステータスが「把持」でないと判定した場合、コントローラ100はステップS57を実行する。ステップS57では、ステータス保持部122が記憶するステータスが「浮上」であるか否かをステータス更新部127が確認する。
ステップS57においてステータスが「浮上」であると判定した場合、コントローラ100はステップS58を実行する。ステップS58では、ワークが搬送先に到達したか否かを搬送完了検知部125が検知する。ステップS58においてワークが搬送先に到達したと判定した場合、コントローラ100はステップS59を実行する。ステップS59では、ステータス保持部122が記憶するステータスをステータス更新部127が「浮上」から「搬送完了」に変更する。ステップS58においてワークが搬送先に到達していないと判定した場合、コントローラ100はステップS59を実行しない。
ステップS57においてステータスが「浮上」でないと判定した場合、コントローラ100はステップS61を実行する。ステップS61では、ハンド13がワークを解放したか否かを解放検知部126が検知する。ステップS61においてハンド13がワークを解放したと判定した場合、コントローラ100はステップS62,S63を実行する。ステップS62では、ステータス保持部122が記憶するステータスをステータス更新部127が「搬送完了」から「解放」に変更する。ステップS63では、モデル保持部111が記憶する多関節ロボット10のモデルをモデル補正部118が補正前に戻す。すなわちモデル補正部118は、ハンド13の重量からワークの重量を減算する。ステップS61においてハンド13がワークを解放していないと判定した場合、コントローラ100はステップS62,S63を実行しない。以上でステータス更新手順が完了する。
〔本実施形態の効果〕
以上に説明したように、ロボットシステム1は、ワークを把持して搬送する多関節ロボット10と、多関節ロボット10に作用する外力を検出する外力センサ20と、外力センサ20の検出値に基づいて多関節ロボット10と物体との接触を検知する接触検知部116と、外力センサ20の検出値に基づいてワークの重量を検出する重量検出部117と、を備える。
このロボットシステム1によれば、外力情報を、多関節ロボット10と周辺物体との接触の検知と、ワークの重量の検出とに活用することができる。従って、多関節ロボット10に作用する外力の情報をより有効に活用することができる。
ロボットシステム1は、多関節ロボット10がワークを把持していることを検知する把持検知部123と、把持検知部123による検知結果に基づいて、接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択する処理選択部128と、を更に備えていてもよい。
多関節ロボット10がワークを把持していない場合、多関節ロボット10に作用する外力がワークの重量に起因している可能性は低い。これに比べ、多関節ロボット10がワークを把持している場合、多関節ロボット10に作用する外力がワークの重量に起因している可能性は高い。すなわち、多関節ロボット10がワークを把持しているか否かは、多関節ロボット10に作用する外力がワークの重量に起因する確率に影響する。このため、把持検知部123による検出結果に基づくことで、接触検知部116による接触の検知と、重量検出部117による重量の検出とを高い信頼性で選択することができる。従って、多関節ロボット10に作用する外力の情報を更に有効に活用することができる。
ロボットシステム1は、多関節ロボット10の動作に基づいて多関節ロボット10が把持しているワークの浮上を検知する浮上検知部124を更に備え、処理選択部128は、浮上検知部124による検知結果に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。
多関節ロボット10が把持しているワークを浮上させている場合、多関節ロボット10に作用する外力がワークの重量に起因している可能性はより高い。すなわち、多関節ロボット10がワークを浮上させているか否かは、多関節ロボット10に作用する外力がワークの重量に起因する確率に更に影響する。このため、浮上検知部124による検出結果に更に基づくことで、接触検知部116による接触の検知と、重量検出部117による重量の検出とをより高い信頼性で選択することができる。従って、多関節ロボット10に作用する外力の情報を更に有効に活用することができる。
ロボットシステム1は、多関節ロボット10の周囲に物体が存在するか否かを検出する物体センサ30を更に備え、処理選択部128は、物体センサ30の検出結果に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。
多関節ロボット10の周囲に物体が存在しない場合、多関節ロボット10に作用する外力が物体との接触に起因している可能性は低い。これに比べ、多関節ロボット10の周囲に物体が存在する場合、多関節ロボット10に作用する外力が物体との接触に起因する可能性は高い。すなわち、多関節ロボット10の周囲に物体が存在するか否かは、多関節ロボット10に作用する外力が物体との接触に起因する確率に影響する。このため、物体センサ30による検出結果に更に基づくことで、接触検知部116による接触の検知と、重量検出部117による重量の検出とをより高い信頼性で選択することができる。従って、多関節ロボット10に作用する外力の情報を更に有効に活用することができる。
ロボットシステム1は、外力センサ20の検出値に基づいて、多関節ロボット10のうちワークを把持する部分に作用する外力を算出する外力算出部115を更に備え、処理選択部128は、外力算出部115により算出される外力の方向に更に基づいて接触検知部116による接触の検知と重量検出部117による重量の検出とのいずれかを選択してもよい。
多関節ロボット10のうちワークを把持する部分(以下、「把持部」という。)に作用する外力において、鉛直下方に向かう成分の割合が高くなるにつれて、多関節ロボット10に作用する外力がワークの重量に起因している可能性が高くなる。すなわち、把持部に作用する外力の向きは、多関節ロボット10に作用する外力がワークの重量に起因する確率に影響する。このため、外力算出部115により算出される力の方向に更に基づくことで、接触検知部116による接触の検知と、重量検出部117による重量の検出とをより高い信頼性で選択することができる。従って、多関節ロボット10に作用する外力の情報を更に有効に活用することができる。
外力センサ20は、多関節ロボット10の少なくとも一つの関節51~56に作用するトルクを検出するトルクセンサ21~26を含んでいてもよい。
ロボットシステム1は、多関節ロボット10のモデルに基づいて、多関節ロボット10の動作に伴う慣性力を算出する慣性力算出部113と、多関節ロボット10のうちワークを把持する部分の重量に重量検出部117による検出結果を加算してモデルを補正するモデル補正部118と、を更に備え、接触検知部116は、モデル補正部118により補正されたモデルに基づき慣性力算出部113が算出した慣性力と、外力センサ20の検出値とに基づいて多関節ロボット10と物体との接触を検知してもよい。この場合、把持部の重量に重量検出部117による検出結果を加算してモデルを補正することで、慣性力算出部113が算出する慣性力の精度が高まる。これにより、慣性力に起因する成分を高い精度で外力から取り除くことができる。このため、外力に基づく接触検知の精度を更に向上させることができる。従って、多関節ロボット10に作用する外力の情報を更に有効に活用することができる。
ロボットシステム1は、重量検出部117による重量の検出結果に基づいて、ワークの仕分け作業を多関節ロボット10に実行させる仕分制御部112を更に備えていてもよい。この場合、重量検出部117による検出結果を更に有効に活用することができる。
ロボットシステム1は、重量検出部117による重量の検出結果に基づいてワークの異常を検知するワーク異常検知部121を更に備えていてもよい。この場合、重量検出部117による検出結果を更に有効に活用することができる。
以上、実施形態について説明したが、本発明は必ずしも上述した形態に限定されるものではなく、その要旨を逸脱しない範囲で様々な変形が可能である。例えば、トルクセンサ21,22,23,24,25,26のいずれかを省略してもよい。例えば外力センサ20は、トルクセンサ21,22,23を含み、トルクセンサ24,25,26を含んでいなくてもよい。また、外力センサ20は、トルクセンサ21,22,23,25を含み、トルクセンサ24,26を含んでいなくてもよい。