(57)【要約】  可動部を有する自律動作装置の制御プログラムの開発に利用され又は開発を支援する情報処理装置を提供する。  可動部を含む制御対象装置の制御プログラムを処理する情報処理装置は、前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算部と、前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持部と、を具備し、前記理想状態を付加して前記制御プログラムを出力する。
2019097793.tif 000002
【特許請求の範囲】
【請求項１】
可動部を含む制御対象装置の制御プログラムを処理する情報処理装置であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算部と、
前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持部と、
を具備し、前記理想状態を付加して前記制御プログラムを出力する、情報処理装置。
【請求項２】
前記演算部は、前記制御プログラムに従った前記制御対象装置の物理挙動を演算する、
請求項１に記載の情報処理装置。
【請求項３】
時間毎の理想状態の前記制御対象装置を表示装置に表示させる表示部をさらに備える、
請求項１に記載の情報処理装置。
【請求項４】
理想状態は、前記制御対象装置の状態を示す複数の状態パラメータからなり、
時間毎の理想状態の各状態パラメータの変更の指示を受け付ける入力部をさらに備え、
前記入力部が受け付けた指示に従って状態パラメータを修正した後の前記理想状態を付加して前記制御プログラムを出力する、
請求項１に記載の情報処理装置。
【請求項５】
前記制御対象装置は、床上を移動する移動装置であり、
前記移動装置の理想状態は、前記移動装置本体の姿勢又は傾き、移動方向、移動距離、又は移動速度のうち少なくとも１つの状態パラメータを含む、
請求項１に記載の情報処理装置。
【請求項６】
可動部を含む制御対象装置を制御プログラムに従って制御する情報処理装置であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部と、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部と、
を具備する情報処理装置。
【請求項７】
前記評価部は、前記制御対象装置の実際の状態と前記理想状態の差異の原因を特定する、
請求項６に記載の情報処理装置。
【請求項８】
理想状態は、前記制御対象装置の状態を示す複数の状態パラメータからなり、
前記状態取得部は、状態パラメータ毎の前記制御対象装置の状態を取得し、
前記評価部は、状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態を比較した結果に基づいて、前記差異の原因を特定する、
請求項７に記載の情報処理装置。
【請求項９】
前記制御対象装置は、床上を移動する移動装置であり、
前記状態パラメータは、前記移動装置本体の姿勢又は傾き、移動方向、移動距離、又は移動速度のうち少なくとも１つを含む、
請求項８に記載の情報処理装置。
【請求項１０】
状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態の差異をその原因と関連付けて記憶するデータベースをさらに備え、
前記評価部は、前記データベースを参照して、前記制御対象装置の実際の状態と前記理想状態の差異の原因を特定する、
請求項８又は９のいずれかに記載の情報処理装置。
【請求項１１】
前記評価部による評価結果をユーザに通知する通知部をさらに備える、
請求項６に記載の情報処理装置。
【請求項１２】
前記通知部は、前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザに通知する、
請求項１１に記載の情報処理装置。
【請求項１３】
前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザへの通知内容を関連付けて記憶するデータベースをさらに備え、
前記通知部は、前記データベースを参照して、前記評価部が特定した原因に関連付けられた通知内容を用いてユーザへの通知を行なう、
請求項１２に記載の情報処理装置。
【請求項１４】
前記通知部は、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知方法を制御する、
請求項１１に記載の情報処理装置。
【請求項１５】
前記通知部は、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知内容、通知タイミング、又は通知頻度のうち少なくとも１つを制御する、
請求項１１に記載の情報処理装置。
【請求項１６】
前記通知部は、複数のモダリティを有し、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知に使用するモダリティを選択する、
請求項１１に記載の情報処理装置。
【請求項１７】
前記制御対象装置に関連付けられた属性情報は、前記制御対象装置に関連付けられたキャラクター性、個性、性格、内部状態又は感情、ユーザの状態、周囲環境のうち少なくとも１つを含む、
請求項１４に記載の情報処理装置。
【請求項１８】
可動部を含む制御対象装置を制御プログラムに従って制御する情報処理方法であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得ステップと、
前記状態取得ステップにおいて取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価ステップと、
を有する情報処理方法。
【請求項１９】
可動部を含む制御対象装置を制御プログラムに従って制御するための処理をコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部、
として機能させるコンピュータ・プログラム。
【請求項２０】
可動部を含む制御対象装置の制御プログラムを製造するプログラム製造方法であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算ステップと、
前記演算ステップによる演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持ステップと、
を有し、前記理想状態を付加して前記制御プログラムを出力する、プログラム製造方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する技術は、可動部を有する自律動作装置の制御プログラムの開発に利用され又は開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法に関する。
【背景技術】
【０００２】
近年のロボティクス技術の進歩は目覚ましく、さまざまな産業分野の作業現場に広く浸透してきている。ロボットは、例えば複数のリンクとリンク間を接続する関節で構成される。そして、モータなどの関節駆動用のアクチュエータを用いて各節を駆動することによって、ロボットは動作する。【０００３】
例えば、キーフレームを用いたロボットやアニメーションのキャラクターの動作編集方法が知られている。具体的には、ある区間の動作の開始時並びに終了時などのキーフレームにおける関節部などの各可動部の位置（関節角度）や速度などの目標値からなるデータセットをＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）画面上で指定し、「Ｘ秒かけて関節をＹ度からＺまで動かす」というような、直感的で分かり易い動作の編集を行なうことができる。【０００４】
キーフレームなどを利用したロボットのモーション・データには、基本的には、各関節角度などのアクチュエータの動きや制御情報のみが定義されている。言い換えれば、ロボットの実機上でモーション・データを再生させた結果として引き起こされる状態に関する情報はモーション・データには含まれていない。【０００５】
例えば、実機上でモーション・データを再生して、その結果得られるセンサ情報をツール上にフィードバックしてモーション・データの修正に活用するモーション編集装置について提案がなされている（例えば、特許文献１を参照のこと）。【０００６】
また、実機に対する各関節角度の指令値と実際のアクチュエータの角度との差に基づいて外力を検出するロボット装置についても提案がなされている（例えば、特許文献２を参照のこと）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−１４８４９２号公報
【特許文献２】特開２００３−１５９６７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本明細書で開示する技術の目的は、可動部を有する自律動作装置の制御プログラムの開発に利用され又は開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法を提供することにある。
【課題を解決するための手段】
【０００９】
本明細書で開示する技術の第１の側面は、可動部を含む制御対象装置の制御プログラムを処理する情報処理装置であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算部と、
前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持部と、
を具備し、前記理想状態を付加して前記制御プログラムを出力する、情報処理装置である。【００１０】
理想状態は、前記制御対象装置の状態を示す複数の状態パラメータからなる。前記制御対象装置が床上を移動する移動装置の場合、前記移動装置の理想状態は、前記移動装置本体の姿勢又は傾き、移動方向、移動距離、又は移動速度のうち少なくとも１つの状態パラメータを含む。また、前記情報処理装置は、時間毎の理想状態の各状態パラメータの変更の指示を受け付ける入力部をさらに備え、前記入力部が受け付けた指示に従って状態パラメータを修正した後の前記理想状態を付加して前記制御プログラムを出力する。【００１１】
また、本明細書で開示する技術の第２の側面は、可動部を含む制御対象装置を制御プログラムに従って制御する情報処理装置であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部と、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部と、
を具備する情報処理装置である。【００１２】
前記状態取得部は、理想状態の状態パラメータ毎の前記制御対象装置の状態を取得する。そして、前記評価部は、状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態を比較した結果に基づいて、前記差異の原因を特定する。前記情報処理装置は状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態の差異をその原因と関連付けて記憶するデータベースをさらに備え、前記評価部は、前記データベースを参照して、前記制御対象装置の実際の状態と前記理想状態の差異の原因を特定するようにしてもよい。【００１３】
また、前記情報処理装置は、前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザに通知する通知部をさらに備えている。前記情報処理装置は、前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザへの通知内容を関連付けて記憶するデータベースをさらに備えている。そして、前記通知部は、前記データベースを参照して、前記評価部が特定した原因に関連付けて記憶された通知内容を用いてユーザへの通知を行なう。【００１４】
また、前記通知部は、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知内容、通知タイミング、又は通知頻度を制御する。前記制御対象装置に関連付けられた属性情報は、前記制御対象装置に関連付けられたキャラクター性、個性、性格、内部状態又は感情、ユーザの状態、周囲環境などである。前記通知部は、複数のモダリティを有し、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知に使用するモダリティを選択するようにしてもよい。【００１５】
また、本明細書で開示する技術の第３の側面は、可動部を含む制御対象装置を制御プログラムに従って制御する情報処理方法であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得ステップと、
前記状態取得ステップにおいて取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価ステップと、
を有する情報処理方法である。【００１６】
また、本明細書で開示する技術の第４の側面は、可動部を含む制御対象装置を制御プログラムに従って制御するための処理をコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部、
として機能させるコンピュータ・プログラムである。【００１７】
本明細書で開示する技術の第４の側面に係るコンピュータ・プログラムは、コンピュータ上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本明細書で開示する技術の第４の側面に係るコンピュータ・プログラムをコンピュータにインストールすることによって、コンピュータ上では協働的作用が発揮され、本明細書で開示する技術の第２の側面に係る情報処理装置と同様の作用効果を得ることができる。【００１８】
また、本明細書で開示する技術の第５の側面は、可動部を含む制御対象装置の制御プログラムを製造するプログラム製造方法であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算ステップと、
前記演算ステップによる演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持ステップと、
を有し、前記理想状態を付加して前記制御プログラムを出力する、プログラム製造方法である。
【発明の効果】
【００１９】
本明細書で開示する技術によれば、可動部を有する自律動作装置の制御プログラムの開発に利用され又は開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法を提供することができる。【００２０】
なお、本明細書に記載された効果は、あくまでも例示であり、本発明の効果はこれに限定されるものではない。また、本発明が、上記の効果以外に、さらに付加的な効果を奏する場合もある。【００２１】
本明細書で開示する技術のさらに他の目的、特徴や利点は、後述する実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【図面の簡単な説明】
【００２２】
【図１】図１は、制御プログラムの開発環境の一例を模式的に示した図である。
【図２】図２は、ネットワークを介した制御プログラムの分散開発環境を例示した図である。
【図３】図３は、ロボットを開発対象とする制御プログラムの開発環境を例示した図である。
【図４】図４は、自動走行車を開発対象とする制御プログラムの開発環境を例示した図である。
【図５】図５は、無人航空機（ドローン）を開発対象とする制御プログラムの開発環境を例示した図である。
【図６】図６は、自律動作装置１００の実機に搭載されるハードウェア並びにソフトウェアのアーキテクチャーの構成例を示した図である。
【図７】図７は、アプリケーション・プログラムの構成例を模式的に示した図である。
【図８】図８は、アプリケーション・プログラムに含まれる行動計画並びに定義動作の各データ・ファイルの構成例を模式的に示した図である。
【図９】図９は、本明細書で提案する仕組みを導入したプログラム開発及び実行環境を模式的に示した図である。
【図１０】図１０は、図９に示したプログラム開発環境においてモーション・データを作成するための処理手順を示したフローチャートである。
【図１１】図１１は、理想状態を付加したモーション・データを編集するための開発装置２００の機能的構成例を模式的に示した図である。
【図１２】図１２は、理想状態付きのモーション・データの構成例を模式的に示した図である。
【図１３】図１３は、理想状態のデータ構成例（自律動作装置１００がロボットの場合）を示した図である。
【図１４】図１４は、理想状態の確認と修正を行なうための入力画面の構成例を示した図である。
【図１５】図１５は、モーション・データを評価するための処理手順を示したフローチャート図である。
【図１６】図１６は、モーション評価用知識データベース９０２に格納されているデータの構成例を示した図である。
【図１７】図１７は、モーション評価によって得られた原因候補のリストを例示した図である。
【図１８】図１８は、自律動作装置１００の実機動作が想定外であったことを通知するための処理手順を示したフローチャートである。
【図１９】図１９は、モーション評価用知識データベース９０２に格納されているデータの構成例を示した図である。
【図２０】図２０は、原因候補に対する通知内容の決定例を示した図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照しながら本明細書で開示する技術の実施形態について詳細に説明する。
【００２４】
Ａ．プログラム開発環境
図１には、制御プログラムの開発環境の一例を模式的に示している。開発環境下には、開発対象となる自律動作装置（実機）１００と、この自律動作装置１００における制御プログラムを作成する開発装置２００が配置されている。
【００２５】
ここで、自律動作装置１００は、当該開発環境下で開発された制御プログラムを実行して、自律的若しくは適応制御により自らの行動を制御する装置のことである。自律動作装置１００は、１以上の可動部を有しており、後述するように、ロボット、無人航空機、自律運転する自動車などさまざまな形態を含むものとする。
【００２６】
自律動作装置１００は、当該システム１００全体の動作を統括的にコントロールする本体部１１０と、複数のモジュール部１２０−１、１２０−２、…で構成される。各モジュール部１２０は、制御プログラムによって駆動が制御される可動部を有している。図１では簡素化のため、３つのモジュール部しか描いていないが、４以上のモジュール部で構成される自律動作装置や、２以下のモジュール部しか備えていない自律動作装置も想定される。
【００２７】
１つのモジュール部１２０は、アクチュエータ１２１と、センサ１２４と、プロセッサ１２２と、メモリ１２３と、通信モデム１２５を含んでいる。なお、簡素化のため図示を省略しているが、モジュール部１２０内の各部１２１〜１２５は、内部バスにより相互接続されているものとする。
【００２８】
アクチュエータ１２１は、例えば、関節を回転駆動するためのモータや、スピーカ用のドライバーなどである。センサ１２４は、関節回転角度や角速度、スピーカの音量などのアクチュエータの出力状態を検出するセンサや、外力やその他の外部環境を検出するセンサなどである。
【００２９】
プロセッサ１２２は、アクチュエータ１２１の駆動制御（モータ・コントローラ）やセンサ１２４からの検出信号の認識処理を始めとするモジュール内の動作を制御する。メモリ１２３は、アクチュエータの制御情報やセンサの検出値などを格納するためにプロセッサ１２２が使用する。
【００３０】
通信モデム１２５は、当該モジュール部１２０と本体部１１０、又は当該モジュール部１２０と他のモジュール部の間で相互通信を行なうためのハードウェアであり、無線モデム又は有線モデムのいずれでもよい。例えばプロセッサ１２２は、通信モデム１２５を介して、本体部１１０からアクチュエータ１２１の駆動などの命令信号を受信したり、センサ１２４による検出データを本体部１１０に送信したりする。また、モジュール部１２０は、通信モデム１２５を介して、開発装置２００などの外部装置とも通信を行なうことができる。
【００３１】
本体部１１０は、プロセッサ１１１と、メモリ１１２と、通信モデム１１３と、バッテリー１１４と、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポート１１５と、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）１１６を含んでいる。なお、簡素化のため図示を省略しているが、本体部１１０内の各部１１１〜１１６は、内部バスにより相互接続されているものとする。
【００３２】
プロセッサ１１１は、メモリ１１２に格納されているプログラムに従って、自律動作装置１００全体の動作を統括的にコントロールする。また、バッテリー１１４は、自律動作装置１００の駆動電源であり、本体部１１０並びに各モジュール部１２０に電源を供給する。
【００３３】
通信モデム１１３は、本体部１２０と各モジュール部１２０の間で相互通信を行なうためのハードウェアであり、無線モデム又は有線モデムのいずれでもよい。例えばプロセッサ１１１は、通信モデム１１３を介して、各モジュール部１２０に対してアクチュエータ１２１の駆動などの命令信号を送信したり、各モジュール部１２０内でのセンサ１２４の検出値に基づく認識結果を受信したりする。また、本体部１１０は、通信モデム１１３を介して、開発装置２００などの外部装置とも通信を行なうことができる。
【００３４】
ＵＳＢポート１１５は、ＵＳＢバス（ケーブル）を使って本体部１１０に外部機器を接続するために使用される。本実施形態では、ＵＳＢポート１１５を使って本体部１１０に開発装置２００を接続することを想定している。例えば、開発装置２００上で作成した制御プログラムを、ＵＳＢポート１１５を介して自律動作装置１００にインストールすることができる。なお、ＵＳＢは自律動作装置１００に外部装置を接続するインターフェース規格の一例であり、他のインターフェース規格に則って外部装置を接続するように構成することもできる。
【００３５】
なお、図示を省略したが、本体部１１０と各モジュール部１２０−１、１２０−２、…などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。
【００３６】
開発装置２００は、例えばパーソナル・コンピュータで構成され、コンピュータ本体部２１０と、液晶パネルなどのディスプレイ２２０と、マウスやキーボードなどからなるユーザ・インターフェース（ＵＩ）部２３０を備えている。また、コンピュータ本体部２１０は、プロセッサ２１１、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１２と、メモリ２１３と、ＵＳＢポート２１４と、通信モデム２１５を備えている。但し、ＧＰＵ２１２の機能がプロセッサ２１１内に含まれている構成例も考え得る。また、コンピュータ本体部２１０は、図示した以外のハードウェア構成要素を備えており、各部はバスにより相互接続されている。
【００３７】
開発装置２００上では、オペレーティング・システム（ＯＳ）が動作している。プロセッサ２１１は、所望のアプリケーション・プログラムをメモリ２１２にロードして、ＯＳによって提供される実行環境下でアプリケーション・プログラムを実行することができる。
【００３８】
本実施形態では、アプリケーション・プログラムの１つとして、自律動作装置１００の制御用プログラムを作成するための開発ツール・プログラムを想定している。この開発ツール・プログラムは、当該プログラムの実行に必要なデータとともに開発装置２００のメモリ２１３上に展開されている。
【００３９】
開発ツール・プログラムは、ディスプレイ２２０の画面にプログラム開発用のＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を提示する。プログラムの開発者は、このＧＵＩ画面の内容を確認しながら、ユーザ・インターフェース２３０を介してデータやプログラムの入力を行なうことができる。また、開発ツール・プログラムは、作成した制御プログラムに関するコンパイラ、デバッガ、シミュレーション、３Ｄグラフィックス・アニメーションを用いた制御プログラムの動作確認のための機能などを備えているが、開発者はＧＵＩ画面上でこれらの機能の実行指示を行なうことができる。
【００４０】
開発ツール・プログラムを用いて作成される制御プログラムは、自律動作装置１００の実機上の本体部１１０のプロセッサ１１１上で実行されるコントロール・プログラム並びにコントロール・プログラムが使用するパラメータなどのデータと、各モジュール部１２０のプロセッサ１２４においてアクチュエータ１２１の駆動を制御するためのコントロール・プログラム並びにコントロール・プログラムが使用するパラメータなどのデータで構成される。コントロール・プログラムが使用するパラメータには、アクチュエータとしてのモータのＰ（比例制御）、Ｉ（積分制御）、Ｄ（微分制御）などの制御パラメータなどのデータを含む。本明細書ではプログラム部分とデータを併せて「制御（コントロール）プログラム」と呼ぶこともある。
【００４１】
開発ツール・プログラムを使って作成された制御プログラムは、メモリ２１３に格納される。また、メモリ２１３上の制御プログラムを、ＵＳＢポート２１４を介して自律動作装置１００側に転送することができる。あるいは、メモリ２１３上の制御プログラムを、通信モデム２１５を介して自律動作装置１００内のモジュール部１２０に転送することができる。
【００４２】
また、開発装置２００上で開発ツール・プログラムを使って作成された制御プログラムを、３Ｄグラフィックス・アニメーション機能を有する開発ツール・プログラムやデータ（以下、開発ツール用のプログラムとデータを併せて「開発ツール・プログラム」とも呼ぶ）を利用して、動作の検証や、制御用のデータやプログラムの修正を行なうことができる。一般に、この種の開発ツール・プログラムは、制御プログラムに従って自律動作装置１００の実機動作の３Ｄグラフィックス・アニメーションを生成する機能を備えており、開発者はディスプレイ２２０に表示される３Ｄグラフィックス・アニメーションを利用して、自身が開発した制御プログラムの動作の検証や、データやプログラムの修正を並行して行なうことができる。
【００４３】
本実施形態では、開発ツール・プログラムが物理エンジンと呼ばれる機能を備えていることを想定している。物理エンジンは、現実の自律動作装置１００の動作を物理法則に基づいて物理現象を演算する機能を持つコンピュータ・プログラムであり、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮することによって、現実と同様の動作を生成して、その結果をディスプレイ２２０上に表示する。自律動作装置１００の実機に対し、実機のモータなどの代わりに物理エンジンを使って３Ｄグラフィックス・アニメーション空間中で動作する仮想的な自律動作装置１００のことを仮想機械（３Ｄグラフィックス・アニメーション用のデータを含むコンピュータ・プログラム及びデータ）とも呼ぶ。
【００４４】
例えば、自律動作装置１００がロボットであれば、物理エンジンは、ロボットのアームの各リンクや関節の重量やモーメント、関節駆動用のアクチュエータなどの特性を考慮しつつ、ロボットを模して造られた仮想機械の制御プログラムの動作において、開発ツール・プログラム上で表現された仮想的な物理環境と仮想機械との物理作用（地面との接地や障害物との衝突など）を物理法則に基づいて計算することによって、あたかもロボットのアクチュエータが実際に駆動しているかのように、仮想機械全体の動作を計算し、ロボットの現実的な動作を仮想機械によって再現した３Ｄグラフィックス・アニメーションをディスプレイ２２０上に表示する。
【００４５】
仮想機械は、物理エンジンと３Ｄグラフィックス・アニメーションを含む開発ツール・プログラム上で動作するように構成された制御プログラム及びデータであり、メモリ２１３に格納されている。望ましくは、実機の各モジュールのプロセッサで動作する単位で、制御プログラム及びデータがモジュール化されている。仮想機械をあたかも実機のように３Ｄグラフィックス空間上で動作させるために、仮想機械の制御プログラムは、実機のモジュール部１２０毎のプロセッサ（例えば、モータ・コントローラ）１２２の動作に相当する機能を、プログラムの一部として実現する。また、この仮想機械の制御プログラムは、実機のモジュール部１２０毎のアクチュエータ１２１（例えば、モータ）に相当する動作を３Ｄグラフィックス・アニメーションで再現する物理エンジン機能を、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）あるいは関数を使って呼び出すようにプログラムされている。さらに物理エンジンにおいて物理計算の際に使用されるデータ（アクチュエータに設定される制御パラメータや、リンクの重量、イナーシャなど）は、制御プログラムとともにメモリ２１３中に格納されており、制御プログラムの実行に伴って、メモリ２１３から読み出され、制御プログラム中で利用される。
【００４６】
また、物理エンジン機能を実現するためのプログラム・モジュールに対して指示を出すためのＡＰＩあるいは関数を、実機すなわち自律動作装置１００側で動作している基本ＯＳが提供するものと同じものとすることにより、開発ツール・プログラムで作成したプログラムを、そのまま実機上のＯＳで動作させることができる。さらに、物理エンジン機能によって実際の物理現象を再現することができるので、開発ツール・プログラムを用いて開発したプログラムを、そのままＵＳＢポート２１４などを介して自律動作装置１００にアップロードして実行させることにより、開発ツール・プログラムで確認した動作を実機上でも実現することができる。
【００４７】
また、開発ツール・プログラムを使って、モジュール部単位に分割して自律動作装置１００の制御プログラムを開発することもできる。この場合も同様に、モジュール部単位で制御プログラムを自律動作装置１００にアップロードすることができる。例えば、モジュール部１２０−１のみハードウェア及び制御プログラムの開発を担当している開発者は、自分の開発装置２００を通信モデム２１５経由で自律動作装置１００の対応するモジュール部１２０−１に接続して、作成したプログラムやデータをモジュール部１２０−１内のメモリ１２３にアップロードすることもできる。同様に、別のモジュール部１２０−２のみハードウェア及び制御プログラムの開発を担当している開発者は、自分の開発装置２００を通信モデム２１５経由で自律動作装置１００の対応するモジュール部１２０−２に接続して、作成したプログラムやデータをモジュール部１２０−１内のメモリ１２３にアップロードすることができる。
【００４８】
モジュール部単位でハードウェア及びプログラムの開発を複数の開発者又は複数の開発ベンダーで分担することで、分散開発環境下で自律動作装置１００全体の開発を進めることができる。
【００４９】
図２には、ネットワークを介した制御プログラムの分散開発環境を例示している。図２に示す分散開発環境下では、モジュール毎に個別の開発者又は開発ベンダーに開発が委ねられている。但し、図２で言うモジュールは、図１に示した自律動作装置１００のハードウェア構成要素であるモジュール部の他に、自律動作装置１００の制御ソフトウェアのモジュールを指す場合もある。
【００５０】
自律動作装置１００の本体部又はモジュール部単位で制御プログラムの開発を任された各プログラム開発者は、それぞれモジュール開発用コンピュータを用いて、自分が担当する本体部又はモジュール部の制御プログラムを作成する。モジュール開発用コンピュータ上では、例えば上述した開発ツール・プログラムが動作している。各モジュール開発用コンピュータは、ネットワークに接続されている。そして、各プログラム開発者は、それぞれクラウド・サーバ上の共有ストレージ、自分専用のストレージ（すなわち、本体部開発者ストレージ、モジュール部開発者ストレージ）、あるいは専用サーバが備えるストレージにおいて、自己が開発した制御プログラムなどを提供してもよい。また、サーバなどのストレージにアカウントを有する管理者、開発者、顧客、あるいはユーザによって制御プログラムなどが共有されるようにしてもよい。
【００５１】
自律動作装置１００の実機全体の制御プログラム開発を担当若しくは統括する開発者は、ネットワーク経由で本体部及び各モジュール部の制御プログラムの提供を受ける。具体的には、実機全体の開発者が使用する実機プログラム開発用コンピュータは、クラウド・サーバ上の共有ストレージ又は開発者ストレージ、専用サーバ、あるいは各開発者のモジュール開発用コンピュータとの直接通信によって、各々の制御プログラムを受信する。但し、制御プログラムの提供を受けるネットワークは、有線又は無線のいずれで構成されていてもよい。
【００５２】
実機全体の開発者が使用する実機プログラム開発用コンピュータは、図１に示した開発装置２００に相当し、開発ツール・プログラム上で物理エンジンを用いた演算を行ない、且つ３Ｄグラフィックス・アニメーションにより実機に相当する仮想機械の動作を表示できる機能を備えている。したがって、実機プログラム開発用コンピュータは、本体部１１０及びすべてのモジュール部１２０の制御プログラムを、開発ツール・プログラムが備える物理エンジン機能を利用して、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００５３】
さらに、実機プログラム開発用コンピュータ上では開発された制御プログラムの実行と並行して、各々の制御プログラムの修正を行なうことができる。したがって、実機全体の開発者と各モジュール部を担当する開発者とで、実機全体の制御プログラムを効率的に共同開発することにもなる。また、実機プログラム開発用コンピュータ上で修正した制御プログラムを、そのモジュール部を担当する開発者に再度提供して、最終的なプログラム製品を完成してもらうことが可能である。例えばクラウド・サーバ上に本体部並びに各モジュール部専用のストレージを配置するなどモジュール部単位で制御プログラムを管理するようにすることで、共同開発を円滑に進めることができる。
【００５４】
実機全体の開発者が使用する実機プログラム開発用コンピュータ上で動作が確認・検証された（すなわち、完成した）制御プログラムは、ＵＳＢポート２１４を介して開発装置２００から実機の自律動作装置１００に直接アップロードすることができる。あるいは、有線又は無線で構成されるネットワーク経由で、実機全体又はモジュール部毎の制御プログラムを実機にアップロードすることもできる。
【００５５】
また、制御プログラムを専用サーバから実機へアップロードするという形態も想定される。例えば、ある実機のユーザが自分のユーザ端末のユーザ・インターフェース（キーボード、マウス、タッチパネルなど）を介して自分が持つアカウントを用いて専用サーバにログインして、さらに実機にダウンロード又はアップロードする制御プログラムを選択して、ダウンロード又はアップロードを実施するようにしてもよい。
【００５６】
Ａ−１．ロボット用のプログラム開発環境
図３には、自律動作装置１００の具体例として脚式のロボットを開発対象とする場合の制御プログラムの開発環境を例示している。図３では、単一の開発装置２００を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００５７】
図３に示す脚式ロボット１００は、本体部１１０と、頭部や左右の脚部に相当する複数のモジュール部１２０−１、１０２−２、…を有している。各モジュール部１２０−１、１０２−２、…は、制御プログラムによって駆動が制御される可動部を有している。図示を省略するが、本体部１１０と、頭部や左右の脚部などの各モジュール部１２０−１、１０２−２、…などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。
【００５８】
なお、脚式ロボット１００は、上肢など図示しないモジュール部をさらに有していてもよい。また、少なくとも一部のモジュール部内のプロセッサやメモリなど機能が本体部１１０と一体となって、本体部１１０のプロセッサ１１１によってコントロールされるという実機構成の変形例も考えられる。
【００５９】
本体部１１０は、プロセッサ１１１と、メモリ１１２と、無線又は有線の通信モデム１１３と、バッテリー１１４と、ＵＳＢポート１１５と、ＧＰＳ１１６を備えている。
【００６０】
左右の脚のモジュール部１２０−２及び１２０−３は、アクチュエータ１２１として、股関節や膝関節、足首などの関節駆動用（若しくは、歩行用）のモータを備え、プロセッサ１２２としてモータの駆動を制御するモータ・コントローラをそれぞれ備えている。また、センサ１２４として、モータの出力側に発生する外力を検知するトルク・センサや、モータの出力側の回転角度を検出するエンコーダー、足裏部の接地センサなどを備えている。また、頭部のモジュール部１２０−１は、アクチュエータ１２１としての頭部回転用のモータと、センサ１２４としての周囲を撮像するイメージ・センサを備えている。
【００６１】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記のロボット１００の本体部１１０並びに各モジュール部１２０の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジンの演算を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００６２】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機１００全体の制御プログラムやモジュール部１２０毎の制御プログラムは、本体部１１０のＵＳＢポート１１５や各モジュール部１２０の通信モデム１２５を介した有線又は無線の通信によって、本体部１１０のメモリ１１２又は各モジュール部１２０−１、１０２−２、…のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、ロボット１００の起動時などに適宜動作するようになっている。
【００６３】
Ａ−２．自動走行車用のプログラム開発環境
図４には、自律動作装置１００の他の具体例として自動走行車を開発対象とする場合の制御プログラムの開発環境を例示している。自動走行車１００は、自動運転技術が導入された自動車（あるいは、作業用又は輸送用などの無人運転車両）のことであるが、完全自動運転車の他、自動運転モードと手動運転モードを切り替え可能な自動車における自動運転モードで走行中の自動車や、ステアリング又は加減速など一部の操作を自動化した運転支援モードで走行中の自動車も含むものとする。図４では、単一の開発装置２００を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００６４】
図４に示す自動走行車１００は、主制御部１１０と、可動部を有するモジュール部としてのトランスミッション制御モジュール部１２０−２並びに室内空調制御モジュール部を１２０−１有している。図示を省略するが、主制御部１１０と各モジュール部１２０などのハードウェア間を結合するデータ・バス並びに制御バス（ＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）バスなど）が存在する。また、自動走行車は、通常、トランスミッション制御モジュール部１２０−２、室内空調制御モジュール部１２０−１以外にも図示しない多くのモジュール部を備えているが、説明の簡素化のため省略する。
【００６５】
主制御部１１０は、プロセッサ１１１としてのＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：電子制御装置）と、メモリ１１２と、通信モデム１１３と、ＥＣＵインターフェース１１５と、ＧＰＳ１１６と、バッテリー１１４を備えている。通信モデム１１３は、Ｗｉ−Ｆｉ（Ｗｉｒｅｌｅｓｓ  Ｆｉｄｅｌｉｔｙ）、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）、近距離無線通信などを想定している。また、ＥＣＵインターフェース１１５は、ＣＡＮバスへのインターフェースを想定している。また、開発装置２００側とはイーサネット（登録商標）などの通信規格を利用して接続され、開発された制御プログラムのアップロードが行なわれる。
【００６６】
室内空調モジュール部１２０−１は、アクチュエータ１２１としての空調と、プロセッサとしての空調制御ＥＣＵと、メモリ１２３と、センサ１２４としての室内温度センサと、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信などの通信モデム１２５を備えている。例えば搭乗者が携帯するスマートフォンなどの情報端末とＢｌｕｅｔｏｏｔｈ（登録商標）通信により接続して、空調を制御することを想定している。
【００６７】
トランスミッション制御モジュール部１２０−２は、アクチュエータ１２１としての駆動輪用モータと、プロセッサ１２２としてのトランスミッション制御ＥＣＵと、メモリ１２３と、センサ１２４として速度・加速度センサや操舵角センサなどを備えている。
【００６８】
なお、図４に示した構成例では、主制御部１１０並びに各モジュール部１２０にＥＣＵが配置されているが、主制御部１１０内のＥＣＵ１１１ですべてのモジュール部を集中管理するように構成することも可能である。
【００６９】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記の自動走行車の主制御部１１０、室内空調制御モジュール部１２０−１、並びにトランスミッション制御モジュール部１２０−２の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジンの演算を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００７０】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機１００全体の制御プログラムやモジュール部１２０毎の制御プログラムは、主制御部１１０のＥＣＵインターフェース１１５や各モジュール部１２０の通信モデムを介した有線又は無線の通信によって、主制御部１１０のメモリ１１２又は各モジュール部１２０のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、自動走行車１００の起動時などに適宜動作するようになっている。
【００７１】
Ａ−３．無人航空機用のプログラム開発環境
図５には、自律動作装置１００の他の具体例として無人航空機（ドローン）を開発対象とする場合の制御プログラムの開発環境を例示している。図５では、単一の開発装置２００を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００７２】
図５に示す無人航空機１００は、主制御部１１０と、可動部を有するモジュール部としてのカメラ制御モジュール部１２０−１並びにプロペラ制御モジュール部１２０−２を有している。図示を省略するが、主制御部１１０と各モジュール部１２０などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。また、無線航空機１００には、カメラ制御モジュール部１２０−１並びにプロペラ制御モジュール部１２０−２以外のモジュール部が組み込まれていてもよい。
【００７３】
主制御部１１０は、プロセッサ１１１と、メモリ１１２と、通信モデム１１３と、ＵＳＢポート１１５と、ＧＰＳ１１６と、バッテリー１１４を備えている。通信モデム１１３は、Ｗｉ−Ｆｉ、ＬＴＥ、近距離無線通信などの無線モデムを想定しており、操縦者が操作するリモート・コントローラと通信を行なうようになっている。また、開発装置２００側とはＵＳＢポート１１５を利用して接続され、開発された制御プログラムのアップロードが行なわれる。
【００７４】
カメラ制御モジュール部１２０−１は、センサ１２４としてのカメラ部（イメージ・センサを含む）と、アクチュエータ１２１としてのカメラ部回転用モータと、プロセッサ１２２としてのモータ・コントローラと、メモリ１２３と、通信モデム１２５を備えている。カメラ部回転用モータ１２１は、例えば水平方向に３６０度の範囲で回転が可能であり、さらにチルト回転が可能であってもよい。また、通信モデム１２５は、Ｗｉ−Ｆｉ、ＬＴＥ、近距離無線通信などの無線モデムを想定しており、操縦者が操作するリモート・コントローラやスマートフォンからのコマンドに従ってカメラ部の回転や撮影を行なう。
【００７５】
プロペラ制御モジュール部１２０−２は、アクチュエータ１２１として例えば３つのプロペラ（回転用モータを含む）と、プロペラの回転用モータの制御などを行なうプロセッサ１２２と、メモリ１２３と、センサ１２４としてのプロペラ回転検出センサを備えている。
【００７６】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記の無人航空機１００の主制御部１１０、カメラ制御モジュール部１２０−１、並びにプロペラ制御モジュール部１２０−２の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジンの演算を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００７７】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機１００全体の制御プログラムやモジュール部１２０毎の制御プログラムは、主制御部１１０や各モジュール部１２０の通信モデム１１３などを介した有線又は無線の通信によって、主制御部１１０のメモリ１１２又は各モジュール部１２０のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、無人航空機１００の起動時などに適宜動作するようになっている。
【００７８】
Ｂ．ハードウェア並びにソフトウェアのアーキテクチャー
図６には、自律動作装置１００の実機に搭載されるハードウェア並びにソフトウェアのアーキテクチャーの構成例を示している。
【００７９】
実機は、図１並びに図３〜図５にも示したように、本体部（若しくは主制御部）と、それぞれ可動部を有する複数のモジュール部などの複数のハードウェア・モジュール（ＨＷ1、ＨＷ2、…、ＨＷL）が筐体内に組み込まれて構成される。また、各ハードウェア・モジュールを２以上の筐体に分散して配置して構成される実機も存在し得る。
【００８０】
ＯＳは、これらハードウェア・モジュール（ＨＷ1、ＨＷ2、…、ＨＷL）を直接的に制御する。また、ＯＳではなく、ハードウェア・モジュール内のメモリにアップロードされた制御プログラムがハードウェア・モジュールなどを直接的に制御する場合もある（具体的には、プロセッサがメモリにロードされた制御プログラムを実行して、アクチュエータの駆動を制御する）。
【００８１】
図１並びに図３〜図５に示したように、本体部１１０と複数のモジュール部１２０−１、１２０−２、…でハードウェア・アーキテクチャーが構成される自律動作装置１００においては、本体部１１０（若しくは、本体部１１０内のプロセッサ１１１）において当該システム１００全体を制御するメインＯＳが動作して、各モジュール部１２０−１、１２０−２、…内で実行中の制御プログラムを直接的又は間接的に制御するように構成される。
【００８２】
図６では、メインＯＳ以外にも複数のサブＯＳ（例えば、ＯＳ1、ＯＳ2、…）が動作し、各ＯＳがアプリケーション・プログラムの実行環境を提供する例を示している。図６において、例えば、ＯＳ1がメインＯＳの管理下にあるハードウェア・モジュールを駆動したい場合には、まずＯＳ1がメインＯＳと通信を行なうことによって、間接的に所望のモジュール部の制御プログラムを制御するようにすることができる。また、ＯＳ1とメインＯＳ間の通信には、ＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）などのプロセス間通信技術を利用して実現することができる。
【００８３】
また、図６には、仮想化技術（Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）を用いて構築したアーキテクチャーも併せて示している。すなわち、複数の異なるオペレーティング・システム（例えば、ＯＳ1、ＯＳ2、…、並びにメインＯＳの一部）を仮想化ＯＳ上で動作させている。異なるＯＳを想定して開発された各アプリケーション・プログラム（例えば、ＯＳ1を想定して開発されたＡＰ1と、ＯＳ2を想定して開発されたＡＰ2）を、同じ実機上で混在させることが可能である。
【００８４】
図６中のアプリケーション・プログラム（ＡＰ）のうち少なくとも一部は、図１並びに図３〜図５に示したような開発環境下で開発された制御プログラムに相当する。
【００８５】
例えば、図４に示した自動走行車１００において開発されるアプリケーション・プログラムを、駆動系制御（ＤＳＵ（Ｄｒｉｖｅｒ  Ｓｅｎｓｉｎｇ  Ｕｎｉｔ）など）のように高い信頼性が要求されるアプリケーション・プログラムと、ユーザに対するサービスに関わるインフォテインメント（オーディオ機器や空調など）のように汎用性の高いアプリケーション・プログラムの２種類に大別することができる。前者の高い信頼性が要求されるＡＰ1は、より信頼性の高いＯＳ1を想定して開発される一方、後者の汎用性の高いＡＰ2はより汎用性が高く多くの開発者によって開発可能なＯＳ2を想定して開発される。このように異なるＯＳを想定して開発された駆動系制御用アプリケーション・プログラムＡＰ1及びインフォテインメント・アプリケーション・プログラムＡＰ2は、仮想化ＯＳの介在により各々に該当するハードウェアに対する制御が容易となるので、同一の自律動作装置（自動走行車など）上で混在することが可能となる。
【００８６】
アプリケーション・プログラムの開発者は、システム（例えば、ミドルウェア）が提供するＡＰＩを用いてアプリケーション・プログラムを開発することができる。例えば、ＡＰＩとして、「地図表示」、「音声対話モードへの切り替え」、「周囲の人間の認識」といった機能の利用が考えられる。図６に示す例では、ミドルウェア１が提供するＡＰＩ1、ミドルウェア２が提供するＡＰＩ2、…、ミドルウェアＭが提供するＡＰＩMを用いてアプリケーション・プログラムを開発することができる。
【００８７】
また、アプリケーション・プログラムの開発者は、システム・コールを利用してＯＳに対して指示を行なうようなプログラムを含めてアプリケーション・プログラムを開発することができる。ここで言うシステム・コールは、システム制御に関わる機能を利用するためのインターフェースである。システム・コールの例として、モジュール部１２０内のプロセッサ１２２（例えば、モータ・コントローラ）のパラメータを変更する、通信モデムにおけるネットワーク・アドレスの設定を行なう、といったものを挙げることができる。図６に示す例では、ＯＳ1に対して指示を行なうシステム・コール１、ＯＳ2に対して指示を行なうシステム・コール２、ＯＳMに対して指示を行なうシステム・コールＭを利用するプログラムを含めてアプリケーション・プログラムを開発することができる。
【００８８】
図７には、アプリケーション・プログラムの構成例を模式的に示している。図示のアプリケーション・プログラムは、自律動作装置を制御する制御プログラムに相当し、例えば図１又は図３〜図５に示した開発環境下で（すなわち、開発装置２００上で開発ツール・プログラムを用いて）開発される。
【００８９】
アプリケーション・プログラムは、１又はそれ以上の定義動作と、１又はそれ以上の行動計画を含んでいる。定義動作並びに行動計画はいずれも、自律動作装置１００の制御プログラムである。
【００９０】
定義動作は、ハードウェアのうち、モータなどに代表されるアクチュエータのコントローラに対して指示する目標値からなり、「モーション」若しくは、「モーション・データ」とも呼ばれる。１つの定義動作が、ある時点においてコントローラに対して指示する目標値のみからなる場合や、ある区間においてコントローラに対して時系列的に指示する一連の目標値からなる場合がある。後述するように、本実施形態では、定義動作はキーフレーム（後述）を用いて作成されることを想定している。
【００９１】
また、定義動作は、コントローラに対して基本パラメータの設定を指示するプログラム及びデータでもある。基本パラメータの一例として、Ｐ（比例制御）、Ｉ（積分制御）、Ｄ（微分制御）を含めることができる（例えば、本出願人に既に譲渡されている特願２０１７−７０６３４号明細書を参照のこと）。また、モータなど制御対象となるアクチュエータの特性に基づいてコントローラ（プロセッサ）に設定することができるその他のパラメータを、基本パラメータとして定義動作の中で設定することができる。
【００９２】
行動計画は、１又はそれ以上の定義動作の機能を呼び出すプログラム及びデータからなる。ロボットなどの自律動作装置１００は、行動計画に従って呼び出された１又はそれ以上の定義動作を再生することによって、１つの「ビヘイビア」を実現する。
【００９３】
また、行動計画は、状況毎に起動すべき定義動作を取り決めることで、自律動作装置１００の一連の動作を記述するプログラム及びデータである。例えば、定義動作を選択するための条件分岐をツリー構造の形式で記述する行動計画を挙げることができる。行動計画は、認識結果に基づいて自律動作装置１００を制御することから、環境（状況）認識に基づく行動制御プログラムに位置付けることができる。この意味で、行動計画は、広義のＡＩ（人工知能）の機能の一部にも相当する。
【００９４】
アプリケーション・プログラムは、また、ＯＳ又はミドルウェアの機能を利用するためのプログラム及びデータを含むことができる。
【００９５】
アプリケーション・プログラムは、さらに、自律動作装置１００の実機のアプリケーション機能を、外部から利用させるためのＡＰＩを定義している。したがって、アプリケーション・プログラムの作成に利用した開発装置２００や、ユーザ端末、サーバなどの外部装置は、実機が動作中あるいは試験動作中に、通信を介してＡＰＩを呼び出すことによってアプリケーション・プログラムの機能を利用することができる。
【００９６】
また、アプリケーション・プログラムは、実機動作中に、行動計画又は定義動作のプログラム及びデータを学習によって変更させるためのプログラム及びデータを含むこともできる。
【００９７】
なお、図７に示すように、アプリケーション・プログラムは複数のコンポーネントで構成されるが、すべてのコンポーネントを一体化して１つのファイルで構成してもよいが、各コンポーネントをそれぞれ別のファイルとして構成してもよい。また、これらのファイルは、図２におけるクラウド・サーバ上の共有ストレージ、各自専用のストレージ（すなわち、本体部開発者ストレージ、モジュール部開発者ストレージ）、あるいは専用サーバが備えるストレージなどに格納され、サーバなどのストレージに対するアクセス権を有する管理者、開発者、顧客、あるいはユーザによって共有することが可能であってもよい。
【００９８】
図８には、アプリケーション・プログラムに含まれる行動計画並びに定義動作の各データ・ファイルの構成例を模式的に示している。同図では、説明の便宜上、ファイル内のデータを、特定のプログラム言語に依らない、自然言語の形式で記述している。但し、図示するようなデータ・ファイルを、何らかのプログラム言語を用いてコーディングできることは、当業者であれば容易に理解できることである。
【００９９】
行動計画のデータ・ファイル８０１は、定義動作を選択するための条件分岐をツリー構造の形式で記述したデータの集合である。図８に示す例では、ＩＦ文（ＩＦ  状況＝「人を検出」  ｔｈｅｎ  「寝そべる」、ＩＦ  状況＝「人がいない」  ｔｈｅｎ  「歩き回る」）の形式で、定義動作を選択するための条件を記述している。なお、図８では、説明の便宜上、簡単なＩＦ文からなる行動計画のデータ・ファイル８０１を示しているが、入れ子構造などを含んだ複雑な条件文になってもよい。
【０１００】
定義動作のデータ・ファイル８０２は、行動計画８０１において使用する複数の定義動作のデータ集合とともに、ハードウェア・コンポーネント毎の制御パラメータの初期値を含んでいる。
【０１０１】
図８に示す例では、定義動作データ・ファイル８０２は、制御パラメータの初期値として、モータ１用のＰＩＤパラメータ値（Ｐ＝Ｘ１，Ｉ＝Ｙ１、Ｄ＝Ｚ１）と、モータ２用のＰＩＤパラメータ値（Ｐ＝Ｘ２，Ｉ＝Ｙ２，Ｄ＝Ｚ２）を含んでいる。
【０１０２】
また、図８に示す例では、定義動作データ・ファイル８０２は、「歩き回る」、「寝そべる」、「停止する」の定義動作のデータを含んでいる。各定義動作のデータは、キーフレームのデータセットと、ハードウェア・コンポーネント毎の制御パラメータ（例えば、モータ・コントローラに設定すべきＰＩＤパラメータ）からなる。
【０１０３】
キーフレームは、各モジュール部１２０−１、１２０−２、…に設定する目標値（例えば、アクチュエータ１２１としてのモータに対する回転位置や回転角度などの目標値）のデータからなる。１つの定義動作は、１又は複数のキーフレームのデータ集合からなる。また、定義動作で指定する制御パラメータは、その定義動作で設定すべき制御パラメータである。また、定義動作「停止する」のキーフレーム・データ及びコントローラ特性データはともにＮＵＬＬとする。ＮＵＬＬは初期値であってもよい。
【０１０４】
アプリケーション・プログラムの開発者は、上述したようなアプリケーション・プログラムを、開発装置２００上で開発ツール・プログラムを利用して作成することができる。開発ツール・プログラムは、コンパイラ、デバッガ、物理エンジンと連携した３Ｄグラフィックス・アニメーションなどの機能を備え、アプリケーション・プログラムの開発者はＧＵＩ画面上でこれらの機能の実行指示を行なうことができる。
【０１０５】
本実施形態では、アプリケーション・プログラムの開発に使用される開発ツール・プログラムが物理エンジンと呼ばれる機能を備えていることを想定している。物理エンジンは、現実の自律動作装置１００の動作を物理法則に基づく現象をコンピュータ上で再現する機能である。自律動作装置１００の実機動作を制御するアプリケーション・プログラムのシミュレーションを、物理エンジンを用いて実施することにより、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮しながら、実機動作を仮想機械で再現することができる。昨今、物理エンジンの精度は向上しており、物理エンジンを用いたシミュレーションにより、アプリケーション・プログラムを実行する実機の動作を仮想機械上でより正確に再現することが可能になってきている。
【０１０６】
また、開発ツール・プログラムが物理エンジンに３Ｄグラフィックス・アニメーションの機能を組み合わせることで、現実の実機と同様の動作を表す３Ｄグラフィックス・アニメーションを生成して、その結果を表示することができる。アプリケーション・プログラムの開発者は、３Ｄグラフィックス・アニメーションを見ながら実機の動作を検証し、さらにアプリケーション・プログラムの適切に修正することができる。特に、高機能の物理演算を行なう物理エンジンが、実機のハードウェア（例えば、モータ・コントローラ）に相当する役割を果たすので、実機を用いることなく制御プログラムを検証することができるので、開発の効率が向上するとともに開発コストが低減する。また、このようにして作成された制御プログラムを含むアプリケーション・プログラムを、実機上で動作させたときに、実機上でも期待した動作を再現することが期待される。
【０１０７】
したがって、制御プログラムの開発過程で、定義動作などの制御プログラムの開発過程で、物理エンジンの演算結果と３Ｄグラフィックス・アニメーションの表示結果などに基づいて、各定義動作で指定すべき最適な制御パラメータを導出することができる。図８に示したデータ構成例によれば、プログラムの開発者などが、プログラムの開発者は定義動作毎の最適な制御パラメータを、定義動作内に記述することができるようになっている。
【０１０８】
Ｃ．プログラムの開発環境並びに実行環境に関する提案
キーフレームなどを利用したモーション・データには、各関節角度など自律動作装置の可動部の動きや制御パラメータが定義されているが（例えば、図８を参照のこと）、そのモーション・データを再生した結果として実機（若しくは、実機を構成する一部のモジュール部）にどのような状態が引き起こされるかという情報は含まれていない。
【０１０９】
このため、制御プログラムを実機上で実行した際に、可動部（関節角度）が想定通りに動いたかどうかを観察することはできても、可動部の動きが想定通りでない場合に、実機全体としてどのような挙動のずれが発生したかや、挙動のずれの原因として何が考えられるか、というより高度なレベルで実機動作を判断することは難しい。
【０１１０】
例えば、脚式ロボットの実機上で「前進する」というモーションを、路面が非常に滑る（摩擦係数が低い）という環境下で再生させて、想定通りの実機動作が実現しなかったとする。脚式ロボットの設計者や制御プログラムの開発者といったエキスパートなら実機が想定外の動作となった原因を把握することはできても、一般のユーザは、実機が「前進する」ことを目的としたモーションを再生したことさえも認識していないため、何がおかしいのか（すなわち、想定外の実機動作を引き起こした原因）が分からないという状況に陥るであろう。仮にユーザが実機の動作が何であったかを分かったとしても、その実機動作が想定外となった原因（例えば、「前進する」モーションを再生して想定外の動作となった原因が床の摩擦であったこと）まで突き止めるには専門的な知識が必要である。専門的な知識に乏しい一般ユーザが、実機の想定動作の原因を突き止め、さらに適切な処置を自発的に行なうことは極めて困難である。
【０１１１】
産業用途のロボットであれば、特定の作業現場に適したようにロボットを製作し、又は、導入するロボットを稼働させるに適した作業環境を整えることができる。他方、エンタテイメントロボットなどの一般家庭向け用途のロボットは、さまざまな環境下で動作することが想定され、このため、想定外の環境で実機を動作させた際にプログラマなどが意図した通りの実機動作を実現できないといった事態が頻繁に発生することが想定される。専門的な知識に乏しい一般家庭のユーザが、実機動作が想定外であったことを認識し、さらにその原因を突き止めて適切な処置を自発的に行なうことは極めて困難である。
【０１１２】
そこで、制御プログラムを実行する自律動作装置自身が、実機動作を分析して、想定外の動作となったときにその原因を突き止め、原因及び適切な処置を自発的にユーザに通知することが重要である。
【０１１３】
また、エンタテイメントロボットの場合、人間的な個性を与えられるが、ユーザにその個性を認識させるには、ユーザとのインターフェース（会話やジェスチャーなど）のほとんどすべてを個性に基づく形態にすることが重要である。この種のロボットがユーザへの通知を、機械的すなわち思考や意思を働かさず型にはまった形態で行なうと、ロボットが持つべきキャラクター性や個性を大きく損ない、ユーザがそれまでロボットに抱いていたイメージを壊してしまうおそれがある。したがって、エンタテイメントロボットなどの自律動作装置は、制御プログラムを実行した際の実機動作が想定外となった原因及び適切な処置（解決策）に関する情報を、キャラクター性や個性を踏まえて個性豊かにユーザに提示する仕組みが求められる。
【０１１４】
そこで、本明細書では、制御プログラムを実行した自律動作装置自身が、実機動作を評価し、実機動作が想定外となった原因を究明して、その解決策とともにユーザに自発的に通知することを可能にするための仕組みについて、以下で提案する。
【０１１５】
さらに、本明細書では、制御プログラムを実行した自律動作装置が、実機動作が想定外となった原因及び解決策を、個性豊かにユーザに通知するための仕組みについても、以下で提案する。
【０１１６】
まず、制御プログラムの開発環境において、開発する制御プログラムに、開発対象とする自律動作装置が制御プログラムを実行したときの理想状態に関する情報を付加する仕組みを導入する。
【０１１７】
また、制御プログラムの実行環境において、自律動作装置は、制御プログラムを実行したときに、実機上に配設された各センサの検出値などに基づく実機状態と、制御プログラムに付加された理想状態とを比較して、自律動作装置自身が実機動作を評価して、実機動作が想定外となった原因の候補とその解決策を特定する仕組みを導入する。
【０１１８】
さらに、制御プログラムの実行環境において、ロボットに与えられたキャラクター性や個性といった、自律動作装置１００に関連付けて記憶された属性情報に基づいて特定された通知方法を用いて、実機動作が想定外となった原因の候補とその解決策をユーザに通知する仕組みを導入する。例えば、ロボットが自身の個性に基づいて、ユーザへの通知内容（原因や解決策の表現方法や、通知に使用するデバイスなどを含む）と通知タイミング、通知頻度などを決定して、ユーザへの通知を実施する。
【０１１９】
図９には、上記の提案する仕組みを導入したプログラム開発環境及び実行環境を模式的に示している。
【０１２０】
自律動作装置の制御プログラムは、例えば、定義動作とも呼ばれる、各関節角度の時間的な変化を記述したキーフレームの集合からなるモーション・データとして作成される。物理エンジン及び３Ｄグラフィックス・アニメーションの機能を装備する開発装置２００を用いて制御プログラムを開発する場合、自律動作装置の実機がモーション・データを再生したときの実際の物理現象を物理シミュレーションにより仮想機械で再現し、さらにモーション・データを再生する仮想機械の動作を３Ｄグラフィックス表示することができる。
【０１２１】
制御プログラムの開発者（若しくは、モーション作成者）は、開発装置２００上で、３Ｄグラフィックス表示を通じて仮想機械が理想状態であるかどうかを確認しながら、キーフレームや理想状態の各データを適宜修正し、モーション・データを完成させることができる。
【０１２２】
そして、開発装置２００は、完成したモーション・データを再生する自律動作装置の機体（ロボットの全身）の傾き、移動速度、移動方向などの理想的な値を物理シミュレーションにより生成して、モーション・データを再生する自律動作装置の「理想状態」を示すデータとしてモーション・データに付加して、出力する。
【０１２３】
なお、モーション・データとその理想状態のデータは、１つのファイルとして一体となっていなくても、例えば互いに関連付けられた個別のファイルとして構成されていてもよい。
【０１２４】
自律動作装置１００の実機上では、モーション・データを再生した際に、各モジュール部１２０に配設されたセンサの検出値に基づいて、実機１００の傾き、移動速度、移動方向などの実機の状態を取得する。自律動作装置１００は、このような自身の実際の状態を取得するために、各関節の回転角度を検出するエンコーダー、ジャイロセンサ又はＩＭＵ（Ｉｎｅｒｔｉａｌ  Ｍｅａｓｕｒｅｍｅｎｔ  Ｕｎｉｔ：慣性計測装置）、カメラなどの複数のセンサを備えているものとする。また、実機の状態として移動距離や移動方向を取得するために、ＳＬＡＭ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｌｏｃａｌｉｚａｔｉｏｎ  ａｎｄ  Ｍａｐｐｉｎｇ）やＴｏＦ（Ｔｉｍｅ  ｏｆ  Ｆｌｉｇｈｔ）といった技術を適用してもよい。
【０１２５】
自律動作装置１００上では、モーション評価部９０１が、モーション・データを再生したときに上記の各種センサから取得した実際の実機状態と、再生中のモーション・データに付加された理想状態とを比較して、自律動作装置１００自身が実機動作を評価する。モーション評価部９０１は、例えば自律動作装置１００のプロセッサ１１１上で実行されるアプリケーション・プログラムの１つであってもよい。また、モーション・データの理想状態と、実機１００から取得される実際の状態との差分をその原因や解決策と関連付けて記憶するデータベース（以下、「モーション評価用知識データベース」とも言う）９０２を自律動作装置１００上に装備しておいてもよい。そして、モーション評価部９０１は、モーション・データを再生したときの実機状態が理想状態からかけ離れ、実機動作が想定外であったと判定する場合には、モーション評価用知識データベース９０２を参照して、複数の原因候補とその解決策を特定する。なお、モーション評価部９０１は、モーション・データの理想状態と実機１００の実際の状態との差分との関係を機械学習するようにしてもよい。
【０１２６】
また、自律動作装置１００上では、ユーザ通知部９０３が、自律動作装置１００に関連付けて記憶された属性情報を考慮した結果特定された、実機動作が想定外となった原因の候補とその解決策をユーザに通知する。ユーザ通知部９０３は、通知内容生成部９０４と、通知タイミング制御部９０５を備えている。ユーザ通知部９０３は、例えば自律動作装置１００上で実行されるアプリケーション・プログラムの１つであってもよい（モーション評価部９０１と同じアプリケーション・プログラムであってもよいし、別のアプリケーション・プログラムであってもよい）。
【０１２７】
自律動作装置１００に関連付けて記憶された属性情報とは、例えば、自律動作装置１００としてのエンタテイメントロボットに与えられたキャラクター性や個性である。また、このような属性情報は、キャラクター性や個性・性格といった静的若しくは固定的な情報だけには限定されず、本能や感情などからなり時々刻々と変化する内部状態若しくは情動をさらに含んでいてもよい。自律動作装置１００に関連付けて記憶された属性情報は、例えば本体部１１０内のメモリ１１２に格納されている。
【０１２８】
通知内容生成部９０４は、キャラクター性や個性といった自律動作装置１００に関連付けて記憶された属性情報を考慮して、モーション・データの実機動作が想定外となった複数の原因候補及びその解決策を通知する内容を生成する。例えば、真面目又は几帳面な性格であれば、より多くの原因候補及びその解決策を含む通知内容とするが、不真面目又は横着な性格であれば少数の原因候補及びその解決策のみを含む通知内容とする。また、通知内容生成部９０４は、音声メッセージ（発話）による通知方法を利用する場合には、自律動作装置１００に関連付けられたキャラクター性や個性、性格に基づいた言葉遣いの音声メッセージを生成するようにしてもよい。
【０１２９】
なお、変形例として、通知内容生成部９０４は、通知対象となるユーザの状態（忙しい、暇など）や、周囲環境（家の中、屋外など）を考慮して、ユーザに通知する内容、タイミング、頻度を変更するようにしてもよい。
【０１３０】
そして、通知タイミング制御部９０５は、キャラクター性や個性といった自律動作装置１００に関連付けて記憶された属性情報を考慮して、通知内容生成部９０４が生成した内容で通知するタイミングを制御する。例えば、真面目又は几帳面な性格であればより高い頻度で通知を行なうが、不真面目又は横着な性格であれば低い頻度で通知を行なうようにする。
【０１３１】
図９に示したプログラム開発環境及び実行環境によれば、モーション・データを再生する自律動作装置１００は、実機動作が想定外となったときの原因と解決策を、以下に例示するように、個性豊かにユーザに通知することができる。
【０１３２】
●ツルツルの床でロボット歩行の進みが悪いときに、「床が滑るから」と伝えてくれる。
●ロボットが重いものを持ち上げる際、「倒れそうだから後ろを抑えておいて」と伝える。
【０１３３】
自律動作装置１００の各関節部などの動作を規定するモーション・データに、機体全体の動きを示す「理想状態」のデータを付加することによって、ユーザは、各関節の動きを見ているだけといった局所的な視点では分かり難い実機の想定外の動作やその原因を把握することが容易になる。理想状態と相違する想定外の実機動作と、その原因との関係として、以下のような例を挙げることができる。
【０１３４】
【表１】
2019097793.tif 000003
【０１３５】
また、自律動作装置１００は、自らの動作が想定外であった場合に、キャラクター性や個性といった自身に関連付けて記憶された属性情報を考慮した通知内容及び通知タイミングで想定外の実機動作の原因とその解決策をユーザに通知する。したがって、ユーザと自律動作装置１００の間でコミュニケーションが発生し、ユーザは自律動作装置１００に対して愛着を持つことができる。また、自律動作装置１００の全体的な振る舞いという視点で想定外の実機動作の原因がわかる。したがって、関節毎といった局部に対するフィードバック制御ではなく、実機全体のフィードバック制御が可能となり、自律動作装置１００の自律動作を実現することができる。
【０１３６】
Ｃ−１．プログラム開発環境の詳細
プログラム開発に使用する開発装置は、物理エンジン及び３Ｄグラフィックス・アニメーションの機能を装備している。したがって、自律動作装置の実機がモーション・データを再生したときの実際の物理現象を物理シミュレーションにより仮想機械で再現し、さらにモーション・データを再生する仮想機械の動作を３Ｄグラフィックス表示することができる。
【０１３７】
そして、制御プログラムの開発者（若しくは、モーション作成者）は、開発装置２００上で、３Ｄグラフィックス表示を通じて仮想機械が理想状態であるかどうかを確認しながら、キーフレームや理想状態の各データを適宜修正することができる。
【０１３８】
図１０には、図９に示したプログラム開発環境においてモーション・データを作成するための処理手順をフローチャートの形式で示している。図示の処理手順は、プログラムの開発者が図１又は図３〜図５に示した開発装置２００を用いてモーション編集を行なう際に実行される。
【０１３９】
プログラムの開発者は、例えばディスプレイ２２０に表示されたモーション・データ編集用のＧＵＩ画面を通じて、キーフレーム形式でモーション・データを作成する（ステップＳ１００１）。具体的には、プログラムの開発者は、モーション・データ編集用のＧＵＩ画面上で、開発対象とする自律動作装置１００の各モジュール部１２０に設定する目標値（例えば、アクチュエータ１２１としてのモータに対する回転位置や回転角度などの目標値）のデータ入力を行なう。
【０１４０】
そして、プログラムの開発者は、ステップＳ１００１でプログラムの開発者が作成したモーションのシミュレーションの実行を、開発装置２００に対して指示する（ステップＳ１００２）。次いで、開発装置２００は、モーションのシミュレーションを開始する（ステップＳ１００３）。開発装置２００は、物理エンジンを用いて、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮しながら、モーションの実機動作を仮想機械で再現する。
【０１４１】
ステップＳ１００３では、開発装置２００は、物理シミュレーションを実行し、３Ｄグラフィックスに自律動作装置１００の動きを表示しながら、モーション・データを再生する自律動作装置１００の機体（ロボットの全身）の傾き、移動速度、移動方向などの理想的な値を物理シミュレーションにより生成して、モーション・データを再生する自律動作装置の「理想状態」を示すデータとして、メモリ２１３上に一時的に保持する（ステップＳ１００４）。
【０１４２】
そして、開発装置２００は、モーション・データの物理シミュレーションの実行が終了すると（ステップＳ１００５）、モーション・データを再生する仮想機械の動作すなわち実機の理想状態を、ディスプレイ２２０の画面上に表示する（ステップＳ１００６）。なお、画面表示については、例えば図１４（後述）を参照されたい。
【０１４３】
プログラムの開発者は、画面上に表示された内容を見ながら、理想状態の修正が必要であるかどうかを確認する（ステップＳ１００７）。そして、プログラムの開発者は、理想状態の修正が必要であると判断したときには（ステップＳ１００７のＹｅｓ）、ディスプレイ２２０のモーション・データ編集用のＧＵＩ画面を通じて理想状態の修正を行なう（ステップＳ１００８）。なお、画面表示については、例えば図１４（後述）を参照されたい。
【０１４４】
そして、開発装置２００は、作成及び物理シミュレーションにより検証したキーフレームの理想状態のデータを、モーション・データと併せて出力する（ステップＳ１００９）。その後、理想状態が付加されたモーション・データは自律動作装置１００に転送され、自律動作装置１００上で再生されることになる。
【０１４５】
図１１には、理想状態を付加したモーション・データを編集するための開発装置２００の機能的構成例を模式的に示している。図示の機能的構成は、例えば開発装置２００として利用されるパーソナル・コンピュータ上で所定の開発ツール・プログラムを起動することによって具現化される。また、同図中の各機能ブロックは、例えば開発ツール・プログラムに含まれるソフトウェア・モジュールとして実装される。
【０１４６】
モーション作成部１１０１は、制御対象となる自律動作装置１００のキーフレームを編集する。モーション作成部１１０１は、例えばディスプレイ２２０にモーション・データ編集用のＧＵＩ画面を提示し、このＧＵＩ画面に対するプログラムの開発者からの入力に基づいて、キーフレーム形式のモーション・データを作成する。
【０１４７】
キーフレームを作成するためのＧＵＩの画面構成は任意である。キーフレームは、ある区間の動作の開始時並びに終了時などおける可動部の位置や速度といった目標値を指定するデータの集合である。例えば、キーフレーム毎の各可動部の目標値を入力するＧＵＩでもよい。また、制御対象の３Ｄモデルを利用して、頭部や左右の手足などの特定の部位における位置や姿勢を指定し、ＩＫ（インバース・キネマティクス）演算を利用してキーフレームを作成する方法を適用してもよい。
【０１４８】
また、モーション作成部１１０１は、ＧＵＩにより、制御対象となる自律動作装置１００の各可動部を駆動するモータの制御パラメータ及びモータのハードウェア特性値の入力を受け付けて、メモリ２１３上に、「制御パラメータデータセット」の形式（例えば、図８（前述）を参照のこと）で保持してもよい。また、モーション作成部１１０１は、制御対象となる自律動作装置１００の実機ハードウェア特性値を記述した３Ｄモデル・データの入力も受け付けて、メモリ２１３上に保持してもよい。モータの制御パラメータ及びモータのハードウェア特性値の入力を行なう画面構成は任意である。
【０１４９】
シミュレーション部１１０２は、開発装置２００が装備する物理エンジン機能を利用して、自律動作装置１００をモーション作成部１１０１で作成したモーション・データに従って現実に動作させたときの物理現象を、物理法則に基づいて演算する。その演算の際、シミュレーション部１１０２は、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮することによって、現実と同様の仮想機械全体の動作を生成し、その結果から自律動作装置１００の理想状態も生成する。
【０１５０】
例えば自律動作装置１００がロボットの場合、シミュレーション部１１０２は、物理エンジン機能を利用して、ロボットのアームの各リンクや関節の重量やモーメント、関節駆動用のアクチュエータなどの特性を考慮しつつ、ロボットを模して造られた仮想ロボットがモーション・データに従って動作する際の、開発ツール・プログラム上で表現された仮想的な物理環境と仮想ロボットとの物理作用（地面との接地や障害物との衝突など）を物理法則に基づいて計算することによって、あたかもロボットのアクチュエータが実際に駆動しているかのように、仮想ロボット全体の動作を計算して、機体の傾き、移動距離、移動方向といったロボットの理想状態を生成する。
【０１５１】
なお、モータの制御パラメータ及びモータのハードウェア特性値といった「制御パラメータデータセット」をシミュレーションに利用する場合、シミュレーション部１１０２は、モータ制御出力部１１１１と物理演算部１１１２を装備する。
【０１５２】
モータ制御出力部１１１１は、モーション作成部１１０１で作成されたモーション・データとして、モータの目標値（関節角度）を物理演算部１１１２に入力する。モータ制御出力部１１１１は、物理演算部１１１２から演算結果として変更されたモータの現在値を受け取り、目標値と現在値の偏差を求める。そして、モータ制御出力部１１１１は、比例ゲインＫP、積分ゲインＫI、並びに微分ゲインＫDの各々に基づくＰ制御入力、Ｉ制御入力、Ｄ制御入力を合算して、モータへの制御入力値を得ると、この制御入力値に対するモータの出力値として力若しくはトルクを計算する。但し、自律動作装置１００の実機で採用するモータの制御方式に基づいて、ＰＩＤ計算以外のロジックに変更することができる。そして、モータ制御出力部１１１１は、モータが持つ力学的又は電気的なハードウェア特性値（前述）のうち有意なものがあれば、出力値に対して修正などの処理を施す。
【０１５３】
物理演算部１１１２は、アームや関節モータなどの各部品の重量、重心、イナーシャ、関節可動範囲、摩擦係数といったハードウェア上の特性値を考慮して、モータ制御出力部１１１１で算出された出力値（力若しくはトルク）に基づいて、モータを駆動させたときの実機の物理的な挙動に相当する計算を行なうようにＡＰＩを通じて物理エンジンに指示する。また、物理演算部１１１２によって計算されたモータの現在値は、モータ制御出力部１１１１にフィードバックされる。
【０１５４】
シミュレーション部１１０２は、上記のシミュレーション結果に基づいて、自律動作装置１００の理想状態の動作を仮想機械によって再現する。そして、表示部１１０３は、３Ｄグラフィックス・アニメーション空間中で動作する仮想機械の動作をディスプレイ２２０上に表示する。
【０１５５】
プログラムの開発者は、画面上に表示された内容を見ながら、理想状態の修正が必要であるかどうかを確認することができる。そして、プログラムの開発者は、理想状態の修正が必要であると判断したときには、ディスプレイ２２０のモーション・データ編集用のＧＵＩ画面を通じて理想状態の修正を行なう。
【０１５６】
そして、出力部１１０４は、作成及び物理シミュレーションにより検証したキーフレームの理想状態のデータを、モーション・データと併せて出力する。その後、理想状態が付加されたモーション・データは自律動作装置１００に転送され、自律動作装置１００上で再生されることになる。
【０１５７】
図１２には、図９に示したプログラム開発環境において作成される、理想状態付きのモーション・データの構成例を模式的に示している。モーション・データは、キーフレームと理想状態からなる。
【０１５８】
キーフレームは、例えば、アクチュエータのパラメータの時系列の値からなる。アクチュエータのパラメータは、各関節の角度情報と、各関節駆動用のモータなどの制御パラメータを含む。前者の各関節の角度情報は、時刻毎の各関節の角度など、時系列に沿ったキーフレームの配列として記述される。また、後者のモータの制御パラメータは、時刻毎にモータに設定すべきＰＩＤパラメータ値など、時系列に沿ったＰＩＤパラメータの配列として記述される。
【０１５９】
一方、理想状態は、キーフレームを再生する自律動作装置１００の実機の移動速度、姿勢、移動方向などからなる。移動速度は、時刻毎の実機の速度ベクトルなど、時系列に沿った移動速度の配列として記述される。また、姿勢は、時刻毎の実機（若しくは、本体部１１０）、ロール（ｒｏｌｌ）、ピッチ（ｐｉｔｃｈ）、及びヨー（ｙａｗ）の各軸回りの回転角など、時系列に沿った実機の傾きの配列として記述される。また、移動方向は、時刻毎の実機のｘｙｚ空間上の位置など、時系列に沿った実機の位置の配列として記述される。
【０１６０】
モーション・データを評価するという観点から、理想状態として保持する値は、自律動作装置１００が動作中（すなわち、キーフレームの再生中）に、センサなどで計測できる情報である必要がある。また、最終的にキーフレームなどのモーション・データと一緒に理想状態を出力することになるので、理想状態の時間軸をモーション・データと一致させておく必要がある。
【０１６１】
一方、自律動作装置１００は、モーション・データを評価するためには、理想状態として保持する値と比較する実機の状態を取得するためのセンサを装備する必要がある。このため、自律動作装置１００は、各関節の回転角度を検出するエンコーダー、ジャイロセンサ又はＩＭＵ、カメラなどの複数のセンサを備えているものとする。また、実機の状態として移動距離や移動方向を取得するために、ＳＬＡＭやＴｏＦといった技術を適用してもよい。
【０１６２】
図１３には、自律動作装置１００がロボットの場合の理想状態のデータ構成例を示している。図示の例では、ロボットの理想状態は、ロボットの移動距離と、移動速度と、機体の姿勢（傾き）の各項目（状態パラメータ）で構成される。
【０１６３】
理想状態のロボットの移動距離は、ロボットが移動した相対距離の時系列に沿った配列、ロボットが移動した相対距離の合計、ロボットが移動した相対距離の分散、などの形式で記述することができる。
【０１６４】
また、理想状態のロボットの移動速度は、ロボットの移動速度の時系列に沿った配列、ロボットの移動速度の平均、ロボットの移動速度の分散、などの形式で記述することができる。
【０１６５】
また、理想状態のロボットの姿勢（傾き）は、ロボットの機体の傾きの時系列に沿った配列、ロボットの機体の傾きの平均、ロボットの機体の傾きの分散、などの形式で記述することができる。
【０１６６】
いずれの項目（状態パラメータ）においても、理想状態の値は時間軸の情報を含むので、モーション・データと時間軸を一致させることができる。また、値としては、基本的に、モーション開始時点からの相対値を記録しておく。
【０１６７】
また、図９に示したプログラム開発環境においてモーション・データを作成する過程において、モーション・データを用いてシミュレーションを行なうことにより、例えば図１４に示したような表示画面上で自律動作装置１００の理想状態を確認した結果、理想状態の修正が必要であると判断したときには、プログラムの開発者は、ＧＵＩ画面を通じて理想状態の修正を行なうことができる。
【０１６８】
図１４には、理想状態の確認と修正を行なうための入力画面の構成例を示している。図示の入力画面１４００は、再生指示部１４１０と、理想状態修正指示部１４２０を備えている。
【０１６９】
上述したように、開発装置２００上で、シミュレーション部１１０２は、作成したモーション・データを再生する自律動作装置１００をシミュレーションし、表示部１１０３は、そのシミュレーション結果に基づいて、理想状態の動作を再現する仮想機械の３Ｄグラフィックス・アニメーションをディスプレイ２２０の画面に表示する。
【０１７０】
再生指示部１４１０は、仮想機械の３Ｄグラフィックス・アニメーションの再生動作に関する指示を行なうための各種ボタンを備えている。参照番号１４１１は再生ボタン、参照番号１４１２は早送りボタン、参照番号１４１３は巻き戻しボタン、参照番号１４１４は早巻き戻しボタンである。また、参照番号１４１５で示すシークバー上でスライダ１４１６をスライドさせることによって、モーション・データを再生する仮想機械の３Ｄグラフィックス・アニメーションの再生位置を移動させることができる。また、参照番号１４１７は、現在の再生位置を示す再生位置表示領域であり、当該領域に時刻を直接書き込んで再生位置を指定することもできる。
【０１７１】
理想状態修正指示部１４２０には、再生位置表示領域１４１７で示されている再生位置における自律動作装置１００の理想状態を示す各項目のデータが表示されている。図１４に示す入力画面１４００は、自律動作装置１００としてロボットを想定しており、その理想状態はロボットの移動距離と、移動速度と、機体の姿勢（傾き）の各項目（状態パラメータ）で構成される。
【０１７２】
項目名「移動距離」の欄では、再生位置表示領域１４１７で示されている再生位置における、理想状態のロボットが移動した相対距離、相対距離の合計、並びに相対距離の分散の各データが表示され、各欄の値を直接書き換えることで理想状態の各データを修正することができる。
【０１７３】
また、項目名「移動速度」の欄では、再生位置表示領域１４１７で示されている再生位置における、理想状態のロボットの移動速度、移動速度の平均、並びに移動速度の分散の各データが表示され、各欄の値を直接書き換えることで理想状態の各データを修正することができる。
【０１７４】
また、項目名「姿勢（傾き）」の欄では、再生位置表示領域１４１７で示されている再生位置における、理想状態のロボットの傾き、傾きの平均、並びに傾きの分散の各データが表示され、各欄の値を直接書き換えることで理想状態の各データを修正することができる。
【０１７５】
入力画面１４００の左下の、参照番号１４３１で示す「モーション出力」ボタンが選択されると、入力画面１４００で確認並びに修正された理想状態の各データが、作成されたモーション・データと併せて出力される。また、参照番号１４３２で示す「Ｃａｎｃｅｌ」ボタンが先端されると、入力画面１４００を介して修正された理想状態のデータが取り消される。
【０１７６】
開発装置２００は、モーション・データを再生する自律動作装置の「理想状態」を示す各項目（状態パラメータ）のデータを、モーション・データに付加して出力する。
【０１７７】
Ｃ−２．プログラム実行環境の詳細
自律動作装置１００がモーション・データを再生するプログラム実行環境では、モーション・データを再生する実機動作が想定通りであったか（すなわち、理想状態であったか）を評価するとともに、実機動作が想定外であった場合に、想定外となった原因とその解決策をユーザに通知する。
【０１７８】
Ｃ−２−１．モーション・データの評価
自律動作装置１００の実機上では、モーション・データを再生した際に、各モジュール部１２０に配設されたセンサの検出値に基づいて、実機１００の傾き、移動速度、移動方向などの実機の状態を取得する。自律動作装置１００は、このような自身の実際の状態を取得するために、各関節の回転角度を検出するエンコーダー、ジャイロセンサ又はＩＭＵ、カメラなどの複数のセンサを備えているものとする。また、実機の状態として移動距離や移動方向を取得するために、ＳＬＡＭやＴｏＦといった技術を適用してもよい。
【０１７９】
図９に示したように、自律動作装置１００上では、モーション評価部９０１が、モーション・データを再生したときに上記の各種センサから取得した実際の実機状態と、モーション・データに付加された理想状態とを比較して、自律動作装置自身が実機動作を評価する。そして、モーション評価部９０１は、モーション・データを再生したときの実機状態が理想状態からかけ離れ、実機動作が想定外であったと判定する場合には、モーション評価用知識データベース９０２を参照して、複数の原因候補とその解決策を特定する。
【０１８０】
図１５には、図９に示したプログラム実行環境においてモーション・データを評価するための処理手順をフローチャートの形式で示している。図示の処理手順は、基本的には、自律動作装置１００の実機上でモーション・データを再生させる際に並行して実施される。
【０１８１】
自律動作装置１００の実機上でモーション・データの再生を開始すると（ステップＳ１５０１）、一定間隔でモーションの評価が実行される。
【０１８２】
自律動作装置１００の実機上では、モーション・データを再生した際に、各モジュール部１２０に配設されたセンサの検出値に基づいて、実機１００の傾き、移動速度、移動方向などの理想状態の各項目に対応する実機の状態を取得する（ステップＳ１５０２）。
【０１８３】
自律動作装置１００は、実機動作の状態を取得するために、各関節の回転角度を検出するエンコーダー、ジャイロセンサ又はＩＭＵ、カメラなどの複数のセンサの出力を取得する。また、実機の状態として移動距離や移動方向を取得するために、ＳＬＡＭやＴｏＦといった技術を適用してもよい。
【０１８４】
モーション評価部９０１は、モーション・データを再生したときに上記の各種センサから取得した実際の実機状態と、モーション・データに付加された理想状態とを比較して、自律動作装置自身が実機動作を評価する（ステップＳ１５０３）。
【０１８５】
そして、モーション評価部９０１は、モーション・データを再生したときの実機状態が理想状態からかけ離れ、実機動作が想定外であったと判定する場合には、モーション評価用知識データベース９０２を参照して、複数の原因候補とその解決策を特定する（ステップＳ１５０４）。特定された原因候補並びに解決策のデータは、本体部１１０のメモリ１１２上などに一時的に保持される。
【０１８６】
自律動作装置１００の実機上で、評価対象となるモーション・データの再生が終了しなければ（ステップＳ１５０５のＮｏ）、上記の処理ステップＳ１５０２〜Ｓ１５０４が繰り返し実行される。
【０１８７】
そして、自律動作装置１００の実機上でモーション・データの再生が終了すると（ステップＳ１５０５のＹｅｓ）、モーション・データの評価が終了する。本体部１１０のメモリ１１２上などに一時的に保持されている、実機の想定外動作の原因候補並びに解決策のデータは、モーション評価部９０１からユーザ通知部９０３に出力される。ユーザ通知部９０３では、モーション評価部９０１から入力するデータを、ユーザ通知内容の生成に利用する（後述）。
【０１８８】
図１６には、モーション評価用知識データベース９０２に格納されている、実機の想定外動作と原因候補の対応関係を記述したデータの構成例を示している。図示の例では、モーション評価用知識データベース９０２は、理想状態と比較する各項目（状態パラメータ）に対して、値の大小や方向などの理想状態に対する差異（ガイドワード）と、その差異が生じる１以上の原因候補をテーブルとして保持している。但し、同テーブルは、自律動作装置１００が床上を移動する移動装置（例えば、脚式ロボットや搬送車など）であることを想定した内容となっている。
【０１８９】
各状態パラメータについて、モーション・データを再生する実機の状態が理想状態に対して差異を生じる際に、２以上の原因候補が挙げられる場合がある。例えば、モーション・データを再生する実機の移動距離が理想状態よりも大きくなる原因候補として、理想状態で（若しくは、モーション・データの作成時に）想定される作業環境に対して「床に傾斜がある」及び「床の摩擦が違う」という２つが挙げられる。また、モーション・データを再生する実機の移動距離が理想状態よりも小さくなる原因候補として、「床に傾斜がある」、「床の摩擦が違う」、「（実機が）重いものを持っている」という３つが挙げられる。また、モーション・データを再生する実機の移動方向が右（左）に曲がる原因候補として、「床の凹凸」及び「床に付着物（装着物）がある」という２つが挙げられる。
【０１９０】
また、実機でモーション・データを再生したときに、同じ原因候補により、２以上の状態パラメータについて、実機の状態が理想状態と差異を生じることもある。例えば、「床に傾斜がある」という１つの原因候補のために、実機の「移動距離」が理想状態よりも大きく又は小さくなるとともに、実機の「姿勢傾き」が理想状態よりも前傾し又は左右に傾くことがある。
【０１９１】
図１６に示すテーブルでは、各原因候補に、識別情報としての原因ＩＤを与えている。したがって、同じ原因候補が複数の状態パラメータに跨って出現する場合であっても、原因ＩＤに基づいて同じ原因候補であることを特定することができる。
【０１９２】
さらに、図１６に示すテーブルでは、各状態パラメータについて、原因候補毎にスコアを与えている。例えば、スコアは、モーション・データを再生する実機の状態と理想状態とで差異を生じたときに、原因候補が状態パラメータに対して影響を及ぼす度合いを示す値である。具体的には、モーション・データを再生する実機の「移動距離」が理想状態よりも大きくなったとき、「床に傾斜がある」方が「床の摩擦が違う」よりも影響すると考えられる場合には、原因候補「床に傾斜がある」に対して高いスコア値０．９を与えるとともに、原因候補「床の摩擦が違う」に対しては低いスコア値０．１を与える。
【０１９３】
また、図１６に示すテーブルでは、同じ原因候補であっても、状態パラメータ毎に、並びに、状態パラメータにおいて理想状態に対する差異に基づいて、与えられるスコアが相違する。状態パラメータに基づいて原因候補が対して影響を及ぼす度合いが相違するからである。例えば、原因候補「床に傾斜がある」は、「移動距離」と「姿勢傾き」の各状態パラメータに対して及ぼす影響の度合いが相違することから、異なるスコア値が与えられている。また、原因候補「床に傾斜がある」は、「移動距離」が理想状態よりも大きくなることに対して影響を及ぼす度合いが高いことから高いスコア値０．９が与えられるが、「移動距離」が理想状態よりも小さくなることに対して影響を及ぼす度合いが低いことから低いスコア値０．２が与えられる。
【０１９４】
各原因候補のスコアは、物理シミュレーションの結果や実機検証に基づく値としてあらかじめ設定しておく。変形例として、自律動作装置１００の特性（個体差を含む）や行動などの目的に基づいて、各原因候補のスコアを変動させるようにしてもよい。例えば、まっすぐ歩くことが大切なロボット（若しくは、ロボットがまっすぐ歩くことが大切な行動計画を実行しているとき）には、その観点で、各原因候補の状態パラメータ毎のスコアを設定若しくは設定変更するようにする。なお、スコアではなく、状態パラメータ毎に各原因候補に割り当てた優先度という形式でテーブルに保持するようにしてもよい。スコア又は優先度のいずれの形式であれ、モーション・データの評価時、並びに後述する通知内容の生成時に、テーブルが利用される。モーション・データ単位で別々のテーブルを持ち、あるいは、複数のモーション・データを（目的などに応じて）グルーピングしてグループ単位でテーブルを持ち、モーション評価用知識データベース９０２に保持するようにしてもよい。
【０１９５】
モーション評価部９０１は、自律動作装置１００の実機上でモーション・データを再生中に、実機に装備された各種センサなどから取得した実際の実機状態と、再生中のモーション・データに付加された理想状態とを比較して、自律動作装置１００自身が実機動作を評価する。そして、モーション評価部９０１は、モーション評価用知識データベース９０２に保持されているテーブル（図１６を参照のこと）を参照して、実機の状態が理想状態と差異がある状態パラメータについては、該当する原因候補の原因ＩＤとそのスコアを特定して、保持しておく。
【０１９６】
例えば、モーション・データのある再生区間で実機の「移動距離」が理想状態よりも「大きい」という差異が観測されたときには、モーション評価部９０１は、当該再生区間の原因候補「床に傾斜がある」のスコア値０．９と原因候補「床の摩擦が違う」のスコア値０．１を保持する。また、同じ再生区間で実機の「姿勢傾き」が理想状態よりも「前傾」しているという差異が観測されたときには、当該同じ再生区間の原因候補「床に傾斜がある」のスコア値０．８と原因候補「重いものを持っている」のスコア値０．２を保持する。また、別の再生区間で実機の「移動距離」が理想状態よりも「小さい」という差異が観測されたときには、モーション評価部９０１は、当該別の再生区間の原因候補「床に傾斜がある」のスコア値０．２と原因候補「床の摩擦が違う」のスコア値０．６と原因候補「重いものを持っている」のスコア値０．２を保持する。
【０１９７】
そして、実機上でモーション・データの再生が終了すると、モーション評価部９０１は、原因ＩＤ毎にスコアの時系列の合計を求めて、最終的なモーション評価を生成する。このスコアが、後述する通知内容の生成時に利用される。
【０１９８】
図１７には、モーション評価部９０１がモーション評価によって得た原因候補のリストを例示している。合計スコアの高い原因候補を、実機動作が想定外となった原因として突き止める。図示の例では、スコアの合計値が高い順に、原因候補及びその原因ＩＤがリストアップされている。このリストのような情報が、例えば本体部１１０のメモリ１１２に保持される。後段の通知内容生成部９０４は、メモリ１１２から保持された情報を読み出して、ユーザへの通知内容の生成に利用する。
【０１９９】
Ｃ−２−２．ユーザへの通知処理
ユーザ通知部９０３は、モーション評価部９０１によるモーション評価の結果を受け取ると、自律動作装置１００に関連付けて記憶された属性情報を考慮した形態で、実機動作が想定外となった原因の候補とその解決策をユーザに通知する。ユーザ通知部９０３は、通知内容生成部９０４と、通知タイミング制御部９０５を備えている。
【０２００】
自律動作装置１００に関連付けて記憶された属性情報とは、例えば、自律動作装置１００としてのエンタテイメントロボットに与えられたキャラクター性や個性である。また、このような属性情報は、キャラクター性や個性・性格といった静的若しくは固定的な情報だけに限定されず、本能や感情などからなり時々刻々と変化する内部状態若しくは情動をさらに含んでいてもよい。自律動作装置１００に関連付けて記憶された属性情報は、例えば本体部１１０内のメモリ１１２に格納されている。また、変形例として、属性情報は、通知対象となるユーザの状態（忙しい、暇など）や、周囲環境（家の中、屋外など）であってもよい。ユーザの状態や周囲環境は、例えばカメラの撮像画像やユーザとの対話状況などに基づいて認識することができる。
【０２０１】
通知内容生成部９０４は、キャラクター性や個性といった自律動作装置１００に関連付けて記憶された属性情報を考慮して、モーション・データの実機動作が想定外となった複数の原因候補のうち通知する原因候補の数と種類、通知するタイミング及び頻度を選択する。
【０２０２】
例えば、自律動作装置１００に真面目又は几帳面な性格が関連付けられている場合には、通知内容生成部９０４は、考え得るすべての原因候補を、一定間隔毎に通知することを選択する。また、自律動作装置１００にせっかちな性格が関連付けられている場合には、通知内容生成部９０４は、スコア（若しくは、優先度）が最も高い原因候補を選択して、高頻度で通知することを決定する。また、自律動作装置１００に大雑把、若しくは不真面目又は横着な性格が関連付けられている場合には、通知内容生成部９０４は、スコアや優先度に関係なくランダムに選択した１つの原因候補のみを、１回だけ通知することを決定する。このようにして、ユーザの原因候補の通知内容をベースにして、自律動作装置１００のキャラクター性や個性を表現することができる。また、実機動作が想定外となった原因を個性的にユーザに提示することで、自律動作装置１００とユーザとの間でコミュニケーションが発生し、ユーザは自律動作装置１００に対して愛着を持つことができる。
【０２０３】
また、変形例として、通知内容生成部９０４は、通知対象となるユーザの状態（忙しい、暇など）や、周囲環境（家の中、屋外など）を考慮して、ユーザに通知する内容、タイミング、頻度を変更するようにしてもよい。例えば、ユーザが忙しいときや屋外では、通知内容生成部９０４は、ユーザを邪魔したり周囲に迷惑がかったりしないように、スコアや優先度に関係なくランダムに選択した１つの原因候補のみを、１回だけ通知することを決定する。また、ユーザが家の中にいて暇なときには、通知内容生成部９０４は、考え得るすべての原因候補を一定間隔毎に通知し、あるいは、高スコア又は高優先度の複数の原因候補を高頻度で通知することを決定する。
【０２０４】
また、通知内容生成部９０４は、音声メッセージや文字情報による通知方法を利用する場合には、自律動作装置１００に関連付けられたキャラクター性や個性、性格に基づいた言葉遣いのテキスト・データからなる音声メッセージ又は文字情報を選択するようにしてもよい。このようにして、ユーザの原因候補の通知内容をベースにして、自律動作装置１００のキャラクター性や個性を表現することができる。また、実機動作が想定外となった原因を個性的にユーザに提示することで、自律動作装置１００とユーザとの間でコミュニケーションが発生し、ユーザは自律動作装置１００に対して愛着を持つことができる。
【０２０５】
そして、通知タイミング制御部９０５は、通知内容生成部９０４が自律動作装置１００に関連付けて記憶された属性情報を考慮して選択した原因候補を、通知内容生成部９０４が選択したタイミングに従って、ユーザへの通知を制御する。
【０２０６】
図１８には、図９に示したプログラム実行環境において、ユーザ通知部９０３が、モーション評価部９０１による評価結果に基づいて、自律動作装置１００の実機動作が想定外であったことを通知するための処理手順をフローチャートの形式で示している。図示の処理手順は、自律動作装置１００の実機上でモーション・データの再生中に所定の間隔で実施され、又は任意のトリガー（例えばモーション・データの再生完了時）に実施される。
【０２０７】
通知内容生成部９０４は、例えば本体部１１０のメモリ１１２から、高いスコアの順にリストアップされた原因候補のリスト（例えば、図１７を参照のこと）を取得して、通知内容の生成処理を開始する（ステップＳ１８０１）。
【０２０８】
通知内容生成部９０４は、例えば、自律動作装置１００の実機上でモーション・データの再生中に、一定間隔又は任意のトリガー（例えばモーション・データの再生完了時）で、メモリ１１２にアクセスして、原因候補のリストの取得を試みる。原因候補のリストが存在しなければ、本処理を終了する。
【０２０９】
原因候補のリストが存在する場合、通知内容生成部９０４は、キャラクター性や個性といった自律動作装置１００に関連付けて記憶された属性情報を考慮して、モーション・データの実機動作が想定外となった複数の原因候補のうち通知する原因候補の数と種類、通知するタイミング及び頻度を選択する（ステップＳ１８０２）。
【０２１０】
次いで、通知内容生成部９０４は、ステップＳ１８０２で選択した原因候補に対するユーザへの通知内容を、モーション評価用知識データベース９０２から取得する（ステップＳ１８０３）。
【０２１１】
そして、通知タイミング制御部９０５は、モーション評価用知識データベース９０２から取得された通知内容を、通知内容生成部９０４が選択した通知タイミングと通知頻度に従って、ユーザへ通知する（ステップＳ１８０４）。
【０２１２】
図１９には、モーション評価用知識データベース９０２に格納されている、各原因候補に対する通知内容を記述したデータの構成例を示している。図示の例では、モーション評価用知識データベース９０２は、各原因候補に対する通知内容を、原因ＩＤでインデックス化したテーブルとして保持している。テーブルは、ユーザに通知すべき原因候補の数だけエントリを持つ。図示の例では、通知内容は、「傾いているから早く歩けちゃった」、「滑ってうまく歩けない」、「重くて歩くのに時間がかかる」、「ＸＸＸがひっかかって足が開けない」、「床が凸凹しているから右に曲がっちゃう」、「よくわからないけどうまく歩けない」など、ユーザの支援を促す内容であり、自律動作装置１００単体ではできない解決策をユーザの支援により実現することができる。
【０２１３】
例えば、モーション評価部９０１がモーション・データの評価によって図１７に示したような原因候補のリストを得た場合には、通知内容生成部９０４は、リストアップされた各原因候補に対する通知内容を、モーション評価用知識データベース９０２に保持されているテーブル（図１９を参照のこと）から取得して、図２０に示すような通知内容を決定することができる。
【０２１４】
なお、図１９に示したテーブルは、ユーザ通知部９０３が、音声メッセージや文字情報による通知方法を利用することを前提としている。自律動作装置１００に関連付けられたキャラクター性や個性、性格に基づいて言葉遣いを切り替えたい場合には、想定するキャラクター性や個性、性格の種類毎にテーブルを用意して、モーション評価用知識データベース９０２に保持しておくようにしてもよい。
【０２１５】
また、ユーザ通知部９０３は、画面表示やジェスチャなど、発話以外のさまざまなモダリティを用いてユーザに対する通知を行なうことも考えられる。ユーザ通知部９０３は、自律動作装置１００に装備される複数のモダリティのうちいずれか１つ、又は２以上を組み合わせて、実機動作が想定外となった原因候補の通知を行なうことができる。
【０２１６】
通知内容生成部９０４は、キャラクター性や個性といった自律動作装置１００に関連付けて記憶された属性情報や、通知対象となるユーザの状態（忙しい、暇など）、周囲環境（家の中、屋外など）に基づいて、ユーザへの通知に用いるモダリティを選択するようにしてもよい。
【０２１７】
上述したようなユーザの通知処理によれば、モーション・データを再生する実機の動作が、モーション・データの作成時に想定した理想状態から逸脱してしまった原因を、ユーザに個性豊かに通知することが可能となる。
【０２１８】
Ｄ．まとめ
本明細書で開示する技術によれば、以下の事柄を実現することができる。
【０２１９】
（１）モーション・データを再生する自律動作装置１００の理想状態を、シミュレーションを通じて作成して、モーション・データに付加することができる。例えば、自律動作装置１００がロボットの場合、モーション・データは、キーフレームなど各関節角度の時間的な変化を示すデータからなり、理想状態はロボット全体の傾き、移動速度、移動方向などの理想的な値からなる。
（２）プログラムの開発者（モーション・データの作成者）は、自律動作装置１００の理想状態を、シミュレーション画面で確認し、必要に応じて適宜修正することができる。
（３）自律動作装置１００は、理想状態付きのモーション・データを再生した際、実機の状態（全身の傾きや移動速度、移動方向など）をセンシングして、理想状態との差異を評価することができる。すなわち、自律動作装置１００は、モーション・データの再生時の動作がモーション・データの作成者の意図から逸脱していることを、自身で検出することができる。
（４）自律動作装置１００は、理想状態と実際の状態との差分と原因を関連付けて記憶する知識データベースを装備している。そして、自律動作装置１００は、実機動作が理想状態から逸脱した想定外の状態となったときに、知識データベースから、複数の原因候補とその解決策を特定して、ユーザに通知することができる。実機動作を理想状態と比較することにより、関節毎のアクチュエータなど局所的な視点での挙動だけではなく、システム全体の視点で挙動の差異とその原因を特定することができる。したがって、システム全体としてのフィードバック制御が可能となり、自律動作装置１００の高度な自律動作を実現することが可能になる。
（５）自律動作装置１００は、キャラクター性や個性など自身に関連付けて記憶された属性情報を考慮して、複数の原因候補から、ユーザへの通知内容、通知タイミング、通知頻度を決定して、ユーザに通知することができる。
（６）自律動作装置１００は、実機動作が想定外となった原因を、ユーザの支援を促す通知内容で通知することにより、自律動作装置１００単体ではできない解決策をユーザの支援により実現することができる。また、ユーザの原因候補の通知内容をベースにして、自律動作装置１００のキャラクター性や個性を表現することができる。また、実機動作が想定外となった原因を個性的にユーザに提示することで、自律動作装置１００とユーザとの間でコミュニケーションが発生し、ユーザは自律動作装置１００に対して愛着を持つことができる。
【産業上の利用可能性】
【０２２０】
以上、特定の実施形態を参照しながら、本明細書で開示する技術について詳細に説明してきた。しかしながら、本明細書で開示する技術の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。【０２２１】
本明細書で開示する技術は、ロボットや自動走行車、無人航空機（ドローン）などの自律動作装置の自律的若しくは適応的な行動を実現するアプリケーション・プログラムの開発に利用することができる。また、本明細書で開示する技術は、行動計画を用いて動作を制御する、ビデオ・ゲームのキャラクターのＡＩ開発に対しても適用することができる。【０２２２】
要するに、例示という形態により本明細書で開示する技術について説明してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本明細書で開示する技術の要旨を判断するためには、特許請求の範囲を参酌すべきである。【０２２３】
なお、本明細書の開示の技術は、以下のような構成をとることも可能である。
（１）可動部を含む制御対象装置の制御プログラムを処理する情報処理装置であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算部と、
前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持部と、
を具備し、前記理想状態を付加して前記制御プログラムを出力する、情報処理装置。
（２）前記演算部は、前記制御プログラムに従った前記制御対象装置の物理挙動を演算する、
上記（１）に記載の情報処理装置。
（３）時間毎の理想状態の前記制御対象装置を表示装置に表示させる表示部をさらに備える、
上記（１）又は（２）のいずれかに記載の情報処理装置。
（４）理想状態は、前記制御対象装置の状態を示す複数の状態パラメータからなり、
時間毎の理想状態の各状態パラメータの変更の指示を受け付ける入力部をさらに備え、
前記入力部が受け付けた指示に従って状態パラメータを修正した後の前記理想状態を付加して前記制御プログラムを出力する、
上記（１）乃至（３）のいずれかに記載の情報処理装置。
（５）前記制御対象装置は、床上を移動する移動装置であり、
前記移動装置の理想状態は、前記移動装置本体の姿勢又は傾き、移動方向、移動距離、又は移動速度のうち少なくとも１つの状態パラメータを含む、
上記（１）乃至（４）のいずれかに記載の情報処理装置。
（６）可動部を含む制御対象装置を制御プログラムに従って制御する情報処理装置であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部と、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部と、
を具備する情報処理装置。
（７）前記評価部は、前記制御対象装置の実際の状態と前記理想状態の差異の原因を特定する、
上記（６）に記載の情報処理装置。
（８）理想状態は、前記制御対象装置の状態を示す複数の状態パラメータからなり、
前記状態取得部は、状態パラメータ毎の前記制御対象装置の状態を取得し、
前記評価部は、状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態を比較した結果に基づいて、前記差異の原因を特定する、
上記（７）に記載の情報処理装置。
（９）前記制御対象装置は、床上を移動する移動装置であり、
前記状態パラメータは、前記移動装置本体の姿勢又は傾き、移動方向、移動距離、又は移動速度のうち少なくとも１つを含む、
上記（８）に記載の情報処理装置。
（１０）状態パラメータ毎の前記制御対象装置の実際の状態と前記理想状態の差異をその原因と関連付けて記憶するデータベースをさらに備え、
前記評価部は、前記データベースを参照して、前記制御対象装置の実際の状態と前記理想状態の差異の原因を特定する、
上記（８）又は（９）のいずれかに記載の情報処理装置。
（１１）前記評価部による評価結果をユーザに通知する通知部をさらに備える、
上記（６）乃至（１０）のいずれかに記載の情報処理装置。
（１２）前記通知部は、前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザに通知する、
上記（１１）に記載の情報処理装置。
（１３）前記制御対象装置の実際の状態と前記理想状態の差異の原因をユーザへの通知内容を関連付けて記憶するデータベースをさらに備え、
前記通知部は、前記データベースを参照して、前記評価部が特定した原因に関連付けられた通知内容を用いてユーザへの通知を行なう、
上記（１２）に記載の情報処理装置。
（１４）前記通知部は、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知方法を制御する、
上記（１１）乃至（１３）のいずれかに記載の情報処理装置。
（１５）前記通知部は、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知内容、通知タイミング、又は通知頻度のうち少なくとも１つを制御する、
上記（１１）乃至（１４）のいずれかに記載の情報処理装置。
（１６）前記通知部は、複数のモダリティを有し、前記制御対象装置に関連付けられた属性情報に基づいて、ユーザへの通知に使用するモダリティを選択する、
上記（１１）乃至（１５）のいずれかに記載の情報処理装置。
（１７）前記制御対象装置に関連付けられた属性情報は、前記制御対象装置に関連付けられたキャラクター性、個性、性格、内部状態又は感情、ユーザの状態、周囲環境のうち少なくとも１つを含む、
上記（１４）乃至（１６）のいずれかに記載の情報処理装置。
（１８）可動部を含む制御対象装置を制御プログラムに従って制御する情報処理方法であって、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得ステップと、
前記状態取得ステップにおいて取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価ステップと、
を有する情報処理方法。
（１９）可動部を含む制御対象装置を制御プログラムに従って制御するための処理をコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
前記制御プログラムに含まれる前記可動部に対する時間毎の指令値に従って動作する前記制御対象装置の状態を取得する状態取得部、
前記状態取得部が取得した前記制御対象装置の実際の状態を、前記制御プログラムに付加された理想状態を比較して、前記制御対象装置の動作又は前記制御プログラムを評価する評価部、
として機能させるコンピュータ・プログラム。
（２０）可動部を含む制御対象装置の制御プログラムを製造するプログラム製造方法であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算ステップと、
前記演算ステップによる演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持ステップと、
を有し、前記理想状態を付加して前記制御プログラムを出力する、プログラム製造方法。
（２１）可動部を含む制御対象装置の制御プログラムを処理する情報処理方法であって、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算ステップと、
前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持ステップと、
前記理想状態を付加して前記制御プログラムを出力するステップと、
を有する情報処理方法。
（２２）可動部を含む制御対象装置の制御プログラムの処理をコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
前記可動部に対する時間毎の指令値を含む前記制御プログラムに従った前記制御対象装置の動作を演算する演算部、
前記演算部による演算結果として得られる前記制御プログラムに従って動作する前記制御対象装置の理想状態を保持する保持部、
前記理想状態を付加して前記制御プログラムを出力する出力部、
として機能させるコンピュータ・プログラム。
【符号の説明】
【０２２４】
１００…自律動作装置（実機）、１１０…本体部
１１１…プロセッサ、１１２…メモリ、１１３…通信モデム
１１４…バッテリー、１１５…ＵＳＢポート、１１６…ＧＰＳ
１２０…モジュール部
１２１…アクチュエータ、１２２…センサ
１２３…プロセッサ、１２４…メモリ、１２５…通信モデム
２００…開発装置、２１０…コンピュータ本体部
２１１…プロセッサ、２１２…ＧＰＵ
２１３…メモリ、２１４…ＵＳＢポート、２１５…通信モデム
２２０…ディスプレイ、２３０…ユーザ・インターフェース（ＵＩ）部
９０１…モーション評価部
９０２…モーション評価用知識データベース、９０３…ユーザ通知部
９０４…通知内容生成部、９０５…通知タイミング制御部
１１０１…モーション作成部、１１０２…シミュレーション部
１１０３…表示部、１１０４…出力部
１１１１…モータ制御出力部、１１１２…物理演算部
【図１】
2019097793.tif 000004
【図２】
2019097793.tif 000005
【図３】
2019097793.tif 000006
【図４】
2019097793.tif 000007
【図５】
2019097793.tif 000008
【図６】
2019097793.tif 000009
【図７】
2019097793.tif 000010
【図８】
2019097793.tif 000011
【図９】
2019097793.tif 000012
【図１０】
2019097793.tif 000013
【図１１】
2019097793.tif 000014
【図１２】
2019097793.tif 000015
【図１３】
2019097793.tif 000016
【図１４】
2019097793.tif 000017
【図１５】
2019097793.tif 000018
【図１６】
2019097793.tif 000019
【図１７】
2019097793.tif 000020
【図１８】
2019097793.tif 000021
【図１９】
2019097793.tif 000022
【図２０】
2019097793.tif 000023
【国際調査報告】
2019097793.tif 000024
2019097793.tif 000025
2019097793.tif 000026
2019097793.tif 000027