その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

自作iOSアプリで制御できるロボット、Romo のハッカソンに参加してきました

本日 HUB Tokyo にて開催された『iPhone x ロボットハッカソン 大人の夏休みの自由研究 〜Romoで絶対起きられる目覚まし時計を作ろう〜』と題されたハッカソンに参加してきました。


Romo とは?

http://www.romotive.jp/

Romo(ロモ)はiPhoneなどで動く「体感型のエデュケーショナルロボット」で、誰でも動かすことが可能です。iPhoneアプリが頭脳の役割になり、様々な感情や動きを表現することができます。楽しみながら子どもの論理的思考や想像力、思考力を育むことができ、遊びや学びの幅がさらにひろがる可能性を秘めています。


僕なりに要約すると、「iOS SDK が用意されてて、いろんな連携アプリがつくれるロボット」です。

Romo SDK の使い方

gihyo.jp の連載が細かい手順まで説明されていてわかりやすいです。


「とりあえず動かしてみたい」場合は第2回を、


「キャラのUIを使いたい」場合は第3回を見ればOKです。


第2回の内容はRomo本体が必要ですが、第3回の内容は本体なしで試すことができます。

つくったもの

お題は「目覚まし時計」で、セットした時間になると Romo が激しく引っ張って起こしてくれる というものをつくりました。


Romo Alarm from Shuichi Tsutsumi on Vimeo.


撮影のため柱にくくりつけてありますが、これを服や布団に繋いでおくイメージです。だいぶシンプルですが、せっかくロボットなので、物理的に動く機能を使った方が良いかなということでこれに至りました。


止めるには iPhone を抜くしかありません。動画からも僕の動揺っぷりが伝わるかもしれませんが、激しく動くのでかなり大変です。


イヤホンジャックが前にビヨーンと出てるのは、繋ぐヒモが手元にイヤホンしかなかったからで、用途としてはただのヒモです。テープで貼り付けてあります。




動画にはありませんが、マイルドに引っ張って起こしてくれるモードもあります。

モーター電流値を取得する

「引っ張る」ということを実現するのに、単純に一定時間ごとに前進と後退を繰り返すのだと「引っ張られてる感」がどうしても弱くなってしまう場合があるので、しっかり張力がMaxに達してから後退するよう、モーター電流の値を判定に使用しています。


モーターを示すクラス RMCoreMotor のオブジェクトは DifferentialDriveProtocol よりアクセスできるので、次のようにします。

@property (nonatomic, strong) RMCoreRobot<HeadTiltProtocol, DriveProtocol, LEDProtocol, DifferentialDriveProtocol> *myRobot;


で、drive するときに `driveWithLeftMotorPower:rightMotorPower:` を使用して走らせることで、

[self.myRobot driveWithLeftMotorPower:1.
                      rightMotorPower:1.];


RMCoreRobot オブジェクトの `leftDriveMotor`, `rightDriveMotor` プロパティから、`motorCurrent` の値を取得できるようになります。

float leftCurrent  = [self.myRobot.leftDriveMotor motorCurrent];
float rightCurrent = [self.myRobot.rightDriveMotor motorCurrent];


Romo が引っ張る際にヒモがピンと張って前に進めなくなると、速度を維持しようとモーター電流が大幅に上がることを利用して、 motorCurrent が一定以上になるといったんバックする、ということをやっています。


苦労した点としては、どんな床で使うかによって閾値が全然変わってくる点で、板の上、アスファルトの上だと全然値が違ってました *1

つくったもの その2

上記のをつくりおえて、このブログも書いてしまって時間が余ったので、もうひとつ作成。


アラームの音楽に合わせて Romo が踊る というもの。


動画は撮ってませんが、アラーム開始に合わせ MIDI の楽曲が鳴りはじめ、そのメロディやリズムに合わせて Romo が体を揺らしたり表情を変えたり雄叫びを上げたり、というものです。MIDI再生とかは別件でやってたのと、アラームはひとつめのアプリのを流用したので制作時間30分ぐらい。

総括

Romo SDK ともてよくできていて、シンプルな API のわりにかなり色々なことができるようによく考えられていると思います。興味のある方はぜひ!


日本での正規品は現在予約受付中(2014年7月24日頃の出荷予定とのこと):


(Amazon で現在手に入るのは並行輸入品で、かつ価格が倍以上します。。)



*1:結局、プレゼンのときに調整できるようにキャリブレーションモードを用意しました。