top of page
  • 執筆者の写真原田洋一

mBotをScratchで動かしてみた!

更新日:2020年2月12日


さて、だいぶ間があいてしまいましたが、その後mBotをScratchで動かしてみたのでレポートします。

実はmBotを動かすのは、純正のScratchではなく、Makeblock社がScratchをベースにカスタマイズしたmBlockというアプリです。Scratch2.0はウェブアプリですが、こちらはインストール型のアプリとなっています。mBlockは、メーカーのHPからダウンロードします。

私はMacをメインマシンに使っているので、Mac用のアプリをダウンロードします。インストールして起動すると、普通にScratch2.0ですが、ネコがパンダに変わってます。さすが中国製^^;

よく見るとカテゴリーの欄に「ロボット」というメニューが追加されていて、ここにmBot向けの独自コマンドが並んでいます。それ以外のコマンドはScratch2.0と全く同じようです。

さて、次はmBotをBluetoothでペアリングします。まずMacの設定画面からBluetoothを開き、ペアリングを行います。ここまではすんなり行きました。マインドストームなどもそうですが、ロボットはペアリングした後にアプリケーションから接続することで利用可能になります。ところが、アプリケーションメニューの「接続」というところにBluetoothという項目があるのですが、これが何故かグレーアウトしていて選択できないのです。一体どうやればアプリからロボットが選択できるのか全くわかりません。

これには相当悩んだのですが、HPからDLできるmBlockのPDFドキュメント(英文)に解説がありました。これは、接続 > シリアルポート の下にある、/dev/tty.Makeblock-ELETSPPというのを選択するのだったのです。Bluetoothで接続するのに、シリアルポートのメニューから接続というのは想定外でした(笑) ただ、これを選べば何の問題もなくサクッとロボットは接続できました。Macを使っていると、マインドストームのBluetooth接続ってときどき不安定に感じることがあるのですが、今のところmBotではそういう不安定さは感じていません。でも、この接続方法はマニュアル見ないとわからないですねえ。

さて、つながった後に最初に、マインドストームで言う「ポートビュー」みたいなのがどこかにあるんだろうと思って、いろいろ探したのですが、どこにも見当たりません。拡張された「ロボット」のところにあるブロックを見ると、センサーのデータを返してくれるようなブロックがあります。ということは….

思いついてやってみたのは、Scratchでキャラクターにしゃべらせること。Scratchの「◯と言う」というコマンドを使ってみたわけです。これがうまくいきました。センサーの返り値がキャラクターの吹き出しとして表示されます。どこにもポートビューらしきものはないし、どうもこれが正しい使い方のようです。まあ、これで何とかなりますけど。でも、複数のセンサー値を表示するためには、テキストブロック使ってつなぐか、スプライト増やす必要がありますねえ(笑)

次は、mBotを動かすプログラムを作ってみました。

まずは、マインドストーム入門編でいつもやってる、前進、後進、右、左というのを作ってみます。

ロボットのコマンドリストの最初に、こういうコマンドがありましたので、まずこれを使ってみます。速さのプルダウンで正の速度が、0、50、100、255と4つ選べるようになっていたので、まずは50を選んでみました。ところが実行すると、プーンというモーターの音がするんですが、ロボットが動かない。あれ?と思って、次に100にしてみると普通に走る。どうも速さの数値が50では、ロボットが自重に負けてしまって走れないようなのです。数字を少しずつふやしてやってみると、55〜56あたりでようやく動き始めます。ところが、こういうギリギリの速度にすると、綺麗に両輪が同時に動き出してくれなかったりして、走り出すときにちょっと向きが変わってしまうというようなこともありました。なので、速度は60以上の設定がよさそうです。しかし、だとすると50をプリセット数値として選ぶ意味がよくわかりません。このへんかなりアバウトなものを感じます。(ちなみにこの数値はキーボードから任意の数字を入力可能です。ただ、最大値は255のようで、これ以上の数値は入力可能なのですが、ロボットのスピードは変わりませんでした)

実は、mBlockはこのコマンドだけでずっと走り続けるんですよね。マインドストームだと、ステアリングブロックのモードをONにすると、ループさせなきゃ走り続けないのですが、こっちはコマンド一つだけでずっと走る仕様なのですね。では、止めるためにはどうするのかと思ってブロックを探したのですが、止めるためのコマンドは見当たらない。ということは、速度を0にして止めるしかないのね、ということで、もう一つ速度を0にしたブロックを追加して再実行すると、これでロボットを止めることができました。この辺はマインドストームと違いますが、これは仕様の違いということでそういうもんなのだと思います。

また、マインドストームにある「回転数」「角度」のように、モーターの回転量を直接制御するコマンドは見当たりません。ということは、移動距離をプログラムするためには、「◯秒待つ」のブロックで動作時間を指定するしかなさそうです。

ということで、ようやくこういうプログラムになりました。速度と動作秒数の組み合わせで移動距離を指定するわけですね。

右、左に動かすには、もう一つ、左右それぞれのモーターに対して別々に命令するブロックがありましたので、これを使います。マインドストームで言うタンクブロックですね。ただ、こちらも一度実行するとそのままずっと動き続けるので、速度0と組み合わせて止めてあげないといけません。また、動作時間でしか制御できないため、90°向きを変えたい時などは、動作時間をはかって当たりをつけていく必要があります。

実験したところ、速度100と-100で左右のモーターを逆に動かす動作を0.57秒続けると、だいたい90°向きを変えてくれました。ところが、これを関数化して何度も繰り返すと、その都度微妙に角度が異なります。この辺もまあこれくらいアバウトなものだと思うしかないようです。

まあ、これでだいたいマインドストームのステアリングブロックと同じような制御ができました。定義ブロックを使って、こんなふうにしてみました。

ここまでやれば、迷路抜けのプログラムみたいなものは作りやすくなると思います。

ついでに、こんなプログラムも作ってみました。mBotのプログラムを指導する際は、まずはこんなプログラムでリモートコントロールしてみるところから入ってみるほうがいいかもしれません。

マインドストームに比べてしまうと、いろいろと使いにくい感じも受けるのですが、でも価格を考えるとなかなかおもしろいロボットだと思います。またmBlockにはiOS/Android対応のアプリ版があり、こちらはScratchの完全互換ではなくオリジナルぽい作りのようで、しかも最近バージョンアップしてチュートリアルが実装されたようです。こちらの方も、いずれレビューしてみたいと思います。

閲覧数:7,030回0件のコメント

最新記事

すべて表示
bottom of page