説明

動作制御方法、インタラクティブデバイス及びプログラム

【課題】インタラクティブデバイス及びプログラムにおいて、人に違和感を与えないように、動作を切り替えたり動作を再開する。
【解決手段】任意の動作モジュール11−1〜Nが生成した動作シーケンスに所属する複数のコマンドを、複数の駆動部毎に、且つ、複数のコマンドの開始時刻順に受け付ける手順31と、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部33−1〜Nから任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報36及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報32に基づいて取り出したコマンドを実行して該当する駆動部124−1〜Nを制御する手順34をコンピュータに実行させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、モータ等の駆動部の動作を制御する動作制御方法、そのような動作制御方法を用いるインタラクティブデバイス(Interactive Device)、コンピュータにそのような動作制御方法の手順を実行させるプログラム、コンピュータにインタラクティブデバイスの機能を実現させるプログラム、及びコンピュータをインタラクティブデバイスの手段として機能させるプログラムに関する。本発明は、そのようなプログラムを格納したコンピュータ読み取り可能な記憶媒体にも関する。
【背景技術】
【0002】
インタラクティブデバイスの一例であるロボットが人とインタラクションを行い人と共存するためには、多種多様の事象を検知及び認識して動作する必要がある。しかし、多種多様の全ての事象を認識してロボットの動作を決定する単一の動作モジュールを開発することは困難である。このため、複数の動作モジュールを開発し、動作モジュールを切り替えながらロボットを動作させる方法が提案されている(例えば、特許文献1,2)。このような提案方法を採用するロボットアーキテクチャの一例として、タスクの優先度を考慮に入れた並列的な分割処理方式であるサブサンプションアーキテクチャ(Subsumption Architecture)が知られている。
【0003】
各動作モジュールは、センサが検知した情報等に基づいてロボットの動作を決定し、ロボットの各モータに対する制御コマンドを出力する。しかし、異なる動作モジュールから同一モータに矛盾した制御コマンドを出力することがあるため、これらの矛盾する制御コマンドを調停する必要がある。
【0004】
介護ロボットや教育ロボット等の、人とのインタラクションが重要な機能の1つであるコミュニケーションロボットでは、動作は生き物らしさ(即ち、機械的ではない動作)を演出するための仕草や人との触れ合いを表現するために、複数の動作モジュールからの制御コマンドを調停して人から見て自然な動作を表現することが望まれる。しかし、従来は、人から見てロボットが自然に動作を切り替えたり再開、或いは、人に違和感を与えないようにロボットが自然に動作を切り替えたり再開するのに適した制御コマンドの調停方式が存在しなかった。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−187083号公報
【特許文献2】特開2000−153479号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来のインタラクティブデバイスでは、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することは難しいという問題があった。
【0007】
そこで、本発明は、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することを可能とする動作制御方法、インタラクティブデバイス及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一観点によれば、コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順を前記コンピュータに実行させる動作制御方法が提供される。
【0009】
本発明の一観点によれば、複数の駆動部と、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、前記コマンド制御モジュールは、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御するインタラクティブデバイスが提供される。
【0010】
本発明の一観点によれば、コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順を前記コンピュータに実行させるプログラムが提供される。
【発明の効果】
【0011】
開示の動作制御方法、インタラクティブデバイス及びプログラムによれば、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することが可能となる。
【図面の簡単な説明】
【0012】
【図1】ロボットシステムの一例を示すブロック図である。
【図2】方法2における調停を説明するブロック図である。
【図3】本発明の一実施例における調停を説明するブロック図である。
【図4】モータコマンドの情報を説明する図である。
【図5】実施例におけるデータフローを説明する図である。
【図6】実施例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図7】ロボットシステムアーキテクチャの一例を示すブロック図である。
【図8】図7のロボットシステムアーキテクチャにおける調停を説明する図である。
【図9】第1変形例における調停を説明するブロック図である。
【図10】動作調停情報管理部が管理する動作調停情報を示す図である。
【図11】第3変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図12】第4変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図13】第5変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図14】シーケンス情報管理部に停止又は中断の指示があった場合の詳細な処理の一例を説明するフローチャートである。
【図15】ロボットシステムの他の例を示すブロック図である。
【発明を実施するための形態】
【0013】
開示の動作制御方法、インタラクティブデバイス及びプログラムでは、複数の動作モジュールを切り替えながら複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる。任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、複数の駆動部毎に、且つ、複数のコマンドの開始時刻順に受け付け、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から任意の動作モジュールに該当するコマンドキューのコマンドを取り出す。各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する。
【0014】
以下に、開示の動作制御方法、インタラクティブデバイス及びプログラムの各実施例を図面と共に説明する。
【実施例】
【0015】
動作モジュールを切り替えながらロボットを動作させる方法において、各動作モジュールは、センサが検知した情報等に基づいてロボットの動作を決定し、ロボットの各モータに対する制御コマンドを出力する。しかし、異なる動作モジュールから同一モータに矛盾した制御コマンドを出力することがあるため、これらの矛盾する制御コマンドを調停する必要がある。そこで、例えば以下の如き方法1〜3の如き調停方法が考えられる。方法1は、制御コマンドを出力する動作モジュールが唯一となるように動作モジュールを切り替える。方法2は、モータ単位で優先度の高い制御コマンドが発行されれば優先度の低い制御コマンドを破棄して優先度の高い制御コマンドを実行する。方法3は、モータ単位で優先度の高い制御コマンドが発行されれば優先度の低い制御コマンドを保留して優先度の高い制御コマンドを実行し、優先度の高い制御コマンドの実行が終了した後で優先度の低い制御コマンドの実行を再開する。
【0016】
介護ロボットや教育ロボット等の、人とのインタラクションが重要な機能の1つであるコミュニケーションロボットでは、動作は生き物らしさ(即ち、機械的ではない動作)を演出するための仕草や人との触れ合いを表現するために、複数の動作モジュールからの制御コマンドを調停して人から見て自然な動作を表現することが望まれる。
【0017】
本発明者は、人から見て自然な動作を実現するためには、以下のような要件r1〜r5を満たすことが望ましいことを見出した。要件r1は、ロボットが実行する1つの動作シーケンスの中で、各モータの動きが同期しているということである。この要件r1が満たされないと、例えばロボットの両手で何かをする仕草を表す動作シーケンスの動作が左右の手でバラバラに実行されて不自然になる可能性がある。要件r2は、ロボット内の各モータは可能な限り動作し続け、各モータの停止時間を少なくするということである。この要件r2が満たされないと、各モータの停止時間が長いために動作が機械的となり、生き物らしさが表現できない。要件r3は、ロボットが多様な動作が混在した状態でこれらの多様な動作を行うということである。要件r3が満たされないと、ロボットの動作パターンが限られてしまい、動作パターンが少ないおもちゃのように見えてしまう。要件r4は、ロボットが動作を実行するタイミングを適切に制御するということである。要件r4が満たされないと、ロボットの仕草等の表現動作が不自然になってしまう。例えば、ユーザに対する反応等のロボットの動作は直ちに実行しないと意味がなく、ロボットが提供するサービスが低下してしまう。要件r5は、ロボットの動作の停止や、再開が任意に制御可能であるということである。要件r5が満たされないと、ロボットの動作中に何かに気をとられて動作を止めたり、一瞬気をとられた後再開したりするといった、生き物らしい反応を表現することができない。
【0018】
上記の方法1〜3では、以下の表1に示すように、上記の要件r1〜r5を全て満たすことはできなかった。表1中、「○」印は要件が満たされることを示し、「△」印は要件が一部のみ満たされることを示し、「×」印は要件が満たされないことを示す。
【0019】
【表1】

【0020】
このように、方法1では、各動作モジュールが全てのモータを常に動かすような設計でない限り、停止しているモータが発生してしまう。又、各動作モジュールが用意した動作パターンがそのまま表現されるため、ロボットの動作が単調になってユーザに飽きられてしまう可能性がある。
【0021】
又、方法2では、優先度が高い制御コマンドが来た場合に優先度が低い制御コマンドは破棄されるため、動作の再開等ができない。例えば、第1のモータと第2のモータを使う第1の動作を実行中により優先度の高い第2のモータを使う第2の動作の制御コマンドを受け取り優先的に実行し、第2の動作が終了したときにまだ第1の動作が実行中であった場合に第1の動作は第1のモータだけで動作を継続することになり、動作が正しく再開できない。又、制御コマンドのキューに格納する時点で制御コマンドを破棄するか否かを選択することになり、優先度の動的変更に対応できない。
【0022】
更に、方法3では、各モータの時間的同期が保持できず、又、不適切なタイミングで各モータの動作を実行してしまう可能性がある。
【0023】
以下に説明する本発明の各実施例では、異なる動作モジュールから同一モータに矛盾した制御コマンドが出力されても、上記の要件r1〜r5を全て満たすようにこれらの矛盾する制御コマンドを調停するものである。
【0024】
先ず、各実施例で用いるシステム構成を図1と共に説明する。図1は、ロボットシステムの一例を示すブロック図である。図1に示すロボットシステムは、複数の動作モジュール11−1〜11−N(Nは2以上の自然数)と、ロボット12を有する。ロボット12は、複数のセンサ121(1つのみ図示)、センサ情報通知モジュール122、モータコマンド制御モジュール123、及び駆動部を形成する複数のモータ124(1つのみ図示)を有する。各センサ121は、ロボットの動作又は状態、ロボットが周囲環境等を検出してセンサ情報を出力する。各モータ124は、アーム等のロボットの一部を駆動して動かす。この例では説明の便宜上、複数のセンサ121に対して1つのセンサ情報通知モジュール122が設けられており、複数のモータ124に対して1つのモータコマンド制御モジュール123が設けられているものとするが、M個(Mは2以上の自然数)のセンサ121に対してM個のセンサ情報通知モジュール122が設けられており、M個のモータ124に対してM個のモータコマンド制御モジュール123が設けられていても良い。
【0025】
センサ情報通知モジュール122は、各センサ121から出力されるセンサ情報を各動作モジュール11−1〜11−Nに通知する。予めどのセンサ情報をどの動作モジュールに通知するかをセンサ情報通知モジュール122に登録しておけば、各動作モジュール11−1〜11−Nに通知するセンサ情報を適宜選択出力することができる。尚、各センサ121の検出方法、出力するセンサ情報の種類、センサ情報のデータ構造等には、周知もものを使用可能であるため、本明細書ではこれらの説明を省略する。
【0026】
各動作モジュール11−1〜11−Nは各々の動作指針に従って互いに独立して動作しており、センサ情報を入力として各モータ124の動作を決定する。各動作モジュール11−1〜11−Nは、各モータ124の動作をモータコマンドとして決定し、例えばモータ124に対する目標角度(又は、目標位置)と動作時間(動作開始からモータ124の回転角度が目標角度に到達するまでの時間)によって表現する。決定したモータコマンドはモータコマンド制御モジュール123に通知され、モータコマンド制御モジュール123がモータ124を制御する。実際には、各動作モジュール11−1〜11−Nは、複数のモータ124に対するモータコマンドを発行することが一般的である。
【0027】
動作モジュール11−1〜11−Nは、センサ情報をトリガに動作するものであっても、自発的、或いは何らかの方法でユーザからの指示を受けて動作するものであっても良い。例えば、コミュニケーションロボットの場合、ある動作モジュール11−1は定期的に伸びをしたりあくびをするような動作を生成する一方、別の動作モジュール11−2では人を見つけたらその人の方を見て手を振る動作を生成する。
【0028】
本実施例では、このようなロボットシステムにおいて、複数の動作モジュール11−1〜11−Nの動作を以下に説明するように調停する。以下の説明では、便宜上センサ系の図示を省略する。
【0029】
図2は、表1で特にコミュニケーションロボットの要件を一番満たしている方法2における調停を説明するブロック図である。図2中、図1と同一部分には同一符号を付し、その説明は省略する。図2に示すロボット12Aは、モータコマンド制御モジュール223及びロボット本体125を有する。モータコマンド制御モジュール223は、モータコマンド受信部231、動作調停情報管理部232、モータコマンドキュー格納部233−1〜233−N、及びモータコマンド制御部234を有する。ロボット本体125は、例えば熊のぬいぐるみで形成されており、複数のモータ124−1〜124−Nを有する。図2では、説明の便宜上、モータ124−1〜124−Nがロボット本体125の外側に図示されているが、実際にはロボット本体125内に設けられている。
【0030】
各動作モジュール11−1〜11−Nは、各々の動作指針に従って互いに独立して動作して各モータ124−1〜124−Nに対するモータコマンドを生成し、モータコマンド制御モジュール223に通知する。モータコマンド制御モジュール223では、モータコマンド受信部231がモータコマンドを受信する。モータコマンド受信部231は、動作調停情報管理部232が管理する動作調停情報の優先度を参照して、既にモータコマンドキュー格納部233−1〜233−N内に格納されたモータコマンドキューに存在するモータコマンドと新たに受信したモータコマンドの優先度を比較し、受信したモータコマンドの優先度の方が高ければ既に存在するモータコマンドをモータコマンドキューから削除して新たなモータコマンドを追加する。モータコマンド制御部234は、モータコマンドキュー格納部233−1〜233−Nに格納されたモータコマンドキューの各モータコマンドを実行して該当するモータ124−1〜124−Nを制御する。
【0031】
これに対し、図3は、本発明の一実施例における調停を説明するブロック図である。図3中、図1と同一部分には同一符号を付し、その説明は省略する。図3に示すロボット12は、モータコマンド制御モジュール123及びロボット本体125を有する。モータコマンド制御モジュール123は、モータコマンド受信部31、動作調停情報管理部32、モータコマンドキュー格納部33−1〜33−N、モータコマンド制御部34、管理情報受信部35、及びシーケンス情報管理部36を有する。ロボット本体125は、例えば熊のぬいぐるみで形成されており、複数のモータ124−1〜124−Nを有する。動作制御方法は、複数の動作モジュール11−1〜11−Nを切り替えながらロボット12を動作させる。
【0032】
モータコマンド制御モジュール123は、例えば記憶部とCPU(Central Processing Unit)等のプロセッサを有するコンピュータ(又は、コンピュータシステム)により形成可能である。この場合、記憶部にはCPUが実行するプログラムや、CPUが実行する演算の中間結果のデータ等を含む各種データが格納される。つまり、プログラムは、コンピュータにモータコマンド制御モジュール123内のモータコマンド受信部31、動作調停情報管理部32、モータコマンド制御部34、管理情報受信部35、及びシーケンス情報管理部36の機能を実現させる。又、記憶部は、モータコマンドキュー格納部33−1〜33−Nをも形成する。更に、記憶部は、上記プログラムを格納したコンピュータ読み取り可能な記憶媒体を形成しても良い。尚、モータコマンド制御モジュール123を形成するコンピュータは、図1に示すセンサ情報通知モジュール122を形成しても良い。つまり、モータコマンド制御モジュール123を形成するコンピュータは、センサ情報通知モジュール122を形成するコンピュータと同じであっても、異なるコンピュータであっても良い。
【0033】
本実施例では、ロボット12の仕草等の一連の動作を示すモータコマンドの集合を動作シーケンスとして扱い、各モータコマンドは図4に示すように以下の情報を持つようにする。図4は、モータコマンドの情報を説明する図である。モータコマンドの情報は、モータを識別するための情報(モータID)、目標角度、動作シーケンス開始時刻からの相対時刻でモータコマンドの動作開始時刻と動作終了時刻、及びモータコマンドが所属する動作シーケンスを識別するための情報(シーケンスID)を含む。各モータ124−1〜124−Nのモータコマンドキューは、動作モジュール11−1〜11−Nの単位で、即ち、モータコマンドの送信元(命令者)単位でモータコマンドキュー格納部33−1〜33−Nに保持される。又、モータコマンドは、各モータ124−1〜124−N毎に開始時刻順に送られ、開始時刻の順番にモータコマンドキューに格納される。
【0034】
動作調停情報管理部32は、動作モジュール11−1〜11−Nと優先度の対応付けを含む動作調停情報を管理する。動作モジュール11−1〜11−Nは、動作シーケンスに関連するモータコマンドを全てモータコマンド制御モジュール123に通知したら、シーケンスIDを管理情報受信部35を介してシーケンス情報管理部36に通知して動作シーケンスを登録する。シーケンス情報管理部36はシーケンス情報として、動作シーケンスの開始時刻を管理する(即ち、シーケンスIDと開始時刻の対応付けを保持する)。モータコマンド制御部34は、現在の時刻に実行するべきモータコマンドのうち、最も優先度の高い動作モジュールのモータコマンドを実行する。
【0035】
本実施例では、現在時刻からモータコマンドの終了時刻までに目標角度まで到達するようにモータを制御する。又、モータコマンドキューに格納されているモータコマンドは、動作終了時刻が過ぎるまでは破棄しない。このような手順により、表1に示す全ての要件r1〜r5を満たすことができる。
【0036】
図5は、本実施例におけるデータフローを説明する図である。又、モータコマンド、シーケンス情報、及び動作調停情報のデータ構造の例を夫々表2、表3、表4に示す。
【0037】
図5において、任意の動作モジュール11−i(i=2〜Nの任意の自然数)が複数のモータコマンドからなる動作シーケンスを生成する。動作モジュール11−iが生成した動作シーケンスに所属する全てのモータコマンドは、例えば表2に示す如きデータ構造を有し、モータコマンド制御モジュール123にモータ124−1〜124−N毎に、且つ、開始時刻順に通知される。モータコマンド制御モジュール123では、モータコマンド受信部31がモータコマンドを受け付け、該当するモータを識別するモータIDと送信元の動作モジュール(この場合は動作モジュール11−i)毎のモータコマンドキュー格納部233−iのモータコマンドキューにモータコマンドを振り分けてモータコマンドの開始時刻順(受け付けた順)に格納する。一方、管理情報受信部35は、シーケンスIDを受け付けて、シーケンス情報管理部36に通知する。
【0038】
【表2】

【0039】
モータコマンド制御部34は、モータコマンドキューからモータコマンドを取り出し、シーケンス情報管理部36が管理している例えば表3に示す如きデータ構造を有するシーケンス情報(シーケンスIDと動作シーケンスの開始時刻の対応付け)及び動作調停情報管理部32が管理している動作調停情報(動作モジュールと優先度の対応付け)を必要に応じて参照しながら、上記の手順に従ったモータコマンドを該当するモータに送信する。表4は、動作調停情報のデータ構造の一例を示す。
【0040】
【表3】

【0041】
【表4】

【0042】
次に、図3に示すモータコマンド制御部123の動作を、図6と共に説明する。図6は、本実施例におけるモータコマンド制御部123の動作を説明するフローチャートである。モータコマンド制御部123を形成するCPUは、例えば周期的に図6に示す動作制御処理を行うことでモータコマンド制御部123が実行する各手順を実行する。
【0043】
図6において、ステップS1では、任意の動作モジュール11−iからのシーケンスIDを受け付けた管理情報受信部35が現在時刻Tを例えばCPUの内部時計(又は、タイマー)から取得する。ステップS2では、管理情報受信部35がシーケンス情報管理部36に現在時刻Tを通知し、シーケンス情報管理部36は管理しているシーケンスIDの中に開始時刻が設定されていないシーケンスIDがあれば現在時刻Tを開始時刻として設定する。ステップS2の後、全てのモータ124−1〜124−Nに対して以下の処理を実行してモータ124−1〜124−Nを制御する。
【0044】
ステップS3では、モータコマンド制御部34が1つのモータを選択してそのモータIDを決定する。ステップS4では、モータコマンド制御部34が動作調停情報管理部32から優先するべき1つの動作モジュール、即ち、未処理で一番優先度の高い動作モジュール名を取得する。ステップS5では、モータコマンド制御部34が実行するべきモータコマンドを出力した動作モジュールが取得できたか否かを判定し、判定結果がNOであると処理はステップS3へ戻る。ステップS5の判定結果がYESであると、ステップS6では、モータコマンド制御部34がモータIDと動作モジュール名を指定して該当するモータコマンドキュー格納部に格納されたモータコマンドキューからモータコマンドを1つ取得する。各モータコマンドキュー格納部233−1〜233−Nのモータコマンドキューには、データコマンド受信部31がモータコマンドを受け付け、該当するモータIDと送信元の動作モジュール毎のモータコマンドキューにモータコマンドを振り分けたモータコマンドの開始時刻順(受け付けた順)にモータコマンドが格納されている。
【0045】
ステップS7では、モータコマンド制御部34がモータIDと動作モジュール名を指定して該当するモータコマンドキュー格納部に格納されたモータコマンドキューからモータコマンドを1つ取得できたか否かを判定し、判定結果がNOであると処理はステップS4へ戻る。一方、ステップS7の判定結果がYESであると、ステップS8では、モータコマンド制御部34がシーケンス情報管理部36からモータコマンドのシーケンスIDを指定して動作シーケンスの開始時刻TSを取得する。ステップS9では、モータコマンド制御部34がT<TS+「相対動作終了時刻」であるか否かを判定する。ステップS9の判定結果がNOであると、ステップS10では、モータコマンド制御部34がモータコマンドをモータコマンドキューから削除し、処理はステップS6へ戻る。ステップS9の判定結果がYESであると、ステップS11では、モータコマンド制御部34がT>TS+「相対動作開始時刻」であるか否かを判定し、判定結果がNOであると処理はステップS4へ戻る。ステップS11の判定結果がYESであると、処理はステップS13へ進む。
【0046】
ステップS13では、モータコマンド制御部34がモータコマンドがカレントコマンド(現在のコマンド)と同じであるか否かを判定し、判定結果がYESであると処理は後述するステップS15へ進み、判定結果がNOであると処理はステップS13へ進む。ステップS13では、モータコマンド制御部34がカレントコマンドを更新する。ステップS14では、モータコマンド制御部34が、現在時刻TからTS+「相対動作終了時刻」までに目標角度に到達するように該当するモータを制御する。ステップS15では、モータコマンド制御部34が全てのモータ124−1〜124−Nに対する処理が終了したか否かを判定し、判定結果がNOであると処理はステップS3へ戻る。一方、ステップS15の判定結果がYESであると、ステップS16では、モータコマンド制御部34が一定時間待機した後、処理はステップS1へ戻る。
【0047】
このようにして、ステップS3で処理の対象となるモータが決定されると、ステップS4で未処理で一番優先度の高い動作モジュール名を取得する。このモータIDと動作モジュール名をステップS3で指定して、ステップS4でモータコマンドキューからモータコマンドを1つ取得する。該当する動作モジュールから該当するモータへのモータコマンドが送られていない場合には、該当するモータコマンドキューは空でありステップS7でモータコマンドが取得できないため、ステップS4で次に優先度の高い動作モジュールから探す。全ての優先度の動作モジュールを処理してもステップS5で処理するべきモータコマンドが見つからない場合には、ステップS5で次に実行するべき動作モジュールが見つからず、このモータの処理を終了して次のモータの処理を行う。
【0048】
又、モータコマンドが所属する動作シーケンスのシーケンスIDを指定して、シーケンス情報管理部から、動作シーケンスの開始時間TSをステップS8で取得する。動作シーケンスの開始時刻と、モータコマンドが持つ相対動作終了時刻から、モータコマンドの動作終了時刻を計算し、ステップS9で現在時刻Tが既に動作終了時刻を過ぎている場合には、ステップS10でモータコマンドキューから該当するモータコマンドを削除し、ステップS8で次のモータコマンドを取得する。
【0049】
更に、動作シーケンスの開始時刻と、モータコマンドが持つ相対動作開始時刻から、モータコマンドの動作開始時刻をステップS11で計算する。現在時刻Tがまだ動作開始時刻に達していない場合には、この時間帯に、該当する動作モジュールから該当するモータへの動作指示が来ていないためステップS4で次に優先度の高い動作モジュールを探す。モータコマンドが実行するべきと決定した場合には、ステップS14でモータを制御する指示をモータに出力する。ただし、ステップS12で現在実行中のモータコマンド(カレントコマンド)と同じである場合には、モータへの指示を省略しても良い。ステップS12で現在実行中のモータコマンドと異なる場合には、ステップS13でカレントコマンドを新たなモータコマンドに更新し、ステップS14でモータを制御する指示をモータに出力する。モータへの指示は、現在時刻から動作終了時刻までに目標角度に到達するようにモータを制御する。
【0050】
次に、例えば上記実施例を採用したロボットシステムアーキテクチャの一例を、図7及び図8と共に説明する。図7は、ロボットシステムアーキテクチャの一例を示すブロック図であり、図8は、図7のロボットシステムアーキテクチャにおける調停を説明する図である。
【0051】
図7中、図1と同一部分には同一符号を付し、その説明は省略する。図7に示すロボットシステムアーキテクチャは、複数の動作モジュール11−1〜11−N、ロボット(又は、ロボットモジュール)12、複数のイベント検出モジュール15−1〜15−N、及び動作調停モジュール16がイベント配信システム17に接続された構成を有する。イベント検出モジュール15−1〜15−Nは、ロボット12が影響を受けるイベントを検出する。イベント配信システム17は、汎用サーバで形成可能である。
【0052】
尚、各モジュール11−1〜11−N,15−1〜15−N,16は、ロボット12内に設けられていても、イベント配信サーバ17が接続されているネットワーク上に設けられていても良い。又、ロボット12内の複数のセンサ121のうち、少なくとも一部のセンサ121はロボット12の外に設けられて外部接続された構成を用いることもできる。
【0053】
各モジュール11−1〜11−N,12,15−1〜15−N,16はイベント配信システム17を通して繋がっており、各動作モジュール11−1〜11−Nが検知した情報をイベントとして公開(publish)する。又、各モジュール11−1〜11−N,15−1〜15−N,16の処理に必要な情報は、イベント配信システム17に対して購読(subscribe)を要求することによりイベントの通知を受けることで取得可能である。又、各動作モジュール11−1〜11−Nは、イベントを受け取り、最終的にはモータコマンドを生成する。ロボット12内のモータコマンド制御モジュール123は、各動作モジュール11−1〜11−Nからのモータコマンドと、動作調停モジュール16からの調停の指針(又は、調停ルール)を受け取り、最終的なモータへの指令を決定する。イベント配信システム17は、例えばJMS(Java Messaging Service)等の周知技術を利用可能である。
【0054】
各動作モジュールは、他の動作モジュールの動作を知る必要はなく(他の動作モジュールの動作結果等をイベントとして受け取っても良いが)、独立しているため、開発効率が高くなる。ただし、各動作モジュールは互いの動作を知らないため、矛盾するモータ指令を出すこともあるが、動作調停モジュール16が調停の指針をモータコマンド制御モジュール123に通知すれば良い。調停の指針の通知方法としては、動作モジュール毎の優先度を与え、モータコマンド制御モジュール123が優先度に応じて動作を変更するようにしても良い。優先度は、動作調停モジュール16により動的に変更可能である。このようなロボットシステムアーキテクチャを構成することで、各動作モジュール11−1〜11−Nの独立性が高まり、開発が容易になると共に、拡張性も向上する。
【0055】
又、1つのイベント配信システム17に複数のロボットを接続しても良い。この場合、ロボット同士の掛け合い等、ロボット間の連携を取るような動作モジュールが実現可能となる。
【0056】
図8は、説明の便宜上図7のロボット12内に3つのモータが設けられている場合の調停を説明する図である。図8中、細い実線の矢印は動作モジュールからのモータコマンドを示し、太い実線の矢印は実行されるモータコマンドを示し、破線の矢印は上記の方法2を採用した場合に実行されるモータコマンドを示す。又、この例では、優先度が動的にP1,P2,P3と3段階に変更されるものとする。
【0057】
モータ124−1の場合、上記の方法2では動作モジュール11−2がモータコマンドを登録した時点では動作中の動作モジュール11−1の方が優先度が高く、動作モジュール11−2のモータコマンドは破棄される。このため、その後動作モジュール11−2の優先度が高くなった際に動作モジュール11−2の動作を実行できない。これに対し、本実施例では、適切に優先度によって動作を切り替えることができる。
【0058】
モータ124−2の場合、上記の方法2は動作モジュール11−3のモータコマンドを実行中に優先度の高い動作モジュール11−1のモータコマンドに上書きされ、動作モジュール11−3のモータコマンドが破棄される。その後動作モジュール11−1のモータコマンドが終了した後に、既にモータコマンドが破棄されてしまっているため、動作モジュール11−3のモータコマンドが実行できない。これに対し、本実施例では、適切に再開することができる。
【0059】
モータ124−3の場合、上記の方法2では動作モジュール11−3からのモータコマンドは、既に優先度が高いモータコマンドの実行中のため破棄され、その後動作モジュール11−2からの動作コマンドが一瞬途切れるが、その間に、動作モジュール11−3のモータコマンドを実行することはできない。この様な場合には、ロボットの動きが一瞬停止することになり、不自然な動作となってしまう。これに対し、本実施例では、この様な間に優先度の低い動作を実行することができる。
【0060】
上記の如く、本実施例によれば、複数の動作モジュールからの動作シーケンスを自然に切り替えたり再開したりすることができる。又、各動作モジュールは独立して開発可能であり、開発効率を向上できる。この結果、より自然な動作を行うコミュニケーションロボットを効率よく開発できる。
【0061】
例えば、ロボットが音楽に合わせて動作(ダンス)をしているときに、ユーザから話しかけられてユーザの相手をして、その後ダンスを再開するような動きを、音楽に合わせて動作する動作モジュールと、インタラクションを行う動作モジュールを夫々作成することにより、比較的簡単に実現できる。更に様々な動作モジュールを作成することにより、自然な動きを行うロボットの動作を効率よく実現できる。又、ロボットの周囲環境の状態やロボットとユーザ間のインタラクション(例えば、会話)の文脈等に合わせて動作モジュールの優先度を変更することにより、ロボットにより複雑な動作を自然に行わせることができる。
【0062】
次に、上記実施例の第1変形例を図9と共に説明する。図9は、第1変形例における調停を説明するブロック図である。図9中、図3と同一部分には同一符号を付し、その説明は省略する。
【0063】
本変形例では、動作調停情報管理部32が管理する表4の動作調停情報を各時刻で動的に変更される。例えば、動作モジュール11−1〜11−Nの中に、ロボット12がユーザとのアイコンタクトを行う動作モジュール11−1と、ロボット12が眠そうな仕草等の自発的な振る舞いを行う動作モジュール11−2が含まれている場合、ロボット12とユーザとの間のインタラクション(例えば、会話)の文脈によってどちらを行うべきかを動作調停モジュール16が決定して、動作調停情報管理部32が管理している表4の動作調停情報の優先度を動的に変更することにより、ロボット12のより自然な動作の切り替えが実現可能となる。
【0064】
次に、上記実施例の第2変形例を図10と共に説明する。図10は、動作調停情報管理部32が管理する動作調停情報を示す図である。
【0065】
本変形例では、動作調停情報管理部32が管理する表4の動作調停情報を、動作調停モジュール16が図10に示すようにモータ単位でモジュール毎に管理する。つまり、モータ毎に優先度を変更することができ、モータIDと優先度を指定することで動作モジュールを取得することもできる。これにより、ロボット12のより細かな動作調停が可能となる。同じ動作シーケンスでも、例えばモータによって動作の重要度が異なる場合等、細かな制御が可能になる。尚、本変形例においても上記第1変形例と同様に動作調停情報を動的に変更する場合、より複雑な動作が生成できる一方、動作調停モジュール16自体はより複雑になる。
【0066】
次に、上記実施例の第3変形例を、図11と共に説明する。図11は、第3変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図11中、図6と同一ステップには同一符号を付し、その説明は省略する。
【0067】
本変形例では、モータコマンド制御モジュール123内のモータコマンド制御部34がモータコマンドを実行する際に、モータ毎に角速度の限界値(最大角速度)を設定し、ロボット12の動作の切り替わりを人から見て自然となるように円滑に行わせる。モータコマンド制御部34内には、例えば表5の如き最大角速度を設定するテーブルが格納されている。
【0068】
【表5】

【0069】
モータコマンド制御部34は、図6のステップS14の代わりに、図11のステップS21〜S23を行う。ステップS21は、ステップS13の後に行われる。ステップS21では、{「目標角度」−「現在角度」}/{TS+「相対動作終了時刻」−T}>「該当モータの最大角速度」であるか否かを判定する。ステップS21の判定結果がYESであるとであると、ステップS22では、現在時刻TからTS+相対動作終了時刻まで目標角度に向かって最大角速度で動作するように該当モータを制御する指示を出力する。一方、ステップS21の判定結果がNOであると、ステップS23では、現在時刻TからTS+相対動作終了時刻までに目標角度に到達するように該当モータを制御する指示を出力する。ステップS22又はステップS23の後、処理はステップS15へ進む。
【0070】
動作シーケンスが切り替わる際に、モータの開始位置がわからないため、ロボットが急激な動作を行ってしまう場合がある。本変形例では、このような不都合を防ぐために、モータ毎に最大角速度を設定しておき、この最大角速度を超えない範囲で動作するように各モータを制御する。これにより、切り替わった直後のモータコマンドは該当モータを目標角度まで到達させずに処理が次のモータコマンドに進んでしまうこともあるが、そのような過渡期を経て最終的には切り替わった動作を行うことができ、ロボットの動作をより自然にを切り替えることができる。
【0071】
次に、上記実施例の第4変形例を、図12と共に説明する。図12は、第4変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図12中、図11と同一ステップには同一符号を付し、その説明は省略する。
【0072】
本変形例では、角速度の限界値(最大角速度)を動的に変更可能とする。最大角速度を変更することにより、ロボットに緩慢な動作(眠そうな動作)等を行わせ、ロボットの動作に変化をつけることができる。例えば、上記の表5のテーブルは動作調停情報管理部32が管理し、図9のように動作調停モジュール16が動作調停情報の最大角速度のテーブルを変更する。
【0073】
モータコマンド制御部34は、図11のステップS12,S13の代わりに、図12のステップS31〜S33を行う。ステップS31は、ステップS11の判定結果がYESであると行われる。ステップS31では、動作調停情報管理部32のテーブルから該当モータの最大角速度を取得する。ステップS32では、モータコマンドが可憐とコマンドと同じ、且つ、最大角速度が変化していないか否かを判定する。ステップS32の判定結果がYESであると処理はステップS15へ進み、判定結果がNOであると処理はステップS33へ進む。ステップS33では、カレントコマンド及び最大角速度を更新し、処理はステップS21へ進む。
【0074】
尚、ステップS32において、最大角速度が変化していないか否かを判定しなくても良い。この場合、変更した最大角速度が適用されるのは現在実行中のモータコマンドの動作が終了した後となる。
【0075】
次に、上記実施例の第5変形例を表6及び図13と共に説明する。表6は、シーケンス情報のデータ構造の一例を示す。
【0076】
動作モジュールがシーケンス情報管理部36にシーケンスIDを通知する際に、動作シーケンスの相対時刻を指定し、シーケンス情報管理部36が動作シーケンスの開始時刻を決定する際に指定された相対時刻を減算することにより、指定した動作シーケンスを相対時刻から開始することができる。
【0077】
【表6】

【0078】
つまり、本変形例では、動作モジュールから動作シーケンス指定して、途中からの再生を指示する機能を持たせる。具体的には、シーケンス情報を動作モジュールがシーケンス情報管理部36に通知する際に、動作シーケンス開始場所(動作シーケンスの相対時刻)を同時に通知する。シーケンス情報管理部36では、表6の如きシーケンス情報を管理しており、動作シーケンス開始時刻を設定する際に、動作シーケンス開始場所(動作シーケンスの相対時刻)を減算した値を動作シーケンス開始時刻に設定する。その後は、上記実施例と同様に処理を進めるだけで、動作シーケンスの途中からの再生が可能となる。
【0079】
図13は、第5変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図13中、図6と同一ステップには同一符号を付し、その説明は省略する。
【0080】
本変形例では、モータコマンド制御部34は、図6のステップS2の代わりに、図13のステップS41を行う。ステップS41は、ステップS1の後に行われる。ステップS41では、モータコマンド制御部34がシーケンス情報管理部36に現在時刻Tを通知し、シーケンス情報管理部36は管理しているシーケンスIDの中に開始時刻が設定されていないシーケンスIDがあれば「現在時刻T」−「動作シーケンス開始場所」を開始時刻として設定する。ステップS41の後、処理はステップS3へ進む。
【0081】
次に、上記実施例の第6変形例を、図14と共に説明する。図14は、シーケンス情報管理部36に停止又は中断の指示があった場合の詳細な処理の一例を説明するフローチャートである。
【0082】
動作モジュールが動作シーケンスを停止又は中断したい場合、動作モジュールはシーケンスIDを指定して、シーケンス情報管理部36に中断を指示する。シーケンス情報管理部36は、動作シーケンスの停止又は中断コマンドを受信すると、シーケンス情報管理部36が管理している動作シーケンスの開始時刻を0等のできる限り小さい値(できるだけ古い時刻)に変更することにより、動作シーケンスを中断することができる。モータコマンド制御部34は、上記ステップS8で、シーケンス開始時刻TSを取得する際に、古い時刻を受け取り、同一シーケンスのその後の処理はステップS9の判定結果がNOになるため実行しない。
【0083】
尚、動作シーケンスが中断されたか否かを示すフラグをシーケンス情報管理部36で管理し、モータコマンドの実行を決定する際に、このフラグを問い合わせることにより動作シーケンスを中断するようにしても良いことは言うまでもない。。
【0084】
図14において、ステップS51では、動作モジュールがシーケンスIDを指定して、モータコマンド制御モジュール123に停止を指示する。ステップS52では、指示を受け取ったシーケンス情報管理部36が、該当動作シーケンスの動作シーケンス開始時刻を上記の如くできるだけ古い時刻に変更する。
【0085】
上記実施例及び各変形例では、動作シーケンスを、個々のモータコマンド単位と、シーケンス情報に分けて通信しているが、動作シーケンスの通信方法はこれに限定されるものではない。つまり、図4の動作シーケンスの情報を一度のコマンドとして送り、モータコマンド受信部側で動作シーケンスを個々のモータコマンドとシーケンス情報に分けて格納するようにしても良い。
【0086】
図15は、ロボットシステムの他の例を示すブロック図である。図15に示すロボットシステム52は、定型動作を行う動作モジュールであるアプリケーション51からのモータコマンドを受信する。ロボットシステム52は、生き物らしい振る舞いモジュール521、生き物らしい反応モジュール522、その他のモジュール523と、ロボット524を有する。その他のモジュール523には、例えば図7のイベント検出モジュール15−1〜15−Nや動作調停モジュール16等が含まれ、更にセンサ情報通知モジュール122等が含まれても良い。ロボット524は、モータコマンド制御モジュール525を有する。ロボット524は、上記いずれかの実施例又は変形例と同様の構成を有するものであり、センサ、センサ情報通知モジュール及びモータの図示は省略する。モータコマンド制御モジュール525は、モータコマンド制御モジュール123に相当する。
【0087】
本実施例では、ロボットに例えば体操動作のような定型動作を行わせるアプリケーション(又は、動作モジュール)51からのモータコマンドをモータコマンド制御モジュール525に入力すると、モジュール521〜523等からのモータコマンドと適切な調停が行われる。このため、アプリケーション51からのモータコマンドのみに基づくモータ制御を行ったのではロボット524動作が機械的な定型動作となるところが、アプリケーション51からのモータコマンドと生き物らしい(或いは、人らしい)動作を行わせるモジュール521〜523からのモータコマンドの調停を行うことで、ロボット524の定型動作を人から見て自然で違和感のない円滑な動作(生き物らしい、或いは、人らしい動作)に変換できる。従って、定型動作を行わせるアプリケーション(又は、動作モジュール)51が予め用意されているような場合に、アプリケーション51自体に変更を加えることなく、その定型動作を人から見て自然で違和感のない円滑な動作に変換することができる。
【0088】
上記各実施例及び変形例では、本発明がロボットに適用されているが、上記実施例は各種インタラクティブデバイスに適用可能であることは言うまでもない。例えば、インタラクティブデバイスには、各種電子装置や各種家庭用電気製品(所謂、家電)が含まれる。家電には、複数の駆動部により画面を水平面上で回転させたり垂直面に対してチルトさせたりして画面を視聴者の方向に向ける機能を備えたインタラクティブテレビジョン装置、複数の駆動部により送風方向や送風強度を利用者の位置や利用者の数に応じて制御する機能を備えたインタラクティブ空調機器(エアコン)等が含まれる。
【0089】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、動作制御方法。
(付記2)
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記1記載の動作制御方法。
(付記3)
現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記1又は2記載の動作制御方法。
(付記4)
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも1つの手順を前記コンピュータに更に実行させる、付記1乃至3のいずれか1項記載の動作制御方法。
(付記5)
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記1乃至4のいずれか1項記載の動作制御方法。
(付記6)
複数の駆動部と、
複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、
前記コマンド制御モジュールは、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、
前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する、インタラクティブデバイス。
(付記7)
前記シーケンス情報を管理するシーケンス情報管理部と、
前記動作調停情報を管理する動作調停情報管理部を更に備えた、付記6記載のインタラクティブデバイス。
(付記8)
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記6又は7記載のインタラクティブデバイス。
(付記9)
前記コマンド制御モジュールは、現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記6乃至8のいずれか1項記載のインタラクティブデバイス。
(付記10)
前記動作調停情報管理部内の前記動作調停情報を各時刻で動的に変更する動作調停モジュールを更に備えた、付記7項記載のインタラクティブデバイス。
(付記11)
前記駆動部毎に優先度を変更するように前記動作調停情報管理部内の前記動作調停情報を変更する動作調停モジュールを更に備えた、付記7記載のインタラクティブデバイス。
(付記12)
前記駆動部の速度の限界値を動的に変更するように前記動作調停情報管理部内の前記動作調停情報を変更する動作調停モジュールを更に備えた、付記7記載のインタラクティブデバイス。
(付記13)
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記6乃至12のいずれか1項記載のインタラクティブデバイス。
(付記14)
コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、プログラム。
(付記15)
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記14記載のプログラム。
(付記16)
現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記14又は15記載のプログラム。
(付記17)
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも1つの手順を前記コンピュータに更に実行させる、付記14乃至16のいずれか1項記載のプログラム。
(付記18)
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記14乃至17のいずれか1項記載のプログラム。
(付記19)
前記インタラクティブデバイスはロボットであり、
前記任意の動作モジュールは、該当する駆動部を制御して前記ロボットに定型動作を行わせるモジュールであり、
前記複数の動作モジュールのうち前記任意の動作モジュール以外の動作モジュールは、該当する駆動部を制御して前記ロボットに生き物らしい動作を行わせるモジュールであり、
前記動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順は、前記任意の動作モジュールのコマンドと前記任意の動作モジュール以外の動作モジュールのコマンドを前記動作調停情報に基づいて調停することにより、前記ロボットに定型動作を生き物らしく行わせる、付記14乃至18のいずれか1項記載のプログラム。
(付記20)
付記16乃至19のいずれか1項記載のプログラムを格納した、コンピュータ読み取り可能な記憶媒体。
【0090】
以上、開示の動作制御方法、インタラクティブデバイス及びプログラムを実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【0091】
11−1〜11−N 動作モジュール
12 ロボット
16 動作調停モジュール
31 モータコマンド受信部
32 動作調停情報管理部
33−1〜33−N モータコマンドキュー格納部
34 モータコマンド制御部
35 管理情報受信部
36 シーケンス情報管理部
121 センサ
122 センサ情報通知モジュール
123 モータコマンド制御モジュール
124,124−1〜124−N モータ

【特許請求の範囲】
【請求項1】
コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、プログラム。
【請求項2】
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、請求項1記載のプログラム。
【請求項3】
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも1つの手順を前記コンピュータに更に実行させる、請求項1又は2記載のプログラム。
【請求項4】
前記インタラクティブデバイスはロボットであり、
前記任意の動作モジュールは、該当する駆動部を制御して前記ロボットに定型動作を行わせるモジュールであり、
前記複数の動作モジュールのうち前記任意の動作モジュール以外の動作モジュールは、該当する駆動部を制御して前記ロボットに任意の動作を行わせるモジュールであり、
前記動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順は、前記任意の動作モジュールのコマンドと前記任意の動作モジュール以外の動作モジュールのコマンドを前記動作調停情報に基づいて調停することにより、前記ロボットに定型動作を行わせる、請求項1乃至3のいずれか1項記載のプログラム。
【請求項5】
複数の駆動部と、
複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、
前記コマンド制御モジュールは、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、
前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する、インタラクティブデバイス。
【請求項6】
コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、動作制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2011−233071(P2011−233071A)
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願番号】特願2010−105125(P2010−105125)
【出願日】平成22年4月30日(2010.4.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】