2018年の8月末に、Edisonに新しいプログラミング環境がリリースされました。その名もEdscratch。
EdScratchにアクセスすると、最初はまったくEdBlocks と同じ感じの画面。
プログラミング画面。Scratch風ではありますが、かなり見た目はちがいます。画面下に常に白いエリアがあり、これは何?と思ったのですが、ここはエラーなどが表示されるエリアとして最初から確保されているようです。
これまで、Edisonには、EdBlocks、EdWare、EdPyという3種類のプログラミングツールがありましたが、4番目のツールの登場です。名前の通り、Scratchに似たインターフェースをもったブロックプログラミングツールです。難易度的には、入門者向けのEdBlocksと汎用ブロックツールEdWareの中間に位置するようなイメージでしょうか。
これまで、Edisonでちょっと複雑なプログラミングを作ろうとすると、EdWareというツールしか無かったのですが、これはちょっと独特なインターフェースをもっており、Scratchになれた人でもちょっと敷居の高いものでした。おそらく、そんなところで、EdWareの前か、もしくは代替として裾野を広げようという意図があるのではないかと思います。
あの、MITのScratchという名称をそのまま含んだ名称で、これいいのかな?ともちょっと思ったのですが、そのへんは仁義切ってるんですかね(笑) Scratchという名称を含んでいる割には、ブロックを縦に並べるところが同じくらいで、画面構成などはかなり違います。なので、これは独自開発のツールなのかと思っていたら、こんなクレジットがありました。
The EdScratch app was developed using the Scratch Blocks code base developed by MIT. Scratch Blocks was built on the Blockly code base developed by Google.
ということは、GoogleのBlocklyを利用して作られたScratch3.0のソースコードをベースにして開発されているということのようです。次期Scratchである3.0もBlocklyベースなのですね。どうも最近よくみる中華ロボットのプログラミングツールとか、ほとんどすべてBlocklyベースのように感じていたのですが、本家(?)ScratchもBlocklyを採用していたのですね。
ちなみにEdScratchについてですが、すべてウェブブラウザでアクセスするというこれまでのスタイルは変わっていません。また、Menuまわりやプログラムの転送方法などは、EdBlocksと全く同じUIとなっています。ただし、アカウントについてはツールごとに別になっています。なので、Edblocksにアカウントを持っていても、そのID、パスワードではログインできません。Edscratchで作ったプログラムを保存するためには新しくアカウントを作る必要があります。まあツールが違えばコードも異なるので、あたりまえといえばあたりまえですね。
EdBlocksだと、Scratchjrと同様で、英語メニューのままでも絵を見るだけでなんとかなるのですが、EdScratchになると、書いてある単語の意味くらい知らないとちょっと厳しいと思います。でも、Scratchに慣れた子だったら、英語版のScratchをちょっと試してみて、その後にこっちに来れば、対応可能な部分は多いと思います。
では、いちばん基本になるDriveコマンドを見てみます。
一見してびっくりしたのは、 cm や 角度を指定して走る距離や回転角度を直接指定できるようになっていることです。これ、レゴのEV3ではこうなってませんし、mBotなどでもこういうコマンドはありませんでした。レゴEV3の場合はモーターの回転数や回転角度を指定する仕様ですので、車のロボットなどを作った場合は、実際にモーター1回転で何cm走るかを計測して、そこからモーターの回転数や回転角度を計算してプログラム内で指定する必要があります。ところが、この計算って、3〜4年生くらいだと結構ハードル高いんですよね。Edisonは、それに比べるとかなり直感的なプログラミングが可能になっています。
ただ、これはこれでちょっと不安な部分もあります。以前Edisonを開けて中を見たことがありますが、ウォームギアを介して車輪を駆動する方法で、しかもマブチモーターみたいなどこにでもありそうなモーターを使ってます。この構造で、そんなにきちんとコントロールできるのだろうか?という疑問があり、早速計測してみました。
Edisonの内部。2つのモーターがウォームギアを介して両方の車輪を駆動するしくみ。
このスタイルだと、モーターの惰性による走行距離のズレはあまり気にならないかもしれないが、
モーターのON/OFFタイミングでちょっとしたズレが発生する可能性があるように思います。
実際に方眼用紙みたいなものを作って移動距離を測定してみました。その結果、ちょっと驚きました。それなりに正確なんです。スピードは10段階あり、当然Maxスピードの10にすると、さすがに少し誤差がでるのはロボットの宿命ですが、スピード値をデフォルトの5のままにしておけば、かなり正確に指定したcm走って止まります。スピード10のときでも、10cm走らせて出た誤差は前後0.5cm以内に収まっていました。止まった位置がきちんとプログラムで指示したcm数値になっているのは立派です。
ただ、Edisonの場合は、細いタイヤ、また前輪(?)の部分が、回転する構造ではなく、単なるプラスチックの突起であり、これを滑らせて走ります。また、前述のウォームギアを使った駆動方式等、いろいろハンディがあり、そもそもきれいに真っ直ぐ走るということが割と難しいのです。スタート時、停止時にちょっとだけボディが傾いてしまうことがよくあります。(前述の誤差0.5cm以内というのは、何度も計測して、極力停止時に傾かなかったときの数値のみで判断したものです)
実際に測定するときはEdison本体のスタートボタンを押したときの本体のズレを避けるため、このようにwaitを入れて、ボタンを押したあと一度方向をきっちり合わせて、手を離してから勝手にスタートするようにして測りました。
もちろん、メーカーはキャリブレーションできるように情報提供していますが、これをいくらきちんとやっても、これらの「物理的制約」によって、どうしても完璧に直進するわけにはいかないのがEdisonの宿命です。でも、こういうハンディの中で、よくここまで正確な制御をするもんだと、逆に感心してしまいました。
同じく、角度を指定して回転させるコマンドについてもけっこう正確に回転してくれます。こちらも、こんなコマンドでテストしてみました。結果は動画のとおりです。
回転のときは、デフォルトスピードの5のままだと、わずかに行き過ぎる感じだったので、スピードを最低の1にしてみました。動画は、何度かやって一番綺麗に止まってくれたときのものですが、毎回このように正確に行くかというと、そうでもありません。その都度微妙にずれるのは、以前にも書きましたがEdisonの宿命です。それでも、これくらい制御できてることは称賛に値すると思うのですが。
ところで、動画を見て、「スピード最低の1でもこんなに速いの?」と思った方がいたかもしれません。Edisonのスピードは、EdScratchでは1〜10のプルダウンで指定することになっています。この速度差がどれくらいあるのか、1秒間直進させて測ってみました。すると、スピード1で1秒間に約15.5cm直進、スピード10では、約38cm直進しました。22.5cmくらいの差を10段階で分割しているわけで、単純計算ではスピード1あたり2.25cmの差になるはずですが、実際に図ってみると、このへんはかなり微妙です。そんなにきれいに動作が制御されるわけではありません。このくらいなら10段階も細分せずに5段階くらいでも良かったのではないかと思うのですが。
このスピード差は回転のときはもっと体感しにくい感じになります。回転させたときのスピード1と5の見た目の差はそれほどないように見えてしまうのです。であるならば、回転するときは、ズレの可能性を考えて、常にスピードは1にしておくほうが良いかもしれません。
ちょっと細かい話に終止しましたが、何度も言いますが、この価格帯のロボットで、プログラム上でここまで細かく制御できて、かつ動作もそれなりに正確というロボットを僕は他に知りません。それだけでも、このEdisonというのはなかなかよくできたロボットだと思うのです。
さて、次回は、ちょっと変数いじってみようかと思ってます。