(57)【特許請求の範囲】
【請求項１】
コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、プログラム。
【請求項２】
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、請求項１記載のプログラム。
【請求項３】
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも１つの手順を前記コンピュータに更に実行させる、請求項１又は２記載のプログラム。
【請求項４】
前記インタラクティブデバイスはロボットであり、
前記任意の動作モジュールは、該当する駆動部を制御して前記ロボットに定型動作を行わせるモジュールであり、
前記複数の動作モジュールのうち前記任意の動作モジュール以外の動作モジュールは、該当する駆動部を制御して前記ロボットに任意の動作を行わせるモジュールであり、
前記動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順は、前記任意の動作モジュールのコマンドと前記任意の動作モジュール以外の動作モジュールのコマンドを前記動作調停情報に基づいて調停することにより、前記ロボットに定型動作を行わせる、請求項１乃至３のいずれか１項記載のプログラム。
【請求項５】
複数の駆動部と、
複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、
前記コマンド制御モジュールは、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、
前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する、インタラクティブデバイス。
【請求項６】
コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、動作制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モータ等の駆動部の動作を制御する動作制御方法、そのような動作制御方法を用いるインタラクティブデバイス（Interactive Device）、コンピュータにそのような動作制御方法の手順を実行させるプログラム、コンピュータにインタラクティブデバイスの機能を実現させるプログラム、及びコンピュータをインタラクティブデバイスの手段として機能させるプログラムに関する。本発明は、そのようなプログラムを格納したコンピュータ読み取り可能な記憶媒体にも関する。
【背景技術】
【０００２】
インタラクティブデバイスの一例であるロボットが人とインタラクションを行い人と共存するためには、多種多様の事象を検知及び認識して動作する必要がある。しかし、多種多様の全ての事象を認識してロボットの動作を決定する単一の動作モジュールを開発することは困難である。このため、複数の動作モジュールを開発し、動作モジュールを切り替えながらロボットを動作させる方法が提案されている（例えば、特許文献１，２）。このような提案方法を採用するロボットアーキテクチャの一例として、タスクの優先度を考慮に入れた並列的な分割処理方式であるサブサンプションアーキテクチャ（Subsumption Architecture）が知られている。
【０００３】
各動作モジュールは、センサが検知した情報等に基づいてロボットの動作を決定し、ロボットの各モータに対する制御コマンドを出力する。しかし、異なる動作モジュールから同一モータに矛盾した制御コマンドを出力することがあるため、これらの矛盾する制御コマンドを調停する必要がある。
【０００４】
介護ロボットや教育ロボット等の、人とのインタラクションが重要な機能の１つであるコミュニケーションロボットでは、動作は生き物らしさ（即ち、機械的ではない動作）を演出するための仕草や人との触れ合いを表現するために、複数の動作モジュールからの制御コマンドを調停して人から見て自然な動作を表現することが望まれる。しかし、従来は、人から見てロボットが自然に動作を切り替えたり再開、或いは、人に違和感を与えないようにロボットが自然に動作を切り替えたり再開するのに適した制御コマンドの調停方式が存在しなかった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１８７０８３号公報
【特許文献２】特開２０００−１５３４７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のインタラクティブデバイスでは、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することは難しいという問題があった。
【０００７】
そこで、本発明は、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することを可能とする動作制御方法、インタラクティブデバイス及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一観点によれば、コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順を前記コンピュータに実行させる動作制御方法が提供される。
【０００９】
本発明の一観点によれば、複数の駆動部と、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、前記コマンド制御モジュールは、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御するインタラクティブデバイスが提供される。
【００１０】
本発明の一観点によれば、コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順を前記コンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１１】
開示の動作制御方法、インタラクティブデバイス及びプログラムによれば、人から見て自然に、或いは、人に違和感を与えないように、動作を切り替えたり動作を再開することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】ロボットシステムの一例を示すブロック図である。
【図２】方法２における調停を説明するブロック図である。
【図３】本発明の一実施例における調停を説明するブロック図である。
【図４】モータコマンドの情報を説明する図である。
【図５】実施例におけるデータフローを説明する図である。
【図６】実施例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図７】ロボットシステムアーキテクチャの一例を示すブロック図である。
【図８】図７のロボットシステムアーキテクチャにおける調停を説明する図である。
【図９】第１変形例における調停を説明するブロック図である。
【図１０】動作調停情報管理部が管理する動作調停情報を示す図である。
【図１１】第３変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図１２】第４変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図１３】第５変形例におけるモータコマンド制御部の動作を説明するフローチャートである。
【図１４】シーケンス情報管理部に停止又は中断の指示があった場合の詳細な処理の一例を説明するフローチャートである。
【図１５】ロボットシステムの他の例を示すブロック図である。
【発明を実施するための形態】
【００１３】
開示の動作制御方法、インタラクティブデバイス及びプログラムでは、複数の動作モジュールを切り替えながら複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる。任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、複数の駆動部毎に、且つ、複数のコマンドの開始時刻順に受け付け、各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から任意の動作モジュールに該当するコマンドキューのコマンドを取り出す。各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する。
【００１４】
以下に、開示の動作制御方法、インタラクティブデバイス及びプログラムの各実施例を図面と共に説明する。
【実施例】
【００１５】
動作モジュールを切り替えながらロボットを動作させる方法において、各動作モジュールは、センサが検知した情報等に基づいてロボットの動作を決定し、ロボットの各モータに対する制御コマンドを出力する。しかし、異なる動作モジュールから同一モータに矛盾した制御コマンドを出力することがあるため、これらの矛盾する制御コマンドを調停する必要がある。そこで、例えば以下の如き方法１〜３の如き調停方法が考えられる。方法１は、制御コマンドを出力する動作モジュールが唯一となるように動作モジュールを切り替える。方法２は、モータ単位で優先度の高い制御コマンドが発行されれば優先度の低い制御コマンドを破棄して優先度の高い制御コマンドを実行する。方法３は、モータ単位で優先度の高い制御コマンドが発行されれば優先度の低い制御コマンドを保留して優先度の高い制御コマンドを実行し、優先度の高い制御コマンドの実行が終了した後で優先度の低い制御コマンドの実行を再開する。
【００１６】
介護ロボットや教育ロボット等の、人とのインタラクションが重要な機能の１つであるコミュニケーションロボットでは、動作は生き物らしさ（即ち、機械的ではない動作）を演出するための仕草や人との触れ合いを表現するために、複数の動作モジュールからの制御コマンドを調停して人から見て自然な動作を表現することが望まれる。
【００１７】
本発明者は、人から見て自然な動作を実現するためには、以下のような要件ｒ１〜ｒ５を満たすことが望ましいことを見出した。要件ｒ１は、ロボットが実行する１つの動作シーケンスの中で、各モータの動きが同期しているということである。この要件ｒ１が満たされないと、例えばロボットの両手で何かをする仕草を表す動作シーケンスの動作が左右の手でバラバラに実行されて不自然になる可能性がある。要件ｒ２は、ロボット内の各モータは可能な限り動作し続け、各モータの停止時間を少なくするということである。この要件ｒ２が満たされないと、各モータの停止時間が長いために動作が機械的となり、生き物らしさが表現できない。要件ｒ３は、ロボットが多様な動作が混在した状態でこれらの多様な動作を行うということである。要件ｒ３が満たされないと、ロボットの動作パターンが限られてしまい、動作パターンが少ないおもちゃのように見えてしまう。要件ｒ４は、ロボットが動作を実行するタイミングを適切に制御するということである。要件ｒ４が満たされないと、ロボットの仕草等の表現動作が不自然になってしまう。例えば、ユーザに対する反応等のロボットの動作は直ちに実行しないと意味がなく、ロボットが提供するサービスが低下してしまう。要件ｒ５は、ロボットの動作の停止や、再開が任意に制御可能であるということである。要件ｒ５が満たされないと、ロボットの動作中に何かに気をとられて動作を止めたり、一瞬気をとられた後再開したりするといった、生き物らしい反応を表現することができない。
【００１８】
上記の方法１〜３では、以下の表１に示すように、上記の要件ｒ１〜ｒ５を全て満たすことはできなかった。表１中、「○」印は要件が満たされることを示し、「△」印は要件が一部のみ満たされることを示し、「×」印は要件が満たされないことを示す。
【００１９】
【表１】
0005445312.tif 000002
【００２０】
このように、方法１では、各動作モジュールが全てのモータを常に動かすような設計でない限り、停止しているモータが発生してしまう。又、各動作モジュールが用意した動作パターンがそのまま表現されるため、ロボットの動作が単調になってユーザに飽きられてしまう可能性がある。
【００２１】
又、方法２では、優先度が高い制御コマンドが来た場合に優先度が低い制御コマンドは破棄されるため、動作の再開等ができない。例えば、第１のモータと第２のモータを使う第１の動作を実行中により優先度の高い第２のモータを使う第２の動作の制御コマンドを受け取り優先的に実行し、第２の動作が終了したときにまだ第１の動作が実行中であった場合に第１の動作は第１のモータだけで動作を継続することになり、動作が正しく再開できない。又、制御コマンドのキューに格納する時点で制御コマンドを破棄するか否かを選択することになり、優先度の動的変更に対応できない。
【００２２】
更に、方法３では、各モータの時間的同期が保持できず、又、不適切なタイミングで各モータの動作を実行してしまう可能性がある。
【００２３】
以下に説明する本発明の各実施例では、異なる動作モジュールから同一モータに矛盾した制御コマンドが出力されても、上記の要件ｒ１〜ｒ５を全て満たすようにこれらの矛盾する制御コマンドを調停するものである。
【００２４】
先ず、各実施例で用いるシステム構成を図１と共に説明する。図１は、ロボットシステムの一例を示すブロック図である。図１に示すロボットシステムは、複数の動作モジュール１１−１〜１１−Ｎ（Ｎは２以上の自然数）と、ロボット１２を有する。ロボット１２は、複数のセンサ１２１（１つのみ図示）、センサ情報通知モジュール１２２、モータコマンド制御モジュール１２３、及び駆動部を形成する複数のモータ１２４（１つのみ図示）を有する。各センサ１２１は、ロボットの動作又は状態、ロボットが周囲環境等を検出してセンサ情報を出力する。各モータ１２４は、アーム等のロボットの一部を駆動して動かす。この例では説明の便宜上、複数のセンサ１２１に対して１つのセンサ情報通知モジュール１２２が設けられており、複数のモータ１２４に対して１つのモータコマンド制御モジュール１２３が設けられているものとするが、Ｍ個（Ｍは２以上の自然数）のセンサ１２１に対してＭ個のセンサ情報通知モジュール１２２が設けられており、Ｍ個のモータ１２４に対してＭ個のモータコマンド制御モジュール１２３が設けられていても良い。
【００２５】
センサ情報通知モジュール１２２は、各センサ１２１から出力されるセンサ情報を各動作モジュール１１−１〜１１−Ｎに通知する。予めどのセンサ情報をどの動作モジュールに通知するかをセンサ情報通知モジュール１２２に登録しておけば、各動作モジュール１１−１〜１１−Ｎに通知するセンサ情報を適宜選択出力することができる。尚、各センサ１２１の検出方法、出力するセンサ情報の種類、センサ情報のデータ構造等には、周知もものを使用可能であるため、本明細書ではこれらの説明を省略する。
【００２６】
各動作モジュール１１−１〜１１−Ｎは各々の動作指針に従って互いに独立して動作しており、センサ情報を入力として各モータ１２４の動作を決定する。各動作モジュール１１−１〜１１−Ｎは、各モータ１２４の動作をモータコマンドとして決定し、例えばモータ１２４に対する目標角度（又は、目標位置）と動作時間（動作開始からモータ１２４の回転角度が目標角度に到達するまでの時間）によって表現する。決定したモータコマンドはモータコマンド制御モジュール１２３に通知され、モータコマンド制御モジュール１２３がモータ１２４を制御する。実際には、各動作モジュール１１−１〜１１−Ｎは、複数のモータ１２４に対するモータコマンドを発行することが一般的である。
【００２７】
動作モジュール１１−１〜１１−Ｎは、センサ情報をトリガに動作するものであっても、自発的、或いは何らかの方法でユーザからの指示を受けて動作するものであっても良い。例えば、コミュニケーションロボットの場合、ある動作モジュール１１−１は定期的に伸びをしたりあくびをするような動作を生成する一方、別の動作モジュール１１−２では人を見つけたらその人の方を見て手を振る動作を生成する。
【００２８】
本実施例では、このようなロボットシステムにおいて、複数の動作モジュール１１−１〜１１−Ｎの動作を以下に説明するように調停する。以下の説明では、便宜上センサ系の図示を省略する。
【００２９】
図２は、表１で特にコミュニケーションロボットの要件を一番満たしている方法２における調停を説明するブロック図である。図２中、図１と同一部分には同一符号を付し、その説明は省略する。図２に示すロボット１２Ａは、モータコマンド制御モジュール２２３及びロボット本体１２５を有する。モータコマンド制御モジュール２２３は、モータコマンド受信部２３１、動作調停情報管理部２３２、モータコマンドキュー格納部２３３−１〜２３３−Ｎ、及びモータコマンド制御部２３４を有する。ロボット本体１２５は、例えば熊のぬいぐるみで形成されており、複数のモータ１２４−１〜１２４−Ｎを有する。図２では、説明の便宜上、モータ１２４−１〜１２４−Ｎがロボット本体１２５の外側に図示されているが、実際にはロボット本体１２５内に設けられている。
【００３０】
各動作モジュール１１−１〜１１−Ｎは、各々の動作指針に従って互いに独立して動作して各モータ１２４−１〜１２４−Ｎに対するモータコマンドを生成し、モータコマンド制御モジュール２２３に通知する。モータコマンド制御モジュール２２３では、モータコマンド受信部２３１がモータコマンドを受信する。モータコマンド受信部２３１は、動作調停情報管理部２３２が管理する動作調停情報の優先度を参照して、既にモータコマンドキュー格納部２３３−１〜２３３−Ｎ内に格納されたモータコマンドキューに存在するモータコマンドと新たに受信したモータコマンドの優先度を比較し、受信したモータコマンドの優先度の方が高ければ既に存在するモータコマンドをモータコマンドキューから削除して新たなモータコマンドを追加する。モータコマンド制御部２３４は、モータコマンドキュー格納部２３３−１〜２３３−Ｎに格納されたモータコマンドキューの各モータコマンドを実行して該当するモータ１２４−１〜１２４−Ｎを制御する。
【００３１】
これに対し、図３は、本発明の一実施例における調停を説明するブロック図である。図３中、図１と同一部分には同一符号を付し、その説明は省略する。図３に示すロボット１２は、モータコマンド制御モジュール１２３及びロボット本体１２５を有する。モータコマンド制御モジュール１２３は、モータコマンド受信部３１、動作調停情報管理部３２、モータコマンドキュー格納部３３−１〜３３−Ｎ、モータコマンド制御部３４、管理情報受信部３５、及びシーケンス情報管理部３６を有する。ロボット本体１２５は、例えば熊のぬいぐるみで形成されており、複数のモータ１２４−１〜１２４−Ｎを有する。動作制御方法は、複数の動作モジュール１１−１〜１１−Ｎを切り替えながらロボット１２を動作させる。
【００３２】
モータコマンド制御モジュール１２３は、例えば記憶部とＣＰＵ（Central Processing Unit）等のプロセッサを有するコンピュータ（又は、コンピュータシステム）により形成可能である。この場合、記憶部にはＣＰＵが実行するプログラムや、ＣＰＵが実行する演算の中間結果のデータ等を含む各種データが格納される。つまり、プログラムは、コンピュータにモータコマンド制御モジュール１２３内のモータコマンド受信部３１、動作調停情報管理部３２、モータコマンド制御部３４、管理情報受信部３５、及びシーケンス情報管理部３６の機能を実現させる。又、記憶部は、モータコマンドキュー格納部３３−１〜３３−Ｎをも形成する。更に、記憶部は、上記プログラムを格納したコンピュータ読み取り可能な記憶媒体を形成しても良い。尚、モータコマンド制御モジュール１２３を形成するコンピュータは、図１に示すセンサ情報通知モジュール１２２を形成しても良い。つまり、モータコマンド制御モジュール１２３を形成するコンピュータは、センサ情報通知モジュール１２２を形成するコンピュータと同じであっても、異なるコンピュータであっても良い。
【００３３】
本実施例では、ロボット１２の仕草等の一連の動作を示すモータコマンドの集合を動作シーケンスとして扱い、各モータコマンドは図４に示すように以下の情報を持つようにする。図４は、モータコマンドの情報を説明する図である。モータコマンドの情報は、モータを識別するための情報（モータＩＤ）、目標角度、動作シーケンス開始時刻からの相対時刻でモータコマンドの動作開始時刻と動作終了時刻、及びモータコマンドが所属する動作シーケンスを識別するための情報（シーケンスＩＤ）を含む。各モータ１２４−１〜１２４−Ｎのモータコマンドキューは、動作モジュール１１−１〜１１−Ｎの単位で、即ち、モータコマンドの送信元（命令者）単位でモータコマンドキュー格納部３３−１〜３３−Ｎに保持される。又、モータコマンドは、各モータ１２４−１〜１２４−Ｎ毎に開始時刻順に送られ、開始時刻の順番にモータコマンドキューに格納される。
【００３４】
動作調停情報管理部３２は、動作モジュール１１−１〜１１−Ｎと優先度の対応付けを含む動作調停情報を管理する。動作モジュール１１−１〜１１−Ｎは、動作シーケンスに関連するモータコマンドを全てモータコマンド制御モジュール１２３に通知したら、シーケンスＩＤを管理情報受信部３５を介してシーケンス情報管理部３６に通知して動作シーケンスを登録する。シーケンス情報管理部３６はシーケンス情報として、動作シーケンスの開始時刻を管理する（即ち、シーケンスＩＤと開始時刻の対応付けを保持する）。モータコマンド制御部３４は、現在の時刻に実行するべきモータコマンドのうち、最も優先度の高い動作モジュールのモータコマンドを実行する。
【００３５】
本実施例では、現在時刻からモータコマンドの終了時刻までに目標角度まで到達するようにモータを制御する。又、モータコマンドキューに格納されているモータコマンドは、動作終了時刻が過ぎるまでは破棄しない。このような手順により、表１に示す全ての要件ｒ１〜ｒ５を満たすことができる。
【００３６】
図５は、本実施例におけるデータフローを説明する図である。又、モータコマンド、シーケンス情報、及び動作調停情報のデータ構造の例を夫々表２、表３、表４に示す。
【００３７】
図５において、任意の動作モジュール１１−ｉ（ｉ＝２〜Ｎの任意の自然数）が複数のモータコマンドからなる動作シーケンスを生成する。動作モジュール１１−ｉが生成した動作シーケンスに所属する全てのモータコマンドは、例えば表２に示す如きデータ構造を有し、モータコマンド制御モジュール１２３にモータ１２４−１〜１２４−Ｎ毎に、且つ、開始時刻順に通知される。モータコマンド制御モジュール１２３では、モータコマンド受信部３１がモータコマンドを受け付け、該当するモータを識別するモータＩＤと送信元の動作モジュール（この場合は動作モジュール１１−ｉ）毎のモータコマンドキュー格納部２３３−ｉのモータコマンドキューにモータコマンドを振り分けてモータコマンドの開始時刻順（受け付けた順）に格納する。一方、管理情報受信部３５は、シーケンスＩＤを受け付けて、シーケンス情報管理部３６に通知する。
【００３８】
【表２】
0005445312.tif 000003
【００３９】
モータコマンド制御部３４は、モータコマンドキューからモータコマンドを取り出し、シーケンス情報管理部３６が管理している例えば表３に示す如きデータ構造を有するシーケンス情報（シーケンスＩＤと動作シーケンスの開始時刻の対応付け）及び動作調停情報管理部３２が管理している動作調停情報(動作モジュールと優先度の対応付け)を必要に応じて参照しながら、上記の手順に従ったモータコマンドを該当するモータに送信する。表４は、動作調停情報のデータ構造の一例を示す。
【００４０】
【表３】
0005445312.tif 000004
【００４１】
【表４】
0005445312.tif 000005
【００４２】
次に、図３に示すモータコマンド制御部１２３の動作を、図６と共に説明する。図６は、本実施例におけるモータコマンド制御部１２３の動作を説明するフローチャートである。モータコマンド制御部１２３を形成するＣＰＵは、例えば周期的に図６に示す動作制御処理を行うことでモータコマンド制御部１２３が実行する各手順を実行する。
【００４３】
図６において、ステップＳ１では、任意の動作モジュール１１−ｉからのシーケンスＩＤを受け付けた管理情報受信部３５が現在時刻Ｔを例えばＣＰＵの内部時計（又は、タイマー）から取得する。ステップＳ２では、管理情報受信部３５がシーケンス情報管理部３６に現在時刻Ｔを通知し、シーケンス情報管理部３６は管理しているシーケンスＩＤの中に開始時刻が設定されていないシーケンスＩＤがあれば現在時刻Ｔを開始時刻として設定する。ステップＳ２の後、全てのモータ１２４−１〜１２４−Ｎに対して以下の処理を実行してモータ１２４−１〜１２４−Ｎを制御する。
【００４４】
ステップＳ３では、モータコマンド制御部３４が１つのモータを選択してそのモータＩＤを決定する。ステップＳ４では、モータコマンド制御部３４が動作調停情報管理部３２から優先するべき１つの動作モジュール、即ち、未処理で一番優先度の高い動作モジュール名を取得する。ステップＳ５では、モータコマンド制御部３４が実行するべきモータコマンドを出力した動作モジュールが取得できたか否かを判定し、判定結果がＮＯであると処理はステップＳ３へ戻る。ステップＳ５の判定結果がＹＥＳであると、ステップＳ６では、モータコマンド制御部３４がモータＩＤと動作モジュール名を指定して該当するモータコマンドキュー格納部に格納されたモータコマンドキューからモータコマンドを１つ取得する。各モータコマンドキュー格納部２３３−１〜２３３−Ｎのモータコマンドキューには、データコマンド受信部３１がモータコマンドを受け付け、該当するモータＩＤと送信元の動作モジュール毎のモータコマンドキューにモータコマンドを振り分けたモータコマンドの開始時刻順（受け付けた順）にモータコマンドが格納されている。
【００４５】
ステップＳ７では、モータコマンド制御部３４がモータＩＤと動作モジュール名を指定して該当するモータコマンドキュー格納部に格納されたモータコマンドキューからモータコマンドを１つ取得できたか否かを判定し、判定結果がＮＯであると処理はステップＳ４へ戻る。一方、ステップＳ７の判定結果がＹＥＳであると、ステップＳ８では、モータコマンド制御部３４がシーケンス情報管理部３６からモータコマンドのシーケンスＩＤを指定して動作シーケンスの開始時刻ＴＳを取得する。ステップＳ９では、モータコマンド制御部３４がＴ＜ＴＳ＋「相対動作終了時刻」であるか否かを判定する。ステップＳ９の判定結果がＮＯであると、ステップＳ１０では、モータコマンド制御部３４がモータコマンドをモータコマンドキューから削除し、処理はステップＳ６へ戻る。ステップＳ９の判定結果がＹＥＳであると、ステップＳ１１では、モータコマンド制御部３４がＴ＞ＴＳ＋「相対動作開始時刻」であるか否かを判定し、判定結果がＮＯであると処理はステップＳ４へ戻る。ステップＳ１１の判定結果がＹＥＳであると、処理はステップＳ１３へ進む。
【００４６】
ステップＳ１３では、モータコマンド制御部３４がモータコマンドがカレントコマンド（現在のコマンド）と同じであるか否かを判定し、判定結果がＹＥＳであると処理は後述するステップＳ１５へ進み、判定結果がＮＯであると処理はステップＳ１３へ進む。ステップＳ１３では、モータコマンド制御部３４がカレントコマンドを更新する。ステップＳ１４では、モータコマンド制御部３４が、現在時刻ＴからＴＳ＋「相対動作終了時刻」までに目標角度に到達するように該当するモータを制御する。ステップＳ１５では、モータコマンド制御部３４が全てのモータ１２４−１〜１２４−Ｎに対する処理が終了したか否かを判定し、判定結果がＮＯであると処理はステップＳ３へ戻る。一方、ステップＳ１５の判定結果がＹＥＳであると、ステップＳ１６では、モータコマンド制御部３４が一定時間待機した後、処理はステップＳ１へ戻る。
【００４７】
このようにして、ステップＳ３で処理の対象となるモータが決定されると、ステップＳ４で未処理で一番優先度の高い動作モジュール名を取得する。このモータＩＤと動作モジュール名をステップＳ３で指定して、ステップＳ４でモータコマンドキューからモータコマンドを1つ取得する。該当する動作モジュールから該当するモータへのモータコマンドが送られていない場合には、該当するモータコマンドキューは空でありステップＳ７でモータコマンドが取得できないため、ステップＳ４で次に優先度の高い動作モジュールから探す。全ての優先度の動作モジュールを処理してもステップＳ５で処理するべきモータコマンドが見つからない場合には、ステップＳ５で次に実行するべき動作モジュールが見つからず、このモータの処理を終了して次のモータの処理を行う。
【００４８】
又、モータコマンドが所属する動作シーケンスのシーケンスＩＤを指定して、シーケンス情報管理部から、動作シーケンスの開始時間ＴＳをステップＳ８で取得する。動作シーケンスの開始時刻と、モータコマンドが持つ相対動作終了時刻から、モータコマンドの動作終了時刻を計算し、ステップＳ９で現在時刻Ｔが既に動作終了時刻を過ぎている場合には、ステップＳ１０でモータコマンドキューから該当するモータコマンドを削除し、ステップＳ８で次のモータコマンドを取得する。
【００４９】
更に、動作シーケンスの開始時刻と、モータコマンドが持つ相対動作開始時刻から、モータコマンドの動作開始時刻をステップＳ１１で計算する。現在時刻Ｔがまだ動作開始時刻に達していない場合には、この時間帯に、該当する動作モジュールから該当するモータへの動作指示が来ていないためステップＳ４で次に優先度の高い動作モジュールを探す。モータコマンドが実行するべきと決定した場合には、ステップＳ１４でモータを制御する指示をモータに出力する。ただし、ステップＳ１２で現在実行中のモータコマンド（カレントコマンド）と同じである場合には、モータへの指示を省略しても良い。ステップＳ１２で現在実行中のモータコマンドと異なる場合には、ステップＳ１３でカレントコマンドを新たなモータコマンドに更新し、ステップＳ１４でモータを制御する指示をモータに出力する。モータへの指示は、現在時刻から動作終了時刻までに目標角度に到達するようにモータを制御する。
【００５０】
次に、例えば上記実施例を採用したロボットシステムアーキテクチャの一例を、図７及び図８と共に説明する。図７は、ロボットシステムアーキテクチャの一例を示すブロック図であり、図８は、図７のロボットシステムアーキテクチャにおける調停を説明する図である。
【００５１】
図７中、図１と同一部分には同一符号を付し、その説明は省略する。図７に示すロボットシステムアーキテクチャは、複数の動作モジュール１１−１〜１１−Ｎ、ロボット（又は、ロボットモジュール）１２、複数のイベント検出モジュール１５−１〜１５−Ｎ、及び動作調停モジュール１６がイベント配信システム１７に接続された構成を有する。イベント検出モジュール１５−１〜１５−Ｎは、ロボット１２が影響を受けるイベントを検出する。イベント配信システム１７は、汎用サーバで形成可能である。
【００５２】
尚、各モジュール１１−１〜１１−Ｎ，１５−１〜１５−Ｎ，１６は、ロボット１２内に設けられていても、イベント配信サーバ１７が接続されているネットワーク上に設けられていても良い。又、ロボット１２内の複数のセンサ１２１のうち、少なくとも一部のセンサ１２１はロボット１２の外に設けられて外部接続された構成を用いることもできる。
【００５３】
各モジュール１１−１〜１１−Ｎ，１２，１５−１〜１５−Ｎ，１６はイベント配信システム１７を通して繋がっており、各動作モジュール１１−１〜１１−Ｎが検知した情報をイベントとして公開（publish）する。又、各モジュール１１−１〜１１−Ｎ，１５−１〜１５−Ｎ，１６の処理に必要な情報は、イベント配信システム１７に対して購読（subscribe）を要求することによりイベントの通知を受けることで取得可能である。又、各動作モジュール１１−１〜１１−Ｎは、イベントを受け取り、最終的にはモータコマンドを生成する。ロボット１２内のモータコマンド制御モジュール１２３は、各動作モジュール１１−１〜１１−Ｎからのモータコマンドと、動作調停モジュール１６からの調停の指針（又は、調停ルール）を受け取り、最終的なモータへの指令を決定する。イベント配信システム１７は、例えばＪＭＳ（Java Messaging Service）等の周知技術を利用可能である。
【００５４】
各動作モジュールは、他の動作モジュールの動作を知る必要はなく（他の動作モジュールの動作結果等をイベントとして受け取っても良いが）、独立しているため、開発効率が高くなる。ただし、各動作モジュールは互いの動作を知らないため、矛盾するモータ指令を出すこともあるが、動作調停モジュール１６が調停の指針をモータコマンド制御モジュール１２３に通知すれば良い。調停の指針の通知方法としては、動作モジュール毎の優先度を与え、モータコマンド制御モジュール１２３が優先度に応じて動作を変更するようにしても良い。優先度は、動作調停モジュール１６により動的に変更可能である。このようなロボットシステムアーキテクチャを構成することで、各動作モジュール１１−１〜１１−Ｎの独立性が高まり、開発が容易になると共に、拡張性も向上する。
【００５５】
又、１つのイベント配信システム１７に複数のロボットを接続しても良い。この場合、ロボット同士の掛け合い等、ロボット間の連携を取るような動作モジュールが実現可能となる。
【００５６】
図８は、説明の便宜上図７のロボット１２内に３つのモータが設けられている場合の調停を説明する図である。図８中、細い実線の矢印は動作モジュールからのモータコマンドを示し、太い実線の矢印は実行されるモータコマンドを示し、破線の矢印は上記の方法２を採用した場合に実行されるモータコマンドを示す。又、この例では、優先度が動的にＰ１，Ｐ２，Ｐ３と３段階に変更されるものとする。
【００５７】
モータ１２４−１の場合、上記の方法２では動作モジュール１１−２がモータコマンドを登録した時点では動作中の動作モジュール１１−１の方が優先度が高く、動作モジュール１１−２のモータコマンドは破棄される。このため、その後動作モジュール１１−２の優先度が高くなった際に動作モジュール１１−２の動作を実行できない。これに対し、本実施例では、適切に優先度によって動作を切り替えることができる。
【００５８】
モータ１２４−２の場合、上記の方法２は動作モジュール１１−３のモータコマンドを実行中に優先度の高い動作モジュール１１−１のモータコマンドに上書きされ、動作モジュール１１−３のモータコマンドが破棄される。その後動作モジュール１１−１のモータコマンドが終了した後に、既にモータコマンドが破棄されてしまっているため、動作モジュール１１−３のモータコマンドが実行できない。これに対し、本実施例では、適切に再開することができる。
【００５９】
モータ１２４−３の場合、上記の方法２では動作モジュール１１−３からのモータコマンドは、既に優先度が高いモータコマンドの実行中のため破棄され、その後動作モジュール１１−２からの動作コマンドが一瞬途切れるが、その間に、動作モジュール１１−３のモータコマンドを実行することはできない。この様な場合には、ロボットの動きが一瞬停止することになり、不自然な動作となってしまう。これに対し、本実施例では、この様な間に優先度の低い動作を実行することができる。
【００６０】
上記の如く、本実施例によれば、複数の動作モジュールからの動作シーケンスを自然に切り替えたり再開したりすることができる。又、各動作モジュールは独立して開発可能であり、開発効率を向上できる。この結果、より自然な動作を行うコミュニケーションロボットを効率よく開発できる。
【００６１】
例えば、ロボットが音楽に合わせて動作（ダンス）をしているときに、ユーザから話しかけられてユーザの相手をして、その後ダンスを再開するような動きを、音楽に合わせて動作する動作モジュールと、インタラクションを行う動作モジュールを夫々作成することにより、比較的簡単に実現できる。更に様々な動作モジュールを作成することにより、自然な動きを行うロボットの動作を効率よく実現できる。又、ロボットの周囲環境の状態やロボットとユーザ間のインタラクション（例えば、会話）の文脈等に合わせて動作モジュールの優先度を変更することにより、ロボットにより複雑な動作を自然に行わせることができる。
【００６２】
次に、上記実施例の第１変形例を図９と共に説明する。図９は、第１変形例における調停を説明するブロック図である。図９中、図３と同一部分には同一符号を付し、その説明は省略する。
【００６３】
本変形例では、動作調停情報管理部３２が管理する表４の動作調停情報を各時刻で動的に変更される。例えば、動作モジュール１１−１〜１１−Ｎの中に、ロボット１２がユーザとのアイコンタクトを行う動作モジュール１１−１と、ロボット１２が眠そうな仕草等の自発的な振る舞いを行う動作モジュール１１−２が含まれている場合、ロボット１２とユーザとの間のインタラクション（例えば、会話）の文脈によってどちらを行うべきかを動作調停モジュール１６が決定して、動作調停情報管理部３２が管理している表４の動作調停情報の優先度を動的に変更することにより、ロボット１２のより自然な動作の切り替えが実現可能となる。
【００６４】
次に、上記実施例の第２変形例を図１０と共に説明する。図１０は、動作調停情報管理部３２が管理する動作調停情報を示す図である。
【００６５】
本変形例では、動作調停情報管理部３２が管理する表４の動作調停情報を、動作調停モジュール１６が図１０に示すようにモータ単位でモジュール毎に管理する。つまり、モータ毎に優先度を変更することができ、モータＩＤと優先度を指定することで動作モジュールを取得することもできる。これにより、ロボット１２のより細かな動作調停が可能となる。同じ動作シーケンスでも、例えばモータによって動作の重要度が異なる場合等、細かな制御が可能になる。尚、本変形例においても上記第１変形例と同様に動作調停情報を動的に変更する場合、より複雑な動作が生成できる一方、動作調停モジュール１６自体はより複雑になる。
【００６６】
次に、上記実施例の第３変形例を、図１１と共に説明する。図１１は、第３変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図１１中、図６と同一ステップには同一符号を付し、その説明は省略する。
【００６７】
本変形例では、モータコマンド制御モジュール１２３内のモータコマンド制御部３４がモータコマンドを実行する際に、モータ毎に角速度の限界値（最大角速度）を設定し、ロボット１２の動作の切り替わりを人から見て自然となるように円滑に行わせる。モータコマンド制御部３４内には、例えば表５の如き最大角速度を設定するテーブルが格納されている。
【００６８】
【表５】
0005445312.tif 000006
【００６９】
モータコマンド制御部３４は、図６のステップＳ１４の代わりに、図１１のステップＳ２１〜Ｓ２３を行う。ステップＳ２１は、ステップＳ１３の後に行われる。ステップＳ２１では、｛「目標角度」−「現在角度」｝／｛ＴＳ＋「相対動作終了時刻」−Ｔ｝＞「該当モータの最大角速度」であるか否かを判定する。ステップＳ２１の判定結果がＹＥＳであるとであると、ステップＳ２２では、現在時刻ＴからＴＳ＋相対動作終了時刻まで目標角度に向かって最大角速度で動作するように該当モータを制御する指示を出力する。一方、ステップＳ２１の判定結果がＮＯであると、ステップＳ２３では、現在時刻ＴからＴＳ＋相対動作終了時刻までに目標角度に到達するように該当モータを制御する指示を出力する。ステップＳ２２又はステップＳ２３の後、処理はステップＳ１５へ進む。
【００７０】
動作シーケンスが切り替わる際に、モータの開始位置がわからないため、ロボットが急激な動作を行ってしまう場合がある。本変形例では、このような不都合を防ぐために、モータ毎に最大角速度を設定しておき、この最大角速度を超えない範囲で動作するように各モータを制御する。これにより、切り替わった直後のモータコマンドは該当モータを目標角度まで到達させずに処理が次のモータコマンドに進んでしまうこともあるが、そのような過渡期を経て最終的には切り替わった動作を行うことができ、ロボットの動作をより自然にを切り替えることができる。
【００７１】
次に、上記実施例の第４変形例を、図１２と共に説明する。図１２は、第４変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図１２中、図１１と同一ステップには同一符号を付し、その説明は省略する。
【００７２】
本変形例では、角速度の限界値（最大角速度）を動的に変更可能とする。最大角速度を変更することにより、ロボットに緩慢な動作（眠そうな動作）等を行わせ、ロボットの動作に変化をつけることができる。例えば、上記の表５のテーブルは動作調停情報管理部３２が管理し、図９のように動作調停モジュール１６が動作調停情報の最大角速度のテーブルを変更する。
【００７３】
モータコマンド制御部３４は、図１１のステップＳ１２，Ｓ１３の代わりに、図１２のステップＳ３１〜Ｓ３３を行う。ステップＳ３１は、ステップＳ１１の判定結果がＹＥＳであると行われる。ステップＳ３１では、動作調停情報管理部３２のテーブルから該当モータの最大角速度を取得する。ステップＳ３２では、モータコマンドが可憐とコマンドと同じ、且つ、最大角速度が変化していないか否かを判定する。ステップＳ３２の判定結果がＹＥＳであると処理はステップＳ１５へ進み、判定結果がＮＯであると処理はステップＳ３３へ進む。ステップＳ３３では、カレントコマンド及び最大角速度を更新し、処理はステップＳ２１へ進む。
【００７４】
尚、ステップＳ３２において、最大角速度が変化していないか否かを判定しなくても良い。この場合、変更した最大角速度が適用されるのは現在実行中のモータコマンドの動作が終了した後となる。
【００７５】
次に、上記実施例の第５変形例を表６及び図１３と共に説明する。表６は、シーケンス情報のデータ構造の一例を示す。
【００７６】
動作モジュールがシーケンス情報管理部３６にシーケンスＩＤを通知する際に、動作シーケンスの相対時刻を指定し、シーケンス情報管理部３６が動作シーケンスの開始時刻を決定する際に指定された相対時刻を減算することにより、指定した動作シーケンスを相対時刻から開始することができる。
【００７７】
【表６】
0005445312.tif 000007
【００７８】
つまり、本変形例では、動作モジュールから動作シーケンス指定して、途中からの再生を指示する機能を持たせる。具体的には、シーケンス情報を動作モジュールがシーケンス情報管理部３６に通知する際に、動作シーケンス開始場所（動作シーケンスの相対時刻）を同時に通知する。シーケンス情報管理部３６では、表６の如きシーケンス情報を管理しており、動作シーケンス開始時刻を設定する際に、動作シーケンス開始場所（動作シーケンスの相対時刻）を減算した値を動作シーケンス開始時刻に設定する。その後は、上記実施例と同様に処理を進めるだけで、動作シーケンスの途中からの再生が可能となる。
【００７９】
図１３は、第５変形例におけるモータコマンド制御部の動作を説明するフローチャートである。図１３中、図６と同一ステップには同一符号を付し、その説明は省略する。
【００８０】
本変形例では、モータコマンド制御部３４は、図６のステップＳ２の代わりに、図１３のステップＳ４１を行う。ステップＳ４１は、ステップＳ１の後に行われる。ステップＳ４１では、モータコマンド制御部３４がシーケンス情報管理部３６に現在時刻Ｔを通知し、シーケンス情報管理部３６は管理しているシーケンスＩＤの中に開始時刻が設定されていないシーケンスＩＤがあれば「現在時刻Ｔ」−「動作シーケンス開始場所」を開始時刻として設定する。ステップＳ４１の後、処理はステップＳ３へ進む。
【００８１】
次に、上記実施例の第６変形例を、図１４と共に説明する。図１４は、シーケンス情報管理部３６に停止又は中断の指示があった場合の詳細な処理の一例を説明するフローチャートである。
【００８２】
動作モジュールが動作シーケンスを停止又は中断したい場合、動作モジュールはシーケンスＩＤを指定して、シーケンス情報管理部３６に中断を指示する。シーケンス情報管理部３６は、動作シーケンスの停止又は中断コマンドを受信すると、シーケンス情報管理部３６が管理している動作シーケンスの開始時刻を０等のできる限り小さい値（できるだけ古い時刻）に変更することにより、動作シーケンスを中断することができる。モータコマンド制御部３４は、上記ステップＳ８で、シーケンス開始時刻ＴＳを取得する際に、古い時刻を受け取り、同一シーケンスのその後の処理はステップＳ９の判定結果がＮＯになるため実行しない。
【００８３】
尚、動作シーケンスが中断されたか否かを示すフラグをシーケンス情報管理部３６で管理し、モータコマンドの実行を決定する際に、このフラグを問い合わせることにより動作シーケンスを中断するようにしても良いことは言うまでもない。。
【００８４】
図１４において、ステップＳ５１では、動作モジュールがシーケンスＩＤを指定して、モータコマンド制御モジュール１２３に停止を指示する。ステップＳ５２では、指示を受け取ったシーケンス情報管理部３６が、該当動作シーケンスの動作シーケンス開始時刻を上記の如くできるだけ古い時刻に変更する。
【００８５】
上記実施例及び各変形例では、動作シーケンスを、個々のモータコマンド単位と、シーケンス情報に分けて通信しているが、動作シーケンスの通信方法はこれに限定されるものではない。つまり、図４の動作シーケンスの情報を一度のコマンドとして送り、モータコマンド受信部側で動作シーケンスを個々のモータコマンドとシーケンス情報に分けて格納するようにしても良い。
【００８６】
図１５は、ロボットシステムの他の例を示すブロック図である。図１５に示すロボットシステム５２は、定型動作を行う動作モジュールであるアプリケーション５１からのモータコマンドを受信する。ロボットシステム５２は、生き物らしい振る舞いモジュール５２１、生き物らしい反応モジュール５２２、その他のモジュール５２３と、ロボット５２４を有する。その他のモジュール５２３には、例えば図７のイベント検出モジュール１５−１〜１５−Ｎや動作調停モジュール１６等が含まれ、更にセンサ情報通知モジュール１２２等が含まれても良い。ロボット５２４は、モータコマンド制御モジュール５２５を有する。ロボット５２４は、上記いずれかの実施例又は変形例と同様の構成を有するものであり、センサ、センサ情報通知モジュール及びモータの図示は省略する。モータコマンド制御モジュール５２５は、モータコマンド制御モジュール１２３に相当する。
【００８７】
本実施例では、ロボットに例えば体操動作のような定型動作を行わせるアプリケーション（又は、動作モジュール）５１からのモータコマンドをモータコマンド制御モジュール５２５に入力すると、モジュール５２１〜５２３等からのモータコマンドと適切な調停が行われる。このため、アプリケーション５１からのモータコマンドのみに基づくモータ制御を行ったのではロボット５２４動作が機械的な定型動作となるところが、アプリケーション５１からのモータコマンドと生き物らしい（或いは、人らしい）動作を行わせるモジュール５２１〜５２３からのモータコマンドの調停を行うことで、ロボット５２４の定型動作を人から見て自然で違和感のない円滑な動作（生き物らしい、或いは、人らしい動作）に変換できる。従って、定型動作を行わせるアプリケーション（又は、動作モジュール）５１が予め用意されているような場合に、アプリケーション５１自体に変更を加えることなく、その定型動作を人から見て自然で違和感のない円滑な動作に変換することができる。
【００８８】
上記各実施例及び変形例では、本発明がロボットに適用されているが、上記実施例は各種インタラクティブデバイスに適用可能であることは言うまでもない。例えば、インタラクティブデバイスには、各種電子装置や各種家庭用電気製品（所謂、家電）が含まれる。家電には、複数の駆動部により画面を水平面上で回転させたり垂直面に対してチルトさせたりして画面を視聴者の方向に向ける機能を備えたインタラクティブテレビジョン装置、複数の駆動部により送風方向や送風強度を利用者の位置や利用者の数に応じて制御する機能を備えたインタラクティブ空調機器（エアコン）等が含まれる。
【００８９】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
コンピュータにより複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させる動作制御方法であって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、動作制御方法。
（付記２）
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記１記載の動作制御方法。
（付記３）
現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記１又は２記載の動作制御方法。
（付記４）
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも１つの手順を前記コンピュータに更に実行させる、付記１乃至３のいずれか１項記載の動作制御方法。
（付記５）
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記１乃至４のいずれか１項記載の動作制御方法。
（付記６）
複数の駆動部と、
複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドにより前記複数の駆動部を動作させるコマンド制御モジュールと、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部を備え、
前記コマンド制御モジュールは、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付け、
前記コマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出し、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する、インタラクティブデバイス。
（付記７）
前記シーケンス情報を管理するシーケンス情報管理部と、
前記動作調停情報を管理する動作調停情報管理部を更に備えた、付記６記載のインタラクティブデバイス。
（付記８）
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記６又は７記載のインタラクティブデバイス。
（付記９）
前記コマンド制御モジュールは、現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記６乃至８のいずれか１項記載のインタラクティブデバイス。
（付記１０）
前記動作調停情報管理部内の前記動作調停情報を各時刻で動的に変更する動作調停モジュールを更に備えた、付記７項記載のインタラクティブデバイス。
（付記１１）
前記駆動部毎に優先度を変更するように前記動作調停情報管理部内の前記動作調停情報を変更する動作調停モジュールを更に備えた、付記７記載のインタラクティブデバイス。
（付記１２）
前記駆動部の速度の限界値を動的に変更するように前記動作調停情報管理部内の前記動作調停情報を変更する動作調停モジュールを更に備えた、付記７記載のインタラクティブデバイス。
（付記１３）
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記６乃至１２のいずれか１項記載のインタラクティブデバイス。
（付記１４）
コンピュータに、複数の動作モジュールを切り替えながら前記複数の動作モジュールからのコマンドによりインタラクティブデバイスの複数の駆動部を動作させるプログラムであって、
任意の動作モジュールが生成した動作シーケンスに所属する複数のコマンドを、前記複数の駆動部毎に、且つ、前記複数のコマンドの開始時刻順に受け付ける手順と、
各駆動部に対するコマンドキューが動作モジュールの単位で格納されたコマンドキュー格納部から前記任意の動作モジュールに該当するコマンドキューのコマンドを取り出す手順と、
各動作シーケンスを識別する情報と各動作シーケンスの開始時刻の対応付けを含むシーケンス情報及び各動作モジュールと各動作モジュールの優先度の対応付けを含む動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順
を前記コンピュータに実行させる、プログラム。
（付記１５）
各コマンドの情報は、駆動部を識別するための情報、駆動部の目標位置、動作シーケンス開始時刻からの相対時刻でコマンドの動作開始時刻と動作終了時刻、及びコマンドが所属する動作シーケンスを識別するための情報を含み、
各コマンドは、各動作モジュールから各駆動部毎に開始時刻順に送られ、開始時刻の順番に該当するコマンドキューに格納される、付記１４記載のプログラム。
（付記１６）
現在時刻から各コマンドの終了時刻までに該当する駆動部が目標位置まで到達するように各駆動部を制御し、各コマンドキューに格納されている各コマンドは動作終了時刻が過ぎるまでは破棄しない、付記１４又は１５記載のプログラム。
（付記１７）
前記動作調停情報を各時刻で動的に変更する手順、前記駆動部毎に優先度を変更する手順、及び前記駆動部の速度の限界値を動的に変更する手順のうち少なくとも１つの手順を前記コンピュータに更に実行させる、付記１４乃至１６のいずれか１項記載のプログラム。
（付記１８）
前記任意の動作モジュールは、
前記シーケンス情報を通知する際に動作シーケンス開始場所を同時に通知し、
前記動作シーケンス開始時刻を設定する際に、前記動作シーケンス開始場所を減算した値を動作シーケンス開始時刻に設定する、付記１４乃至１７のいずれか１項記載のプログラム。
（付記１９）
前記インタラクティブデバイスはロボットであり、
前記任意の動作モジュールは、該当する駆動部を制御して前記ロボットに定型動作を行わせるモジュールであり、
前記複数の動作モジュールのうち前記任意の動作モジュール以外の動作モジュールは、該当する駆動部を制御して前記ロボットに生き物らしい動作を行わせるモジュールであり、
前記動作調停情報に基づいて取り出したコマンドを実行して該当する駆動部を制御する手順は、前記任意の動作モジュールのコマンドと前記任意の動作モジュール以外の動作モジュールのコマンドを前記動作調停情報に基づいて調停することにより、前記ロボットに定型動作を生き物らしく行わせる、付記１４乃至１８のいずれか１項記載のプログラム。
（付記２０）
付記１６乃至１９のいずれか１項記載のプログラムを格納した、コンピュータ読み取り可能な記憶媒体。
【００９０】
以上、開示の動作制御方法、インタラクティブデバイス及びプログラムを実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【００９１】
１１−１〜１１−Ｎ      動作モジュール
１２      ロボット
１６      動作調停モジュール
３１      モータコマンド受信部
３２      動作調停情報管理部
３３−１〜３３−Ｎ      モータコマンドキュー格納部
３４      モータコマンド制御部
３５      管理情報受信部
３６      シーケンス情報管理部
１２１      センサ
１２２      センサ情報通知モジュール
１２３      モータコマンド制御モジュール
１２４，１２４−１〜１２４−Ｎ      モータ
【図１】
0005445312.tif 000008
【図２】
0005445312.tif 000009
【図３】
0005445312.tif 000010
【図４】
0005445312.tif 000011
【図５】
0005445312.tif 000012
【図６】
0005445312.tif 000013
【図７】
0005445312.tif 000014
【図８】
0005445312.tif 000015
【図９】
0005445312.tif 000016
【図１０】
0005445312.tif 000017
【図１１】
0005445312.tif 000018
【図１２】
0005445312.tif 000019
【図１３】
0005445312.tif 000020
【図１４】
0005445312.tif 000021
【図１５】
0005445312.tif 000022