(57)【特許請求の範囲】
【請求項１】
胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御するシステムであって、
前記発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、
前記発話の際の前記口唇の開度および音声強度並びに前記動作方向に基づいて関節角を求める関節角計算手段、および
前記関節角に従って前記少なくとも１つの首関節の前記少なくとも１つの首関節アクチュエータを駆動する第１駆動手段を備える、アンドロイドロボット制御システム。
【請求項２】
前記アンドロイドロボットは前記胴体部を傾動する腰関節および前記腰関節を動作させる腰関節アクチュエータを含み、さらに
前記関節角に従って前記腰関節アクチュエータを駆動する第２駆動手段を備える、請求項１記載のアンドロイドロボット制御システム。
【請求項３】
前記関節角計算手段は、
前記発話の際の前記口唇の開度および音声強度に基づいてトルクを計算するトルク計算手段、
前記トルクおよび前記動作方向から、ばねダンパモデルを用いて動作角を計算する動作角計算手段、および
前記動作角を関節角に変換する変換手段を含む、請求項１または２記載のアンドロイドロボット制御システム。
【請求項４】
前記トルク計算手段は前記口唇の開度および音声強度の加算に基づいてトルクを計算する、請求項３記載のアンドロイドロボット制御システム。
【請求項５】
前記トルク計算手段は前記口唇の開度および音声強度の積算に基づいてトルクを計算する、請求項３記載のアンドロイドロボット制御システム。
【請求項６】
胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御する装置であって、
前記発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、
前記発話の際の前記口唇の開度および音声強度並びに前記動作方向に基づいて関節角を求める関節角計算手段、および
前記関節角に従って前記少なくとも１つの首関節の前記少なくとも１つの首関節アクチュエータを駆動する駆動手段を備える、アンドロイドロボット制御装置。
【請求項７】
胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御するアンドロイドロボット制御システムのコンピュータによって実行されるプログラムであって、前記コンピュータを
前記発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、
前記発話の際の前記口唇の開度および音声強度並びに前記動作方向に基づいて関節角を求める関節角計算手段、および
前記関節角に従って前記少なくとも１つの首関節の前記少なくとも１つの首関節アクチュエータを駆動する駆動手段
として機能させるための、アンドロイドロボット制御プログラム。
【請求項８】
胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットの制御システムにおいて、前記システムが実行する制御方法であって、
前記発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定ステップ、
前記発話の際の前記口唇の開度および音声強度並びに前記動作方向に基づいて関節角を求める関節角計算ステップ、および
前記関節角に従って前記少なくとも１つの首関節の前記少なくとも１つの首関節アクチュエータを駆動する駆動ステップを含む、アンドロイドロボット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はアンドロイドロボットの制御システム、装置、プログラムおよび方法に関し、特にたとえば、発話するアンドロイドロボットの動作を制御する、アンドロイドロボットの制御システム、装置、プログラムおよび方法に関する。
【背景技術】
【０００２】
発話に伴って身体動作を制御するロボットシステムの一例が、特許文献１に開示されている。特許文献１では発話をオン／オフの情報に変え、そのオン／オフパターンによってうなずくなどの身体動作のトリガとする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１‐２４６１７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１のシステムでは、パターンが単純なので、身体動作も単純である。
【０００５】
それゆえに、この発明の主たる目的は、新規な、アンドロイドロボットの制御システム、装置、プログラムおよび方法を提供することである。
【０００６】
この発明の他の目的は、発話に伴ってより人間らしい身体動作を生成できる、アンドロイドロボットの制御システム、装置、プログラムおよび方法を提供することである。
【課題を解決するための手段】
【０００７】
この発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御するシステムであって、発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、発話の際の口唇の開度および音声強度並びに動作方向に基づいて関節角を求める関節角計算手段、および関節角に従って少なくとも１つの首関節の少なくとも１つの首関節アクチュエータを駆動する第１駆動手段を備える、アンドロイドロボット制御システムである。
【０００９】
第１の発明では、アンドロイドロボット制御システム（１０:実施例において対応する
部分を例示する参照符号。以下、同様）は、アンドロイドロボット(１２)を制御し、アンドロイドロボットは、胴体部（２４）と口唇を有する頭部（２６）とを、少なくとも１つの首関節で連結している。首関節は少なくとも１つのアクチュエータ（Ａ１５）によって動作される。方向決定手段（３６、Ｓ５３）は、アンドロイドロボットが、スピーカから発話する際の発話音声の基本周波数（Ｆ０）に基づいて動作方向を決定する。そして、関節角計算手段（３６、Ｓ５１‐Ｓ５７）が、発話の際の口唇の開度および音声強度ならびに動作方向に基づいて関節角（φ）を計算する。第１駆動手段（３６、４４）は、その関節角に従って少なくとも１つの首関節アクチュエータ（Ａ１５）を駆動する。そのため、発話に伴って、頭部が俯仰される。
【００１０】
第１の発明によれば、発話の際の口唇の開度および音声強度に基づいて頭部が俯仰されるので、発話に伴う自然な身体動作が生成できる。
【００１１】
第２の発明は、第１の発明に従属し、アンドロイドロボットは胴体部を傾動する腰関節および腰関節を動作させる腰関節アクチュエータを含み、さらに関節角に従って腰関節アクチュエータを駆動する第２駆動手段を備える、アンドロイドロボット制御システムである。
【００１２】
第２の発明では、第２駆動手段（３６、４４）が関節角に従って腰関節アクチュエータ（Ａ１８）を駆動する。そのため、発話に伴って頭部が俯仰されるのみならず胴体部も前屈または後傾されるので、身体動作が一層自然なものとなる。
【００１３】
第３の発明は、第１または第２の発明に従属し、関節角計算手段は、発話の際の口唇の開度および音声強度に基づいてトルクを計算するトルク計算手段、トルクおよび動作方向から、ばねダンパモデルを用いて動作角を計算する動作角計算手段、および動作角を関節角に変換する変換手段を含む、アンドロイドロボット制御システムである。
【００１４】
第４の発明は、第３の発明に従属し、トルク計算手段は口唇の開度および音声強度の加算に基づいてトルクを計算する、アンドロイドロボット制御システムである。
【００１５】
第４の発明では、トルクを計算する際に、口唇開度LipHeightと音声強度VoicePowerの加算に基づいて、後述の数１に従って、トルクＴ（ｔ）を計算する。
【００１６】
第４の発明によれば、「あ」のように口を大きく開けるか、あるいは声が大きい場合に、首や腰を大きく動かすことができる。
【００１７】
第５の発明は、第３の発明に従属し、トルク計算手段は口唇の開度および音声強度の積算に基づいてトルクを計算する、アンドロイドロボット制御システムである。
【００１８】
第５の発明では、トルクを計算する際に、口唇開度LipHeightと音声強度VoicePowerの積算に基づいて、後述の数５に従って、トルクＴ（ｔ）を計算する。
【００１９】
第５の発明によれば、「あ」のように口を大きく開けかつ声が大きい場合に、首や腰を大きく動かすことができる。
【００２０】
第６の発明は、胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御する装置であって、発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、発話の際の口唇の開度および音声強度並びに動作方向に基づいて関節角を求める関節角計算手段、および関節角に従って少なくとも１つの首関節の少なくとも１つの首関節アクチュエータを駆動する駆動手段を備える、アンドロイドロボット制御装置である。
【００２１】
第７の発明は、胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットを制御するアンドロイドロボット制御システムのコンピュータによって実行されるプログラムであって、コンピュータを発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定手段、発話の際の口唇の開度および音声強度並びに動作方向に基づいて関節角を求める関節角計算手段、および関節角に従って少なくとも１つの首関節の少なくとも１つの首関節アクチュエータを駆動する駆動手段として機能させるための、アンドロイドロボット制御プログラムである。
【００２２】
第８の発明は、胴体部と口唇を有する頭部とを、少なくとも１つの首関節アクチュエータによって動作される少なくとも１つの首関節を介して連結し、スピーカから発話するアンドロイドロボットの制御システムにおいて、システムが実行する制御方法であって、発話の際の音声の基本周波数に基づいて動作方向を決定する方向決定ステップ、発話の際の口唇の開度および音声強度並びに動作方向に基づいて関節角を求める関節角計算ステップ、および関節角に従って少なくとも１つの首関節の少なくとも１つの首関節アクチュエータを駆動する駆動ステップを含む、アンドロイドロボット制御方法である。
【発明の効果】
【００２３】
この発明によれば、アンドロイドロボットにおいて、発話に伴う自然な身体動作を生成できる。
【００２４】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００２５】
【図１】図１はこの発明の一実施例のアンドロイドロボット制御システムを示す図解図である。
【図２】図２は図１実施例に用いられるアンドロイドロボットの一実施例を示す図解図である。
【図３】図３は図２のアンドロイドロボットの電気的な構成を示すブロック図である。
【図４】図４は図３に示すメモリのメモリマップの一例を示す図解図である。
【図５】図５は図１実施例におけるアンドロイドロボットの発話動作の一例を示すフロー図である。
【図６】図６は図５に示す口唇動作制御処理の一例を示すフロー図である。
【図７】図７は図５に示す身体動作制御処理の一例を示すフロー図である。
【図８】図８は身体動作制御処理に利用するばねダンパモデル一例を示す図解図である。
【図９】図９は身体動作制御処理の他の実施例を示す図解図である。
【図１０】図１０は身体動作制御処理のさらに他の実施例を示す図解図である。
【発明を実施するための最良の形態】
【００２６】
図１を参照して、この実施例のアンドロイドロボット制御システム（以下、単に「システム」ということがある。）１０は、アンドロイドロボット１２を含む。アンドロイドロボット１２は、人間に酷似した姿形（外観など）を有する人型ロボットであり、人間に酷似した動作（振り、振る舞い、発話）を行う。
【００２７】
アンドロイドロボット１２は、インターネットや電話通信回線のようなネットワーク１４を介して遠隔操作端末１６に接続される。遠隔操作端末１６は、ＰＣ、ＰＤＡ、スマートフォン、タブレット端末のような汎用のコンピュータであり、この遠隔操作端末１６には、スピーカ１８、マイク２０およびモニタ２２が接続される。図示は省略するが、遠隔操作端末１６には、タッチパネルやキーボードのような入力装置が含まれる。また、遠隔操作端末１６の動作を制御するためのプログラムおよびデータは、遠隔操作端末１６に内蔵しているメモリ（図示せず）に記憶されており、同じく内蔵のＣＰＵ（図示せず）によって遠隔操作端末１６全体的な動作が制御される。
【００２８】
図２は図１の実施例に用いるアンドロイドロボット１２の一例を示すが、他の外観、構造を持つ任意のアンドロイドロボットが利用可能であることを予め指摘しておく。
【００２９】
アンドロイドロボット１２は、腰関節を有する胴体部２４および首関節を介して胴体部２４に連結される頭部２６を含む。頭部２６には、目（眼球）の上下に、上瞼２８ａおよび下瞼２８ｂが形成され、それらの上瞼２８ａおよび下瞼２８ｂの上下動を制御することによって、目を開けたり閉じたりする動作が可能となる。頭部２６にはさらに口唇が形成され、それの両端が口角３０となる。口角３０も同様に上下動可能である。
【００３０】
胴体部２４の上端（頭部の下方）が肩３２であり、胴体部２４の中ほどが腰３４である。肩３２は上下動可能であり、腰３４は前屈および後傾が可能である。
【００３１】
アンドロイドロボット１２の上述の各部分を動かすための以下に説明するアクチュエータは、この実施例では、いずれもパルス電力によって駆動されるステッピングモータであり、ステッピングモータの回転量はパルス数で決まる。パルス数が指令値として与えられる。なお、初期値とは、当該アクチュエータによって変位される対象部位を平常状態にするためのパルス数（指令値）である。
【００３２】
上述の上瞼２８ａの上下動を制御するのが、アクチュエータＡ１であり、このアクチュエータＡ１は「０−２５５」の指令値に応じて動作する。初期値は「６４」である。アクチュエータＡ１は、指令値「０」で上瞼２８ａが一番上の位置（目を大きく見開いた状態）になり、指令値「２５５」で一番下の位置（目をきつく閉じた状態）になるように、設定されている。
【００３３】
アクチュエータＡ２、Ａ３およびＡ４は眼球を左右上下に動かすためのアクチュエータである。
【００３４】
アクチュエータＡ５は、下瞼２８ｂの上下動を制御するアクチュエータであり、「０−２５５」の指令値に応じて動作する。初期値は「０」である。アクチュエータＡ５は、指令値「２５５」で下瞼２８ｂが一番上の位置（目をきつく閉じた状態）になり、指令値「０」で一番下の位置（目を大きく見開いた状態）になるように設定されている。
【００３５】
アクチュエータＡ６は額を動かすためのアクチュエータであり、アクチュエータＡ７は眉間を動かすためのアクチュエータである。
【００３６】
アクチュエータＡ８は、口角３０を上げるためのアクチュエータであり、「０−２５５」の指令値に応じて動作する。初期値は「０」である。アクチュエータＡ８は、指令値「２５５」で口角３０が一番上の位置に変位した状態となり、指令値「０」で一番下の位置になるように設定されている。
【００３７】
アクチュエータＡ９は舌を上下方に動かすためのアクチュエータである。
【００３８】
アクチュエータＡ１０は口唇を左右に広げるアクチュエータであり、アクチュエータＡ１１は口唇を前に突き出すためのアクチュエータである。アクチュエータＡ１１は、「０−２５５」の指令値に応じて動作し、初期値は「０」である。アクチュエータＡ１１の指令値「２５５」で口唇が一番上まで変位した状態となり、指令値「０」で口唇が最も下がった状態になるように設定されている。これらのアクチュエータＡ１０、Ａ１１は後述の口唇動作の制御のために用いられる。
【００３９】
Ａ１３は顎を突き出したり引いたりするためのアクチュエータであり、「０−２５５」の指令値に応じて動作する。初期値は「３２」である。アクチュエータＡ１３は、指令値「０」で顎を最も上げた（つまり口を閉じた）状態にし、指令値「２５５」で顎を最も下げた（つまり口を開けた）状態とするように設定されている。アクチュエータＡ１３は、後述の口唇動作の制御に用いられる。
【００４０】
アクチュエータＡ１４は頭部２６を左右に傾動させるためのアクチュエータである。
【００４１】
アクチュエータＡ１５は頭部２６を俯仰させるために、上記の首関節の関節角を制御するアクチュエータ（首関節アクチュエータ）であり、「０−２５５」の指令値で動作する。初期値は「１２８」である。アクチュエータＡ１５は、指令値「２５５」で頭部２６が最も仰向いた状態になり、指令値「０」で最も直立している状態になるように、首関節を制御する。
【００４２】
アクチュエータＡ１６は頭部を左右に回動させるためのアクチュエータである。
【００４３】
アクチュエータＡ１７は肩３２を上下動するためのアクチュエータであり、「０−２５５」の指令値で動作する。初期値は「０」である。アクチュエータＡ１７は、指令値「２５５」で肩３２が一番上の位置になり、指令値「０」で一番下の位置になるように、設定されている。
【００４４】
アクチュエータＡ１８は腰３４を前屈させまたは後傾させるために、上記腰関節の関節角を制御するアクチュエータ（腰関節アクチュエータ）であり、「０−２５５」の指令値で動作する。初期値は「３２」である。アクチュエータＡ１８は、指令値「２５５」で腰３４が最も前屈した状態になり、指令値「０」で最も後傾した状態になるように、腰関節を制御する。
【００４５】
アクチュエータＡ１９は腰３４を左右に回動（ひねる）ためのアクチュエータである。
【００４６】
アンドロイドロボット１２は、図３に示すように、アンドロイドロボット１２の全体制御を司るＣＰＵ３６を備える。ＣＰＵ３６は、バス３８を通して通信モジュール４０に接続され、したがって、ＣＰＵ３６は通信モジュール４０を介して、ネットワーク１４すなわち遠隔操作端末１６と、有線で、または無線で、通信可能に接続される。
【００４７】
ＣＰＵ３６はまた、バス３８を通してメモリ４２にアクセスでき、このメモリ４２に設定されているプログラムやデータ（図４：後述）に従って、バス３８を通してアクチュエータ制御回路４４に上述のような指令値を与え、各アクチュエータＡ１‐Ａｎの動作を制御する。アクチュエータ制御回路４４は、ＣＰＵ３６から与えられる指令値に応じた数のパルス電力を生成し、それを該当するステッピングモータに与えることによって、各アクチュエータＡ１‐Ａｎを駆動する。
【００４８】
ただし、アクチュエータとしてはこのようなステッピングモータを用いるものの他、サーボモータを用いるアクチュエータ、流体アクチュエータなど任意のアクチュエータが利用可能である。
【００４９】
センサＩ／Ｆ（インタフェース）４６は、バス３８を介して、ＣＰＵ３６に接続され、触覚センサ４８および眼カメラ５０からのそれぞれの出力を受ける。
【００５０】
触覚センサ４８ないし皮膚センサは、たとえばタッチセンサであり、アンドロイドロボット１２の触覚の一部を構成する。つまり、触覚センサ４８は、人間や他の物体等がアンドロイドロボット１２に触れたか否かを検出するために用いられる。触覚センサ４８からの出力（検出データ）は、センサＩ／Ｆ４６を介してＣＰＵ３６に与えられる。したがって、ＣＰＵ３６は、人間や他の物体等がアンドロイドロボット１２に触れたこと（およびその強弱）を検出することができる。
【００５１】
眼カメラ５０は、イメージセンサであり、アンドロイドロボット１２の視覚の一部を構成する。つまり、眼カメラ５０は、アンドロイドロボット１２の眼から見た映像ないし画像を検出するために用いられる。この実施例では、眼カメラ５０の撮影映像（動画ないし静止画）に対応するデータ（画像データ）は、センサＩ／Ｆ４６を介してＣＰＵ３６に与えられる。ＣＰＵ３６は、撮影映像の変化を検出するのみならず、その画像データを、通信モジュール４０およびネットワーク１４（図１）を介して遠隔操作端末１６に送信する。そして、遠隔操作端末１６は、受信した画像データをモニタ２２に出力する。したがって、眼カメラ５０の撮影映像がモニタ２２に表示される。
【００５２】
また、スピーカ５４およびマイク５６は、入出力Ｉ／Ｆ５２に接続される。スピーカ５４は、アンドロイドロボット１２が発話を行う際に音声を出力する。遠隔操作端末１６の操作者ないしオペレータ（以下、「遠隔オペレータ」ということがある。）が直接発話を行う場合、ネットワーク１４、通信モジュール４０および入出力Ｉ／Ｆ５２を通して当該音声が出力される。具体的には、遠隔オペレータがマイク２０を通して発話すると、対応する音声データが遠隔操作端末１６からネットワーク１４を介してＣＰＵ３６に与えられる。そして、ＣＰＵ３６は、その音声データを、入出力Ｉ／Ｆ５２を介してスピーカ５４から出力する。
【００５３】
マイク５６は、音センサであり、アンドロイドロボット１２の聴覚の一部を構成する。このマイク５６は、指向性を有し、主として、アンドロイドロボット１２と対話（コミュニケーション）する人間（ユーザ）の音声を検出するために用いられる。
【００５４】
アンドロイドロボット１２のメモリ４２は、たとえばＲＡＭやＨＤＤであり、図４に示すように、プログラム領域５８およびデータ領域６０を含む。
【００５５】
プログラム領域５８には、音声処理プログラム６２が記憶される。音声処理プログラム６２は、音声認識プログラムおよび音声合成プログラムを含む。音声認識プログラムは、マイク５６を通して入力される、人間がアンドロイドロボット１２に対して発話した内容をＣＰＵ３６が認識するためのプログラムであり、ＣＰＵ３６は、たとえばＤＰマッチングや隠れマルコフ法（Hidden Markov Model：ＨＭＭ）により、人間の発話内容を音声認識する。
【００５６】
ＣＰＵ３６は、その音声認識プログラムに従って、遠隔オペレータがマイク２０を通して入力した発話を認識する。たとえば、上述のＨＭＭ法やディープニューラルネットワーク（Deep. Neural Network：ＤＮＮ）のような音響モデルを用いて発話音声を検出できる。
【００５７】
遠隔オペレータの音声を直接スピーカ５４から出力する外に、アンドロイドロボット１２から音声合成によって発話させることができる。ＣＰＵ３６は、遠隔操作端末１６から音声合成によってスピーカ５４から発話する指示が入力されたとき、この遠隔操作端末１６から与えられる音声合成データに従って合成した音声をスピーカ５４に出力する。
【００５８】
口唇動作制御プログラム６４は、アンドロイドロボット１２がスピーカ５４から発話するとき、その発話音声（遠隔オペレータの声または合成音声）に適合する口唇形状となるように、たとえば図２に示すアクチュエータＡ１０‐Ａ１１を制御するためのプログラムである。
【００５９】
口唇動作制御プログラム６４は、後述のように、遠隔オペレータからの発話の区間を検出するためのプログラムである。ＣＰＵ３６は、遠隔オペレータの音声信号から、所定周期毎に所定フレーム長の、たとえばＭＦＣＣ係数（メル周波数ケプストラム係数：Mel Frequency Cepstrum Coefficient）、フォルマント周波数およびＦ０（基本周波数）などの音響特徴を検出する。
【００６０】
身体動作制御プログラム６６は、この実施例に従ってアンドロイドロボット１２の身体動作、特に首および腰の動作を制御するためのプログラムである。この身体動作制御プログラム６６は、基本的には、アンドロイドロボット１２によって発話に伴う自然な動作を自動的にかつリアルタイムに生成するためのプログラムである。
【００６１】
メモリ４２のデータ領域６０は、種々のデータを記憶するための領域である。音声データ領域６８は、遠隔操作端末１６から送られてくる遠隔オペレータの音声の音声データおよびマイク５６から入力される音声データを一時的に記憶する。辞書データ領域７０は、データベース領域として機能し、そこには前述の音声認識や音声合成のために必要な辞書などのデータが記憶される。その他、データ領域６０は、ＣＰＵ３６の動作に必要な、タイマ、レジスタ、フラグなどの所要の領域７２を含む。
【００６２】
アンドロイドロボット１２は、人間に酷似した姿形を有して人間の動作に酷似した動作を行うロボットであるから、遠隔オペレータの発話音声を出力したり、音声合成した音声をスピーカ５４から出力する際に、たとえば口唇を動かさなかったり単に音声に関係なく口唇を動かしたりするだけでは人間に強い違和感を与えてしまう。そこで、この実施例のシステム１０では、アンドロイドロボット１２が出力する発話音声に合わせてその口唇を主とした顔面動作を生成する。
【００６３】
さらに、人間が発話するとき、音声を発するだけでなく、顔の表情や身体的な表情も笑い声に合わせて変化するが、アンドロイドロボット１２（遠隔オペレータ）が発話するときにできるだけ自然に見えるような、身体の動作を生成する。
【００６４】
このシステム１０の動作を図５および図６、図７に示すフロー図を参照しながら説明する。
【００６５】
図５には、ＣＰＵ３６の発話処理の動作の一例が示される。ＣＰＵ３６は、この発話処理を一定時間ごとに繰り返し実行する。
【００６６】
図５のステップＳ１では、音声データを受信したか否かを判断する。遠隔オペレータが発話したとき、遠隔操作端末１６からマイク２０で取得された発話音声の音声データが送信されてくるので、この音声データをネットワーク１４を介して受信したか否かが判断される。なお、遠隔操作端末１６は、発話音声を所定のサンプリングレート（たとえば、８ｋＨｚ）で音声データとして取得し、取得した音声データを所定のパケット長（たとえば２０ｍｓ）で一定時間ごとに送信する。
【００６７】
ステップＳ１で“ＹＥＳ”であれば、ステップＳ３で、音声記憶処理を開始する。音声記憶処理はＣＰＵ３６によって他の処理と並列的に実行される。この音声記憶処理によって、受信される音声データが順次メモリ４２のデータ領域６０の音声データ領域６８に記憶される。音声記憶処理は、発話音声が検出されなくなって音声データが受信されなくなったときに終了される。
【００６８】
続いて、ステップＳ５で、口唇動作制御処理を開始する。口唇動作制御処理はＣＰＵ３６によって他の処理と並列的に実行される。この口唇動作制御処理では、取得された発話音声の解析が行われて、当該音声に基づいて口唇動作が制御される。口唇動作制御処理の動作の一例は後述する図６に示される。
【００６９】
ステップＳ７で、身体動作制御処理を開始する。身体動作制御処理はＣＰＵ３６によって他の処理と並列的に実行される。この身体動作制御処理では、取得された発話音声の解析が行われて、当該音声に基づいて身体動作、特に首および腰が制御される。身体動作制御処理の動作の一例は後述する図７に示される。
【００７０】
ステップＳ９では、音声取得から一定時間経過したか否かを判断する。この実施例では、取得した発話音声を一定量の遅延のもとに再生するようにしているので、この判定によって、音声データの取得（受信）から一定時間の経過を待つ。
【００７１】
ステップＳ９で“ＹＥＳ”であれば、ステップＳ１１で、音声再生処理を開始する。音声再生処理はＣＰＵ３６によって他の処理と並列的に実行される。この音声再生処理では、取得された音声データがメモリ４２の音声データ領域６８から読み出されて入出力Ｉ／Ｆ５２に与えられ、これによって、アンドロイドロボット１２のスピーカ５４から当該音声が出力される。音声再生処理は、取得した音声データをすべて再生し終わったときに終了される。
【００７２】
なお、ステップＳ１で“ＮＯ”の場合、つまり、発話が行われていないときには、そのまま図５の発話処理を終了する。
【００７３】
ステップＳ５で開始される口唇動作制御処理の動作の一例を図６を参照して説明する。まず、ステップＳ２１で、音響特徴の変動量を抽出する。
【００７４】
アンドロイドロボット１２のような物体の場合、画像のようにフレームごとに口唇形状を制御することは困難である。従って、まず、遠隔オペレータの音声の周波数やケプストラムの解析を行い、音響特徴の変動が高い位置を検出する。音響特徴の変動量は、たとえば、ある時刻における前後所定時間（たとえば２０ｍｓ程度）のフレームのパラメータ（たとえばＭＦＣＣ）の平均二乗誤差として算出される。
【００７５】
次に、ステップＳ２３で、この変動量（ＭＦＣＣ平均二乗誤差など）が閾値を超えたか否かを判断する。実験によって、音素の変化を表す程度に、この変動量に閾値を設定しておく。閾値を超えた変動量のピーク位置がアンドロイドロボット１２の動作指令発行時点を決める際の基礎となる。
【００７６】
ステップＳ２３で“ＮＯ”の場合、処理はステップＳ２１へ戻り、次の時刻を基点とする音声データについて処理を繰り返す。
【００７７】
一方、ステップＳ２３で“ＹＥＳ”の場合、ステップＳ２５で、音響特徴の高い変動量が検出された時点の前後所定時間（たとえば１００ｍｓ程度）の音声から音響特徴（たとえばＭＦＣＣ）を抽出し、ステップＳ２７で、非線形モデルを用いて口唇形状の推定を行う。推定の手法として、線形回帰分析、ニューラルネットワーク、ＨＭＭ、ＫＮＮ（ケイ近傍法：k-nearest neighbor algorithm）などが挙げられる。音響特徴と口唇形状の間には非線形な関係があるので、ニューラルネットワークのような非線形なモデルを用いることがある。そのためには、予め収録したビデオデータまたはモーションキャプチャによる口唇形状のデータベースによってモデル学習を行っておき、メモリ４２の辞書データ領域７０にモデル学習による非線形マッピングのための情報を記憶しておく必要がある。
【００７８】
続いて、ステップＳ２９で、推定された口唇形状を形成するための制御情報を設定し、ステップＳ３１で動作遅延を推定する。具体的には、アンドロイドロボット１２のアクチュエータＡ１０およびＡ１１の制御情報に関しては、アクチュエータ制御の静的特徴と動的特徴を考慮する。つまり、静的特徴としては、特定の口唇形状に近づけるためのアンドロイドロボット１２のアクチュエータＡ１０およびＡ１１の制御情報を予め手動的に取得しておき、口唇形状と制御情報とを対応付けたデータベースをメモリ４２の辞書データ領域７０に記憶しておく。また、動的特徴としては、特定の形状をターゲットとして口唇を動かした際に、指令を発行した時点からアンドロイドロボット１２が実際にターゲットの形状に辿りつくまでにかかる時間（これを動作遅延と呼ぶ。）を実験により取得しておき、制御情報（口唇形状）と動作遅延とを対応付けたデータベースをメモリ４２の辞書データ領域７０に記憶しておく。後述のステップＳ３７では、この動作遅延の情報を基に、音声と同期を取るために、動作指令を送る時点が早められたり遅くされたりする。
【００７９】
ステップＳ３３では、所定時間の推定を行ったか否かを判断する。この実施例では、音響特徴を抽出した範囲よりも広い範囲、たとえば複数の音素や単語単位で、口唇動作の再構成をすることを想定しているので、このステップＳ３３の判定を行う。ステップＳ３３で“ＮＯ”の場合、ステップＳ２１に戻って処理を繰り返す。
【００８０】
ステップＳ３３で“ＹＥＳ”であれば、ステップＳ３５で、区間を通じた口唇動作の最適化処理を行う。つまり、比較的短い期間の音声に関して、ステップＳ２１やステップＳ２５の処理を行い、これらの音声を束ねたより長い区間を通じて動作の最適化を試みる。推定された口唇形状は完全にはアンドロイドロボット１２では再現できない場合もあるため、推定された口唇形状の時系列を元に、この口唇動作を簡略化するなど必要な変換を行う。
【００８１】
続いて、ステップＳ３７で、動作遅延に基づいて、音声再生開始タイミングを基準として、各動作指令の発行タイミングを設定する。つまり、特定の口唇形状を形成するための動作指令の発行タイミングは、当該音声との同期をとるために、当該推定遅延に基づいて音声再生開始タイミングを基準として設定される。
【００８２】
そして、ステップＳ３９で、動作指令発行処理を開始する。動作指令発行処理はＣＰＵ３６によって他の処理と並列的に実行される。この動作指令発行処理では、各動作指令の発行タイミングになったと判断されたときに、アクチュエータＡ１０およびＡ１１の指令値が発行される。
【００８３】
ステップＳ４１では、未処理の音声データが残っているか否かを判断し、“ＹＥＳ”であれば、ステップＳ２１に戻って処理を繰り返す。このようにして、アンドロイドロボット１２においては、遠隔オペレータの発話音声が当該音声に適合した口唇動作を伴って出力される。一方、ステップＳ４１で“ＮＯ”であれば、この口唇動作制御処理を終了して、図５に戻る。
【００８４】
この実施例によれば、遠隔オペレータの発話音声の音響特徴から非線形モデルを用いて口唇形状を推定し、発話音声の再生開始タイミングを基準として当該口唇形状を形成するまでにかかる動作遅延を考慮してアクチュエータＡ１０，Ａ１１の動作指令の発行タイミングを設定するようにしたので、アンドロイドロボット１２において遠隔オペレータの発話音声に適合させた口唇動作を実現することができる。したがって、アンドロイドロボット１２の応対する人間に対して違和感を与えることなく、自然な対話を行うことができる。
【００８５】
図５のステップＳ７での身体動作制御処理の一例が、図７のフロー図に示される。
【００８６】
最初のステップＳ５１では、ＣＰＵ３６は、図５のステップＳ３でメモリ４２の音声データ領域６８に記憶された音声データに含まれる基本周波数（ピッチ）Ｆ０を抽出する。つまり、フレーム長３２ｍｓの音声データを１０ｍｓのフレーム間隔で解析し、音声の基本周波数Ｆ０を検出する。基本周波数Ｆ０を検出する、一般的な手法として、たとえばＬＰＣ（Linear Predictive Coding：線形予測符号化）の残差波形の自己相関関数のピーク探索によるものが挙げられるが、これに限定されるものではない。
【００８７】
それと共に、ステップＳ５１では、ＣＰＵ３６は、同じ音声データが持つボイスパワー（音声強度）を検出する。たとえば、音声データが遠隔オペレータからマイク２０（図１）を通して与えられたものであれば、その音声データが含むエネルギを音声強度として検出する。たとえば、図６のステップＳ２５でＭＦＣＣを利用して、その派生パラメータとしてパワーを検出するようにしてもよい。
【００８８】
ただし、アンドロイドロボット１２がスクリプトに従って自律的に発話するように設定されている場合、音声データのエネルギを検出することなく、そのスクリプトで設定された音声強度を採用すればよい。
【００８９】
さらにステップＳ５１では、ＣＰＵ３６は、口唇形状を検出する。たとえば、ステップＳ２９で推定されかつステップＳ３５で最適化された口唇形状に従ってステップＳ３９でアクチュエータＡ１０およびＡ１１の指令値を出力するが、そのときのアクチュエータＡ１１に対する指令値に基づいて口唇形状を検出する。前述のように、アクチュエータＡ１１は、指令値が「０」のとき口唇開度（「LipHeight」であらわす。）が最も小さく、「２５５」のとき最も大きくなる。したがって、そのときの指令値から口唇開度を検出することができる。
【００９０】
ただし、アンドロイドロボット１２がスクリプトに従って自律的に発話するように設定されている場合、そのスクリプトで設定された指令値から口唇開度を検出すればよい。
【００９１】
そして、ステップＳ５３で、図８に示すようなばねダンパモデル８０に適用する、トルクＴとそのトルクの方向Ｄｉｒを計算する。
【００９２】
詳しく説明すると、まず、前回の口唇開度LipHeight(t-1)と今回の口唇開度LipHeight(t)とを比較し、今回の口唇開度LipHeight(t)が前回の口唇開度LipHeight(t-1)より大きいときには、今回の口唇開度LipHeight(t)を口唇開度として採用する。それ以外のとき、口唇開度LipHeightは０とする。
【００９３】
If LipHeight(t)>LipHeight(t-1) then LipHeight=LipHeight(t)、Otherwise LipHeight=0
ついで、同様にして、音声強度を決定する。つまり、前回の音声強度VoicePower(t-1)と今回の音声強度VoicePower(t)とを比較し、今回の音声強度VoicePower(t)が前回の音声強度VoicePower(t-1)より大きいときには、今回の音声強度VoicePower(t)を音声強度として採用する。それ以外のとき、音声強度VoicePowerは０とする。
【００９４】
If VoicePower(t)>VoicePower(t-1) then VoicePower=VoicePower(t)、Otherwise VoicePower=0
そして、このようにして決めた口唇開度LipHeightおよび音声強度VoicePowerに基づいて、数１に従ってトルクＴ(t)を計算する。
［数１］
Ｔ（ｔ）＝LipHeight＋VoicePower         …(1)
数1では、たとえば「あ」のように口を大きく開けるか、または声が大きいときに、トルクＴ(t)が大きくなる。
【００９５】
このステップＳ５３ではさらに、先のステップＳ５１で抽出した基本周波数Ｆ０に基づいて、上記トルクＴ(t)の方向を決定する。基本周波数Ｆ０が所定の閾値以上のとき、つまり、発話音声のピッチが高いとき、トルクＴ(t)の方向Ｄｉｒ(t)は「１」とされ、基本周波数Ｆ０が所定の閾値未満のとき、つまり、発話音声のピッチが低いとき、トルクＴ(t)の方向Ｄｉｒ(t)は「−１」とされる。後述のように、トルクＴ(t)の方向が「１」のときは、頭部２６を上げようとする力が加わり，「−１」のときは、頭部２６を下げようとするような力が加わる。したがって、首関節のアクチュエータＡ１５は、図８の２点鎖線で示すように頭部２６を上げる方向に制御され、トルクＴ(t)の方向が「−１」のときは、図８の点線で示すように頭部２６を下げる方向に制御される。
【００９６】
次のステップＳ５５で、ＣＰＵ３６は、図８に示すようなばねダンパモデル８０に数１で求めたトルクＴ(t)を入力し、そのばねダンパモデルの変位から、実施例において制御する首の上下動作角θを数２すなわち数３に従って計算する。
【００９７】
なお、図８では、関節の回転角度に対してばね（渦巻きで描かれている部分）の弾力と、関節の回転速度に対して粘性抵抗（ピストンのように描かれているもの）が加わるばねダンパモデルを表している。よく知られているように、このばねダンパモデルにおいて、首が正面位置から大きく動けば動くほど、元に戻ろうとする力が大きく働き、首の動きが速くなればなるほど、動きの抵抗が大きくなって、速度が大きくなるのが抑えられる。
【００９８】
【数２】
0006701483.tif 000002
【００９９】
【数３】
0006701483.tif 000003
【０１００】
このようにして、角度θが算出され、ステップＳ５７では、数４に従ってその角度θを首のアクチュエータＡ１５の関節角φに変換する。
［数４］
φ(t)=αθ(t+β)                          …(4)
ただし、α、βは当該アンドロイドロボットに特有の係数である。
【０１０１】
ＣＰＵ３６は、この関節角φに従ってアクチュエータＡ１５のステッピングモータの指令値をアクチュエータ制御回路４４に与える。それによって、アンドロイドロボット１２の頭部２６が、発話に伴って、数２および数３でトルクＴ(t)すなわち口唇開度LipHeightおよび音声強度VoicePowerの和に応じて、図８の点線または２点鎖線で示すように、上下動される。つまり、この実施例では、ＣＰＵ３６は、アンドロイドロボット１２の発話の際の口唇開度LipHeightおよび音声強度VoicePowerなにびに上記の動作方向に基づいて関節角φを計算し、首関節がその関節角φになるように、アクチュエータＡ１５に指令値を与えて、このアクチュエータＡ１５を駆動する。
【０１０２】
したがって、図１のような遠隔操作時においてこの実施例を適用すると、遠隔オペレータが動いていなくてもアンドロイドロボット１２の動きを自動的に作り出すことができるため、そのアンドロイドロボット１２と対話している対話相手に、対話している実感を持たせることができる。たとえば、アンドロイドロボット１２のそのような動きによって、真剣に対話している感じや感情的に話している感じを伝えることができ、円滑な対話が実現できる。さらに、感情的な動き（たとえば大きな声を上げたときには、体が大きく動く）が自動的に生成でき、より自然な対話が実現できる。
【０１０３】
なお、上述の実施例では、「あ」のように口を大きく開けるか、または声が大きいときに、トルクＴ(t)が大きくなり、それに従って、頭部２６が大きく動くようにされた。これに対して、第２の実施例では、たとえば「あ」のように口を大きく開けかつ声が大きいときに、頭部を大きく動かすようにすることができる。
【０１０４】
つまり、第２の実施例では、先の数１を変形した数５に従って、トルクＴ(t)を求める。先の数１が口唇開度LipHeightおよび音声強度VoicePowerの和からトルクを計算したのに対して、数５では口唇開度LipHeightおよび音声強度VoicePowerの積からトルクを計算する。
［数５］
Ｔ（ｔ）＝LipHeight×VoicePower         …(5)
その他は、先の実施例と同様であり、数５で計算したトルクＴ(t)を用いて、数２以降に従って、動作角θおよび関節角φを求め、アクチュエータＡ１５を制御する。
【０１０５】
上述の２つの実施例では、数４で計算した関節角φで１つの首関節のアクチュエータＡ１５だけを制御するようにした。この場合、図８に示すように、１つのアクチュエータＡ１５によって頭部２６が俯仰される。
【０１０６】
ただし、図９に示す実施例のように、首関節を動作させるアクチュエータが上下に２つある場合、上記の角度θから２つの関節角度を算出することによって、２つのアクチュエータＡ１５およびＡ１５ａを制御する。具体的には、上記の数４に従って、下記数６のようにして計算する。ただし，αとβは関節毎に異なる。２つの関節角度をφ１、φ２とすると、
ただし、α１，α２，β１，β２は関節に特有の係数として任意に決めることができる。
【０１０７】
詳しくいうと、図７に示すステップＳ５３では、基本周波数Ｆ０に基づいて、トルクＴ(t)の方向Ｄｉｒ(t)は「１」または「−１」が決定され、ステップＳ５７において、数４で計算した関節角φに応じて、トルクの方向が示す方向に、アクチュエータＡ１５およびＡ１８の両方を同時に制御する。したがって、図１０に示すように、発話音声のピッチに応じた方向に、口唇開度LipHeightおよび音声強度VoicePowerの和または積に従ったトルクＴ(t)の大きさに応じた関節角φで、頭部２６が俯仰されると同時に、胴体部２４が、前屈または後傾される。
【０１０８】
つまり、この実施例では、ＣＰＵ３６は、アンドロイドロボット１２の発話の際の口唇開度LipHeightおよび音声強度VoicePowerならびに発話音声の基本周波数Ｆ０で決まる動作方向に基づいて１つまたは複数の関節角φを計算し、首関節および／または腰関節がその関節角φになるように、アクチュエータＡ１５およびＡ１８に指令値を与えて、このアクチュエータＡ１５およびＡ１８を駆動する。
【０１０９】
図１０の実施例によれば、アンドロイドロボット１２の発話に応じて頭部２６および／または胴体部２４が前後に動くので、感情表現が一層豊かになる。
【０１１０】
つまり、複数の関節があれば、１つの角度θから複数の関節角φ1、...φｎを、数７に従って計算し、それに基づいて対応の関節を制御するアクチュエータを制御すればよい。
［数７］
ただし、アンドロイドロボット１２の発話の際の口唇開度LipHeightおよび音声強度VoicePowerに基づいて関節角を計算する方法は、ばねダンパモデルを用いる方法に限らず、他の方法が利用されてもよい。この場合も、発話音声の基本周波数Ｆ０によって、動作方向（すなわち関節角φの符号）を決めるようにすればよい。
【０１１１】
なお、上で挙げた時間の長さなどの具体的数値はいずれも単なる一例であり、必要に応じて適宜変更可能である。
【符号の説明】
【０１１２】
１０  …アンドロイドロボット制御システム
１２  …アンドロイドロボット
１６  …遠隔操作端末
２４  …胴体部
２６  …頭部
３６  …ＣＰＵ
４２  …メモリ
Ａ１５、Ａ１８…アクチュエータ
【図１】
0006701483.tif 000004
【図２】
0006701483.tif 000005
【図３】
0006701483.tif 000006
【図４】
0006701483.tif 000007
【図５】
0006701483.tif 000008
【図６】
0006701483.tif 000009
【図７】
0006701483.tif 000010
【図８】
0006701483.tif 000011
【図９】
0006701483.tif 000012
【図１０】
0006701483.tif 000013