(57)【特許請求の範囲】
【請求項１】
上位のロボット動作をいくつかの基本動作の組み合わせとして把握し、前記基本動作に必要な各ロボット部位（以下、単に部位ともいう）の動作を規定する部位動作プログラムモジュール（以下、部位動作モジュールという）が、そのロボット部位に設けられたアクチュエータの駆動に関する駆動データを単位として形成され、その部位動作モジュールを複数組み合わせることにより前記基本動作を規定する中位動作ルーチンが形成され、その中位動作ルーチンの組み合わせにより前記上位のロボット動作を規定する上位動作プログラムが階層型プログラムとして記述されており、
必要な部位毎の部位動作モジュールの部位特定情報と部位動作モジュールを特定するための動作特定情報との双方又は一方を複数組み合わせることにより記述された、基本動作を規定する前記中位動作ルーチンの中で予め定められた標準的な基本動作（以下、標準動作という）を規定する標準動作ルーチンを複数記憶した標準動作ルーチン記憶部と、
複数の中位動作ルーチンを記憶するとともに、それら中位動作ルーチンの少なくとも一部のものを、前記複数の標準動作ルーチンのうちの所定のものを選択する標準動作ルーチン選択コマンドと、その選択された標準動作ルーチンに対し、特定の部位動作モジュールの削除、入替え、及び新たな部位動作モジュールの追加の少なくともいずれかを指示する動作変更コマンドとを含む標準変更型中位動作ルーチンとして記憶している中位動作ルーチン記憶部と、
各中位動作ルーチンと対応付けられた中位動作コマンドを用い、これら中位動作コマンドの組み合わせにより規定される上位動作プログラムを記憶する上位動作プログラム記憶部と、
その上位動作プログラム記憶部に記憶された前記上位動作プログラムを、前記中位動作コマンドの単位で読み出すプログラム読出手段と、
その読み出された中位動作コマンドに対応する中位動作ルーチンが前記標準変更型中位動作ルーチンであった場合には、それに含まれる標準動作ルーチン選択コマンドが指示する標準動作ルーチンと、同じく動作変更コマンドが指示する変更内容とに基づき、当該標準変更型中位動作ルーチンを実行すべき部位動作モジュールの組み合わせの形に展開するプログラム展開手段と、
読み出された各中位動作コマンドに対応する中位動作ルーチンの組み合わせに基づいて、前記アクチュエータの駆動を制御するアクチュエータ動作制御部とを含むことを特徴とするロボットシステム。
【請求項２】
前記複数のロボット部位のうちの少なくとも一部のものが、複数の骨格単位とそれら骨格単位の間に配置された前記アクチュエータとを有する骨格を備えるものとされるとともに、
前記複数の部位動作モジュールのうち、少なくとも一部のものは、下記の要件を備えた駆動データ作成装置、すなわち、
ロボット動作に対応するモデルの動作を経時的に記録した一連のモデル画像と、前記骨格の画像（以下、骨格画像という）を表示する画像表示手段と、
その表示手段において前記骨格画像を、前記モデル画像に対して位置合わせする骨格位置決め手段と、
時間軸上において互いに前後するモデル画像に対しそれぞれ位置合わせされた前記骨格画像の変位に基づいて、前記駆動データを算出するデータ演算手段とを含む駆動データ作成装置により、動作のコマ送り単位で作成された駆動データを、ロボットの部位別に編集することにより作成された教示動作ルーチン部分である請求項１記載のロボットシステム。
【請求項３】
複数の部位動作モジュールを記憶する部位動作モジュール記憶手段と、
前記標準変更型中位動作ルーチンを前記部位動作モジュールに展開するための中位動作ルーチン展開メモリ領域が形成された展開記憶手段とを備え、
前記プログラム展開手段は、前記動作変更コマンドが、特定の部位動作モジュールの削除を指示するものであった場合には、その指示された部位動作モジュールを削除しつつ、また入替えを指示するものであった場合にはその指示された部位動作モジュールを指定された部位動作モジュールと入れ替えつつ、さらに新たな部位動作モジュールの追加を指示するものであった場合には、その部位動作モジュールを追加しつつ、指定された前記標準動作ルーチンを構成する部位動作モジュールを前記部位動作モジュール記憶手段から読み出して、前記中位動作ルーチン展開メモリ領域にロードするものである請求項１又は２に記載のロボットシステム。
【請求項４】
前記部位動作モジュール記憶手段には、前記複数の部位動作モジュールが、部位を特定するための部位特定情報及び動作内容を特定するための動作特定情報と対応付けた形で記憶されており、
前記動作変更コマンドは、動作変更に係る部位を特定するための部位特定情報と、変更後の動作内容を規定する部位動作モジュールを特定するための動作特定情報とを含むものである請求項３記載のロボットシステム。
【請求項５】
前記プログラム展開手段は、前記動作変更コマンド中の部位特定情報により特定される部位が、前記標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれかと同一であった場合に、その部位に係る部位動作モジュールを、前記動作特定情報により特定される部位動作モジュールと入れ替えるものである請求項４記載のロボットシステム。
【請求項６】
前記プログラム展開手段は、前記動作変更コマンド中の部位特定情報により特定される部位が、前記標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれかと同一であった場合に、その部位に係る部位動作モジュールを削除するものである請求項４記載のロボットシステム。
【請求項７】
前記プログラム展開手段は、前記動作変更コマンド中の部位特定情報により特定される部位が、前記標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれとも異なる場合に、前記動作特定情報が特定する部位動作モジュールを前記標準動作ルーチンに追加するものである請求項４ないし６のいずれかに記載のロボットシステム。
【請求項８】
前記中位動作ルーチン記憶部に記憶されている複数の中位動作ルーチンのうち一部のものが、別の複数の中位動作ルーチン同士の組み合わせ、又は、１ないし複数の別の中位動作ルーチンと１ないし複数の部位動作モジュールとの組み合わせとして、各々中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方を指定するための動作指定コマンドを用いて記述された複合型中位動作ルーチンとされており、
前記プログラム展開手段は、読み出された中位動作コマンドに対応する中位動作ルーチンが前記複合型中位動作ルーチンであった場合には、それに含まれる動作指定コマンドの内容を解析して、当該複合型中位動作ルーチンを実行すべき部位動作モジュールの組み合わせの形に展開するものである請求項１ないし７のいずれかに記載のロボットシステム。
【請求項９】
前記動作指定コマンドのうち部位動作を指定するための部位動作コマンドは、部位を特定するための部位特定情報と、動作内容を規定する部位動作モジュールを特定するための動作特定情報とを含むものである請求項８記載のロボットシステム。
【請求項１０】
前記複合型中位動作ルーチンは、組み合わされるべき中位動作ルーチンと部位動作モジュールとの双方又は一方に係る、中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方が、時系列的な重なりを生じないよう逐次的に実行される、重ね合わせ型中位動作ルーチンとして構築される請求項８又は９に記載のロボットシステム。
【請求項１１】
前記複合型中位動作ルーチンは、組み合わされるべき中位動作ルーチンと部位動作モジュールとの双方又は一方に係る、中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方が、時系列的に少なくとも部分的な重なりを生じた状態で実行される、組合わせ型中位動作ルーチンとして構築される請求項８又は９に記載のロボットシステム。
【請求項１２】
前記標準変更型中位動作ルーチンと前記複合型中位動作ルーチンとの双方又は一方においては、対応する中位動作ルーチンに基づく基本動作又は部位動作モジュールに基づく部位動作の動作条件を規定する動作条件規定コマンドが含まれており、
前記アクチュエータ動作制御部は、前記動作条件規定コマンドが規定する動作条件に従い、前記基本動作又は部位動作に係るアクチュエータの駆動を制御するものである請求項１ないし１１のいずれかに記載のロボットシステム。
【請求項１３】
前記動作条件規定コマンドは、基本動作又は部位動作の動作開始タイミングを規定する動作開始タイミング規定コマンドを含む請求項１２記載のロボットシステム。
【請求項１４】
前記動作開始タイミング規定コマンドは、予め定められた時刻原点からの経過時間に基づいて前記動作開始タイミングを与えるものである請求項１３記載のロボットシステム。
【請求項１５】
前記動作開始タイミング規定コマンドは、前記教示動作ルーチン部分により規定されるある部位の動作を基準として用いたときの、その部位動作の開始時刻、終了時刻又は特定のコマ位置通過時刻のいずれかに基づいて前記動作開始タイミングを与えるものである請求項１２ないし１４のいずれかに記載のロボットシステム。
【請求項１６】
前記動作開始タイミング規定コマンドが特に与えられていないない場合に、対応する基本動作又は部位動作の動作開始タイミングを予め定められたデフォルト開始時刻に設定する動作開始タイミング設定手段が設けられている請求項１３ないし１５のいずれかに記載のロボットシステム。
【請求項１７】
前記標準変更型中位動作ルーチン及び前記複合型中位動作ルーチンには、前記駆動データ作成装置による教示動作ルーチン部分の作成がなされないロボット部位（以下、非教示部位と称する）の部位動作モジュールが含まれる場合に、その部位動作モジュールに対応する非教示部位の位置決め命令ルーチン部分が組み込まれており、
その位置決め命令ルーチン部分の内容に基づいて、対応する非教示部位のアクチュエータの駆動データを生成する非教示部位駆動データ生成手段が設けられている請求項２ないし１６のいずれかに記載のロボットシステム。
【請求項１８】
前記位置決め命令ルーチン部分は、対応する非教示部位の移動開始位置、移動終了位置及び移動速度の少なくともいずれかを指定する位置決め情報が含まれている請求項１７記載のロボットシステム。
【請求項１９】
前記上位動作プログラムは、前記中位動作コマンドと前記部位動作コマンドとを混在させた形で記述することが許されており、
前記プログラム読出手段は、その部位動作コマンドを前記中位動作コマンドと等価なものとして認識し、これに対応する部位動作モジュールを読み出すものとされる請求項１ないし１８のいずれかに記載のロボットシステム。
【請求項２０】
前記上位動作プログラムは、前記中位動作コマンドを含む動作命令文が、その実行順を反映した所定の配列に従い記述された動作ルーチンと、前記変更型中位動作ルーチン及び前記複合型中位動作ルーチンの少なくともいずれかの内容を規定する定義ルーチンとを含み、
前記プログラム展開手段による前記変更型中位動作ルーチンあるいは前記複合型中位動作ルーチンの展開処理は、それら中位動作ルーチンに含まれるべき部位動作モジュールの読出しに先立って、前記定義ルーチンの内容に従い実行される請求項１ないし１９のいずれかに記載のロボットシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はロボットシステムに関する。
【０００２】
【従来の技術】
人間の動きを模写するロボット等、各種多関節ロボットに所定の動作を行わせる場合、その動作をプログラミングするために、従来はロボットを駆動する各アクチュエータの駆動量を、動作の時系列に従って個別に設定する方法がとられている。この場合、あるロボットの動作において、複数のロボット部位の動きが同時にあるいは連係して起こる場合、それらロボット部位毎にアクチュエータの駆動量を指定しなければならない。例えば、「歩く」という動作を例にとれば、これには両足の動きの他に、腕の振りや肩の上下といった動作が付随しており、それら各部の動作のプログラムが個別に組み立てられる。そして、「１歩前に進み出て礼をし、そのまま下がってもとの場所に帰る」というような、より複雑な上位動作をプログラミングする場合は、その上位動作を、「１歩前に進み出る」、「礼をする」、「１歩下がる」という下位動作に分解してプログラミング作業が行われる。
【０００３】
上記従来の方法は、ロボット部位毎に多数のアクチュエータの駆動量やその作動順序をいちいち設定しなければならないので、プログラミング作業に時間がかかり、複雑な上位動作のプログラムを効率よく作成するのに適しているとは言い難い。また、上位動作の内容を変更したい場合には、各アクチュエータの駆動量レベルでプログラムないしデータを書き換えなければならず、その作業に時間がかかる。すなわち、ロボットの動作内容の変更がそれほど容易でないため、ロボットの各種動作への融通性に欠ける難点がある。
【０００４】
そこで、これを解決するために、特開平８−３１４５２４号公報には、次のような階層型制御プログラムを用いる制御方式が提案されている。この制御プログラムにおいては、複数のロボット部位に設けられたアクチュエータの駆動に関する駆動データを単位として下位動作データを形成し、その下位動作データを複数統合してロボットの基本動作を規定する中位動作ルーチンを構築する。また、それら各中位動作ルーチンに中位動作コマンドを対応させ、その中位動作コマンドの組み合わせにより上位動作プログラムを規定する。そして、その上位動作プログラムを前記中位動作コマンドの単位で読み出しつつ、その読み出された各中位動作コマンドに対応する中位動作ルーチンの組み合わせに基づいて、各アクチュエータの駆動を制御する。
【０００５】
【発明が解決しようとする課題】
ところで、上記方式においては、ロボットの基本動作を規定する中位動作プログラムの種類を増やしたい場合、新たに追加したい基本動作の中位動作プログラムを、その都度下位動作データの単位に遡って作成しなければならない。この中位動作プログラムの作成作業は、直感的には把握しにくい下位動作データレベルでしか行うことができないから、専門的な知識とプログラミング作業への高度の熟練とを要し、一般のユーザには甚だ扱いにくい内容となる。従って、中位動作コマンドの使用により簡単なプログラミングが実現されている点についてはよいが、上記事情により、専門家以外の者は予め用意された中位動作コマンド（基本動作）の枠を一歩も超えることができず、融通性に乏しい欠点がある。
【０００６】
また、別の例を挙げれば、ロボットの動作を所望のものにより近付けるために、ある中位動作コマンドが指定する基本動作において、特定の部位の動作のみを別の動作に変更したい、あるいは該部位の動作を行わせないようにしたい、さらには新たな部位動作を追加したい、といった要望が生ずることがある。このような
要望に応ずるためには、当然のことながら対応する中位動作ルーチンの書換えが必要となる。しかしながら、上記公報の技術においては、上位動作プログラムの書換えとして許されているのは、中位動作コマンド単位の組替え、追加、削除のみであり、結局のところわずかな動作変更でも新たな中位動作ルーチンの作成が必要となって非常に面倒である。
【０００７】
本発明の課題は、新たな基本動作の追加や、既存の基本動作の部分的な変更に対応するための、中位動作ルーチンの作成あるいは書換え等を簡単に行うことができ、ひいては直感的かつ柔軟性に富む動作プログラミングを可能としたロボットシステムを提供することにある。
【０００８】
【課題を解決するための手段及び作用・効果】
上記課題を解決するために本発明のロボットシステムは、
上位のロボット動作をいくつかの基本動作の組み合わせとして把握し、基本動作に必要な各ロボット部位（以下、単に部位ともいう）の動作を規定する部位動作プログラムモジュール（以下、部位動作モジュールという）が、そのロボット部位に設けられたアクチュエータの駆動に関する駆動データを単位として形成され、その部位動作モジュールを複数組み合わせることにより基本動作を規定する中位動作ルーチンが形成され、その中位動作ルーチンの組み合わせにより上位のロボット動作を規定する上位動作プログラムが階層型プログラムとして記述されており、
必要な部位毎の部位動作モジュールの部位特定情報と部位動作モジュールを特定するための動作特定情報との双方又は一方を複数組み合わせることにより記述された、基本動作を規定する前記中位動作ルーチンの中で予め定められた標準的な基本動作（以下、標準動作という）を規定する標準動作ルーチンを複数記憶した標準動作ルーチン記憶部と、
複数の中位動作ルーチンを記憶するとともに、それら中位動作ルーチンの少なくとも一部のものを、複数の標準動作ルーチンのうちの所定のものを選択する標準動作ルーチン選択コマンドと、その選択された標準動作ルーチンに対し、特定の部位動作モジュールの削除、入替え、及び新たな部位動作モジュールの追加の少なくともいずれかを指示する動作変更コマンドとを含む標準変更型中位動作ルーチンとして記憶している中位動作ルーチン記憶部と、
各中位動作ルーチンと対応付けられた中位動作コマンドを用い、これら中位動作コマンドの組み合わせにより規定される上位動作プログラムを記憶する上位動作プログラム記憶部と、
その上位動作プログラム記憶部に記憶された上位動作プログラムを、中位動作コマンドの単位で読み出すプログラム読出手段と、
その読み出された中位動作コマンドに対応する中位動作ルーチンが標準変更型中位動作ルーチンであった場合には、それに含まれる標準動作ルーチン選択コマンドが指示する標準動作ルーチンと、同じく動作変更コマンドが指示する変更内容とに基づき、当該標準変更型中位動作ルーチンを実行すべき部位動作モジュールの組み合わせの形に展開するプログラム展開手段と、
読み出された各中位動作コマンドに対応する中位動作ルーチンの組み合わせに基づいて、アクチュエータの駆動を制御するアクチュエータ動作制御部とを含むことを特徴とする。
【０００９】
まず、このロボットシステムにおいては、中位動作ルーチンを、ロボット部位毎の動作を規定するルーチン、すなわち部位動作モジュールの寄せ集めとして構成する。また、予め定められた標準動作を規定する標準動作ルーチンを、部位動作モジュールの部位特定情報と部位動作モジュールを特定するための動作特定情報との双方又は一方を複数組み合わせることにより用意しておく。そして、適当な標準動作ルーチンを選択して、これに対し、特定の部位動作モジュールの削除、入替え、及び新たな部位動作モジュールの追加の少なくともいずれかを行うことにより、上記中位動作ルーチンを作成する。このように作成される中位動作ルーチンを標準変更型中位動作ルーチンと呼び、そのプログラムの記述単位は、所望の標準動作ルーチンを選択するための標準動作ルーチン選択コマンドと、部位動作モジュールの削除、入替え、及び新たな部位動作モジュールの追加の少なくともいずれかを指示する動作変更コマンドである。
【００１０】
このようなプログラミング方式の採用により、次のような効果を享受できる。すなわち、中位動作プログラムの種類を増やしたい場合は、例えば増やしたい基本動作に最も近い標準動作のルーチンを選択し、これに動作変更したい部位別に部位動作モジュールの削除、入替え、あるいは新たな部位動作モジュールの追加を行うのみで新しい中位動作ルーチンが作成でき、従来のようにこれを下位動作データの単位に遡って作成する必要がなくなる。その結果、新たな中位動作プログラムの作成作業が直感的に把握しやすくなるので、専門的な知識とプログラミング作業への高度の熟練とを有さない一般のユーザでも、簡単に扱うことができるようになり、またプログラミングの幅も拡げることができる。また、中位動作ルーチンが部位別の動作モジュール単位で構成されているから、特定の部位の動作のみを別の動作に変更したい、あるいは該部位の動作を行わせないようにしたい、さらには新たな部位動作を追加したい、といった要望にも、部位動作モジュールの入替え、削除、追加により簡単に対応できる。
【００１１】
上記ロボットシステムにおいては、ロボットを、複数のロボット部位のうちの少なくとも一部のものが、複数の骨格単位とそれら骨格単位の間に配置されたアクチュエータとを有する骨格を備えるものとして構成できる。この場合、複数の部位動作モジュールのうち、少なくとも一部のものを、下記の要件を備えた駆動データ作成装置、すなわち、
ロボット動作に対応するモデルの動作を経時的に記録した一連のモデル画像と、骨格の画像を表示する画像表示手段と、
その表示手段において骨格画像を、モデル画像に対して位置合わせする骨格位置決め手段と、
時間軸上において互いに前後するモデル画像に対しそれぞれ位置合わせされた骨格画像の変位に基づいて、駆動データを算出するデータ演算手段とを含む駆動データ作成装置により、動作のコマ送り単位で作成された駆動データを、ロボットの部位別に編集することにより作成された教示動作ルーチン部分とすることができる。
【００１２】
この方式によれば、例えば、ある基本動作を人間のモデルに実際に行わせてこれをコマ単位の一連の画像として記録し、それら各画像にロボットの骨格画像をそれぞれ位置合わせすることによって、経時的に変化するモデル動作の特定の時刻毎に、骨格画像のモデル画像に対する位置決めが行われ、隣り合う画像間での骨格の変位に基づいて駆動データが演算される。いわば、モデルの動きを直接ロボットに教示するイメージにより、直感的な駆動データ生成が可能となるのである。このようにすれば、その中位動作に含まれる各部位毎の下位動作データを一括して得ることができ、中位動作コマンドを付与して記憶部に保存すればそのまま中位動作ルーチンとしての使用が可能となる。そして、その駆動データを作成するための作業は、画像表示手段の画面上でモデル画像に骨格画像を位置合わせする操作が中心となるので内容が理解しやすく、また、ロボットの部位毎にアクチュエータの駆動量をいちいち設定する必要がなくなるので、上位動作プログラム作成に必要な多量の駆動データを合理的かつ簡便に得ることができる。
【００１３】
この場合、下位動作データを部位別に編集することで部位動作モジュールを教示動作ルーチン部分として簡単に作成することができる。そして、この方式を本発明に適用することにより、次の利点が生ずる。すなわち、モデルによる動作教示は、基本動作の種類が変わればモデルが新たに動作を行ってこれをビデオ撮影し、データ作成を行う形とすることもできるが、類似した基本動作で特定部位の動作のみが若干異なるもののデータを作成する場合は、その都度モデル動作の撮影及びデータ作成（すなわち中位動作ルーチンの作成）を繰り返すのはいささか非能率である。そこで、いくつかの基本動作についてデータ作成が終わっていれば、特定の基本動作のある部位の動作を変更する際に、別の基本動作のデータから適当な部位動作モジュールを探し出し、これを変更に係る基本動作（すなわち、これを標準動作とみることもできる）の部位のモジュールと置き換えることにより、簡単にその基本動作のデータすなわち中位動作ルーチンを得ることが可能となる。
【００１４】
上記ロボットシステムには、複数の部位動作モジュールを記憶する部位動作モジュール記憶手段と、標準変更型中位動作ルーチンを部位動作モジュールに展開するための中位動作ルーチン展開メモリ領域が形成された展開記憶手段とを設けることができる。この場合、プログラム展開手段は、動作変更コマンドが、特定の部位動作モジュールの削除を指示するものであった場合には、その指示された部位動作モジュールを削除しつつ、また入替えを指示するものであった場合にはその指示された部位動作モジュールを指定された部位動作モジュールと入れ替えつつ、さらに新たな部位動作モジュールの追加を指示するものであった場合には、その部位動作モジュールを追加しつつ、指定された標準動作ルーチンを構成する部位動作モジュールを部位動作モジュール記憶手段から読み出して、中位動作ルーチン展開メモリ領域にロードするものとすることができる。上記構成では、例えば、必要な部位動作モジュールのみを中位動作ルーチン展開メモリ領域にロードする形となるから、展開処理をスムーズかつ迅速に行うことができ、例えば中位動作ルーチンのデータ量が非常に多い場合でもロボット制御の速度を高めることができる。
【００１５】
この場合、部位動作モジュール記憶手段には、複数の部位動作モジュールを、部位を特定するための部位特定情報（例えば部位名）及び動作内容を特定するための動作特定情報（例えばモジュール名）と対応付けた形で記憶しておくことができる。また、動作変更コマンドは、動作変更に係る部位を特定するための部位特定情報と、変更後の動作内容を規定する部位動作モジュールを特定するための動作特定情報とを含むものとすることができる。これにより、標準動作ルーチンに対する入替え、削除あるいは追加に係る部位動作モジュールの指定を、部位の種類あるいは動作内容により簡単に特定でき、ひいては動作変更コマンドを用いた標準変更型中位動作ルーチンのプログラミングがより簡単になる。
【００１６】
プログラム展開手段は、動作変更コマンド中の部位特定情報により特定される部位が、標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれかと同一であった場合に、その部位に係る部位動作モジュールを、動作特定情報により特定される部位動作モジュールと入れ替えるものとすることができる。例えば、基本動作の設定においては、同一部位に対する２種以上の動作がその基本動作中に含まれないようにしておくことが、動作把握を容易にする上で都合がよい。この場合、上記のような処理方式とすることにより、部位の種別を特定するのみで、標準動作ルーチンにおいて対応する部位動作モジュールの入替えが自動的に行われるので、標準変更型中位動作ルーチンの作成が一層簡単となる。
【００１７】
また、プログラム展開手段は、動作変更コマンド中の部位特定情報により特定される部位が、標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれとも異なる場合に、動作特定情報が特定する部位動作モジュールを標準動作ルーチンに追加するものとすることができる。他方、プログラム展開手段は、動作変更コマンド中の部位特定情報により特定される部位が、標準動作ルーチン中の各部位動作モジュールに対応する部位のいずれかと同一であった場合に、その部位に係る部位動作モジュールを削除するものとすることもできる。いずれの場合も、プログラミングに際しては、部位の種別特定のみで部位動作モジュールの追加あるいは削除を指示することができるので、標準変更型中位動作ルーチンの作成が一層簡単となる。
【００１８】
なお、標準動作ルーチンは、中位動作ルーチン記憶部に記憶されている中位動作ルーチンとはファイル上区別して、これを専用の標準動作ルーチン記憶部に記憶しておいてもよいし、特に他の中位動作ルーチンとのファイル上の区別は行わず、同じ中位動作ルーチン記憶部に記憶しておいてもよい。後者の場合は、中位動作ルーチン記憶部が標準動作ルーチン記憶部を兼ねる形となる。いずれの場合も、標準動作ルーチンは、動作変更コマンドによる変更を加えない形で中位動作ルーチンとして使用することが可能である。なお、標準動作ルーチンと中位動作ルーチンとをファイル上区別しない場合は、動作変更コマンドと対をなす標準動作ルーチン指定コマンドにより、どの中位動作ルーチンを標準動作ルーチンとして用いるかを指定するようにすればよい。
【００１９】
次に、中位動作ルーチン記憶部に記憶されている複数の中位動作ルーチンのうち一部のものを、別の複数の中位動作ルーチン同士の組み合わせ、又は、１ないし複数の別の中位動作ルーチンと１ないし複数の部位動作モジュールとの組み合わせとして、各々中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方を指定するための動作指定コマンドを用いて記述された複合型中位動作ルーチンとすることができる。この場合、プログラム展開手段は、読み出された中位動作コマンドに対応する中位動作ルーチンが複合型中位動作ルーチンであった場合には、それに含まれる動作指定コマンドの内容を解析して、当該複合型中位動作ルーチンを実行すべき部位動作モジュールの組み合わせの形に展開するものとして構成することができる。
【００２０】
上記のような複合型中位動作ルーチンを用いることにより、いくつかの基本動作を組み合わせ、あるいは基本動作と部位動作との組み合わせにより、より大きな単位の基本動作を指定することが簡単にできるようになる。例えば頻繁に使用するひとまとまりの基本動作と部位動作との双方又は一方を、動作指定コマンドを用いて記述した複合型中位動作ルーチンとして予め定義しておけば、上位動作プログラムの大幅な簡略化を図ることができる。この場合も、動作指定コマンドのうち部位動作を指定するための部位動作コマンドは、部位を特定するための部位特定情報と、動作内容を規定する部位動作モジュールを特定するための動作特定情報とを含むものとすることができる。
【００２１】
上記複合型中位動作ルーチンは、組み合わされるべき中位動作ルーチンと部位動作モジュールとの双方又は一方に係る、中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方が、時系列的な重なりを生じないよう逐次的に実行される、重ね合わせ型中位動作ルーチンとして構築することができる。これは、ひとまとまりの基本動作と部位動作との双方又は一方を指定された順序で逐次的に行わせたい場合に便利である。
他方、複合型中位動作ルーチンは、組み合わされるべき中位動作ルーチンと部位動作モジュールとの双方又は一方に係る、中位動作ルーチンに対応する基本動作と部位動作モジュールに対応する部位動作との双方又は一方が、時系列的に少なくとも部分的な重なりを生じた状態で実行される、組合わせ型中位動作ルーチンとして構築することができる。これは、ひとまとまりの基本動作と部位動作との双方又は一方を同時的に行わせたい場合に便利であり、複雑な連係動作も簡単にプログラミングすることができる。
【００２２】
標準変更型中位動作ルーチンと複合型中位動作ルーチンとの双方又は一方においては、対応する中位動作ルーチンに基づく基本動作又は部位動作モジュールに基づく部位動作の動作条件を規定する動作条件規定コマンドを含ませておくことができる。また、部位動作モジュールのみを含む通常の中位動作ルーチンに対しても、部位動作の動作条件を規定する動作条件規定コマンドを含ませておくことができる。この場合、アクチュエータ動作制御部は、動作条件規定コマンドが規定する動作条件に従い、基本動作又は部位動作に係るアクチュエータの駆動を制御するものとすることができる。
【００２３】
すなわち、前記した特開平８−３１４５２４号公報のロボットシステムにおいては、中位動作ルーチンの新規作成や内容変更には専門的な知識と熟練が必要であり、一般のユーザには扱いにくいことは既に述べたが、とりわけ互いに異なる動作が連係した複合動作となる場合等において、タイミング等の動作条件設定が特に面倒である。この場合、プログラミングに時間がかかるばかりでなく、プログラムの見通しや全体把握が困難になるため、所期のロボット動作を思い通りに実現しにくくなるといった問題も生ずる。
【００２４】
そこで、上記のように、部位動作あるいは基本動作の単位でロボット動作を把握し、動作条件規定コマンドにより各部位動作あるいは基本動作毎に条件規定を行うようにすれば、ロボットに複雑な動作を行わせる場合でも、プログラム作成あるいは変更が極めて簡単となる。また、プログラムの見通しや全体把握も容易になるから、所期のロボット動作を思い通りに実現することができる。
【００２５】
例えば、動作条件規定コマンドは、基本動作又は部位動作の動作開始タイミングを規定する動作開始タイミング規定コマンドを含むものとすることができる。例えば、複数の部位動作を同時連係的に組み合わせる場合、動作開始タイミング規定コマンドにより動作毎の開始タイミングを規定することで、ある部位の動作を他の部位よりも遅れて開始させたり、あるいはある動作が終了した後に特定部位の動作を開始させたり、さらには特定部位同士の動作を同時に開始させたりといった複雑な動作指定を簡単に行うことが可能となる。
【００２６】
この場合、動作開始タイミング規定コマンドは、予め定められた時刻原点からの経過時間に基づいて動作開始タイミングを与えるものとすることができる。この場合は、例えばタイマー計測等による時間把握により動作タイミングを簡単に規定することができる。他方、前記教示動作ルーチン部分により規定されるある部位の動作を基準として用い、動作開始タイミング規定コマンドを、その部位動作の開始時刻、終了時刻又は特定のコマ位置通過時刻のいずれかに基づいて動作開始タイミングを与えるものとしておけば、特定部位の動作を基準にタイミングを設定したい場合に便利である。
【００２７】
なお、動作開始タイミング規定コマンドが特に与えられていないない場合に、対応する基本動作又は部位動作の動作開始タイミングを予め定められたデフォルト開始時刻に設定する動作開始タイミング設定手段を設けておくことができる。例えば前記した組合わせ型中位動作ルーチン等において、デフォルト開始時刻（例えばプログラム実行開始）において、いくつかの部位の動作を同時にスタートさせたい場合、上記のような手段を設けておくことで、特にそれら部位へのタイミング指定を行わなくとも所期の動作が実行されるので、プログラムを簡略化することが可能となる。
【００２８】
次に、前記した駆動データ作成装置により教示動作ルーチン部分を作成する場合、例えば、モデル画像に位置合わせされた骨格画像からは駆動データの演算が困難あるいは不可能なロボット部位が存在する場合がある（例えば手首、指、眼、口等の動き、ランプの点灯など）。そして、標準変更型中位動作ルーチン及び複合型中位動作ルーチンに、上記のような要因により、駆動データ作成装置による教示動作ルーチン部分の作成がなされないロボット部位（非教示部位）の部位動作モジュールが含まれる場合は、その部位動作モジュールに対応する非教示部位の位置決め命令ルーチン部分をプログラム中に組み込んでおくことができる。また、その位置決め命令ルーチン部分の内容に基づいて、対応する非教示部位のアクチュエータの駆動データを生成する非教示部位駆動データ生成手段を設けることができる。
【００２９】
上記構成では、駆動データ作成装置によるデータ作成の不能な非教示部位の動作を組み込む場合に、位置決め命令ルーチン部分の内容に基づいて、対応する非教示部位のアクチュエータの駆動データが、プログラム実行中に自動生成されることとなる。これにより、各種非教示部位に対する駆動データを予め用意する必要がなくなり、また非教示部位の部位動作の組込みも非常に簡単になるので、プログラミングの手間を省くことができる。この場合、位置決め命令ルーチン部分は、対応する非教示部位の移動開始位置、移動終了位置及び移動速度の少なくともいずれかを指定する位置決め情報を含むものとすることができる。例えば、非教示部位が、眼の回転や口の開閉あるいは舌の出し入れのように、ロボットの特定部位に対して予め定められた２位置間でのみ移動するような場合、あるいは単純な回転移動しか行わない場合等においては、このような簡略な位置決め情報により駆動データの生成を問題なく行わせることができる。
【００３０】
上位動作プログラムは、中位動作コマンドと部位動作コマンドとを混在させた形で記述できるようにしておけば、部位動作単位でのよりきめ細かいプログラミングが可能となる。この場合、プログラム読出手段は、その部位動作コマンドを中位動作コマンドと等価なものとして認識し、これに対応する部位動作モジュールを読み出すものとしておけばよい。
【００３１】
また、上位動作プログラムは、中位動作コマンドを含む動作命令文が、その実行順を反映した所定の配列により記述された動作ルーチンと、変更型中位動作ルーチン及び複合型中位動作ルーチンの少なくともいずれかの内容を規定する定義ルーチンとを含む形式を採用することができる。変更型中位動作ルーチンあるいは複合型中位動作ルーチンを、定義ルーチンの形で上位動作プログラムの中に組み込めるようにしておくことで、これら形式の中位動作ルーチンを上位動作プログラムの枠内で作成できるようになり、プログラミングがより簡単でわかりやすくなる。この場合、プログラム展開手段による標準変更型中位動作ルーチンあるいは複合型中位動作ルーチンの展開処理は、それら中位動作ルーチンに含まれるべき部位動作モジュールの読出しに先立って、定義ルーチンの内容に従い実行されるようにしておく。
【００３２】
【発明の実施の形態】
以下、本発明の一実施例を図面を用いて説明する。
図１は、本発明の一実施例たるロボットシステム２００の全体構成を示しており、ロボット２０１、ロボット制御部２０２、駆動データ作成装置１を備えており、これらがそれぞれ通信インターフェース２０３、１５２を介して通信回線１５０により互いに接続されている。
【００３３】
ロボット制御部２０２は、ＣＰＵ２０４とこれに接続されるＲＡＭ２０５、ＲＯＭ２０６、ハードディスク装置等で構成される記憶装置２０７、キーボード等の入力装置２０８、表示制御部２１０等を備える。そして、表示制御部２１０にはＣＲＴ等の表示装置２１１が接続され、また、ＣＰＵ２０４には通信インターフェース２０３が接続される。
【００３４】
なお、記憶装置２０７は、標準動作ルーチン記憶部、中位動作ルーチン記憶部、、部位動作モジュール記憶手段として機能する。また、ＣＰＵ２０４は、プログラム読出手段、プログラム展開手段、非教示部位駆動データ生成手段として機能する。さらに、ＲＡＭ２０５はＣＰＵ２０４のワークエリア及び展開記憶手段として機能する。
【００３５】
ロボット２０１は、例えば人間の動きを模写するロボットとして構成され、図２に示すように、骨格単位２０〜３０が関節機構３１〜３７で互いに接続される骨格１９を備える。そして、この骨格は、例えば下記のようなロボット部位（以下、部位Ａ、Ｂ、Ｃ・・・等という）に区分されている。
・頭部（２０）：眼部２０ａと口部２０ｃを備える。図３に示すように、口部２０ｃは、図示しないアクチュエータにより開閉駆動可能とされている。さらに、口部２０ｃの内部には、舌部２０ｄが図示しないアクチュエータにより出入り可能に設けられている。また、図４に示すように、眼部２０ａは図示しないアクチュエータにより左右に回転駆動可能に設けられている。また、この眼部２０ａを覆ったり開いたりする瞼部２０ｅが、図示しないアクチュエータにより駆動可能に設けられている。さらに、図１に示すスピーカ１９２（音声出力部）も内蔵されていおり、ＣＰＵ２０４からの指令により、音声合成部１９１により合成された声等の音声を出力できるようになっている。なお、本明細書では、音声出力部も部位の一つとみなし、それによる音声出力も動作の一つとみなす。
・胴体：肩２１、背骨２２、腰骨２３を含む。
・左右の腕部：それぞれ上腕骨２４、下腕骨２５、手部２９を備える。また、手部２９の各指は、それぞれ独立に曲げ伸ばし駆動可能とされ、例えばジャンケンの「グー」、「チョキ」、「パー」など、各種の手形状を作ることができるようになっている。
・左右の脚部：それぞれ上肢骨２６、下肢骨２７、足部３０を備える。
【００３６】
そして、図１に示すようにロボット２０１には、上記各部位（図面では、Ａ、Ｂ、Ｃ等で簡略に表記している）のそれぞれに対応して算出・駆動制御部（算出・駆動制御手段）２１２が設けられ、ロボット制御部２０２のＣＰＵ２０４にそれぞれ接続されている。そして、これら算出・駆動制御部２１２に対し、各部位に含まれるアクチュエータ２１３が接続されている。なお、図２の各関節機構３１〜３７に設けられるアクチュエータの種類（パルスモータ、サーボモータ、ピストンシリンダ等）と軸の本数、軸の回転の自由度、及び軸の回転ないしピストンのスライドの範囲等は各骨格単位毎に個別に設定されている。
【００３７】
次に、図５に示すように、ロボット制御部２０２（図１）の記憶装置２０７には、上位動作プログラム記憶部３００、中位動作ルーチン記憶部３０２、部位動作モジュール記憶部３０４、中位動作コマンド解析プログラム記憶部３０６、非教示部位駆動データ生成プログラム記憶部３０８、システムプログラム記憶部３１２が形成されており、それぞれ対応するプログラムないしルーチン（あるいはデータ）を記憶している。
【００３８】
各プログラムの作用は以下の通りである。
（１）上位動作プログラム：予め用意された中位動作コマンドから適当なものを選んで配列することにより、所望の上位動作を記述する。例えばロボット２０１に「右を向いて４歩歩き、回れ右して１歩半踏み出し、空手チョップのポーズをとる」という一連の上位動作を行わせたい場合には、これを「右を向く」、「右脚部半歩」、「左脚部１歩」等、いくつかの基本動作の組み合わせとして把握する。そして、該上位動作プログラムでは、その上位動作を構成する基本動作をそれぞれ規定する中位動作コマンドを含んだ動作命令文３００ａが、その実行順を反映した所定の順序、例えばその実行順に配列される。本実施例では、動作命令文に含まれる中位動作コマンドは、基本動作の定義名を含んだ形で記述される。
【００３９】
（２）中位動作ルーチン：対応する基本動作に必要な各ロボット部位の動作を規定する部位動作プログラムモジュール（部位動作モジュール）のモジュール名（動作特定情報）ＰＭ１１，ＰＭ１２‥‥の組み合わせとして、基本動作の定義名１，２，３，‥‥と対応付けた形で記憶されている。
（３）部位動作モジュール：図６に示すように、図１のロボット２０１の部位Ａ、Ｂ、Ｃ・・・に含まれるアクチュエータの駆動データ群を含んで構成されており、部位名（部位特定情報）１，２，‥‥、及びモジュール名（動作特定情報）ＰＭ１１，ＰＭ１２‥‥と対応付けた形で記憶されている。なお、各駆動データは、各アクチュエータにより駆動される骨格単位の両端の各時間毎の変位データを含むものとされるが、骨格単位間の角度データとすることもできる。他方、駆動データは、各アクチュエータの各時間毎の駆動量とすることもできる。
【００４０】
（４）中位動作コマンド解析プログラム：中位動作コマンドの単位で上位動作プログラムを読み出し、対応する中位動作ルーチンを順次起動させる。
（５）システムプログラム：ＣＰＵ２０４上における上位動作プログラムの作動環境、及び上位動作プログラムの書換えないし新規作成のための環境を与える。具体的には、表示装置２１１（図１）にプログラム作成画面を開き、入力装置２０８を用いて上位動作コマンドを図１８に示すような形式（後述）で入力し、その入力内容に上位動作プログラム名を付与して、記憶装置２０７の上位動作プログラム記憶部３００に記憶させる。また、記憶された上位動作プログラムをプログラム作成画面に表示させ、入力装置２０８からの入力に基づいて上位動作コマンドの追加、削除、挿入等を行い、プログラムの修正・編集を実行する。他方、後述する標準変更型中位動作ルーチンあるいは複合型中位動作ルーチンの部位動作モジュールへの展開処理も、このシステムプログラムが行う。なお、これらタイプの中位動作ルーチンは定義ルーチン３００ｂの形で、上位動作プログラム内に組み込まれた形で上位動作プログラム記憶部３００内に記憶される。すなわち、該記憶部３００の一部も、中位動作ルーチン記憶部として機能している。
（６）非教示部位駆動データ生成プログラム：後述する。
【００４１】
一方、図７に示すように、ＲＡＭ２０５には、上位動作プログラム格納部２０５ａ、中位動作コマンド解析プログラム格納部２０５ｂ、中位動作ルーチン格納部（Ｉ）２０５ｃ、中位動作ルーチン格納部（ＩＩ）２０５ｄ等が形成され、それぞれ記憶装置２０７から読み出された対応するプログラム、データ等を格納するようになっている。なお、格納部２０５ｃ，２０５ｄには、実行に係る中位動作ルーチンに含まれる各部位動作モジュールがロードされる（標準変更型中位動作ルーチンあるいは複合型中位動作ルーチンについては、中位動作ルーチン展開メモリ領域２０５ｇにて部位動作モジュールの形に展開された後、ロードされる）なお、中位動作ルーチン格納部が（Ｉ）と（ＩＩ）の２つ（３つ以上でもよい）設けられているのは、次に実行する中位動作ルーチンを予め読み込んで蓄積しておくことにより、ロボット２０１が次の動作に移る際の、記憶装置２０７からのデータ読込みに基づく応答の遅れを低減するためである。
【００４２】
また、算出・駆動制御部２１２は、図８に示すように、それぞれＣＰＵ２１４、ＲＡＭ２１５、ＲＯＭ２１６等を備え、ＲＯＭ２１６には駆動量算出プログラム２１６ａが格納されている。そして、算出・駆動制御部２１２は中位動作ルーチンの実行に伴い、ロボット制御部２０２側から受信した駆動データＤＡ１、ＤＡ２、・・・等に基づいて、ＣＰＵ２１４に接続された各アクチュエータ２１３（図１）の駆動量を時系列順に算出し、その算出結果に基づいて各アクチュエータ２１３を駆動する。その算出方法については後述する。
【００４３】
図９は、駆動データ作成装置１の構成例を示すブロック図である。駆動データ作成装置１は、駆動データ演算手段を構成するＣＰＵ２、ＲＯＭ３、ＲＡＭ４を含む装置制御部５を備え、これに画像取込制御部６、表示制御部７、入力装置インターフェース８、装置全体の制御を司る制御プログラムを格納したプログラム記憶装置９、駆動データ記憶装置１０、動画データ記憶装置１１が接続されている。そして、入力装置インターフェース８にはクリックボタン１２ａ（入力部）を備えた骨格位置決め手段として、マウス１２、キーボード１３が接続されている。表示制御部７には画像表示手段としてのＣＲＴ１４が接続されている。一方、画像取込制御部６は、ビデオ再生装置（ＶＴＲ）１５が接続されるとともに、ＶＲＡＭ１６とデータ転送用プロセッサ１７とを備え、ＶＲＡＭ１６に格納された画像表示データが、バス１８を介して表示制御部７に直接転送可能とされている。
【００４４】
次に、図２に示すロボット２０１の骨格１９を形成する骨格単位のうち、いくつかのものは組を形成し、その組に含まれる各骨格単位同士の相対的な位置関係には予め定められた拘束条件が設定される。例えば、両脚部を構成する骨格単位を例にとれば、図１０に示すようにその下肢骨２７は、上肢骨２６に沿う直線と腰骨２３に直角な直線とが作る平面Ｐ内のみを動くという拘束条件が設定されている（なお、図１０においては、関節機構３５及び３６（図２）は描いていない）。従って、上肢骨２６の上端位置と下肢骨２７の下端位置とを指定すれば、両者の結合点（膝に相当する部分）の位置は、上記拘束条件に従って自動的に定まることとなる。
【００４５】
次に、本実施例のロボットシステム１の作動について詳しく説明する。
図１の入力装置２０８等により上位動作プログラム名を指定してこれを起動させると、中位動作コマンド解析プログラムが起動し、図１１のフローチャートに示すように、Ｍ１において上位動作プログラムの最初の中位動作コマンドが読み込まれ、Ｍ２で対応する中位動作ルーチンがＲＡＭ２０５の中位動作ルーチン格納部（Ｉ）２０５ｃに格納される。次に、その格納された中位動作ルーチンに対し信号を発してこれを起動させる（Ｍ３）。また、その中位動作ルーチンの実行中に、Ｍ４で次の中位動作コマンドを読み込み、Ｍ５で対応する中位動作ルーチンをＲＡＭ２０５の空いている中位動作ルーチン格納部（この場合、格納部（ＩＩ））に格納する。さらに、Ｍ６において起動・実行中の中位動作ルーチン（格納部（Ｉ）側）から中位側処理完了信号が送信されてきていれば、格納部（ＩＩ）２０５ｄに格納された中位動作ルーチンに起動信号を送信する（Ｍ７）。そして、Ｍ８において次の中位動作コマンドが存在すればＭ４へ返り、次のコマンドを読み込んで対応する中位動作ルーチンを空いている格納部（この場合、格納部（Ｉ））に格納し、以下同様の処理を繰り返すことにより、上位動作プログラムが中位動作コマンド単位で実行されてゆく。なお、次の中位動作コマンドが存在しないか、終了コマンドである場合には処理を終了する（Ｍ９）。
【００４６】
次に、中位動作ルーチン側での処理であるが、図１２のフローチャートに示すように、上位動作プログラム側から起動信号を受けることにより、各部位のアクチュエータの駆動データを読み込み（Ｂ１、Ｂ２）、アクチュエータの各時間毎の変位データとして記述された駆動データを、各部位の算出・駆動制御部２１２へ時系列順に送信する（Ｂ３）。そして、算出・駆動制御部２１２側では、駆動量算出プログラム２１６ａ（図８）に基づいて、その変位データに基づいて各アクチュエータの駆動量を算出し、その算出結果に基づいてそれらアクチュエータを駆動する。
【００４７】
駆動量の算出方法としては、一例として、以下のような原理に基づく方法を採用することができる。
まず、図２に示した骨格１９において、各骨格単位の両端位置に例えば図１３（Ｗ１）のようにインデックスを付与する。
・頭部２０：Ｈ、ｆ１。
・肩２１：Ａ１、Ｈ及びＨ、Ａ２。
・背骨２２：Ｇ及びＨ。ここで、Ｇは各骨格単位の変位からアクチュエータの駆動量を算出する際の基準位置として使用される。
・腰骨２３：Ｌ１及びＬ２。ＧがＬ１とＬ２を結ぶ線分の中点に位置付けられている。
・上腕骨２４、下腕骨２５：Ａ１、Ａｅ１、Ａｈ１及びＡ２、Ａｅ２、Ａｈ２。・上肢骨２６、下肢骨２７：Ｌ１、Ｌｋ１、Ｌｆ１及びＬ２、Ｌｋ２、Ｌｆ２。
そして、変位データは、各骨格単位の両端の変位として算出される。
【００４８】
例えば図１３の、左側の脚部に対しては、図１４（ａ）に模式的に示すように、点Ｇの位置が不変で、ある時刻Ｔ１におけるＬ１、Ｌｋ１の位置が次の時刻Ｔ２におけるＬ１’、Ｌｋ１’に移った場合、線分ＧＬ１及び線分Ｌ１Ｌｋ１に回転移動を施し、（ｂ）に示すように、線分ＧＬ１を線分ＧＬ１’に重ね合わせる。そして、回転移動後の各点の空間座標から、時刻Ｔ１の線分Ｌ１Ｌｋ１と、時刻Ｔ２の線分Ｌ１’Ｌｋ１’とのなす角度θを算出することにより、両骨格単位（すなわち、上腕部２６及び下脚部２７）の間に配置されたアクチュエータの各軸の回転角度を求めることができる。このような骨格単位の回転移動と第二骨格単位の回転角度を求める処理を、骨格の末端へ向かう方向に順次施してゆけば、各関節機構に含まれるアクチュエータの駆動量が順次算出されることとなる。なお、以上の説明では、アクチュエータはモータで構成されており、第一及び第二の骨格単位同士はそのモータ軸の回転により、相対的な回転運動のみを行うものとしたが、ピストンロッド等をアクチュエータとした場合は、そのピストンの伸縮により骨格単位間で相対的な並進運動が行われる場合もある。そのような場合は、第二骨格単位の回転角度の他、並進移動距離も算出するようにする。
【００４９】
このようにしてアクチュエータの駆動量が算出され、その中位動作ルーチンの駆動データに基づくアクチュエータの一連の駆動が終了すると、駆動量算出プログラム２１６ａからは下位側処理完了信号が中位動作ルーチン側へ送信される。中位動作ルーチン側では、図１２のＢ４でこれを受け、中位側処理完了信号を上位動作プログラムへ送信する（Ｂ５）。なお、アクチュエータの駆動量そのものを駆動データとして送信する場合には、算出・駆動制御部側での上記算出処理は不要となる。
【００５０】
図１５は、上述の流れに基づくロボット２０１の上位動作の具体的な実行例を示している。すなわち、「４歩歩く」という上位動作は、図１６及び図１７に示すように、「右脚部半歩」（定義名「ＷＡＬＫ２」）、「左脚部１歩」（定義名「ＷＡＬＫ３」）、「右脚部１歩」（定義名「ＷＡＬＫ４」）、「左脚部半歩」（定義名「ＷＡＬＫ５」）の４つの基本動作を含み、その上位動作プログラムは、各基本動作の中位動作コマンド（それぞれ対応する上記定義名を含む）を用いた動作命令文を用いて組まれることとなる。そして、例えば最初の「右脚部半歩」の基本動作を構成する部位動作は、右脚部及び左腕部の各部位に対するそれぞれ「半歩踏出し」及び「前降り」であり、対応する部位動作モジュールに含まれる関連アクチュエータの駆動データを時系列順に算出・駆動制御部２１２へ送信する（送信制御は前述のシステムプログラムが行う）。算出・駆動制御部２１２では送信されてきた駆動データに基づいて駆動量を算出し、対応するアクチュエータを駆動して、次の中位動作コマンド内容である「左脚部１歩」の実行へ移る。
【００５１】
以下、具体的なプログラム例を参照してさらに詳しく説明する。図１８は「右を向いて４歩歩き、礼をした後回れ右して１歩半踏み出し、空手チョップのポーズをとる」という上位動作を行わせるためのプログラム例である。プログラムは、前記した通り、動作命令ルーチンと定義ルーチンとから成り立っている。
【００５２】
本実施例では、動作命令ルーチンは、１又は複数の動作命令文を実行順に配列したものであり、ある動作命令文において、それが定義済基本動作の中位動作ルーチンであることを示すコマンドは「ｍｏｔｉｏｎ」コマンドであり、
ｍｏｔｉｏｎ  ＜ｄｏ：＝”定義名”＞
により、該定義名で示された中位動作ルーチンの実行を命令する中位動作コマンドが規定される。そして、このような中位動作コマンドによる動作命令文が実行順に配列される（なお、各文には行番号を付与していないが、行番号を付与して実行順を指定してもよい）。なお、各中位動作コマンド内の定義名が、どのような基本動作の定義名であるかについて、各文の末尾に括弧書きにて示している。
【００５３】
ここで、中位動作ルーチンのうち、組合わせ型中位動作ルーチンあるいは標準変更型中位動作ルーチンについては対応する形式の定義名を採用することにより、本実施例においては、定義名の先頭に特定の文字情報、例えば「＠」を付与することにより、他の形式の中位動作ルーチンと区別するようにしている。そして、このような定義名の中位動作ルーチンについては、その中位動作ルーチンの内容を規定するための定義ルーチンがプログラム中に書き込まれる（書き込まれていなければエラーと判断するようにしておく）。なお、基本動作の定義名は、所定の表示形式（本実施例では、コーテーション（””）で定義名を囲む形式）にて、それが基本動作の定義名であることを識別するようにしている。
【００５４】
本実施例では、「右脚部を半歩前に出しながら空手チョップする」という基本動作（定義名”＠ＫＡＲＡＴＥ”）が、「右脚部半歩前」という単純歩行の基本動作（定義名”ＷＡＬＫ２”）を標準動作とする標準変更型中位動作ルーチンとして組まれている。図１９は、その定義ルーチンの一例を示している。まず、定義ルーチンの先頭にある
「ｊｏｉｎｔ  ｍｏｔｉｏｎ  ｔｏ  ＠ＫＡＲＡＴＥ」
は、中位動作ルーチンの種別と定義名を規定するための文であり、「ｊｏｉｎｔｍｏｔｉｏｎ  ｔｏ」は標準変更型中位動作ルーチン（組合わせ型中位動作ルーチンの場合も同じ）であることを示している。次いで、２行目の
「ｂａｓｅ  ＜ｄｏ：＝”ＷＡＬＫ２”＞」
は、”ＷＡＬＫ２”の定義名を有する中位動作ルーチンを標準動作ルーチンとして選択することを命令する文である。
【００５５】
次いで、３行目の
ｉｔｅｍ  ＲＩＧＨＴＡＲＭ  ＜ｄｏ：＝ＣＨＯＰ＞
は、ロボットの右腕部に空手チョップを行わせる部位動作を指示するための動作命令文である。「ｉｔｅｍ  ○○○」は部位特定情報であり、「部位として○○○を指定せよ」との意味をもつ。そして、「ｉｔｅｍ  ＲＩＧＨＴＡＲＭ」により、空手チョップを行う右腕部が動作部位として指定される。また、「＜ｄｏ：＝ＣＨＯＰ＞」は動作特定情報であり、「モジュール名「ＣＨＯＰ」で指定される部位動作を行え」との意味である。なお、部位動作のモジュール名は、本実施例では、コーテーションを付与しないことで、中位動作ルーチンの定義名と区別できるようにしている。なお、最終行の「ＥＮＤ」は、定義ルーチンの終了を示す。
【００５６】
さて、このような定義ルーチンを含んだ上位動作プログラムを実行するときのシステムプログラムの処理の流れは、以下の通りとなる。まず、図１８のプログラムを図５の記憶装置２０７の記憶部３００から読み出して、図７のＲＡＭ２０５の格納部２０５ａにロードする。プログラムは、行（すなわち中位動作コマンド）の単位で読み出され、これが通常の中位動作コマンド（定義名の先頭に「＠」が付与されていないもの）である場合には、対応する中位動作ルーチンを図５の中位動作ルーチン記憶部３０２から読み出す。そして、これに含まれるモジュール名を参照して、対応する部位動作モジュールを図６の部位動作モジュール記憶部３０４から読み出し、ＲＡＭ２０５の中位動作ルーチン格納部（Ｉ）２０５ｃにロードする。ロードされた中位動作ルーチンは、これに含まれる各部位動作モジュールのアクチュエータの駆動データが、対応する部位の算出・駆動制御部２１２（図１）へ送信され、各部位のアクチュエータを駆動させて基本動作が実行される。なお、この実行処理間に、同様の処理が次のプログラム行について実行され、その中位動作ルーチンが中位動作ルーチン格納部（ＩＩ）２０５ｄ（図７）にロードされる。
【００５７】
ここで、中位動作コマンドが、標準変更型中位動作ルーチンを指定するもの（すなわち、定義名の先頭に「＠」が付与されているもの）であった場合には、対応する定義ルーチンを読み込み、以下の展開処理に移る。まず、「ｂａｓｅ  ＜ｄｏ：＝”ＷＡＬＫ２”＞」では、「ｂａｓｅ」コマンドの認識により、これに続く定義名（この場合”ＷＡＬＫ２”）に対応する中位動作ルーチンを標準動作ルーチンとして読み出し、これを図７の中位動作ルーチン展開メモリ領域２０５ｇに格納する。次いで、ｉｔｅｍ  ＲＩＧＨＴＡＲＭ  ＜ｄｏ：＝ＣＨＯＰ＞では、その部位特定情報（ｉｔｅｍ  ＲＩＧＨＴＡＲＭ）を認識することにより、標準動作ルーチン中にこれと同じ部位の動作が存在するかどうか確認する。もし存在していれば、動作特定情報（＜ｄｏ：＝ＣＨＯＰ＞）により特定される部位動作モジュールを、展開メモリ領域２０５ｇ内に格納されている標準動作ルーチン中の対応する部位のモジュールと置き換える。この場合、”ＷＡＬＫ２”は、「右脚部半歩」の歩行動作であり、右腕の振りの動作が部位動作として含まれているから、これが空手チョップの右腕動作と置き換えられるわけである。
【００５８】
なお、上記定義ルーチンの例には現われていないが、図２０に示す動作命令文を用いいることにより、次のような処理が行われるようになっている。まず、特定の定義名として「ＦＡＵＬＴ」（すなわち、＜ｄｏ：＝ＦＡＵＬＴ＞）を記述しておくと、展開メモリ領域２０５ｇ内の標準動作ルーチンからは、対応する部位のモジュールが削除される処理がなされる（すなわち、その部位の動作が禁止される）。また、標準動作ルーチン内に存在しない部位の動作を指定した場合は、対応する部位動作モジュールが標準動作ルーチンに追加される。図に示した動作命令文では、
ｉｔｅｍ  ＲＩＧＨＴＷＲＩＳＴ  ＜ｄｏ：＝ｔｕｒｎ＞
となっているが、これは右手首部（ＲＩＧＨＴＷＲＩＳＴ）をねじる（ｔｕｒｎ）部位動作を示すものである。
【００５９】
また、部位動作の置換えないし追加を指定する動作命令文では、部位動作モジュールのモジュール名による動作指定の他、中位動作ルーチンを援用した動作指定も可能となっている。この場合、定義名により中位動作ルーチンを指定し、部位名により部位を指定する。これにより、その中位動作ルーチンの、指定された部位のモジュールが、展開メモリ領域２０５ｇ内の標準動作ルーチンに対し置き換えないし追加されることとなる。図に示した動作命令文では、
ｉｔｅｍ  ＲＩＧＨＴＡＲＭ  ＜ｄｏ：＝”ＷＡＬＫ３”＞
となっているが、これは「左脚部一歩前」という基本動作の、右腕の振り動作のみを組み込むことを示すものである。
【００６０】
このようにして、定義ルーチン内の動作命令文の実行が全て終了すると、展開メモリ領域２０５ｇ内には、モジュールの入替え、追加及び削除処理が終了した状態の標準動作ルーチン、すなわち展開済の標準変更型中位動作ルーチンが格納された形となっている。なお、モジュールの入替え等の展開処理は、モジュール名のみを用いて行えば、図６の記憶部３０４からその都度モジュールを読み出す必要がなくなるので高速処理が可能となる。この場合は、展開処理が終了後に、展開メモリ領域２０５ｇ内のモジュール名を参照して、対応するモジュールを記憶部３０４から読み出し、これを中位動作ルーチン格納部２０５ｃあるいは２０５ｄに格納するようにする。
【００６１】
ところで、図１８のプログラムが示す上位動作では、右を向いた後、４歩歩く形となっているが、この４歩歩くルーチン部分を、以下に説明する重ね合わせ型中位動作ルーチンとして統合することも可能である。その例を図２１に示している。このプログラムと図１８のプログラムとの違いは、図１８の「４歩歩く」動作を記述する部分に相当する２〜５行の動作命令文群が、１つの命令文
ｍｏｔｉｏｎ  ＜ｄｏ：＝”＠＠××××１”＞
で置き換えられており、さらにその定義名”＠＠××××１”に対応する定義ルーチンが追加されている点にある。すなわち、「４歩歩く」という動作を、時系列的に重なりを生じない４つの歩行動作を重ね合わせた重ね合わせ型中位動作ルーチン（定義名”＠＠××××１”）として組まれている。なお、本実施例では、定義名の先頭に特定の文字情報、例えば「＠＠」を付与することにより、重ね合わせ型のルーチンを他の形式の中位動作ルーチンと区別するようにしている。
【００６２】
図２２は、その定義ルーチンの一例を示している。まず、定義ルーチンの先頭にある
「ｐｉｌｅｕｐ  ｍｏｔｉｏｎ  ｔｏ  ＠＠××××１」
は、中位動作ルーチンの種別と定義名を規定するための文であり、「ｐｉｌｅｕｐ  ｍｏｔｉｏｎ  ｔｏ」は重ね合わせ型中位動作ルーチンであることを示している。以降は、重ね合わせを行いたい基本動作の命令文を実行順に配列し、最終行に「ｅｎｄ」を付与することにより、定義ルーチンを閉じる。なお、本実施例では、特定の基本動作列を繰返し実行させるためのコマンドが用意されている。本実施例では、「ｒｅｐｅａｔ  ｗｈｉｌｅ  ○」‥‥「ｅｎｄ」がこれに相当し、これらの間に挟まれた動作列を「○」回繰り返すことを意味する。図２２では、「左脚部１歩」と「右脚部１歩」とを交互に行う動作を２回繰り返すことにより、都合４歩連続歩行する内容を記述するプログラムとなっている。
【００６３】
次に、組合わせ型中位動作ルーチンのプログラム例と、その処理の流れについて説明する。組合わせ型中位動作ルーチンは、組み合わされるべき中位動作ルーチン及び／又は部位動作モジュールに係る基本動作及び／又は部位動作が、時系列的に少なくとも部分的な重なりを生じた状態で実行される上位の中位動作をいう。一例を図２３を用いて説明する。ここでは、ロボットのジャンケン動作を例にとる。
【００６４】
例えば、「ジャンケンポン」と発声しながら、パーを出すという動作を考えてみる。これは次のような部位動作に分解して考えることができる。まず、（１）のように、右手を「グー」の状態にして右腕を振り上げ、その振上げの途中で「ジャン」と発音する。なお、発音に合わせて口を短時間開いて閉じる動作（以下、口パクパク動作という）を１回行う。次いで、（２）では、振り上げた右腕を静止させて「ケン」と発音する。（３）では、その右腕を振り下ろしながら、右手は途中まで「グー」の状態を維持し、さらに（４）で、右手を「パー」状態としながら「ポン」と発音しつつ、右腕の振下ろしを完了させる。なお、この例では（５）で、腕の振下ろし完了後に、ロボットが口を開いて舌をペロリと出す動作が付け加えてある。
【００６５】
上記動作においては、右腕、右手、口、舌及び音声の５つの部位が、しかるべきタイミングで連係動作を行う形となっている。その動作タイミングの例が図２４である。図中の矢印は動作継続期間を表す。この例では、右腕の振上げ、静止、振下ろしをそれぞれ１秒で実行するようになっており、デフォルトで口は閉、右手はグーとなっている。また、右腕の振上げ動作は、大げさなロボットの身振りを示すために、腰の前後移動や肩の上下動あるいは頭の動き等の部位動作を伴う基本動作に組み込まれており、後述する駆動データ作成装置によりデータ作成された例えば１０コマ（コマ送り速度：０．１秒／コマ）の教示動作である。なお、その中位動作ルーチンの定義名は”ＲＬＩＦＴＵＰ”である。他方、右腕の振下ろしも同様に基本動作に組み込まれており、その中位動作ルーチンの定義名は”ＲＳＨＡＫＥＤＮ”である。そして、右腕振上げサイクルの中間にて「ジャン」の発声を、右腕静止サイクルの中間にて「ケン」の発声をそれぞれ行い、右腕振下ろし時には、その７コマ目から右手を「パー」に移行させ、同時に「ポン」の発声を行う。そして、右腕の振下ろしが完了すると同時に舌をペロリと出す。
【００６６】
図２５は、上記のような動作を規定する組合わせ型中位動作ルーチンの定義ルーチンの一例である。まず、定義ルーチンの先頭にあるのは、標準変更型中位動作ルーチンと同様の「ｊｏｉｎｔ  ｍｏｔｉｏｎ  ｔｏ  ＠ＪＡＮＫＥＮ」である。以降の（ａ）〜（ｌ）は、組み合せるべき部位動作あるいは基本動作を指定する動作命令文群であり、それぞれ、図２４のタイミングチャートの（ａ）〜（ｌ）の各動作を命令するものである。このうち（ａ）〜（ｅ）は、図２３の（１）の動作過程に、（ｆ）、（ｇ）は（２）の動作過程に、（ｈ）は（３）の動作過程に、（ｉ）〜（ｋ）は４の動作過程に、（ｌ）は（５）の動作過程にそれぞれ対応している。
【００６７】
組合わせ型中位動作ルーチンにおいては、例えばその中位動作ルーチンの実行開始時刻が時刻原点として設定され、後述のコマンドにより特に実行開始タイミング指定がなされない限り、その時刻原点をデフォルト開始時刻として、各部位動作あるいは組み込まれた基本動作が一斉同時にスタートする（なお、時刻計測は、図１のタイマー１９０が行う）。すなわち、（ａ）〜（ｃ）は、開始タイミングの指定がないので、ルーチンの実行開始とともに、右腕の振上げ動作（（ａ））、右手の「グー」動作（（ｂ））、及び口の閉動作が同時に実行スタートとなる。なお、「ＲＩＧＨＴＦＩＮＧＥＲ」は右手（の指）、「ＭＯＵＴＨ」は口の各部位を表す部位指定情報であり、＜ｄｏ：＝３１＞は「グー」を作るための指曲げを、＜ｄｏ：＝ｃｌｏｓｅ＞は口閉じをそれぞれ指定する動作指定情報である。
【００６８】
次の（ｄ）は、「ジャン」の発声を指示する動作命令文である。本実施例では、声に対応する部位名すなわち「ＶＯＩＣＥ」を指定し、それに続く＜ｄｏ：＝”◇◇◇◇”＞の◇◇◇◇に、発声内容を直接文字（あるいは文字コード）にて書き込むことにより発声内容が指定される。そして、それに続く＜ｆｒｏｍ：＝○○○＞は、動作条件規定コマンドの一つであり、動作の開始タイミングを指定する動作開始タイミング規定コマンドである。＜ｆｒｏｍ：＝ｔｉｍｅｒ  △△＞は、「時刻原点からタイマーの計測単位（本実施例では０．１秒）の△△倍だけ経過した後に動作を開始せよ」との意味である。すなわち、（ｄ）全体の意味は、「時刻原点から（すなわち、右腕の振上げ開始から）０．５秒経過後に、「ジャン」と発声せよ」となる。
【００６９】
また、（ｅ）では、部位として口が選択され、＜ｄｏ：＝ｐａｒｒｏｔ＞  により口パクパクの動作が指定される。その動作開始タイミングは、＜ｆｒｏｍ：＝ｔｉｍｅｒ  ５＞となっているから、上記「ジャン」の発声タイミングと同じである。さらに、＜ｔｉｌｌ：（条件名）＞は、動作の終了条件を規定するコマンドであり、例えば  ＜ｔｉｌｌ：＝ｒｅｐｅａｔ  △＞  は、その部位動作が△回繰り返されれば動作終了させることを意味する。例えば、＜ｔｉｌｌ：＝ｒｅｐｅａｔ  １＞  により、口パクパクが１回のみ行われることになる。なお、＜ｔｉｌｌ：＝ｒｅｐｅａｔ  △＞が省略された場合には、自動的にデフォルト繰返し回数（例えば１回）が指定されるようにしてもよい。こうして、上記（ａ）〜（ｅ）の動作命令文により、図２４のタイミングチャートの（ａ）〜（ｅ）の動作が組合せて実行され、図２３の（１）の動作が実現されることがわかる。
【００７０】
次に、腕の振下ろし時の動作について説明する。まず、右腕の振下ろしが開始されるのは時刻原点から２秒経過後であり、対応する（ｈ）の動作命令文において、＜ｆｒｏｍ：＝ｔｉｍｅｒ  ２０＞によりその開始タイミングが与えられる。図２４に示す通り、腕の振下ろし開始から終了までは時間で表せば１秒であり、コマ送り数で表せば１０コマである。そして、その７コマ目（時刻原点からの時間でいえば２．７秒目）において、右手の「グー」動作、「グー」の発声動作、及び口パクパク動作が一斉に開始する。
【００７１】
これに対応するのは、図２５の（ｉ）〜（ｋ）の３つの動作命令文である。ここでは、動作開始タイミングを右腕の動作のコマ送り数にて規定している。各動作命令文に書き込まれている動作開始タイミング規定コマンドの、＜ｆｒｏｍ：＝ｉｔｅｍ（部位名）［△］＞の形式は、「ｉｔｅｍ（部位名）にて指定された部位動作の△コマ目に動作を開始せよ」という内容を指示するものである。従って、＜ｆｒｏｍ：＝ｉｔｅｍ  ＲＩＧＨＴＡＲＭ［７］＞により、右腕の振下ろし開始から７コマ目に各動作の開始時刻が設定される。
【００７２】
最後は舌を出す動作であるが、図２５にて対応する動作命令文は（ｌ）である。
上述のような駆動データは駆動データ作成装置１により作成することができる。ｉｔｅｍ  ＴＯＮＧＵＳは舌を部位名として指定するものであり、＜ｄｏ：＝ｏｕｔ＞は「出す」動作を指定するものである。そして、その動作開始タイミング規定コマンド＜ｆｒｏｍ：＝ｉｔｅｍ  ＲＩＧＨＴＡＲＭ［ｂａｃｋ］＞は、前記した＜ｆｒｏｍ：＝ｉｔｅｍ  ＲＩＧＨＴＡＲＭ［７］＞と同様に、右腕の部位動作をタイミング設定の基準部位として指定しているが、［ｂａｃｋ］は、「その部位（右腕）の動作が完了するとともに動作開始せよ」を意味している。従って、右腕の振下ろしが完了するとともに、ロボットは舌を出す動作を行うこととなる。
【００７３】
上記のようなロボットの駆動データは、主要部分が図９の駆動データ作成装置１により教示作成され、各部位動作モジュールもそれに基づく教示動作ルーチン部分として作成される。以下、駆動データ作成装置１の作動の流れをフローチャートを用いて説明する。図２６は処理全体の大まかな流れを示すものであって、まずＳ１１００の入力処理では、モデル画像に対する骨格画像の重ね合わせ処理を行い、駆動データを作成（換言すれば、ロボット２０１への動作の教示）する。この処理は、基本動作の単位で行われる。ここで、入力に先立ってその基本動作を人間のモデルに行わせ、そのモデル画像３８（図１６、図１７）を所定のコマ時間間隔でビデオカメラにより動画撮影しておく。そして、図９のＶＴＲ１５により再生されたその動画が、画像取込制御部６を介して動画データとして取り込まれ、動画データ記憶装置１１に記憶されている。ここで、動画データ記憶装置１１に記憶されている動画データは、図３５に示すように、モデルが比較的複雑な動きを行っている場合には、そのコマ８０の間隔が密になるように、逆に動きが比較的単調な場合にはコマ８０の間隔が粗となるように、その動画のコマが、動画データ取り込み時あるいは取り込み後のデータ編集時に適宜間引かれる。
【００７４】
図２７は、Ｓ１１００の入力処理の詳細を示すフローチャートであって、まず駆動データの演算が不要な部位の設定を行なった後（Ｓ１１０１）、図１３に示すようなウィンドウＷ１及びＷ２をそれぞれ表示する（Ｓ１１０２、Ｓ１１０３）。このうち、一方のウィンドウＷ１にはモデル画像３８が表示され、他方のウィンドウＷ２には骨格画像３９が表示される。なお、骨格画像３９は、図２に示すロボット骨格１９を簡略化した線図として表示される。
【００７５】
図２７に戻って、Ｓ１１０４において、ビデオカメラにモデルを正対させて撮影したモデル画像３８（図１３）に、骨格画像３９の寸法を合わせ込む処理を行う。その処理の詳細を図２８及び図２９に示す。すなわち、図１３において、正対ポーズのモデル画像３８をウィンドウＷ１に、骨格画像３９をウィンドウＷ２に表示し（Ｃ１０１〜１０３）、各骨格単位の長さをモデル画像の対応部位に合わせ込む（Ｃ１０４）。ここで骨格画像３９の各骨格単位に対しては、予め標準寸法が設定されている。その合わせ込みの処理であるが、図２９に示すように、まず基準点Ｇの位置を合わせ込み（Ｃ２０１）、続いてその基準点Ｇから次第に遠ざかるように、各骨格単位の端点を順次合わせ込んでゆく。
【００７６】
ここで、モデル画像３８に対し、骨格画像３９の端点を合わせ込むための入力方法であるが、図１３に示すように、ウィンドウＷ２上には各端点が目印点として表示され、また、ウィンドウＷ１上にはマウス１２（図９）の移動に伴い画面上を移動するポインタ４０が表示される。目印点の合わせ込みは、Ｇ点から始まって次第に骨格の末端へ向かう方向に、予め設定された順序で行われるようになっており、ウィンドウＷ２に表示された骨格画像３９上において、次に合わせ込みを行うべき端点が点滅してこれを知らせるようになっている。そして、ウィンドウＷ１上のモデル画像３８上の指定するべき位置にポインタ４０を合わせ、マウス１２のクリックボタンを操作することにより、ウィンドウＷ２上で点滅表示された端点の、モデル画像３８上での重ね位置が確定され、それとすでに確定されている端点の位置に基づいて、各骨格単位の長さが順次計算されてゆく（Ｃ２０２〜Ｃ２０９）。また、長さが定められた骨格単位は、ウィンドウＷ１のモデル画像３８に対し順次重ね描画されてゆく。
【００７７】
ここで、正対ポーズにおけるモデル画像３８はほぼ左右対称であることから、上腕骨２４と下腕骨２５、ならびに上肢骨２６と下肢骨２７（図２）の各端点は、左右いずれか一方のものが位置決めされれば、他方のものも自動的に位置決めされるように処理が行われる。また、頭部２０の寸法（Ｈ及びｆ１間の距離、図１３）は、頭部２０以外の骨格単位の標準寸法と算出された寸法とを比較し、その寸法比率と頭部２０の標準寸法とに基づいて定められる（Ｃ２１０）。なお、ウィンドウＷ１に予め設定された標準寸法の骨格画像を、モデル画像３８とともに表示し、そのウィンドウＷ１上で骨格画像の各骨格単位の端点をモデル画像３８に合わせ込む処理を行ってもよい。この場合、ウィンドウＷ２は省略することも可能である。次に、図２８に戻り、算出された骨格単位の寸法に合わせて、正対ポーズの骨格画像３９をウィンドウＷ１に再描画した後（Ｃ１０５）、図２７のＳ１１０５に進む。ここで、正対ポーズに対応する骨格画像３９に対しては、各アクチュエータの駆動位置が基準データとして予め設定されており、その設定内容がプログラム記憶装置９内に作成された基準データ記憶部に格納されている。
【００７８】
続いて、Ｓ１１０５〜Ｓ１１０９において、骨格画像３９の位置合わせを行う動画のコマ番号を指定することにより、そのコマのモデル画像のデータが取り込まれ、骨格画像の位置合わせ処理（骨格画像入力）に移る。図３０及び図３１は、その位置合わせ処理（Ｓ１１０９）の内容の詳細を示すフローチャートである。すなわち、図３０のＣ３０１〜Ｃ３０５に示すように、取り込んだコマのモデル画像３８に対し、Ｇ点から始めて次第に遠ざかる方向に、骨格画像３９の各端点の位置をモデル画像３８に対し合わせ込んでゆく。その入力例を図３６に示しているが、手順は前述の寸法合わせ処理の場合とほぼ同様であり、ウィンドウＷ２上で点滅表示される端点のウィンドウＷ１での合わせ位置をマウス１２で指定しながら、モデル画像３８に対する位置合わせ入力を行ってゆく。この場合も、ウィンドウＷ１上のモデル画像３８に対し、位置合わせの終わった部分から順に骨格画像３９が重ね描画されてゆく。ここで、左右の脚部及び腕部については、前述の寸法合わせ処理とは異なり、個々に入力処理が行われることとなる。なお、Ｓ１１０１（図２７）において設定された教示不要部位については、位置合わせ入力がスキップされる。
【００７９】
図３１は、両脚部に相当する部位の位置合わせ処理の流れを一例として示しており、右脚部及び左脚部のそれぞれについて、上肢骨２６の上端点Ｌ１（Ｌ２）の位置合わせを行った後、下肢骨２７の下端点Ｌｆ１（Ｌｆ２）の位置合わせが行われるようになっている（Ｃ４０１〜Ｃ４０３）。ここで、図１０に示す拘束条件により、Ｌ１（Ｌ２）及びＬｆ１（Ｌｆ２）が指定されれば、膝に相当するＬｋ１（Ｌｋ２）の位置は自動的に定まるので入力は行われない。このようにして、各端点の画面上の座標が算出され、その画面座標と、予め記憶されている各骨格単位の標準体寸法データに基づいて実際の空間における端点の３次元座標が算出される。
【００８０】
次に、図２７に戻ってＳ１１１０に進み、上記位置合わせ処理では駆動データの生成が困難ないし不可能な骨格単位ないし部位に対し、それらの空間位置の補助入力処理を、マウス１２ないしキーボード１３を使用することにより行う。この入力処理は、上記位置合わせ処理とは別のウィンドウを開き、そのウィンドウ上に該当する骨格単位ないし部位の画像を表示して、位置設定のために予め用意された各種処理コマンド（例えば骨格単位の平行移動、あるいは回転など）を、マウス１２あるいはキーボード１３からの入力により選択・実行しながら、骨格単位や部位毎に個別に入力を行ってゆく。
【００８１】
以上で、１つのコマに対する入力処理が終了するが、次のコマの処理に移る場合はコマ番号を更新し、直前のコマの骨格画像３９及びモデル画像３８を描画しなおすとともに（Ｓ１１１１〜Ｓ１１１３）、Ｓ１１０７に返って処理を繰り返す。一方、コマへの入力作業を終了する場合は（Ｓ１１１４〜Ｓ１１１６）、ウィンドウＷ１とＷ２を閉じて図２６のＳ１２００に進む。
【００８２】
ここで、上述のようにして得られた各端点の変位データが、そのまま駆動データとして使用される場合にはＳ１３００に進むが、その変位データから各アクチュエータの駆動量の算出まで行う場合には、Ｓ１２００の処理、すなわち上記入力により得られた、各コマ毎の骨格単位の端点の空間位置座標に基づいて、骨格単位を駆動するアクチュエータの駆動量を算出する処理が挿入される。すなわち、図３２に示すように、隣り合う２枚のコマの番号を指定して、その各骨格単位の端点の空間位置座標を読み込み、その空間位置座標に基づいて各骨格単位間に設けられたアクチュエータの駆動量が算出される（Ｃ５０１〜Ｃ５０３）。その算出処理の内容は、前述の駆動量算出プログラム２１６ａにより各アクチュエータの駆動量を算出する処理とほぼ同様であるので詳しい説明は省略する。なお、最初のコマの骨格画像が正対ポーズのものでない場合は、予め記憶されているアクチュエータの基準位置をもとに、その最初のコマに対する各アクチュエータの駆動位置を算出しておけばよい。
【００８３】
次に、図２６のＳ１３００に進み、入力が終わった各コマに対しロボット動作の実時間軸上の時間を設定する。その処理の詳細を図３３のフローチャートに示す。すなわち、時間設定用のウィンドウを開いて骨格画像データをコマ番号順に読み出し、ウィンドウ内に骨格画像を順次表示しながら時間入力を行ってゆく（Ｃ６０１〜Ｃ６０５）。そして、Ｃ６０５１において、直前のコマとの時間間隔から各アクチュエータの駆動速度を算出し、Ｃ６０６において、その時間間隔で全てのアクチュエータが駆動完了できるかどうかを判定する。完了できるようであれば、Ｃ６０７でその入力された時間及びアクチュエータ駆動速度を格納し、Ｃ６０８でコマ番号をインクリメントしてＣ６０３に戻り、処理を繰り返す。また、駆動完了できないようであればＣ６０５に戻って時間入力をやり直す。そして、時間の入力処理が終わるとＣ６１２でウィンドウを閉じて図２６のＳ１４００に進む。
【００８４】
Ｓ１４００では、最終的に得られた駆動データを駆動データ記憶装置１０に記憶・保存する。その処理の流れは図３４に示す通りであって、まず、Ｃ７０１で中位動作コマンド名を入力する。そして、駆動データはその部位別に分割され（Ｃ７０２）、下位動作データのサブファイル、すなわち部位動作モジュールが形成される（Ｃ７０２）。そして、それら部位動作モジュールが、入力された中位動作コマンド名で統合されて、中位動作ルーチンとして記憶装置１０に保存される（Ｃ７０３）。なお、各部位動作モジュールは、互いに異なる中位動作ルーチン間での交換や差替えが可能とされている。
【００８５】
以上のようにして各部位の部位動作モジュールは、駆動データ作成装置１により教示作成されるが、モデル画像に位置合わせされた骨格画像からは駆動データの演算が困難あるいは不可能なロボット部位、すなわち非教示部位が存在する。一例としては、手首、指、眼、口、舌等である。この場合は、上記動作プログラムにおいて、そのような非教示部位の位置決め命令ルーチン部分を、例えば定義ルーチンの一角をなすものとして組み込むことができる。本実施例では、
ｓｅｔ  （部位名）  ＜設定因子：＝設定条件値＞
という形式にて位置決め命令ルーチン部分を記述するようになっている。
【００８６】
具体的には、対応する非教示部位の移動開始位置、移動終了位置及び移動速度を設定因子として選び、数値入力するかあるいは予め用意された候補値から選択する等により、所期の設定条件値を設定する。これを受けて図５の記憶部３０８に記憶されている非教示部位駆動データ生成プログラムに基づき、図１のＣＰＵ２０４は、対応する部位のアクチュエータの駆動データを算出する。例えば、アクチュエータがサーボモータやステッピングモータである場合には、移動開始位置及び移動終了位置の値を受けてモータの回転開始位置と回転終了位置を算出し、移動速度の値を受けてモータの回転数を算出する。以下、本実施例のロボットにて使用れる非教示部位とその動作種別、及び位置決め命令ルーチン部分の形式等について、いくつかの例を示す。
【００８７】
部位名：右眼（左眼）（部位指定情報：ＲＩＧＨＴＥＹＥ（ＬＥＦＴＥＹＥ））。アクチュエータ：モータにより左右に回転駆動される。
書式：ＲＩＧＨＴＥＹＥ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
ＬＥＦＴＥＹＥ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
0003995348.tif 000002
動作終了条件句：実行コマンドがｇｏｇｇｌｅの時、眼の往復回数指示が可能。
（例：ＲＩＧＨＴＥＹＥ＜ｄｏ：＝ｇｏｇｇｌｅ＞＜ｔｉｌｌ：＝ｒｅｐｅａｔ△＞）
位置決め命令：ｓｅｔ  ＥＹＥ＜ｓｐｅｅｄ：＝（速度指定情報）＞＜ｒｉｇｈｔ：＝（右眼差し位置座標）＞＜ｌｅｆｔ：＝（左眼差し位置座標）＞（部位名は、例えば左右眼共通であるが、左右別々に設定するようにしてもよい）
0003995348.tif 000003
・「右眼差し」は位置決め命令のｒｉｇｈｔで設定される位置まで移動
・「左眼差し」は位置決め命令ｌｅｆｔで設定される位置まで移動
・「キョロキョロ」は位置決め命令のｒｉｇｈｔとｌｅｆｔで設定される座標間を、往復回数指定（＜ｔｉｌｌ：＝ｒｅｐｅａｔ  ｎ＞）。往復回数が指定されていない時は一往復のみとなる。そして最終の眼の位置は左設定位置で停止する。
なお眼は最初右側へ動かす。
【００８８】
部位名：右瞼（左瞼）（部位指定情報：ＲＩＧＨＴＥＹＥＬＩＤ（ＬＥＦＴＥＹＥＬＩＤ）
アクチュエータ：モータにより上下に駆動される。
書式：ＲＩＧＨＴＥＹＥＬＩＤ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
ＬＥＦＴＥＹＥＬＩＤ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
0003995348.tif 000004
動作終了条件句  実行コマンドがｂｌｉｎｋの時、瞬き回数指示が可能。（例：ＲＩＧＨＴＥＹＥＬＩＤ＜ｄｏ：＝ｂｌｉｎｋ＞＜ｔｉｌｌ：＝ｒｅｐｅａｔ  ｎ＞）
位置決め命令    ｓｅｔ  ＥＹＥＬＩＤ＜ｏｐｅｎ：＝（時間設定情報）＞
（左右瞼共通）
0003995348.tif 000005
【００８９】
部位名：口（部位指定情報：ＭＯＵＴＨ）
アクチュエータ：モータにより開閉駆動される。
書式：ＭＯＵＴＨ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
0003995348.tif 000006
動作終了条件句  実行コマンドがｐａｒｒｏｔの時、回数指示が可能。（例：ＭＯＵＴＨ＜ｄｏ：＝ｐａｒｒｏｔ＞＜ｔｉｌｌ：＝ｒｅｐｅａｔ  ｎ＞）
位置決め命令    ｓｅｔ  ＭＯＵＴＨ＜ｏｐｅｎ：＝（時間設定情報）＞＜ｃｌｏｓｅ：＝（時間設定情報）＞
0003995348.tif 000007
【００９０】
部位名：舌（部位指定情報：ＴＯＮＧＵＳ）
アクチュエータ：モータにより出入れ駆動される。
書式：ＴＯＮＧＵＳ＜ｄｏ：＝実行コマンド＞＜ｔｉｌｌ：＝条件式＞
0003995348.tif 000008
動作終了条件句  実行コマンドがｌｉｃｋの時、回数指示が可能。（例：ＴＯＮＧＵＳ＜ｄｏ：＝ｌｉｃｋ＞＜ｔｉｌｌ：＝ｒｅｐｅａｔ  ｎ＞）
位置決め命令    ｓｅｔ  ＴＯＮＧＵＳ＜ｏｕｔ：＝（時間設定情報）＞＜ｉｎ：＝（時間設定情報）＞
0003995348.tif 000009
【００９１】
部位名：手（部位指定情報：ＲＩＧＨＴＦＩＮＧＥＲ（ＬＥＦＴＦＩＮＧＥＲ））
アクチュエータ：シリンダにより、各指が独立に曲げ伸ばし駆動される。
0003995348.tif 000010
実行コマンド    指パターン指示（０〜３２のいずれかを選択することにより、各種指曲げ状態を設定する。例えば、０：パー／１：親指曲／２：人差指曲／４：中指曲／８：薬指曲／１６：小指曲／３１：グー）
位置決め命令    なし
【図面の簡単な説明】
【図１】本発明のロボットシステムの全体構成を示すブロック図。
【図２】ロボット骨格の模式図。
【図３】ロボット頭部に設けられた口及び舌の動作説明図。
【図４】同じく眼及び瞼の動作説明図。
【図５】ロボット制御部の記憶装置の内容を示す説明図。
【図６】その部位動作モジュール記憶部の内容を示す説明図。
【図７】ロボット制御部のＲＡＭの内容を示す説明図。
【図８】算出・駆動制御部の構成を示すブロック図。
【図９】駆動データ作成装置の一構成例を示すブロック図。
【図１０】  脚部骨格に対する拘束条件の説明図。
【図１１】上位動作プログラムによる処理の流れを示すフローチャート。
【図１２】中位動作ルーチンの処理の流れを示すフローチャート。
【図１３】正対モデルに対する骨格画像の寸法合わせ処理の説明図。
【図１４】アクチュエータの駆動量を算出する方法の説明図。
【図１５】ロボットの動作の流れをプログラム階層と対応付けて説明する図。
【図１６】歩行に関する基本動作の例を示す説明図。
【図１７】図１６に続く説明図。
【図１８】上位動作プログラムの記述例を示す説明図。
【図１９】その標準変更型中位動作ルーチンの定義ルーチンの一例を示す説明図。
【図２０】部位動作モジュールの削除、追加を行う場合の動作命令文の記述例を示す説明図。
【図２１】重ね合わせ型中位動作ルーチンを用いた上位動作プログラムの記述例を示す説明図。
【図２２】その重ね合わせ型中位動作ルーチンの定義ルーチンの記述例を示す説明図。
【図２３】組合わせ型中位動作ルーチンの適用に好適なロボット動作例を示す説明図。
【図２４】図２３の動作のタイミングチャートの一例を示す図。
【図２５】それに使用する組合わせ型中位動作ルーチンの定義ルーチンの記述例を示す説明図。
【図２６】駆動データ作成装置の全体の処理の流れを示すフローチャート。
【図２７】その入力処理のフローチャート。
【図２８】その入力処理において、骨格単位長さを定める処理の流れを示すフローチャート。
【図２９】各骨格単位の長さをモデル画像の対応部位に合わせ込む処理の流れを示すフローチャート。
【図３０】同じく、各骨格単位の端点の位置合わせ処理の流れを示すフローチャート。
【図３１】同じく、骨格の端点の座標を算出する処理の流れを示すフローチャート。
【図３２】同じく、駆動データ算出の流れを示すフローチャート。
【図３３】同じく、時間入力処理の流れを示すフローチャート。
【図３４】同じく、駆動データ保存処理の流れを示すフローチャート。
【図３５】コマの時間軸上における配列の一例を示す模式図。
【図３６】骨格画像のモデル画像に対する位置合わせ処理の説明図
【符号の説明】
１  駆動データ作成装置
５  装置制御部（駆動データ演算手段）
２００  ロボットシステム
２０１  ロボット
２０２  ロボット制御部
２０４  ＣＰＵ（プログラム読出手段、プログラム展開手段、非教示部位駆動データ生成手段）
２０５  ＲＡＭ
２０５ａ  上位動作プログラム格納部
２０５ｂ  中位動作コマンド解析プログラム格納部
２０５ｃ  中位動作ルーチン格納部(I)
２０５ｄ  中位動作ルーチン格納部(II)
２０５ｇ  中位動作ルーチン展開メモリ領域
２０７  記憶装置
２１２  算出・駆動制御部
２１３  アクチュエータ
３００  上位動作プログラム記憶部
３０２  中位動作ルーチン記憶部
３０４  部位動作モジュール記憶部
３０６  中位動作コマンド解析プログラム記憶部
【図１】
0003995348.tif 000011
【図２】
0003995348.tif 000012
【図３】
0003995348.tif 000013
【図４】
0003995348.tif 000014
【図５】
0003995348.tif 000015
【図６】
0003995348.tif 000016
【図７】
0003995348.tif 000017
【図８】
0003995348.tif 000018
【図９】
0003995348.tif 000019
【図１０】
0003995348.tif 000020
【図１１】
0003995348.tif 000021
【図１２】
0003995348.tif 000022
【図１３】
0003995348.tif 000023
【図１４】
0003995348.tif 000024
【図１５】
0003995348.tif 000025
【図１６】
0003995348.tif 000026
【図１７】
0003995348.tif 000027
【図１８】
0003995348.tif 000028
【図１９】
0003995348.tif 000029
【図２０】
0003995348.tif 000030
【図２１】
0003995348.tif 000031
【図２２】
0003995348.tif 000032
【図２３】
0003995348.tif 000033
【図２４】
0003995348.tif 000034
【図２５】
0003995348.tif 000035
【図２６】
0003995348.tif 000036
【図２７】
0003995348.tif 000037
【図２８】
0003995348.tif 000038
【図２９】
0003995348.tif 000039
【図３０】
0003995348.tif 000040
【図３１】
0003995348.tif 000041
【図３２】
0003995348.tif 000042
【図３３】
0003995348.tif 000043
【図３４】
0003995348.tif 000044
【図３５】
0003995348.tif 000045
【図３６】
0003995348.tif 000046