後期から学部2年次の少人数授業でRomotiveを利用してプログラミング授業をしています。
自らインターネットを探索しながら、SDKのコードを読みながら試行錯誤して欲しいという願いからはじめました。
学生はiPhoneアプリ開発もObjective-Cも学習経験はありません。実機転送ではかなり困ったようです。投げ出さないように少しずつヘルプしながら何とか動かせるところまできました。
到達目標は、Romoを8台用意しているので、全員で隊列を組んで行進させてその様子を撮影した動画をYouTubeにアップするまでとしています。
学生にやらせてばかりでは何ですので、どれくらい精度が出るものか(でないものか)を確かめるためにちょっとした実験をしてみました。
Romoを前進させるメソッド(driveForwardWithSpeed)に引数としてスピード(m/s)の数値を与えます。計算では1m進むことを想定した時間分をタイマーで実行します。その間にRomoが進んだ距離(cm)を計測しました。iPhoneはiPod Touch4Gです。
平均的に進む距離は設定値1mに対して30〜40cm不足するようです。モーターの初動やRomoの慣性や滑りの影響があるのかと思います。再現性はまずまずと思います。
で、上記実験で得られたデータから不足する距離を補正する式を作成しました。
duration = ( 2.7031 x speed - 3.3805 x speed + 2.3135 ) / speed
ちなみにObjective-Cでは以下のようなメソッドを作成しました。このメソッドで求めた値でタイマーを起動すればいいです。
- (float)calcDurationAtSpeed:(float)speed { return (2.7031 * speed * speed - 3.3805 * speed + 2.3135) / speed; }
結果は以下のような感じです。素晴らしい(笑)再現性があるということですね。電池のヘタリもあるはずですが。。。
回転も計測していますが、今日はお腹が空いたのでこれで帰りたいと思います。
時間があれば続きをアップします。
こんなことしてないで論文かけよ>僕 ^^;;