はじめに
前回、
- Romo SDKで提供されている2つのFramework
- RMCore
- RMCharacter
の内、
RMCoreを利用したわかりやすい作例の動画があるのでご紹介します。
Controlling Romo with Pebble from John Brewer on Vimeo.
RomoをスマートウォッチのPebbleでコントロールしていますが、
※デバイスの発売は7月24日になります。公式オンラインストアで予約することができます。
サンプルの実行
さて、
RMCoreを利用したサンプルコードはHelloRMCoreになります。さっそく実行してiPhoneにインストールしてみると、

おお、
※Romoに充電用のUSBケーブルを接続していると動作しないので注意です。
SDKでできること
RMCore Frameworkでできることは何になるのでしょうか? 以下に簡単にまとめさせていただきました。
- LEDの制御
- iPhoneの角度の制御
- 左右のキャタピラの回転
左右のキャタピラの回転の制御により、
SDKをプロジェクトに追加
では、
まずはRMCore.

続いて、

デバイスとの接続
それでは、
#import <RMCore/RMCore.h>
接続の検知は、
@interface ViewController : UIViewController <RMCoreDelegate>
- (void)viewDidLoad
{
[super viewDidLoad];
[RMCore setDelegate:self];
}
実際のDelegateメソッドを以下のように記述します。ここで1つの問題、
// デバッグ用テキスト表示
@property IBOutlet UILabel* debugText;
delegateでRomoの各種処理を提供するRMCoreRobotオブジェクトが渡されるのですが、
やや複雑な表記ですが、
@property (nonatomic, strong) RMCoreRobot<HeadTiltProtocol, DriveProtocol, LEDProtocol> *myRobot;
- (void)robotDidConnect:(RMCoreRobot *)robot
{
if (robot.isDrivable && robot.isHeadTiltable && robot.isLEDEquipped) {
self.debugText.text = @"connected!";
self.myRobot = (RMCoreRobot<HeadTiltProtocol, DriveProtocol, LEDProtocol> *) robot;
}
}
なお、
- (void)robotDidDisconnect:(RMCoreRobot *)robot
{
if (robot == self.myRobot) {
self.myRobot = nil;
self.debugText.text = @"disconnected!";
}
}
ちなみに今回は利用をしないのですが、
// Romo との接続をシミュレーターで再現
[RMCore connectToSimulatedRobot];
以上のようにダミーで知らせると、
LED
続いて何かアクションをさせてみましょう。
画面にUIButtonを配置し、
- (IBAction)pushLEDBtn:(id)sender
{
[self.myRobot.LEDs blinkWithPeriod:0.5 dutyCycle:0.1];
}
この書き方で、
点灯や点滅、
前傾、後傾
続いて、
- (IBAction)pushTiltBtn:(id)sender
{
// HeadTild
if (self.myRobot.robot.headAngle < self.myRobot.robot.maximumHeadTiltAngle - 1) {
[self.myRobot.robot tiltToAngle:self.myRobot.robot.maximumHeadTiltAngle completion:nil];
} else {
[self.myRobot.robot tiltToAngle:self.myRobot.robot.minimumHeadTiltAngle completion:nil];
}
}
タップするごとに、
ちなみに、
移動
最後に、
- (IBAction)pushMoveBtn:(id)sender
{
// Drive
if (self.myRobot.robot.driving) {
[self.myRobot.robot stopDriving];
} else {
[self.myRobot.robot driveWithRadius:1.0 speed:1.0];
}
}
タップすると、
まとめ
さて、
実際にRomoが動き出すと手応えがあり、
Romoは現在、
次回は、