実践ロボットプログラミング
LEGO Mindstorms EV3 で目指せロボコン！

WEB：http://www.robot-programming.jp/
著者：藤吉弘亘, 藤井隆司, 鈴木裕利, 石井成郎
E-mail：support@robot-programming.jp

1

■音をならしてみる (p.35〜)

2

音を鳴らすプログラムの設計図(PAD)• 指定したサウンドファイルを無限ループで再生

1
音を鳴らす

無限ループ

Bravoと音を鳴らす

2
処理の流れ

１秒間待機

3

PAD(Problem Analysis Diagram)はプログラムの設計図
PADの構成部品：
処理：

選択：

反復：

3

プログラムの準備（今回のみ）• ワーキングディレクトリをUSBメモリ上に作成
1. USBメモリを挿入してオートマウントする
2. /media/(ユーザ名)/(USBメモリ名)に移動
pc > cd /media/(ユーザ名)/(USBメモリ名)

3. ワーキングディレクトリ”LEGO”を作成
pc > mkdir LEGO
pc > cd LEGO

4. プログラムをコピーして解凍
pc > cp /usr/local/dg/LEGO/EV3_Sample/EV3Sample.zip ./pc > unzip EV3Sample.zip!4

NXCプログラム (p.37 sound.c)#include “./jissenPBL.h”
int main(){SoundInit();
ButtonLedInit();}while(true){
PlayFile("/home/root/lms2012/prjs/Bravo.rsf");
Wait(1000);if(ButtonPressed(BTN1)) break;}return 0;

注意点：・拡張子は .c・サウンドファイル「Brabo.rsf」もEV3へ転送が必要・ファイル名、プログラムの中では日本語は使用できない (すべて半角英数)!5sound.c の説明#include “./jissenPBL.h”
int main(){SoundInit();
ButtonLedInit();

ヘッダファイルの読み込み

1}

while(true){
2 PlayFile("/home/root/lms2012/prjs/Bravo.rsf");
3 Wait(1000);if(ButtonPressed(BTN1)) break;}return 0;・SoundInit();
サウンドの初期化
・PlayFile(ディレクトリ/ファイル名);
再生するサウンドファイルの場所とファイル名
・Wait(時間);直前の状態の保持、単位はティック(１ティック＝1ms)

while文を用いたループ• while(true){処理} とすると無限ループ

while (true){
繰り返す処理//force-quit
if(ButtonPressed(BTN1)) break;}
Off(OUT_BC);

無限ループのプログラムを作成する時は：プログラムの緊急停止（無限ループ脱出）のための処理を必ず入れておくこと
無限ループ脱出後の処理として、モータを停止する命令を追加すること
7

ヘッダファイル (jissenPBL.h)• ヘッダファイル- NXCコマンドを使用できるように関数が定義されている
int getSensorGyro(unsigned char chnum)
int getSensorUSonic(unsigned char chnum)
int getSensorColor(unsigned char chnum)
int getSensorTouch(unsigned char chnum)
int getSensorNXT(unsigned char chnum)
int getSensorHTAcc(unsigned char chnum)
int getSensor(int chnum)
int setSensorPort(int chnum, int funcnum, int modenum)int startSensor()
void initSensor()
void closeSensor()…

!8コンパイルとファイルの転送 (p.41〜)• プログラムのコンパイル
1. プログラム”sound.c”をクロスコンパイラでコンパイル
pc > arm-none-linux-gnueabi-gcc sound.c -o soundsound という名前の実行ファイルを生成
オプション“-o sound”を付けないと ”a.out” という名前の実行ファイルが生成
コンパイルエラーが発生した場合は、エラー文章を読み修正

2. コンパイルしたファイル”sound”に実行権を付与する
pc > chmod a+x soundEV3の設定（Wi-Fi設定）
1. EV3「 」メニュー「WiFi」を選択
2. デジタルラボ内の無線LAN環境「○○○○」へ接続(Connection)
3. EV3「 」「Brick Info」からIPアドレスを確認

PW: lego2017

1.

IPアドレスとは：パケットを送受信する機器を判別するための番号!10EV3へのリモートログインと設定• ubuntuメニューから「Term」と入力してターミナルを起動• telnetコマンドを使用してEV3へ接続
pc > telnet 192.168.11.17 (先ほど調べたEV3のIPアドレス)• login：ログイン名「root」でログイン（パスワードは不要）• ログイン後、”dropbear”と入力 (ファイル転送を可能にする)
EV3# > dropbear!11

EV3のデイレクトリ構造• EV３のOS：Linux‒ ワーキングディレクトリ：/home/root/lms2012/prjs
EV3のディレクトリ構造/bindevhomerootbootetcuserlib・・・

ホームディレクトリ

lms2012prjs

ワークスペース12EV3へファイルの転送と実行• EV3へファイルを転送（PC上で実行）‒ 実行ファイル”sound”とサウンドファイル”Bravo.rsf”をコピーする
pc > scp sound root@(EV3のIP):/home/root/lms2012/prjs/
pc > scp Bravo.rsf root@(EV3のIP):/home/root/lms2012/prjs/• EV3上で実行ファイルsoundを実行‒ ワーキングディレクトリに移動してから実行
EV3# > cd /home/root/lms2012/prjs/
EV3# > ./sound!13

EV3へ実行スクリプトのコピー（初回１回のみ）• EV3上でディレクトリ「Run」の作成
EV3# > cd /home/root/lms2012/prjs/
EV3# > mkdir Run• EV3へファイルを転送(PCから実行)
pc > scp run.rbf root@(EV3のIP):/home/root/lms2012/prjs/Run/!14

EV3メニューからプログラムの実行• EV3上で実行ファイルの名前をAppに変更
EV3# > cd /home/root/lms2012/prjs/
EV3# > mv sound App• EV3メニューのRun内のrunを実行!15

プログラムの実行• 実行前にすべきこと‒ 安全確認‒ プログラムのアルゴリズムを頭の中で実行• 実行時の注意‒ ロボットの動作をよく観察し、設計図(PAD)通りにアルゴリズムが実現できているかを確認‒ ロボットが思い通りに動かないときは、ロボットがどこまで設計図通りに動いたかを調べ、プログラムを修正（デバッグ）する

16トライ＆エラーによる問題解決• ロボットを思い通りに動かすには実現したいロボット

アルゴリズムを考える

設計図の作成プログラムの作成

トライ&エラーを繰り返す
無限ループ

実行
True

終了

ロボットは設計図通りに動いた？

False

プログラムの修正→設計図通りにロボットが動くまでトライ&エラーを繰り返して問題解決
17