(57)【要約】【課題】従来に比して、より簡便にロボットの立ち上げ作業を行う。【解決手段】プログラミング装置が、複数の移動先ポイントを経由する所定の動作をロボットに実行させるためのプログラムを生成するプログラム生成部と、前記プログラムに基づいた制御により、前記ロボットに前記所定の動作を実行させるロボット制御部と、前記移動先ポイントの位置と所定の相対関係がある位置に配置された参照点を撮像した撮像画像を取得する画像取得部と、前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記移動先ポイントの情報を補正する移動先ポイント補正部と、を備え、前記ロボット制御部は、前記補正後の移動先ポイントの情報に基づいて、前記ロボットを制御する。【選択図】図１
2018192569.tif 000002
【特許請求の範囲】
【請求項１】
複数の移動先ポイントを経由する所定の動作をロボットに実行させるためのプログラムを生成するプログラム生成部と、
前記プログラムに基づいた制御により、前記ロボットに前記所定の動作を実行させるロボット制御部と、
前記移動先ポイントの位置と所定の相対関係がある位置に配置された参照点を撮像した撮像画像を取得する画像取得部と、
前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記移動先ポイントの情報を補正する移動先ポイント補正部と、を備え、
前記ロボット制御部は、前記補正後の移動先ポイントの情報に基づいて、前記ロボットを制御するプログラミング装置。
【請求項２】
前記プログラム生成部は、
前記参照点の位置と前記所定の相関関係とを組にした情報に基づいて特定される移動先ポイントを、前記移動先ポイントの候補として複数記憶しており、
前記プログラム生成時に、前記移動先ポイントの候補から何れかの移動先ポイントを選択し、選択した前記移動先ポイントを経由する所定の動作をロボットに実行させるためのプログラムを生成する請求項１に記載のプログラミング装置。
【請求項３】
前記プログラム生成部は、前記移動先ポイント間を前記ロボットが移動すると前記ロボットと他の物品とが干渉する場合に、前記干渉が発生しない経路にて前記ロボットが移動するように、前記移動先ポイント間の移動時に経由する中継ポイントを挿入して前記プログラムを生成する請求項１又は２に記載のプログラミング装置。
【請求項４】
前記移動先ポイント補正部は、前記中継ポイントについての情報は補正しない請求項３に記載のプログラミング装置。
【請求項５】
前記移動先ポイント補正部は、前記ロボットが前記所定の動作実行中に、これから前記ロボットが移動する移動先ポイントについての情報を補正する請求項１から４までの何れか１項に記載のプログラミング装置。
【請求項６】
前記参照点が複数存在すると共に、前記参照点のそれぞれには各参照点を識別するための画像情報が含まれており、
前記画像取得部は、前記各参照点を識別するための画像情報も撮像し、
前記移動先ポイント補正部は、前記各参照点を識別するための画像情報に基づいて参照点を識別し、前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記識別した参照点に対応する前記移動先ポイントの情報を補正する請求項１から５までの何れか１項に記載のプログラミング装置。
【請求項７】
異なる状況下で前記ロボットが動作する場合に、
前記プログラム生成部は、前記生成したプログラムを前記異なる状況それぞれに対応する数だけ複製し、
前記移動先ポイント補正部は、前記異なる状況それぞれに対応して前記複製されたプログラムそれぞれを補正することにより、前記異なる状況それぞれに対応する複数の補正後のプログラムを生成する請求項１から６までの何れか１項に記載のプログラミング装置。
【請求項８】
コンピュータが行うロボット制御方法であって、
複数の移動先ポイントを経由する所定の動作をロボットに実行させるためのプログラムを生成するプログラム生成ステップと、
前記プログラムに基づいた制御により、前記ロボットに前記所定の動作を実行させるロボット制御ステップと、
前記移動先ポイントの位置と所定の相対関係がある位置に配置された参照点を撮像した撮像画像を取得する画像取得ステップと、
前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記移動先ポイントの情報を補正する移動先ポイント補正ステップと、を前記コンピュータが行い、
前記ロボット制御ステップにおいて、前記補正後の移動先ポイントの情報に基づいて、前記ロボットを制御するロボット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、産業用ロボット等のロボットを制御するための、プログラミング装置及びロボット制御方法に関する。
【背景技術】
【０００２】
従来、ロボットに対する教示のために、ティーチング・プレイバックと呼ばれる方法が広く用いられている。
ティーチング・プレイバックでは、ユーザが教示操作盤を用いた操作によりロボットを動かすことによって、ロボットに対して所定の動作を教示する。あるいは、ユーザがロボットを直接押したり引いたりして動かすことによって、ロボットに対して所定の動作を教示する。
ロボットは、これらの教示に基づいて、所定の動作を行うための動作プログラムを生成する。そして、この動作プログラムを用いることにより、ロボットは、教示終了後も所定の動作を正確に繰り返すことができる。
【０００３】
しかし、複数のロボットそれぞれに対して、このようなロボットの実機を用いたティーチング・プレイバックを行うことはユーザにとって負担となる。そこで、コンピュータ上で仮想空間を生成し、この仮想空間で仮想的にロボットを動作させることによって動作プログラムを作成する技術が利用されている。このような技術は例えば特許文献１に開示されており、オフラインプログラミングシステム（以下、適宜「ＯＰＳ」と呼ぶ。）等の名称で呼ばれる。
ＯＰＳを利用することにより、ロボットの実機を用いたティーチング・プレイバックを行うことなく、動作プログラムを生成することが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１１９５８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＯＰＳにより生成された動作プログラムを用いて実際にロボットを動作させた場合、ロボットの寸法誤差や組立誤差、あるいはロボットと周辺環境の相対位置が想定していたものと異なる等の理由で、ロボットが想定通りに作業を遂行できないことが多い。そのため、結局はユーザがロボットの実機を用いたティーチング・プレイバックを行い、ＯＰＳにより生成された動作プログラムを調整するという作業が必要となっていた。
このように、ロボットの立ち上げ時に行われる、教示作業やプログラミングは容易ではなく、ユーザにとって煩雑なものであった。
【０００６】
そこで本発明は、従来に比して、より簡便にロボットの立ち上げ作業を行うことが可能な、プログラミング装置及びロボット制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
（１）  本発明のプログラミング装置（例えば、後述のプログラミング装置１０）は、複数の移動先ポイントを経由する所定の動作をロボット（例えば、後述のロボット２０）に実行させるためのプログラムを生成するプログラム生成部（例えば、後述のプログラム生成部１３）と、前記プログラムに基づいた制御により、前記ロボットに前記所定の動作を実行させるロボット制御部（例えば、後述のロボット制御部１４）と、前記移動先ポイントの位置と所定の相対関係がある位置に配置された参照点を撮像した撮像画像を取得する画像取得部（例えば、後述の画像取得部１６）と、前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記移動先ポイントの情報を補正する移動先ポイント補正部（例えば、後述の移動先ポイント補正部１５）と、を備え、前記ロボット制御部は、前記補正後の移動先ポイントの情報に基づいて、前記ロボットを制御する。
【０００８】
（２）  上記（１）に記載のプログラミング装置を、前記プログラム生成部は、前記参照点の位置と前記所定の相関関係とを組にした情報に基づいて特定される移動先ポイントを、前記移動先ポイントの候補として複数記憶しており、前記プログラム生成時に、前記移動先ポイントの候補から何れかの移動先ポイントを選択し、選択した前記移動先ポイントを経由する所定の動作をロボットに実行させるためのプログラムを生成するようにしてもよい。
【０００９】
（３）  上記（１）又は（２）に記載のプログラミング装置を、前記プログラム生成部は、前記移動先ポイント間を前記ロボットが移動すると前記ロボットと他の物品とが干渉する場合に、前記干渉が発生しない経路にて前記ロボットが移動するように、前記移動先ポイント間の移動時に経由する中継ポイントを挿入して前記プログラムを生成するようにしてもよい。
【００１０】
（４）  上記（３）に記載のプログラミング装置を、前記移動先ポイント補正部は、前記中継ポイントについての情報は補正しないようにしてもよい。
【００１１】
（５）  上記（１）から（４）の何れかに記載のプログラミング装置を、前記移動先ポイント補正部は、前記ロボットが前記所定の動作実行中に、これから前記ロボットが移動する移動先ポイントについての情報を補正するようにしてもよい。
【００１２】
（６）  上記（１）から（５）の何れかに記載のプログラミング装置を、前記参照点が複数存在すると共に、前記参照点のそれぞれには各参照点を識別するための画像情報が含まれており、前記画像取得部は、前記各参照点を識別するための画像情報も撮像し、前記移動先ポイント補正部は、前記各参照点を識別するための画像情報に基づいて参照点を識別し、前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記識別した参照点に対応する前記移動先ポイントの情報を補正するようにしてもよい。
【００１３】
（７）  上記（１）から（６）の何れかに記載のプログラミング装置を、異なる状況下で前記ロボットが動作する場合に、前記プログラム生成部は、前記生成したプログラムを前記異なる状況それぞれに対応する数だけ複製し、前記移動先ポイント補正部は、前記異なる状況それぞれに対応して前記複製されたプログラムそれぞれを補正することにより、前記異なる状況それぞれに対応する複数の補正後のプログラムを生成するようにしてもよい。
【００１４】
（８）  本発明のロボット制御方法は、コンピュータ（例えば、後述のプログラミング装置１０）が行うロボット制御方法であって、複数の移動先ポイントを経由する所定の動作をロボット（例えば、後述のロボット２０）に実行させるためのプログラムを生成するプログラム生成ステップと、前記プログラムに基づいた制御により、前記ロボットに前記所定の動作を実行させるロボット制御ステップと、前記移動先ポイントの位置と所定の相対関係がある位置に配置された参照点を撮像した撮像画像を取得する画像取得ステップと、前記撮像画像及び前記所定の相対関係に基づいて、前記プログラムに含まれる前記移動先ポイントの情報を補正する移動先ポイント補正ステップと、を前記コンピュータが行い、前記ロボット制御ステップにおいて、前記補正後の移動先ポイントの情報に基づいて、前記ロボットを制御する。
【発明の効果】
【００１５】
本発明によれば、従来に比して、より簡便にロボットの立ち上げ作業を行うことが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態の基本的構成を示す機能ブロック図である。
【図２】本発明の実施形態における動作プログラムの生成について説明するための模式図（１／２）である。
【図３】本発明の実施形態における動作プログラムの生成について説明するための模式図（２／２）である。
【図４】本発明の実施形態における動作プログラムを生成するために入力される、作業手順書の内容に応じたフローチャートである。
【図５】本発明の実施形態における動作プログラムの補正について説明するための模式図（１／５）である。
【図６】本発明の実施形態における動作プログラムの補正について説明するための模式図（２／５）である。
【図７】本発明の実施形態における動作プログラムの補正について説明するための模式図（３／５）である。
【図８】本発明の実施形態における動作プログラムの補正について説明するための模式図（４／５）である。
【図９】本発明の実施形態における動作プログラムの補正について説明するための模式図（５／５）である。
【図１０】本発明の実施形態の基本的動作を示す構成を示すフローチャートである。
【図１１Ａ】本発明の実施形態における参照点Ｒｅｆの一例を示す模式図である。
【図１１Ｂ】本発明の実施形態における参照点Ｒｅｆの他の例を示す模式図である。
【図１２】本発明の実施形態の適用例を示す模式図である。
【発明を実施するための形態】
【００１７】
次に、本発明の実施形態について図面を参照して詳細に説明する。
＜実施形態の構成＞
まず、図１を参照して、本実施形態であるロボット制御システム１全体の構成について説明する。図１に示すようにロボット制御システム１は、プログラミング装置１０、ロボット２０及びカメラ３０を備える。
【００１８】
プログラミング装置１０とロボット２０は相互に通信可能に接続されている。また、プログラミング装置１０とカメラ３０も相互に通信可能に接続されている。これらの接続は、信号線を介した有線接続であってもよく、無線接続であってもよい。また、例えば、ＬＡＮ（Local Area Network）やインターネット等のネットワークを介した接続であってもよい。なお、プログラミング装置１０、ロボット２０及びカメラ３０は、かかる接続によって相互に通信を行うための通信部（図示を省略する。）を備えている。
【００１９】
プログラミング装置１０は、ロボット２０の動作を制御するための装置である。プログラミング装置１０はロボット２０の動作を制御するための種々の機能ブロックを備えている。なお、プログラミング装置１０が備える各機能ブロックの詳細については後述する。プログラミング装置１０は、一般的なプログラミング装置（「ロボットコントローラ」とも呼ばれる。）に、本実施形態特有の機能を追加することにより実現することができる。
【００２０】
ロボット２０は、プログラミング装置１０の制御に基づいて動作するロボットである。ロボット２０は、プログラミング装置１０の制御に基づいてアームやエンドエフェクタといった可動部を駆動するための駆動制御部２１を備える。ロボット２０は、例えば、自動車や電子部品を生産する工場で使用される一般的な産業用ロボットにより実現することができる。
【００２１】
カメラ３０は、ロボット２０周辺を撮像するカメラである。カメラ３０は、撮像を行うための撮像部３１を備えている。カメラ３０はＣＣＤ（Charge-Coupled Device）カメラやＣＭＯＳ（Complementary Metal Oxide Semiconductor）カメラ等の一般的なカメラにより実現することができる。
【００２２】
本実施形態では、以上の構成によって、プログラミング装置１０がロボット２０を制御するための動作プログラムを生成する。つまり、本実施形態では、ユーザによるティーチング・プレイバックを行うことなく、動作プログラムを生成することが可能となる。
また、本実施形態では、プログラミング装置１０が生成した動作プログラムによりロボット２０の動作を制御する。この際に、カメラ３０から取得したロボット２０周辺の画像に基づいて、ロボットの動作プログラムに含まれる教示点の位置情報を補正する。これにより、本実施形態では、ユーザによるティーチング・プレイバックを行うことなく、ロボット２０の動作の精度を高めることが可能となる。
【００２３】
このように本実施形態によれば、ユーザによるティーチング・プレイバックを要することなくロボット２０の立ち上げ作業を行うことができる。つまり、本実施形態は、従来に比して、より簡便にロボットの立ち上げ作業を行うことができる、という効果を奏する。
【００２４】
＜プログラミング装置１０が備える機能ブロック＞
次に、プログラミング装置１０が備える機能ブロックについて説明をする。図１に示すようにプログラミング装置１０は、入力部１１、出力部１２、プログラム生成部１３、ロボット制御部１４、移動先ポイント補正部１５及び画像取得部１６を含んで構成される。
【００２５】
入力部１１は、ユーザからの各種の操作を受け付けたり、ユーザからの作業手順書の内容の入力を受け付けたりする部分である。ここで、作業手順書の内容とはロボット２０が行うべき複数の所定の作業の内容と、この複数の所定の作業を行う順序とを示すものである。
作業手順書の内容の入力形式は特に限定されない。例えば、プログラミング言語に沿った形式で作業手順書の内容が入力されてもよいが、ユーザが容易に理解できる形式で作業手順書の内容が入力されるとよい。例えば後述するようにフローチャートの形式で入力されるようにするとよい。
入力された作業手順書の内容は、プログラム生成部１３に対して出力される。入力部１１は、例えば、キーボードやマウス、タッチパネルといった入力装置により実現される。
【００２６】
出力部１２は、ユーザが各種の操作を行ったり、ユーザが作業手順書の内容を入力したりするためのユーザインタフェースを出力する部分である。出力部１２は、他にも、ロボットの駆動状況を示す情報等の、ユーザインタフェース以外の他の情報を出力してもよい。出力部１２は、例えば、液晶ディスプレイ等の表示装置により実現される。
【００２７】
プログラム生成部１３は、オフラインプログラミングを行うことにより、ロボット２０を動作させるための動作プログラムを生成する部分である。
プログラム生成部１３は、ユーザが作業手順書の内容を入力するためのユーザインタフェースを出力部１２から出力する。
そして、プログラム生成部１３は、ユーザインタフェースを参照したユーザから入力部１１が受け付けた作業手順書の内容に基づいて、動作プログラムを生成する。生成した動作プログラムはロボット制御部１４に対して出力される。
【００２８】
動作プログラムの生成は、例えば、「特開平９−１６７００７号公報」に開示の技術等を利用することにより行うことができる。
ただし、プログラム生成部１３は、このような一般的な技術とは一部異なった方法にて動作プログラムを生成する。
具体的には、プログラム生成部１３は、動作プログラムの生成に先立って、ロボット２０の動作において経由するポイントの候補を多数作成しておく。
また、プログラム生成部１３は、作業手順書の内容に基づいて、ロボット２０が実際に経由する教示点（以下、適宜「ポイント」と呼ぶ。）を決定する際に比較的精度の要求されるポイントと、比較的精度の要求されないポイントの２つに大別する。
そして、前者の比較的精度の要求されるにポイントについては予め作成しておいたポイントの候補から取捨選択して繋ぎ合わせる。また、後者の比較的精度の要求されないポイントについては、予め作成したポイントの候補から選択するのではなく、適切と思われるポイントを任意に決定し、中継ポイントとして挿入する。
【００２９】
これにより、比較的精度の要求される移動先ポイントについては、その要求精度を満たすことができる。また、そうでないポイントについては移動先ポイントの間を滑らかに繋ぐポイントを任意に選択することができる。
なお、プログラム生成部１３による動作プログラムの生成の詳細な内容については、図２〜図４を参照して後述する。
【００３０】
ロボット制御部１４は、プログラム生成部１３から入力された動作プログラムに基づいてロボット２０の動作を制御する部分である。具体的には、ロボット制御部１４は、動作プログラムに基づいてロボット２０の動作を制御するための信号を生成し、生成した信号をロボット２０が備える駆動制御部２１に対して出力する。駆動制御部２１は、この信号に応じてアームやエンドエフェクタといった可動部を駆動するための制御を行う。これにより、ロボット２０は作業手順書の内容に沿って、所定の作業を、所定の順序で行うことができる。
【００３１】
画像取得部１６は、上記のようにして作業手順書の内容に沿った動作を行うロボット２０周辺を撮像した撮像画像をカメラ３０から取得する。なお、上述したように、撮像はカメラ３０が備える撮像部３１により行われる。画像取得部１６は、取得した撮像画像を移動先ポイント補正部１５に対して出力する。
【００３２】
移動先ポイント補正部１５は、カメラ３０から取得したロボット２０周辺の撮像画像に基づいて、ロボットの動作プログラムに含まれる経由すべきポイントの中でも、比較的精度の要求されるポイントについての位置情報を補正する。そして補正後の位置情報をロボット制御部１４に対して出力する。ロボット制御部１４は動作プログラムを補正後の位置情報に基づいて補正し、補正後の動作プログラムによりロボット２０の動作を制御する。
なお、移動先ポイント補正部１５による位置情報の補正の詳細な内容は、図５〜図９を参照して後述する。
【００３３】
以上説明した各機能ブロックが協働することにより、動作プログラムを生成すると共に、ユーザによる動作プログラムの調整を要さずに、精度高くロボット２０の動作を制御することが可能となる。
【００３４】
次に、プログラミング装置１０が備えるこれらの機能ブロックの実現方法について説明をする。プログラミング装置１０は、ＣＰＵ（Central Processing Unit）等の演算処理装置を備える。また、プログラミング装置１０は、各種の制御用プログラムを格納したＲＯＭ（Read Only Memory）やＨＤＤ（Hard Disk Drive）等の補助記憶装置や、演算処理装置がプログラムを実行する上で一時的に必要とされるデータを格納するためのＲＡＭ（Random Access Memory）といった主記憶装置を備える。
【００３５】
そして、プログラミング装置１０において、演算処理装置が補助記憶装置からＯＳやアプリケーションソフトウェアを読み込み、読み込んだＯＳやアプリケーションソフトウェアを主記憶装置に展開させながら、これらのＯＳやアプリケーションソフトウェアに基づいた演算処理を行なう。また、この演算結果に基づいて、プログラミング装置１０が備える各ハードウェアを制御する。これにより、上述した機能ブロックによる処理は実現される。つまり、プログラミング装置１０は、ハードウェアとソフトウェアが協働することにより実現することができる。
【００３６】
＜動作プログラムの生成＞
次に、プログラム生成部１３による動作プログラムの生成の詳細について説明をする。まず、動作プログラムの作成の前提となるロボット２０の動作について説明する。ロボット２０が動作をして何らかの作業を行うということは、ロボット２０がその周辺の物品に対して接触／非接触を問わず何らかの作用を及ぼすこと、と捉えることができる。
その作用とは、掴む（例えば、物品の把持）、開放する（例えば、保持した物品を何処かに置く）、挟持する（スポット溶接のように２枚の板を挟む等）、回転させる（例えば、ねじを締めることや、物品同士を嵌め合せたりする等）、相対移動をする（例えば、切削具やレーザ光で物品を切断することや、物品同士を溶接する等）等を含む。
【００３７】
この作用を及ぼす瞬間、作用を及ぼす対象となる物品に対して、ロボット２０のエンドエフェクタを所定の相対位置に位置決めする動作を行う必要がある。この所定の相対位置に位置決めする動作について、図２に示す模式化した例を参照して説明する。
【００３８】
図２に示すように、本例では、ロボット２０の周辺に、２つの独立した物品Ａと物品Ｂが存在する。また、物品Ａの上には物品Ｃが置かれている。そして、ロボット２０は、図中に破線で示すような軌跡で移動しながら、物品Ａの上に置かれている物品Ｃを把持して持ち上げ、持ち上げた物品ＣをＢの凹部に組み付ける。この図２の例は模式化されてはいるが、ロボット２０によって行われる何らかの作用は、この図２の例を拡張したりバリエーションを持たせたりしたものと言える。
【００３９】
このような動作を行うために、ロボット２０は、ベース部２２、第１関節部２３、第１アーム２４、第２関節部２５、第２アーム２６及びグリッパ２７を備えている。本例におけるロボット２０は、ベース部２２に取り付けられた第１アーム２４や第２アーム２６と、これらのアームを動かすための関節部である第１関節部２３や第２関節部２５を含む多関節ロボットとして構成される。
【００４０】
ロボット２０は、ベース部２２を鉛直方向の軸を中心に回転させたり、第１関節部２３や第２関節部２５によって、第１アーム２４や第２アーム２６を移動させたり、回転させたりすることにより、第２アーム２６の手首部に取り付けられたエンドエフェクタであるグリッパ２７の位置および姿勢を自由に変化させることができる。
これにより、ロボット２０は、グリッパ２７により把持されたワーク（例えば、物品Ｃ）を所望の位置および姿勢に配置することができる。
この場合の、ベース部２２、第１関節部２３、第２関節部２５及びグリッパ２７等の駆動は、図１に示す駆動制御部２１による制御により実現される。なお、ロボット２０のような多関節ロボットの構造や制御については、当業者によく知られているので、これ以上の詳細な説明は省略する。
【００４１】
このような構成を一例とするロボット２０を駆動させて、図２を参照して説明した動きを実現する場合、ロボット２０のグリッパ２７が経由するポイントは、例えば、図３に示すポイントＰ１〜ポイントＰ８になる。ここで、本実施形態は、これらのポイントを大きく２種類に分ける。
【００４２】
１つは物品Ａや物品Ｂに対して、相対的に位置が定まっているもので、比較的高精度が要求されるものである。以下では、このようなポイントを「移動先ポイント」と呼ぶ。本例であれば、ポイントＰ４、ポイントＰ７、ポイントＰ８が移動先ポイントに相当する。
もう１つはポイントＰ４、ポイントＰ７、ポイントＰ８等に到達するために通過するポイントであって、ロボット２０の各部が周囲と干渉しなければよい程度の低い位置精度で構わないポイントである。以下では、このようなポイントを「中継ポイント」と呼ぶ。なお、この中継ポイントは、一般に、エアカットポイント等の名称で呼ばれることもある。本例であれば、ポイントＰ１、ポイントＰ２、ポイントＰ３、ポイントＰ５、ポイントＰ６が中継ポイントに相当する。
【００４３】
本実施形態では、ユーザが、入力部１１を利用して作業手順書の内容に対応する作業手順をフローチャートの形式で入力する。通常、作業手順の内容はロボット２０が物品に対して比較的高精度な位置決めを伴って何らかの作用を及ぼす時の、その作用の詳細の列挙となる。例えば、図３の作業手順をフローチャートの形式で表す場合、図４に示すフローチャートのようになる。
【００４４】
ここで図４における、ステップＡ１１は、物品Ａ上の物品Ｃの置いてある位置へ移動しグリッパを閉じる、という作業手順となる。これはロボット２０の動作としては、グリッパ２７をポイントＰ４に移動し、グリッパ２７を閉じるということである。
【００４５】
また、ステップＡ１２は、物品Ｂ上の物品Ｃ組付け開始位置へ移動、という作業手順となる。これはロボット２０の動作としては、グリッパ２７を閉じたままグリッパ２７をポイントＰ７に移動するということである。
【００４６】
ステップＡ１３は、物品Ｂ上の物品Ｃを挿入位置へ移動しグリッパ２７を開放する、という作業手順となる。これはロボット２０の動作としては、グリッパ２７をポイントＰ８に移動し、グリッパ２７を開放するということである。
【００４７】
これに対して、通常は、特別な必要がない限りはポイントＰ2、ポイントＰ3、ポイントＰ5、ポイントＰ6に対応する記述は省略される。
【００４８】
そして、本実施形態では、予め物品Ａに対してのポイントＰ４の位置を定義し、物品Ｂに対してのポイントＰ７、ポイントＰ８の位置を定義する。また、それらと共に各ポイントにおける物品Ａあるいは物品Ｂに対するグリッパ２７の姿勢を定義して記憶しておく。
他にも例えば、ポイントＰ７よりも高い位置にあるポイントＰ１０や、ポイントＰ１０よりも更に高い位置あるポイントＰ１１の物品Ｂに対しての位置について定義して、それらと共に各ポイントにおける物品Ｂに対するグリッパ２７の姿勢を定義して記憶しておく。
このようなポイントや姿勢の定義を多数準備して記憶しておくことで、それらが動作プログラムを構成する要素、すなわち、移動先ポイントとなる。
【００４９】
そして、例えば図４のようなフローチャートの形式で作業手順書が指定された場合に、各ステップに対応する定義済みのポイントを抽出する。
例えば、物品Ｃの大きさ等に基づいて、ポイントＰ７、ポイントＰ１０、ポイントＰ１１の何れかを選択して、ステップＡ１２に対応する定義済みのポイントとして抽出する。例えば、物品Ｃが大きいため、ポイントＰ７に物品Ｃを移動すると、物品Ｃと物品Ｂが接触してしまうような場合には、ポイントＰ７ではなく、ポイントＰ１０やポイントＰ１１を選択する。本例では、ポイントＰ７をステップＡ１２に対応する定義済みのポイントとして抽出する。
そして、抽出した各ステップに対応する定義済みのポイントを繋げれば、必要最小限の動作プログラムが生成されることになる。
【００５０】
ここで、記憶しておくのは、物品Ａや物品Ｂに対する相対的なポイントＰ４、ポイントＰ７、ポイントＰ８等の位置やグリッパ２７の姿勢の情報である。ロボット２０に対する物品Ａや物品Ｂの配置を変更した場合には、これに応じてロボット２０に対するポイントＰ４、ポイントＰ７、ポイントＰ８等の実際の位置姿勢の数値は変化するが、前記記憶される物品Ａや物品Ｂに対する相対的なポイントＰ４、ポイントＰ７、ポイントＰ８等の位置やグリッパ２７の姿勢の情報が変わることはない。
具体的には、上記の移動先ポイントは、下記の［表１］に示すような組み合わせで記憶される。
【００５１】
【表１】
2018192569.tif 000003
【００５２】
なお、上記のように移動先ポイントの羅列だけでは、実際に機能する動作プログラムとはならない。そこで、移動先ポイントの間を滑らかに繋ぐような、中継ポイントとして、ポイントＰ2、ポイントＰ3、ポイントＰ5及びポイントＰ6を適宜挿入する。中継ポイントは、移動の過程においてロボット２０の各部が周囲と干渉して衝突しないように選択される。このような中継ポイントの挿入は、例えば、「特開２０１５−１６０２７７号公報」に開示の技術等を利用することにより実現できる。
【００５３】
以上説明したように、本実施形態によれば、プログラム生成部１３によるオフラインプログラミングによって、作業手順の各ステップに対応する比較的精度を必要とする移動先ポイントが連ねる形で選択されると共に、移動先ポイント間の中継ポイントは適宜挿入される。これにより、ユーザからフローチャート等の形式で入力された作業手順を実行するための動作プログラムを自動生成することが可能となる。
また、移動先ポイントは複数用意されており、中継ポイントは任意に選択することが可能なことから、様々な作業手順に汎用的に適用して、動作プログラムを生成することが可能となる。
【００５４】
＜動作プログラムの補正＞
次に、移動先ポイント補正部１５により行われる動作プログラムの補正の詳細について説明をする。以下では、物品Ｂと相対関係がある、ポイントＰ７及びポイントＰ８についての補正を例にとって説明する。
【００５５】
物品Ｂに物品Ｃを組み付けるという作業を行うためには、図５に示すような組み付け開始点のポイントＰ７と、物品Ｃを挿入し終えた下端としてのポイントＰ８の２つが移動先ポイントとして予め定義され、記憶される。２つのポイントの位置は、物品Ｂに対する相対位置が一定であり、物品Ｂと一緒に付いて動くような関係にある。従ってロボット２０に対して物品Ｂがどこに存在するかを知ることによって、実際のポイントＰ７、ポイントＰ８という移動先を確定することができる。
【００５６】
そして、本実施形態では「ロボット２０に対して物品Ｂがどこに存在するかを知る」ために視覚センサとしてカメラ３０を利用する。
具体的には、図６に示すように、物品Ｂのような相対的な移動先ポイントが定義される物品に、カメラ３０で捉えることが出来るような参照点Ｒｅｆを事前に配置する。例えば、参照点Ｒｅｆとして、物品Ｂの上にカメラ３０が捉えることが出来るような視覚マークシールを貼り付ける。また、プログラム生成部１３において動作プログラムを生成するのに用いる仮想空間における物品Ｂの同じ場所にも参照点Ｒｅｆを定義する。
【００５７】
そして図７に示すように、ロボット２０における第２アーム２６先の端部等の適当な箇所にカメラ３０を固定設置し、このカメラ３０で撮像した撮像画像を元に参照点Ｒｅｆとカメラ３０の相対関係が所定の状態になるようにロボット２０を制御する。
【００５８】
参照点Ｒｅｆとカメラ３０との相対関係が所定の状態になるということは、結果的に参照点Ｒｅｆと、ロボット２０のグリッパ２７の相対関係もある一定値になるということを意味する。このような処理は、例えば「特許第５８５０９６２号明細書」に開示の技術を利用することにより実現できる。
物品Ｂに対して図８に示すように参照点Ｒｅｆが定義されると、例えば参照点ＲｅｆとポイントＰ７の相対関係（図中のＣ７）が既知となる。従って、上記の［表１］に既出の移動先ポイントを列挙した、下記の［表２］を作成することができる。
【００５９】
【表２】
2018192569.tif 000004
【００６０】
なお、図７に示したように、参照点とカメラの相対関係が所定の状態になる方法を用いる場合、現場の実際のシステムにおいて最初に１回だけ、この「参照点Ｒｅｆとカメラ３０の相対関係が所定の状態」についてのデータを取得するために一種のキャリブレーション作業を行う必要がある。
このキャリブレーション作業について、以下説明する。図９は、上記の「参照点Ｒｅｆとカメラ３０の相対関係が所定の状態」が実現された状態を示す図である。ここで、図９に図示する、Ｕ、Ｔ及びＳはそれぞれ以下を意味する。
Ｕ：ロボット２０（の基準位置）に対するグリッパ２７の位置姿勢情報
（これは一般的に、ロボットコントローラと呼ばれるものにおいてロボット先端部の現在位置を表すデータとして随時取得可能である）
Ｔ：グリッパ２７とカメラ３０の相対関係情報  （未知数）
Ｓ：カメラ３０と参照点Ｒｅｆの相対関係情報  （未知数）
【００６１】
なお、これまでに登場したポイントＰ１〜ポイントＰ８、Ｃ４〜Ｃ８、Ｓ、Ｔ、及びＵ等は、以下の４×４で表す同次変換行列で表される位置姿勢情報に相当する。
【数１】
2018192569.tif 000005
【００６２】
キャリブレーション時の具体的な動作としては、まず図９の状態において、Ｕの値を取得する。次に図６に示すポイントＰ７（又はポイントＰ８）に実際にロボット２０を位置決めして、その時のロボット２０の基準位置に対するグリッパ２７の位置姿勢情報を取得する。つまり、ポイントＰ７の値を取得する。こうして取得された情報は、次の数式を満たす。なお、Ｉｎｖ（Ｘ）は同次変換行列Ｘの逆行列を意味する。
Ｐ７・Ｉｎｖ（Ｃ７）＝Ｕ・Ｔ・Ｓ
【００６３】
この数式から未知数Ｔ・Ｓが求められる。これをＱと表す。
Ｔ・Ｓ＝Ｉｎｖ（Ｕ）・Ｐ７・Ｉｎｖ（Ｃ７）≡Ｑ
【００６４】
以後、任意の移動先ポイント（任意の物品Ｘに対して定義された移動先ポイント、ここではそれをＣｘと表記する）にロボット２０を移動させたい場合は、先ずカメラ３０を用いてその物品上の参照点（＝ＲｅｆＸ）に対して図７のような状態を作り出し、その時のグリッパ２７の位置姿勢Ｕｘを取得する。
すると次の関係式
Ｐｘ・Ｉｎｖ（Ｃｘ）＝Ｕｘ・Ｔ・Ｓ＝Ｕｘ・Ｑ
が成り立つことから
Ｐｘ＝Ｕｘ・Ｑ・Ｃｘ
を導くことができる。
そして、この導いた式に基づいて、動作プログラムの位置情報を補正することによりロボット２０をＰｘに移動させれば、現場の実際のロボット２０は望ましい位置に移動する。
【００６５】
以上説明したように、本実施形態によれば、実際にロボット２０が設置されている現場で、事前に上述のようなキャリブレーション作業を済ませておくことにより、第２アーム２６の先端部に固定されたカメラ３０で周辺物品の参照点Ｒｅｆが自動計測され、これに基づいてロボット制御部１４が補正を行うことから、作業手順書に対応したロボット２０の動作が実現される。
【００６６】
＜本実施形態の動作＞
次に、本実施形態の動作について図１０のフローチャートを参照して説明をする。
ステップＳ１１において、入力部１１がユーザから作業手順書の内容の入力を受け付ける。
【００６７】
ステップＳ１２において、プログラム生成部１３がステップＳ１１にて受け付けた作業手順書に基づいて動作プログラムを生成する。具体的な生成方法は、＜動作プログラムの生成＞との項目にて上述した通りである。
【００６８】
ステップＳ１３において、ロボット制御部１４がステップＳ１２にて生成された動作プログラムに基づいて制御用の信号を生成する。そして、ロボット制御部１４が生成した制御用の信号を駆動制御部２１に対して出力する。駆動制御部２１は、この制御用の信号に基づいてロボット２０の可動部を駆動する。これにより、ロボット２０は、動作プログラムに応じた動作を開始する。
【００６９】
ステップＳ１４において、ロボット制御部１４は何らかのポイント（教示点）への移動を行う際に、グリッパ２７が何れかの移動先ポイントの近傍に移動したか否かを判定する。移動先ポイントの近傍に移動していない場合には、ステップＳ１４においてＮｏと判定され、処理はステップＳ１５に進む。そして、ステップＳ１５において、グリッパ２７は所定の中継ポイントに移動する。
ステップＳ１６において、ロボット制御部１４は、動作プログラムに含まれる全ての作業手順が終了したか否かを判定する。
未だ全ての作業手順が終了していない場合は、ステップＳ１６においてＮｏと判定され、処理はステップＳ１４に戻る。そして、ステップＳ１４から処理が繰り返される。
一方で、全ての作業手順が終了した場合は、ステップＳ１６においてＹｅｓと判定され、処理は終了する。
グリッパ２７が何れかの移動先ポイントの近傍に移動した場合、ステップＳ１４においてＹｅｓと判定され、処理はステップＳ１７に進む。
ステップＳ１７において、移動先ポイント補正部１５は、画像取得部１６を介して撮像部３１が撮像した、移動先ポイントの近傍の撮像画像を取得する。
【００７０】
ステップＳ１８において、移動先ポイント補正部１５がステップＳ１７において取得した撮像画像に基づいて、参照点Ｒｅｆとカメラの相対関係が所定の状態になったか否かを判定する。
参照点Ｒｅｆとカメラの相対関係が所定の状態になっていない場合は、ステップＳ１８においてＮｏと判定され、ステップＳ１９にてロボットを駆動してカメラの位置を調整した上で、処理はステップＳ１７に戻る。そして、ステップＳ１８の判定が再度行われる。
参照点Ｒｅｆとカメラの相対関係が所定の状態になった場合は、ステップＳ１８においてＹｅｓと判定され、処理はステップＳ２０に進む。
【００７１】
ステップＳ２０において、移動先ポイント補正部１５は、ステップＳ１８においてＹｅｓと判定された時点のグリッパ２７の位置姿勢情報（前記Ｕｘ）と、参照点Ｒｅｆに対して定義された移動先ポイントの情報（前記Ｃｘ）と、上述のキャリブレーションによって予め求めた相対関係の情報（前記Ｑ）とに基づいて動作プログラムに含まれる位置情報について補正を行う。具体的な補正方法は、＜動作プログラムの補正＞との項目にて上述した通りである。これにより、グリッパ２７は正確に移動先ポイントに移動することができる。
【００７２】
ステップＳ１６において、ロボット制御部１４は、動作プログラムに含まれる全ての作業手順が終了したか否かを判定する。
未だ全ての作業手順が終了していない場合は、ステップＳ１６においてＮｏと判定され、処理はステップＳ１４に戻る。そして、ステップＳ１４から処理が繰り返される。
一方で、全ての作業手順が終了した場合は、ステップＳ１６においてＹｅｓと判定され、処理は終了する。
【００７３】
以後は、この処理により補正された動作プログラムを利用してプログラミング装置１０がロボット２０を制御することにより、作業手順書に応じた所定の作業手順をロボット２０に繰り返し行わせることが可能となる。
【００７４】
以上説明した本実施形態によれば、ユーザは作業手順書の内容を入力するのみで動作プログラムを生成することが可能となる。また、その後は、ロボット制御部１４が自動的に補正を行うことから、ロボット２０の動作プログラムが高い精度で稼働するようになる。
つまり、ユーザがティーチング・プレイバックにより動作プログラムを調整する手間を省くことができる。
【００７５】
また、本実施形態によれば、中継ポイントについては、移動先ポイント補正部１５による参照点Ｒｅｆに対応する視覚マークを利用した補正処理を要さない。そのため、移動先ポイント及び中継ポイントの全てのポイントについて視覚マークを設置する場合と比べて、視覚マークを設置する数を減らすことができる。つまり、ユーザによる視覚マークの設置の手間も省くことができる。
【００７６】
このように、本実施形態では、オフラインプログラムから始まる一連の工程に対して人手の介入が非常に少なくて済む。すなわち、本実施形態によれば、従来に比して、より簡便にロボットの立ち上げ作業を行うことが可能となる。
【００７７】
なお、上記のロボット制御システムに含まれる各装置のそれぞれは、ハードウェア、ソフトウェア又はこれらの組み合わせにより実現することができる。また、上記のロボット制御システムに含まれる各装置のそれぞれが協働することにより行なわれるロボット制御方法も、ハードウェア、ソフトウェア又はこれらの組み合わせにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ(Read Only Memory)、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ(Programmable ROM)、ＥＰＲＯＭ(Erasable PROM)、フラッシュＲＯＭ、ＲＡＭ(random access memory）)を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００７８】
また、上述した実施形態は、本発明の好適な実施形態ではあるが、上記実施形態のみに本発明の範囲を限定するものではなく、本発明の要旨を逸脱しない範囲において種々の変更を施した形態での実施が可能である。
例えば、プログラミング装置１０の機能の一部をパーソナルコンピュータ等で実現するようにしてもよい。つまり、ロボットコントローラとパーソナルコンピュータとでプログラミング装置１０を実現するようにしてもよい。
また、例えば、以下の＜変形例＞のような変形を加えるようにしてもよい。
【００７９】
＜変形例＞
上述した実施形態では、＜動作プログラムの補正＞との項目で、図６〜図９を参照して説明したように、物品Ａや物品Ｂの上に、カメラ３０で捉えることが出来るような参照点Ｒｅｆを事前に配置していた。例えば、参照点Ｒｅｆとして、物品Ａや物品Ｂの上にカメラ３０が捉えることが出来るような視覚マークをそれぞれシール等として貼り付けていた。
また、これら参照点Ｒｅｆと、これらに対応するデータとを表２に示すように対応付けて記憶しておき、このデータを利用して動作プログラムの補正を行っていた。
【００８０】
ここで、物品Ａに対応する参照点（以下「参照点ＲｅｆＡ」とする。）と、物品Ｂに対応する参照点（以下「参照点ＲｅｆB」とする。）がある程度離れた位置にあるような場合には、動作プログラムに基づいて動作するロボット２０に設置されたカメラ３０は、参照点ＲｅｆＡを撮像した後に移動して、更に参照点ＲｅｆBを撮像する。そのため、移動先ポイント補正部１５は、先に撮像された参照点を参照点ＲｅｆＡであると認識して補正を行った後に、次に撮像された参照点を参照点ＲｅｆBであると認識して補正を行うことができる。
【００８１】
しかしながら、参照点ＲｅｆＡと参照点ＲｅｆBが近傍に設置されているような場合や、カメラ３０から同方向に設置されている場合には、例えば、参照点ＲｅｆＡと参照点ＲｅｆBが同時に撮像されることがある。このように、参照点ＲｅｆＡと参照点ＲｅｆBが同時に撮像されたような場合、移動先ポイント補正部１５は、２つの参照点Ｒｅｆを区別することができない。
【００８２】
そこで、本変形例では、参照点ＲｅｆＡと参照点ＲｅｆBに対応する視覚マークそれぞれに、参照点ＲｅｆＡと参照点ＲｅｆBを識別するための追加情報を加える。この点について図１１Ａ及び図１１Ｂを参照して説明する。
まず、図１１Ａには、参照点Ｒｅｆを示す視覚マークの例であって、上記のような追加情報を加えていない視覚マークの例を示す。移動先ポイント補正部１５は、図１１Ａの例のような視覚マークを撮像データから取得し、これにより、参照点Ｒｅｆの位置を特定することができる。
【００８３】
一方で、図１１Ｂには、参照点Ｒｅｆを示す視覚マークの例であって、上記のような追加情報を加えた視覚マークの例を示す。本例では、追加情報として、文字等の論理情報を表す２次元コードを視覚マークに加えている。移動先ポイント補正部１５は、図１１Ｂの例のような視覚マークを撮像データから取得し、これにより、参照点Ｒｅｆの位置を特定するのみならず、二次元コードを解析することによって文字等の論理情報を取得することができる。そして、この論理情報を、例えば、参照点ＲｅｆＡと参照点ＲｅｆBを識別するための識別情報として利用する。この場合、表２に相当するデータに、この識別情報と各参照点Ｒｅｆの関係も対応付けて含ませておき記憶しておく。
【００８４】
これにより、移動先ポイント補正部１５は、現在カメラ３０で撮像された参照点Ｒｅｆの
視覚マークシールの像が、何れの物品に対応する参照点Ｒｅｆであるのかを識別することができる。つまり、本変形例によれば、カメラ３０で捉えている物品が何であるかを確実に特定することができる、という効果を奏する。
なお、本変形例を更に変形して、論理情報を、二次元コード以外の態様で追加するようにしてもよい。また、論理情報に、表２における移動先ポイント情報等を含ませておき、これを移動先ポイント補正部１５が取得するようにしてもよい。
【００８５】
＜本実施形態の適用例＞
次に、図１２を参照して、本実施形態の適用例について説明をする。図１２には、ロボット２０と、ステーション５０ａ〜ステーション５０ｆと、走行軸４０とを図示する。ステーション５０ａ〜ステーション５０ｆには、複数の物品（例えば、ステーション５０ａであれば物品ａ１〜物品ａ５）が配置されている。
【００８６】
そして、ロボット２０は、走行軸４０に沿って移動することにより、各ステーション５０の各物品まで移動することができ、各ステーション５０において所定の作業を行う。このような状況下において、ロボット２０が、同様の物品が配置された複数のステーション５０のそれぞれにおいて、同様の作業を行う場合がある。
【００８７】
このような場合に、各ステーション５０それぞれの作業について、それぞれの作業に対応した動作プログラムを生成することが考えられる。しかしながら、各ステーション５０では、同様の作業を行うのであるから、同様の動作プログラムをいくつも生成することは無駄である。そこで、一度だけユーザから作業手順書の内容の入力を受け付ける。そして、この入力に基づいて動作プログラムを生成し、この動作プログラムをひな形としてコピーし、各ステーション５０の作業に用いることが考えられる。
【００８８】
しかしながら、ステーション５０ａ〜５０ｆの構成は基本的に同じではあるが、各ステーションにおいて、各物品を高精度に同一配置にするのは現実的に困難である。そのため、厳密に言えばロボット２０に対する各物品の相対位置は同一ではない。従って、同一のロボット動作プログラムをそのまま各ステーション５０に適用することはできない。
【００８９】
そこで各ステーション５０のそれぞれにおいて、カメラ３０による参照点Ｒｅｆの計測と、参照点Ｒｅｆとカメラの相対関係が所定の状態になるようなロボット２０の制御を行う。これにより、各ステーション５０それぞれにおいて、動作プログラムの移動位置を補正することができ、最終的に各ステーション５０に適した別々の動作プログラムが完成することになる。
【００９０】
ここで、上述したように、動作プログラムをひな形としてコピーするという方法を利用すれば、ユーザが動作プログラムを作成するために作業手順書の内容を入力する回数は一度だけでよい。つまり、ステーション５０の数が多数あるからといってユーザの手間は増えることはないので、効率的にロボットシステムの立ち上げができることが可能となる。
【００９１】
また、他にもロボット２０の周辺に配置される物品の位置が頻繁に変わるような状況であっても、物品の位置が変わる都度、カメラ３０による参照点Ｒｅｆの計測と、参照点Ｒｅｆとカメラの相対関係が所定の状態になるようなロボット２０の制御を行うことにより、一度作成した動作プログラムを繰り返し利用することが可能となる。
【００９２】
＜本実施形態の他の技術との比較＞
次に、本実施形態の特徴について、一般的な教示方法との比較を行いながら説明する。
ロボットに何らかの意図を持った作業を教え込む操作・作業を（ロボットの）教示と呼ぶ。ここで教示を行う方法としては、例えば以下の（１）〜（３）のような複数の方法がある。
【００９３】
（１）  最も原始的なものは、ロボットをジョグ操作しながらのティーチング・プレイバックである。
ロボットの基本的な機能として、教示操作盤を使ってマニュアル操作によって所定の関節軸を正負方向に移動させたり、仮想的な直交座標系空間内でロボットのエンドエフェクタをＸ＋／−方向、Ｙ＋／−方向、Ｚ＋／−方向に移動させたり、あるいは所定のルールでエンドエフェクタの姿勢を変更したりするジョグ操作と呼ばれるものがある。これを使って、ロボットが置かれた現場で、ロボットを適当に移動させて移動先位置を記憶させ、移動と記憶を繰り返す。一連のロボット動作とその記憶が終わった後、先程記憶させた内容を再生する。
【００９４】
（２）  他の方法として、ロボットをハンドガイド（ハンドガイダンス）操作しながらのティーチング・プレイバックがある。
教示操作盤を使ったジョグ操作の代わりに、ロボットのエンドエフェクタやロボット本体をオペレータが直接押したり引いたりして移動させる。エンドエフェクタ近傍やロボットの関節軸などに力センサやトルクセンサなどが組み込まれていて、ロボットが受ける外力を検出して、あたかもオペレータがロボットを誘導しているかのようにロボットを移動制御する。このような方法でロボットを移動させた上で移動先位置を記憶させる。これも一種のティーチング・プレイバックである。
【００９５】
（３）  更に他の方法として、オフラインプログラミングがある。
コンピュータの上で一種のシミュレーションシステムを構築し、そこにロボットが使われる環境を仮想的に再現した仮想空間と、そのロボットに対応する仮想ロボットを定義・設定し、このシミュレーションシステム上でロボットの動作プログラムを作成していく。
【００９６】
上述した（１）や（２）の方法は、実際の現場で実ロボットを使用してロボットの動作プログラムを作成していくのだが、オフラインプログラミングはそれら（実物）を使わずに動作プログラムの作成が可能である。そのため、実物が無い段階からロボットの動作プログラムの作成ができることや、仮想空間の内容（ロボットや周辺機器の種類や設置場所など）を比較的容易に変更できることにより、プログラミングの試行錯誤がしやすいという長所がある。これに対して（１）や（２）の方法は、そういった試行錯誤が比較的困難である。
【００９７】
このように、オフラインプログラムには優位性があるが、オフラインプログラミングで作成されたロボットの動作プログラムは、実際の現場の実際のロボットにそのまま適用できるわけではなく、通常何らかの調整作業が必要になるのが短所と言える。
この「何らかの調整作業」が必要になる主な理由は次の（い）及び（ろ）の２つである。
【００９８】
（い）  コンピュータ上のシミュレーションシステムの上で動作するロボットは、動作指令通りに正確に動作する。具体的には、ロボットの座標系で（Ｘ，Ｙ，Ｚ）＝（５００．０，−５０．０，１５０．０）に移動するように動作指令を与えれば、エンドエフェクタの所定の箇所が正しくその位置に到達する。
一方、実際のロボットは、その機構部を構成する部品の寸法誤差、組立誤差、ロボットを動作させる制御上の位置決め誤差、重力の影響による機構部品の歪みなど様々な要因が重なり合って、誤差を含んだ位置に到達する。
【００９９】
（ろ）  ロボットは通常、エンドエフェクタで把持している物品Ａを作業台の上に位置決めされている物品Ｂに組み付けるといったように、周辺装置や周辺物に作用を及ぼす（周辺装置等と称することにする）。ここではロボットと周辺装置等の相対位置関係に留意する必要がある。コンピュータ上の仮想空間内でのこれらの相対位置関係通りに現場のロボットや周辺機器等を正確に配置するのは容易ではなく、例えば数十ｍｍ程度の誤差を伴うことは往々にしてある。
【０１００】
こうした誤差に対処して、最終的にロボットを適切な位置に到達させるようにするのが上述した「何らかの調整作業」である。これは比較的大変な作業であり、オフラインプログラミングの普及の足枷になっているとも考えられる。この調整作業を行う方法としては、以下の（ａ）〜（ｄ）のような方法が考えられる。
【０１０１】
（ａ）  最も単純な方法としては、オフラインプログラミングによって作成されたロボット動作プログラムを、実ロボットにて低速度で再生しながら、教示点毎にロボットの到達位置を確認し、それが適切でない場合は上記の（１）や（２）と同じ方法でロボットの到達位置を微調整して、教示位置のデータを更新するというものが挙げられる。
動作プログラムが何も無い状態から教示作業を開始する上記の（１）や（２）の方法に比べれば、作業全体の手間は削減できるかもしれないが、教示点の数が多ければ微調整の手間も膨大になる。また微調整前の教示点の内容次第ではロボットが周辺装置等に衝突する可能性もある。例えば、スポット溶接ガンの先端が車体パネルにめり込む等の可能性がある。
【０１０２】
（ｂ）  上記の（い）や（ろ）といった要因で発生する誤差量を事前に同定して、それらを補償するという方法が挙げられる。
先ず（い）の誤差に対しては、ロボットにエンドエフェクタを装着した状態で様々な動きをさせたところを、外部に設置した３次元測定器で計測する。この方法でロボットへの動作指令と３次元測定器で計測された実際のロボット到達位置の組み合わせを多数取得し、これら多数のデータを数学的に解析して機構部の誤差量や重力による歪み量を補正するための幾何学計算式を導出する。これに基づいてロボットの動作制御に所定の補正を加えることで、ロボットの絶対位置決め精度を向上させる。なお、この方法は必ずしも実際の現場で行う必要はなく、別の場所でロボット単体に対して事前に行っておくことが可能である。
【０１０３】
他方（ろ）の誤差に対しては、現場にロボットと周辺装置等を配置した後で、外部に設置した３次元測定器でロボット機構部上の複数の所定点と周辺装置等の上の複数の所定点の３次元位置をそれぞれ計測し、これらからロボットと周辺装置等の相対位置関係を導出する。この相対関係の情報をコンピュータ上のシミュレーション装置へフィードバックして、仮想空間内のロボットと周辺装置等の配置を変更（すなわち現場の配置に合わせる）し、その上でロボットの動作プログラムを再生成して、それを現場のロボットに適用する。
【０１０４】
上記（い）及び（ろ）に対応する２つの方法を組み合わせることで誤差を抑えた状態でロボット動作プログラムを実行することができるようになる。しかしながら、これを達成するために必要とされる知識や技能のレベルは高く、また手間も相当掛かると言わざるをえない。
【０１０５】
（ｃ）  上記（ｂ）の方法を、（い）の誤差を低減させる前半と（ろ）の誤差を低減させる後半に分けて考えた場合、現場に３次元測定器等の機材を持ち込んで作業をする必要があることや、現場は往々にして様々な物が混在しており空間的な制約が大きいことから、後半の方が手間の面で大変である。
【０１０６】
そこで後半部のみを簡略化することが考えられる。具体的には、「特許第３７３３３６４号明細書」に開示の技術を利用する。この技術は既存のロボットシステムを別の場所に移設する時の手間を削減する方法であるが応用することが可能である。
具体的には、「移設前のロボットシステム＝仮想空間内のロボットシステム」であるとして、仮想空間内の周辺装置等の所定箇所に少なくとも３箇所の基準マークを定義して、仮想ロボットに対するこれら基準マークの位置を事前に求めておき、「移設後のロボットシステム＝実際の現場のロボットシステム」であるとして、仮想空間内で定義した基準マークの位置に相当する実際の周辺装置等の上の位置に実際の基準マークを設け、これを実際のロボットとカメラで計測するようにすればよい。
この方法は、１つの剛体の上に多数の教示点が存在しているようなケースにおいて、調整作業の手間を削減する効果が大きい。例えば、車体部品に対するスポット溶接などが典型的な例となる。
【０１０７】
逆に、複数の周辺装置等が別個にロボットの周辺に配置されるようなケースでは、それぞれで少なくとも３箇所の基準マークを設けて計測作業を行わなければならず、手間の削減効果が低下する。さらに各周辺装置上の教示点数が少ないケースになると削減効果はさらに低下する。例えば周辺装置等が１０個あり、それぞれで教示点が１点ずつしかないようなケースだと、合計１０点の教示点の自動調整のために基準マークを３×１０＝３０箇所に設けて、それらをカメラで計測しなければならなくなるので、返って手間が増大してしまうことになる。
【０１０８】
（ｄ）「特開平７−３２５６１１号公報」に開示の技術を利用することも考えられる。この技術では、スポット溶接の打点毎にエンドエフェクタ先端に装着したカメラでマークを計測し、ロボットの位置を調整した上で教示位置のデータを更新する。上記（ａ）においてマニュアル操作で教示点の修正をしている部分を、カメラを利用して自動化したものと捉えることができる。カメラを使うことでスポット溶接打点とカメラの間にある程度の距離が確保され、上記（ａ）に内在する衝突の危険性は低下する。また、オペレータの手作業の手間は削減されるが、全ての打点をカメラで調整するため調整のための総時間は短くはない。
【０１０９】
以上様々な技術について説明した。ここで上述したように、オフラインプログラミングによって作成された動作プログラムにおけるロボットの教示点は、現場の実際のロボットでは教示点の調整作業が必要になる。
【０１１０】
そのために、上述した（ａ）〜（ｄ）のような方法で調整作業を行う。ここで、通常、調整作業はロボットシステムの立ち上げ時に１回だけ行って、後は完成したロボット動作プログラムをただ再生するのみである。つまり、ロボットと周辺装置等の配置が一旦決められれば、以後これは変化しないのが大前提である。また毎回入れ替わる作業対象ワークも正確に位置決めされる必要がある。これらが満たされているような生産設備であれば、（ａ）〜（ｄ）の方法にそれぞれ長所や短所はあるものの、皆一定の有用性を発揮すると考えられる。特に自動車の車体製造ラインのような大量生産型の生産設備では、（ｃ）や（ｄ）の方法などが手間の削減に有用であると考えられる。
【０１１１】
しかし世の中にはこれとは異なる構成の生産設備も存在し、これらの技術が有効に機能しないものもある。例えば、ロボットと周辺装置等の相対関係が毎回変わるような事情がある場合は、（ａ）、（ｂ）、（ｄ）の方法に頼ろうとすると、毎回調整作業を行わなければならず役に立たない。
【０１１２】
一方、（ｃ）の方法であれば対応できる可能性がある。例えば、ロボットが車体パネルに対してスポット溶接するような生産設備の場合は、車体パネルの位置が毎回変わるような事情があったとしても、車体パネルの位置に連動する少なくとも３箇所の視覚マークをカメラで計測するようにできれば、毎回の変化に対応しうると言える。
【０１１３】
しかし上述したように、物品の数が多数あって、かつそれらの位置が毎回変わるような事情がある場合には、（ｃ）の方法であっても対応が難しい。
特に、図１２を参照して説明したような記載の構成では、（ａ）〜（ｄ）の方法での対応が難しい。
その理由であるが、仮に上記の（ｃ）に示される調整作業の方法を行うと、各物品ａ１、ａ２、・・・・、ｆ５の全て（３０個）でそれぞれ少なくとも３箇所の視覚マークを設けてカメラによる計測を行わなければならず効率が悪いからである。特に、各物品での教示点の数が少ない場合には、なおさら非効率となる。
【０１１４】
しかしながら、図１２を参照して上述したように、本願発明に示したような実施形態であれば、各物品それぞれにおいて、１箇所の視覚マークに対するカメラによる計測で済むので効率的である。
そのため、本実施形態によれば、図１２に示すようなロボットシステムが対象である場合にも、非常に効率的に、かつ少ない手間でシステムの立ち上げを行うことができる、という効果を奏する。
【符号の説明】
【０１１５】
１０  プログラミング装置
１１  入力部
１２  出力部
１３  プログラム生成部
１４  ロボット制御部
１５  移動先ポイント補正部
１６  画像取得部
２０  ロボット
２１  駆動制御部
２２  ベース部
２３  第１関節部
２４  第１アーム
２５  第２関節部
２６  第２アーム
２７  グリッパ
３０  カメラ
３１  撮像部
４０  走行軸
５０  ステーション
【図１】
2018192569.tif 000006
【図２】
2018192569.tif 000007
【図３】
2018192569.tif 000008
【図４】
2018192569.tif 000009
【図５】
2018192569.tif 000010
【図６】
2018192569.tif 000011
【図７】
2018192569.tif 000012
【図８】
2018192569.tif 000013
【図９】
2018192569.tif 000014
【図１０】
2018192569.tif 000015
【図１１Ａ】
2018192569.tif 000016
【図１１Ｂ】
2018192569.tif 000017
【図１２】
2018192569.tif 000018