Romo×iPhoneで楽しむロボット体験

第3回RomoのキャラクターUIを動かしてみよう!

今回のテーマは「表情の制御」

前回は、Romo SDKにあるフレームワークRMCoreを使用してデバイスを動かす方法について、ご紹介させていただきました。Romoの特徴の1つに、ロボットの表情にあたる部分をiPhoneの画面で表現しているということが挙げられるのですが、今回はその表情の制御について掘り下げてみます。

Romo SDKで提供されている2つのFramework

  • RMCore
  • RMCharacter

のうち、RMCharacterが表情に関連するFrameworkになります。

RMCharacterを利用すると、ROMOの表情をUIとして自分のアプリに組み込むことができます。自前でデザインやイラスト、表情を制御する処理などを実装することなく、プログラマー一人で表現豊かなロボットを制作することができます。

ちなみにRMCharacterはRomoの実機がなくても実装することができます。

デバイスの発売は7月24日になります。公式オンラインストアで予約することができます。

サンプルの実行

さて、今回もまずは気軽にサンプルコードを実行してみたいと思います。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をインポートします。

ViewController.h
#import <RMCharacter/RMCharacter.h>

RMCharacterオブジェクトを取得してプロパティに保持します。

ViewController.h
@property (nonatomic, strong) RMCharacter *romo;
ViewController.m
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.romo = [RMCharacter Romo];
}

続いて、ViewにRomoを表示させます。

ViewController.m
- (void)viewWillAppear:(BOOL)animated
{
    [self.romo addToSuperview:self.view];
}
表示されました。放っておくと、瞬きをします
表示されました。放っておくと、瞬きをします

何かしゃべらせてみる

続いて、タップに反応して何かアクションをさせてみましょう。

ViewController.m
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.romo mumble];
}

何種類かのランダムなパターンでRomoがRomo語でしゃべります。

Romoがしゃべる
Romoがしゃべる

ちなみに、もう1つsayというメソッドがあります。引数があるのですが、試してみたところ引数に関係なく、こちらもランダムでもっと短い単語を発します。

ViewController.m
 [self.romo say:@""];

表情の変化

emotionプロパティで表情を指定することができます。指定すると感情にあわせて表情がアニメーションします。

ViewController.m
self.romo.emotion = RMCharacterEmotionExcited;
最高潮に興奮した表情です
最高潮に興奮した表情です

感情は以下のように用意されています。

RMCharacterEmotionBewildered当惑
RMCharacterEmotionCurious物珍しい
RMCharacterEmotionDelighted喜び
RMCharacterEmotionExcited興奮
RMCharacterEmotionHappy幸せ
RMCharacterEmotionIndifferent無関心
RMCharacterEmotionSad悲しい
RMCharacterEmotionScaredびっくり / 怖い
RMCharacterEmotionSleepy眠い
RMCharacterEmotionSleeping睡眠中

感情表現

expressionで、一連の感情表現のアニメーションを行うことができます。expressionを指定するとその感情に合わせたアニメーションが実行され、そのあとemotionで指定された表情に戻ります。

ViewController.m
self.romo.expression = RMCharacterExpressionAngry;
とても怒らせてみました
とても怒らせてみました

こちらは33通りもの感情表現が用意されています。感情の種類は RMCharacterExpression に規定されています。数が多いので、それぞれの表現についてはドキュメントを参照してみてください。

また、次のように感情表現をした後に指定した表情にアニメーションさせることもできます。

ViewController.m
 [self.romo setExpression:RMCharacterExpressionHappy withEmotion:RMCharacterEmotionHappy];

目のアニメーション

lookAtPointメソッドを使うことで視点を移動させることができます。以下のように書くことで、眠そうな表情で、タップした方向を見るようにできます。

ViewController.m
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.romo.emotion = RMCharacterEmotionSleepy;
    
    CGPoint touchPos = [[touches anyObject] locationInView:self.view];
    CGFloat centerX = self.view.frame.size.width / 2;
    CGFloat centerY = self.view.frame.size.height / 2;
    CGFloat x = (touchPos.x - centerX) / centerX;
    CGFloat y = (touchPos.y - centerY) / centerY;
    CGFloat z = 0.0;
    
    RMPoint3D lookPoint = RMPoint3DMake(x, y, z);
    [self.romo lookAtPoint:lookPoint animated:YES];
}

RMPoint3Dで視点の位置を指定します。x、yはそれぞれの軸を-1から1までの範囲。zは0から1の範囲で、見ている物体の遠さを寄り目 / 離れ目で表現します。

タップ以外に、顔認識した際に目で追うなどの処理に利用できそうです。

次のように書くと、基本の位置に視点を戻します。

[self.romo lookAtDefault];

また、次のメソッドで左右のまぶたを開閉させることができます。

[self.romo setLeftEyeOpen:YES rightEyeOpen:NO];

まとめ

全3回の連載、いかがでしたでしょうか?

今回は⁠ロボットの顔の表現⁠にまつわる機能の紹介でしたが、エデュケーショナルロボットとして遊ぶ人の気持ちに訴えかけるために、Romoは非常に多彩な感情表現ができます。

オリジナルのキャラクターを作成してみようと思った際にも、色々と作り方を参考にできそうです。今回はデバイスがなくても実装を試すことができるので、Romoを持っていない方もぜひ試してみてください。

また、開発者向けにFacebook グループRomo Developer Communityができました!定期的にRomoに関する技術的なトピックや最新のニュースをお届けするので、ぜひご参加ください。

最近はロボット関係のニュースも良く耳にするようになりました。この連載をきっかけに、より多くの方にロボット作りに興味を持っていただければ幸いです。

おすすめ記事

記事・ニュース一覧