図1は、本発明の実施形態に係る処理システム200の物理的な構成を示す概略図である。処理システム200は、ここで示した例では、生命科学における実験や、試料に対して施す処理をロボット3を用いて自動化したシステムである。処理システム200に使用されるロボット3はここでは汎用品であり、ロボット3のアームを用いて、生命科学において一般に使用される種々の機器を人に代わって操作し、種々の複雑な操作を連続して行っていくように制御される。各操作では、試料に応じてなされる、熟練者による手技が高精度に再現される。
処理システム200は、特定の実験や処理のみを実行するいわゆる専用機ではなく、種々の実験や処理に柔軟に対応できる汎用機としての性質を有している。そのため、処理システム200には動作指令生成装置1が含まれ、動作指令生成装置1にプロトコルチャートを入力することで、動作指令生成装置1は自動的にロボット動作指令を生成し、ロボット3を制御し所望の動作をさせるようになっている。ここで、プロトコルチャートは、生命科学におけるいわゆるプロトコル(実験や処理の手順及び条件を記述したもの)を、人が認識でき、また記述の様式を共通化するべくチャートの形式で表現したものである。プロトコルチャートの具体的な形式は後述するが、プロトコルチャートには、処理対象に対する処理又は処理対象を収容した容器に対する処理をそれぞれ表し、処理順番が決定された複数の処理シンボルが含まれる。そして、複数の処理シンボルは、プロトコルに含まれる個々の処理を視覚的に表現したシンボルであり、処理シンボルの配置により個々の処理の手順が明示される。
なお、本実施形態では、処理システム200を生命科学における実験や処理をする汎用のセルとして示したが、処理システム200が適用される技術の分野は生命科学に限定されるものではない。ロボット3を用いて様々な処理に柔軟に対応できる自動機を用いることができるいかなる用途に用いてもよい。したがって、動作指令生成装置1は、処理システム200が実行すべき全体の作業を示す全体作業フローが与えられると、かかる全体作業フローからロボット動作指令を生成するものである。また、全体作業フローには、作業コマンドが含まれる。ここで、先のプロトコルチャートは、生命科学の分野における、全体作業フローに相当する。また、作業コマンドは、ユーザがロボット3にさせようとする一作業を示すものであり、プロトコルチャートに含まれる処理シンボルは、作業コマンドに相当する。
したがって、以降の説明では、処理システム200を生命科学における実験や処理をする汎用のセルとして例示している都合上、「プロトコルチャート」及び「処理シンボル」の語を用いるが、これは技術の分野を限定しない場合には、「全体作業フロー」及び「作業コマンド」と読み替えられる。また、プロトコルチャート及び処理シンボルの具体的記述方式として後述するものは、一つの例であり、プロトコルチャート及び処理シンボルはもちろん、全体作業フロー及び作業コマンドの記述形式を特定の形式に限定するものではない。
動作指令生成装置1自体は、専用の機器であってもよいが、ここでは一般的なコンピュータを使用して実現されている。すなわち、市販のコンピュータにおいて、当該コンピュータを動作指令生成装置1として動作させるコンピュータプログラムを実行することによりかかるコンピュータを動作指令生成装置1として使用する。かかるコンピュータプログラムは、一般にアプリケーションソフトウェアの形で提供され、コンピュータにインストールされて使用される。当該アプリケーションソフトウェアは、CD−ROMやDVD−ROMその他のコンピュータ読み取り可能な適宜の情報記録媒体に記録されて提供されてよく、また、インターネット等の各種の情報通信ネットワークを通じて提供されてもよい。あるいは、情報通信ネットワークを通じて遠隔地にあるサーバによりその機能が提供される、いわゆるクラウドコンピューティングにより実現されてもよい。
処理システム200は、動作指令生成装置1により生成された動作指令に基づき、少なくともロボット3を制御するロボット制御装置2を含む。ここで、ロボット制御装置2は、原則として、ロボット3の内部に原点を有するロボット座標系SRを用いて、ロボット3の動作を規定し、制御する。本実施形態に係るロボット制御装置2は、ロボット3と一体となって設けられているが、ロボット3と別体に設けられてもよい。
ロボット3は、汎用の多関節ロボットである。ロボット3の形式は特に限定されず、垂直多関節型、水平多関節型、ガントリ型等用途(技術の分野)に応じた任意の形式でよく、また、同時設置数も任意である。本実施形態では、ロボット3は双腕垂直多関節型ロボットであり、コンパクトであると同時に、2本のロボットアームを有することにより、熟練した人が行う作業を高い精度で再現する。
ロボット3は、2本のロボットアームを用いて、処理対象又は処理対象を収容した容器に対する処理を行う。ロボット3は、ロボットアームによりピペットラック10に収容されたピペット4を把持し操作する等、図示しあるいは図示しない実験器具を操作することができる。また、ロボット3は、ロボットアームによりチューブラック5aに格納されたマイクロチューブ6を把持し、マイクロチューブ6をチューブラック5aから恒温槽9、ボルテックスミキサー11又は遠心分離器12等へ移動させるなど、図示しあるいは図示しない各種容器を移動させることができる。本実施形態では、ロボット3は、ロボットアームによりピペット4を把持し、液剤を吸引又は注入する場合、チップラック7に用意されたチップ8をピペット4の先端に装着して作業を行う。チップ8は、原則として使い捨てされるものであり、使用済みのチップ8は、ダストボックス13に廃棄される。恒温槽9には、液剤Aと液剤Bが載置され、一定温度に保たれている。液剤A及び液剤Bは、処理システム200で行おうとする処理に必要な適宜のものを必要な種類及び量だけ用意すればよく、この例では、例えばリン酸緩衝食塩液や溶解バッファーである。
図1に示す例では、処理システム200に恒温槽9と、ボルテックスミキサー11と、遠心分離器12とが含まれるが、これらは実験を行う場合に用いられる器具の一例であり、これらの器具に加えて又は換えて、他の器具が含まれてもよい。例えば、処理システム200には、ペトリ皿を保管するラックや、マグネットラック等が含まれてもよい。
図2は、本発明の実施形態に係る動作指令生成装置1の物理的な構成を示すブロック図である。図2に示した構成は、動作指令生成装置1として用いられる一般的なコンピュータを示しており、CPU(Central Processing Unit)1a、RAM(Random Access Memory)1b、静的記憶装置1c、GC(Graphics Controller)1d、入力デバイス1e及びI/O(Input/Output)1fがデータバス1gにより相互に電気信号のやり取りができるよう接続されている。ここで、静的記憶装置1cはHDD(Hard Disk Drive)やSSD(Solid State Drive)等の静的に情報を記録できる装置である。またGC1dからの信号はフラットパネルディスプレイ等の、使用者が視覚的に画像を認識するモニタ1hに出力され、画像として表示される。入力デバイス1eはキーボードやマウス、タッチパネル等の、ユーザが情報を入力するための機器であり、I/O1fは動作指令生成装置1が外部の機器と情報をやり取りするためのインタフェースである。
図3は、本発明の実施形態に係る動作指令生成装置1の機能ブロック図である。なお、ここで示した機能ブロックは、動作指令生成装置1等が有する機能に着目して示したものであり、必ずしも各機能ブロックに1対1に対応する物理的構成が存在するとは限らない。いくらかの機能ブロックは動作指令生成装置1のCPU1a等の情報処理装置が特定のソフトウェアを実行することにより実現され、またいくらかの機能ブロックは動作指令生成装置1のRAM1bや静的記憶装置1c等の情報記憶装置に特定の記憶領域が割り当てられることにより実現されてよい。
動作指令生成装置1は、全体作業フロー取得部20を有しており、全体作業フロー取得部20により取得されたプロトコルチャートに基づいて、ロボット動作指令を生成する。本実施形態では、全体作業フローは、プロトコルチャートである。プロトコルチャートは、プロトコルチャートを示す電子ファイルを読み込むことによって取得されても、また、動作指令生成装置1の入力デバイス1eを用いてユーザにより入力されることによって取得されてもよい。後者の場合、動作指令生成装置1は、同時にプロトコルチャートの作成および編集機能をも備えていることとなり、実際かかる機能を備えるものとしてよいが、かかる機能は本発明を説明する上で重要ではないため、本明細書ではその詳細な説明は書略する。
ここで、ロボット動作指令とは、プロトコルチャートに記述された、処理システム200が全体として実現すべき一連の作業をロボット3が実行するために、ロボット3に与えられる命令群である。言い換えれば、プロトコルチャートは人がプロトコルを理解できるように記述されたものであるのに対し、ロボット動作指令は、ロボット3がプロトコルを実行できるように記述されたものともいえ、動作指令生成装置1は、人が見て理解できるプロトコルチャートを、ロボット3が実行できるロボット動作指令に変換する装置であるということもできる。
ロボット動作指令には、単位ジョブとつなぎジョブが含まれる。ここで、単位ジョブは、ロボット3の基本的な一動作命令を示すものであって、開始位置と終了位置が定義されている。ここで、基本的な一動作命令とは、必ずしもロボット制御装置2が認識し実行する一命令(ニーモニック)には対応せず、ロボット3の動作としてひとまとまりと考えられる単位を示す。一動作命令の中には複数のニーモニックが含まれてよく、当然にロボットの複数の単位動作が含まれてもよいが、ひとまとまりの動作をそれら単位動作に分解して任意に組み合わせることは不適当である。例えば、「容器をつかむ」という単位ジョブは、ロボットアームを対象容器の位置まで移動させ、ハンドを動作させて指で容器をはさむ、という複数の単位動作を含むが、これらを分解して、単にロボットアームを対象容器の位置まで移動させるだけの単位動作や、何もないところでハンドを動作させて指で挟むような単位動作には意味がないから、これらは一動作命令とは言えず、単位ジョブを構成しない。
なお、ここでいう開始位置と終了位置は、ロボット3の各関節の位置、すなわち、各モータの回転角のベクトル量を示しており、その実際上の意味は、ロボット3の姿勢である。すなわち、開始位置は、動作開始時のロボット3の姿勢を意味し、終了位置は、動作終了時のロボット3の姿勢を意味している。
つなぎジョブは、単位ジョブ間のロボット3の位置(すなわち、姿勢)の違いを吸収する動作であり、より具体的には、先の単位ジョブの終了位置から後の単位ジョブの開始位置までロボットを移動させる(姿勢を変化させる)ための、単一または複数の移動命令の集合である。ロボット動作指令は、この単位ジョブと、つなぎジョブが順序付けられ、実行されることで、ロボット3が新たな軌道の生成や補完をすることなく、切れ目なく連続して動作できるように構成される。
動作指令生成装置1の外部記憶装置1cには、記憶領域として、コマンド定義データベース1ca、単位ジョブ群記憶部1cb、状態情報データベース1cc、つなぎジョブ記憶部1cd、作業モデル記憶部1ce及びロボット動作指令記憶部1cfが割り当てられている。さらに、動作指令生成装置1は、ロボット動作指令を生成し、また、全体作業時間を予測するための種々の機能を有しており、各機能は図3では機能ブロックとして示されている。ここでは、全体作業フロー取得部20に加え、作業コマンド抽出部21、コマンド定義抽出部22、単位ジョブセット生成部23、状態情報生成部24、つなぎジョブ生成部25、つなぎジョブシミュレータ26、ロボット動作指令生成部27、ロボット動作指令表示部28及びロボット動作指令出力部29に加え、全体作業時間予測部30及び全体作業時間表示部31が示されている。
各機能ブロックの動作の詳細は、後ほど動作指令生成装置1の全体動作の説明をする際に併せて説明するので、ここでは、各機能ブロックの機能の概要を説明する。
全体作業フロー取得部20は、全体作業フローを外部から取得する。ここでは、全体作業フローはプロトコルチャートであり、すでに述べたとおり、プロトコルチャートを示す電子データを取得することによっても、ユーザからの入力によりプロトコルチャートを取得することによってもよい。
作業コマンド抽出部21は、全体作業フロー取得部20から全体作業フローを受け取り、全体作業フローに含まれる作業コマンドをその実行順に抽出する。この場合、プロトコルチャートに含まれる処理シンボルを、プロトコルチャートの解釈ルールに従って、実行純に抽出する。
コマンド定義抽出部22は、作業コマンド抽出部21から作業コマンドを受け取り、当該作業コマンドに対応するコマンド定義をコマンド定義データベース1caから抽出する。コマンド定義は、作業コマンド毎に使用する単位ジョブの順序及び組み合わせを1又は複数定義するものである。ここでは、処理シンボル毎にどの組み合わせるべき単位ジョブと、その順番が定義されているものとなる。
単位ジョブセット生成部23は、コマンド定義抽出部22から、作業コマンドとコマンド定義を受け取り、コマンド定義に定義された順序及び組み合わせに基づいて、単位ジョブ群記憶部1cbに記憶された単位ジョブを呼び出し、ロボット制御装置3が実行できる命令のセットである、単位ジョブのセットを生成する。このとき、コマンド定義により定まる単位ジョブのセットは、コマンド定義と1対1には必ずしも対応しない。すなわち、同じコマンド定義を用いても、異なる単位ジョブのセットが生成されることが有り得る。
これは、コマンド定義には、順序付けられ、実行される単位ジョブを示す情報のほか、条件分岐など、実行される単位ジョブを変化させる制御情報が含まれるためである。そして、単位ジョブセット生成部23は、コマンド定義のパラメータなどの引数と、状態情報データベース1ccに記録された、処理システム200の状態情報を適宜参照し、制御情報に基づいて、実行すべき単位ジョブとその順序を決定し、単位ジョブのセットを生成する。
また、状態情報生成部24は、単位ジョブセット生成部23により生成された単位ジョブのセットに基づいて、処理システム200の状態、すなわち、作業用機器及びロボット3の状態を示す状態情報を生成する。より具体的には、状態情報には、作業用機器であるマイクロチューブの蓋が開いているのか閉まっているのか、また内容物として何がどれだけの量入っているのか、またラックのどの位置にどのマイクロチューブが収容され、あるいは収容されていないのか、さらには、ロボット3の姿勢はどのようなものであり、ロボットハンドにはどのような器具が把持され、あるいは把持されていないのか、といった、処理システム200の状態を知るために必要な情報が含まれる。
すなわち、全体作業フローにおけるある時点での状態情報を参照すれば、その時点までに作業がどれだけ進んでいるのかが把握できる。そして、この状態情報は、全体作業フローに基づいて、ロボット3の動作による処理がなされれば、処理システム200に生じるであろう変化から、順次生成される。そのため、状態情報生成部24は、少なくとも、作業コマンドの開始及び終了時点における作業用機器及びロボット3の状態を示す状態情報を生成する。こうすれば、特定の作業コマンドの前後における処理システム200の状態が把握でき、全体作業フローを途中で中断する等の際にも、適切な対応をとることができる。さらに、本実施形態では、状態情報生成部24は、各単位ジョブの開始及び終了時点における作業用機器及びロボット3の状態を示す状態情報を生成する。これにより、処理システム200の状態をよりきめ細かく把握することができ、処理システム200の動作中に不測の事態により緊急停止がなされたなどの場合にも、その後の適切な対応をとることが容易となる。
生成された状態情報は、状態情報データベースに逐次記憶され、蓄積される。蓄積された状態情報は、前述の通り、単位ジョブセット生成部23にて制御情報に基づいて、実行すべき単位ジョブとその順序を決定する際に使用されるほか、任意の時点における処理システム200の状態を知ることができる情報として、外部から参照される。
つなぎジョブ生成部25は、連続する複数の単位ジョブ間において、先の単位ジョブの終了位置から、後の単位ジョブの開始位置へとロボットを移動させるつなぎジョブを生成する。つなぎジョブは、先の単位ジョブの終了位置から後の単位ジョブの開始位置までロボットを移動させる移動命令の集合である。単位ジョブと単位ジョブの間でつなぎジョブが実行されることにより、ある単位ジョブを作成する際に、他の単位ジョブとの位置関係を意識することなく、作成しようとする単位ジョブを単体で独立して作成することができ、単位ジョブの作成における生産性が向上する。つなぎジョブは自動で必要な分だけ生成されるから、多数の単位ジョブ間をつなぐあらゆる組み合わせについてつなぎジョブを生成しておく必要はなく、手間及び容量が軽減される。
なお、つなぎジョブは、必ずしも、単純に先の単位ジョブの終了位置から、後の単位ジョブの開始位置までを最短でつなげばよいわけではない。作業用機器の配置や、ロボット3の姿勢により、干渉しない経路でロボット3の姿勢を変化させる必要がある。そのため、つなぎジョブ生成部25は、作業モデル記憶部1ceに記憶されている作業モデルを参照して、モデル間の干渉を起こさない経路を生成し、かかる経路に沿ってロボット3を移動させる移動命令の集合としてつなぎジョブを生成する。ここでいう作業モデルは、処理システム200を仮想空間内で立体モデルとして定義したものであり、ロボット3や、使用される各種の作業用機器がモデル化され、配置される。さらに、作業モデルは状態情報データベース1ccから得られる状態情報(蓋が閉まっているまたは蓋が開いているなど)に対応した形態の立体モデルとなっており、つなぎジョブを生成する際にはそのときの状態情報に応じた形態の作業モデルを参照するようになっている。
作業用機器の中には、電動ピペットなど、ロボット3のハンドに保持されて使用される機器も含まれる。そして、ロボット3の移動経路として、他の機器との干渉をおこさない経路が都のようなのとなるかは、ロボット3のハンドが保持する作業用機器に依存する。そこで、本実施形態では、コマンド定義中に、対応する作業コマンドの実行中にロボット3が保持する作業用機器を示すロボット保持物情報が含まれている。したがって、つなぎジョブ生成部25がつなぎジョブを生成するにあたっては、このロボット保持物情報を参照することにより、ロボット3に保持される作業用機器を含め、機器間の干渉を生じないようなつなぎジョブを生成することができる。
生成されたつなぎジョブは、つなぎジョブ記憶部1cdに記憶される。また、つなぎジョブ生成部25は、一度生成されたつなぎジョブと全く同じつなぎジョブを重複して生成することはしない。すなわち、連続する作業コマンドあるいは単位ジョブの開始及び終了時点における状態情報が、すでに生成されたつなぎジョブについての状態情報と等しい場合には、生成されるべきつなぎジョブはすでに生成されたものと同じとなるため、新たにつなぎジョブを生成することはせず、つなぎジョブ記憶部1cdに記憶されたつなぎジョブを呼び出すことにより、つなぎジョブの生成に要する負荷を軽減する。
生成されたつなぎジョブは、つなぎジョブシミュレータ26において、仮想空間内でロボット3及び作業用機器の動作シミュレーションが行われる。この時、ロボット3及び作業用機器間の干渉がないことの確認と、つなぎジョブの実行に要する時間が求められる。干渉がなく、つなぎジョブに問題がなければ、つなぎジョブの実行に要する時間はそのつなぎジョブに紐づけられて、つなぎジョブ記憶部1cdに記憶される。
こうして得られた単位ジョブのセットとつなぎジョブを、ロボット動作指令生成部27が所定の順序で直列に接続して、ロボット動作指令が生成される。得られたロボット動作指令は、ロボット動作指令記憶部1cfに記憶される。
ロボット動作指令記憶部1cfに記憶されたロボット指令は、ユーザからの適宜の指示等に応じ、ロボット動作指令表示部28により、モニタ1h上に適宜の形式で表示される。また、ユーザからの適宜の指示等に応じ、ロボット動作指令出力部29により、ロボット制御装置2に出力され、ロボット動作指令に従ってロボット3が動作することによって、処理システム200における、全体作業フローに記述された通りの作業が実行される。
なお、つなぎジョブ記憶部1cdに記憶されたつなぎジョブには、つなぎジョブシミュレータ26のシミュレーション結果として得られたつなぎジョブの実行時間が紐づけられ記憶されているが、同様に、単位ジョブ群記憶部1cbに記憶された各単位ジョブには、それぞれその単位ジョブの実行時間が紐づけられ記憶されている。この単位ジョブの実行時間は、あらかじめ、つなぎジョブと同様にシミュレーションにより求めておいてもよいし、実際にロボット3に単位ジョブを実行させ、その実行に要した実時間を計測により求めておいてもよい。
そして、全体作業時間予測部30は、ロボット動作指令記憶部1cfに記憶されたロボット動作指令について、当該ロボット動作指令に含まれる単位ジョブの実行に要する時間とつなぎジョブの実行に要する時間を合算して、全体作業フローの実行に要する時間である全体作業時間を求める。全体作業時間は、全体作業フローに従った作業を処理システム200で実行させた際に要する時間の予測値である。
全体作業時間表示部31は、全体作業時間予測部30より全体作業時間を受け取り、モニタ1hに表示する。こうすることで、実際に処理システム200を用いてロボット3を動作させることなく、あらかじめ、全体作業フローの実行に要する時間を実用上十分な精度で予測することができ、処理システム200で期間内に処理できる作業数の見積もりや、処理を開始時刻の設定、終了時刻の予測が可能となり、効率的な実行計画の立案が容易となる。
図4は、本発明の実施形態に係る動作指令生成装置1に取得されるプロトコルチャートの例を示す図である。ここで示すプロトコルチャートは、処理対象又は処理対象を収容した容器に対する処理を表す処理シンボル103を、処理の手順がわかるよう配置したチャートである。なお、処理対象は、ここでは生命科学の実験や検査などの処理の対象となる材料であり、細胞やDNA等の生体組織の一部であることが多い。また、処理対象は実験に適した器具、例えば、マイクロチューブ6、ペトリ皿やマイクロプレート等に収容された状態で処理がなされるが、本明細書では、これらの器具を単に容器と呼ぶ。
本例のプロトコルチャートは、処理対象を収容する容器ごとに、その初期状態を示す初期シンボル100をチャートの上に、その最終状態を示す最終シンボル101をチャートの下に配置して、両者を順序線102で接続している。順序線102は、上から下への処理の手順を示しており、順序線102上に配置された処理シンボル103は、この順序で該当する容器に対してなされる処理を表している。
図4に示す例では、「Tube」と記載された初期シンボル100、最終シンボル101及び両者を接続する順序線102からなる組が記載されている。ここで、順序線102は矢線で示されており、処理が行われる順序を明示している。また、初期シンボル100自体もまた、容器を用意するという処理を示し、最終シンボル101もまた、容器を収容又は廃棄するという処理を示すので、本例のプロトコルチャートでは、はじめに「Tube」と記載された初期シンボル100が表す処理を行い、その後順序線102に対して追加線104で接続された「ADD」と記載された処理シンボル103が表す処理を行い、次に「CENTRIFUGE」と記載された処理シンボル103が表す処理を行い、最後に「Tube」と記載された最終シンボル101が表す処理を行うことを意味する。また、本例のプロトコルチャートは、「×2」と表示された容器数シンボル105を含む。容器数シンボル105は、初期シンボル100で指定される容器を、2つ用意し、以降の処理を2つの容器それぞれについて行うことを表す。
初期シンボル100は、「Tube」すなわちマイクロチューブ6を、「Tube Rack」すなわちチューブラック5aから作業場所であるメインラック5bに移送する処理を表す。ここで、チューブラック5aは、マイクロチューブの保管場所あるいは退避場所となっており、メインラック5bは、種々の器具を用いて具体的にマイクロチューブ6に処理を行うべき場所である。「ADD」と記載された処理シンボル103は、マイクロチューブ6に対して、「solution A」すなわち液剤Aを「100[μl]」加える処理を表す。「CENTRIFUGE」と記載された処理シンボル103は、マイクロチューブ6を遠心分離器12にセットして、「3[min]」の遠心分離を行う処理を表す。また、最終シンボル101は、マイクロチューブ6を、チューブラック5aに移送する処理を表す。
図5は、本発明の実施形態に係る動作指令生成装置1により生成されるロボット動作指令の例の前半部分を示す図であり、図6は、本発明の実施形態に係る動作指令生成装置1により生成されるロボット動作指令の例の後半部分を説明する図である。図5及び6にて説明されるロボット動作指令は、図4に示すプロトコルチャートに基づき、本実施形態に係る動作指令生成装置1により生成されるロボット動作指令である。
ロボット動作指令は、1本目のマイクロチューブ6をチューブラック5aからメインラック5bに移送する単位ジョブのセット(S101)から始まり、2本目のマイクロチューブ6をチューブラック5aからメインラック5bに移送する単位ジョブのセット(S102)が続く。マイクロチューブ6をメインラック5bに移送する単位ジョブのセットは、図4に示すプロトコルチャートの初期シンボル100に基づいて生成される。また、初期シンボル100に関連付けられた容器数シンボル105に基づいて、2本のマイクロチューブ6について、チューブ1に関する単位ジョブ(S101)、チューブ2に関する単位ジョブ(S102)の順で単位ジョブが生成される。なお、ここでは、単位ジョブ(S101)及び単位ジョブ(S102)は、それぞれ単独の単位ジョブで単位ジョブのセットを構成している。
図7は、本発明の実施形態に係る動作指令生成装置1により生成されるロボット動作指令の例の詳細を示す図である。同図では、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)と、2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S102)とについて、単位ジョブに含まれるコマンド50と、コマンド50において参照される対象51及び引数52を示している。単位ジョブは、ロボット3に一又は複数の単位動作を行わせ、先頭に単位動作である開始位置への移動命令を含み、末尾に単位動作である終了位置への移動命令を含む。
1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)は、マイクロチューブ6を作業場所であるメインラック5bに移送するという一動作をロボット3に行わせるジョブである。当該単位ジョブは、コマンド50として、先頭と末尾に「MOVE」という移動命令を有する。具体的には、先頭の「MOVE」コマンド50は、対象51が「TUBE_RACK」(チューブラック5a)であり、引数52が「−」(無し)であって、ロボットアームを開始位置であるチューブラック5aの位置に移動させる。また、「GET」コマンド50は、対象51が「TUBE」(マイクロチューブ6)であり、引数52が「1」であって、1本目のマイクロチューブ6をロボットアームのハンドで把持する。続く「MOVE」コマンド50は、対象51が「MAIN_RACK」(メインラック5b)であり、引数52が「−」(無し)であって、ハンドにマイクロチューブ6を把持したロボットアームを終了位置であるメインラック5bの位置に移動させる。
なお、ロボットアームについて、特定の作業用機器の位置という場合には、当該作業用機器の近傍であって、ロボットアームを用いてかかる作業用機器に対する各種の操作をするのに適した基準となる位置を指している。例えば、上述のチューブラック5aの位置とは、例えば、チューブラック5aの上方であって、ハンドやハンドに把持された物品がチューブラック5aやチューブラック5aに載置されたマイクロチューブ6と干渉しない程度の距離を開けた位置が適している。その他の作業用機器についても同様に、適した基準となる位置が定められる。
さらに、「PUT」コマンド50は、対象51が「TUBE」(マイクロチューブ6)であり、引数52が「1」であって、ロボットアームのハンドに把持された1本目のマイクロチューブ6をメインラック5bに置く。1本目のマイクロチューブ6は、引数52に従って、メインラック5bの1番目の穴に置かれる。最後に、末尾の「MOVE」コマンド50は、対象51が「MAIN_RACK」(メインラック5b)であり、引数52が「−」(無し)であって、ロボットアームをメインラック5bの位置に移動させる。
2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S102)は、先ほどとは異なるマイクロチューブ6を作業場所であるメインラック5bに移送するという一動作をロボット3に行わせる単位ジョブである。その詳細は、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)と、「GET」コマンド50及び「PUT」コマンド50の引数52が「2」である点で相違する。この相違は、2本目のマイクロチューブ6をハンドで把持し、メインラック5bに置くという相違を意味しており、マイクロチューブ6が置かれるメインラック5bの穴も、引数52に応じて先ほどとは異なる2番目の穴に置かれるため、2本目のマイクロチューブが1本目のマイクロチューブと干渉することはない。「MOVE」コマンド50については、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)と同様である。
図4に示すプロトコルチャートの例から生成される動作指令では、初期シンボル100に容器数シンボル105が付随しているため、繰り返し実行される単位ジョブに引き渡される引数は同じ初期シンボル100や最終シンボル101、処理シンボルについての単位ジョブであっても異なる。このように、各シンボルに対し引き渡される引数は、単位ジョブセット生成部23が単位ジョブのセットを生成する際に、実値として生成し用いられる。
すなわち、作業フローの実行中に変化する引数は、ロボット動作指令に含まれる単位ジョブ上では実値としてあらかじめ与えられ、作業フローの実行中に変化する変数を参照するものとしては生成されない。これにより、後述する状態情報生成部24において状態情報を生成する際に、処理システム200の状態を一意に決定できる。
なお、本実施形態に係る動作指令作成装置1では、生成されるロボット動作指令に含まれる単位ジョブの引数として、変数を用いることは必ずしも排除されない。作業フローの実行中に動的に変化しないパラメータは、変数を参照して差し支えない。そのようなパラメータとしては、例えば、基準点の位置などが挙げられる。
1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)の最後は、ロボットアームを単位ジョブのセットの終了位置であるメインラック5bの位置に移動させる「MOVE」コマンド50である。そして、2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S102)の先頭は、ロボットアームを単位ジョブの開始位置であるチューブラック5aの位置に移動させる「MOVE」コマンド50である。したがって、先の単位ジョブ(S101)の終了後、後の単位ジョブ(S102)が開始されると、ロボットアームは、メインラック5bの位置からチューブラック5aの位置に移動することとなる。
このように、単位ジョブの先頭と最後には、それぞれ開始位置への移動命令と終了位置への移動命令が含まれており、ロボット制御装置2は、直列に接続された単位ジョブを順番に実行することで、ロボット3に所望の動作をさせることができる。
本実施形態に係る動作指令生成装置1によれば、単位ジョブを直列に順序付けられたものとしてロボット動作指令が生成されるため、ロボット制御装置2において条件分岐の判断やループの判断等が行われず、複雑な処理であっても、ロボット制御装置2における負荷が小さく、高速に実行される。また、無限ループなどのプログラムミスによる誤動作はあらかじめ排除される。さらに、詳細は後述するが、本実施形態に係る動作指令生成装置1によって生成されたロボット動作指令は、先の単位ジョブの内容に依存して後の単位ジョブの内容が変動することがないため、その実行に要する時間の推定が容易である。
図7には、さらに、状態情報が状態情報生成部24により生成され、状態情報データベース1ccに記録されることが示されている。状態情報生成部24は、少なくとも、作業コマンドの開始および終了時点における作業用機器及びロボット3の状態を示す状態情報を生成するが、本実施形態では、状態情報生成部24は、単位ジョブの開始および終了時点における作業用機器及びロボット3の状態を示す状態情報を生成し、状態情報データベース1ccに記録する。
ここで、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)の開始時点の状態は、最初の「MOVE」コマンド50により開始位置であるチューブラック5aの位置に移動した状態である。このロボット3の状態を、他の作業用機器の状態と合わせて記述した状態情報60bが状態情報データベース1ccに記録される。
また、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)の終了時点の状態は、最後の「MOVE」コマンド50により終了位置であるメインラック5bの位置に移動した状態である。このロボット3の状態を、他の作業用機器の状態と合わせて記述した状態情報60cが状態情報データベース1ccに記録される。
なお、状態情報データベース1ccには、処理システム200の初期状態があらかじめ状態情報60aとして与えられている。状態情報生成部24は、新たな状態情報を生成する際に、1つ前の状態情報を参照して、そこから変化した部分を更新して新たな状態情報を生成してよい。例えば、状態情報60bを生成する際には、状態情報60aに対し、作業用機器の状態は変化せず、ロボット3の位置のみが変化するから、状態情報60aのロボットの位置をチューブラック5aの位置に更新すればよい。なお、2つ目以降の状態情報は、1つ前の状態情報に対する差分として状態情報データベース1ccに記録されてもよい。
状態情報に記録される作業用機器は、処理システム200の状態を把握する上で必要な機器が全て含まれてよい。作業用機器には、ロボット3がロボットアームのハンドで操作する機器の他、有線通信又は無線通信によって、ロボット制御装置2により制御される機器を含む。例えば、ピペット4は、手動ピペットである場合には、ロボットアームのハンドで操作される機器である。また、電動ピペットは、無線通信可能である場合には、ロボット制御装置2との通信により制御される機器であり、ロボット3が操作する機器に含まれる。図1に示す例では、ピペット4、チューブラック5a、メインラック5b、マイクロチューブ6、チップラック7、チップ8、恒温槽9、ピペットラック10、ボルテックスミキサー11及び遠心分離器12は、作業用機器に該当する。
本実施形態に係る状態情報生成部24は、単位ジョブの開始時点と終了時点において状態情報を生成するが、単位ジョブに含まれる他の単位動作ごとに状態情報を生成してもよい。さらに、状態情報は、単位動作ごと、あるいは、ロボット制御装置で実行されるニーモニックごとに生成してもよい。より細かく状態情報を生成すれば、よりきめ細かく処理システム200の状態を把握できるが、それに伴い、状態情報データベース1ccに必要な容量も増大する。
図8は、本発明の実施形態に係る状態情報データベース1ccの内容例を示す図である。状態情報データベース1ccは、作業用機器及びロボット3の状態を記述した状態情報60と、状態情報60で用いられる値について、その意味をまとめた状態対応表61とを含む。状態情報60としては、図7に示した状態情報60a〜60eが例示されている。状態情報60aは、処理システム200の初期状態を表す。状態情報60b、60cはそれぞれ、1本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S101)の開始位置と終了位置における、作業用機器とロボット3の状態であり、開始位置及び終了位置への移動命令である「MOVE」コマンド50の実行後の状態を示している。状態情報60d、60eはそれぞれ、2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S102)の開始位置と終了位置における、作業用機器とロボット3の状態であり、開始位置及び終了位置への移動命令である「MOVE」コマンド50の実行後の状態を示している。
図9は、本発明の実施形態に係る動作指令生成装置1により参照される状態対応表61の例の一部を示す図である。状態対応表61は、ロボット3のハンドや、処理システム200で用いられる作業用機器について、それぞれの状態を示す値の意味、すなわち、かかる値によって指示される状態を示している。第1の状態対応表61aはロボット3のハンドの状態について、値の意味を示すものである。同様に、第2の状態対応表61bは恒温槽9の、第3の状態対応表61cはピペットラック10の、そして第4の状態対応表61dは遠心分離器12の状態について、値の意味を示している。状態対応表61はその状態が状態情報として記録される作業用機器について用意され、この状態対応表61を参照することにより、任意の状態情報が意味する処理システム200の状態を把握できる。
第1の状態対応表61aは、ロボット3のハンドに何も把持されていない場合を符号「0」で表し、マイクロチューブ6が把持されている場合を符号「1」で表し、チップ8が装着されていないピペット4が把持されている場合を符号「2」で表し、チップ8が装着されたピペット4が把持されている場合を符号「3」で表すことを示している。ピペット4にチップ8が装着されている場合と、装着されていない場合とでは、ハンドにピペット4を把持した場合におけるピペット4(又はチップ8)と他の機器との干渉範囲が異なる。そのため、両者は区別されている。
第2の状態対応表61bは、恒温槽9のドアが閉まっている場合を符号「0」で表し、恒温槽9のドアが開いている場合を符号「1」で表すことを示している。恒温槽9のドアが閉まっているか、開いているかによって、他の機器との干渉範囲が異なるため、両者は区別されている。
第3の状態対応表61cは、ピペットラック10に全てのピペット4が収容されている場合を符号「0」で表し、ピペットラック10から第1のピペット(ロボット3から見て最も左側に収容されるピペット4)が持ちだされている場合を符号「1」で表し、ピペットラック10から第2のピペット(中央に収容されるピペット4)が持ちだされている場合を符号「2」で表し、ピペットラック10から第3のピペット(ロボット3から見て最も右側に収容されるピペット4)が持ちだされている場合を符号「3」で表すことを示している。ピペットラック10からいずれのピペット4が持ちだされているかによって、他の機器との干渉範囲が異なるため、それぞれの場合が区別されている。
第4の状態対応表61dは、遠心分離器12の蓋が開いて停止中である場合を符号「0」で表し、遠心分離器12の蓋が閉まって停止中である場合を符号「1」で表し、遠心分離器12の蓋が閉まって動作中である場合を符号「2」で表すことを示している。遠心分離器12の蓋が開いているか否かによって他の機器との干渉範囲が異なるため、両者は区別されている。また、遠心分離器12の蓋が閉まっていても、動作中であるか否かによって遠心分離器12に対し許容される操作に違いが生じるため区別されている。
なお、これら状態対応表61は、必ずしも状態情報データベース1ccに記録されている必要はなく、ユーザが参照可能な任意の場所に記録されているか、あるいは印刷物としてユーザの手元に用意しておいてもよい。
図8には、動作指令生成装置1により順次生成され、状態情報データベース1ccに記録されていく状態情報60が模式的に示されている。処理システム200の初期状態を示す状態情報60aは、状態情報生成部24により生成されても、あらかじめ所与のものとして用意されていてもよい。そして、図7に示したように、本実施形態では、各単位ジョブの開始時点と終了時点において、状態情報60が次々と生成され、記録されていく。そして、単位ジョブの先頭には開始位置への移動命令が、末尾には終了位置への移動命令が含まれるから、結局、状態情報60は、各単位ジョブについて、開始位置への移動直後のロボット3と作業用機器の状態と、終了位置への移動直後のロボット3と作業用機器の状態が状態情報60として状態情報データベース1ccに記録され、蓄積されていくこととなる。
例えば、図8に示した初期状態を示す状態情報60aでは、ハンド右、ハンド左、恒温槽、ピペットラック、遠心分離器の項の値がすべて0である。そして、図9に示した状態対応表61を参照すれば、作業用機器の状態が把握できる。すなわち、ロボット3の左右のロボットアームに備えられたハンドには、いずれも何も把持されておらず、恒温槽9のドアは閉まっており、ピペットラック4にはすべてのピペットが収容され、そして遠心分離器12は蓋が開いた状態で、動作を停止していることがわかる。また、ロボット3の状態としては、その姿勢が状態情報60に記録されてよい。
図5及び6に戻り、単位ジョブセット生成部23は、「ADD」と記載された処理シンボル103が表す単位ジョブのセットを生成する。「ADD」は、ここでは、マイクロチューブに液剤Aをそれぞれ100μl加える処理であるが、この処理は、ロボットアームでピペットラック10からピペット4を把持し取り出し、さらにピペット4の先端にチップを装着し、当該ピペット4で液剤を規定量吸引し、さらに当該ピペット4で、メインラック5bに置かれたマイクロチューブそれぞれに規定量の液剤を吐出した後、チップを破棄、ピペット4をピペットラック10に戻す、という複数の動作からなる。そのため、「ADD」と記載された処理シンボル103が表す単位ジョブのセットは、複数の単位ジョブからなり、この例では、対象となるマイクロチューブの本数が2本であるため、7つの単位ジョブから構成されることとなる。
この「ADD」と記載された処理シンボル103が表す単位ジョブのセットは、まずは、第1のピペット4をロボットアームの右側のハンドに把持する単位ジョブ(S301)から始まる。そして、第1のピペット4にチップ8を装着する単位ジョブ(S401)、チップ8を装着済みの第1のピペット4を用いて、液剤Aを200μl吸引する単位ジョブ(S501)、さらに第1のピペット4を用いて、チューブ1に液剤Aを100μl吐出する単位ジョブ(S601)と、チューブ2に液剤Bを100μl吐出する単位ジョブ(S602)、第1のピペット4先端に装着されたチップ8を破棄する単位ジョブ(S702)が続き、第1のピペット4をピペットラック10に返却する単位ジョブ(S302)にて終了する。なお、図5及び6に示されているように、単位ジョブと単位ジョブの間には、つなぎジョブ(S201〜S207)が挿入される場合があるが、これは、単位ジョブのセットの生成後、続けて生成され挿入される。つなぎジョブについては後述する。
第1のピペット4をロボットアームの右側のハンドに把持する単位ジョブ(S301)は、図7に示すように、対象51が「PIPET_RACK」で、引数が「−」(無し)である「MOVE」コマンド50が先頭であり、このコマンド50は、ロボットアームを開始位置であるピペットラック10の位置に移動させる命令を表す。その次の、対象51が「PIPET」、引数が「1」である「GET」コマンド50は、この例では、右のロボットアームのハンドで対象物を把持する命令を表しており、ここでの対象物は「PIPET」で表される通りピペット4であり、引数「1」で示される通り、第1のピペット4を把持することを示している。最後は、対象51が「PIPET_RACK」で、引数が「−」(無し)である「MOVE」コマンド50であり、これは、ロボットアームを再度、終了位置であるピペットラック10の位置に移動させる命令を表す。
この単位ジョブ(S301)の開始時点と終了時点においても、それぞれ、状態情報60f及び60gが状態情報生成部24により生成され、状態情報データベース1ccに保存される。ここで、単位ジョブ(S301)の終了時点においては、ピペットラック10からは第1のピペットが取り出され、ロボット3の右側のハンドには、いまだチップ8が装着されていない状態の第1のピペット4が把持されている状態となっている。そのため、図8に示すように、状態情報60gでは、「作業用機器」の項目中、「ハンド右」の状態は「2」であり、これは図9の状態対応表61aに示すように、「ピペット把持(チップ無し)」を示す。また、「作業用機器」の項目中、「ピペットラック」の状態は「1」であり、これは図9の状態対応表61cに示すように、「第1ピペット無し」を示す。
したがって、何らかの理由により、単位ジョブ(S301)の終了時点でロボット3が停止したとしても、その時点での状態情報60gを参照すれば、ロボット3及び作業用機器の状態がわかる。
同様にして、残る単位ジョブも単位ジョブセット生成部23により生成される。おのおのの単位ジョブを構成する命令については、説明が冗長となるため、その詳細は割愛するが、各単位ジョブによりなされる動作は次のようなものである。
すなわち、ピペット4にチップを装着する単位ジョブ(S401)では、第1のピペット4をハンドに把持した右のロボットアームを開始位置であるチップラック7の位置まで移動させ、チップラック7に保持されているチップ8の真上から第1のピペット4を押し付けてその先端にチップ8を取り付ける。その後、終了位置であるチップラック7の位置まで再度ロボットアームを移動させる。また、液剤Aを200μl吸引する単位ジョブ(S501)では、右ロボットアームを開始位置である恒温槽9の位置まで移動させ、さらに第1のピペット4に装着されたチップ8の先端を液剤Aの容器に挿入して、液剤Aを200μl吸引する。この動作は、第1のピペット4が電動ピペットであれば、ロボット3又はロボット制御装置2から第1のピペット4に適切な駆動信号を送信すればよく、第1のピペット4が手動ピペットであれば、ロボット3の左のロボットアームを用いて、右のロボットアームに把持された第1のピペット4を操作すればよい。本実施形態で使用しているロボット3は、双腕型で、2以上のロボットアームを持つため、人が操作することを前提にデザインされた市販の作業用機器を問題なく使用することができるため、処理システム200用に特別の作業用機器を用意する必要はない。その後、終了位置である恒温槽9の位置まで再度ロボットアームを移動させる。
さらに、続いて、チューブ1に液剤Aを吐出する単位ジョブ(S601)と、チューブ2に液剤Bを吐出する単位ジョブ(S602)が連続して生成され、順に直列に接続される。このロボットアームの動きを、図10を参照して説明する。
まず、単位ジョブ(S601)では、ロボットアームを開始位置であるメインラック5bの位置70に移動させ、その後、矢線71に示すように、メインラック5bに載置された1本目のマイクロチューブ6aの直上にチップ8がくる位置72に移動させる。それから、1本目のマイクロチューブ6aに第1のピペット4に装着されたチップ8の先端を挿入して、溶剤Aを100μl吐出する。その後ロボットアームは、1本目のマイクロチューブ6aからチップ8の先端を引き抜いた位置となる、位置72まで上昇させる。その後、通常であれば、矢線73aに示すように、終了位置であるメインラック5bの位置70にロボットアームを移動させるが、この場合は特例として終了位置への移動が破棄されるため、ロボットアームの位置は位置72のままである。
そして、続く単位ジョブ(S602)では、通常であれば、まずロボットアームを開始位置であるメインラック5bの位置70に移動させるが、この場合に特例として開始位置への移動が破棄されるため、ロボットアームの位置は1本目のマイクロチューブ6aからチップ8の先端を引き抜いた位置72のままとなる。その後、矢線73に示すように、メインラック5bに載置された2本目のマイクロチューブ6bの直上にチップ8がくる位置74に移動させる。この移動は、位置74への移動命令であり、ロボットアームが初期位置である位置70にあれば、矢線73bのように位置70から位置74への移動となっていたものが、ロボットアームが位置72のままであったために変化したものである。さらに、第1のピペット4に装着されたチップ8の先端を2本目のマイクロチューブ6bに挿入して、残る溶剤Aを100μl吐出する。その後ロボットアームは、2本目のマイクロチューブ6からチップ8の先端を引き抜いた位置まで上昇し、矢線75に示すように、通常どおり、終了位置であるメインラック5bの位置70にロボットアームを移動させる。
この2つの単位ジョブは、同種の動作、すなわち、メインラック5bに載置されたマイクロチューブ6に、同じ液剤Aを同じ分量吐出するというものであり、吐出すべきマイクロチューブ6のみが異なるというものである。そして、異なるマイクロチューブ6は、メインラック4bの隣接する穴に挿入され支持されるのであるから、結局、この2つの単位ジョブは、本来、開始位置と終了位置を同じくし、作業位置であるマイクロチューブ6の位置のみオフセットしたものであるといえる。なぜなら、メインラック4bの隣接する穴間のピッチは既知であるからである。
単位ジョブセット生成部23は、このような同種の動作を行う連続する単位ジョブについては、先の単位ジョブ、ここでは単位ジョブ(S601)に含まれる終了位置への移動指令と、後の単位ジョブ、ここでは単位ジョブ(S602)に含まれる開始位置への移動指令を破棄する。この結果、先ほど説明したように、先の単位ジョブ(S601)の実行後、1本目のマイクロチューブ6からチップ8の先端を引き抜いた位置から直接ロボットアームは2本目のマイクロチューブ6に、第1のピペット4に装着されたチップ8の先端を挿入する動作を行うことになる。こうすることで、連続する同種の動作を実行するにあたり、一回ごとにロボットアームをその単位ジョブの開始位置(または終了位置)まで往復させる無駄な動作が省略され、作業効率が向上する。図10の例でいえば、位置72から位置74の移動が、かかる動作の省略がなされなければ、矢線73a及び矢線73bに示すように、位置70を経由した迂遠で非効率なものとなっていたところ、矢線73に示すように短く効率の良いものとなる。
さらに、第1のピペット4先端に装着されたチップ8を破棄する単位ジョブ(S702)が生成される。これは、ロボットアームを初期位置であるダストボックス13の位置まで移動させる。この位置は、右のロボットアームに把持された第1のピペット4が、ダストボックス13の直上となる位置であり、このまま、ロボット3は、第1のピペット4の先端のチップ8を第1のピペット4から脱離させる。外れたチップ8ダストボックス13内に落下し、破棄される。チップ8の第1のピペット4からの脱離は、左のロボットアームで第1のピペット4のチップ取り外しボタンを押し込むなどの操作をするか、あるいは第1のピペット4が電動ピペットである場合には、チップ脱離の信号をロボット3又はロボット制御装置2から送信すればよい。その後、ロボットアームは終了位置であるダストボックス13の位置まで移動させられることになるが、この単位ジョブ(S702)ではロボットアームの位置に変化はないため、ロボットアームの移動はない。単位ジョブ(S702)内の末尾には、終了位置への移動命令が含まれていてもよく(この場合には、ロボット制御装置2において、単に命令が無視される)、かかる移動命令自体が破棄されていてもよい。本実施形態では、終了位置への移動命令はそのまま残されている。
最後に、第1のピペット4をピペットラック10に返却する単位ジョブ(S302)が生成される。これは、ロボットアームを開始位置であるピペットラック10の位置に移動させ、その後、右のロボットアームのハンドに把持された第1のピペット4をピペットラック10の元あった位置に戻し、把持を解除し、その後終了位置であるピペットラック10の位置に移動するというものである。
以上の7つの単位ジョブにより、「ADD」と記載された処理シンボル103が表す単位ジョブのセットが生成されたことになる。そして、単位ジョブセット生成部23は、作業コマンドである処理シンボル103に対応するコマンド定義に基づいて単位ジョブのセットを生成する。コマンド定義は、図3に示すコマンド定義抽出部22により、コマンド定義データベース1caより抽出される。
図11は、コマンド定義の例を示す概念図である。同図に示されているのは、本例で示した「ADD」と記載された処理シンボル103のコマンド定義である。コマンド定義自体のデータ形式には特に限定はなく、任意のフォーマットで記述されてよいので、図11で示したものは、そのコマンド定義を概念的に示したものである。
コマンド定義は、前述したとおり、作業コマンド毎に使用する単位ジョブの順序及び組み合わせを1又は複数定義したものである。そして、コマンド定義内には、以降説明するように、作業コマンドその他の条件に応じた条件分岐や繰り返しなどの制御命令、引数の計算が含まれ得るが、単位ジョブセット生成部23が生成する単位ジョブのセットは、単位ジョブを直列に連続して並べたものであり、その引数も固定値であるか、または動的な計算の必要ない変数の参照となっている。以下に、図11のコマンド定義を例として、単位ジョブセット生成部23が「ADD」と記載された処理シンボル103から単位ジョブのセットを生成するフローを説明する。
単位ジョブセット生成部23は、コマンド定義を通常のフロー(アルゴリズム)と同様に、図11の上から順に解釈して単位ジョブのセットを生成していく。まず、ステップT10にて、必要となる液剤の総容量を計算する。総容量は、個々のマイクロチューブ6に加える液剤の量(個別容量)とマイクロチューブの本数の積である。ここでは、図4に示すように、「ADD」と記載された処理シンボル103で与えられた個別容量は100μlであり、また、チューブの本数は容器数シンボル105で示されるように、2本である。したがって、総容量は200μlである。このように、コマンド定義中には、引数の計算が含まれてよい。
続くステップT20では、計算された総容量の大小に応じて、条件分岐により使用すべきピペット4を決定する。ここでは、総容量に応じて、容量が小さいものから順に第1のピペット、第2のピペット、第3のピペットが用意されているものとして、200μlは容量が小さいと判定されるものとする。
その結果、ステップT21へと進み、第1のピペットを把持する単位ジョブ(S301)が生成される。この単位ジョブは、図3の単位ジョブ群記憶部1cbにあらかじめ記憶されており、単位ジョブセット生成部23は、単位ジョブ群記憶部1cbから必要な単位ジョブを呼び出す。異なる容量のピペットである、第2のピペット、第3のピペットを把持する単位ジョブも単位ジョブ群記憶部1cbにあらかじめ記憶されており、選択されたピペットに対応した単位ジョブが呼び出されるようになっている(ステップT22、23)。そして、各ピペットがピペットホルダ10に収納されている位置の違いや、ピペットの形状の違いによる把持位置の違いや、ハンドの開閉の度合いの差異は、単位ジョブ群記憶部1cbに記憶された単位ジョブにあらかじめ反映されているから、コマンド定義の条件や、作業用機器の差によるロボット3の動作の差は吸収される。また、作業用機器の更新があった時など(例えば、ピペット4を形状が異なる別製品に交換した場合など)には、単位ジョブ群記憶部1cbに記憶された該当する単位ジョブを修正するのみで済むから、処理システム200の構成の更新や変更に柔軟に対応できる。
続くステップT30では、チップ8を装着する単位ジョブ(S401)が単位ジョブ群記憶部1cbから呼び出され、生成される。さらに、ステップT40で、資料に加えるべき液剤が、液剤Aであるか、液剤Bであるかを条件分岐により判定する。ここでは、「ADD」と記載された処理シンボル103で液剤Aが指定されているため、ステップT41が選択され、液剤Aを吸引する単位ジョブが単位ジョブ群記憶部1cbから呼び出され、ステップT10で計算された総容量200μlが引数として引き渡され反映される。なお、液剤Bが指定されていた場合にはステップT42へと進み、液剤Bを吸引する単位ジョブが単位ジョブ群記憶部1cbから呼び出されることになる。このように、単位ジョブが吸引すべき液剤により別々になっているため、液剤の配置位置の差異や、液剤を吸引する際に液剤に応じた特別の手技(例えば、吸引と吐出を何度か繰り返すことにより液剤を攪拌してから吸引する必要があるなど)が必要となる場合にも柔軟に対応できる。
その後ステップT50へと進み、容器数シンボル105で示されたマイクロチューブ6の本数だけ、液剤を吐出する単位ジョブ(S601、S602)が単位ジョブ群記憶部1cbから繰り返し呼び出され生成される。また、この時個々の単位ジョブには、引数として個別容量100μlが引き渡され反映される。さらに、ここで繰り返し呼び出される単位ジョブは、同種の動作であって、本来、開始位置と終了位置を同じくし、作業位置のみオフセットしたものであるから、個々の単位ジョブには、作業位置としてオフセットした値が単位ジョブセット生成部24により計算され引き渡されて反映されるとともに、前述したように、先の単位ジョブ(S601)に含まれる終了位置への移動指令と、後の単位ジョブ(S602)に含まれる開始位置への移動指令は破棄される。
続くステップT60では、チップ8を破棄する単位ジョブ(S702)が単位ジョブ群記憶部1cbから呼び出され、生成される。最後に、ステップT70で、使用したピペットが条件分岐により判断され、ピペットラック10の適切な位置にピペットが返却される単位ジョブ(S302)が単位ジョブ群記憶部1cbから呼び出され、生成される。ここでは、第1のピペット4が使用されていたため、ステップT71へと進み、第1のピペット4はピペットラック10の元々第1のピペット4が収容されていた位置に返却される。他のピペットが選択されていた場合には、それぞれのピペットを適切な位置に返却するよう単位ジョブが呼び出され、生成される(ステップT72、T73)。
以上のような単位ジョブセット生成部23の動作により、単位ジョブのセットが生成される。したがって、同種の作業コマンドに対しても、与えられる条件およびコマンド定義に起因して、条件分岐により生成される単位ジョブが異なったり、繰り返しの数が異なることにより生成される単位ジョブの数が異なったりなど、ロボット3において実行される単位ジョブが変化する。このように、コマンド定義を参照して単位ジョブのセットを生成することにより、処理条件に応じて複雑な手順が必要となる作業コマンドに対して、柔軟に単位ジョブのセットを生成できるため、汎用性の高い処理システム200が実現される。また、単位ジョブ自体はコマンド定義に含まれず、単位ジョブ群記憶部1cbから呼び出すから、処理システム200や作業用機器の変更などに柔軟に対応でき、作業時間及び手間を軽減できる。
図4へと戻り、単位ジョブセット生成部23は、残る「CENTRIFUGE」と記載された処理シンボル103から単位ジョブのセットを生成する。この動作も、先の説明と同じく、コマンド定義抽出部22より「CENTRIFUGE」に対応するコマンド定義がコマンド定義データベース1caから抽出され、かかるコマンド定義に基づいて、単位ジョブ群記憶部1cbに記憶された単位ジョブ群から単位ジョブが呼び出され順序付けられ、また必要に応じて引数が計算されて引き渡されて反映されるものである。ここでは、図7に示すように、1本目のマイクロチューブ6をメインラック5bから遠心分離機12へと移送する単位ジョブ(S103)、2本目のマイクロチューブ6をメインラック5bから遠心分離機12へと移送する単位ジョブ(S104)、及び遠心分離機12を操作して遠心処理を行う単位ジョブ(S801)が単位ジョブのセットとして生成されるが、各単位ジョブの動作の詳細については省略する。
最後に、単位ジョブセット生成部23は、「PUT」と記載された終了シンボル101から単位ジョブのセットを生成する。この動作も同様であり、コマンド定義抽出部22より「PUT」に対応するコマンド定義がコマンド定義データベース1caから抽出され、かかるコマンド定義に基づいて単位ジョブのセットが生成される。ここでは、第1のマイクロチューブ6を遠心分離機から取り出しチューブラック5aへと移送する単位ジョブ(S105)と第2のマイクロチューブ6を遠心分離機から取り出しチューブラック5aへと移送する単位ジョブ(S106)が生成される。これにより、図4に例示したプロトコルチャートに記述された作業コマンドに対応する単位ジョブはすべて生成され、直列に並べられたことになる。
しかしながら、このままでは、連続する2つの単位ジョブについて、先の単位ジョブの終了位置から、後の単位ジョブの開始位置までのロボットアームの移動経路が何ら考慮されていないため、ロボットアームそれ自体や、ロボットアームのハンドに把持された保持物が、他の物品と干渉する恐れがある。そこで、図3に示すつなぎジョブ生成部25により、つなぎジョブが生成される。
つなぎジョブは、少なくとも、連続する作業コマンドと作業コマンドの間に挿入されるものとして生成され、本実施形態では、連続する単位ジョブと単位ジョブの間に挿入されるものとして生成される。ただし、以降説明するように、つなぎジョブは、必ずしも連続する単位ジョブと単位ジョブの間の全てに挿入されるわけではなく、その生成がなされない、あるいは生成された単位ジョブが破棄又は省略される場合があり得る。
つなぎジョブ生成部25によるつなぎジョブの生成を、図5の2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S102)と、第1のピペット4を把持する単位ジョブ(S201)の間に挿入されるつなぎジョブ(S201)を例にとり説明する。
ここで、2本目のマイクロチューブ6をメインラック5bに移送する単位ジョブ(S201)の終了位置は、メインラック5bの位置であり、第1のピペットをロボットアームの右側のハンドに把持する単位ジョブ(S201)の開始位置はピペットラック10であるから、両者は等しくない。そして、このように、連続する単位ジョブの間で、先の単位ジョブの終了位置と、後の単位ジョブの終了位置とが異なる場合、仮につなぎジョブが挿入されないと、ロボットアームは、後の単位ジョブの先頭に含まれる開始位置への移動命令によって、先の単位ジョブの終了位置から後の単位ジョブの開始位置まで直線移動することとなる。そして、作業用機器の配置や、ロボットハンドに把持された物品によっては、この直線移動による経路が、他の機器と干渉する場合があり得る。
そこで、つなぎジョブ生成部24は、メインラック5bの位置と、ピペットラック10の位置と、状態情報データベース1ccに記述された状態とに基づいて、メインラック5bの位置からピペットラック10の位置への移動命令の集合である、つなぎジョブ(S201)を生成する。つなぎジョブは、ロボットアームと機器との干渉を避け、出来る限り移動距離あるいは移動時間の短い経路を通って、ロボットアームを移動させるジョブである。
つなぎジョブ生成部25は、障害物との干渉を避けるように、ロボットアームの経路を自動生成する。その際、状態情報データベース1ccが参照され、ロボットアームのハンドに把持されているものがあるか否か、また何が把持されているかを示す把持物情報、作業用機器、特に設置されている各種機器の蓋やドアが開いているか否かといった作業用機器状態情報等の状態情報が加味される。その結果として、状態情報に応じた作業モデルを作業モデル記憶部1ceから読み出し使用してもよい。ロボットアームの経路を自動生成するアルゴリズムは既知のどのようなものを用いてもよい。例えば、障害物との干渉が無いロボットアームの姿勢をランダムに幾つか生成し、それらをつなぎ合わせたロードマップからグラフ探索アルゴリズムにより経路を生成するPRM(Probabilistic Roadmap Method)を用いてよい。また、与えられたロードマップから最短経路を生成するグラフ探索アルゴリズムとして、ダイクストラ法や、ダイクストラ法を改良したA*アルゴリズムを用いてよい。あるいは、経路を自動生成する他のアルゴリズムとして、動作の開始点を基点として障害物との干渉が無い経路木をランダムに幾つか生成し、経路木の先端を新たな基点として経路木のランダム生成を繰り返すRRT(Rapidly−exploring Random Trees)、PRMとRRTを組み合わせたSRT(Sampling−based Roadmap of Trees)やRRM(Rapidly−exploring RoadMap)を用いてもよい。さらに、これらのロボットアームの姿勢をランダムに生成するアルゴリズムに限らず、他のアルゴリズム、例えば、ロボットアームの到着点で値が低く、障害物の位置で値が高くなるようなポテンシャルを導入し、そのポテンシャルの勾配に沿ってロボットアームを動かす方法であるポテンシャル法のような方法を用いてもよい。
生成されたつなぎジョブは、図3に示すように、つなぎジョブ記憶部1cdに記憶される。この時、生成されたつなぎジョブと、かかるつなぎジョブの前後の状態情報とを紐づけるか、つなぎジョブと状態情報とを合わせて繋ぎジョブ記憶部1cdに記憶するとよい。
図7には、メインラック5bからピペットラック10へのつなぎジョブ(S201)が示されている。メインラック5bからピペットラック10へのつなぎジョブ(S201)は、「CONNECT」コマンド50と、「MAIN_RACK:PIPET_RACK」という対象51と、5つの引数52を含む。対象51は、つなぎジョブの開始位置(メインラック5bの位置)と、終了位置(ピペットラック10の位置)を表している。
つなぎジョブ生成部24は、ロボット3及びロボット3が操作する機器の直前の状態を表す状態情報60eを参照する。状態情報60eが表す状態は、第2のマイクロチューブ6bをメインラック5bに置き、ハンドをメインラック5bの位置に移動させた状態であり、ハンドには何も把持されておらず、全ての機器の状態は初期状態と同じである。よって、第3の状態表60dの内容は、第1の状態表60bの内容と同一である。図7では、状態情報データベース1ccから取得された情報が、引数52として表されている。引数52のうち「HAND_R=0,HAND_L=0」は、両方のハンドに何も把持されていないことを表し、「BATH=0」は、恒温槽9のドアが閉じていることを表し、PIPET_RACK=0」は、ピペットラック10に全てのピペット4が収容されていることを表し、「CENTRIFUGE=0」は、遠心分離器12の蓋が開いて停止中であることを表している。つなぎジョブ生成部24は、これらの引数52に基づいて、機器の状態を読み取り、機器との干渉が無いロボットアームの移動経路を生成する。
ところで、前述したように、つなぎジョブ生成部24は、必ずしも連続する単位ジョブ間の全ての位置につなぎジョブを生成し、挿入するわけではない。まず、第1の例外として、つなぎジョブを生成し挿入しようとする隣接する単位ジョブにおいて、先の単位ジョブの終了位置と、後の単位ジョブの開始位置が等しい場合には、つなぎジョブの生成自体を省略する。これは、つなぎジョブを介在せずとも、ロボットアームが移動する必要がないためである。このときの、先の単位ジョブの終了位置と、後の単位ジョブの開始位置は、図7に一部示された、単位ジョブセット生成部23により生成された単位ジョブにおける、開始位置への移動コマンド50と終了位置への移動コマンド50を参照することにより得られる。あるいは、先の単位ジョブの終了時点における状態情報と、後の単位ジョブの開始時点における状態情報を参照することによっても得られる。いずれにしても、つなぎジョブを生成する際に状態情報は参照されるため、本実施形態では、先の単位ジョブの終了時点における状態情報と、後の単位ジョブの開始時点における状態情報を参照している。
第2の例外は、生成されたつなぎジョブが、単なる無直線移動指令に等しい場合である。この場合は、生成されたつなぎジョブは、後の単位ジョブの先頭で実行される、開始位置への移動命令と実質的に同等であるため、つなぎジョブを挿入する必要がないためである。この判別は、つなぎジョブを生成し、かかるつなぎジョブが単なる無直線移動指令に等しいか否かを判断することにより行われる。つなぎジョブが単なる無直線移動指令に等しい場合には、生成したつなぎジョブは破棄される。
第3の例外は、挿入しようとするつなぎジョブが、すでに生成済みのつなぎジョブと同一である場合である。この場合は、すでに生成済みのつなぎジョブの経路を毎回経路探索アルゴリズムを用いて再生成することは、ロボット制御指令生成装置1に無駄な演算負荷をかけ、ロボット動作指令の生成に時間を要し、その生産性低下の原因となるため、同一のつなぎジョブの再生成を防ぐためである。
つなぎジョブがすでに生成したものと同じか否かは、当該つなぎジョブを挿入しようとする隣接した単位ジョブについて、先の作業コマンドの終了時点での状態情報と、後の作業コマンドの開始時点での状態情報をすでに生成済みのつなぎジョブについてのものと比較することにより行われる。すなわち、つなぎジョブの開始位置(先の単位ジョブの終了位置)と、つなぎジョブの終了位置(後の単位ジョブの開始位置)が同じであっても、ロボットハンドに把持した物品の差異や、作業用機器の状態、例えば蓋や扉が空いているか閉まっているか、等の処理システム200の状態の差によって、つなぎジョブとして適した移動経路は異なると考えられるところ、先の単位ジョブの終了時点及び後の単位ジョブの開始時点における状態情報が等しい場合には、同一のつなぎジョブが生成されることになるためである。
生成しようとするつなぎジョブ前後の状態情報が等しいつなぎジョブ25が既につなぎジョブ生成部25により生成され、つなぎジョブ記憶部1cdに記憶されている場合には、つなぎジョブ生成部25は、新たにつなぎジョブを生成せず、つなぎジョブ記憶部1cdに記憶された生成済みのつなぎジョブを呼び出す。
つなぎジョブ記憶部1cdには、つなぎジョブ生成部25が生成したつなぎジョブが、つなぎジョブ前後の状態情報を合わせて記憶されるか、またはつなぎジョブ前後の状態情報と紐付けして記憶されているため、つなぎジョブ生成部25は、新たなつなぎジョブを生成しようとする際に、つなぎジョブを挿入しようとする位置の前後の状態情報をつなぎジョブ記憶部1cdに照会することで、これから生成しようとするつなぎジョブがすでに生成済みであるのか、新規に生成すべきものであるのかを判別できる。
図12は、つなぎジョブ生成部25にて実行されるつなぎジョブ生成のフロー図である。まず、つなぎジョブは連続する単位ジョブ間に挿入されるジョブであるから、単位ジョブセット生成部23で生成された単位ジョブを先頭から順番に参照し、連続する単位ジョブを抽出する(ステップT100)。この抽出された単位ジョブ間に、つなぎジョブを挿入するか否か、また生成するか否かを判断していくことになる。
続いて、抽出された連続する単位ジョブのうち、先の単位ジョブの終了時点及び、後の単位ジョブの開始時点の状態情報を、状態情報データベース1ccより抽出する(ステップT110)。そして、抽出された状態情報から、挿入しようとするつなぎジョブの開始位置(先の単位ジョブの終了位置)と、終了位置(後の単位ジョブの開始位置)が等しいかどうか判断する(ステップT120)。両者が等しい場合(ステップT120:Y)は、つなぎジョブを挿入する必要がないため、つなぎジョブ生成を省略し、ステップT150へと進む。
作成しようとするつなぎジョブの開始位置と、終了位置が等しくない場合(ステップT120:N)には、さらに、挿入しようとするつなぎジョブの開始時点と終了時点における状態情報が等しいつなぎジョブが、すでに生成され、つなぎジョブ記憶部1cdに記憶されていないか判断する(ステップT130)。これは上述したように、つなぎジョブ記憶部1cdに記憶されたつなぎジョブと合わせて記憶された状態情報、または紐づけられた状態情報を参照していくことで容易に判断できる。すでに記憶されている場合(ステップ130:Y)には、当該記憶されているつなぎジョブをつなぎジョブ記憶部1cdから呼び出して(ステップT131)、ステップT150へと進む。
状態情報の等しいつなぎジョブが存在していない場合(ステップ130:N)には、新しくつなぎジョブが必要であるため、抽出した状態情報に基づいて、つなぎジョブを生成する(ステップT132)。
生成されたつなぎジョブについては、単なる直線移動指令と同等であるかを判断する(ステップT140)。つなぎジョブが単なる直線移動指令と同等の場合(ステップT140:Y)には、生成されたつなぎジョブは破棄し(ステップT141)、ステップT150へと進む。生成されたつなぎジョブが単なる直線移動指令と同等でない場合(ステップT140:N)には、生成されたつなぎジョブをつなぎジョブ記憶部1cdに記憶する。また、この時同時に、つなぎジョブの開始時点での状態情報と、終了時点での状態情報(またはそれらとの紐づけ情報)を併せてつなぎジョブ記憶部1cdに記憶する。
ここまでで、注目している連続する単位ジョブ間について、つなぎジョブを生成するか、呼び出すか、破棄するか、あるいは生成を省略するかが定まる。そして、さらにつなぎジョブを挿入すべき連続する単位ジョブが存在するか否かを判断する(ステップT150)。単位ジョブセット生成部23により生成された単位ジョブがまだ続いており、連続する単位ジョブが存在する場合(ステップT150:Y)には、ステップT100へと戻り、上述の動作を繰り返す。連続する単位ジョブが存在しない場合(ステップT150:N)は、つなぎジョブを挿入する可能性のある連続する単位ジョブについての処理をすべて終えたこととなるので、処理を終了する。
図3に戻り、最後に、生成された単位ジョブ及びつなぎジョブは、ロボット動作指令生成部27へと受け渡され、ロボット動作指令生成部27は、生成された単位ジョブと、つなぎジョブを直列に連続する命令セットとして統合し、ロボット動作指令を生成する。生成されたロボット動作指令は、ロボット動作指令記憶部1cfに記憶される。
図5及び6に示したロボット動作指令には、そのようにして単位ジョブ間に挿入されたつなぎジョブが示されている。第1のチューブをチューブラック5aからメインラック5bに移送する単位ジョブS101の終了位置であるメインラック5bの位置と、第2のチューブをチューブラック5aからメインラック5bに移送する単位ジョブS102の開始位置であるチューブラック5aの位置との間は、直線移動が可能であるため、つなぎジョブ生成部25により生成されたつなぎジョブは破棄されている。
単位ジョブS102と第1のピペット4を把持する単位ジョブS301との間には、メインラック5bの位置からピペットラック10の位置へとつなぐつなぎジョブS201が生成され挿入される。同様に、単位ジョブS301とチップ8を装着する単位ジョブS401との間には、ピペットラック10の位置からチップラック7の位置へとつなぐつなぎジョブS202が生成され挿入され、単位ジョブS401と液剤Aを吸引する単位ジョブS501との間には、チップラック7の位置から恒温槽9の位置へとつなぐつなぎジョブS203が生成され挿入される。以下同様に、つなぎジョブS204、S205、S206、S207が生成され挿入される。
第1のチューブ6に液剤Aを吐出する単位ジョブS601と第2のチューブ6に液剤Aを吐出する単位ジョブS602は、前述したように、同種の動作を行う連続する単位ジョブであるから、その開始位置と終了位置はいずれもメインラック5bの位置であって同位置である。そのため、この連続する単位ジョブS601,S602間のつなぎジョブの生成は省略されるため、つなぎジョブは挿入されない。
単位ジョブS103とS104の間については、メインラック5bの位置と遠心分離機12の位置をつなぐ移動であり、単位ジョブS105とS106の間は、遠心分離機12の位置とチューブラック5aの位置をつなぐ移動であるが、これはいずれも直線移動となるため、生成されたつなぎジョブは単なる直線移動指令と同等となり、破棄されるため、これらの単位ジョブ間につなぎジョブは生成されない。
そして、単位ジョブS104と単位ジョブS801間、及び、単位ジョブS801と単位ジョブS105間については、開始位置と終了位置がいずれも遠心分離機12の位置であり、つなぎジョブの開始位置と終了位置が等しいため、つなぎジョブの生成は省略され、単位ジョブ間につなぎジョブは生成されない。
ロボット動作指令記憶部1cfに記憶されたロボット動作指令は、ユーザからの指令その他の指令により、ロボット動作指令表示部28により読みだされて、適宜モニタ1hに表示される。また、ロボット動作指令出力部29により読みだされて、ロボット制御装置2に出力され、ロボット制御装置2がかかるロボット動作指令を実行することでロボット3を動作させ、全体作業フローに従った作業が処理システム200において実行される。
上述したように、本実施形態に係るロボット動作指令生成装置1で作成されたロボット動作指令は、図5及び6に示した例のように、単位ジョブと繋ぎジョブが連続して直列に接続されたものとして生成されており、条件分岐や繰り返しなどのコンピュータ制御に言ういわゆる制御命令を含まないものとなっている。そのため、ロボット制御装置2での演算の負荷が小さく、また、実行途中の処理システム200の状態が一意に定まるため、実行途中で動作が停止した場合等にも、ロボット動作指令の進行状況から、処理システム200の状態を知ることが容易である。さらに、実際にロボット3を動作させたり、全体の動作シミュレーションを行ったりすることなく、ロボット動作指令全体を実行するのに必要な時間である全体時間を事前に予測できる。
図13は、単位ジョブ群記憶部1cbに記憶されている単位ジョブ群300を模式的に示す図である。単位ジョブ群記憶部1cbには、あらかじめ、処理システム200においてロボット3により実行される単位ジョブをまとめて、単位ジョブ群300として記憶させておく。単位ジョブ群記憶部1cbに記憶されている単位ジョブは、単位ジョブセット生成部23により必要に応じて読みだされ、ロボット動作指令を構成する単位ジョブとして必要なパラメータを与えられる。
単位ジョブ群300に含まれる単位ジョブには、ロボット制御装置2で実行される命令だけでなく、それぞれの単位ジョブをロボット3に実行させるにあたって必要な所要時間が記憶されている。例えば、チューブをチューブラック5aからメインラック5bに移送する単位ジョブは、図13に示されているように、10秒を要することが示されている。この所要時間は、単位ジョブ群300に単位ジョブを登録する際に、あらかじめ与えられる。この時間は、単位ジョブを作成した際に、実際にロボット3を動作させて所要時間を測定して得てもよいし、コンピュータシミュレーションを用い、単位ジョブに相当する動作を仮想的に再現して所要時間を測定して得てもよい。
また、この単位ジョブごとの所要時間は、必ずしも正確なものでなく、概算であってもよい。例えば、先の例で挙げたチューブをチューブラック5aからメインラック5bに移送する単位ジョブに要する時間は、何番目のチューブを移送するかにより若干の時間の差が生じると考えられるが、その差は全体作業時間に大きな影響を与えるほどではないと考えられるため、代表的な時間を採用するか、あるいは平均的な時間を採用するなどしてもよい。この例では、1番目のチューブを移送するにあたって必要な時間を代表的な時間として採用している。
さらに、この単位ジョブごとの所要時間は、必ずしも固定値として与えられなくともよい。例えば、図13に示された遠心処理を行う単位ジョブは、遠心分離機を操作するのに必要な時間はおおむね固定であると考えられるのに対し、遠心処理それ自体に必要な時間は、作業コマンドによって与えられるものであり一定でない。このような場合には、単位ジョブ群記憶部1cbには、単位ジョブの所要時間として、固定時間と変動時間を与えておき、変動時間は、作業コマンドに与えられたパラメータによって変化するものとしてよい。この例で示した遠心処理については、固定時間は20秒であり、これはロボット3により遠心分離機12の蓋を操作したり、ボタンスイッチを操作したりするのに要する時間である。これに対して変動時間はXとして示されており、これは遠心処理それ自体の時間であるから、図4に示したプロトコルチャートでは、3分(180秒)となり、結局、この例での遠心処理には200秒が必要となる。
図14は、つなぎジョブ記憶部1cdに記憶されたつなぎジョブを模式的に示す図である。つなぎジョブ記憶部1cdには、つなぎジョブ作成部25によりつなぎジョブが作成されると、作成されたつなぎジョブが順次記憶されていく。
このとき、全体動作時間の予測のためには、新たに作成されたつなぎジョブをロボット3が実行するにあたって必要な所要時間を見積もる必要がある。そこで、図3に示すように、つなぎジョブ25により作成されたつなぎジョブは、つなぎジョブシミュレータ26にも受け渡され、コンピュータシミュレーションにより、仮想的に実行されることで、その動作に必要な所要時間が見積もられる。見積もられた所要時間はつなぎジョブ記憶部1cdに記憶され、図14に示したように、記憶されたつなぎジョブごとにその所要時間が記憶される。
また、つなぎジョブシミュレータ26は、単にロボット3の動作シミュレーションのみを行うことで、その所要時間を推定するものであってもよいが、さらに、ロボット3のみならず、作業用機器を含めた処理システム200で使用される機器の3Dモデルである、作業モデルを仮想空間内で動作させるものであってよい。その場合、つなぎジョブシミュレータ26は、作業モデル記憶部1に記憶された作業モデルを参照して、仮想空間内でかかる作業モデルを動作させることで、モデル間の干渉の有無を検証することができる。検証結果はつなぎジョブ作成部25にフィードバックされることで、つなぎジョブ作成部25は、モデル間の干渉を起こさない経路でつなぎジョブを作成することができる。
図3に戻り、全体作業時間予測部30は、ユーザからの適宜の指示等に応じ、作業フロー全体の実行に要する時間である全体時間を予測する。この予測には、改めてシミュレーションを行う必要はなく、ロボット動作指令を参照し、ロボット動作指令に含まれる単位ジョブそれぞれの所要時間を単位ジョブ群記憶部1cbを参照して求め、また、つなぎジョブそれぞれの所要時間をつなぎジョブ記憶部1cdを参照して求め、合算すればよいので、作業フローの実行時間を予測するにあたり、長時間の計算(シミュレーション)や、実機であるロボット3の実動作は不要である。
予測された全体時間は、全体作業時間表示部31により、モニタ1hに表示される。これより、ユーザは、処理全体の実行に要する時間を把握できるため、例えば、処理結果を所望の日時に得たい場合には、どれくらい前から作業を開始すればよいのか、また、決められた期間内で何回処理を繰り返し実行することができるのかといったことが、実機を動作させることなく事前に把握できるので便利である。
ところで、本実施形態では、ロボット3は、ロボット3の内部に原点を有するロボット座標系SRによりその位置が指定され、動作を行う。これに対し、単位ジョブ群記憶部1cbに記憶された単位ジョブ群に含まれる単位ジョブは、その単位ジョブで取り扱う作業用機器毎に定められたローカル座標系SLによりその位置が指定されていてよい。そして、単位ジョブには、ローカル座標系SLを指定する座標系指定指令と、当該ローカル座標系SLに基づく移動指令が含まれてよい。この理由を、マイクロチューブ6に液剤を吐出する単位ジョブを例にとり、図15を参照して説明する。
図15は、メインラック5bに関するローカル座標系SLと、マイクロチューブ6に液剤を吐出する単位ジョブにおけるハンドの移動経路を示す図である。メインラック5bは作業台の指定の位置に固定設置されるが、設置時の誤差や、形状の個体差などの理由により、必ずしも毎回正確な位置に設置されるとは限らない。図15では、かかる誤差の例として、メインラック5bがロボット座標系SRに対して角度θだけ傾いている場合を誇張して示している。このような場合には、液剤を吐出する作業において、ロボットアーム先端のハンドの位置が若干変わることはもちろん、ハンドに把持されたピペット4を角度θだけ傾けて、ハンドを斜めに移動させる必要がある。
かかる修正を、メインラック5bの設置誤差に基づいて、単位ジョブの移動指令に反映させることは現実的ではない。なぜなら、メインラック5bを設置しなおすために誤差の値は変化するため、そのたびに単位ジョブ群記憶部1cbに記憶された単位ジョブを修正しなければならなくなるし、また、かかる修正が必要であるならば、メインラック5bを実際に設置して設置誤差を測定するまでは、単位ジョブの作成が行えないことになってしまうからである。
そこで、本実施形態に係る座標系指定部23dは、機器に付随するローカル座標系SLを設定し、かかるローカル座標系SLを指定する座標系指定命令を単位ジョブにふくませる。そして、かかる単位ジョブ内の移動命令は、このローカル座標系SLにより指定された移動命令である。したがって、図15において、メインラック5bの位置である基準点70と、マイクロチューブ6に対して作業を行う作業点76は、ローカル座標系SLで記述されている。
ローカル座標系SLの原点と向きは、メインラック5bの測定の容易な位置に設定される。例えば、図15に示したように、メインラック5bの角を原点とし、メインラック5bの辺の向きを座標軸の向きとする。このようにすることで、単位ジョブに含まれる移動命令は、作業用機器であるメインラック5bに対する相対位置として指定すればよく、メインラック5bの設置誤差には依存しない。
そして、ロボット制御装置2は、ロボット3を動作させるに際し、ロボット座標系SRとローカル座標系SLとの誤差を含む位置関係を予め測定し与えておくことで、ローカル座標系SLと容易にロボット座標系SRに座標変換してロボット3を動作させることができる。具体的には、ローカル座標系SLを用いてメインラック5bに対する液剤吐出の動作を記述することで、ロボット3の動作は、結果として、ロボット座標系SRにおいて位置のずれた基準点70を開始位置として、ピペット4を角度θ傾けて把持し、角度θ傾いた移動経路73cに沿って移動して作業点76において液剤吐出を行い、角度θ傾いたまま移動経路73cに沿って基準点70に戻る動作となる。
このように、単位ジョブを、当該作業ジョブで取り扱う作業用機器毎に定められたローカル座標系SLにより記述することで、作業用機器の設置誤差を意識することなく単位ジョブを作成することができ、その生産性及び保守性が向上する。また、作業用機器の設置誤差の構成は、設置時に行えば足り、その結果に応じて座標を再計算してロボット制御指令自体を書き換える必要はないので、省力化が図られる。
以上説明した実施形態の構成は具体例として示したものであり、本明細書にて開示される発明をこれら具体例の構成そのものに限定することは意図されていない。当業者はこれら開示された実施形態に種々の変形、例えば、機能や操作方法の変更や追加等を加えてもよく、また、フローチャートに示した制御は、同等の機能を奏する他の制御に置き換えてもよい。本明細書にて開示される発明の技術的範囲は、そのようになされた変形をも含むものと理解すべきである。