2024年12月26日

015-1.EV3で楽しむスクラッチ3.0-第7回「映像の動きに反応するロボットを作る」

ここでは「スクラッチ(Scratch)」を使ってレゴ マインドストームEV3のプログラミングを行う方法を紹介します。スクラッチとはMITメディアラボという研究施設のライフロングキンダーガーテングループによって開発されているプログラムのツールです。スクラッチの特徴としては、教育向けに作られていて親しみやすいこと、無償で使えること、Webブラウザでも動作すること、直観的にプログラムが作れることなどがあります。(文/松原拓也)

◆ 「ビデオモーションセンサー」を使う

今回はスクラッチの拡張機能を使って、映像の動きに反応するロボットのプログラムを作ってみたいと思います。 必要なものはカメラを搭載したパソコンです。もし、カメラが付いていない場合には、PCカメラを用意してUSBポートに接続しましょう。
まず下準備として、スクラッチのエディタ画面の左下にある「拡張機能を追加」ボタンを押します。
ボタンを押すと、このような画面が表示されます。 そして、「ビデオモーションセンサー」を選択します。 これは カメラを使って画像を撮影して、その画像の動きを検出することができる機能です。

ビデオモーションセンサーに関するブロックです。
「ビデオモーション>~のとき」「~のビデオの~」「ビデオを~にする」「ビデオの透明度を~にする」の4種類があります。

「~のビデオの~」ブロックの使って、動きを検出する例です(video1.sb3)。
「スプライトのビデオのモーション」と設定することで、スプライト周辺の映像(ビデオ)の動き(モーション)を数値として取り出すことができます。 ここでは「~と~言う」ブロックを使って、動きの値を画面に表示します。

プログラムの実行結果です。
カメラの撮影した映像が半透明で表示されます。画像の透明度は自由に設定することができます。
画面には映像の「動き」が数値として表示されます。ただし、普通に手を振っただけでは値は「0」のままです。振っている手をスプライトと重ねる必要があります。

映像の「動き(モーション)」ではなく「向き」に反応させることもできます(video2.sb3)。
これは映像の動いている向きにスプライトを動かすというプログラムです。

プログラムの実行結果です。
画面左上の「angle」という変数はブロックの検出した値です。 この値はスプライトにとっての手の角度を表しています。

◆ 複数のスプライトに反応させる

複数のスプライトを使って動きを検出することもできます(video3.sb3)。
複数のスプライトを置くには画面右下の「スプライトを選択」というボタンをクリックします。クリックすると、スプライトの一覧が表示されますが、ここでは「Cat」を選びます。これで、猫のスプライトを2つ表示させることができます。
このスプライトの1つ1つにプログラムを組み込みます。「ビデオモーション>~のとき」というブロックを使って、動きを検出します。

プログラムの実行結果です。
カメラの映像が画面に表示されます。手をスプライトに重ねると、重なっている方のスプライトから「こんにちは!」と表示されます。 検出させるコツとして、手は振り続ける必要があります。手の動きが止まっていると背景だと認識されてしまい、反応しない場合があります。

◆ ロボットを動かす

続いて、カメラの映像に反応するロボットを作りたいと思います。 このように2つのモーターを搭載したロボットを用意しましょう。モーターはぞれぞれポートAとポートDに接続しています。

プログラムを手早く作りたいので、別のプログラムからブロックを部分的にコピーします。
前々回の連載に作成した「pen2」というプログラムを開きます。そして、 「forward」「turn」という自作のブロックを「バックパック」というウインドウにドラッグ・アンド・ドロップします。これで、バックパックの中にブロックがコピーされます。

プログラムを新規で作成して、スプライトを修正します。
最初から存在していた「スプライト1」は削除します。
そして、「Arrow1」「Arrow2」「Arrow3」という名前のスプライトを作ります。 スプライトを作成するには、「スプライトを選択」ボタンをクリックしてます。ここでは「Arrow」という画像を選択します。
Arrowのスプライトは上・下・左・右の向きの矢印が登録されています。初期設定では左向きが選択されています。「コスチューム」のタブを選択して、「Arrow1」=左向き矢印、「Arrow2」=上向き矢印、「Arrow3」=右向き矢印に画像を設定します。

バックパックに格納しておいた「forward」と「turn」ブロックを取り出します。この時、スプライトの移動に関するブロックは不要になりますので、削除しておきます。

スプライトの1つ1つにプログラムを組み込みます。
これは、「Arrow1(左向き矢印)」の中にあるプログラムです(video4.sb3)。

「Arrow2(上向き矢印)」の中にあるプログラムです。

「Arrow3(右向き矢印)」の中にあるプログラムです。

プログラムの実行結果です。
カメラの撮影した映像の動きに反応してロボットが動きます。 動いているものは何でも構いませんが、ここでは手を動かしています。
・手を「左向き矢印」に重ねるとロボットは左せん回します。
・手を「上向き矢印」に重ねるとロボットは前進します。
・手を「右向き矢印」に重ねるとロボットは右せん回します。

いかがでしょうか。スクラッチ3.0を使えば手軽にEV3のプログラミングができるということが伝わったかと思います。もっと高度なプログラムを作りたいという場合には、EV3ソフトウエアがおすすめです。以上で「EV3で楽しむスクラッチ3.0」の連載は終了です。

今回作成したプログラム(スクラッチ3.0用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。