今回のテーマは「表情の制御」
前回は、Romo SDKにあるフレームワークRMCoreを使用してデバイスを動かす方法について、ご紹介させていただきました。Romoの特徴の1つに、ロボットの表情にあたる部分をiPhoneの画面で表現しているということが挙げられるのですが、今回はその表情の制御について掘り下げてみます。
Romo SDKで提供されている2つのFramework
のうち、RMCharacterが表情に関連するFrameworkになります。
RMCharacterを利用すると、ROMOの表情をUIとして自分のアプリに組み込むことができます。自前でデザインやイラスト、表情を制御する処理などを実装することなく、プログラマー一人で表現豊かなロボットを制作することができます。
ちなみにRMCharacterはRomoの実機がなくても実装することができます。
サンプルの実行
さて、今回もまずは気軽にサンプルコードを実行してみたいと思います。SDKはこちらからダウンロードが可能です。詳細は第1回の記事をご参考下さい。
RMCharacterを利用したサンプルコードはHelloRMCharacterになります。さっそく実行してiPhoneにインストールしてみました。
タップした方向をRomoが目で追います。指を離すと、ランダムで泣いたり笑ったり、色んな表情を見せてくれます。
SDKでできること
RMCharacterでできることを、以下にまとめてみました。
- 指定された方向に視線を向ける
- Romo語による発話
- 左右の目の開閉
- 33種類の表現
- 10種類の感情の設定
とくに表情と感情表現がかなり充実しているのがわかります。Romo語は、内容はわからないけれど何か話しているというような音声になります。公式アプリのように、字幕と合わせて発話させると臨場感のある表現になります。
SDKをプロジェクトに追加
では、実際にSDKをプロジェクトに追加して動かしてみましょう。ここでは新しいプロジェクトファイルにフレームワークを追加してみます。
まずはRMCharacter.frameworkとRMCharacter.bundle(RMCharacterで使用する音声や画像ファイルがまとまっています)をFrameworksにドラッグ&ドロップ。続いて、Build PhasesタブでAVFoundation.frameworkとQuartzCore.frameworkを追加します。
RMCharacterの初期化
それではViewにRomoを表示してみましょう。まず、RMCharacterをインポートします。
RMCharacterオブジェクトを取得してプロパティに保持します。
続いて、ViewにRomoを表示させます。
何かしゃべらせてみる
続いて、タップに反応して何かアクションをさせてみましょう。
何種類かのランダムなパターンでRomoがRomo語でしゃべります。
ちなみに、もう1つsayというメソッドがあります。引数があるのですが、試してみたところ引数に関係なく、こちらもランダムでもっと短い単語を発します。
表情の変化
emotionプロパティで表情を指定することができます。指定すると感情にあわせて表情がアニメーションします。
感情は以下のように用意されています。
RMCharacterEmotionBewildered | 当惑 |
RMCharacterEmotionCurious | 物珍しい |
RMCharacterEmotionDelighted | 喜び |
RMCharacterEmotionExcited | 興奮 |
RMCharacterEmotionHappy | 幸せ |
RMCharacterEmotionIndifferent | 無関心 |
RMCharacterEmotionSad | 悲しい |
RMCharacterEmotionScared | びっくり / 怖い |
RMCharacterEmotionSleepy | 眠い |
RMCharacterEmotionSleeping | 睡眠中 |
感情表現
expressionで、一連の感情表現のアニメーションを行うことができます。expressionを指定するとその感情に合わせたアニメーションが実行され、そのあとemotionで指定された表情に戻ります。
こちらは33通りもの感情表現が用意されています。感情の種類は RMCharacterExpression に規定されています。数が多いので、それぞれの表現についてはドキュメントを参照してみてください。
また、次のように感情表現をした後に指定した表情にアニメーションさせることもできます。
目のアニメーション
lookAtPointメソッドを使うことで視点を移動させることができます。以下のように書くことで、眠そうな表情で、タップした方向を見るようにできます。
RMPoint3Dで視点の位置を指定します。x、yはそれぞれの軸を-1から1までの範囲。zは0から1の範囲で、見ている物体の遠さを寄り目 / 離れ目で表現します。
タップ以外に、顔認識した際に目で追うなどの処理に利用できそうです。
次のように書くと、基本の位置に視点を戻します。
また、次のメソッドで左右のまぶたを開閉させることができます。
まとめ
全3回の連載、いかがでしたでしょうか?
今回は“ロボットの顔の表現”にまつわる機能の紹介でしたが、エデュケーショナルロボットとして遊ぶ人の気持ちに訴えかけるために、Romoは非常に多彩な感情表現ができます。
オリジナルのキャラクターを作成してみようと思った際にも、色々と作り方を参考にできそうです。今回はデバイスがなくても実装を試すことができるので、Romoを持っていない方もぜひ試してみてください。
また、開発者向けにFacebook グループ“Romo Developer Community”ができました!定期的にRomoに関する技術的なトピックや最新のニュースをお届けするので、ぜひご参加ください。
最近はロボット関係のニュースも良く耳にするようになりました。この連載をきっかけに、より多くの方にロボット作りに興味を持っていただければ幸いです。