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

[著者]
藤吉弘亘・藤井隆司・鈴木裕利・石井成郎

ティップス

tips

EV3: 環境設定とサンプルプログラムのコンパイル・転送中・上級者向け

※ここで使用しますヘッダファイル(JissenPBL.h)およびEV3 BricxCCプログラムランチャー(run.rbf)は、 九州工業大学 花沢明俊先生が作成されたファイルを使用しております。 ファイル使用に当たり、快く了承していただき感謝いたします。 このヘッダファイルの著作権およびその他の権利は九州工業大学 花沢明俊先生にあります。
※ すべてのNXC命令の動作を確認しておりません。動作しない命令やエラーが発生する可能性があります。その場合、もし良い解決方法、エラーの回避方法がございましたらご連絡いただけますと幸いです。

・ 音をならしてみよう
 サンプルプログラムを例にコンパイル - EV3への転送 - プログラムの実行を行います。
 音を鳴らすプログラムを作成します。下記のサンプルプログラムを作成します。ファイル名は「Sound.c」とします。

// Sample Program "Sound.c"
#include "./jissenPBL.h"

int main()
{
OutputInit();
SoundInit();

 PlayTone(440,1000); //frq(Hz),duration
 Wait(1000);

 PlayToneEx(330,400,100); //frq(Hz),duration,vol(100 only?)
 Wait(1000);

 PlayFileEx("/home/root/lms2012/prjs/Bravo.rsf",100,false); //Filename,vol,loop
 Wait(1000);

 PlayFile("/home/root/lms2012/prjs/Boo.rsf"); //Filename only
 Wait(1000);

 OnFwdEx(OUT_BC,70,0);
 Wait(1000);
 Off(OUT_BC);

}

 サウンドファイルBravo.rsfBoo.rsf はEV3-SW(Windows、Mac環境)からコピーします。詳しくはBricxCCによるEV3プログラミング(音をならしてみよう)を参考にしてください。 また、九州工業大学 花沢明俊先生が作成されたファイル JissenPBL.h もSound.c と同じディレクトリに置きます。

・ jissenPBL.h ファイルの修正
 jissenPBL.h ファイルの最初の部分(#include 部分)を下記のように追加・編集します。「(パス)」の部分はlms2012とlms_apiディレクトリの絶対パスを記述します。

#include <string.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h>
#include "lms2012/lms2012.h"

#include "/(パス)/lms_api/ev3_output.h"
#include "/(パス)/lms_api/ev3_output.c"
#include "/(パス)/lms_api/ev3_command.h"
#include "/(パス)/lms_api/ev3_command.c"
#include "/(パス)/lms_api/ev3_lcd.h"
#include "/(パス)/lms_api/ev3_lcd.c"
#include "/(パス)/lms_api/ev3_sound.h"
#include "/(パス)/lms_api/ev3_sound.c"
#include "/(パス)/lms_api/ev3_button.h"
#include "/(パス)/lms_api/ev3_button.c"
#include "/(パス)/lms_api/ev3_constants.h"
#include "/(パス)/lms_api/ev3_timer.h"
#include "/(パス)/lms_api/ev3_timer.c"

次にインクルードするファイルの間で2重定義が発生しているため、コンパイル時にwarning表示が表示されます。そのままでも問題は無いのですが、定義があるファイルの中を一部コメントアウトします。
・ ev3_lcd.h の52、54、55、128行目をコメント「//」にします。

#define LCD_BUFFER_SIZE (LCD_BYTE_WIDTH * LCD_HEIGHT)
→ // #define LCD_BUFFER_SIZE (LCD_BYTE_WIDTH * LCD_HEIGHT)

typedef byte IMGDATA; // < Image base type
→ // typedef byte IMGDATA; //< Image base type

typedef IMGDATA* IP; // < Instruction pointer type
→ // typedef IMGDATA* IP; // < Instruction pointer type

bool LcdPicture(char Color, short X, short Y, IP pBitmap);
→ // bool LcdPicture(char Color, short X, short Y, IP pBitmap);


・ ev3_constants.h の52、53、54、330行をコメント「//」にします。

#define LCD_WIDTH 178 /* < LCD horizontal pixels */
#define LCD_HEIGHT 128 /* < LCD vertical pixels */
#define TOPLINE_HEIGHT 10 /* < Top line vertical pixels */
   :
#define FILENAME_SIZE 120 // < Max filename size including path, name...
      ↓
// #define LCD_WIDTH 178 /* < LCD horizontal pixels */
// #define LCD_HEIGHT 128 /* < LCD vertical pixels */
// #define TOPLINE_HEIGHT 10 /* < Top line vertical pixels */
   :
// #define FILENAME_SIZE 120 // < Max filename size including path, name...


・ ev3_button.c の21行目をコメント「//」にします。

#define BUTTON_DEBOUNCE_TIME 10
→ //#define BUTTON_DEBOUNCE_TIME 10


・ ev3_sound.c の42行目をコメント「//」にします。

#define SOUND_FILE_BUFFER_SIZE (SOUND_CHUNK + 2) // < 12.8 mS @ 8KHz
→ //#define SOUND_FILE_BUFFER_SIZE (SOUND_CHUNK + 2) // < 12.8 mS


・ ev3_lcd.c の42行目をコメント「//」にします。

#define MIN(a,b) (((a < b) ? (a) : (b)))
→ //#define MIN(a,b) (((a < b) ? (a) : (b)))


・ ev3_output.c の25~30行目と1441行目をコメント「//」にします。

typedef struct
{
int TachoCounts;
char Speed;
int TachoSensor;
} MOTORDATA;
  ↓
/*
typedef struct
{
int TachoCounts;
char Speed;
int TachoSensor;
} MOTORDATA;
*/

Wait(MS_2); // 2ms between checks
→ //Wait(MS_2); // 2ms between checks


・ コンパイルとファイルの転送

 コンパイルは、作業ディレクトリ上で下記のコマンドを入力します。

arm-none-linux-gnueabi-gcc Sound.c -o Sound

コンパイルが成功するとEV3上で動作する実行ファイル「Sound」が生成されます。
 次に実行ファイル「Sound」をEV3に転送して実行します。 ファイルの転送にはscpコマンドを使用します(転送先EV3のIPアドレスは環境により異なります)。

scp ./Sound root@192.168.11.XXX:/home/root/lms2012/prjs/.

パスワードは無しです。サウンドファイルBravo.rsfBoo.rsf も同様にEV3へ転送しておきます。
 ファイルの実行はEV3本体へログインして実行ファイルを実行します。

ssh root@192.168.11.XXX
cd lms2012/prjs/
./Sound

プログラムの実行時には有線LANの場合ケーブルに気を付けてください。USB-LANアダプタはEV3本体に接続したままにしてください。もしUSBが外れた場合は、EV3の再起動が必要になります。



次に転送したプログラムをEV3上で動かしてみましょう

← ubuntu環境でNXCプログラミング(インストールと設定) |  プログラムの実行 →

book

実践ロボットプログラミング
LEGO Mindstorms NXTで目指せロボコン!
本体価格: 2,300円/ISBN: 978-4-7649-0378-4
BUY NOW!!

教育用レゴ マインドストームNXT
次世代のロボット教材で、生徒や学生たちは
自分の手で実際に動かしながら、科学、技術と情報、
工学を楽しく、体験的に学習できます。
MORE

↑page top