(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-11
(45)【発行日】2024-11-19
(54)【発明の名称】ロボット、ロボット制御方法及びプログラム
(51)【国際特許分類】
A63H 11/00 20060101AFI20241112BHJP
【FI】
A63H11/00 Z
(21)【出願番号】P 2021158663
(22)【出願日】2021-09-29
【審査請求日】2023-06-14
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】100095407
【氏名又は名称】木村 満
(72)【発明者】
【氏名】長谷川 浩一
(72)【発明者】
【氏名】浦野 美由紀
(72)【発明者】
【氏名】河村 義裕
(72)【発明者】
【氏名】外山 千寿
【審査官】岸 智史
(56)【参考文献】
【文献】国際公開第2021/053949(WO,A1)
【文献】特開2008-048342(JP,A)
【文献】特許第6494062(JP,B2)
【文献】特開2019-217605(JP,A)
【文献】国際公開第2017/175559(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
A63H 1/00-37/00
(57)【特許請求の範囲】
【請求項1】
記憶部と制御部とを備え、
前記制御部は、
最初の電源ONから一定の登録時間に繰返し入力された外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を
先入れ先出し方式で履歴保存数まで履歴として前記記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記記憶部に保存された外部刺激特徴量の新しい方から前記履歴保存数よりも少ない連続判定保存数の前記外部刺激特徴量である連続判定特徴量を取得し、
あるタイミングで取得された外部刺激特徴量と前記取得された連続判定特徴量とを比較して第3類似度を算出し、
前記算出された第1類似度
及び第3類似度に基づいて動作を制御する、
ロボット。
【請求項2】
前記制御部は、
特定使用者からの前記外部刺激である特定刺激の特徴量である特定刺激特徴量を取得し、
前記取得された特定刺激特徴量を前記記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された特定刺激特徴量とを比較して第2類似度を算出し、
前記算出された第2類似度にも基づいて動作を制御する、
請求項1に記載のロボット。
【請求項3】
前記制御部は、
前記外部刺激として音声データを取得する、
請求項1
又は2に記載のロボット。
【請求項4】
前記制御部は、
前記音声データをフーリエ変換して周波数スペクトルを取得し、
前記取得された周波数スペクトルをフーリエ変換して得られるケプストラムの一部を、前記外部刺激特徴量として取得する、
請求項
3に記載のロボット。
【請求項5】
前記制御部は、
前記外部刺激として加速度及び複数の接触圧力を取得する、
請求項1から
4のいずれか1項に記載のロボット。
【請求項6】
前記制御部は
前記加速度に基づいてロボットの向きを判定し、
前記判定された向きと前記複数の接触圧力とから前記外部刺激特徴量を取得する、
請求項
5に記載のロボット。
【請求項7】
前記制御部は、
前記加速度の履歴から機械学習した識別器によって得られるロボットの向きと、あるタイミングで取得された加速度と、に基づいて、ロボットの向きを判定する、
請求項
6に記載のロボット。
【請求項8】
最初の電源ONから一定の登録時間に繰返し入力された外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を
先入れ先出し方式で履歴保存数まで履歴として記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記記憶部に保存された外部刺激特徴量の新しい方から前記履歴保存数よりも少ない連続判定保存数の前記外部刺激特徴量である連続判定特徴量を取得し、
あるタイミングで取得された外部刺激特徴量と前記取得された連続判定特徴量とを比較して第3類似度を算出し、
前記算出された第1類似度
及び第3類似度に基づいて動作を制御する、
ロボット制御方法。
【請求項9】
コンピュータに、
最初の電源ONから一定の登録時間に繰返し入力された外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を
先入れ先出し方式で履歴保存数まで履歴として記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記記憶部に保存された外部刺激特徴量の新しい方から前記履歴保存数よりも少ない連続判定保存数の前記外部刺激特徴量である連続判定特徴量を取得し、
あるタイミングで取得された外部刺激特徴量と前記取得された連続判定特徴量とを比較して第3類似度を算出し、
前記算出された第1類似度
及び第3類似度に基づいて動作を制御する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ロボット、ロボット制御方法及びプログラムに関する。
【背景技術】
【0002】
従来から様々なロボットが開発されてきているが、近年は産業用ロボットだけでなく、ペットロボットのような民生用のロボットの開発も進んでいる。例えば、特許文献1には、容易かつ精度良く使用者を識別して、使用者に愛着をわかせることができるロボット装置が開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に開示されているロボット装置は、圧力センサが検出した圧力検出信号のパターンと予め登録されている登録パターンとを比較して圧力センサを撫でた者が使用者であるか否かを判定する。したがって、予め登録パターンが登録されていないと使用者を識別することができず、使用者に愛着をわかせることができない。
【0005】
そこで、本発明はこのような事情に鑑みてなされたものであって、予め使用者を識別するためのデータが登録されていなくても、使用者に愛着をわかせるような動作を行うことができるロボット、ロボット制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
前記目的を達成するため、本発明に係るロボットの一様態は、
記憶部と制御部とを備え、
前記制御部は、
最初の電源ONから一定の登録時間に繰返し入力された外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を先入れ先出し方式で履歴保存数まで履歴として前記記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記記憶部に保存された外部刺激特徴量の新しい方から前記履歴保存数よりも少ない連続判定保存数の前記外部刺激特徴量である連続判定特徴量を取得し、
あるタイミングで取得された外部刺激特徴量と前記取得された連続判定特徴量とを比較して第3類似度を算出し、
前記算出された第1類似度及び第3類似度に基づいて動作を制御する。
【発明の効果】
【0007】
本発明によれば、予め使用者を識別するためのデータが登録されていなくても、使用者に愛着をわかせるような動作を行うことができる。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るロボットの外観を示す図である。
【
図2】実施形態に係るロボットの側面から見た断面図である。
【
図3】実施形態に係るロボットの筐体を説明する図である。
【
図4】実施形態に係るロボットの機能構成を示すブロック図である。
【
図5】実施形態に係るロボットの姿勢の種類を説明する図である。
【
図6】実施形態に係る音声による懐き動作の一例を説明する図である。
【
図7】実施形態に係る撫で方による懐き動作の一例を説明する図である。
【
図8】実施形態に係る感情マップの一例を説明する図である。
【
図9】実施形態に係る性格値レーダーチャートの一例を説明する図である。
【
図10】実施形態に係る成長テーブルの一例を説明する図である。
【
図11】実施形態に係る動作内容テーブルの一例を説明する図である。
【
図12】実施形態に係る動作制御処理のフローチャートである。
【
図13】実施形態に係るマイク入力処理のフローチャートである。
【
図14】実施形態に係る音声特徴パラメータ算出処理のフローチャートである。
【
図15】実施形態に係る音声履歴との類似度判定処理のフローチャートである。
【
図16】実施形態に係るタッチ入力処理のフローチャートである。
【
図17】実施形態に係るタッチ履歴との類似度判定処理のフローチャートである。
【
図18】実施形態に係る音声応答処理のフローチャートである。
【
図19】実施形態に係るタッチ応答処理のフローチャートである。
【発明を実施するための形態】
【0009】
以下、本発明の実施形態について、図面を参照して説明する。なお、図中同一又は相当部分には同一符号を付す。
【0010】
(実施形態)
図1に示すように、実施形態に係るロボット200は、小型の動物を模したペットロボットであり、目を模した装飾部品202及びふさふさの毛203を備えた外装201に覆われている。また、外装201の中には、ロボット200の筐体207が収納されている。
図2に示すように、ロボット200の筐体207は、頭部204、連結部205及び胴体部206で構成され、頭部204と胴体部206とが連結部205で連結されている。
【0011】
なお、以下の説明では、ロボット200を床等の載置面に普通(通常の向き)に置いた場合を想定して、ロボット200の顔に相当する部分(頭部204の胴体部206とは反対側の部分)の方向を前、お尻に相当する部分(胴体部206の頭部204とは反対側の部分)の方向を後ろとする。また、ロボット200を載置面に普通に置いた場合に載置面に接触する部分の方向を下、その反対の方向を上とする。そして、ロボット200の前後方向に延びる直線に直交し、かつ、上下方向に延びる直線にも直交する方向を、幅方向とする。そして、胴体部206から頭部204の方向を見た時の右側の面を右側面、左側の面を左側面とする。
【0012】
胴体部206は、
図2に示すように、前後方向に延びている。そして、胴体部206は、ロボット200が置かれている床やテーブル等の載置面に、外装201を介して接触する。また、
図2に示すように、胴体部206の前端部にひねりモータ221が備えられており、頭部204が連結部205を介して胴体部206の前端部に連結されている。そして、連結部205には、上下モータ222が備えられている。なお、
図2では、ひねりモータ221は胴体部206に備えられているが、連結部205に備えられていてもよいし、頭部204に備えられていてもよい。
【0013】
連結部205は、連結部205を通り胴体部206の前後方向に延びる第1回転軸を中心として(ひねりモータ221により)回転自在に、胴体部206と頭部204とを連結している。ひねりモータ221は、頭部204を、胴体部206に対して、第1回転軸を中心として時計回り(右回り)に正転角度範囲内で回転(正転)させたり、反時計回り(左回り)に逆転角度範囲内で回転(逆転)させたりする。なお、この説明における時計回りは、胴体部206から頭部204の方向を見た時の時計回りである。右方(右回り)又は左方(左回り)にひねり回転させる角度の最大値は任意であるが、頭部204を右方へも左方へもひねっていない状態における頭部204の角度をひねり基準角度という。
【0014】
また、連結部205は、連結部205を通り胴体部206の幅方向に延びる第2回転軸を中心として(上下モータ222により)回転自在に、胴体部206と頭部204とを連結する。上下モータ222は、頭部204を、第2回転軸を中心として上方に正転角度範囲内で回転(正転)させたり、下方に逆転角度範囲内で回転(逆転)させたりする。上方又は下方に回転させる角度の最大値は任意であるが、頭部204を上方にも下方にも回転させていない状態における頭部204の角度を上下基準角度という。頭部204は、第2回転軸を中心とする上下の回転によって上下基準角度又は上下基準角度より下方に回転している場合は、ロボット200が置かれている床やテーブル等の載置面に、外装201を介して接触可能である。なお、
図2では、第1回転軸と第2回転軸とが互いに直交している例が示されているが、第1及び第2回転軸は互いに直交していなくてもよい。
【0015】
また、ロボット200は、タッチセンサ211を備え、ユーザがロボット200を撫でたり叩いたりしたことを検出することができる。より詳細には、
図2に示すように、頭部204にタッチセンサ211Hを備え、ユーザが頭部204を撫でたり叩いたりしたことを検出することができる。また、
図2及び
図3に示すように、胴体部206の左側面の前後にそれぞれタッチセンサ211LF及びタッチセンサ211LRを、胴体部206の右側面の前後にそれぞれタッチセンサ211RF及びタッチセンサ211RRを備え、ユーザが胴体部206を撫でたり叩いたりしたことを検出することができる。
【0016】
また、ロボット200は、胴体部206に加速度センサ212を備え、ロボット200の姿勢(向き)の検出や、ユーザによって持ち上げられたり、向きを変えられたり、投げられたりしたことを検出することができる。また、ロボット200は、胴体部206にジャイロセンサ213を備え、ロボット200が振動したり回転したりしていることを検出することができる。
【0017】
また、ロボット200は、胴体部206にマイクロフォン214を備え、外部の音を検出することができる。さらに、ロボット200は、胴体部206にスピーカ231を備え、スピーカ231を用いて鳴き声を発したり、歌を歌ったりすることができる。
【0018】
なお、本実施形態では加速度センサ212、ジャイロセンサ213、マイクロフォン214及びスピーカ231が胴体部206に備えられているが、これらの全て又は一部が頭部204に備えられていてもよい。また、胴体部206に備えられた加速度センサ212、ジャイロセンサ213、マイクロフォン214及びスピーカ231に加えて、これらの全て又は一部を頭部204にも備えるようにしてもよい。また、タッチセンサ211は、頭部204及び胴体部206にそれぞれ備えられているが、頭部204又は胴体部206のいずれか片方のみに備えられていてもよい。またこれらはいずれも複数備えられていてもよい。
【0019】
次に、ロボット200の機能構成について説明する。ロボット200は、
図4に示すように、制御部110、記憶部120、通信部130、センサ部210、駆動部220、出力部230、操作部240、を備える。
【0020】
制御部110は、例えば、CPU(Central Processing Unit)等で構成され、記憶部120に記憶されたプログラムにより、後述する各種処理を実行する。なお、制御部110は、複数の処理を並行して実行するマルチスレッド機能に対応しているため、後述する各種処理を並行に実行することができる。また、制御部110は、クロック機能やタイマー機能も備えており、日時等を計時することができる。
【0021】
記憶部120は、ROM(Read Only Memory)、フラッシュメモリ、RAM(Random Access Memory)等で構成される。ROMには、制御部110のCPUが実行するプログラム及びプログラムを実行する上で予め必要なデータが、記憶されている。フラッシュメモリは書き込み可能な不揮発性のメモリであり、電源OFF後も保存させておきたいデータが記憶される。RAMには、プログラム実行中に作成されたり変更されたりするデータが記憶される。記憶部120は、例えば後述する音声バッファ、音声履歴、タッチ履歴、感情データ121、感情変化データ122、成長テーブル123等を記憶する。
【0022】
通信部130は、無線LAN(Local Area Network)、Bluetooth(登録商標)等に対応した通信モジュールを備え、スマートフォン等の外部装置とデータ通信する。
【0023】
センサ部210は、前述したタッチセンサ211、加速度センサ212、ジャイロセンサ213、及びマイクロフォン214を備える。制御部110は、センサ部210が備える各種センサが検出した検出値を、ロボット200に作用する外部刺激を表す外部刺激データとして、取得する。なお、センサ部210は、タッチセンサ211、加速度センサ212、ジャイロセンサ213、マイクロフォン214以外のセンサを備えてもよい。センサ部210が備えるセンサの種類を増やすことにより、制御部110が取得できる外部刺激の種類を増やすことができる。例えば、センサ部210はCCD(Charge-Coupled Device)イメージセンサ等の画像取得部を備えてもよい。この場合、制御部110は、画像取得部が取得した画像を認識して、周囲にいる人が誰(例えば飼い主、いつもお世話してくれる人、知らない人等)なのか等を判定することができるようになる。
【0024】
タッチセンサ211は、何らかの物体が接触したことを検出する。タッチセンサ211は、例えば圧力センサや静電容量センサにより構成される。制御部110は、タッチセンサ211からの検出値に基づいて、接触強度や接触時間を取得し、これらの値に基づいて、ユーザによってロボット200が撫でられていることや、叩かれたりしていること等の外部刺激を検出することができる(例えば特開2019-217122号公報を参照)。なお、制御部110は、これらの外部刺激をタッチセンサ211以外のセンサで検出してもよい(例えば特許第6575637号公報を参照)。
【0025】
加速度センサ212は、ロボット200の胴体部206の前後方向、幅(左右)方向及び上下方向から成る3軸方向の加速度を検出する。加速度センサ212は、ロボット200が静止しているときには重力加速度を検出するので、制御部110は、加速度センサ212が検出した重力加速度に基づいて、ロボット200の現在の姿勢を検出することができる。また、例えばユーザがロボット200を持ち上げたり投げたりした場合には、加速度センサ212は、重力加速度に加えてロボット200の移動に伴う加速度を検出する。したがって、制御部110は、加速度センサ212が検出した検出値から重力加速度の成分を除去することにより、ロボット200の動きを検出することができる。
【0026】
ジャイロセンサ213は、ロボット200の3軸の角速度を検出する。3軸の角速度の最大値から、制御部110は、ロボット200の振動状態を判定することができる。
【0027】
本実施形態では、後述するタッチ入力処理において、制御部110は、加速度センサ212が検出した重力加速度に基づいてロボット200の現在の姿勢を、
図5に示す水平、裏返し、上向き、下向き、横向きのいずれであるかを判定する。そして、判定結果に応じて、
図5に示すように、数値0~4のいずれかの値を変数dirの値として記憶部120に記憶する。
【0028】
ただし、制御部110がロボット200の姿勢を判定する際には、加速度センサ212の現在の検出値だけを用いるのではなく、加速度センサ212の検出値の履歴を用いてもよい。また、制御部110は、ロボット200の姿勢の情報が正解ラベルとして付加された加速度センサ212の検出値の履歴のデータを多数用意して機械学習した識別器(ニューラルネット等)を用いてロボット200の姿勢を判定してもよい。さらに、制御部110は、機械学習した識別器による判定結果と現在の加速度センサ212の検出値(姿勢を判定するタイミングで取得された加速度)とを両方とも用いて、ロボット200の姿勢を判定してもよい。
【0029】
また、後述するタッチ入力処理において、制御部110は、タッチセンサ211Hの検出値に基づいて頭部のタッチ強度を、タッチセンサ211LF及びタッチセンサ211LRの検出値に基づいて左側面のタッチ強度を、タッチセンサ211RF及びタッチセンサ211RRの検出値に基づいて右側面のタッチ強度を、ジャイロセンサ213の検出値に基づいて振動強度を、それぞれ取得する。そして、制御部110は、取得した強度を、それぞれ変数touch_Head(頭部のタッチ強度)、変数touch_Left(左側面のタッチ強度)、変数touch_Right(右側面のタッチ強度)、変数gyro_Level(振動強度)の値として記憶部120に記憶する。
【0030】
タッチ入力処理においては、制御部110は、上述のようにして取得した各種検出値を統合して、タッチ特徴パラメータとして扱う。すなわち、タッチ特徴パラメータは、ロボット200の姿勢(dir)、頭部のタッチ強度(touch_Head)、左側面のタッチ強度(touch_Left)、右側面のタッチ強度(touch_Right)、振動強度(gyro_Level)の5次元の情報からなる。ただし、人によってロボット200を抱きかかえる際のロボット200の姿勢(dir)は個人差が激しい。逆に、振動強度(gyro_Level)は、同一の人が抱きかかえても値のぶれが大きい。
【0031】
そこで、本実施形態では、タッチ特徴パラメータの類似度を判定する際には、姿勢(dir)が一致しなければ非類似と判定し、タッチ強度よりも振動強度の影響度を小さくする。例えば、各タッチ強度が0以上かつM以下の値を取る場合、振動強度は、0以上かつM÷A以下(ただしAは1よりも大きい実数であり、例えば6)の値を取るように、値を調整する。
【0032】
そして、タッチ特徴パラメータは記憶部120に、先入れ先出し(FIFO:First In First Out)方式で履歴保存数(本実施形態では256個)記憶される。本実施形態では、タッチ特徴パラメータを記憶するFIFOをTFIFOと呼び、TFIFOに保存されているタッチ特徴パラメータの個数はTFIFO_SIZEという変数に保存されているものとする。すなわち、TFIFO_SIZEの初期値は0であり、新たなタッチ特徴パラメータが記憶されるたびに1ずつ増える。そして、履歴保存数まで増えた後はTFIFO_SIZEは履歴保存数のまま一定となり、TFIFOに新しいタッチ特徴パラメータが記憶されるたびに、最も古いタッチ特徴パラメータはTFIFOから削除されていく。TFIFOは、タッチ特徴パラメータの履歴が記憶されるので、タッチ履歴とも呼ばれる。
【0033】
図4に戻り、マイクロフォン214は、ロボット200の周囲の音を検出する。制御部110は、マイクロフォン214が検出した音の成分に基づき、例えばユーザがロボット200に呼びかけていることや、手を叩いていること等を検出することができる。
【0034】
具体的には、制御部110は、マイクロフォン214から取得した音データを規定のサンプリング周波数(本実施形態では16,384Hz)及び量子化ビット数(本実施形態では16ビット)でサンプリングし、記憶部120の音声バッファに保存する。本実施形態では1つの音声バッファには512サンプルのサンプリングデータが含まれるものとし、連続する16個の音声バッファを1つの単位として音声の類似度を判定する。また、本実施形態では、この連続する16個の音声バッファを、音声バッファ[0]~音声バッファ[15]の配列変数で表すこととする。この16個の音声バッファにより512サンプル×16個/16384Hz=0.5秒の音声データが格納されることになる。
【0035】
なお、制御部110がマイクロフォン214から取得した音データを音声バッファに保存する処理は、音声バッファ保存スレッドとして、他の処理とは並行に実行されているものとする。また、本実施形態では、後述する音声特徴パラメータ算出処理で、制御部110は、1つの音声バッファ中の512サンプルのサンプリングデータから、3つのケプストラム情報を算出する処理を、16個の音声バッファについて行う。これによって得られる48(=3×16)個のデータを、制御部110は、48次元の音声特徴パラメータとして扱う。
【0036】
この音声特徴パラメータも記憶部120に、先入れ先出し(FIFO)方式で履歴保存数(例えば256個)記憶される。本実施形態では、音声特徴パラメータを記憶するFIFOをVFIFOと呼び、VFIFOに保存されている音声特徴パラメータの個数はVFIFO_SIZEという変数に保存されているものとする。VFIFOは、音声特徴パラメータの履歴が記憶されるので、音声履歴とも呼ばれる。
【0037】
図4に戻り、駆動部220は、ロボット200(自機)の動きを表現するための可動部として、ひねりモータ221及び上下モータ222を備え、制御部110によって駆動される。制御部110が駆動部220を制御することにより、ロボット200は、例えば頭部204を持ち上げたり(第2回転軸を中心として上方に回転させたり)、横にひねったり(第1回転軸を中心として右方又は左方にひねり回転させたり)するような動作を表現することができる。また、ロボット200は、例えば頭部204を下方に向けた状態で横に回転させることにより移動することもできる。これらの動作を行うための動作制御データは、記憶部120に記録されており、検出した外部刺激や後述する成長値等に基づいて、ロボット200の動作が制御される。
【0038】
なお、上記は駆動部220の一例であり、駆動部220が車輪、クローラ、手足等を備えて、これらによりロボット200が任意の方向に移動したり、体を動かしたりできるようになっていてもよい。
【0039】
出力部230は、スピーカ231を備え、制御部110が音のデータを出力部230に入力することにより、スピーカ231から音が出力される。例えば、制御部110がロボット200の鳴き声のデータを出力部230に入力することにより、ロボット200は疑似的な鳴き声を発する。この鳴き声のデータも、記憶部120に記録されており、検出した外部刺激や後述する成長値等に基づいて鳴き声が選択される。なお、スピーカ231で構成される出力部230は、音出力部とも呼ばれる。
【0040】
また、出力部230として、スピーカ231に代えて、又はスピーカ231に加えて、液晶ディスプレイ等のディスプレイや、LED(Light Emitting Diode)等の発光部を備え、検出した外部刺激や後述する成長値等に基づいた画像をディスプレイに表示したり、LED等を発光させたりしてもよい。
【0041】
操作部240は、例えば、操作ボタン、ボリュームつまみ等から構成される。操作部240は、ユーザ(所有者や被貸与者)による操作、例えば、電源ON/OFF、出力音のボリューム調整等を受け付けるためのインタフェースである。なお、ロボット200は生き物感をより高めるために、操作部240として電源スイッチのみを外装201の内側に備え、それ以外の操作ボタンやボリュームつまみ等を備えなくてもよい。この場合でも、通信部130を介して接続した外部のスマートフォン等を用いてロボット200のボリューム調整等の操作を行うことができる。
【0042】
以上、ロボット200の機能構成について説明した。次に、ロボット200の特徴的な機能である飼い主登録機能、呼びかけ反応機能、懐き動作機能について説明する。
【0043】
飼い主登録機能とは、ロボット200が、最初の電源ONから一定の登録時間(例えば3分間)に繰返し呼ばれると、その音声特徴パラメータを飼い主の特徴(登録音声)として記憶部120に記憶し、記憶したことを動作(例えば5回鳴いて喜ぶ動作)でユーザに知らせる機能である。本実施形態では、飼い主の特徴として、音声特徴パラメータのみを登録音声として記憶部120に記憶することとしているが、登録時間の間に繰返し取得されたタッチ特徴パラメータに基づいて、そのタッチ特徴パラメータも飼い主の特徴(登録撫で方情報)として記憶部120に記憶するようにしてもよい。
【0044】
呼びかけ反応機能とは、ロボット200が(飼い主登録後又は最初の電源ONから一定の登録時間(例えば3分間)以上経過後に)繰返し呼ばれると、呼んでいる人が飼い主であるか否かによらず、誰かに呼びかけられていると認識して、その呼びかけに反応する動作(例えば、なに?という仕草をする動作)を行う機能である。
【0045】
懐き動作機能とは、音声履歴やタッチ履歴に基づき、直近に取得した音声特徴パラメータやタッチ特徴パラメータが、過去の呼びかけや撫でられ方と類似している場合には、飼い主又はいつもお世話してくれる人であると認識して、他の人に対する動作(一般動作)とは異なる動作(懐き動作)を行う機能である。ただし、飼い主やいつもお世話してくれる人に対して常に懐き動作を行ってしまうと、動作内容がワンパターン化してしまうおそれもあるため、本実施形態ではロボット200の成長度合い(後述する成長値)に応じた確率で懐き動作を行う。
【0046】
具体的には、音声による懐き動作については、
図6に示すように、取得した音声の音声特徴パラメータと登録音声との類似度が高ければ、呼びかけてくれた人を「絶対に飼い主である」と認識して、絶対飼い主と認識したときの懐き動作(例えば、喜んで飼い主に近づくような動作)を(成長値/10)×50%の確率で行い、成長値等に基づいて決定される一般動作を100-(成長値/10)×50%の確率で行う。
【0047】
また、「絶対に飼い主である」と認識しない場合において、取得した音声の音声特徴パラメータと音声履歴との類似度が高ければ(又は中位なら)、呼びかけてくれた人を「多分飼い主である(又は飼い主かもしれない)」と認識して、多分飼い主(又は飼い主かもしれない)と認識したときの懐き動作(例えば、喜ぶ動作(又は「何?」という動作))を(成長値/10)×50%の確率で行い、成長値等に基づいて決定される一般動作を100-(成長値/10)×50%の確率で行う。
【0048】
そして、取得した音声の音声特徴パラメータと音声履歴との類似度が低ければ、呼びかけてくれた人を飼い主ではないと認識して、懐き動作は全く行わずに、成長値等に基づいて決定される一般動作を100%の確率で行う。
【0049】
また、撫で方による懐き動作については、
図7に示すように、取得したタッチ特徴パラメータとタッチ履歴との類似度が非常に高ければ、撫でてくれた人を「絶対にいつもお世話してくれる人である」と認識して、絶対いつもお世話してくれる人と認識したときの懐き動作(例えば、とても喜ぶ動作)を(成長値/10)×50%の確率で行い、成長値等に基づいて決定される一般動作を100-(成長値/10)×50%の確率で行う。
【0050】
また、取得したタッチ特徴パラメータとタッチ履歴との類似度が高ければ(又は中位なら)、撫でてくれた人を「多分いつもお世話してくれる人である(又はいつもお世話してくれる人かもしれない)」と認識して、多分いつもお世話してくれる人(又はいつもお世話してくれる人かもしれない)と認識したときの懐き動作(例えば、喜ぶ動作(又は「何?」という動作))を(成長値/10)×50%の確率で行い、成長値等に基づいて決定される一般動作を100-(成長値/10)×50%の確率で行う。
【0051】
そして、取得したタッチ特徴パラメータとタッチ履歴との類似度が低ければ、撫でてくれた人をいつもお世話してくれる人ではないと認識して、懐き動作は全く行わずに、成長値等に基づいて決定される一般動作を100%の確率で行う。
【0052】
なお、本実施形態では、懐き動作を音声によるもの(
図6)と撫で方によるもの(
図7)とに分けて規定しているが、懐き動作の規定はこれに限られない。例えば、音声履歴での類似度とタッチ履歴での類似度を両方とも用いて、両方とも類似度が高い場合の懐き動作、音声履歴の類似度のみ高い場合の懐き動作、タッチ履歴の類似度が高い場合の懐き動作をそれぞれ規定してもよい。
【0053】
また、
図6及び
図7では、懐き動作の発生確率を常に100%未満となるように規定しているが、これは一例にすぎない。登録音声、音声履歴、タッチ履歴との類似度が高い場合に、常に懐き動作を行うようにしてもよい。
【0054】
次に、記憶部120に記憶されるデータのうち、成長値等に基づいて決定される一般動作を決定するために必要なデータである、感情データ121、感情変化データ122、成長テーブル123、動作内容テーブル124及び成長日数データ125について、順に説明する。
【0055】
感情データ121は、ロボット200に疑似的な感情を持たせるためのデータであり、感情マップ300上の座標を示すデータ(X,Y)である。感情マップ300は
図8に示すように、X軸311として安心度(不安度)の軸、Y軸312として興奮度(無気力度)の軸を持つ2次元の座標系で表される。感情マップ上の原点310(0,0)が通常時の感情を表す。そして、X座標の値(X値)が正でその絶対値が大きくなるほど安心度が高く、Y座標の値(Y値)が正でその絶対値が大きくなるほど興奮度が高い感情を表す。また、X値が負でその絶対値が大きくなるほど不安度が高く、Y値が負でその絶対値が大きくなるほど無気力度が高い感情を表す。
【0056】
なお、
図8では感情マップ300が2次元の座標系で表されているが、感情マップ300の次元数は任意である。感情マップ300を1次元で規定し、感情データ121として1つの値が設定されるようにしてもよい。また、他の軸を加えて3次元以上の座標系で感情マップ300を規定し、感情データ121として感情マップ300の次元数の個数の値が設定されるようにしてもよい。
【0057】
本実施形態においては、感情マップ300の初期値としてのサイズは、
図8の枠301に示すように、X値もY値も最大値が100、最小値が-100となっている。そして、第1期間の間、ロボット200の疑似的な成長日数が1日増える度に、感情マップ300の最大値、最小値ともに2ずつ拡大されていく。ここで第1期間とは、ロボット200が疑似的に成長する期間であり、ロボット200の疑似的な生誕から例えば50日の期間である。なお、ロボット200の疑似的な生誕とは、ロボット200の工場出荷後のユーザによる初回の起動時である。成長日数が25日になると、
図8の枠302に示すように、X値もY値も最大値が150、最小値が-150となる。そして、第1期間(この例では50日)が経過すると、それにより、ロボット200の疑似的な成長が完了したとして、
図8の枠303に示すように、X値もY値も最大値が200、最小値が-200となって、感情マップ300のサイズが固定される。
【0058】
感情変化データ122は、感情データ121のX値及びY値の各々を増減させる変化量を設定するデータである。本実施形態では、感情データ121のXに対応する感情変化データ122として、X値を増加させるDXPと、X値を減少させるDXMとがあり、感情データ121のY値に対応する感情変化データ122として、Y値を増加させるDYPと、Y値を減少させるDYMとがある。すなわち、感情変化データ122は、以下の4つの変数からなり、ロボット200の疑似的な感情を変化させる度合いを示すデータである。
DXP:安心し易さ(感情マップでのX値のプラス方向への変化し易さ)
DXM:不安になり易さ(感情マップでのX値のマイナス方向への変化し易さ)
DYP:興奮し易さ(感情マップでのY値のプラス方向への変化し易さ)
DYM:無気力になり易さ(感情マップでのY値のマイナス方向への変化し易さ)
【0059】
本実施形態では、一例として、これらの変数の初期値をいずれも10とし、後述する動作制御処理の中の感情変化データを学習する処理により、最大20まで増加するものとしている。この学習処理により、感情変化データ122、すなわち感情の変化度合いが変化するので、ロボット200は、ユーザによるロボット200との接し方に応じて、様々な性格を持つことになる。つまり、ロボット200の性格は、ユーザの接し方により、個々に異なって形成されることになる。
【0060】
そこで、本実施形態では、各感情変化データ122から10を減算することにより、各性格データ(性格値)を導出する。すなわち、安心し易さを示すDXPから10引いた値を性格値(陽気)とし、不安になり易さを示すDXMから10引いた値を性格値(シャイ)とし、興奮し易さを示すDYPから10引いた値を性格値(活発)とし、無気力になり易さを示すDYMから10引いた値を性格値(甘えん坊)とする。これにより、例えば、
図9に示すように、性格値(陽気)を軸411に、性格値(活発)を軸412に、性格値(シャイ)を軸413に、性格値(甘えん坊)を軸414に、それぞれプロットすることで、性格値レーダーチャート400を生成することができる。
【0061】
各性格値の初期値は0であるため、ロボット200の最初の性格は、性格値レーダーチャート400の原点410で表される。そして、ロボット200が成長するにつれて、センサ部210で検出された外部刺激等(ユーザのロボット200への接し方)によって、各性格値が10を上限として変化する。本実施形態のように4つの性格値が0から10まで変化する場合には、11の4乗=14641通りの性格を表現できることになる。
【0062】
本実施形態では、ロボット200の疑似的な成長度合いを示す成長度合いデータ(成長値)として、これら4つの性格値の中で、最も大きい値を用いる。そして、制御部110は、ロボット200の疑似的な成長につれて(成長値が大きくなるにつれて)、ロボット200の動作内容にバリエーションが生じるように制御する。このために制御部110が用いるデータが成長テーブル123である。
【0063】
図10に示すように、成長テーブル123には、センサ部210で検出された外部刺激等の動作トリガーに応じてロボット200が行う動作の種類と、成長値に応じて各動作が選択される確率(以下「動作選択確率」という)とが、記録されている。なお、動作トリガーとは、ロボット200が何らかの動作を行うきっかけとなった外部刺激等の情報である。そして、成長値が小さい間は、性格値とは関係なく、動作トリガーに応じて設定される基本動作が選択され、成長値が増加すると、性格値に応じて設定される性格動作が選択されるように、動作選択確率が設定されている。また、成長値が増加するほど、選択されうる基本動作の種類が増加するように、動作選択確率が設定されている。
【0064】
例えば、ロボット200の現在の性格値が、
図9に示すように、性格値(陽気)が3、性格値(活発)が8、性格値(シャイ)が5、性格値(甘えん坊)が4であり、マイクロフォン214で大きな音を検出した場合を想定する。この場合、成長値は4つの性格値の中の最大値である8となり、動作トリガーは「大きな音がする」となる。そして、
図10に示す成長テーブル123で、動作トリガーが「大きな音がする」で成長値が8の項目を参照すると、動作選択確率は、「基本動作2-0」が20%、「基本動作2-1」が20%、「基本動作2-2」が40%、「性格動作2-0」が20%であることがわかる。
【0065】
つまり、この場合は、「基本動作2-0」が20%、「基本動作2-1」が20%、「基本動作2-2」が40%、「性格動作2-0」が20%の確率で選択される。そして、「性格動作2-0」が選択された場合は、4つの性格値に応じて、
図11に示すような4種類の性格動作のいずれかの選択がさらに行われる。そして、ロボット200はここで選択された動作を実行する。
【0066】
なお、
図10では、各動作トリガーに対して選択される性格動作を1つとしているが、基本動作と同様に、性格値の増加に応じて、選択される性格動作の種類を増加させてもよい。また、
図10の内容に
図6及び
図7の内容も統合して、動作種類の中に懐き動作も含めて規定した成長テーブルを設定してもよい。
【0067】
また、成長テーブル123は、動作トリガー毎に、成長値を引数として各動作種類の動作選択確率を返す関数(成長関数)として定義できればその形態は任意であり、必ずしも
図10に示すような表形式のデータである必要はない。
【0068】
動作内容テーブル124は、
図11に示すように、成長テーブル123で規定された各動作種類の具体的な動作内容が記録されたテーブルである。ただし、性格動作については、性格の種類毎に、動作内容が規定される。なお、動作内容テーブル124は必須のデータではない。例えば、成長テーブル123の動作種類の項目に、具体的な動作内容を直接記録する形で成長テーブル123を構成すれば、動作内容テーブル124は不要である。
【0069】
成長日数データ125は、初期値が1であり、1日経過する度に1ずつ加算されていく。成長日数データ125により、ロボット200の疑似的な成長日数(疑似的な生誕からの日数)が表されることになる。本実施形態では、成長日数データ125で表される成長日数の期間を、第2期間と呼ぶことにする。
【0070】
次に、
図12に示すフローチャートを参照しながら、ロボット200の制御部110が実行する動作制御処理について説明する。動作制御処理は、制御部110が、センサ部210からの検出値等に基づいて、ロボット200の動作(動きや鳴き声等)を制御する処理である。ユーザがロボット200の電源を入れると、他の必要な処理と並行に、この動作制御処理のスレッドが実行開始される。動作制御処理により、駆動部220や出力部230(音出力部)が制御され、ロボット200の動きが表現されたり、鳴き声等の音が出力されたりする。
【0071】
まず、制御部110は、感情データ121、感情変化データ122、成長日数データ125等の各種データを初期化する(ステップS101)。本実施形態で用いる各種変数(BigSound_Flag,TalkSound_Flag,Talk飼い主登録_Flag,Talk絶対_Flag,Talk多分_Flag,Talkもしかして_Flag,Talk繰返し_Flag,Talk一般動作_Flag,Touch_Flag,Touch絶対_Flag,Touch多分_Flag,Touchもしかして_Flag等)もステップS101でOFF又は0に初期化される。
【0072】
そして、制御部110は、マイクロフォン214からの外部刺激を取得するマイク入力処理を実行する(ステップS102)。マイク入力処理の詳細は後述する。次に、制御部110は、タッチセンサ211や加速度センサ212からの外部刺激を取得するタッチ入力処理を実行する(ステップS103)。タッチ入力処理の詳細も後述する。なお、本実施形態では説明を分かり易くするためにマイク入力処理とタッチ入力処理とを別々の処理として説明しているが、1つの処理(外部入力処理)として、センサ部210が備える各種センサから外部刺激を取得する処理を実行してもよい。
【0073】
そして、制御部110は、センサ部210で検出される外部刺激が有ったか否かを判定する(ステップS104)。外部刺激が有ると上述のマイク入力処理及びタッチ入力処理により、BigSound_Flag、TalkSound_Flag又はTouch_FlagがONになるので、これらのフラグ変数の値に基づいて、制御部110は、ステップS104における判定が可能である。
【0074】
外部刺激が有ったなら(ステップS104;Yes)、制御部110は、マイク入力処理及びタッチ入力処理で取得された外部刺激に応じて、感情データ121に加算又は減算する感情変化データ122を取得する(ステップS105)。具体的には、例えば、外部刺激として頭部204のタッチセンサ211により頭部204が撫でられたことを検出すると、ロボット200は疑似的な安心感を得るので、制御部110は、感情データ121のX値に加算する感情変化データ122としてDXPを取得する。
【0075】
そして、制御部110は、ステップS105で取得された感情変化データ122に応じて感情データ121を設定する(ステップS106)。具体的には、例えば、ステップS105で感情変化データ122としてDXPが取得されていたなら、制御部110は、感情データ121のX値に感情変化データ122のDXPを加算する。ただし、感情変化データ122を加算すると感情データ121の値(X値、Y値)が感情マップ300の最大値を超える場合には、感情データ121の値は感情マップ300の最大値に設定される。また、感情変化データ122を減算すると感情データ121の値が感情マップ300の最小値未満になる場合には、感情データ121の値は感情マップ300の最小値に設定される。
【0076】
ステップS105及びステップS106において、外部刺激の各々に対して、どのような感情変化データ122が取得されて、感情データ121が設定されるかは任意に設定可能であるが、ここでは、以下に一例を示す。なお、感情データ121のX値及びY値は感情マップ300のサイズによって最大値及び最小値が規定されているため、以下の演算によって感情マップ300の最大値を上回る場合には最大値が、感情マップ300の最小値を下回る場合には最小値が、それぞれ設定される。
【0077】
頭部204を撫でられる(安心する):X=X+DXP
頭部204を叩かれる(不安になる):X=X-DXM
(これらの外部刺激は頭部204のタッチセンサ211で検出可能)
胴体部206を撫でられる(興奮する):Y=Y+DYP
胴体部206を叩かれる(無気力になる):Y=Y-DYM
(これらの外部刺激は胴体部206のタッチセンサ211で検出可能)
頭を上にして抱かれる(喜ぶ):X=X+DXP及びY=Y+DYP
頭を下にして宙づりにされる(悲しむ):X=X-DXM及びY=Y-DYM
(これらの外部刺激はタッチセンサ211及び加速度センサ212で検出可能)
優しい声で呼びかけられる(平穏になる):X=X+DXP及びY=Y-DYM
大きな声で怒鳴られる(イライラする):X=X-DXM及びY=Y+DYP
(これらの外部刺激はマイクロフォン214で検出可能)
【0078】
そして、制御部110は、タッチ入力処理でタッチ等の外部刺激が有ったか否かを判定する(ステップS107)。具体的には、制御部110は、Touch_FlagがONか否かを判定すればよい。タッチ等が有ったなら(ステップS107;Yes)、制御部110は、タッチ応答処理を実行する(ステップS108)。タッチ応答処理の詳細は後述する。そして、制御部110は、変数Touch_FlagにOFFを代入して(ステップS109)、ステップS119に進む。
【0079】
一方、タッチ入力処理でタッチ等の外部刺激がなかったなら(ステップS107;No)、制御部110は、マイク入力処理で外部刺激として音声が有ったか否かを判定する(ステップS110)。具体的には、TalkSound_FlagがONか否かを判定すればよい。音声があるなら(ステップS110;Yes)、制御部110は、音声応答処理を実行する(ステップS111)。音声応答処理の詳細は後述する。そして、制御部110は、変数TalkSound_FlagにOFFを代入して(ステップS112)、ステップS119に進む。
【0080】
一方、マイク入力処理で外部刺激として音声がなかったなら(ステップS110;No)、制御部110は、マイク入力処理で外部刺激として大きな音が有ったか否かを判定する(ステップS113)。具体的には、BigSound_FlagがONか否かを判定すればよい。大きな音が有ったなら(ステップS113;Yes)、制御部110は、大きな音に反応する動作を実行する(ステップS114)。すなわち、制御部110は、
図10に示す成長テーブル123の動作トリガーとして「大きな音がする」に対応する動作(基本動作2-0等)を実行する。そして、制御部110は、変数BigSound_FlagにOFFを代入して(ステップS115)、ステップS119に進む。
【0081】
一方、マイク入力処理で外部刺激として大きな音がなかったなら(ステップS113;No)、制御部110は、その他外部刺激に応じた動作(マイク入力処理やタッチ入力処理で取得した外部刺激に対応する動作トリガーが成長テーブル123に存在するなら、その動作トリガーに対応する動作)を実行し(ステップS116)、ステップS119に進む。
【0082】
一方、ステップS104で外部刺激がなかったなら(ステップS104;No)、制御部110は、呼吸動作等の自発的な動作を行うか否かを判定する(ステップS117)。自発的な動作を行うか否かの判定方法は任意だが、本実施形態では、呼吸周期(例えば2秒)毎にステップS117の判定がYesになり、呼吸動作が行われるものとする。
【0083】
自発的な動作を行うなら(ステップS117;Yes)、制御部110は、自発的な動作(例えば呼吸動作)を実行し(ステップS118)、ステップS119に進む。
【0084】
自発的な動作を行わないなら(ステップS117;No)、制御部110は、クロック機能により、日付が変わったか否かを判定する(ステップS119)。日付が変わっていないなら(ステップS119;No)、制御部110はステップS102に戻る。
【0085】
日付が変わったなら(ステップS119;Yes)、制御部110は、第1期間中であるか否かを判定する(ステップS120)。第1期間を、ロボット200の疑似的な生誕(例えば購入後のユーザによる初回の起動時)から例えば50日の期間とすると、制御部110は、成長日数データ125が50以下なら第1期間中であると判定する。第1期間中でないなら(ステップS120;No)、制御部110は、ステップS122に進む。
【0086】
第1期間中なら(ステップS120;Yes)、制御部110は、感情変化データ122の学習を行い、感情マップを拡大する(ステップS121)。感情変化データ122の学習とは、具体的には、その日のステップS106において、感情データ121のX値が1度でも感情マップ300の最大値に設定されたなら感情変化データ122のDXPに1を加算し、感情データ121のY値が1度でも感情マップ300の最大値に設定されたなら感情変化データ122のDYPに1を加算し、感情データ121のX値が1度でも感情マップ300の最小値に設定されたなら感情変化データ122のDXMに1を加算し、感情データ121のY値が1度でも感情マップ300の最小値に設定されたなら感情変化データ122のDYMに1を加算することによって、感情変化データ122を更新する処理のことである。
【0087】
ただし、感情変化データ122の各値が大きくなりすぎると、感情データ121の1回の変化量が大きくなりすぎるので、感情変化データ122の各値は例えば20を最大値とし、それ以下に制限する。また、ここでは、感情変化データ122のいずれに対しても1を加算することとしたが、加算する値は1に限定されない。例えば、感情データ121の各値が感情マップ300の最大値又は最小値に設定された回数をカウントして、その回数が多い場合には、感情変化データ122に加算する数値を増やすようにしてもよい。
【0088】
図12のステップS121に戻り、感情マップの拡大とは、具体的には、制御部110は、感情マップ300を最大値、最小値ともに、2だけ拡大する処理である。ただし、この拡大する数値「2」はあくまでも一例であり、3以上拡大してもよいし、1だけ拡大してもよい。また感情マップ300の軸毎、また最大値と最小値とで、拡大する数値が同じでなくてもよい。
【0089】
そして、制御部110は、成長日数データ125に1を加算し、感情データをX値、Y値ともに0に初期化して(ステップS122)、ステップS102に戻る。
【0090】
次に、上述の動作制御処理のステップS102で実行されるマイク入力処理について、
図13を参照して説明する。
【0091】
まず、制御部110は、音声バッファに入っているサンプリングデータの中の最大レベルを変数MLに代入する(ステップS201)。そして、制御部110は、変数MLの値がBigSoundThよりも大きいか否かを判定する(ステップS202)。なお、BigSoundThには、これよりも大きい音に対してはロボット200が驚く動作を行う値(大音閾値)を予め設定しておく。変数MLがBigSoundThよりも大きければ(ステップS202;Yes)、制御部110は、大きな音が入力されたことを示す変数BigSound_FlagをONにして(ステップS203)、マイク入力処理を終了し、動作制御処理のステップS103に進む。
【0092】
一方、変数MLがBigSoundTh以下なら(ステップS202;No)、制御部110は、変数MLの値がTalkSoundThよりも大きいか否かを判定する。なお、TalkSoundThには、これ以下の音ならロボット200は話し声として聞き取ることができない値(話声閾値)を予め設定しておく。変数MLがTalkSoundTh以下なら(ステップS204;No)、制御部110は、現在の音声バッファの音を無視して、マイク入力処理を終了し、動作制御処理のステップS103に進む。
【0093】
一方、変数MLがTalkSoundThより大きければ(ステップS204;Yes)、制御部110は、音データを保存した音声バッファの数が基準数(ここでは16個)未満か否かを判定する(ステップS205)。音声バッファの数が基準数未満なら(ステップS205;Yes)、制御部110はステップS205に戻り、基準数個の音声バッファが保存されるまで待つ。
【0094】
一方、音声バッファの数が基準数に達したら(ステップS205;No)、制御部110は、基準数個の音声バッファに保存された音がノイズであるか否かを判定する(ステップS206)。話し声であれば、TalkSoundThより大きなレベルの音が一定の時間(例えば0.1秒以上)生じるが、ノイズの場合は単発的な瞬間的な音であることが多い。このため、制御部110は、このような音の性質を利用して、音声バッファに保存された音がノイズであるか否かを判定できる。
【0095】
例えば、制御部110は、まず、基準数個の音声バッファのうち、先頭のノイズ判定個数(本実施形態では3個。すなわち音声バッファ[0]、音声バッファ[1]及び音声バッファ[2])について、それぞれの音声バッファに入っているサンプリングデータの中の最大レベルが、TalkSoundThより大きいか否かを判定する。そして、最大レベルがTalkSoundTh以下の音声バッファが1つでも存在したら、今回基準数個保存した音声バッファの音はノイズであると判定し、ノイズ判定個数の全ての音声バッファ(すなわち音声バッファ[0]、音声バッファ[1]及び音声バッファ[2]のそれぞれ)の最大レベルがTalkSoundThより大きいなら、ノイズではないと判定する。
【0096】
図13に戻り、基準数個の音声バッファに保存された音がノイズであるなら(ステップS206;Yes)、制御部110は、現在の基準数個の音声バッファの音を無視して(動作トリガーとなるような音の外部刺激はなかったと判断して)、マイク入力処理を終了し、動作制御処理のステップS103に進む。
【0097】
一方、基準数個の音声バッファに保存された音がノイズでないなら(ステップS206;No)、制御部110は、話し声が入力されたことを示す変数TalkSound_FlagにONを代入して(ステップS207)、音声特徴パラメータ算出処理を行う(ステップS208)。音声特徴パラメータ算出処理は、音声バッファに保存されているサンプリングデータからケプストラムを計算することにより音声特徴パラメータを算出する処理であるが、詳細は後述する。
【0098】
次に、制御部110は、繰返し呼びかけ判定処理を行う(ステップS209)。繰返し呼びかけ判定処理とは、音声特徴パラメータ算出処理で算出した音声特徴パラメータ(この処理を行うタイミングで取得された音声特徴パラメータ)と、直近の連続判定保存数(本実施形態では3つ)分の音声履歴と、を比較することにより、繰返し呼びかけられているか否かを判定して、その判定結果を返す処理である。
【0099】
具体的には、制御部110は、この処理を行うタイミングで取得された音声特徴パラメータと音声履歴中の直近の3つの音声特徴パラメータのそれぞれとの距離(L2ノルム)を算出し、算出された3つの距離のうち、VsimTh(音声類似閾値として予め設定しておく)未満となるものが2つ以上あれば「繰返し呼びかけ」であると判定し、VsimTh未満となるものが1つ以下であれば「繰返し呼びかけ」ではないと判定する。なお、直近の連続判定保存数分の音声履歴を連続判定特徴量とも呼ぶ。
【0100】
そして、制御部110は、繰返し呼びかけ判定処理の判定結果が「繰返し呼びかけ」であるか否かを判定する(ステップS210)。繰返し呼びかけであるなら(ステップS210;Yes)、制御部110は、飼い主登録であるか否かを判定する(ステップS211)。この判定は、具体的には、ロボット200の最初の電源ONから登録時間内(例えば3分以内)であり、かつ、変数Talk飼い主登録_Flagが0なら、制御部110は、飼い主登録であると判定し、登録時間を過ぎているか又は変数Talk飼い主登録_Flagが0でないなら、飼い主登録ではないと判定する。
【0101】
飼い主登録なら(ステップS211;Yes)、制御部110は、変数Talk飼い主登録_Flagに1を代入して(ステップS212)、ステップS214に進む。飼い主登録でないなら(ステップS211;No)、制御部110は、変数Talk繰返し_FlagをONにして(ステップS213)、ステップS214に進む。そして、ステップS214で、制御部110は、ステップS208で算出された音声特徴パラメータを音声履歴(VFIFO)に先入れ先出し方式で保存する(ステップS214)。そして制御部110は、マイク入力処理を終了して、動作制御処理のステップS103に進む。
【0102】
一方、ステップS210で制御部110が繰返し呼びかけではないと判定したら(ステップS210;No)、制御部110は、飼い主の声判定処理を行う(ステップS215)。飼い主の声判定処理とは、音声特徴パラメータ算出処理で算出した音声特徴パラメータと、飼い主として登録されている音声(登録音声)の音声特徴パラメータとを比較することにより、飼い主の声であるか否かを判定して、その判定結果を返す処理である。具体的には、制御部110は、ステップS208で算出された音声特徴パラメータと登録音声の音声特徴パラメータとの距離(L2ノルム)を算出し、算出された距離がVsimTh(音声類似閾値)未満であれば「飼い主の声」であると判定し、算出された距離がVsimTh以上なら「飼い主の声」ではないと判定する。
【0103】
そして、制御部110は、飼い主の声判定処理の判定結果が「飼い主の声」であるか否かを判定する(ステップS216)。飼い主の声なら(ステップS216;Yes)、その音声が絶対に飼い主の音声であるとロボット200が認識したことを示す変数Talk絶対_FlagにONを代入して(ステップS217)、ステップS214に進む。
【0104】
飼い主の声でないなら(ステップS216;No)、制御部110は、音声履歴との類似度判定処理を行う(ステップS218)。音声履歴との類似度判定処理とは、音声特徴パラメータ算出処理で算出した音声特徴パラメータと音声履歴とを比較して類似度を求め、その類似度に応じて0から2までの整数(0=類似していない、1=類似度中、2=類似度高)を返す処理であるが、詳細は後述する。
【0105】
そして、制御部110は、音声履歴との類似度判定処理で返された結果が2(すなわち類似度高)であるか否かを判定する(ステップS219)。返された値が2なら(ステップS219;Yes)、制御部110は、その音声が多分飼い主であるとロボット200が認識したことを示す変数Talk多分_FlagにONを代入して(ステップS220)、ステップS214に進む。
【0106】
音声履歴との類似度判定処理で返された結果が2でないなら(ステップS219;No)、制御部110は、音声履歴との類似度判定処理で返された結果が1(すなわち類似度中)であるか否を判定する(ステップS221)。返された値が1なら(ステップS221;Yes)、制御部110は、その音声がもしかしたら飼い主かもしれないとロボット200が認識したことを示す変数Talkもしかして_FlagにONを代入して(ステップS222)、ステップS214に進む。
【0107】
音声履歴との類似度判定処理で返された結果が1でない(すなわち「類似していない」ということ)なら(ステップS221;No)、制御部110は、一般動作を行うことを示す変数Talk一般動作_FlagにONを代入し(ステップS223)、ステップS214に進む。
【0108】
次に、マイク入力処理のステップS208で実行される音声特徴パラメータ算出処理について、
図14を参照して説明する。
【0109】
まず、制御部110は、配列変数としての音声バッファの各要素(音声バッファ[0]~音声バッファ[15])を指定するための変数iを0に初期化する(ステップS231)。そして、制御部110は、変数iが16以上であるか否かを判定する(ステップS232)。変数iが16以上なら(ステップS232;Yes)、制御部110は音声特徴パラメータ算出処理を終了してマイク入力処理のステップS209に進む。
【0110】
変数iが16未満なら(ステップS232;No)、制御部110は、音声バッファ[i]に含まれている512サンプルについて、高速フーリエ変換(FFT:Fast Fourier Transform)を行う(ステップS233)。そして、制御部110は、FFTにより得られた最初の256個の振幅成分(音声データの周波数スペクトル)を算出する(ステップS234)。ここでは、振幅成分を変数α[0]~α[255]に格納することとすると、制御部110は、
α[n]=√(n番目の実数成分の2乗+n番目の虚数成分の2乗)
(ただしnは0~255)
を計算する。
【0111】
次に、制御部110は、256個の振幅成分それぞれの自然対数を算出する(ステップS235)。ここでは自然対数を変数β[0]~β[255]に格納することとすると、制御部110は、
β[n]=ln(α[n])
(ただしnは0~255)
を計算する。
【0112】
次に、制御部110は算出した256個の自然対数に対して、再度FFTを行う(ステップS236)。そして、制御部110は、FFTにより得られた成分のうち、最初の方から直流成分(最初の1個目)を除く基準個数(本実施形態では3個)の成分の振幅成分を算出する(ステップS237)。ここではケプストラムが得られるので、これを変数Cps[0]~Cps[2]に格納することとすると、制御部110は、
Cps[n-1]=√(n番目の実数成分の2乗+n番目の虚数成分の2乗)
(ただしnは1~3)
を計算する。
【0113】
次に、制御部110は算出した3個のケプストラムを、音声特徴パラメータとして保存する(ステップS238)。ここでは、音声特徴パラメータを配列変数VF[i,n]に格納することとすると、制御部110は、
VF[i,n]=Cps[n]
(ただしnは0~2)
を実行する。そして、制御部110は、変数iに1を加算して(ステップS239)、ステップS232に戻る。
【0114】
以上の音声特徴パラメータ算出処理により、16×3=48の要素を持つ音声特徴パラメータ(VF[0,0]~VF[15,2])が得られる。
【0115】
次に、マイク入力処理のステップS218で実行される音声履歴との類似度判定処理について、
図15を参照して説明する。
【0116】
まず、制御部110は、音声履歴の格納数が保存されている変数VFIFO_Sizeが最低音声基準数(本実施形態では32)より大きいか否かを判定する(ステップS251)。VFIFO_Sizeが最低音声基準数以下なら(ステップS251;No)、十分な類似度判定が行えないため、制御部110は、「0」(類似していないことを表す)を返り値として、音声履歴との類似度判定処理を終了し、マイク入力処理のステップS219に進む。
【0117】
VFIFO_Sizeが最低音声基準数より大きいなら(ステップS251;Yes)、制御部110は、類似度が高い音声履歴の数をカウントするための変数simCntと、類似度が中位の音声履歴の数をカウントするための変数maysimCntと、配列変数としての音声履歴VFIFOの各要素(VFIFO[0]~VFIFO[VFIFO_Size-1])を指定するための変数iを、0に初期化する(ステップS252)。
【0118】
そして、制御部110は、ステップS208で算出された音声特徴パラメータとVFIFO[i]との距離(L2ノルム)を算出して、変数d[i]に代入する(ステップS253)。そして、制御部110は、変数d[i]の値がVSimTh(音声類似閾値)未満であるか否かを判定する(ステップS254)。d[i]がVSimTh未満なら(ステップS254;Yes)、制御部110は、変数simCntに1を加算し(ステップS255)、ステップS256に進む。d[i]がVSimTh以上なら(ステップS254;No)、ステップS256に進む。
【0119】
そして、ステップS256では、制御部110は、変数d[i]の値がVMaySimTh(音声中位類似閾値)未満であるか否かを判定する。なお、VMaySimTh(音声中位類似閾値)としては、VSimTh(音声類似閾値)よりも大きな値を予め設定しておく。d[i]がVMaySimTh未満なら(ステップS256;Yes)、制御部110は、変数maysimCntに1を加算し(ステップS257)、ステップS258に進む。d[i]がVMaySimTh以上なら(ステップS256;No)、ステップS258に進む。
【0120】
ステップS258では、制御部110は、変数iに1を加算する。そして、制御部110は変数iの値が変数VFIFO_Size未満であるか否かを判定する(ステップS259)。変数iがVFIFO_Size未満なら(ステップS259;Yes)、制御部110は、ステップS253に戻る。
【0121】
変数iがVFIFO_Size以上なら(ステップS259;No)、制御部110は、変数VFIFO_Sizeに対する変数simCntの割合が20%を超えているか否かを判定する(ステップS260)。変数VFIFO_Sizeに対する変数simCntの割合が20%を超えているなら(ステップS260;Yes)、ステップS208で算出された音声特徴パラメータと音声履歴との類似度が高いということなので、制御部110は、「2」を返り値として、音声履歴との類似度判定処理を終了し、マイク入力処理のステップS219に進む。
【0122】
一方、変数VFIFO_Sizeに対する変数simCntの割合が20%以下なら(ステップS260;No)、制御部110は、変数VFIFO_Sizeに対する変数maysimCntの割合が30%を超えているか否かを判定する(ステップS261)。変数VFIFO_Sizeに対する変数maysimCntの割合が30%を超えているなら(ステップS261;Yes)、ステップS208で算出された音声特徴パラメータと音声履歴との類似度が中位ということなので、制御部110は、「1」を返り値として、音声履歴との類似度判定処理を終了し、マイク入力処理のステップS219に進む。
【0123】
一方、変数VFIFO_Sizeに対する変数maysimCntの割合が30%以下なら(ステップS261;No)、ステップS208で算出された音声特徴パラメータと音声履歴とが類似していないということなので、制御部110は、「0」を返り値として、音声履歴との類似度判定処理を終了し、マイク入力処理のステップS219に進む。なお、上記の判定で「20%」及び「30%」と比較しているのは、一例に過ぎず、VSimTh及びVMaySimThとともに、必要に応じて変更可能である。
【0124】
次に、動作制御処理のステップS103で実行されるタッチ入力処理について、
図16を参照して説明する。
【0125】
まず制御部110は、タッチセンサ211、加速度センサ212、ジャイロセンサ213から、各センサで検出された検出値を取得する(ステップS301)。そして、制御部110は、検出値に基づいて、タッチセンサ211でタッチを検出したか、又は、加速度センサ212で検出された加速度が変化したか、又は、ジャイロセンサで検出された角速度が変化したかを判定する(ステップS302)。
【0126】
タッチ又は加速度変化又は角速度変化があったなら(ステップS302;Yes)、制御部110は変数Touch_FlagをONにし(ステップS303)、タッチ特徴パラメータを算出する(ステップS304)。タッチ特徴パラメータは、上述したように、ロボット200の姿勢(dir)、頭部のタッチ強度(touch_Head)、左側面のタッチ強度(touch_Left)、右側面のタッチ強度(touch_Right)、振動強度(gyro_Level)の5次元の情報からなる。
【0127】
そして、制御部110は、タッチ履歴との類似度判定処理を行う(ステップS305)。タッチ履歴との類似度判定処理は、ステップS304で算出したタッチ特徴パラメータとタッチ履歴とを比較して類似度を求め、その類似度に応じて0から3までの整数(0=類似していない、1=類似度中、2=類似度高、3=類似度非常に高)を返す処理であるが、詳細は後述する。そして、制御部110は、タッチ履歴との類似度判定処理で返された結果が3であるか否かを判定する(ステップS306)。返された値が3なら(ステップS306;Yes)、制御部110は、そのタッチの仕方(撫で方)が絶対にいつもお世話をしてくれる人であるとロボット200が認識したことを示す変数Touch絶対_FlagにONを代入して(ステップS307)、ステップS313に進む。
【0128】
タッチ履歴との類似度判定処理で返された値が3でないなら(ステップS306;No)、制御部110は、タッチ履歴との類似度判定処理で返された値が2であるか否かを判定する(ステップS308)。返された値が2なら(ステップS308;Yes)、制御部110は、そのタッチの仕方(撫で方)が多分いつもお世話をしてくれる人であるとロボット200が認識したことを示す変数Touch多分_FlagにONを代入して(ステップS309)、ステップS313に進む。
【0129】
タッチ履歴との類似度判定処理で返された値が2でないなら(ステップS308;No)、制御部110は、タッチ履歴との類似度判定処理で返された値が1であるか否かを判定する(ステップS310)。返された値が1なら(ステップS310;Yes)、制御部110は、そのタッチの仕方(撫で方)がもしかするといつもお世話をしてくれる人かもしれないとロボット200が認識したことを示す変数Touchもしかして_FlagにONを代入して(ステップS311)、ステップS313に進む。
【0130】
タッチ履歴との類似度判定処理で返された値が1でないなら(ステップS310;No)、ステップS304で算出されたタッチ特徴パラメータはタッチ履歴と類似していないということなので、制御部110は、一般的な動作を行うことを示す変数Touch一般動作_FlagにONを代入して(ステップS312)、ステップS313に進む。
【0131】
ステップS313では、制御部110は、ステップS304で算出されたタッチ特徴パラメータをタッチ履歴(TFIFO)に先入れ先出し方式で保存する(ステップS313)。そして制御部110は、タッチ入力処理を終了して、動作制御処理のステップS104に進む。
【0132】
次に、タッチ入力処理のステップS305で実行されるタッチ履歴との類似度判定処理について、
図17を参照して説明する。
【0133】
まず、制御部110は、タッチ履歴の格納数が保存されている変数TFIFO_Sizeが最低タッチ基準数(本実施形態では32)より大きいか否かを判定する(ステップS351)。TFIFO_Sizeが最低タッチ基準数以下なら(ステップS351;No)、十分な類似度判定が行えないため、制御部110は、「0」(類似していないことを表す)を返り値として、タッチ履歴との類似度判定処理を終了し、タッチ入力処理のステップS306に進む。
【0134】
TFIFO_Sizeが最低タッチ基準数より大きいなら(ステップS351;Yes)、制御部110は、類似度が非常に高いタッチ履歴の数をカウントするための変数abssimCntと、類似度が高いタッチ履歴の数をカウントするための変数simCntと、類似度が中位のタッチ履歴の数をカウントするための変数maysimCntと、配列変数としてのタッチ履歴TFIFOの各要素(TFIFO[0]~TFIFO[TFIFO_Size-1])を指定するための変数iを、0に初期化する(ステップS352)。
【0135】
そして、制御部110は、ステップS304で算出されたタッチ特徴パラメータとTFIFO[i]とでそれぞれに含まれるロボット200の姿勢の情報(dir)が一致するか否かを判定する(ステップS353)。一致しないなら(ステップS353;No)、制御部110は、ステップS361に進む。
【0136】
姿勢(dir)が一致するなら(ステップS353;Yes)、制御部110
は、ステップS304で算出されたタッチ特徴パラメータとTFIFO[i]との距離(L2ノルム)を算出して、変数d[i]に代入する(ステップS354)。そして、制御部110は、変数d[i]の値がTAbsSimTh(タッチ超高類似閾値)未満であるか否かを判定する(ステップS355)。なお、TAbsSimTh(タッチ超高類似閾値)としては、後述するTSimTh(タッチ類似閾値)よりも小さな値を予め設定しておく。d[i]がTAbsSimTh未満なら(ステップS355;Yes)、制御部110は、変数abssimCntに1を加算し(ステップS356)、ステップS357に進む。d[i]がTAbsSimTh以上なら(ステップS355;No)、ステップS357に進む。
【0137】
そして、ステップS357では、制御部110は、変数d[i]の値がTSimTh(タッチ類似閾値として予め設定しておく)未満であるか否かを判定する。d[i]がTSimTh未満なら(ステップS357;Yes)、制御部110は、変数simCntに1を加算し(ステップS358)、ステップS359に進む。d[i]がTSimTh以上なら(ステップS357;No)、ステップS359に進む。
【0138】
そして、ステップS359では、制御部110は、変数d[i]の値がTMaySimTh(タッチ中位類似閾値)未満であるか否かを判定する。なお、TMaySimTh(タッチ中位類似閾値)としては、TSimTh(タッチ類似閾値)よりも大きな値を予め設定しておく。d[i]がTMaySimTh未満なら(ステップS359;Yes)、制御部110は、変数maysimCntに1を加算し(ステップS360)、ステップS361に進む。d[i]がTMaySimTh以上なら(ステップS359;No)、ステップS361に進む。
【0139】
ステップS361では、制御部110は、変数iに1を加算する。そして、制御部110は変数iの値が変数TFIFO_Size未満であるか否かを判定する(ステップS362)。変数iがTFIFO_Size未満なら(ステップS362;Yes)、制御部110は、ステップS353に戻る。
【0140】
変数iがTFIFO_Size以上なら(ステップS362;No)、制御部110は、変数TFIFO_Sizeに対する変数abssimCntの割合が30%を超えているか否かを判定する(ステップS363)。変数TFIFO_Sizeに対する変数abssimCntの割合が30%を超えているなら(ステップS363;Yes)、ステップS304で算出されたタッチ特徴パラメータとタッチ履歴との類似度が非常に高いということなので、制御部110は、「3」を返り値として、タッチ履歴との類似度判定処理を終了し、タッチ入力処理のステップS306に進む。
【0141】
一方、変数TFIFO_Sizeに対する変数abssimCntの割合が30%以下なら(ステップS363;No)、制御部110は、変数TFIFO_Sizeに対する変数simCntの割合が30%を超えているか否かを判定する(ステップS364)。変数TFIFO_Sizeに対する変数simCntの割合が30%を超えているなら(ステップS364;Yes)、ステップS304で算出されたタッチ特徴パラメータとタッチ履歴との類似度が高いということなので、制御部110は、「2」を返り値として、タッチ履歴との類似度判定処理を終了し、タッチ入力処理のステップS306に進む。
【0142】
一方、変数TFIFO_Sizeに対する変数simCntの割合が30%以下なら(ステップS364;No)、制御部110は、変数TFIFO_Sizeに対する変数maysimCntの割合が30%を超えているか否かを判定する(ステップS365)。変数TFIFO_Sizeに対する変数maysimCntの割合が30%を超えているなら(ステップS365;Yes)、ステップS304で算出されたタッチ特徴パラメータとタッチ履歴との類似度が中位ということなので、制御部110は、「1」を返り値として、タッチ履歴との類似度判定処理を終了しタッチ入力処理のステップS306に進む。
【0143】
一方、変数TFIFO_Sizeに対する変数maysimCntの割合が30%以下なら(ステップS365;No)、ステップS304で算出されたタッチ特徴パラメータとタッチ履歴とが類似しないということなので、制御部110は、「0」を返り値として、タッチ履歴との類似度判定処理を終了し、タッチ入力処理のステップS306に進む。なお、上記の判定で「30%」と比較しているのは、一例に過ぎず、TAbsSimTh、TSimTh及びTMaySimThとともに、必要に応じて変更可能である。
【0144】
次に、上述の動作制御処理のステップS111で実行される音声応答処理について、
図18を参照して説明する。
【0145】
まず、制御部110は、変数Talk飼い主登録_Flagが1であるか否かを判定する(ステップS401)。変数Talk飼い主登録_Flagが1なら(ステップS401;Yes)、制御部110は、変数Talk飼い主登録_Flagに2を代入する(ステップS402)。そして、制御部110は、Talk飼い主登録処理を行う(ステップS403)。Talk飼い主登録処理とは、ステップS208で算出された音声特徴パラメータを飼い主の音声の音声特徴パラメータとして記憶部120に登録する処理である。
【0146】
そして、制御部110は、Talk飼い主登録完了動作を行う(ステップS404)。Talk飼い主登録完了動作とは、飼い主の音声を記憶したことを飼い主に知らせるためのロボット200の動作で、例えば5回鳴いて喜ぶ仕草をする動作である。そして、音声応答処理を終了して動作制御処理のステップS112に進む。
【0147】
一方、変数Talk飼い主登録_Flagが1でなければ(ステップS401;No)、制御部110は、0以上1未満の乱数を生成し、生成した乱数が(成長値÷10)×0.5よりも大きいか否かを判定する(ステップS405)。生成した乱数が(成長値÷10)×0.5以下なら(ステップS405;No)、制御部110は、Talk一般動作を行う(ステップS406)。Talk一般動作とは、ロボット200がユーザに話しかけられたときに行う一般的な動作であり、具体的には成長テーブル123で動作トリガーとして話しかけられた場合の動作種類として設定されている動作(
図10では、基本動作1-0、基本動作1-1又は性格動作1-0)である。そして、制御部110は、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0148】
一方、生成した乱数が(成長値÷10)×0.5より大きいなら(ステップS405;Yes)、制御部110は、変数Talk絶対_FlagがONであるか否かを判定する(ステップS407)。変数Talk絶対_FlagがONなら(ステップS407;Yes)、制御部110は、変数Talk絶対_FlagにOFFを代入して(ステップS408)、Talk絶対飼い主の動作を行う(ステップS409)。Talk絶対飼い主の動作とは、呼びかけてくれた人をロボット200が「絶対飼い主である」と認識したときに行う懐き動作であり、例えば、喜んで飼い主に向かおうとするような動作である。そして、制御部110は、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0149】
一方、変数Talk絶対_FlagがONでないなら(ステップS407;No)、制御部110は、変数Talk多分_FlagがONであるか否かを判定する(ステップS410)。変数Talk多分_FlagがONなら(ステップS410;Yes)、制御部110は、変数Talk多分_FlagにOFFを代入し(ステップS411)、Talk多分飼い主の動作を行う(ステップS412)。Talk多分飼い主の動作とは、ロボット200が呼びかけてくれた人を「多分飼い主である」と認識したときに行う懐き動作であり、例えば、喜ぶような仕草をする動作である。そして、制御部110は、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0150】
一方、変数Talk多分_FlagがONでないなら(ステップS410;No)、制御部110は、変数Talkもしかして_FlagがONであるか否かを判定する(ステップS413)。変数Talkもしかして_FlagがONなら(ステップS413;Yes)、制御部110は、変数Talkもしかして_FlagにOFFを代入し(ステップS414)、Talkもしかして飼い主の動作を行う(ステップS415)。Talkもしかして飼い主の動作とは、ロボット200が呼びかけてくれた人を「もしかして飼い主かもしれない」と認識したときに行う懐き動作であり、例えば、「何?」というような仕草をする動作である。そして、制御部110は、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0151】
一方、変数Talkもしかして_FlagがONでないなら(ステップS413;No)、制御部110は、変数Talk繰返し_FlagがONであるか否かを判定する(ステップS416)。変数Talk繰返し_FlagがONなら(ステップS416;Yes)、制御部110は、変数Talk繰返し_FlagにOFFを代入し(ステップS417)、Talk繰返しの動作を行う(ステップS418)。Talk繰返しの動作とは、ロボット200が「誰かが呼びかけている」と認識したときに行う動作であり、例えば、「何?」という仕草をして呼びかけている人に向かおうとする動作である。そして、制御部110は、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0152】
一方、変数Talk繰返し_FlagがONでないなら(ステップS416;No)、制御部110は、Talk一般動作を行い(ステップS406)、音声応答処理を終了して、動作制御処理のステップS112に進む。
【0153】
次に、上述の動作制御処理のステップS108で実行されるタッチ応答処理について、
図19を参照して説明する。
【0154】
まず、制御部110は、0以上1未満の乱数を生成し、生成した乱数が(成長値÷10)×0.5よりも大きいか否かを判定する(ステップS501)。生成した乱数が(成長値÷10)×0.5以下なら(ステップS501;No)、制御部110は、Touch一般動作を行う(ステップS502)。Touch一般動作とは、ロボット200がユーザに体を撫でられたり、抱っこされたりしたときに行う一般的な動作であり、具体的には成長テーブル123で動作トリガーとして体を撫でられたり、抱っこされたりした場合の動作種類として設定されている動作である。そして、制御部110は、タッチ応答処理を終了して、動作制御処理のステップS109に進む。
【0155】
一方、生成した乱数が(成長値÷10)×0.5より大きいなら(ステップS501;Yes)、制御部110は、変数Touch絶対_FlagがONであるか否かを判定する(ステップS503)。変数Touch絶対_FlagがONなら(ステップS503;Yes)、制御部110は、変数Touch絶対_FlagにOFFを代入し(ステップS504)、Touch絶対世話人の動作を行う(ステップS505)。Touch絶対世話人の動作とは、撫でてくれた人をロボット200が「絶対いつもお世話をしてくれる人である」と認識したときに行う懐き動作であり、例えば、とても喜んでいる仕草をする動作である。そして、制御部110は、タッチ応答処理を終了して、動作制御処理のステップS109に進む。
【0156】
一方、変数Touch絶対_FlagがONでないなら(ステップS503;No)、制御部110は、変数Touch多分_FlagがONであるか否かを判定する(ステップS506)。変数Touch多分_FlagがONなら(ステップS506;Yes)、制御部110は、変数Touch多分_FlagにOFFを代入し(ステップS507)、Touch多分世話人の動作を行う(ステップS508)。Touch多分世話人の動作とは、ロボット200が撫でてくれた人を「多分いつもお世話をしてくれる人である」と認識したときに行う懐き動作であり、例えば、喜ぶような仕草をする動作である。そして、制御部110は、タッチ応答処理を終了して、動作制御処理のステップS109に進む。
【0157】
一方、変数Touch多分_FlagがONでないなら(ステップS506;No)、制御部110は、変数Touchもしかして_FlagがONであるか否かを判定する(ステップS509)。変数Touchもしかして_FlagがONなら(ステップS509;Yes)、制御部110は、変数Touchもしかして_FlagにOFFを代入し(ステップS510)、Touchもしかして世話人の動作を行う(ステップS511)。Touchもしかして世話人の動作とは、ロボット200が撫でてくれた人を「もしかしていつもお世話してくれる人かもしれない」と認識したときに行う懐き動作であり、例えば、「何?」というような仕草をする動作である。そして、制御部110は、タッチ応答処理を終了して、動作制御処理のステップS109に進む。
【0158】
一方、変数Touchもしかして_FlagがONでないなら(ステップS509;No)、制御部110は、Touch一般動作を行い(ステップS502)、タッチ応答処理を終了して、動作制御処理のステップS109に進む。
【0159】
なお、上述の動作制御処理では、飼い主登録機能や、呼びかけ反応機能の外部刺激の対象を音声のみとしていたが、これは一例に過ぎない。制御部110は、ロボット200の最初の電源ONから一定の登録時間(例えば3分間)に繰返し撫でられると、そのタッチ特徴パラメータを飼い主の特徴(登録撫で方情報)として、記憶部120に保存するようにしてもよい。
【0160】
また、ロボット200が(飼い主登録後又は最初の電源ONから一定の登録時間(例えば3分間)以上経過後に)繰返し同じようなパターンで触られる(撫でられたり、抱っこされたりする)と、触った人が飼い主であるか否かによらず、誰かに触られていると認識して、その触られ方に反応する動作(例えば、甘えるような鳴き声を発声する動作)を行うようにしてもよい。
【0161】
以上説明した動作制御処理により、制御部110は、外部刺激特徴量(音声特徴パラメータ及びタッチ特徴パラメータ)を取得し、取得された外部刺激特徴量を外部刺激履歴(音声履歴及びタッチ履歴)として記憶部120に保存し、あるタイミングで取得された外部刺激特徴量と記憶部120に保存された外部刺激特徴量との距離(第1類似度)を算出し、算出された第1類似度に基づいてロボット200の動作を制御する。このため、飼い主等の登録を行わなくても、呼びかけ方や撫で方の特徴量が履歴として記憶部120に保存された外部刺激特徴量と似ていれば、ロボット200は多分飼い主だろうと認識して懐き動作を行うことができ、使用者に愛着をわかせることができる。
【0162】
また、使用者が特別な操作を行わなくても、制御部110は、最初の電源ON後の一定の登録時間内に行われた繰返しの呼びかけや撫で方を飼い主(特定使用者)の音声や撫で方(特定刺激)としてセンサ部210で取得し、取得した特定刺激(音声や撫で方)から特定刺激特徴量(登録音声や登録撫で方情報)を取得して記憶部120に保存することができる。そして、あるタイミングで取得された外部刺激特徴量と記憶部120に保存された特定刺激特徴量との距離(第2類似度)を算出し、算出された第2類似度にも基づいてロボット200の動作を制御する。このため、使用者は意識的に飼い主等の登録を行わなくても、呼びかけ方や撫で方の特徴量が記憶部120に保存された特定刺激特徴量と似ていれば、ロボット200は絶対に飼い主だろうと認識して懐き動作を行うことができ、使用者に愛着をわかせることができる。
【0163】
また、制御部110は、使用者等の特定使用者の音声や撫で方が特定刺激特徴量として記憶部120に保存されているかいないかに関わらず、外部刺激履歴から、連続判定保存数の外部刺激特徴量である連続判定特徴量を取得し、あるタイミングで取得された外部刺激特徴量と連続判定特徴量との距離(第3類似度)を算出し、算出された第3類似度にも基づいてロボット200の動作を制御する。このため、飼い主等の登録を行わなくても、何度も繰返し呼びかけることで、ロボット200はその呼びかけに反応する動作を行うことができ、使用者に愛着をわかせることができる。
【0164】
また、制御部110は、外部刺激として取得した音声データに対して、2回のFFTを行って、基準個数(3個)のケプストラムを音声特徴パラメータとして算出するので、少ない計算量にも関わらず、かなり高い精度で飼い主の認識をすることができる音声特徴パラメータを取得することができる。
【0165】
また、制御部110は、外部刺激として加速度及び複数の接触圧力を取得するので、ロボット200が抱っこされたときの向き(姿勢)と、撫でられ方とを統合したタッチ特徴パラメータを取得することができる。
【0166】
また、制御部110は、機械学習された識別器を用いることにより、ロボット200の向き(姿勢)の判定精度を向上させることができる。
【0167】
(変形例)
なお、本発明は、上述の実施形態に限定されず、種々の変形及び応用が可能である。例えば、懐き動作は、一般動作と同様に、成長値や性格に応じて変化するようにしてもよい。
【0168】
また、ロボット200の動作としては、駆動部220による動作や音声データの出力に限定されない。ロボット200の出力部230にLEDが備えられている場合には、ロボット200の動作として、制御部110は、点灯させるLEDの色や明るさを制御してもよい。制御部110により制御される被制御部としては、駆動部220、出力部230の少なくとも一方が含まれればよく、出力部230は音出力部として、音のみを出力してもよいし、LED等により光のみを出力してもよい。
【0169】
また、上述の実施形態での感情マップ300の構成、感情データ121、感情変化データ122、性格データ、成長値等の設定方法は一例に過ぎない。例えばより単純に、成長日数データ125をある数で割った数値(10を超えたら常に10とする)を成長値とするようにしてもよい。
【0170】
また、上述の実施形態では、ロボット200にロボット200を制御する制御部110が内蔵されている構成としたが、ロボット200を制御する制御部110は、必ずしもロボット200に内蔵されている必要はない。例えば、制御部、記憶部、通信部を備えた制御装置(図示せず)が、ロボット200とは別個の装置(例えばサーバ)として構成されてもよい。この変形例では、ロボット200の通信部130と制御装置の通信部とがお互いにデータを送受信できるように構成されている。そして、制御装置の制御部は、制御装置の通信部及びロボット200の通信部130を介して、センサ部210が検出した外部刺激を取得したり、駆動部220や出力部230を制御したりする。
【0171】
なお、このように制御装置とロボット200とが別個の装置で構成されている場合、必要に応じて、ロボット200は制御部110により制御されるようになっていてもよい。例えば、単純な動作は制御部110で制御され、複雑な動作は通信部130を介して制御装置の制御部で制御される等である。
【0172】
上述の実施形態において、制御部110のCPUが実行する動作プログラムは、あらかじめ記憶部120のROM等に記憶されていた。しかしながら、本発明は、これに限定されず、上述の各種処理を実行させるための動作プログラムを、既存の汎用コンピュータ等に実装することにより、上述の実施形態に係るロボット200の制御部110及び記憶部120に相当する装置として機能させてもよい。
【0173】
このようなプログラムの提供方法は任意であり、例えば、コンピュータが読取可能な記録媒体(フレキシブルディスク、CD(Compact Disc)-ROM、DVD(Digital Versatile Disc)-ROM、MO(Magneto-Optical Disc)、メモリカード、USBメモリ等)に格納して配布してもよいし、インターネット等のネットワーク上のストレージにプログラムを格納しておき、これをダウンロードさせることにより提供してもよい。
【0174】
また、上述の処理をOS(Operating System)とアプリケーションプログラムとの分担、又は、OSとアプリケーションプログラムとの協働によって実行する場合には、アプリケーションプログラムのみを記録媒体やストレージに格納してもよい。また、搬送波にプログラムを重畳し、ネットワークを介して配信することも可能である。例えば、ネットワーク上の掲示板(Bulletin Board System:BBS)に上記プログラムを掲示し、ネットワークを介してプログラムを配信してもよい。そして、このプログラムを起動し、OSの制御下で、他のアプリケーションプログラムと同様に実行することにより、上記の処理を実行できるように構成してもよい。
【0175】
また、制御部110は、シングルプロセッサ、マルチプロセッサ、マルチコアプロセッサ等の任意のプロセッサ単体で構成されるものの他、これら任意のプロセッサと、ASIC(Application Specific Integrated Circuit)やFPGA(Field‐Programmable Gate Array)等の処理回路とが組み合わせられて構成されてもよい。
【0176】
本発明は、本発明の広義の精神と範囲とを逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、前述した実施形態は、この発明を説明するためのものであり、本発明の範囲を限定するものではない。すなわち、本発明の範囲は、実施形態ではなく、特許請求の範囲によって示される。そして、特許請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、この発明の範囲内とみなされる。以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
【0177】
(付記1)
記憶部と制御部とを備え、
前記制御部は、
外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を履歴として前記記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記算出された第1類似度に基づいて動作を制御する、
ロボット。
【0178】
(付記2)
前記制御部は、
特定使用者からの前記外部刺激である特定刺激の特徴量である特定刺激特徴量を取得し、
前記取得された特定刺激特徴量を前記記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された特定刺激特徴量とを比較して第2類似度を算出し、
前記算出された第2類似度にも基づいて動作を制御する、
付記1に記載のロボット。
【0179】
(付記3)
前記制御部は、
前記外部刺激特徴量を先入れ先出し方式で履歴保存数まで履歴として前記記憶部に保存し、
前記記憶部に保存された外部刺激特徴量の新しい方から前記履歴保存数よりも少ない連続判定保存数の前記外部刺激特徴量である連続判定特徴量を取得し、
あるタイミングで取得された外部刺激特徴量と前記取得された連続判定特徴量とを比較して第3類似度を算出し、
前記算出された第3類似度にも基づいて動作を制御する、
付記1又は2に記載のロボット。
【0180】
(付記4)
前記制御部は、
前記外部刺激として音声データを取得する、
付記1から3のいずれか1つに記載のロボット。
【0181】
(付記5)
前記制御部は、
前記音声データをフーリエ変換して周波数スペクトルを取得し、
前記取得された周波数スペクトルをフーリエ変換して得られるケプストラムの一部を、前記外部刺激特徴量として取得する、
付記4に記載のロボット。
【0182】
(付記6)
前記制御部は、
前記外部刺激として加速度及び複数の接触圧力を取得する、
付記1から5のいずれか1つに記載のロボット。
【0183】
(付記7)
前記制御部は
前記加速度に基づいてロボットの向きを判定し、
前記判定された向きと前記複数の接触圧力とから前記外部刺激特徴量を取得する、
付記6に記載のロボット。
【0184】
(付記8)
前記制御部は、
前記加速度の履歴から機械学習した識別器によって得られるロボットの向きと、あるタイミングで取得された加速度と、に基づいて、ロボットの向きを判定する、
付記7に記載のロボット。
【0185】
(付記9)
外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を履歴として記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記算出された第1類似度に基づいて動作を制御する、
ロボット制御方法。
【0186】
(付記10)
コンピュータに、
外部から作用する外部刺激の特徴量である外部刺激特徴量を取得し、
前記取得された外部刺激特徴量を履歴として記憶部に保存し、
あるタイミングで取得された外部刺激特徴量と前記記憶部に保存された外部刺激特徴量とを比較して第1類似度を算出し、
前記算出された第1類似度に基づいて動作を制御する、
処理を実行させるプログラム。
【符号の説明】
【0187】
110…制御部、120…記憶部、121…感情データ、122…感情変化データ、123…成長テーブル、124…動作内容テーブル、125…成長日数データ、130…通信部、200…ロボット、201…外装、202…装飾部品、203…毛、204…頭部、205…連結部、206…胴体部、207…筐体、210…センサ部、211,211H,211LF,211LR,211RF,211RR…タッチセンサ、212…加速度センサ、213…ジャイロセンサ、214…マイクロフォン、220…駆動部、221…ひねりモータ、222…上下モータ、230…出力部、231…スピーカ、240…操作部、300…感情マップ、301,302,303…枠、310,410…原点、311,312,411,412,413,414…軸、400…性格値レーダーチャート、BL…バスライン