以下、本発明の実施形態について、図面を参照して説明する。なお、図中同一又は相当部分には同一符号を付す。
(実施形態)
本発明における機器の制御装置を図1に示すロボット200に適用した実施形態について、図面を参照して説明する。実施形態に係るロボット200は、充電可能なバッテリーで駆動する、小型の動物を模したペットロボットである。ロボット200は、図1に示すように、目を模した装飾部品202及びふさふさの毛203を備えた外装201に覆われている。また、外装201の中には、ロボット200の筐体207が収納されている。図2に示すように、ロボット200の筐体207は、頭部204、連結部205及び胴体部206で構成され、頭部204と胴体部206とが連結部205で連結されている。
なお、以下の説明では、ロボット200を床等の載置面に普通に置いた場合を想定して、ロボット200の顔に相当する部分(頭部204の胴体部206とは反対側の部分)の方向を前、お尻に相当する部分(胴体部206の頭部204とは反対側の部分)の方向を後ろとする。また、ロボット200を載置面に普通に置いた場合に載置面に接触する部分の方向を下、その反対の方向を上とする。そして、ロボット200の前後方向に延びる直線に直交し、かつ、上下方向に延びる直線にも直交する方向を、幅方向とする。
胴体部206は、図2に示すように、前後方向に延びている。そして、胴体部206は、ロボット200が置かれている床やテーブル等の載置面に、外装201を介して接触する。また、図2に示すように、胴体部206の前端部にひねりモータ221が備えられており、頭部204が連結部205を介して胴体部206の前端部に連結されている。そして、連結部205には、上下モータ222が備えられている。なお、図2では、ひねりモータ221は胴体部206に備えられているが、連結部205に備えられていてもよいし、頭部204に備えられていてもよい。
連結部205は、連結部205を通り胴体部206の前後方向に延びる第1回転軸を中心として(ひねりモータ221により)回転自在に、胴体部206と頭部204とを連結している。筐体207の正面図として図4及び図5に示すように、ひねりモータ221は、頭部204を、胴体部206に対して、第1回転軸を中心として時計回り(右回り)に正転角度範囲内で回転(正転)させたり、反時計回り(左回り)に逆転角度範囲内で回転(逆転)させたりする。なお、この説明における時計回りは、胴体部206から頭部204の方向を見た時の時計回りである。また、時計回りの回転を「右方へのひねり回転」、反時計回りの回転を「左方へのひねり回転」とも呼ぶことにする。右方又は左方にひねり回転させる角度の最大値は任意であるが、本実施形態では左右とも90度まで回転可能であるものとする。図4及び図5では、図3に示す、頭部204を右方へも左方へもひねっていない状態における頭部204の角度(以下「ひねり基準角度」)を0度としている。そして、最も右方へひねり回転(時計回りに回転)させた時の角度を-90度、最も左方へひねり回転(反時計回りに回転)させた時の角度を+90度、としている。
また、連結部205は、連結部205を通り胴体部206の幅方向に延びる第2回転軸を中心として(上下モータ222により)回転自在に、胴体部206と頭部204とを連結する。筐体207の側面図として図6及び図7に示すように、上下モータ222は、頭部204を、第2回転軸を中心として上方に正転角度範囲内で回転(正転)させたり、下方に逆転角度範囲内で回転(逆転)させたりする。上方又は下方に回転させる角度の最大値は任意だが、本実施形態では上下とも75度まで回転可能であるものとする。図6及び図7では、図2に示す、頭部204を上方にも下方にも回転させていない状態における頭部204の角度(以下「上下基準角度」)を0度、最も下方に回転させた時の角度を-75度、最も上方に回転させた時の角度を+75度、としている。頭部204は、第2回転軸を中心とする上下の回転によって上下基準角度又は上下基準角度より下方に回転している場合は、ロボット200が置かれている床やテーブル等の載置面に、外装201を介して接触可能である。なお、図2では、第1回転軸と第2回転軸とが互いに直交している例が示されているが、第1及び第2回転軸は互いに直交していなくてもよい。
また、ロボット200は、図2に示すように、頭部204にタッチセンサ211を備え、ユーザが頭部204を撫でたり叩いたりしたことを検出することができる。また、胴体部206にもタッチセンサ211を備え、ユーザが胴体部206を撫でたり叩いたりしたことを検出することができる。
また、ロボット200は、胴体部206に加速度センサ212を備え、ロボット200自体の姿勢の検出や、ユーザによって持ち上げられたり、向きを変えられたり、投げられたりしたことを検出することができる。また、ロボット200は、胴体部206にマイクロフォン213を備え、外部の音を検出することができる。さらに、ロボット200は、胴体部206にスピーカ231を備え、スピーカ231を用いてロボット200の鳴き声を発したり、歌を歌ったりすることができる。
また、ロボット200は、胴体部206に照度センサ214を備え、周囲の明るさを検出することができる。なお、外装201は光を通す素材でできているため、外装201で覆われていても、ロボット200は、照度センサ214で周囲の明るさを検出可能である。
また、ロボット200は、ひねりモータ221や上下モータ222などの電源としてのバッテリー(図9参照)と、ワイヤレス給電受信回路255を備えている。ワイヤレス給電受信回路255は、胴体部206に設けられており、バッテリーを充電する際に、ロボット200とは別個に設けられたワイヤレス充電装置(図示せず)から電力を受信する。
なお、本実施形態では加速度センサ212、マイクロフォン213、照度センサ214及びスピーカ231が胴体部206に備えられているが、これらの全て又は一部が頭部204に備えられていてもよい。また、胴体部206に備えられた加速度センサ212、マイクロフォン213、照度センサ214及びスピーカ231に加えて、これらの全て又は一部を頭部204にも備えるようにしてもよい。また、タッチセンサ211は、頭部204及び胴体部206にそれぞれ備えられているが、頭部204又は胴体部206のいずれか片方のみに備えられていてもよい。またこれらはいずれも複数備えられていてもよい。
また、本実施形態では、ロボット200は、筐体207が外装201に覆われているため、頭部204や胴体部206は、ロボット200が置かれている床やテーブル等の載置面に、外装201を介して間接的に接触している。しかし、このような形態には限定されず、頭部204や胴体部206は、直接的に載置面に接触してもよい。例えば、外装201の下の部分(載置面と接触する部分)が存在せずに、筐体207の下の部分(載置面と接触する部分)がむき出しになっていてもよいし、外装201が全く存在せずに、筐体207全体がむき出しになっていてもよい。
次に、ロボット200の機能構成について説明する。ロボット200は、図8に示すように、機器の制御装置100と、センサ部210と、駆動部220と、出力部230と、操作部240と、電源制御部250と、を備える。そして、機器の制御装置100は、処理部110と、記憶部120と、通信部130と、を備える。図8では、機器の制御装置100と、センサ部210、駆動部220、出力部230、操作部240及び電源制御部250とが、バスラインBLを介して接続されているが、これは一例である。機器の制御装置100と、センサ部210、駆動部220、出力部230、操作部240及び電源制御部250とは、USB(Universal Serial Bus)ケーブル等の有線インタフェースや、Bluetooth(登録商標)等の無線インタフェースで接続されていてもよい。また、処理部110と記憶部120や通信部130とは、バスラインBL等を介して接続されていてもよい。
機器の制御装置100は、処理部110及び記憶部120により、ロボット200の動作を制御する。
処理部110は、例えば、CPU(Central Processing Unit)等で構成され、記憶部120に記憶されたプログラムにより、後述する各種処理を実行する。なお、処理部110は、複数の処理を並行して実行するマルチスレッド機能に対応しているため、後述する各種処理を並行に実行することができる。また、処理部110は、クロック機能やタイマー機能も備えており、日時等を計時することができる。
記憶部120は、ROM(Read Only Memory)、フラッシュメモリ、RAM(Random Access Memory)等で構成される。ROMには、処理部110のCPUが実行するプログラム及びプログラムを実行する上で予め必要なデータが、記憶されている。フラッシュメモリは書き込み可能な不揮発性のメモリであり、電源OFF後も保存させておきたいデータが記憶される。RAMには、プログラム実行中に作成されたり変更されたりするデータが記憶される。
通信部130は、無線LAN(Local Area Network)、Bluetooth(登録商標)等に対応した通信モジュールを備え、スマートフォン等の外部装置とデータ通信する。データ通信の内容としては、例えば、後述するアラーム機能やスリープ機能の設定に用いるアラーム設定データやスリープ設定データがある。
センサ部210は、前述したタッチセンサ211、加速度センサ212、マイクロフォン213、及び照度センサ214を備える。処理部110は、バスラインBLを介して、センサ部210が備える各種センサが検出した検出値をロボット200に作用する外部刺激を表す外部刺激データとして取得する。なお、センサ部210は、タッチセンサ211、加速度センサ212、マイクロフォン213、照度センサ214以外のセンサを備えてもよい。センサ部210が備えるセンサの種類を増やすことにより、処理部110が取得できる外部刺激の種類を増やすことができる。
タッチセンサ211は、何らかの物体が接触したことを検出する。タッチセンサ211は、例えば圧力センサや静電容量センサにより構成される。処理部110は、タッチセンサ211からの検出値に基づいて、接触強度や接触時間を取得し、これらの値に基づいて、ユーザによってロボット200が撫でられていることや、叩かれたりしていること等の外部刺激を検出することができる(例えば特開2019-217122号公報を参照)。なお、処理部110は、これらの外部刺激をタッチセンサ211以外のセンサで検出してもよい(例えば特許第6575637号公報を参照)。
加速度センサ212は、ロボット200の胴体部206の前後方向、幅(左右)方向及び上下方向から成る3軸方向の加速度を検出する。加速度センサ212は、ロボット200が静止しているときには重力加速度を検出するので、処理部110は、加速度センサ212が検出した重力加速度に基づいて、ロボット200の現在の姿勢を検出することができる。また、例えばユーザがロボット200を持ち上げたり投げたりした場合には、加速度センサ212は、重力加速度に加えてロボット200の移動に伴う加速度を検出する。したがって、処理部110は、加速度センサ212が検出した検出値から重力加速度の成分を除去することにより、ロボット200の動きを検出することができる。
マイクロフォン213は、ロボット200の周囲の音を検出する。処理部110は、マイクロフォン213が検出した音の成分に基づき、例えばユーザがロボット200に呼びかけていることや、手を叩いていること等を検出することができる。
照度センサ214は、フォトダイオード等の受光素子を備え、周囲の明るさ(照度)を検出する。例えば、処理部110は、照度センサ214で周囲が暗いことを検出したら、ロボット200を疑似的に寝かせる(スリープ制御モードにする)制御を行うことができる。
駆動部220は、ロボット200(自機)の動きを表現するための可動部として、ひねりモータ221及び上下モータ222を備える。駆動部220(ひねりモータ221及び上下モータ222)は、処理部110によって駆動される。ひねりモータ221及び上下モータ222は、サーボモータであり、処理部110から動作時間及び動作角度が指定されて回転を指示されると、指定された動作時間後までに、指定された動作角度の位置まで回転するように動作する。なお、駆動部220は可動部として他の適当なアクチェータ、例えば流体圧モータ等を備えてもよい。処理部110が駆動部220を制御することにより、ロボット200は、例えば頭部204を持ち上げたり(第2回転軸を中心として上方に回転させたり)、横にひねったり(第1回転軸を中心として右方又は左方にひねり回転させたり)するような動作を表現することができる。これらの動作を行うための動作制御データは、後述するモーションテーブル125に記録されており、検出した外部刺激や後述する成長値等に基づいて、ロボット200の動作が制御される。
出力部230は、スピーカ231を備え、処理部110が音のデータを出力部230に入力することにより、スピーカ231から音が出力される。例えば、処理部110がロボット200の鳴き声のデータを出力部230に入力することにより、ロボット200は疑似的な鳴き声を発する。この鳴き声のデータも、モーションテーブル125に記録されており、検出した外部刺激や後述する成長値等に基づいて鳴き声が選択される。なお、スピーカ231で構成される出力部230は、音出力部とも呼ばれる。
また、出力部230として、スピーカ231に代えて、又はスピーカ231に加えて、液晶ディスプレイ等のディスプレイや、LED(Light Emitting Diode)等の発光部を備え、検出した外部刺激や後述する成長値等に基づいた画像をディスプレイに表示したり、LED等を発光させたりしてもよい。
操作部240は、例えば、操作ボタン、ボリュームつまみ等から構成される。操作部240は、ユーザ(所有者や被貸与者)による操作、例えば、電源ON/OFF、出力音のボリューム調整等を受け付けるためのインタフェースである。なお、ロボット200は生き物感をより高めるために、操作部240として電源スイッチ241のみを外装201の内側に備え、それ以外の操作ボタンやボリュームつまみ等を備えなくてもよい。この場合でも、通信部130を介して接続した外部のスマートフォン等を用いてロボット200のボリューム調整等の操作を行うことができる。
電源制御部250は、詳細は後述するが、図9に示すように、サブマイコン251等を備え、ロボット200のバッテリー253の充電、ロボット200の主な機能を実現する主機能部290の電源のON/OFF制御、等の電源制御を行う。なお、主機能部290とは、ロボット200を構成する機能部のうち、電源制御部250を除いた部分であり、処理部110、駆動部220等を含む。ロボット200では、生き物感を出すために、充電ケーブル等を接続せずに、ワイヤレス充電で前記バッテリーが充電される。ワイヤレス充電の方式は任意であるが、本実施形態では電磁誘導方式が用いられる。
ロボット200をワイヤレス充電装置256の上に載せると、胴体部206の底面に設けられたワイヤレス給電受信回路255と外部のワイヤレス充電装置256との間で誘導磁束が発生し、充電が行われる。電磁誘導方式では、充電中にロボット200が移動したりして、ワイヤレス給電受信回路255とワイヤレス充電装置256との距離が離れてしまうと、正常な充電が行えない。このため、充電中はロボット200(駆動部220)の動作を制限する信号(動作制限信号)が、サブマイコン251から、処理部110に送信され、処理部110は、ロボット200の動作を制限するように制御する。この仕組みについても後述する。
図8に戻り、記憶部120に記憶されるデータのうち、本実施形態に特徴的なデータである、感情データ121、感情変化データ122、成長テーブル123、動作内容テーブル124、モーションテーブル125及び成長日数データ126について、順に説明する。
感情データ121は、ロボット200に疑似的な感情を持たせるためのデータであり、感情マップ300上の座標を示すデータ(X,Y)である。感情マップ300は図10に示すように、X軸311として安心度(不安度)の軸、Y軸312として興奮度(無気力度)の軸を持つ2次元の座標系で表される。感情マップ上の原点310(0,0)が通常時の感情を表す。そして、X座標の値(X値)が正でその絶対値が大きくなるほど安心度が高く、Y座標の値(Y値)が正でその絶対値が大きくなるほど興奮度が高い感情を表す。また、X値が負でその絶対値が大きくなるほど不安度が高く、Y値が負でその絶対値が大きくなるほど無気力度が高い感情を表す。
感情データ121は、互いに異なる複数(本実施形態では4つ)の疑似的な感情を表す。本実施形態では、疑似的な感情を表す値のうち、安心度と不安度を1つの軸(X軸)上でまとめて表し、興奮度と無気力度を別の1つの軸(Y軸)上でまとめて表している。したがって、感情データ121は、X値(安心度、不安度)とY値(興奮度、無気力度)の2つの値を持ち、X値とY値とで表される感情マップ300上の点が、ロボット200の疑似的な感情を表す。感情データ121の初期値は(0,0)である。
感情データ121は、ロボット200の疑似的な感情を表すデータである。なお、図10では感情マップ300が2次元の座標系で表されているが、感情マップ300の次元数は任意である。感情マップ300を1次元で規定し、感情データ121として1つの値が設定されるようにしてもよい。また、他の軸を加えて3次元以上の座標系で感情マップ300を規定し、感情データ121として感情マップ300の次元数の個数の値が設定されるようにしてもよい。
本実施形態においては、感情マップ300の初期値としてのサイズは、図10の枠301に示すように、X値もY値も最大値が100、最小値が-100となっている。そして、第1期間の間、ロボット200の疑似的な成長日数が1日増える度に、感情マップ300の最大値、最小値ともに2ずつ拡大されていく。ここで第1期間とは、ロボット200が疑似的に成長する期間であり、ロボット200の疑似的な生誕から例えば50日の期間である。なお、ロボット200の疑似的な生誕とは、ロボット200の工場出荷後のユーザによる初回の起動時である。成長日数が25日になると、図10の枠302に示すように、X値もY値も最大値が150、最小値が-150となる。そして、第1期間(この例では50日)が経過すると、それにより、ロボット200の疑似的な成長が完了したとして、図10の枠303に示すように、X値もY値も最大値が200、最小値が-200となって、感情マップ300のサイズが固定される。
感情データ121の設定可能範囲は、感情マップ300によって規定される。このため、感情マップ300のサイズが拡大するにつれて、設定可能な感情データ121の範囲が拡大する。感情データ121の設定可能範囲が拡大することにより、より豊かな感情表現が可能になるので、ロボット200の疑似的な成長が、感情マップ300のサイズの拡大によって表現されることになる。そして、感情マップ300のサイズは第1期間経過後に固定され、それにより、ロボット200の疑似的な成長が終了する。なお、ロボット200の疑似的な成長の停止条件は、上述の「第1期間が経過したら停止」に限定されず、他の条件を追加してもよい。例えば、「4つの性格値のいずれかが10(最大)になったら停止」としてもよい。この条件で成長を停止させると、4つの性格のうち1つの性格のみが最大となった時点で性格が固定されるため、特定の性格を強く出すことが可能となる。
感情変化データ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値のマイナス方向への変化し易さ)
本実施形態では、一例として、これらの変数の初期値をいずれも10とし、後述する動作制御処理の中の感情変化データを学習する処理により、最大20まで増加するものとしている。この学習処理では、感情データの値が感情マップ300の最大値又は最小値に達したかに基づく条件(外部刺激データに基づく第1条件)に応じて、感情変化データを変化させる。なお、外部刺激データに基づく第1条件としては、上記条件に限らず、感情マップ300のサイズが固定される前に感情変化データを変化(学習)させる条件(例えば、感情データ121で表されるロボット200の疑似的な感情の度合いに関する条件)であれば任意の条件を設定可能である。この学習処理により、感情変化データ122、すなわち感情の変化度合いが変化するので、ロボット200は、ユーザによるロボット200との接し方に応じて、様々な性格を持つことになる。つまり、ロボット200の性格は、ユーザの接し方により、個々に異なって形成されることになる。
そこで、本実施形態では、各感情変化データ122から10を減算することにより、各性格データ(性格値)を導出する。すなわち、安心し易さを示すDXPから10引いた値を性格値(陽気)とし、不安になり易さを示すDXMから10引いた値を性格値(シャイ)とし、興奮し易さを示すDYPから10引いた値を性格値(活発)とし、無気力になり易さを示すDYMから10引いた値を性格値(甘えん坊)とする。これにより、例えば、図11に示すように、性格値(陽気)を軸411に、性格値(活発)を軸412に、性格値(シャイ)を軸413に、性格値(甘えん坊)を軸414に、それぞれプロットすることで、性格値レーダーチャート400を生成することができる。
各性格値の初期値は0であるため、ロボット200の最初の性格は、性格値レーダーチャート400の原点410で表される。そして、ロボット200が成長するにつれて、センサ部210で検出された外部刺激等(ユーザのロボット200への接し方)によって、各性格値が10を上限として変化する。本実施形態のように4つの性格値が0から10まで変化する場合には、11の4乗=14641通りの性格を表現できることになる。
本実施形態では、ロボット200の疑似的な成長度合いを示す成長度合いデータ(成長値)として、これら4つの性格値の中で、最も大きい値を用いる。そして、処理部110は、ロボット200の疑似的な成長につれて(成長値が大きくなるにつれて)、ロボット200の動作内容にバリエーションが生じるように制御する。このために処理部110が用いるデータが成長テーブル123である。
図12に示すように、成長テーブル123には、センサ部210で検出された外部刺激等の動作トリガーに応じてロボット200が行う動作の種類と、成長値に応じて各動作が選択される確率(以下「動作選択確率」という)とが、記録されている。そして、成長値が小さい間は、性格値とは関係なく、動作トリガーに応じて設定される基本動作が選択され、成長値が増加すると、性格値に応じて設定される性格動作が選択されるように、動作選択確率が設定されている。また、成長値が増加するほど、選択されうる基本動作の種類が増加するように、動作選択確率が設定されている。なお、図12では、各動作トリガーに対して選択される性格動作を1つとしているが、基本動作と同様に、性格値の増加に応じて、選択される性格動作の種類を増加させてもよい。
例えば、ロボット200の現在の性格値が、図11に示すように、性格値(陽気)が3、性格値(活発)が8、性格値(シャイ)が5、性格値(甘えん坊)が4であり、マイクロフォン213で大きな音を検出した場合を想定する。この場合、成長値は4つの性格値の中の最大値である8となり、動作トリガーは「大きな音がする」となる。そして、図12に示す成長テーブル123で、動作トリガーが「大きな音がする」で成長値が8の項目を参照すると、動作選択確率は、「基本動作2-0」が20%、「基本動作2-1」が20%、「基本動作2-2」が40%、「性格動作2-0」が20%であることがわかる。
つまり、この場合は、「基本動作2-0」が20%、「基本動作2-1」が20%、「基本動作2-2」が40%、「性格動作2-0」が20%の確率で選択される。そして、「性格動作2-0」が選択された場合は、4つの性格値に応じて、図13に示すような4種類の性格動作のいずれかの選択がさらに行われる。そして、ロボット200はここで選択された動作を実行する。この仕組みは後述する動作制御処理で実現される。なお、性格動作の中から動作を選択する動作モードを第1動作モードといい、基本動作の中から動作を選択する動作モードを第2動作モードという。
後述するが、性格動作は、4つの性格値それぞれの大きさに応じた確率で選択されるため、性格値の値が小さい(例えばほとんどが0)間は選択のバリエーションが少ない。そこで、本実施形態では、4つの性格値の中の最大値を成長値としている。これにより、性格動作として選択される動作のバリエーションが豊富になった時に第1動作モードが選択されるという効果がある。なお、性格値によって選択される動作のバリエーションが豊富になるか否かの判断指標としては、最大値だけでなく、合計値、平均値、最頻値等も使用可能であるので、成長値として、性格値の合計値、平均値、最頻値等を用いるようにしてもよい。
なお、成長テーブル123は、動作トリガー毎に、成長値を引数として各動作種類の動作選択確率を返す関数(成長関数)として定義できればその形態は任意であり、必ずしも図12に示すような表形式のデータである必要はない。
動作内容テーブル124は、図13に示すように、成長テーブル123で規定された各動作種類の具体的な動作内容が記録されたテーブルである。ただし、性格動作については、性格の種類毎に、動作内容が規定される。なお、動作内容テーブル124は必須のデータではない。例えば、成長テーブル123の動作種類の項目に、具体的な動作内容を直接記録する形で成長テーブル123を構成すれば、動作内容テーブル124は不要である。
モーションテーブル125は、図14に示すように、成長テーブル123で規定された各動作種類について、処理部110が、ひねりモータ221や上下モータ222をどのように制御するのかを記録したテーブルである。具体的には、図14に示すように、動作種類毎に、各行に、動作時間(ミリ秒)、当該動作時間後のひねりモータ221の動作角度、当該動作時間後の上下モータ222の動作角度、がそれぞれ記録されている。なお、本実施形態では、各動作種類においてスピーカ231から出力する音声データについても記録されている。
例えば、後述する動作制御処理によって、基本動作2-0が選択された場合、処理部110は、まず100ミリ秒後にひねりモータ221も上下モータ222も角度が0度になるように制御し、その100ミリ秒後に上下モータ222の角度が-24度になるように制御する。そして、その後700ミリ秒間は回転させず、その500ミリ秒後にひねりモータ221の角度は34度、上下モータ222の角度は-24度になるように制御する。そして、その400ミリ秒後にひねりモータ221の角度は-34度になるように制御し、その500ミリ秒後にひねりモータ221も上下モータ222も角度が0度になるように制御して、基本動作2-0の動作を完了する。また、処理部110は、上述したひねりモータ221及び上下モータ222の駆動と並行して、短くピイと鳴く声の音声データにより、スピーカ231から短くピイと鳴く声を再生する。
成長日数データ126は、初期値が1であり、1日経過する度に1ずつ加算されていく。成長日数データ126により、ロボット200の疑似的な成長日数(疑似的な生誕からの日数)が表されることになる。ここでは、成長日数データ126で表される成長日数の期間を、第2期間と呼ぶことにする。
また、図示しないが、記憶部120には、後述する性格補正値調整処理で増減される4つの性格補正値(陽気補正値、活発補正値、シャイ補正値及び甘えん坊補正値)も記憶される。各性格値(性格値(陽気)、性格値(活発)、性格値(シャイ)及び性格値(甘えん坊))は、ロボット200の疑似的な成長が完了すると固定するが、成長完了後も、ユーザのロボット200への接し方に応じて、性格を補正するためのデータ(性格補正データ)が性格補正値である。後述するように、性格補正値は、感情マップ300上で、感情データ121が最も長く存在したエリアがどこであるかに基づく条件(外部刺激データに基づく第2条件)に応じて、設定される。なお、外部刺激データに基づく第2条件としては、上記条件に限らず、感情マップ300のサイズが固定された後の性格を補正する条件(例えば、感情データ121で表されるロボット200の疑似的な感情の発生頻度に関する条件)であれば任意の条件を設定可能である。
次に、図15に示すフローチャートを参照しながら、機器の制御装置100の処理部110が実行する動作制御処理について説明する。動作制御処理は、機器の制御装置100が、センサ部210からの検出値等に基づいて、ロボット200の動作や鳴き声を制御する処理である。ユーザがロボット200の電源を入れると、後述するアラーム制御処理、スリープ制御処理等と並行に、この動作制御処理のスレッドが実行開始される。動作制御処理により、駆動部220や出力部230(音出力部)が制御され、ロボット200の動きが表現されたり、鳴き声等の音が出力されたりする。
まず、処理部110は、感情データ121、感情変化データ122、成長日数データ126、性格補正値等の各種データを設定する(ステップS101)。ロボット200の最初の起動時(工場出荷後のユーザによる初回の起動時)は、これらの値には初期値(感情データ121、感情変化データ122、成長日数データ126、及び性格補正値の初期値はいずれも、値0)が設定されるが、2度目以降の起動時は、前回のロボット制御処理の後述するステップS109で保存されたデータの値が設定される。ただし、感情データ121や性格補正値については、電源を入れるたびに全て0に初期化される仕様としてもよい。
次に、処理部110は、センサ部210で検出される外部刺激があるか否かを判定する(ステップS102)。外部刺激があるなら(ステップS102;Yes)、処理部110は、センサ部210から外部刺激を取得する(ステップS103)。
そして、処理部110は、ステップS103で取得された外部刺激に応じて、感情データ121に加算又は減算する感情変化データ122を取得する(ステップS104)。具体的には、例えば、外部刺激として頭部204のタッチセンサ211により頭部204が撫でられたことを検出すると、ロボット200は疑似的な安心感を得るので、処理部110は、感情データ121のX値に加算する感情変化データ122としてDXPを取得する。
そして、処理部110は、ステップS104で取得された感情変化データ122に応じて感情データ121を設定する(ステップS105)。具体的には、例えば、ステップS104で感情変化データ122としてDXPが取得されていたなら、処理部110は、感情データ121のX値に感情変化データ122のDXPを加算する。ただし、感情変化データ122を加算すると感情データ121の値(X値、Y値)が感情マップ300の最大値を超える場合には、感情データ121の値は感情マップ300の最大値に設定される。また、感情変化データ122を減算すると感情データ121の値が感情マップ300の最小値未満になる場合には、感情データ121の値は感情マップ300の最小値に設定される。
ステップS104及びステップS105において、外部刺激の各々に対して、どのような感情変化データ122が取得されて、感情データ121が設定されるかは任意に設定可能であるが、ここでは、以下に一例を示す。なお、感情データ121のX値及びY値は感情マップ300のサイズによって最大値及び最小値が規定されているため、以下の演算によって感情マップ300の最大値を上回る場合には最大値が、感情マップ300の最小値を下回る場合には最小値が、それぞれ設定される。
頭部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
(これらの外部刺激はマイクロフォン213で検出可能)
例えば、頭部204を撫でられると、ロボット200の疑似的な感情は安心するので、感情データ121のX値に感情変化データ122のDXPが加算される。逆に、頭部204を叩かれると、ロボット200の疑似的な感情は不安になり、感情データ121のX値から感情変化データ122のDXMが減算される。ステップS103で処理部110は、センサ部210が備える複数のセンサにより、互いに異なる種類の複数の外部刺激を取得しているので、これら複数の外部刺激の各々に応じて感情変化データ122が取得され、取得された感情変化データ122に応じて感情データ121が設定されることになる。
そして、処理部110は、ステップS103で取得した外部刺激の情報を動作トリガーとして動作選択処理を実行し(ステップS106)、その後、ステップS108に進む。なお、動作選択処理の詳細は後述するが、動作トリガーとは、ロボット200が何らかの動作を行うきっかけとなった外部刺激等の情報である。
一方、ステップS102で外部刺激がないなら(ステップS102;No)、処理部110は、呼吸動作等の自発的な動作を行うか否かを判定する(ステップS107)。自発的な動作を行うか否かの判定方法は任意だが、本実施形態では、第1基準時間(例えば5秒)毎にステップS107の判定がYesになるものとする。
自発的な動作を行うなら(ステップS107;Yes)、処理部110は、ステップS106に進んで、「第1基準時間経過」を動作トリガーとして動作選択処理を実行し、その後、ステップS108に進む。
自発的な動作を行わないなら(ステップS107;No)、処理部110は、処理を終了するか否かを判定する(ステップS108)。例えば、操作部240が、ユーザによるロボット200の電源OFFの指示を受け付けたら、処理を終了することになる。処理を終了するなら(ステップS108;Yes)、処理部110は、感情データ121、感情変化データ122、成長日数データ126等の各種データを記憶部120の不揮発性メモリ(例えばフラッシュメモリ)に保存し(ステップS109)、動作制御処理を終了する。なお、電源OFF時に各種データを不揮発性メモリに保存する処理については、別途、電源OFF判定スレッドを動作制御処理等の他のスレッドと並行に動作させて行うようにしてもよい。電源OFF判定スレッドでステップS108及びステップS109に相当する処理を行うようにすれば、動作制御処理のステップS108及びステップS109の処理は省略することができる。
処理を終了しないなら(ステップS108;No)、処理部110は、クロック機能により、日付が変わったか否かを判定する(ステップS110)。日付が変わっていないなら(ステップS110;No)、ステップS102に戻る。
日付が変わったなら(ステップS110;Yes)、処理部110は、第1期間中であるか否かを判定する(ステップS111)。第1期間を、ロボット200の疑似的な生誕(例えば購入後のユーザによる初回の起動時)から例えば50日の期間とすると、処理部110は、成長日数データ126が50以下なら第1期間中であると判定する。第1期間中でないなら(ステップS111;No)、処理部110は、性格補正値調整処理を実行し(ステップS112)、ステップS115に進む。なお、性格補正値調整処理の詳細については後述する。
第1期間中なら(ステップS111;Yes)、処理部110は、感情変化データ122の学習を行う(ステップS113)。具体的には、その日のステップS105において、感情データ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を更新する。この更新を、感情変化データ122の学習ともいう。
ただし、感情変化データ122の各値が大きくなりすぎると、感情データ121の1回の変化量が大きくなりすぎるので、感情変化データ122の各値は例えば20を最大値とし、それ以下に制限する。また、ここでは、感情変化データ122のいずれに対しても1を加算することとしたが、加算する値は1に限定されない。例えば、感情データ121の各値が感情マップ300の最大値又は最小値に設定された回数をカウントして、その回数が多い場合には、感情変化データ122に加算する数値を増やすようにしてもよい。
ステップS113での感情変化データ122の学習は、ステップS105で感情データ121が感情マップ300の最大値又は最小値に設定されるか否かに基づく。そして、ステップS105で感情データ121が感情マップ300の最大値又は最小値に設定されるか否かは、ステップS103で取得された外部刺激に基づく。そして、ステップS103では、センサ部210が備える複数のセンサにより、互いに異なる種類の複数の外部刺激が取得されるので、これら複数の外部刺激の各々に応じて、感情変化データ122の各々が学習されることになる。
例えば、頭部204のみが何度も撫でられると感情変化データ122のDXPのみが増加し、他の感情変化データ122は変化しないので、ロボット200は安心しやすい性格になる。また、頭部204のみが何度も叩かれると感情変化データ122のDXMのみが増加し、他の感情変化データ122は変化しないので、ロボット200は不安になりやすい性格になる。このように、処理部110は、外部刺激の各々に応じて、感情変化データ122を互いに異ならせるように学習する。本実施形態では、感情変化データ122から性格値が算出され、性格値の最大値が成長値となるため、ユーザのロボット200への接し方に基づいてロボット200が疑似的に成長する効果を得ることができる。
なお、本実施形態では、その日1日の期間でステップS105において、感情データ121のX値やY値が1度でも感情マップ300の最大値や最小値に達したら、感情変化データ122を学習させている。しかし、感情変化データ122を学習させる条件はこれに限らない。例えば、感情データ121のX値やY値が1度でも所定の値(例えば、感情マップ300の最大値の0.5倍の値や最小値の0.5倍の値)に達したら感情変化データ122を学習させてもよい。また、期間に関しても、その日1日の期間に限らず、半日や1週間等の他の期間で、感情データ121のX値やY値が1度でも所定の値に達したら、感情変化データ122を学習させるようにしてもよい。また、1日等の一定の期間ではなく、外部刺激の取得回数が所定回数(例えば50回)に達するまでの期間で、感情データ121のX値やY値が1度でも所定の値に達したら、感情変化データ122を学習させるようにしてもよい。
図15に戻り、処理部110は、感情マップ300を最大値、最小値ともに、2だけ拡大する(ステップS114)。なお、ここでは、感情マップ300を最大値、最小値ともに、2だけ拡大することとしたが、この拡大する数値「2」はあくまでも一例であり、3以上拡大してもよいし、1だけ拡大してもよい。また感情マップ300の軸毎、また最大値と最小値とで、拡大する数値が同じでなくてもよい。そして、処理部110は、成長日数データ126に1を加算し、感情データをX値、Y値ともに0に初期化して(ステップS115)、ステップS102に戻る。
なお、図15では、感情変化データの学習及び感情マップの拡大は、ステップS110で日付が変わったのを判定してから行われるものとしているが、基準時刻(例えば午後9時)になったことを判定してから行われるようにしてもよい。また、ステップS110での判定は、実際の日付で判定するのではなく、ロボット200が電源ONになっている時間を処理部110のタイマー機能で累計した値に基づいて判定してもよい。例えば、電源ONの累計時間が24の倍数の時間になる毎に、ロボット200が1日成長したとみなして、感情変化データの学習及び感情マップの拡大が行われるようにしてもよい。また、ロボット200を放置しがちなユーザを考慮して(放置された場合にはロボット200の成長が遅くなるように)、外部刺激の取得回数に基づいて(例えば、取得回数が100回になる毎に1日成長したとみなす)判定をしてもよい。
次に、上述の動作制御処理のステップS106で実行される動作選択処理について、図16を参照して説明する。
まず、処理部110は、第1期間中であるか否かを判定する(ステップS200)。第1期間中なら(ステップS200;Yes)、処理部110は、ステップS113で学習された感情変化データ122から性格値を算出する(ステップS201)。具体的には、以下のように4つの性格値を算出する。感情変化データ122はそれぞれ初期値が10で最大20まで増加するため、ここでは10を減算することによって値の範囲を0以上10以下にしている。
性格値(陽気)=DXP-10
性格値(シャイ)=DXM-10
性格値(活発)=DYP-10
性格値(甘えん坊)=DYM-10
一方、第1期間中でないなら(ステップS200;No)、処理部110は、ステップS113で学習された感情変化データ122とステップS112で調整された性格補正値とに基づいて、補正した性格値を算出する(ステップS209)。具体的には、以下のように4つの性格値を算出する。感情変化データ122はそれぞれ初期値が10で最大20まで増加するため、ここでは10を減算することによって値の範囲を0以上10以下にしてから各補正値を加算している。ただし、補正値を加算した値が負になったら0に、10を超えた場合は10に、それぞれ補正し、各性格値の値が0以上10以下になるようにする。
性格値(陽気)=DXP-10+陽気補正値
性格値(シャイ)=DXM-10+シャイ補正値
性格値(活発)=DYP-10+活発補正値
性格値(甘えん坊)=DYM-10+甘えん坊補正値
次に、処理部110は、これらの性格値の中で最も大きい数値を、成長値として算出する(ステップS202)。そして、処理部110は、成長テーブル123を参照して、動作選択処理を実行する際に与えられた動作トリガーと、ステップS202で算出した成長値と、に対応する各動作種類の動作選択確率を取得する(ステップS203)。
次に、処理部110は、ステップS203で取得した各動作種類の動作選択確率に基づいて、乱数を用いて動作種類を選択する(ステップS204)。例えば、算出した成長値が8、動作トリガーは「大きな音がする」の場合、20%の確率で「基本動作2-0」が選択され、20%の確率で「基本動作2-1」が選択され、40%の確率で「基本動作2-2」が選択され、20%の確率で「性格動作2-0」が選択される(図12参照)。
そして、処理部110は、ステップS204で性格動作が選択されたか否かを判定する(ステップS205)。性格動作が選択されておらず、すなわち、基本動作が選択されていれば(ステップS205;No)、ステップS208に進む。
性格動作が選択されていたら(ステップS205;Yes)、処理部110は、各性格値の大きさに基づいて、各性格の選択確率を取得する(ステップS206)。具体的には、各性格について、その性格に対応する性格値を4つの性格値の合計値で割った値をその性格の選択確率とする。
そして、処理部110は、ステップS206で取得した各性格の選択確率に基づき、乱数を用いて性格動作を選択する(ステップS207)。例えば、性格値(陽気)が3、性格値(活発)が8、性格値(シャイ)が5、性格値(甘えん坊)が4の場合、これらの合計値は3+8+5+4=20である。したがって、この場合、「陽気」の性格動作が3/20=15%の確率で、「活発」の性格動作が8/20=40%の確率で、「シャイ」の性格動作が5/20=25%の確率で、「甘えん坊」の性格動作が4/20=20%の確率で、それぞれ選択されることになる。
次に、処理部110は、ステップS204又はS207で選択された動作を実行し(ステップS208)、動作選択処理を終了して、動作制御処理のステップS108に進む。
次に、上述の動作制御処理のステップS112で実行される性格補正値調整処理について、図17を参照して説明する。
まず、処理部110は、その1日の間における感情データ121の変化(感情マップ300上での移動)の履歴に基づき、感情マップ300上で、その1日の間(図15のステップS110での判定がNoからYesに切り替わるまでの間)に感情データ121が最も長く存在したエリア(以下「最長存在エリア」という)を算出する(ステップS301)。
そして、処理部110は、ステップS301で算出した最長存在エリアが図10に示す感情マップ300上の安心エリア(具体的にはX値が100以上のエリア)であるか否かを判定する(ステップS302)。最長存在エリアが感情マップ300上の安心エリアであれば(ステップS302;Yes)、処理部110は、性格補正値のうちの陽気補正値に1を加算し、シャイ補正値から1を減算し(ステップS303)、ステップS304に進む。
最長存在エリアが感情マップ300上の安心エリアでなければ(ステップS302;No)、処理部110は、最長存在エリアが感情マップ300上の興奮エリア(具体的にはY値が100以上のエリア)であるか否かを判定する(ステップS304)。最長存在エリアが感情マップ300上の興奮エリアであれば(ステップS304;Yes)、処理部110は、性格補正値のうちの活発補正値に1を加算し、甘えん坊補正値から1を減算し(ステップS305)、ステップS306に進む。
最長存在エリアが感情マップ300上の興奮エリアでなければ(ステップS304;No)、処理部110は、最長存在エリアが感情マップ300上の不安エリア(具体的にはX値が-100以下のエリア)であるか否かを判定する(ステップS306)。最長存在エリアが感情マップ300上の不安エリアであれば(ステップS306;Yes)、処理部110は、性格補正値のうちのシャイ補正値に1を加算し、陽気補正値から1を減算し(ステップS307)、ステップS308に進む。
最長存在エリアが感情マップ300上の不安エリアでなければ(ステップS306;No)、処理部110は、最長存在エリアが感情マップ300上の無気力エリア(具体的にはX値が-100以下のエリア)であるか否かを判定する(ステップS308)。最長存在エリアが感情マップ300上の無気力エリアであれば(ステップS308;Yes)、処理部110は、性格補正値のうちの甘えん坊補正値に1を加算し、活発補正値から1を減算し(ステップS309)、ステップS310に進む。
最長存在エリアが感情マップ300上の無気力エリアでなければ(ステップS308;No)、処理部110は、最長存在エリアが感情マップ300上の中央エリア(具体的にはX値及びY値ともにその絶対値が100未満のエリア)であるか否かを判定する(ステップS310)。最長存在エリアが感情マップ300上の中央エリアであれば(ステップS310;Yes)、処理部110は、4つの性格補正値のすべてについて、その絶対値を1減少させ(ステップS311)、ステップS312に進む。
最長存在エリアが感情マップ300上の中央エリアでなければ(ステップS310;No)、処理部110は、4つの性格補正値の範囲を限定する(ステップS312)。具体的には、-5よりも小さくなった性格補正値は-5とし、+5よりも大きくなった性格補正値は+5とする。そして、処理部110は、性格補正値調整処理を終了し、処理を動作制御処理のステップS115に進める。
上述の動作制御処理により、ロボット200の疑似的な性格について、第1期間中はステップS113及びステップS201によって基本的な性格(基本性格データ)が設定され、第1期間経過後にはステップS112及びステップS209によって基本的な性格を変化させることなく性格値を補正することができる。
第1期間中の性格は、感情変化データ122、すなわち感情マップ300上での感情データ121の移動速度に対応している。つまり、感情の変化の速度を性格に対応付けているため、性格の表現方法として極めて自然である。また、ステップS113において、感情変化データ122は増加方向にしか変化しないので、性格値は過去の情報(第1期間中にユーザから受けた外部刺激等)を反映していると考えることができる。そして、ステップS113において、4つの感情変化データ122全てが変化し得るので、複数の性格が組み合わさった性格も構築され得る。
また、第1期間経過後は、感情変化データ122は固定されるので、基本的な性格は固定される。そして、ステップS112で設定される補正値は、その日の最長存在エリアに応じて1の増減しかしないため、補正値による性格値の変化は、第1期間中の変化に比べて緩やかな変化となる。また、ロボット200が放置されると最長存在エリアは中央エリアになるため補正値は0に近づき、基本的な性格に戻る。
なお、図15では性格補正値調整処理(ステップS112)は、ステップS110で日付が変わったことを判定してから、すなわち、1日の期間が経過する度に行われるものとしている。しかし、この期間は1日に限定されず、半日や1週間等の他の期間が経過する度に性格補正値調整処理が行われるようにしてもよい。また、1日等の一定の期間ではなく、外部刺激の取得回数が所定回数(例えば50回)に達する度に性格補正値調整処理が行われるようにしてもよい。
また、上述の性格補正値調整処理(図17)では、この期間中における感情データ121の感情マップ300上での最長存在エリアに基づいて性格補正値を調整しているが、調整方法はこれに限定されない。例えば、感情マップ300上の複数のエリアの各々に感情データ121が存在した回数を単位時間毎にカウントしておき、この回数が所定回数に達したら、そのエリアに基づいて性格補正値を調整するようにしてもよい。
また、上述の動作制御処理ではステップS110及びS111で、成長日数データ126が第1期間中であるという条件が成立するか否かによって、感情変化データ122を学習(基本性格データを変更設定)するか否かを切り替えている。しかし、この切り替えを行う条件は、成長日数データ126が第1期間中という条件に限らず、ロボット200の疑似的な成長度合いに関連する所定条件が成立しているか否かによって切り替えればよい。
例えば、この所定条件として、「成長日数データ126が所定の値以上」という条件に代えて、又はこの条件とともに(OR条件で)、「ロボット200の疑似的な成長度合いを表す成長度合いデータとして、4つの性格値の中で、最も大きな値が所定の値以上」という条件を用いてもよい。また、この成長度合いデータは、日数に応じて設定してもよいし、外部刺激を検出した回数に応じて設定してもよい、性格値の値に応じて設定してもよいし、これらを組み合わせた値(例えばこれらの和、平均値等)に応じて設定してもよい。
なお、上述の動作選択処理において、ロボット200の動作を選択する際に感情データ121を参照して、動作の選択に感情データ121の値を反映させるようにしてもよい。例えば、成長テーブル123を感情データ121の値に応じて複数用意して感情表現を豊かに行う動作の種類を設定しておき、その時点の感情データ121の値に対応した成長テーブル123を用いて動作を選択したり、モーションテーブル125に記録されている各動作の動作選択確率の値を感情データ121の値に応じて調整したりしてもよい。これにより、ロボット200は、より現在の感情を反映した動作を行うことができるようになる。
また、図15のステップS107での判定がYesとなった場合には、ステップS106の動作選択処理において、自発的な動作として呼吸動作や性格に伴う動作が行われるが、その際には、感情データ121のX値及びY値に応じた動作が行われるようにしてもよい。
また、感情データ121のY値は、正の方向が興奮度に、負の方向が無気力度に対応するので、ロボット200が出力する鳴き声の音量をY値に応じて変更してもよい。すなわち、処理部110は、感情データ121のY値が正の値で大きいほどスピーカ231から出力する鳴き声の音量を上げ、Y値が負の値で小さいほどスピーカ231から出力する鳴き声の音量を下げるようにしてもよい。
また、成長テーブル123は、ロボット200の用途(例えば、幼児向けの情操教育用、お年寄り向けの対話用等)によって、複数のバリエーションが用意されていてもよい。また、ロボット200の用途を変更したい場合等のために、通信部130を介して成長テーブル123を外部のサーバ等からダウンロードできるようになっていてもよい。
また、上述の動作選択処理では、4つの性格値の中で最も大きい値を成長値として用いたが、成長値はこれに限定されない。例えば、成長日数データ126に基づいて成長値を設定してもよい(例えば、成長日数データ126を所定の値(例えば10)で割って小数点以下を切り捨てた値を成長値として用いる等)。ユーザに放置されたロボット200は、性格値の値が小さいままであることが多く、性格値の最大値を成長値とした場合には、性格動作が選択されない場合もあり得る。このような場合でも、成長日数データ126に基づいて成長値を設定すれば、ユーザによるお世話の頻度には関係なく、成長日数に応じて性格動作が選択されるようになる。また、性格値と成長日数データ126との両方に基づいて成長値を設定してもよい(例えば、性格値の中で最も大きい値と成長日数データ126との和を所定の値で割って小数点以下を切り捨てた値を成長値として用いる等)。
また、上述の実施形態では、感情変化データ122に基づいて性格値を設定したが、性格値の設定方法は、この方法に限定されない。例えば、性格値を感情変化データ122に基づかずに、外部刺激データから直接的に設定してもよい。例えば、撫でられたら性格値(活発)を増加させ、叩かれたら性格値(シャイ)を減少させる等の方法が考えられる。また、性格値を感情データ121に基づいて設定してもよい。例えば、感情データ121のX値及びY値をそれぞれ1/10にした値を性格値にする等の方法が考えられる。
以上説明した動作制御処理によれば、成長日数データ126や性格値のようなロボット200の疑似的な成長度合いを示す成長度合いデータに基づいて、ロボット200の成長度合いに関する所定の条件(例えば成長日数データ126で表される成長日数が第1期間の日数を超えているという条件)が成立しているか否を判定し(図15のステップS111及び図16のステップS200)、外部からロボット200に作用する外部刺激を表す外部刺激データを取得し(図15のステップS103)、所定の条件が成立していない場合に、外部刺激データに基づく第1条件(感情変化データ122を変化させるか否かを判定する条件)に応じて基本性格データとしての感情変化データ122を学習させることによって(図15のステップS113)、感情変化データ122から算出した性格値を変更設定し(図16のステップS201)、所定の条件が成立している場合に、外部刺激データに基づく、第1条件とは異なる第2条件(感情マップ300のサイズが固定された後の性格を補正するか否かを判定する条件)に応じて性格補正値を調整し(図15のステップS112)、調整された性格補正値で基本性格データとしての感情変化データ122を補正して性格データとしての性格値を求め(図16のステップS209)、所定条件が成立していない場合には基本性格データとしての感情変化データ122から算出した性格値に応じて、所定条件が成立している場合には補正して求めた性格値に応じて、ロボット200の動作が制御される(図16のステップS202~S208)。これにより、ロボット200の疑似的な成長度合いに応じて、ロボット200の動作を適切に制御することができる。
また、処理部110は、外部刺激データに基づく第1条件に応じて性格値を設定するので、第1条件とは無関係に外部刺激データに応じて性格値を設定する場合と比較して、性格値をより柔軟に設定することができる。さらに、所定の条件が成立している場合には外部刺激データに基づく(第1条件とは異なる)第2条件に応じて性格値を設定するため、外部刺激データ基づく第1条件のみに応じて性格値を設定する場合と比較して、性格値をさらにきめ細かく設定することができる。
また、処理部110は、基本性格データを変化させずに性格値を補正するので、感情変化データ122(基本的な性格)が固定された後も、その後のユーザのロボット200への接し方に基づいて、性格補正値が変化し、性格補正値によって補正された性格値に基づいてロボット200は動作する。したがって、ロボット200は、基本的な性格の設定が完了した後も、ユーザの接し方に応じて多様な動作を行うことができる。また、ユーザがロボット200を放置すれば、感情マップ300上での最長存在エリアは中央エリアになり、性格補正値は0に戻っていくため、ロボット200は、成長後の元の性格を反映した動作を行うことができる。
また、感情変化データ122は感情データ121で表されるロボット200の疑似的な感情の度合い(例えば、感情データ121が感情マップ300の最大値又は最小値に設定されたか否か)に応じて学習されるので、外部刺激データに基づく第1条件を感情データ121で表されるロボット200の疑似的な感情の度合いに関する条件とすることにより、所定の条件が成立していない場合には、感情の変化のし易さに応じて性格値を設定することが可能になる。
また、外部刺激データに基づく第2条件を感情データ121で表されるロボット200の疑似的な感情の発生頻度に関する条件とすることにより、所定の条件が成立している場合には、疑似的な感情の発生頻度(例えば、最長存在エリア)に応じて、性格値を補正することが可能になる。
また、処理部110は、所定の条件が成立している場合には(図15のステップS111;No)、基本性格データを固定し(図15のステップS113は実行されない)、外部刺激データに基づく第2条件に応じて基本性格データを補正する性格補正値を変更し(図15のステップS112)、基本性格データを性格補正値で補正して求めた性格データ(図16のステップS209)に応じてロボット200の動作を制御する(図16のステップS202~S208)。したがって、処理部110は、所定の条件が成立している場合には基本的な性格を固定するので、ロボットに個性(固有の性格)を持たせることができる。そして、処理部110は、基本的な性格を変化させることなく性格値を補正し、補正された性格値に基づいてロボット200を制御するので、ユーザはロボット200の基本的な性格の設定が完了した後も、接し方に応じてロボット200の反応が変化する様を楽しむことができる。
また、処理部110は、所定の条件が成立していない場合には(図15のステップS111;Yes)、外部刺激データに基づく第1条件に応じて感情変化データ122を学習することによって感情変化データ122を変更設定する(図15のステップS113)。したがって、処理部110は、所定の条件が成立していない場合には、ユーザによるロボット200への接し方に応じて、ロボット200の基本的な性格を設定することができる。
また、ロボット200の成長度合いに関する所定の条件を、「成長日数を表すデータである成長日数データ126が第1期間(例えば50日)を超えた」という条件とすることにより、ロボット200の疑似的な成長は、第1期間(例えば50日間)の間だけに限定され、その後の感情変化データ122(性格)は固定されるので、他の普通の機器のようにリセットをすることができず、ユーザにあたかも本当に生きているペットに接しているかのような感覚を生じさせることができる。
また、ロボット200の成長度合いに関する所定の条件を、「外部刺激データを取得した回数が所定回数(例えば5000回)を超えた」という条件とすることにより、ロボット200の疑似的な成長の速度を適切にコントロールすることができるようになる。例えば、ユーザがロボット200を頻繁に世話すると、ロボット200の疑似的な成長速度は速くなり、ユーザがロボット200を放置すると、ロボット200の疑似的な成長速度は遅くなる。
また、ロボット200の成長度合いに関する所定の条件を、「複数の性格値の中で最も大きい値が所定の値(例えば10)以上」という条件とすることにより、ロボット200の疑似的な性格を、最も早く最大値に到達した性格値を強く反映した性格にすることができる。
また、感情データ121を変化させる感情変化データ122を外部刺激に応じて学習することによって、ロボット200の個々が外部刺激に応じて異なる感情の変化を表すようになる結果、ロボット200の個々に疑似的な性格(性格値)を持たせることができる。また、感情変化データ122から性格が導出されるため、感情変化データ122をコピーすることによって、同一の性格を持つクローンロボットを生成することも可能になる。例えば、感情変化データ122のバックアップデータを保存しておけば、ロボット200が故障してしまっても、バックアップデータを復元することによって、同一の性格を持つロボット200を再生することができる。
また、疑似的な感情は複数の感情データ(感情データ121のX,Y)で表され、疑似的な性格は複数の感情変化データ(感情変化データ122のDXP,DXM,DYP,DYM)で表されるので、複雑な感情及び性格を表現することができる。
そして、この疑似的な性格を導出するための感情変化データ122は、センサ部210が備える複数のセンサにより取得された互いに異なる種類の複数の外部刺激の各々に応じて学習されるので、ユーザのロボット200への接し方によって、多種多様な疑似的な性格を生成することができる。
そして、性格値に基づいて算出される成長値が増加するほど、選択されうる動作のバリエーションが豊かになるので、ロボット200が疑似的に成長する(成長値が増加する)ことによって、より豊かな動作を表現することができるようになる。また、ロボット200は、成長が進んだら成長後の動作のみをするわけではなく、成長テーブル123で規定された動作選択確率に応じて以前から行われていた動作の全てから動作が選択され得る。したがって、ユーザはロボット200の成長後も、購入当初の頃の動作を時々見ることができ、より愛情を感じることができるようになる。
次に、ロボット200が備えるスリープ機能、アラーム機能、添い寝機能について、順に説明する。
ロボット200は、バッテリーを電源として動作しているため、省エネ制御が必要であるが、ペットのような生き物感を出すためには、単に動作停止するのではなく、あたかも寝ているかのように見える制御を行った方がよい。以下、ロボット200が寝ているかのように見えるようにロボット200を制御する制御モードをスリープ制御モードと呼ぶ。スリープ制御モードにより、ロボット200が寝ているかのように見える機能としてスリープ機能が実現される。ロボット200は、周囲が暗くなる等の何らかのスリープ条件が満たされると、図15に示す動作制御処理のスレッドを停止させることによってスリープ状態に移行し、消費電力を抑制する。そして、その後特定の外部刺激を取得すると(又はアラーム時刻になると)、停止していた動作制御処理のスレッドを再開して通常状態に移行する。なお、通常状態とは、動作制御処理のスレッド等、ロボット200において通常の動作に必要なすべてのスレッドが動作している状態であり、定期的に呼吸動作を行ったり、外部刺激に反応する動作を行ったりする状態をいう。
基本的には、ロボット200は、照度センサによって周囲が暗くなったという条件(第2スリープ条件)が満たされたことを検知すると、消費電力(特に駆動部220や出力部230が消費する消費エネルギー)を抑制するスリープ制御モードに入る(通常状態からスリープ状態に移行する)。そして、確実な省エネを実現するために、ロボット200は、スリープ制御モードに入ると、その後周囲が明るくなってもスリープ状態から通常状態に移行しない。
本実施形態の通常のスリープ制御モードでのスリープ状態においては、ユーザが、ロボット200を、頭部204を上にして抱っこしたり、撫でたり、大きな声で呼んだりすると、ロボット200はスリープ制御モードを解除して、スリープ状態から通常状態に移行する。なお、通常のスリープ制御モードを解除する外部刺激(ここでは、「頭部204を上にして立てられた」、「撫でられた」又は「大きな声が聞こえた」という外部刺激)を通常刺激とも呼び、通常のスリープ状態を第2スリープ状態とも呼ぶ。
しかし、例えばロボット200のバッテリーをしっかり充電したい場合や、ユーザがロボット200と一緒に外出したりする場合等、基本的にはスリープ状態から通常状態に移行して欲しくない状況も発生しうる。このような状況のために、ロボット200は、通常状態に移行しにくいスリープ制御モード(以下「ハードスリープ制御モード」という)も備える。
本実施形態では、第1スリープ条件が満たされた場合に、ロボット200はハードスリープ制御モードに入る(通常状態からハードスリープ状態に移行する)。第1スリープ条件は、以下の2つの条件のいずれかが成立している場合に、成立する。
(1)充電中に周囲が暗くなった。
(2)ロボット200がユーザにより立たされている状態(頭部204を上にして保持された状態)で周囲が暗くなった。
ただし、実際には周囲が暗くなくても、充電中又はユーザがロボット200を立てた状態で照度センサ214を手で隠す等すれば、照度センサ214で検出される照度が低下するため、ロボット200は、第1スリープ条件が満たされたと判断して、ハードスリープ制御モードに入る。
ハードスリープ制御モードでは、ユーザがロボット200を撫でたり大きな声で呼びかけたりしても、ロボット200は通常状態に移行しない。ただし、生き物感を出すために、処理部110は、予め定められた特定外部刺激(本実施形態では「撫でられた」という外部刺激)を検出したら、一時的に準スリープ状態に移行して、駆動部220や出力部230を制御し、その後またハードスリープ状態に戻ることもできるようにしている。このため、ハードスリープ制御モードには、複数のレベル(以下「スリープレベル」という)が用意される。なお、準スリープ状態では、通常状態の場合よりも消費電力が抑制されるように、駆動部220や出力部230を制御する(本実施形態では、寝息の音を出したり、呼吸動作をさせたりする)第1抑制モードを実行する。また、ハードスリープ状態では、準スリープ状態の場合よりもさらに消費電力が抑制されるように、駆動部220や出力部230を制御する(本実施形態では、駆動部220を静止させ、出力部230からは何も出力させない)第2抑制モードを実行する。
スリープレベル1は、生き物感はなくなるが、消費電力を最も抑制できる制御モードであり、ロボット200は、ハードスリープ制御モードが解除されるまで全く動作しない。
スリープレベル2は、特定外部刺激を受けたら、駆動部220は動作させずに、音のみで生き物感を出すモードである。本実施形態では、ユーザに撫でられると、ロボット200は準スリープ状態に移行して、所定の時間(例えば5秒間)寝息の音をスピーカ231から出力し、その後またハードスリープ状態に戻る。なお、準スリープ状態とは、ハードスリープ制御モードにおいて、ロボット200が生き物感を出すために、第1抑制モードを実行する(一時的に動いたり音を出したりする)状態をいう。準スリープ状態(第1抑制モード実行中)では一時的に動いたり音を出したりするものの、図15に示す動作制御処理のスレッドを停止させたままにして、電力を消費するモータの連続駆動や、大きな動き、大きな音の出力等は実行しないため、外部刺激に応じた動作や自発的な動作が抑えられ、通常状態よりも駆動部220や出力部230が消費する消費エネルギーを抑制することができる。
スリープレベル3は、特定外部刺激を受けたら、駆動部220を動作させて、より生き物感を出すモードである。本実施形態では、ユーザに撫でられると、ロボット200は、所定の時間(例えば5秒間)準スリープ状態に移行して、駆動部220を駆動して、呼吸動作を行い、その後またハードスリープ状態に戻る。
このように、ロボット200は、消費電力を抑制するハードスリープ制御モードにおいても、スリープレベルが2又は3のときには、ユーザに撫でられるといったような特定外部刺激(第2刺激ともいう)を取得すると、準スリープ状態に移行し、寝息を立てたり、呼吸の動作をしたりするため、ユーザは、ロボット200を本物の生き物のように感じることができる。そして、準スリープ状態が所定の時間継続したときに、準スリープ状態からハードスリープ状態に戻るため、消費電量を抑制する状態を継続することができる。なお、本実施形態では、準スリープ状態で出力する音は、寝息の音としたが、呼吸の音等、他の音を出力してもよい。また準スリープ状態で、呼吸動作に加えて、寝息や呼吸の音を出力してもよい。
なお、ハードスリープ制御モードを解除する方法は、任意の方法を設定可能であるが、本実施形態では、ユーザがロボット200を立てた状態で保持する(頭部204を上にした状態で保持する)と、ロボット200はハードスリープ制御モードを解除して通常状態に移行する。なお、ハードスリープ制御モードを解除する外部刺激(ここでは「頭部204を上にして立てられた」という外部刺激)を第1刺激とも呼び、ハードスリープ状態を第1スリープ状態とも呼ぶ。
そして、ハードスリープ制御モードでは、処理部110は、上述の特定外部刺激も第1刺激も検出されていない間は、上述の第1抑制モードよりもバッテリーの消費電力を抑制させるように駆動部220や出力部230を制御する(本実施形態では、全く動かず、音も出さない)第2抑制モードを実行する。なお、第2抑制モードは、完全に停止することに限定されるわけではなく、第1抑制モードを実行している場合よりもバッテリーの消費電力を抑制できる動作や音の出力を行ってもよい。ロボット200は、第1抑制モードによって特定外部刺激に応じた動作を表現できるため、生き物感をより向上させることができる。また、ロボット200は、第2抑制モードによって消費エネルギーをより抑制することができる。
次に、ロボット200のアラーム機能及び添い寝機能について説明する。ロボット200は図1に示すように、ぬいぐるみのような外観をしているので、ユーザは、ロボット200を抱きながら、ロボット200と一緒に眠ることもできる。
この場合、ロボット200は、音を出さなくても、駆動部220を動かしてユーザを起こすことが可能である。通常の目覚まし時計のアラーム音は、ユーザを不快にさせることが多いが、一緒に寝ているロボット200がもぞもぞと動くことによって、ユーザを起こすのであれば、それほど不快に感じないユーザが多いと考えられる。
ロボット200は、このようなアラーム機能を提供する。しかし、ユーザが寝ている間にロボット200を無意識に撫でたりした場合にロボット200が動いてしまうと、ユーザを起こしてしまいかねない。そこで、ロボット200がユーザと添い寝をしている間は、ロボット200の動作を停止させる機能が添い寝機能である。ただし、本実施形態では、単にロボット200の動作を停止させるのではなく、ロボット200の駆動部220や出力部230が消費する消費エネルギーを抑制する抑制モード(本実施形態ではハードスリープ制御モード)を実行することによって、添い寝機能を実現する。これにより、寝ている間にユーザを起こさないようにすることと、消費電力の抑制とを両立させることができる。
ロボット200は、表示画面等を備えていないため、アラーム機能や添い寝機能の設定は、ロボット200の通信部130を介して接続したスマートフォンのアプリケーションプログラムを用いて、ユーザによって行われる。このスマートフォンのアプリケーションプログラムにおけるアラーム機能及び添い寝機能の設定画面の一例を図18に示す。
図18に示すように、ユーザは、スマートフォンの画面501から、アラーム時刻、曜日毎のアラームのON/OFF、アラーム時のロボット200の動きの強弱、アラーム時のロボット200の鳴き声のON/OFF、スヌーズの回数(0回ならスヌーズOFF)、添い寝モードレベル(ハードスリープ制御モードのレベル(スリープレベル)に相当)、添い寝開始時刻(添い寝機能を開始する時刻。睡眠開始時刻とも言う。)等を入力し、これらをロボット200に送信することによって、ロボット200にアラーム機能や添い寝機能の各種設定値を入力することができる。
なお、図18では、これらの設定データを1つの画面501で設定する例を示しているが、これらのうち、アラーム時刻、曜日ON/OFF、アラーム動作強弱、鳴き声ON/OFF及びスヌーズ回数は、アラーム機能に関する設定値なので、アラーム設定データという。また、添い寝モードレベル及び添い寝開始時刻は、添い寝機能に関する設定値なので、添い寝設定データという。スマートフォンのアプリケーションプログラムにおいて、アラーム設定データの設定画面と、添い寝設定データの設定画面とを、別の画面とするように画面を設計してもよい。なお、アラーム動作とは、アラーム時刻(アラームが設定された時刻)になると、ロボット200が駆動部220によってもぞもぞと動いたり、スピーカ231で鳴き声を発したりする動作のことである。
次に、図19に示すフローチャートを参照しながら、ロボット200のアラーム機能を実現するアラーム制御処理について説明する。ユーザがロボット200の電源を入れると、上述の動作制御処理、後述するスリープ制御処理等と並行に、このアラーム制御処理が開始される。
まず、処理部110は、アラーム時刻等、アラーム機能に関する各種パラメータ(アラームパラメータ)を初期化する(ステップS401)。なお、アラームパラメータを記憶部120のフラッシュメモリに記憶させておくことで、ロボット200の電源を入れる度にこれらの値が初期化されないようにしてもよい。
次に処理部110は、通信部130を介してスマートフォンからアラーム設定データを受信したか否かを判定する(ステップS402)。アラーム設定データが受信されたら(ステップS402;Yes)、処理部110は、受信したアラーム設定データに基づいてアラームパラメータを設定し(ステップS403)、ステップS404に進む。
アラーム設定データが受信されていなければ(ステップS402;No)、処理部110は、アラームパラメータが設定済みであるか否かを判定する(ステップS404)。アラームパラメータが設定済みでなければ(ステップS404;No)、ステップS402に戻る。
アラームパラメータが設定済みなら(ステップS404;Yes)、処理部110は、クロック機能により、現在時刻がアラーム時刻であり本日の曜日がアラームONと設定されているか否かを判定する(ステップS405)。現在時刻がアラーム時刻でないか、又は本日の曜日がアラームONに設定されていなければ(ステップS405;No)、ステップS402に戻る。
現在時刻がアラーム時刻であり本日の曜日がアラームONに設定されているなら(ステップS405;Yes)、処理部110は、アラームパラメータに設定されているスヌーズ回数を変数Sに設定するとともにスヌーズ時刻(例えばアラーム時刻の5分後)を設定する(ステップS406)。そして、処理部110はアラームパラメータに設定されているアラーム動作強弱及び鳴き声ON/OFFの値に基づいて駆動部220及びスピーカ231を制御することにより、アラーム動作を実行する(ステップS407)。なお、後述するスリープ制御処理によって、上述の動作制御処理のスレッドが一時停止されていた場合、ステップS407で、処理部110は、動作制御処理のスレッドを再開(Wake-up)させる処理も行う。
アラーム動作を実行することで、ロボット200は、駆動部220によってもぞもぞと動いたり、スピーカ231で鳴き声を発したりする。これによりユーザは不快を感じることなく、自然に目覚めることができる。また、動作制御処理スレッドが再開されることにより、ロボット200は通常状態になるため、ロボット200は呼吸動作を再開し、例えばユーザが撫でれば反応するようになる。したがって、ユーザは、アラーム動作で起床できなくても、その後のロボット200の呼吸動作や自然な反応によって目を覚ますことも可能になる。
そして、処理部110は、アラーム停止操作が行われたか否かを判定する(ステップS408)。アラーム停止操作としては任意の操作を規定可能であるが、本実施形態では、ユーザがロボット200の頭を持ち上げてロボット200を立てると、アラーム停止操作が行われたと判定することとする。
ユーザによるアラーム停止操作が行われたら(ステップS408;Yes)、処理部110は、このアラーム停止操作に応じてアラーム動作を停止して(ステップS409)、ステップS402に戻る。
ユーザによるアラーム停止操作が行われなければ(ステップS408;No)、処理部110は、残りのスヌーズ回数が設定されている変数Sの値が1以上であるか否かを判定する(ステップS410)。変数Sの値が0なら(ステップS410;No)、ステップS402に戻る。
変数Sの値が1以上なら(ステップS410;Yes)、処理部110は、現在時刻がスヌーズ時刻であるか否かを判定する(ステップS411)。スヌーズ時刻でなければ(ステップS411;No)、ステップS408に戻る。
スヌーズ時刻なら(ステップS411;Yes)、処理部110は、変数Sの値を1減らし、スヌーズ時刻を更新(例えば5分後に設定)し(ステップS412)、ステップS407に戻る。
次に、図20に示すフローチャートを参照しながら、ロボット200のスリープ制御モードや添い寝機能を実現するスリープ制御処理について説明する。ユーザがロボット200の電源を入れると、上述の動作制御処理、アラーム制御処理等と並行に、このスリープ制御処理が開始される。
本実施形態における添い寝機能は、設定された添い寝開始時刻になると、ロボット200が、ユーザと一緒に寝ている状態になっているとみなして、ハードスリープ制御モード(抑制モード)を実行する機能である。上述したように、ユーザがロボット200を立てた状態で照度センサ214を手で隠した場合にもハードスリープ制御モードが実行されるので、ユーザはこの操作により手動で添い寝機能を実行させることもできる。すなわち、本実施形態では、抑制モードの実行条件は、現在時刻が添い寝開始時刻であるか、または、上述の第1スリープ条件が成立することである。また、ハードスリープ制御モードには3つのスリープレベルが用意されているが、このスリープレベルの設定は、添い寝モードレベルを設定することによって行われる。
スリープ制御処理が開始されると、まず、処理部110は、ハードスリープ制御モードのレベル(スリープレベル)等のスリープ制御モードに関する各種パラメータ(以下「スリープパラメータ」という)や、添い寝モードレベル、添い寝開始時刻等の添い寝機能に関する各種パラメータ(以下「添い寝パラメータ」という)を初期化する(ステップS501)。初期化された時の値は、例えば、スリープレベル及び添い寝モードレベルは「レベル1」、添い寝開始時刻は「未設定」である。なお、これらのパラメータを記憶部120のフラッシュメモリに記憶させておくことで、ロボット200の電源を入れる度にこれらの値が初期化されないようにしてもよい。
次に処理部110は、通信部130を介してスマートフォンから添い寝設定データを受信したか否かを判定する(ステップS502)。添い寝設定データが受信されたら(ステップS502;Yes)、処理部110は、受信した添い寝設定データに基づいて添い寝パラメータを設定し(ステップS503)、ステップS504に進む。なお、ステップS502及びステップS503では、スリープパラメータに関しても、添い寝パラメータと同様に受信及び設定してもよい。ただし、本実施形態では、スリープレベルは添い寝設定データで設定された添い寝モードレベルと同じ値が使用される。
添い寝設定データが受信されなければ(ステップS502;No)、処理部110は、現在時刻がステップS503で設定された添い寝開始時刻であるか否かを判定する(ステップS504)。なお、添い寝設定データが過去に全く受信されていない場合は、添い寝開始時刻は「未設定」となり、ステップS504の判定がYesとなることはない。現在時刻が添い寝開始時刻なら(ステップS504;Yes)、処理部110は、添い寝機能の実行条件が成立したと判定し、添い寝機能を実行するために、後述するハードスリープ処理を実行する(ステップS505)。このように時刻に基づいて添い寝機能の実行条件が判定されるため、ロボット200は、添い寝開始時刻に確実に添い寝機能を実行することができる。そして、ステップS502に戻る。
現在時刻が添い寝開始時刻でないなら(ステップS504;No)、処理部110は、照度センサ214で検出される明るさが基準照度よりも暗いか否かを判定する(ステップS506)。照度センサ214で基準照度以上の明るさが検出されたら(ステップS506;No)、ステップS502に戻る。
照度センサ214で基準照度未満の明るさしか検出されないなら(ステップS506;Yes)、処理部110は、バッテリー253が充電中であるか、又は、頭部204が持ち上げられているかを判定する(ステップS507)。バッテリー253が充電中であるか、又は、頭部204が持ち上げられているなら(ステップS507;Yes)、充電中又は頭部204が持ち上げられている状態(ステップS507;Yes)で、かつ、基準照度未満の明るさしか検出されていない(ステップS506;Yes)ため、処理部110は、第1スリープ条件が成立していると判定し、後述するハードスリープ処理を実行して(ステップS508)、ステップS502に戻る。
バッテリー253が充電中ではなく、かつ、頭部204が持ち上げられてもいないなら(ステップS507;No)、処理部110は、基準照度未満の明るさしか検出されていないため(ステップS506;Yes)、第2スリープ条件が成立していると判定し、上述の動作制御処理のスレッドを一時停止させる(ステップS509)。これにより、ロボット200は第2スリープ状態に移行し、通常の動作を停止(駆動部220を停止、及びスピーカ231からの音の出力を停止)するので、消費電力を抑えることができる。
そして、処理部110は、頭部204が持ち上げられたか否かを判定する(ステップS510)。頭部204が持ち上げられたなら(ステップS510;Yes)、処理部110は、ステップS509で一時停止させた動作制御処理のスレッドを再開させ(ステップS511)、ステップS502に戻る。
頭部204が持ち上げられていないなら(ステップS510;No)、処理部110は、ロボット200が撫でられたか否かを判定する(ステップS512)。撫でられたなら(ステップS512;Yes)、ステップS511に進む。
撫でられていないなら(ステップS512;No)、処理部110は、大きな音を検出したか否かを判定する(ステップS513)。大きな音を検出したなら(ステップS513;Yes)、ステップS511に進む。
大きな音を検出していないなら(ステップS513;No)、ステップS510に戻る。
次に、上述の処理中のステップS505及びステップS508で実行されるハードスリープ処理について、図21を参照して説明する。
まず処理部110は、上述の動作制御処理のスレッドを一時停止させる(ステップS521)。これにより、ロボット200はハードスリープ状態に移行し、通常の動作を停止(駆動部220を停止、及びスピーカ231からの音の出力を停止)するので、消費電力を抑えることができる。なお、本実施形態では、ハードスリープ処理を開始する条件の一部とハードスリープ処理を終了する条件とが共通(頭部204が持ち上げられた)なので、図21では省略したが、処理部110は、ハードスリープ処理を開始した直後にハードスリープ処理を終了しないようにするための処理や判定を行ってもよい。例えば、処理部110は、図21のステップS521とステップS522の間で、頭部204が持ち上げられていない状態になるまで待機してもよい。また、ハードスリープ状態の終了の判定条件(図21のステップS523、S528及びS531)を、「照度センサ214で基準照度以上の明るさが検出され、かつ、頭部204が持ち上げられた」としてもよい。
次に処理部110は、図18に示すようにしてユーザにより設定されたスリープレベル(本実施例では、ステップS503で設定された添い寝モードレベルと同一)が、1であるか否かを判定する(ステップS522)。スリープレベルが1なら(ステップS522;Yes)、処理部110は、頭部204が持ち上げられたか否かを判定する(ステップS523)。頭部204が持ち上げられていなければ(ステップS523;No)、ステップS523に戻る。
頭部204が持ち上げられたなら(ステップS523;Yes)、処理部110は、ステップS521で一時停止させた動作制御処理のスレッドを再開させ(ステップS524)、ハードスリープ処理を終了して、スリープ制御処理のステップS502に戻る。
一方、ステップS522で、スリープレベルが1でなければ(ステップS522;No)、処理部110は、スリープレベルが2であるか否かを判定する(ステップS525)。スリープレベルが2なら(ステップS525;Yes)、処理部110は、ロボット200が撫でられたか否かを判定する(ステップS526)。撫でられていないなら(ステップS526;No)、ステップS528に進む。撫でられているなら(ステップS526;Yes)、処理部110は、準スリープ状態に移行して、スピーカ231から寝息の音を出力し、ハードスリープ状態に戻る(ステップS527)。この時、動作制御処理のスレッドは停止させたままであり、また、寝息の音の出力を行うだけなので、ステップS527では、通常状態よりも消費電力を抑制することができる。
そして、処理部110は、頭部204が持ち上げられたか否かを判定する(ステップS528)。頭部204が持ち上げられていなければ(ステップS528;No)、ステップS526に戻る。頭部204が持ち上げられたなら(ステップS528;Yes)、処理部110は、ステップS524に進む。
一方、ステップS525で、スリープレベルが2でなければ(ステップS525;No)、スリープレベルは3であり、処理部110は、ロボット200が撫でられたか否かを判定する(ステップS529)。撫でられていないなら(ステップS529;No)、ステップS531に進む。撫でられているなら(ステップS529;Yes)、処理部110は、準スリープ状態に移行し、所定の時間(例えば1分間)だけ駆動部220を制御してロボット200に呼吸動作を行わせ、ハードスリープ状態に戻る(ステップS530)。この時、動作制御処理のスレッドは停止させたままであり、また、呼吸動作での駆動部220の動きは通常状態での動きよりも小さいため、ステップS530では、呼吸動作は行うものの、通常状態よりも消費電力を抑制することができる。
そして、処理部110は、頭部204が持ち上げられたか否かを判定する(ステップS531)。頭部204が持ち上げられていなければ(ステップS531;No)、ステップS529に戻る。頭部204が持ち上げられたなら(ステップS531;Yes)、処理部110は、ステップS524に進む。
以上説明したアラーム制御処理により、ロボット200は、アラーム音を出力しなくても、その動きによって、ユーザを自然に起こすことができる。また、スリープ制御処理によって、ロボット200は、添い寝開始時刻以後はハードスリープ制御モードに入るので、ユーザを起こすような余計な動作を行うことはしなくなり、ユーザは安心してロボット200と添い寝をすることができる。そして、スリープ制御モードでは、ロボット200は図15に示す動作制御処理を停止するので、消費電力を抑制することができる。さらに、スリープ制御処理においては、通常のスリープ制御モード以外に通常状態に移行しにくいハードスリープ制御モードも用意することによって、充電中や外出中等、状況に応じて、より確実にロボット200の消費電力を抑制することができる。
上述のスリープ制御処理では、ステップS504で、処理部110は、現在時刻が添い寝開始時刻であるかを判定し、添い寝開始時刻なら、添い寝機能の実行条件が成立したと判定して、添い寝機能(ハードスリープ処理)を開始するようにしている。しかし、添い寝機能を開始するタイミングは添い寝開始時刻に限定されない。例えば、添い寝設定データとして、添い寝開始時刻の代わりに、又は、添い寝開始時刻に加えて、ユーザが睡眠する期間を「添い寝期間」として設定可能にしてもよい。そして、処理部110は、現在時刻が「添い寝期間」に含まれていたら、添い寝機能の実行条件が成立したと判定してもよい。さらに、添い寝機能の実行条件としては、添い寝開始時刻等の添い寝設定データに基づく条件に限らず、ユーザの睡眠に係る任意の条件を設定することができる。
例えば、ユーザに生体センサ(脈拍等のユーザの生体情報を検出するセンサ)を備える生体情報検出装置(例えば生体センサ内蔵の腕時計)を装着してもらう例を説明する。この場合、ステップS504で処理部110は、生体情報検出装置からの信号を取得して、取得した信号に基づいてユーザが睡眠中であると判定したら、添い寝機能の実行条件が成立したと判定して、添い寝機能を開始するようにしてもよい。なお、生体情報検出装置で生体情報に基づいてユーザが睡眠中であるか否かを判定している場合は、生体情報検出装置からの信号は、「睡眠中」又は「睡眠中でない」のどちらかの値を示すものであってもよい。この例では、ユーザが生体情報検出装置を装着する必要があるが、添い寝開始時刻が設定されていなくても、また、添い寝開始時刻とは異なる時刻にユーザがロボット200と添い寝を始めてしまった場合でも、添い寝機能を開始することができるようになる。
また、ユーザに生体情報検出装置を装着してもらわなくても、マイクロフォン213でユーザの寝息を検出したら、添い寝機能を開始するようにしてもよい。この場合、ステップS504で処理部110は、マイクロフォン213で検出した音のデータを分析して、分析の結果、その音がユーザの寝息であると判定したら、添い寝機能の実行条件が成立したと判定して、添い寝機能を開始するようにすればよい。また、例えば、ロボット200がCCD(Charge-Coupled Device)イメージセンサ等を備えたカメラ等の画像取得部を備え、処理部110は、画像取得部が取得した画像を画像解析し、画像解析の結果、その画像がユーザの寝顔であると判定したら、添い寝機能の実行条件が成立したと判定して、添い寝機能を開始するようにしてもよい。
また、例えば、ユーザから添い寝命令(例えば「一緒に寝よう」、「寝なさい」等の音声)を言われたら添い寝機能を開始するようにしてもよい。この場合、ステップS504で処理部110は、マイクロフォン213で検出した音声データを音声認識して、その認識結果が添い寝命令であれば、添い寝機能の実行条件が成立したと判定して、添い寝機能を開始するようにすればよい。また、マイクロフォン213や照度センサ214での検出結果に基づいて、周囲が暗く、無音状態が添い寝基準時間(例えば10分間)続いたら、添い寝機能の実行条件が成立したと判定して、添い寝機能を開始するようにしてもよい。このようにすれば、添い寝開始時刻が設定されていなくても、添い寝機能を実行することが可能になる。
また、上述の実施形態では、予め定められた特定外部刺激を「撫でられること」とし、ユーザがロボット200を撫でると、処理部110は、外部刺激が特定外部刺激であると判定したが、特定外部刺激は、撫でられることに限定されない。例えば、ロボット200がCCDイメージセンサ等の画像取得部を備え、画像取得部が取得した画像を処理部110が画像認識して、ユーザがロボット200に視線を向けたことを認識したら、処理部110は、外部刺激が特定外部刺激であると判定してもよい。
以上説明したように、ロボット200は、バッテリーの消費電力を抑制する抑制モードにおいても、特定外部刺激に対して消費電力を抑制しつつ動作や音の出力を行う第1抑制モードを実行することができるので、外部刺激に対してきめ細かく反応して動作するように制御することができる。また、ロボット200は、ユーザが睡眠する時刻に合わせて抑制モードを実行することにより、ユーザの睡眠を邪魔せずに添い寝をする機能である添い寝機能を実行することができる。また、ロボット200は、生体センサ、マイクロフォン213、カメラ等によりユーザが睡眠中であることを判定したら、抑制モードを実行することにより、より確実に添い寝機能を実行することができる。また、ロボット200は、ユーザに撫でられると、寝息を立てたり、呼吸の動作をしたりするため、ユーザは、ロボット200を本物の生き物のように感じることができる。また、ロボット200は、アラーム時刻にアラーム動作を行うことで、駆動部220によって、もぞもぞと動いたり、スピーカ231で鳴き声を発したりする。これによりユーザは不快を感じることなく、自然に目覚めることができる。
次に、ロボット200の電源制御について説明する。上述したように、ロボット200は、電源制御部250を備え、電源制御部250により、バッテリー253の充電や電源のON/OFF制御が行われる。電源制御部250が電源のON/OFFの制御を行うことができるため、ユーザが電源スイッチを使用しなくても、ロボット200は自分で電源を入れたり切ったりすることができる。電源制御部250はロボット200の電源を制御する電源制御装置と考えることもできる。
例えばロボット200は、バッテリーの電圧が所定の電圧(動作基準電圧)未満になったら自動的に電源をOFFにし、所定の電圧(起動基準電圧)以上になったら自動的に電源をONにする。そして、電源ON時にバッテリーの電圧が所定の電圧(動作基準電圧)以上であるなら電源ONを維持する。これにより、ユーザが手動で電源をON/OFFしなければいけない他の機器と比べて、より生き物感を向上させることができる。
しかし、例えばバッテリーの充電をできるだけ短時間で行いたい場合等、ユーザが手動でロボット200の電源を切っておきたい場合も考えられる。このような場合に、ロボット200の電源が自動的に入ってしまっては困ることになる。そこで、このような場合には電源制御部250は、ロボット200の電源が自動的に入らないようにする制御も行う。
図9に示すように、電源制御部250は、サブマイコン251、充電IC(Integrated Circuit)252、バッテリー253、電源制御IC254、ワイヤレス給電受信回路255を備える。
サブマイコン251は、低消費電力のプロセッサを内蔵したマイクロコントローラであり、バッテリー253の出力電圧を監視するAD(Analog-to-Digital)コンバータ2511、充電IC252でバッテリー253の充電が行われているか否かを示す充電信号を監視する入力ポート2512、サブマイコン251自身の電源端子2513、ロボット200の電源スイッチ241の押下状況を監視する入力ポート2514、処理部110に対し動作制限の信号を出力する出力ポート2515、電源制御IC254に対し、主機能部290に供給する電源のON/OFFを制御する電源制御信号を出力する出力ポート2516を備える。
充電IC252は、ワイヤレス給電受信回路255から電力の供給を受けて、バッテリー253を充電するための制御を行うICである。充電IC252は、バッテリー253を充電しているか否かを示す充電信号をサブマイコン251に出力する。
バッテリー253は充電可能な二次電池であり、ロボット200の動作に必要な電力を供給する。
電源制御IC254は、バッテリー253からの電力を、ロボット200の主機能部290に供給するか否かを制御するICである。サブマイコン251からの電源制御の信号を受け取る入力ポート2541を備え、電源制御の信号のON/OFFに応じて、主機能部290へ電力を供給したり供給を停止したりする。
ワイヤレス給電受信回路255は、外部のワイヤレス充電装置256から電磁誘導によって電力を受信し、受信した電力を充電IC252に供給する。
電源スイッチ241は、ロボット200の電源のON/OFFを行うためのスイッチである。なお、ロボット200の電源がOFFになっている場合でも、バッテリー253を充電したり、充電完了後に自動的にロボット200の電源をONにしたりする制御を行うために、電源制御部250には電源が供給されている。このため、ロボット200は、電源供給の観点で、常に電源が供給されている電源制御部250と、電源制御部250によって電源のON/OFFが制御される主機能部290と、の2つの部から構成されると考えることができる。
主機能部290は、ロボット200を構成する部分のうち、電源制御部250以外の部分から構成される。図9では、電源制御部250と主機能部290との関係を示すために、電源制御部250から電源が供給される電源端子2901と、サブマイコン251から送信される動作制限の信号を受信する処理部110の入力ポート1101とを示している。
次に、電源制御部250のサブマイコン251が実行する電源制御処理について、図22を参照して説明する。この処理は、サブマイコン251が起動すると(バッテリー253の電圧が、サブマイコン251が起動可能な電圧以上になると)実行が開始される。なお、この処理では、ユーザが手動で電源スイッチ241を長押ししてロボット200の電源をOFFにしたか否かを示す手動OFFフラグ変数が使用される。
まず、サブマイコン251は、電源制御IC254に、電源OFFを指示する電源制御信号を出力して主機能部290への電源供給をOFFにする(ステップS601)。そして、サブマイコン251は、処理部110に、動作制限OFFを指示する動作制限信号を出力する(ステップS602)。そして、サブマイコン251は、手動OFFフラグ変数を0に初期化する(ステップS603)。
次に、サブマイコン251は、主機能部290への電源供給がONであるか否かを判定する(ステップS604)。電源供給がONであるなら(ステップS604;Yes)、サブマイコン251は、バッテリー253が充電中であるか否かを判定する(ステップS605)。充電中でないなら(ステップS605;No)、サブマイコン251は、処理部110に、動作制限OFFを指示する動作制限信号を出力し(ステップS606)、ステップS608に進む。
バッテリー253が充電中なら(ステップS605;Yes)、サブマイコン251は、処理部110に、動作制限ONを指示する動作制限信号を出力する(ステップS607)。
そして、サブマイコン251は、電源スイッチ241が長押しされたか否かを判定する(ステップS608)。長押しされたなら(ステップS608;Yes)、サブマイコン251は、手動OFFフラグ変数を1にして(ステップS609)、ステップS611に進む。
電源スイッチ241が長押しされていないなら(ステップS608;No)、サブマイコン251は、バッテリー253の電圧が動作基準電圧以上か否かを判定する(ステップS610)。動作基準電圧とは、ロボット200を正常に動作させるのに最低限必要と考えられる電圧であり、例えば、バッテリー253の満充電時の電圧の75%の電圧である。また、動作基準電圧は第2基準電圧とも呼ばれる。
バッテリー253の電圧が動作基準電圧以上なら(ステップS610;Yes)、ステップS604に進む。
バッテリー253の電圧が動作基準電圧未満なら(ステップS610;No)、サブマイコン251は、電源制御IC254に、電源OFFを指示する電源制御信号を出力して主機能部290への電源供給をOFFにして(ステップS611)、ステップS604に戻る。このように、バッテリー253の電圧が動作基準電圧未満になると電源制御部250は、自動的にロボット200の電源をOFFにするので、ロボット200の動作が不安定になったり、バッテリー253が完全に放電してしまったりすることを防止することができる。
一方、ステップS604で、主機能部290への電源供給がONでないなら(ステップS604;No)、サブマイコン251は、電源スイッチ241が押されたか否かを判定する(ステップS612)。電源スイッチ241が押されたなら(ステップS612;Yes)、ステップS615に進む。
電源スイッチ241が押されていないなら(ステップS612;No)、サブマイコン251は、バッテリー253が充電中か否かを判定する(ステップS613)。バッテリー253が充電中でないなら(ステップS613;No)、ステップS604に戻る。
バッテリー253が充電中なら(ステップS613;Yes)、サブマイコン251は、手動OFFフラグが1であるか否かを判定する(ステップS614)。手動OFFフラグが1であるなら(ステップS614;Yes)、ステップS604に戻る。
手動OFFフラグ変数が1でないなら(ステップS614;No)、サブマイコン251は、バッテリー253の電圧が起動基準電圧以上か否かを判定する(ステップS615)。起動基準電圧とは、充電中にロボット200の電源を自動的にONにしてもよいと判断できる電圧であり、例えば、バッテリー253の満充電時の電圧の95%の電圧である。また、起動基準電圧は第1基準電圧とも呼ばれる。
バッテリー253の電圧が起動基準電圧未満なら(ステップS615;No)、ステップS604に戻る。
バッテリー253の電圧が起動基準電圧以上なら(ステップS615;Yes)、サブマイコン251は、電源制御IC254に、電源ONを指示する電源制御信号を出力して主機能部290への電源供給をONにする(ステップS616)。このように、バッテリー253の電圧が起動基準電圧以上になると電源制御部250は、自動的にロボット200の電源をONにするので、ユーザは電源スイッチ241を操作する必要がなく、ロボット200の生き物感を向上させることができる。
次に、サブマイコン251は、処理部110に、動作制限ONを指示する動作制限信号を出力する(ステップS617)。そして、サブマイコン251は、手動OFFフラグ変数を0にして(ステップS618)、ステップS604に戻る。
以上の電源制御処理により、ロボット200は、自動的に電源のON/OFFを行うことができるだけでなく、ユーザが手動で電源をOFFにした場合には、手動OFFフラグ変数が1になることから、ステップS614の処理により、充電中に自動的に電源がONになってしまうことを防ぐことができる。これにより、ユーザが充電時間を短縮したい場合には手動で電源をOFFにすれば、ロボット200は充電中に電源OFFを維持し、充電時間を短縮することができる。
なお、上述の電源制御処理からわかるように、サブマイコン251は、手動OFFフラグ変数を参照することにより、ロボット200の電源供給が遮断された要因が、ユーザ操作(ユーザが手動で電源をOFFしたこと)に起因するのか(手動OFFフラグが1)、それ以外の電源遮断要因(バッテリー253の電圧が動作基準電圧未満になった等の事象による電源OFF等)であるのか(手動OFFフラグが0)、を判別できる。
また、充電中は、処理部110に対し、動作制限をONにする信号を送信することにより、充電中にロボット200が動いてしまって、正常な充電が行えなくなることを防ぐことができる。
具体的には、動作制限をONにすると、次の2つの動作制限が行われる。1つ目の動作制限は、モータの動作の勢いでロボット200が移動してしまって、ワイヤレス給電受信回路255とワイヤレス充電装置256とが離れてしまうことを防ぐための動作制限である。具体的には、本実施形態では、ひねりモータ221及び上下モータ222の動作角度を、モーションテーブルで規定されている動作角度の50%に制限する。
2つ目の動作制限は、ロボット200がワイヤレス充電装置256から浮いてしまって、ワイヤレス給電受信回路255とワイヤレス充電装置256とが離れてしまうことを防ぐための動作制限である。具体的には、本実施形態では、ひねりモータ221の角度を0度に固定するとともに、上下モータ222の角度を0度から+30度の範囲に制限する。
なお、動作制限がOFFの場合も、ロボット200の構造的な制約から、頭部204と胴体部206とが衝突したり、頭部204と胴体部206との間に指を挟んだりしてしまう事故を防ぐために、各モータの角度を制限する。具体的には、本実施形態では、ひねりモータ221の角度を-90度から+90度の範囲に制限し、上下モータ222の角度を-60度から+60度の範囲に制限する。
例えば、図14に示す「自発動作0-0(呼吸動作)」の場合、動作制限ONの場合は、750ミリ秒後の上下モータ222の角度は15度、その800ミリ秒後の上下モータの角度は12度となるように、各モータの回転角度を制限する。
このような動作制限を含めたモータ制御処理について、図23を参照して説明する。この処理は、上述の動作選択処理のステップS208や、アラーム制御処理のステップS407や、ハードスリープ処理のステップS530において、処理部110が駆動部220を制御する時に実行される。
まず、処理部110は、モータ制御の初期化処理を行う(ステップS701)。例えば、必要に応じてひねりモータ221及び上下モータ222の角度を基準角度(0度)に戻す。
次に、処理部110は、動作制限がONであるか否かを判定する(ステップS702)。なお、処理部110は、動作制限がONかOFFかを、図9に示す上述した入力ポート1101から取得することができる。
動作制限がONでなければ(ステップS702;No)、処理部110は、動作範囲として、動作制限OFF時の値を設定する(ステップS703)。具体的には、ひねりモータ221の角度を-90度から+90度の範囲に制限し、上下モータ222の角度を-60度から+60度の範囲に制限する。
動作制限がONであれば(ステップS702;Yes)、処理部110は、動作範囲として、動作制限ON時の値を設定する(ステップS704)。具体的には、ひねりモータ221の角度を0度のみに制限し、上下モータ222の角度を0度から+30度の範囲に制限する。
そして、処理部110は、モーションテーブル125からデータを1行読み込み、動作時間、ひねりモータ221の動作角度、上下モータ222の動作角度をそれぞれ取得する(ステップS705)。
そして、処理部110は、再度、動作制限がONであるか否かを判定する(ステップS706)。動作制限がONなら(ステップS706;Yes)、処理部110は、ステップS705で取得した動作角度の値を50%に制限し(ステップS707)、ステップS708に進む。
動作制限がOFFなら(ステップS706;No)、処理部110は、動作角度をステップS703又はステップS704で設定した動作範囲内に制限する(ステップS708)。
そして、処理部110は、ステップS708で定まった動作角度を、ひねりモータ221、上下モータ222にそれぞれ設定することで、モータの動作を開始させる(ステップS709)。
そして、処理部110は、ステップS705でモーションテーブル125から読み込んだ動作時間が経過したか否かを判定する(ステップS710)。動作時間経過していないなら(ステップS710;No)、処理部110は、ステップS710に戻って動作時間の経過を待つ。
動作時間が経過したなら(ステップS710;Yes)、処理部110は、モーションテーブル125を読み終えたか否かを判定する(ステップS711)。モーションテーブル125を読み終えていなければ(ステップS711;No)、ステップS705に戻る。モーションテーブル125を読み終えたなら(ステップS711;Yes)、処理部110は、モータ制御処理を終了する。
以上のモータ制御処理により、ロボット200は、モーションテーブル125に設定されている値によらず、安全にひねりモータ221及び上下モータ222を制御することができる。また、充電中に動作を制限することによって、ロボット200が移動したり、ワイヤレス充電装置256から浮いてしまったりすることを防ぎ、ワイヤレス充電を安定的に行うことができる。
(変形例)
なお、本発明は、上述の実施形態に限定されず、種々の変形及び応用が可能である。例えば、ロボット200の成長完了後にはロボット200の性格が補正されない方がよいと考えるユーザ向けに、動作制御処理のステップS112を省略し、動作選択処理のステップS201では性格値を補正せずに算出してもよい。このようにすることで、ロボット200の性格がロボット200の成長完了後に完全に固定化されるようにすることができる。
また、上述のモーションテーブル125は、ロボット200の駆動部220の動作(動作時間及び動作角度)並びに音声データが設定されていたが、駆動部220の動作のみ、又は音声データのみが設定されていてもよい。また駆動部220の動作及び音声データ以外の制御が設定されていてもよい。駆動部220の動作及び音声データ以外の制御としては、例えば、ロボット200の出力部230にLEDが備えられている場合には、点灯させるLEDの色や明るさを制御することが考えられる。処理部110により制御される被制御部としては、駆動部220、出力部230の少なくとも一方が含まれればよく、出力部230は音出力部として、音のみを出力してもよいし、LED等により光のみを出力してもよい。
また、上述の実施形態では、感情マップ300のサイズは、第1期間中にロボット200の疑似的な成長日数が1日増える度に、感情マップ300の最大値、最小値ともに2ずつ拡大されていった。しかし、感情マップ300のサイズの拡大はこのように均等に行われなくてもよい。例えば、感情データ121の変化の仕方に応じて、感情マップ300の拡大の仕方を変更してもよい。
感情データ121の変化の仕方に応じて、感情マップ300の拡大の仕方を変更するには、例えば動作制御処理(図15)のステップS114において、以下のような処理を行えばよい。ある1日の間に、ステップS105において、感情データ121の値が1度でも感情マップ300の最大値に設定されたら、その後のステップS114において感情マップ300の最大値を3増加させる。ステップS105において感情データ121の値が1度も感情マップ300の最大値に到達しなかったら、その後のステップS114において感情マップ300の最大値を1増加させる。
感情マップ300の最小値の方も同様に、その日に1度でも感情データ121の値が感情マップ300の最小値に設定されたら、感情マップ300の最小値を3減少させ、1度も感情データ121の値が感情マップ300の最小値に到達しなかったら、感情マップ300の最小値を1減少させる。このように、感情マップ300の拡大の仕方を変更することにより、感情データ121の設定可能範囲は、外部刺激に応じて学習されることになる。
なお、上述の実施形態及び変形例では感情マップ300を第1期間中、常に拡大させていたが、感情マップ300の範囲の変更は拡大に限定されない。例えば外部刺激に応じ、ほとんど生じない感情の方向については、感情マップ300の範囲を縮小させてもよい。
また、上述の実施形態では、ロボット200に機器の制御装置100が内蔵されている構成としたが、機器の制御装置100は、必ずしもロボット200に内蔵されている必要はない。例えば、図24に示すように、機器の制御装置101は、ロボット209に内蔵されずに別個の装置(例えばサーバ)として構成されてもよい。この変形例では、ロボット209も処理部260及び通信部270を備え、通信部130と通信部270とがお互いにデータを送受信できるように構成されている。そして、処理部110は、通信部130及び通信部270を介して、センサ部210が検出した外部刺激を取得したり、駆動部220や出力部230を制御したりする。
なお、このように機器の制御装置101とロボット209とが別個の装置で構成されている場合、必要に応じて、ロボット209は処理部260により制御されるようになっていてもよい。例えば、単純な動作は処理部260で制御され、複雑な動作は通信部270を介して処理部110で制御される等である。
また、上述の実施形態では、機器の制御装置100,101は、制御の対象となる機器をロボット200,209とした制御装置であるが、制御の対象となる機器は、ロボット200,209に限られない。制御の対象となる機器としては、例えば、腕時計等も考えられる。例えば、音声出力可能で加速度センサを備えた腕時計を制御の対象となる機器とする場合、外部刺激としては、加速度センサで検出される、腕時計に加わった衝撃等を想定することができる。そして、モーションテーブル125には、外部刺激に応じて出力する音声データを記録しておくことができる。そして、外部刺激に応じて感情データ121や感情変化データ122を更新し、検出した外部刺激や、その時点での感情変化データ122(性格)に基づいて、モーションテーブル125に設定されている音声データを出力させることが考えられる。
そうすると、ユーザの扱い方によって、腕時計に個性(疑似的な性格)が生じることになる。つまり、同じ型番の腕時計であっても、ユーザが丁寧に扱っていれば、陽気な性格の腕時計になり、乱暴に扱っていればシャイな性格の腕時計になる。
このように機器の制御装置100,101は、ロボットに限らず、様々な機器に適用することができる。そして機器に適用することにより、当該機器に疑似的な感情や性格を備えさせることができ、またユーザに、当該機器を疑似的に育てているように感じさせることができる。
上述の実施形態において、処理部110のCPUが実行する動作プログラムは、あらかじめ記憶部120のROM等に記憶されていた。しかしながら、本発明は、これに限定されず、上述の各種処理を実行させるための動作プログラムを、既存の汎用コンピュータ等に実装することにより、上述の実施形態に係る機器の制御装置100,101に相当する装置として機能させてもよい。
このようなプログラムの提供方法は任意であり、例えば、コンピュータが読取可能な記録媒体(フレキシブルディスク、CD(Compact Disc)-ROM、DVD(Digital Versatile Disc)-ROM、MO(Magneto-Optical Disc)、メモリカード、USBメモリ等)に格納して配布してもよいし、インターネット等のネットワーク上のストレージにプログラムを格納しておき、これをダウンロードさせることにより提供してもよい。
また、上述の処理をOS(Operating System)とアプリケーションプログラムとの分担、又は、OSとアプリケーションプログラムとの協働によって実行する場合には、アプリケーションプログラムのみを記録媒体やストレージに格納してもよい。また、搬送波にプログラムを重畳し、ネットワークを介して配信することも可能である。例えば、ネットワーク上の掲示板(Bulletin Board System:BBS)に上記プログラムを掲示し、ネットワークを介してプログラムを配信してもよい。そして、このプログラムを起動し、OSの制御下で、他のアプリケーションプログラムと同様に実行することにより、上記の処理を実行できるように構成してもよい。
また、処理部110,260は、シングルプロセッサ、マルチプロセッサ、マルチコアプロセッサ等の任意のプロセッサ単体で構成されるものの他、これら任意のプロセッサと、ASIC(Application Specific Integrated Circuit)やFPGA(Field‐Programmable Gate Array)等の処理回路とが組み合わせられて構成されてもよい。
本発明は、本発明の広義の精神と範囲とを逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、前述した実施形態は、この発明を説明するためのものであり、本発明の範囲を限定するものではない。すなわち、本発明の範囲は、実施形態ではなく、特許請求の範囲によって示される。そして、特許請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、この発明の範囲内とみなされる。以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
(付記1)
機器の疑似的な成長度合いに関連する所定条件が成立しているか否かを判定し、
外部から前記機器に作用する外部刺激を表す外部刺激データを取得し、
前記所定条件が成立していない場合に、前記取得された外部刺激データに基づく第1条件に応じて、基本性格データを変更設定し、
前記所定条件が成立している場合に、前記取得された外部刺激データに基づく、前記第1条件とは異なる第2条件に応じて、前記変更設定された基本性格データを補正して性格データを求め、
前記所定条件が成立していない場合には前記変更設定された基本性格データに応じて、前記所定条件が成立している場合には前記補正して求めた性格データに応じて、前記機器の動作を制御する、
処理部を備える、
機器の制御装置。
(付記2)
前記処理部は、前記取得された外部刺激データに基づいて、前記機器の疑似的な感情を表す感情データを設定し、
前記第1条件は、前記感情データで表される前記機器の疑似的な感情の度合いに関する条件である、
付記1に記載の機器の制御装置。
(付記3)
前記処理部は、前記取得された外部刺激データに基づいて、前記機器の疑似的な感情を表す感情データを設定し、
前記第2条件は、前記感情データで表される前記機器の疑似的な感情の発生頻度に関する条件である、
付記1又は2に記載の機器の制御装置。
(付記4)
前記処理部は、
前記所定条件が成立している場合には、前記基本性格データを固定し、前記第2条件に応じて前記基本性格データを補正する性格補正データを変更設定し、前記固定された基本性格データを前記性格補正データで補正して求めた性格データに応じて、前記機器の動作を制御する、
付記1から3のいずれか1つに記載の機器の制御装置。
(付記5)
前記処理部は、
前記所定条件が成立していない場合には、前記第1条件に応じて前記機器の疑似的な感情を表す感情データを変化させるための感情変化データを学習し、前記学習された感情変化データに応じて前記基本性格データを性格データとして設定する、
付記1から4のいずれか1つに記載の機器の制御装置。
(付記6)
前記所定条件は、前記機器の疑似的な成長度合いを表す成長度合いデータが所定の値を超えると成立する、
付記1から5のいずれか1つに記載の機器の制御装置。
(付記7)
前記成長度合いデータは、前記機器の疑似的な成長日数を表すデータである、
付記6に記載の機器の制御装置。
(付記8)
前記成長度合いデータは、前記外部刺激データを取得した回数を表すデータである、
付記6又は7に記載の機器の制御装置。
(付記9)
前記基本性格データは、所定の数の、異なる性格のそれぞれの度合いを表す性格値を含み、
前記所定条件は、前記性格値の中で最も大きい値が所定の値以上になると成立する、
付記6から8のいずれか1つに記載の機器の制御装置。
(付記10)
機器の疑似的な成長度合いに関連する所定条件が成立しているか否かを判定し、
外部から前記機器に作用する外部刺激を表す外部刺激データを取得し、
前記所定条件が成立していない場合に、前記取得された外部刺激データに基づく第1条件に応じて、基本性格データを変更設定し、
前記所定条件が成立している場合に、前記取得された外部刺激データに基づく、前記第1条件とは異なる第2条件に応じて、前記変更設定された基本性格データを補正して性格データを求め、
前記所定条件が成立していない場合には前記変更設定された基本性格データに応じて、前記所定条件が成立している場合には前記補正して求めた性格データに応じて、前記機器の動作を制御する、
機器の制御方法。
(付記11)
コンピュータに、
機器の疑似的な成長度合いに関連する所定条件が成立しているか否かを判定し、
外部から前記機器に作用する外部刺激を表す外部刺激データを取得し、
前記所定条件が成立していない場合に、前記取得された外部刺激データに基づく第1条件に応じて、基本性格データを変更設定し、
前記所定条件が成立している場合に、前記取得された外部刺激データに基づく、前記第1条件とは異なる第2条件に応じて、前記変更設定された基本性格データを補正して性格データを求め、
前記所定条件が成立していない場合には前記変更設定された基本性格データに応じて、前記所定条件が成立している場合には前記補正して求めた性格データに応じて、前記機器の動作を制御する、
処理を実行させるプログラム。