5秒ごとに往復するという動作をメインに、「障害物にぶつかったら、反対方向に走り出す」というルーチンを入れてみた。あとはついでに、効果音
とかLED点滅
とか。



JavaScriptコードにすると、こうなる。
async function onCollision() {
await delay(0);
stopRoll();
await Sound.ScienceFiction.WarningAlarm.play(false);
await strobe({ r: 255, g: 0, b: 30 }, 0.2, 10);
setMainLed({ r: 109, g: 255, b: 113 });
await delay(3);
setHeading(getHeading() + 180);
await delay(1);
setSpeed(100);
}
registerEvent(EventType.onCollision, onCollision);
async function startProgram() {
await Sound.ScienceFiction.Data.play(true);
setMainLed({ r: 109, g: 255, b: 113 });
while (true) {
await roll(getHeading(), 100, 5);
stopRoll();
await Sound.EightBit.LevelComplete.play(true);
await delay(1);
setHeading(getHeading() + 180);
await strobe({ r: 160, g: 255, b: 122 }, 0.2, 10);
await delay(0.025);
}
}
「BB-8」と「BB-9E」で動作テストをしてみたが、結果はイマイチ。
どうも動作が安定しない。
コードにバグがあるのかと、いろいろ手直ししてみたが、結局のところ「衝突
」を検知する加速度センサーの問題だということが分かった。


結構な勢いで壁や家具にぶつかっても、「衝突」と認識されないことが多い。
そうなると、決められたパターンで走らせるというプログラムしか、安定して運用できないことになる。
つまらないねえ。

ところで、「sphero Edu」はiPhone、iPad、Android端末、Windows 10、Chromeなど、さまざまな環境で提供されている。なので、PC上でも走らせることができた。

コーディングには、ちょっと便利かも。ヘルプとかを読みながら作業ができるし。
意外と手厚いのが、効果音
の種類、こんなに使い分けないだろうってくらい、さまざまな音声を使用することができる。日本語をしゃべらせることもできるが、音声はすべて使用端末上で再生される。

ロボット自体が喋ってくれないのは、ちょっと寂しいね。
さて、この先何をさせたもんだろうか? ダンスに見えるルーチンでもデザインしてみようか?
カーブを描いて走らせたりするには、ちょっと工夫(=計算?)が必要だろうな。