以下、本開示の実施形態の一例について説明する。図1は、本実施形態に係る数値制御システム1の機能ブロック図である。
数値制御システム1は、図示しないワークを加工する工作機械2と、この工作機械2の動作を制御する数値制御装置(CNC)4と、工作機械2の近傍に設けられた協働ロボット3と、協働ロボット3の動作を制御するロボット制御装置5と、を備える。数値制御システム1は、互いに通信可能に接続された数値制御装置4及びロボット制御装置5を用いることによって、工作機械2及び協働ロボット3の動作を連動して制御する。
工作機械2は、数値制御装置4から送信される工作機械制御信号に応じて図示しないワークを加工する。ここで工作機械2は、例えば、旋盤、ボール盤、フライス盤、研削盤、レーザ加工機、及び射出成形機等であるが、これらに限らない。
協働ロボット3は、ロボット制御装置5による制御下において動作し、例えば工作機械2によって加工されるワークに対し所定の作業を行う。協働ロボット3は、例えば多関節ロボットであり、そのアーム先端部3aにはワークを把持したり、加工したり、検査したりするためのツール3bが取り付けられている。以下では、協働ロボット3は、6軸の多関節ロボットとした場合について説明するが、これに限らない。また以下では、協働ロボット3は、6軸の多関節ロボットとした場合について説明するが、軸数はこれに限らない。
協働ロボット3は、接触停止機能、退避モード機能、反転動作機能等のような機能を有し、人と協働で安全に作業することができる。接触停止機能は、人と軽い力(例えば、10から20N(すなわち、1から2kgf))で接触したとき、即座に停止する機能である。退避モード機能は、人が協働ロボット3のアームを押すことによってアームを各軸において退避可能な機能である。反転動作機能は、協働ロボット3が硬い物体と接触した場合、アームが即座に反転することによって、挟み込みを軽減する機能である。協働ロボット3は、人との接触等のような外力を検出するために、外力検出センサ等によって構成される外力検出部31(図2参照)を備える。外力検出センサは、例えば、トルクセンサ、力センサ等である。すなわち、協働ロボット3は、外力検出センサによって人との接触を検知し、ロボット制御装置5は、外力検出センサによって検出された外力に応じて協働ロボット3の動作を停止する。これにより、協働ロボット3は、人と協働で安全に作業することができる。
数値制御装置4及びロボット制御装置5は、それぞれCPU(Central Processing Unit)等の演算処理手段、各種コンピュータプログラムを格納したHDD(Hard Disk Drive)やSSD(Solid State Drive)等の補助記憶手段、演算処理手段がコンピュータプログラムを実行する上で一時的に必要とされるデータを格納するためのRAM(Random Access Memory)といった主記憶手段、オペレータが各種操作を行うキーボードといった操作手段、及びオペレータに各種情報を表示するディスプレイといった表示手段等のハードウェアによって構成されるコンピュータである。これら数値制御装置4及びロボット制御装置5は、例えばイーサネット(登録商標)によって相互に各種信号を送受信することが可能となっている。
図2は、本実施形態に係る数値制御装置4及びロボット制御装置5の機能ブロック図である。先ず、数値制御装置4の詳細な構成について説明する。図2に示すように数値制御装置4は、上記ハードウェア構成によって、工作機械2の動作を制御する機能、協働ロボット3の制御軸の動作経路を生成する機能等のような各種機能を実現する。
数値制御装置4は、数値制御プログラムを用いてロボット制御装置5を介して協働ロボット3を制御する。すなわち、数値制御装置4は、ロボット用の数値制御プログラムに従って、協働ロボット3及びツール3bの動作を制御するための各種指令を生成し、ロボット制御装置5へ送信する。より具体的には、数値制御装置4は、プログラム入力部41と、解析部42と、動作制御部43と、記憶部44と、ロボット指令信号生成部45と、データ送受信部46と、負荷推定指令部47と、を備える。
プログラム入力部41は、複数のロボット指令ブロックによって構成されるロボット用の数値制御プログラムを記憶部44から読み出し、これを逐次解析部42へ入力する。
解析部42は、プログラム入力部41から入力される数値制御プログラムに基づく指令種別を指令ブロックごとに解析し、その解析結果を動作制御部43及びロボット指令信号生成部45へ出力する。より具体的には、解析部42は、指令ブロックの指令種別が工作機械2に対する工作機械用数値制御指令である場合、この工作機械用数値制御指令を動作制御部43へ送信する。解析部42は、指令ブロックの指令種別が協働ロボット3に対するロボット用数値制御指令である場合、このロボット用数値制御指令(以下、ロボット制御指令ともいう)をロボット指令信号生成部45へ出力する。
動作制御部43は、解析部42から送信される解析結果に応じて工作機械2の動作を制御するための工作機械制御信号を生成し、工作機械2の各種軸を駆動するアクチュエータへ入力する。工作機械2は、動作制御部43から入力される工作機械制御信号に応じて動作し、図示しないワークを加工する。
記憶部44は、例えば、オペレータによる操作に基づいて作成された複数の数値制御プログラムを格納する。より具体的には、記憶部44は、工作機械2の動作を制御するための工作機械2に対する複数の指令ブロックや協働ロボット3の動作を制御するための協働ロボット3に対する複数の指令ブロック等によって構成される数値制御プログラムを格納する。記憶部44に格納されている数値制御プログラムは、GコードやMコード等、工作機械2の動作を制御するため既知のプログラム言語で記述されている。
また、記憶部44は、例えば、上記数値制御プログラムの下で作動する工作機械2の各種軸の位置(すなわち、工作機械2の刃物台やテーブル等の位置)を示す機械座標値を格納する。なお、これら機械座標値は、工作機械2上又は工作機械2の近傍の任意の位置に定められた基準点を原点とする工作機械座標系の下で定義される。記憶部44には、数値制御プログラムの下で逐次変化する機械座標値の最新値が格納されるよう、図示しない処理によって逐次更新される。
また、記憶部44は、例えば、ロボット制御装置5の制御下で作動する協働ロボット3の制御点(例えば、協働ロボット3のアーム先端部3a)の位置及び姿勢、換言すれば協働ロボット3の各制御軸の位置を示すロボット座標値が格納されている。なお、これらロボット座標値は、上述したように工作機械座標系とは異なるロボット座標系の下で定義される。記憶部44には、数値制御プログラムの下で逐次変化するロボット座標値の最新値が格納されるよう、図示しない処理によりロボット制御装置5から取得されたロボット座標値によって逐次更新される。
また、記憶部44は、例えば、オペレータにより入力された協働ロボット3の始点及び終点といった教示位置を記憶する。具体的には、記憶部44は、ティーチペンダント等から入力された協働ロボット3の教示位置、キーボード等から入力された教示位置等を記憶する。協働ロボット3の教示位置には、協働ロボット3の各制御軸の位置を示すロボット座標値が含まれ、これらロボット座標値は、工作機械座標系とは異なるロボット座標系の下で定義される。
ロボット指令信号生成部45は、解析部42から入力されるロボット指令ブロック毎の解析結果に基づいて、ロボット指令ブロック毎にロボット指令信号を生成し、生成したロボット指令信号をデータ送受信部46に書き込む。
具体的には、ロボット指令信号生成部45は、解析部42から入力される解析結果としてのロボット用数値制御指令に基づいて、ロボット指令ブロック毎にロボット指令信号を生成し、生成したロボット指令信号をデータ送受信部46に書き込む。
データ送受信部46は、ロボット制御装置5のデータ送受信部60との間で指令及びロボット座標値等の各種データを送受信する。具体的には、データ送受信部46は、ロボット指令信号生成部45によって生成されたロボット指令信号をロボット制御装置5のデータ送受信部60へ送信する。
負荷推定指令部47は、解析部42により解析したロボット制御指令に応じて、負荷推定動作のための負荷推定動作信号を生成する。具体的には、解析部42は、数値制御プログラムから負荷推定動作指令が抽出されると、負荷推定指令部47へ指令を通知する。負荷推定指令部47は、解析部42からの指令の通知に応じて、負荷推定動作信号を生成し、ロボット指令信号生成部45へ通知する。
ロボット指令信号生成部45は、負荷推定動作信号を含むロボット指令信号を生成し、データ送受信部46を介してロボット制御装置5へ送信する。これにより、ロボット制御装置5は、負荷推定動作信号に応じて、負荷推定動作を実行する。
ここで、負荷推定動作は、協働ロボット3の負荷設定情報を算出するために、協働ロボット3の移動方向、移動速度、回転軸の回転角度、負荷重量、協働ロボット3によるワークの把持状態等を用いて、協働ロボット3を移動させること、協働ロボット3において負荷の情報を設定するための負荷設定情報を算出すること、算出した負荷設定情報を負荷のパラメータ(例えば、負荷設定番号)と対応付けて記憶部51に記憶すること等を含む。
次に、ロボット制御装置5の構成について詳細に説明する。図2に示すように、ロボット制御装置5には、上記ハードウェア構成によって、記憶部51、解析部52、ロボット命令生成部53、プログラム管理部54、軌跡制御部55、キネマティクス制御部56、サーボ制御部57、負荷設定選択部58、ダイナミクス制御部59、データ送受信部60、負荷推定実行部61、及び接触制御部62等の各種機能が実現される。ロボット制御装置5は、これらのような機能部を用いることによって、数値制御装置4から送信される指令に基づいて協働ロボット3の動作を制御する。
記憶部51は、協働ロボット3を制御するためのロボットプログラム及び各種情報を記憶する。また、記憶部51は、協働ロボット3の負荷設定を記憶する。なお、本実施形態では、記憶部51は、ロボット制御装置5に設けられているが、記憶部51は、数値制御装置4に設けられてもよく、数値制御装置4及びロボット制御装置5の外部の電子機器や外部サーバー等に設けられてもよい。
データ送受信部60は、数値制御装置4のデータ送受信部46から送信されるロボット指令信号を受信する。また、データ送受信部60は、受信したロボット指令信号を逐次、解析部52へ出力する。
解析部52は、データ送受信部60から入力されるロボット指令信号を解析する。また、解析部52は、その解析結果をロボット命令生成部53へ出力する。
ロボット命令生成部53は、解析部52から入力されるロボット指令信号の解析結果に基づいて、ロボット指令信号に応じたロボット命令を生成する。ロボット命令生成部53は、生成したロボット命令をプログラム管理部54へ出力する。
プログラム管理部54は、ロボット命令生成部53からロボット命令が入力されると、ロボット命令を逐次実行することにより、上記ロボット指令信号に応じた協働ロボット3の動作計画を生成し、軌跡制御部55へ出力する。
また、プログラム管理部54は、ロボット命令生成部53から入力されるロボット命令がブロックロボット命令である場合には、記憶部51に格納されているロボットプログラムに、入力されたブロックロボット命令を追加する。これにより記憶部51には、数値制御装置4から送信されるロボット指令信号に応じたロボットプログラムが生成されて記憶される。記憶されたロボットプログラムは、プログラム管理部54がロボット命令としてロボットプログラム起動指令を受けることにより、起動及び再生される。
軌跡制御部55は、プログラム管理部54から動作計画が入力されると、協働ロボット3の制御点の時系列データを算出し、キネマティクス制御部56へ出力する。
キネマティクス制御部56は、入力された時系列データから協働ロボット3の各関節の目標角度を算出し、サーボ制御部57へ入力する。
サーボ制御部57は、キネマティクス制御部56から入力される目標角度が実現するように協働ロボット3の各サーボモータをフィードバック制御することによって協働ロボット3に対するロボット制御信号を生成し、協働ロボット3のサーボモータへ入力する。また、サーボ制御部57は、後述のダイナミクス制御部59により計算されたトルクを反映したロボット制御信号を生成する。これにより、ロボット制御装置5は、負荷設定情報に基づいて協働ロボット3を制御可能となっている。
負荷設定選択部58は、記憶部51に記憶された負荷設定情報を用いて、協働ロボット3において負荷の情報を設定する。具体的には、負荷設定選択部58は、解析部52により解析されたロボット指令信号に応じて、記憶部51に記憶された負荷設定情報を読み出し、負荷設定情報をダイナミクス制御部59へ通知する。
ダイナミクス制御部59は、負荷設定選択部58により通知された負荷設定情報に基づいて、逆動力学計算により協働ロボット3に入力するトルクを計算する。ダイナミクス制御部59は、計算により取得したトルクを、サーボ制御部57へ出力する。
ここで、協働ロボット3の逆動力学計算とは、協働ロボット3の動作軌跡計画で算出される望みの運動(各関節の位置、速度、加速度の時系列データ)に基づいて、協働ロボット3に加わる手先負荷や重力、自重を考慮し、そのような応答を実現するための各モータへの入力トルクを計算する手法である。このような逆動力学計算に関するものとして、例えば、計算トルク法やニュートン・オイラー法等の数値計算方法が開示されている(例えば、特開平8-118275号公報、特開2015-58520号公報)。
負荷推定実行部61は、負荷推定動作信号に応じて、接触制御部62が測定した外力に基づいて、協働ロボット3において負荷の情報を設定するための負荷設定情報を算出し、算出した負荷設定情報を負荷のパラメータ(例えば、負荷設定番号)と対応付けて記憶部51に記憶する。
接触制御部62は、負荷推定動作信号に応じて、協働ロボット3の外力検出部31において負荷推定動作時に検出される外力を測定(取得)する。接触制御部62は、測定した外力を負荷推定実行部に通知する。
次に、負荷推定動作の具体的な処理について説明する。数値制御装置4の解析部42は、数値制御プログラム中のロボット制御指令を解析し、数値制御プログラムから負荷推定動作指令が抽出されると、負荷推定指令部47へ指令を通知する。
負荷推定指令部47は、解析部42からの指令の通知に応じて、負荷推定動作信号を生成し、ロボット指令信号生成部45へ通知する。ロボット指令信号生成部45は、解析部42によって解析されたロボット制御指令及び負荷推定動作信号に基づいて、負荷推定動作信号を含むロボット指令信号を生成し、データ送受信部46を介してロボット制御装置5へ送信する。
ロボット命令生成部53は、解析部52により解析されたロボット指令信号における負荷推定動作信号に応じて、協働ロボット3に負荷推定動作を実行させるためのロボット命令を生成する。生成したロボット命令及び上述したようなプログラム管理部54、軌跡制御部55、キネマティクス制御部56、サーボ制御部57、負荷設定選択部58及びダイナミクス制御部59の制御によって、協働ロボット3は、負荷推定動作を実行する。
接触制御部62は、解析部52により解析されたロボット指令信号における負荷推定動作信号に応じて、協働ロボット3の外力検出部31において負荷推定動作時に検出される外力を測定(取得)する。接触制御部62は、測定した外力を負荷推定実行部61に通知する。
負荷推定実行部61は、負荷推定動作信号に応じて、接触制御部62が測定した外力に基づいて、協働ロボット3において負荷の情報を設定するための負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号と対応付けて記憶部51に記憶する。例えば、負荷推定実行部61は、負荷推定動作信号に応じて、接触制御部62が測定した外力と、協働ロボット3の各関節軸におけるトルクセンサのエンコーダ値とから、協働ロボット3のハンドの先端位置及び姿勢を求め、求めた協働ロボット3のハンドの先端位置及び姿勢を用いて、協働ロボット3の負荷設定情報として、協働ロボット3のハンドの重量及び重心位置を算出する。そして、負荷推定実行部61は、算出したハンドの重量及び重心位置を負荷設定番号と対応付けて記憶部51に記憶する。また、例えば、負荷推定実行部61は、接触制御部62が測定した外力に基づいて、協働ロボット3の負荷設定情報として、協働ロボット3のハンドのイナーシャを算出し、算出したハンドのイナーシャを負荷設定番号と対応付けて記憶部51に記憶する。
工作機械2のユーザは、従来、3D CAD上で座標系を設定し、負荷の重量及び重心位置などを算出し、算出した重量及び重心位置などを教示操作盤を操作することによって設定していた。また、工作機械2のユーザは、従来、協働ロボット3の教示操作盤によって負荷推定用のプログラムを作成しておき、ユーザが手動で実行することによって負荷の重量及び重心位置などを算出する場合もあった。本実施形態に係る数値制御装置4は、上述したように、協働ロボット3の負荷設定情報を自動的に算出し、記憶部51に記憶している。そして、数値制御装置4は、負荷の情報を設定する際に、自動的に算出され、かつ記憶部51に記憶された負荷設定情報を用いて、負荷の情報の設定を自動的に実行する。これにより、工作機械2のユーザは、負荷の情報の設定が自動的に行われるため、容易に負荷の情報を設定することができる。
図3は、負荷推定動作指令の例を示す図である。図3に示される例では、負荷設定番号、負荷推定モードOFF指令及び負荷推定モードON指令が対応付けられている。負荷推定モードOFF指令は、G100.0からG109.0のGコードである。負荷推定モードON指令は、G100.1からG109.1のGコードである。
例えば、負荷設定番号1(No.1)に対応する負荷推定モードOFF指令は、G100.0であり、負荷設定番号1(No.1)に対応する負荷推定モードON指令は、G100.1である。
図4は、本実施形態に係る数値制御プログラムの例を示す図である。図5は、図4に示される数値制御プログラムを実行した際における数値制御装置4とロボット制御装置5との間の信号及び情報の流れを示すシーケンス図である。図4及び図5に示される例では、数値制御装置4は、負荷推定動作指令を含む数値制御プログラムを実行し、協働ロボット3によって検出された外力に基づいて負荷設定情報を算出する。
先ず、“M100”が指令され、ロボット制御装置5は、協働ロボット3のハンドを開くように制御する。次いで、“G68.8”が入力され、各軸座標系が選択される。これにより、ロボット制御装置5は、協働ロボット3を各軸座標系において動作させることができる。“G7.3 J1=_J2=_J3=_J4=_J5=_J6=_”が指令されると、ロボット制御装置5は、各軸座標系上の基準位置に協働ロボット3を移動及び位置決めする。なお、コマンド中のアンダーバーの部分には、協働ロボット3の指定位置の座標値が入力される。
次いで、“G100.1”が指令され、負荷設定番号(No.1:ハンド)に対応する負荷推定モードONが通知され、ロボット制御装置5は、負荷推定動作を開始する。次いで、“G68.9”が指令され、直交座標系が選択される。これにより、ロボット制御装置5は、協働ロボット3を直交座標系において動作させることができる。次いで、“G01 X100.0 F1000”が指令され、ロボット制御装置5は、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
次いで、“G68.8”が指令され、各軸座標系が選択される。次いで、“G7.3 J5=45.0 J6=45.0 E25”が指令され、ロボット制御装置5は、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
次いで、“G100.0”が指令され、負荷設定番号(No.1:ハンド)に対応する負荷推定モードOFFが通知され、ロボット制御装置5は、負荷推定動作を停止する。負荷推定実行部61は、接触制御部62が測定した外力に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.1:ハンド)と対応付けて記憶部51に記憶する。
次いで、“G68.9”が指令され、直交座標系が選択される。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上のワーク把持位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“M101”が指令され、ロボット制御装置5は、協働ロボット3のハンドを閉じるように制御し、協働ロボット3は、ワークを把持する。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上の負荷推定動作開始位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“G101.1”が指令され、負荷設定番号(No.2:ハンド+ワーク)に対応する負荷推定モードONが通知され、ロボット制御装置5は、負荷推定動作を開始する。次いで、“G68.9”が指令され、直交座標系が選択される。次いで、“G01 X100.0 F1000”が指令され、ロボット制御装置5は、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
次いで、“G68.8”が指令され、各軸座標系が選択される。次いで、“G7.3 J5=45.0 J6=45.0 E25”が指令され、ロボット制御装置5は、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
次いで、“G101.0”が指令され、負荷設定番号(No.2:ハンド+ワーク)に対応する負荷推定モードOFFが通知され、ロボット制御装置5は、負荷推定動作を停止する。負荷推定実行部61は、接触制御部62が測定した外力に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.2:ハンド+ワーク)と対応付けて記憶部51に記憶する。次いで、“M30”が指令され、数値制御プログラムは終了する。
図6は、負荷推定指令の例を示す図である。図6に示される例では、負荷推定動作指令は、負荷設定番号と対応付けられている。負荷推定動作指令は、G100 X_Y_Z_J5_J6_からG109 X_Y_Z_J5_J6_のGコードである。例えば、負荷設定番号1(No.1)に対応する負荷推定動作指令は、G100 X_Y_Z_J5_J6_である。図6に示される負荷推定動作指令は、負荷推定動作時の協働ロボット3のツールの並進方向(J5軸)及び協働ロボット3の手首軸の回転方向(J6軸)をロボット制御装置5に対して指令する。
図7は、本実施形態に係る数値制御プログラムの例を示す図である。図8は、図7に示される数値制御プログラムを実行した際における数値制御装置4とロボット制御装置5との間の信号及び情報の流れを示すシーケンス図である。図7及び図8に示される例では、数値制御装置4は、負荷推定動作指令を含む数値制御プログラムを実行し、協働ロボット3によって検出された外力に基づいて負荷設定情報を算出する。図7及び図8に示される例では、負荷推定動作指令は、負荷推定動作時の協働ロボット3のツールの並進方向(J5軸)及び協働ロボット3の手首軸の回転方向(J6軸)をロボット制御装置5に対して指令する。
先ず、“M100”が指令され、ロボット制御装置5は、協働ロボット3のハンドを開くように制御する。次いで、“G68.8”が入力され、各軸座標系が選択される。“G7.3 J1=_J2=_J3=_J4=_J5=_J6=_”が指令されると、ロボット制御装置5は、各軸座標系上の基準位置に協働ロボット3を移動及び位置決めする。
次いで、“G100 X100.0 J5=45.0 J6=45.0 F1000 E25”が指令され、負荷設定番号(No.1:ハンド)に対応する負荷設定動作が指令され、ロボット制御装置5は、負荷推定動作を開始する。
ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.1:ハンド)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。
次いで、“G68.9”が指令され、直交座標系が選択される。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上のワーク把持位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“M101”が指令され、ロボット制御装置5は、協働ロボット3のハンドを閉じるように制御し、協働ロボット3は、ワークを把持する。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上の負荷推定動作開始位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“G101 X100.0 J5=45.0 J6=45.0 F1000 E25”が指令され、負荷設定番号(No.2:ハンド+ワーク)に対応する負荷設定動作が指令され、ロボット制御装置5は、負荷推定動作を開始する。ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.2:ハンド+ワーク)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。次いで、“M30”が指令され、数値制御プログラムは終了する。
図9は、負荷推定指令の例を示す図である。図9に示される例では、負荷推定動作指令は、負荷設定番号と対応付けられている。負荷推定動作指令は、G100 X_Y_Z_J5_J6_P_からG109 X_Y_Z_J5_J6_P_のGコードである。例えば、負荷設定番号1(No.1)に対応する負荷推定動作指令は、G100 X_Y_Z_J5_J6_P_である。
図9に示される負荷推定動作指令は、負荷推定動作時の協働ロボット3のツールの並進方向(J5軸)、協働ロボット3の手首軸の回転方向(J6軸)及び負荷重量(P)を、ロボット制御装置5に対して指令する。
図10は、本実施形態に係る数値制御プログラムの例を示す図である。図11は、図10に示される数値制御プログラムを実行した際における数値制御装置4とロボット制御装置5との間の信号及び情報の流れを示すシーケンス図である。図10及び図11に示される例では、数値制御装置4は、負荷推定動作指令を含む数値制御プログラムを実行し、協働ロボット3によって検出された外力に基づいて負荷設定情報を算出する。図10及び図11に示される例では、負荷推定動作指令は、負荷推定動作時の協働ロボット3のツールの並進方向(J5軸)、協働ロボット3の手首軸の回転方向(J6軸)及び負荷重量(P)を、ロボット制御装置5に対して指令する。
先ず、“M100”が指令され、ロボット制御装置5は、協働ロボット3のハンドを開くように制御する。次いで、“G68.8”が入力され、各軸座標系が選択される。“G7.3 J1=_J2=_J3=_J4=_J5=_J6=_”が指令されると、ロボット制御装置5は、各軸座標系上の基準位置に協働ロボット3を移動及び位置決めする。
次いで、“G100 X100.0 J5=45.0 J6=45.0 P300 F1000 E25”が指令され、負荷設定番号(No.1:ハンド)に対応する負荷設定動作が指令され、ロボット制御装置5は、負荷推定動作を開始する。ここで、「P300」は、負荷重量が300gであることを示す。
ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力及び指令された負荷重量に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.1:ハンド)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。
次いで、“G68.9”が指令され、直交座標系が選択される。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上のワーク把持位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“M101”が指令され、ロボット制御装置5は、協働ロボット3のハンドを閉じるように制御し、協働ロボット3は、ワークを把持する。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上の負荷推定動作開始位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“G101 X100.0 J5=45.0 J6=45.0 P500 F1000 E25”が指令され、負荷設定番号(No.2:ハンド+ワーク)に対応する負荷推定動作が指令され、ロボット制御装置5は、負荷推定動作を開始する。ここで、「P500」は、負荷重量が500gであることを示す。
ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力及び指令された負荷重量に基づいて、負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を負荷設定番号(No.2:ハンド+ワーク)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。次いで、“M30”が指令され、数値制御プログラムは終了する。
図12は、本実施形態に係る数値制御プログラムの例を示す図である。図13は、図12に示される数値制御プログラムを実行した際における数値制御装置4とロボット制御装置5との間の信号及び情報の流れを示すシーケンス図である。図12及び図13に示される例では、数値制御装置4は、負荷推定動作指令を含む数値制御プログラムを実行し、協働ロボット3によって検出された外力に基づいて負荷設定情報を算出する。図12及び図13に示される例では、負荷推定動作指令は、負荷推定動作時の協働ロボット3のツールの並進方向(J5軸)及び協働ロボット3の手首軸の回転方向(J6軸)を、ロボット制御装置5に対して指令し、更に、協働ロボット3の動作状態として、協働ロボット3によるワークの把持状態をロボット制御装置5に対して通知する。
先ず、図12及び図13に示す例における負荷推定動作の具体的な処理について、図2を参照しながら説明する。数値制御装置4の解析部42は、数値制御プログラム中のロボット制御指令を解析し、数値制御プログラムからハンド開閉指令が抽出されると、ロボット指令信号生成部45へ指令を通知し、ロボット指令信号生成部45は、ハンド開閉指令を含むロボット指令信号を生成し、データ送受信部46を介してロボット制御装置5へ送信する。これにより、ロボット制御装置5は、ハンド開閉指令に応じて、ハンド開閉動作を実行する。
また、負荷推定指令部47は、数値制御プログラムからハンド開閉指令が抽出されると、ハンド開閉指令に応じて、負荷推定指令部47において保持されるワークの把持状態を更新する。
更に、解析部42は、数値制御プログラム中のロボット制御指令を解析し、数値制御プログラムから負荷推定動作指令が抽出されると、負荷推定指令部47へ指令を通知する。
負荷推定指令部47は、解析部42からの指令の通知に応じて、負荷推定動作信号を生成し、ロボット指令信号生成部45へ通知する。ここで、負荷推定指令部47は、負荷推定動作信号において、協働ロボット3の動作状態(例えば、ワークの把持状態、協働ロボット3のハンドの開閉状態など)をロボット制御装置5に指令する。
ロボット指令信号生成部45は、解析部42によって解析されたロボット制御指令及び負荷推定動作信号に基づいて、負荷推定動作信号を含むロボット指令信号を生成し、データ送受信部46を介してロボット制御装置5へ送信する。
ロボット命令生成部53は、解析部52により解析されたロボット指令信号における負荷推定動作信号に応じて、協働ロボット3に負荷推定動作を実行させるためのロボット命令を生成する。生成したロボット命令及び上述したようなプログラム管理部54、軌跡制御部55、キネマティクス制御部56、サーボ制御部57、負荷設定選択部58及びダイナミクス制御部59の制御によって、協働ロボット3は、負荷推定動作を実行する。
接触制御部62は、解析部52により解析されたロボット指令信号における負荷推定動作信号に応じて、協働ロボット3の外力検出部31において負荷推定動作時に検出される外力を測定(取得)する。接触制御部62は、測定した外力を負荷推定実行部61に通知する。
負荷推定実行部61は、負荷推定動作信号に応じて、接触制御部62が測定した外力に基づいて、協働ロボット3において負荷の情報を設定するための負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報を協働ロボット3の動作状態と対応付けて記憶部51に記憶する。例えば、負荷推定実行部61は、算出した負荷設定情報をワークの把持状態と対応付けて記憶部51に記憶する。
次いで、解析部42は、数値制御プログラム中のロボット制御指令を解析し、数値制御プログラムからハンド開閉指令が抽出されると、ロボット指令信号生成部45へ指令を通知し、ロボット指令信号生成部45は、ハンド開閉指令を含むロボット指令信号を生成し、データ送受信部46を介してロボット制御装置5へ送信する。これにより、ロボット制御装置5は、ハンド開閉指令に応じて、ハンド開閉動作を実行する。
更に、ロボット制御装置5は、ハンド開閉指令に応じて、ワークの把持状態を負荷設定選択部58へ通知する。負荷設定選択部58は、通知されたワークの把持状態と対応付けられた負荷設定情報を記憶部51から読み出し、ダイナミクス制御部59へ通知する。
ダイナミクス制御部59は、通知された負荷設定情報に基づいて逆動力学計算により協働ロボット3に入力するトルクを計算する。ダイナミクス制御部59は、計算により取得したトルクを、サーボ制御部57へ出力する。サーボ制御部57は、ダイナミクス制御部59により計算されたトルクを反映したロボット制御信号を生成する。これにより、ロボット制御装置5は、負荷設定情報に基づいて協働ロボット3を制御することができる。
なお、ロボット制御装置5は、協働ロボット3が、2つのハンドを有する(デュアルハンド)場合、第1のハンド及び第2のハンドそれぞれの開閉状態に対応する負荷設定情報を記憶部51に記憶する。
次に、図12及び図13を参照しながら、負荷推定動作の例を説明する。先ず、“M100”が指令され、ロボット制御装置5は、協働ロボット3のハンドを開くように制御する。更に、数値制御装置4は、ワークの把持状態(ワークなし)をロボット制御装置5へ通知する。
次いで、“G68.8”が入力され、各軸座標系が選択される。“G7.3 J1=_J2=_J3=_J4=_J5=_J6=_”が指令されると、ロボット制御装置5は、各軸座標系上の基準位置に協働ロボット3を移動及び位置決めする。次いで、“G100 X100.0 J5=45.0 J6=45.0 F1000 E25”が指令され、ロボット制御装置5は、負荷推定動作を開始する。
ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力に基づいて負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報をワークの把持状態(ワークなし)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。
次いで、“G68.9”が指令され、直交座標系が選択される。“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上のワーク把持位置へ協働ロボット3を直線移動させ、位置決めする。
次いで、“M101”が指令され、ロボット制御装置5は、協働ロボット3のハンドを閉じるように制御し、協働ロボット3は、ワークを把持する。更に、数値制御装置4は、ワークの把持状態(ワークあり)をロボット制御装置5へ通知する。
“G01 X_Y_Z_A_B_C_P_”が指令されると、ロボット制御装置5は、直交座標系上の負荷推定動作開始位置へ協働ロボット3を直線移動させ、位置決めする。次いで、“G101 X100.0 J5=45.0 J6=45.0 F1000 E25”が指令され、ロボット制御装置5は、負荷推定動作を開始する。
ロボット制御装置5は、負荷推定動作として、協働ロボット3を+X方向へ移動速度1000mm/minで移動させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。更に、ロボット制御装置5は、負荷推定動作として、協働ロボット3のJ5軸及びJ6軸を、それぞれ最大移動速度の25%で45度回転させる。このとき、ロボット制御装置5の接触制御部62は、協働ロボット3の外力検出部31において検出される外力を測定する。
負荷推定実行部61は、接触制御部62が測定した外力に基づいて負荷設定情報を算出する。そして、負荷推定実行部61は、算出した負荷設定情報をワークの把持状態(ワークあり)と対応付けて記憶部51に記憶する。その後、ロボット制御装置5は、負荷推定動作を終了する。
その後、“M100”が指令され、ロボット制御装置5は、協働ロボット3のハンドを開くように制御する。更に、数値制御装置4は、ワークの把持状態(ワークなし)をロボット制御装置5へ通知する。負荷設定選択部58は、通知されたワークの把持状態(ワークなし)と対応付けられた負荷設定情報を記憶部51から読み出す。そして、負荷設定選択部58は、ワークの把持状態(ワークあり)と対応付けられた負荷設定情報を、ワークの把持状態(ワークなし)と対応付けられた負荷設定情報に切り替える。
その後、“M101”が指令され、ロボット制御装置5は、協働ロボット3のハンドを閉じるように制御する。更に、数値制御装置4は、ワークの把持状態(ワークあり)をロボット制御装置5へ通知する。負荷設定選択部58は、通知されたワークの把持状態(ワークあり)と対応付けられた負荷設定情報を記憶部51から読み出す。そして、負荷設定選択部58は、ワークの把持状態(ワークなし)と対応付けられた負荷設定情報を、ワークの把持状態(ワークあり)と対応付けられた負荷設定情報に切り替える。その後、“M30”が指令され、数値制御プログラムは終了する。なお、上記の実施形態では、数値制御装置4が、ワークの把持状態をロボット制御装置5へ通知したが、ロボット制御装置5は、ロボット制御装置5自体が保持しているワークの把持状態を用いてもよい。
以上説明したように本実施形態によれば、数値制御装置4は、数値制御プログラム中のロボット制御指令を解析する解析部42と、解析部42により解析したロボット制御指令に応じて、負荷推定動作のための負荷推定動作信号を生成する負荷推定指令部47と、負荷推定動作信号を含むロボット指令信号を生成し、ロボット制御装置5へ送信するロボット指令信号生成部45と、を備え、ロボット制御装置5は、負荷推定動作信号に応じて、協働ロボット3に負荷推定動作を実行させると共に、協働ロボット3において負荷推定動作時に検出される外力を測定し、測定した外力に基づいて、協働ロボット3において負荷の情報を設定するための負荷設定情報を算出し、算出した負荷設定情報を負荷のパラメータと対応付けて記憶部51に記憶する。
このような構成を備えることによって、数値制御装置4は、工作機械のユーザが協働ロボット3の教示操作盤を使用せず、負荷の重心位置などのような力学的パラメータを含む負荷の情報を容易に設定することができる。
また、ロボット制御装置5は、算出した負荷設定情報を、負荷のパラメータとしての協働ロボット3の動作状態と対応付けて記憶部51に記憶し、協働ロボット3の動作状態は、ワークの把持状態及び協働ロボット3のハンドの開閉状態の少なくとも1つを含む。このような構成を備えることによって、数値制御装置4は、例えば、協働ロボット3のハンド開閉指令時に、負荷設定情報を、ハンドの開閉状態と対応づけられた負荷設定情報に自動的に切替えることによって、工作機械のユーザが負荷を意識せずに容易に協働ロボット3を使用することができる。
また、負荷推定指令部47は、負荷推定動作信号において、協働ロボット3におけるツールの並進移動方向又は協働ロボット3の回転軸の回転方向をロボット制御装置5に指令する。このような構成を備えることによって、数値制御装置4は、負荷設定情報を算出するための負荷推定動作をロボット制御装置5に適切に実行させることができる。
また、負荷推定指令部47は、負荷推定動作信号において、負荷の重量、負荷の重心位置、及び負荷のイナーシャのうちの少なくとも1つを算出することを指令する。このような構成を備えることによって、数値制御装置4は、ロボット制御装置5に対して、負荷設定情報を適切に算出させることができる。
また、協働ロボット3は、人との接触を検知して動作を停止する。このような構成を備えることによって、数値制御装置4は、協働ロボット3を用いて、人と協働で安全に作業することができる。
以上、本発明の実施形態について説明したが、上記の数値制御システム1は、ハードウェア、ソフトウェア又はこれらの組み合わせにより実現することができる。また、上記の数値制御システム1により行なわれる制御方法も、ハードウェア、ソフトウェア又はこれらの組み合わせにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて記憶され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えば、ハードディスクドライブ)、光磁気記録媒体(例えば、光磁気ディスク)、CD-ROM(Read Only Memory)、CD-R、CD-R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。
本開示について詳述したが、本開示は上述した個々の実施形態に限定されるものではない。これらの実施形態は、本開示の要旨を逸脱しない範囲で、または、特許請求の範囲に記載された内容とその均等物から導き出される本開示の趣旨を逸脱しない範囲で、種々の追加、置き換え、変更、部分的削除等が可能である。また、これらの実施形態は、組み合わせて実施することもできる。例えば、上述した実施形態において、各動作の順序や各処理の順序は、一例として示したものであり、これらに限定されるものではない。また、上述した実施形態の説明に数値又は数式が用いられている場合も同様である。
上記実施形態及び変形例に関し、更に以下の付記を開示する。
(付記1)
数値制御プログラムを用いてロボット制御装置(5)を介してロボット(3)を制御する数値制御装置(4)であって、
前記数値制御プログラム中のロボット制御指令を解析する解析部(42)と、
前記解析部により解析した前記ロボット制御指令に応じて、負荷推定動作のための負荷推定動作信号を生成する負荷推定指令部(47)と、
前記負荷推定動作信号を含むロボット指令信号を生成し、前記ロボット制御装置へ送信するロボット指令信号生成部(45)と、
を備え、
前記ロボット制御装置は、
前記負荷推定動作信号に応じて、前記ロボットに負荷推定動作を実行させると共に、前記ロボットにおいて前記負荷推定動作時に検出される外力を測定し、
測定した前記外力に基づいて、前記ロボットにおいて負荷の情報を設定するための負荷設定情報を算出し、
算出した前記負荷設定情報を前記負荷のパラメータと対応付けて記憶部(51)に記憶する、
数値制御装置。
(付記2)
前記ロボット制御装置は、算出した前記負荷設定情報を、前記負荷のパラメータとしての前記ロボットの動作状態と対応付けて前記記憶部に記憶し、前記ロボットの前記動作状態は、ワークの把持状態及び前記ロボットのハンドの開閉状態の少なくとも1つを含む、付記1に記載の数値制御装置。
(付記3)
前記負荷推定指令部は、前記負荷推定動作信号において、前記負荷の重量、前記負荷の重心位置、及び前記負荷のイナーシャのうちの少なくとも1つを算出することを指令する、付記1又は2に記載の数値制御装置。
(付記4)
前記負荷推定指令部は、前記負荷推定動作信号において、前記負荷の重量、前記負荷の重心位置、及び前記負荷のイナーシャのうちの少なくとも1つを算出することを指令する、付記1又は2に記載の数値制御装置。
(付記5)
前記ロボットは、人との接触を検知して動作を停止する協働ロボットである、付記1又は2に記載の数値制御装置。
(付記6)
数値制御装置(4)の数値制御プログラムを用いてロボット制御装置(5)を介してロボット(3)を制御する数値制御システム(1)であって、
前記数値制御装置は、
前記数値制御プログラム中のロボット制御指令を解析する解析部(42)と、
前記解析部により解析した前記ロボット制御指令に応じて、負荷推定動作のための負荷推定動作信号を生成する負荷推定指令部(47)と、
前記負荷推定動作信号を含むロボット指令信号を生成し、前記ロボット制御装置へ送信するロボット指令信号生成部(45)と、
を備え、
前記ロボット制御装置は、
前記負荷推定動作信号に応じて、前記ロボットに負荷推定動作を実行させるためのロボット命令を生成するロボット命令生成部(53)と、
前記負荷推定動作信号に応じて、前記ロボットにおいて前記負荷推定動作時に検出される外力を測定する接触制御部(62)と、
前記負荷推定動作信号に応じて、測定した前記外力に基づいて、前記ロボットにおいて負荷の情報を設定するための負荷設定情報を算出し、算出した前記負荷設定情報を前記負荷のパラメータと対応付けて記憶部(51)に記憶する負荷推定実行部(61)と、
を備える数値制御システム。
(付記7)
前記負荷推定実行部は、算出した前記負荷設定情報を、前記負荷のパラメータとしての前記ロボットの動作状態と対応付けて前記記憶部に記憶し、前記ロボットの前記動作状態は、ワークの把持状態及び前記ロボットのハンドの開閉状態の少なくとも1つを含む、
付記6に記載の数値制御システム。
(付記8)
前記負荷推定指令部は、前記負荷推定動作信号において、前記ロボットの並進移動方向又は前記ロボットの関節軸の回転方向を前記ロボット制御装置に指令する、付記6又は7に記載の数値制御システム。
(付記9)
前記負荷推定指令部は、前記負荷推定動作信号において、前記負荷の重量、負荷の重心位置、負荷のイナーシャのうちの少なくとも1つを前記ロボット制御装置に算出させる、付記6又は7に記載の数値制御システム。
(付記10)
前記ロボットは、人との接触を検知して動作を停止する協働ロボットである、付記6又は7に記載の数値制御システム。