※注意:1234567890. BACK

ubuntu環境でNXCプログラミング(インストールと設定)

ここで使用しますヘッダファイル(JissenPBL.h)およびEV3 BricxCCプログラムランチャー(run.rbf)は、 九州工業大学 花沢明俊先生が作成されたファイルを使用しております。 ファイル使用に当たり、快く了承していただき感謝いたします。 このヘッダファイルの著作権およびその他の権利は九州工業大学 花沢明俊先生にあります。

ここでは、Linux環境であるubuntuを使用してEV3プログラムの作成、コンパイル、転送、実行を行います。

環境構築に必要な手順は下記の通りです。

  1. 必要なファイルのダウンロードとインストールおよび環境設定
  2. EV3へのリモート接続

です。
ここで使用しますLinux環境(ubuntu 16.04 LTS)のインストールと設定の説明は省略します。

必要なファイルのダウンロードとインストール

最初にEV3(arm)のクロスコンパイル環境をダウンロードします。ターミナルを起動後、下記のコマンドを入力します。(1行です)

wget -c http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/
public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-
gnu.tar.bz2

次にインストールするディレクトリを作成して、先程ダウンロードしたファイルを展開します。今回はCodeSourceryという名前でディレクトリを作成します。

mkdir CodeSourcerytar

-jxvf ~/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C
~/CodeSourcery/

PATHの設定を行います。

echo export PATH=$PATH:~/CodeSourcery/arm-2009q1/bin/ >> ~/.bashrc && .
~/.bashrc

ubuntuデスクトップ環境では、C言語などの開発環境などのインストール作業が別途必要です。 必要であれば、ライブラリなどのインストールを行います。

sudo apt-get install gcc-multilib

コンパイル環境の確認は

arm-none-linux-gnueabi-gcc -v

で確認ができます。

次に、BricxCC環境の構築でも使用したEV3ソースコード(lms2012)、lms_apiを作業ディレクトリに置きます。また、九州工業大学 花沢明俊先生が作成されたファイル(JissenPBL.h、EV3 BricxCCプログラムランチャー run.rbf)も同様に作業ディレクトリに置きます。

EV3へのリモート接続

EV3へのリモート接続を行う方法は、有線LAN無線LANの2通りあります。どちらもDHCPサーバが必要となりますので、有線・無線LANルータ等が必要となります。
著者の環境では、下記の無線LAN、有線LANアダプターでの動作確認ができています(2016年8月1日現在)。

  • ONKYO UWF-1(無線)
  • BUFFALO LUA3-U2-ATX(有線)
  • PLANEX USB-LAN100R(有線)
  • PCI UE-100TX-G3(有線)

EV3ファームウェアバージョン 1.08E

LANアダプタをEV3側面のUSBポートに取り付けてルータと接続してEV3の電源を入れます。有線LANアダプタを認識すると、Brick Info の一番下にIPアドレスが表示されます(表示されない場合は、LANアダプタが未対応かIP取得ができていない可能性があります)。無線LANの場合は、EV3画面からWiFiの使用とConnectionsによる接続が必要です。


表示されるIPアドレスは環境により異なります。

ターミナルからtelnetコマンドを使用してEV3へログインします(初期設定のEV3はtelnet接続のみ)。

login ID はroot、パスワード無しです。
EV3へログインした後、外部PCからsshとscpコマンドが使用できるようにdropbearコマンドを実行します。

dropbear

これでEV3との接続は完了です。

音をならしてみよう

サンプルプログラムを例にコンパイル – 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.rsf Boo.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上で動かしてみましょう

EV3からプログラムを実行する

前のページでは、EV3にリモートログインを行いプログラムを実行しました。次にEV3のボタン操作で転送したプログラムを実行する方法を説明します。ここでは、九州工業大学 花沢明俊先生が作成されたファイル run.rbf を使用します。
EV3上の prjs の中にディレクトリ「Run」を作成します。

<< EV3 >>
cd prjs
mkdir Run

先程の実行ファイルSoundと同じようにrun.rbfファイルをEV3上に転送します。転送先は、作成した「Run」ディレクトリの中です。

<< PC >>
scp ./run.rbf root@192.168.11.XXX:/home/root/lms2012/prjs/Run/.

run.rbf は、/home/root/lms2012/prjs/ 上のAppという名前のファイルを実行するスクリプトです。そのため、先程作成したサウンドの実行ファイル「Sound」を「App」に名前を変更します。

<< EV3 >>
mv Sound App

EV3本体のファイルメニューからフォルダ「Run」を選択、その中に「run」がありますので実行します。

その他のサンプルプログラムはBricxCCによるEV3プログラミングを参考にしてください