検索
  • 原田洋一

Edisonの新しいプログラミングツールEdScratchを使ってみる(2)

 いや、このタイトルのブログの(1)を公開してから1年以上たってしまいました(汗) ようやっと2回目の記事です。


 さて、今回はロボットプログラミングの定番である、ライントレースを自分で作ってみました。 入門用のプログラミングツールであるEdblocksには条件分岐のブロックがありません。そのため、「ライントレース」というブロックが用意されていたのですが、こちらはScratchライクな普通のプログラミングツールです。なので条件分岐や変数も使えます。ごく一般的なプログラミングツールとなっています。


 左のようにすると、その場で左右に首をふるだけで、前に進みません。spin という命令は、左右のタイヤを逆方向に回転させて動かす命令ですね。これだと前進動作要素が含まれないので、その場で左右に動くだけになってしまいます。なので、これではライントレースになりません。EV3のライントレースで、ステアリング値を100/-100にしてしまったときと同じ状態ですね。



 そこで、spinではなく、turn forwards を使ってみます。これで、やや動きはぎこちないですが、前には進むようになりました。これでライントレースの基本プログラムは完成です。あとは数値のチューニングですね。


 degreeの値を5くらいにすると、前に進む速度が少し速くなって、いい感じになりました。ただ、degreeの数値はどれくらいのRのカーブをトレースするかによって変わる数値ですね。degreeだけでなくspeedも併せてコースにとっての最適値を探していってください。



 もう一つモーターを動かすブロックにset right/left motor to forwards というコマンドがあったので、これを使ってみたのですが、これではまったくライントレースになりませんでした。set motor のコマンドは単独ではモーターを動作させないコマンドですね。このブロックの後にwait 1 sec とかを置いてあげるとその秒数だけ動作します。






 さて、Edscratchでは当然変数を扱うことができます。変数を作る画面は左の画面です。これもScratchを使ったことがある人にはおなじみの画面に見えます。


まず試しに、testという名前の変数を作ってみました。すると、下に変数を扱うブロックが見えるようになります。これも本家Scratchと同じ感じですね。ところがここにScratchでは見たことないブロックが出現します。





 え? bit shift ?? ビット単位で変数を操作するらしきブロックが出現するんですが、これ、バイナリレベルでの話ですよね。本家Scratchにもこんなブロックないです。なんで急にこんなブロックが出現するのかよくわかりません。メーカーのHPを見ても、その辺のサンプルや解説とか一切ないので、とりあえずここでは無視することにしました(^^;)。


 さらに試していくと、変数はScratchとはかなり異なる仕様であることがわかります。本家Scratchでは、変数のブロックは、数値のパラメーターを扱うブロックにはどこにでも入れることができたはずです。ところがEdscratchでは、これが制限されています。つまり、数値のパラメーターなのに、変数のブロックを入れることができるものとできないものがあるんです。そして、それがブロックの見た目からは全くわかりません。


 たとえば、driveブロックの○cmとかの数字パラメータのところには、変数ブロックを入れることができません。 Scratchだけでなく、EV3のプログラミングツールなどでも進む距離(モーター回転数等)を変数にして、ループで繰り返すたびにその数値を変えるというようなことが普通にできるのですが、Edisonでは、どうもそういう使い方はできまないようです。


 もちろんOperationのカテゴリにある、演算系のブロックには使えるのですが、それ以外でほとんど使えないんです。どうやら、使えない方が普通のようで、使える場所の方が少ないというのが正直なところのようです。ちょっと意地になっていろいろ探したら、repeatの回数のところと、waitブロックでだけは使えました。








 ところが、waitブロックは、なぜかsecの方は使えないのに、millisecondsだけは使えるようになってるという謎仕様。何故こんなことになっているのかがわからないのですが、正直この辺の仕様はもう少し整理した方が良いのではないかと思います。それとも、何か深い理由があるのでしょうか? メーカーのHPを見てみたのですが、その辺が納得できるような解説はありませんでした。



 このように、変数については、ちょっと?な部分もあるのですが、ロボットのプログラミングで変数を使うというのは、かなりレベルが上がってからの話です。入門として使うレベルではこのEdscratchは必要十分な機能を備えています。英語というハードルはありますが、Edisonを入手したら是非一度は試してみていただきたいと思います。



199回の閲覧