新型コロナウイルスの感染拡大で、ステイホームを余儀なくされている今日この頃
皆さん、いかがお過ごしでしょうか(笑)
ずっと家にいるのも大変ですよね・・・
この時間でなにをやろうか考えていて、ふと・・・そうだEV3を使って見よう・・・と考えました。
我が家のチームはNXTまでしか使ったことがなく、EV3は購入したものの、一回箱から出しただけ、の状態でした。
たまに、M&Yのロボットで Rescue-Maze(正式には Rescue-B 笑)のデモをやるのに、見せるのはNXTのロボットだから、現在のチームには参考にならないかも・・・
しかもそのときに、偉そうに「EV3に沢山のセンサーを接続したいのなら、このロボットみたいにArduinoに接続すれば沢山のセンサーを接続できるよ」と説明したりしてます。本当に、EV3とArduinoが接続できるのか・・・自分で確認しないとダメだなぁ・・・と常々思っていたことを実験してみます。
では、EV3でNXCを動かす環境を作ってみます・・・
参考にしたのは、このページ
丁寧に書かれているので、とにかく手順通りにやってみます。
■手順01 BricxCCの通常版、テストリリース版、linux tool、lms apiの4つのパッケージのダウンロード
http://bricxcc.sourceforge.net/
Downloading の latest version から最新版のBricxCCをダウンロードするのですが・・・すでにリンク切れのようです。幸いにも test release のリンクの方にはいろいろと揃っているようなので、こちらから調達します。
最新版として bricxcc_setup_33810_20130220.exe
テストリリース版として test_release20131007.zip
あと2つ
linux_tools.zip
lms_api.zip
をダウンロードします。
■手順02 G++ クロスコンパイラ環境 for ARMプロセッサ(EV3)のダウンロード
https://sourcery.mentor.com/GNUToolchain/package4574/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.exe
arm-2009q1-203-arm-none-linux-gnueabi.exe をダウンロードします。
■手順03 EV3ソースコード のダウンロード
https://github.com/mindboards/ev3sources
GitHubの Clone or Download をクリックして Download zip で全体をダウンロードします。
ev3sources-master.zip をダウンロードします。
展開(解凍)して・・・必要なのは、その中の ev3sources/lms2012/lms2012/sourceの下のファイルを lms2012フォルダを作成して、その下に格納します。
■手順04 EV3最新ファームウェアのダウンロード
これは、別途最新版にしたので省略
■手順05 BricxCCのBricxCCのインストール
(手順01で入手した)bricxccbricxcc_setup_33810_20130220.exe
を実行して、インストールします。
インストールするディレクトリとして(デフォルトではなく) C:\BricxCC を指定しました。
■手順06 G++ クロスコンパイラ環境のインストール
(手順02で入手した)arm-2009q1-203-arm-none-linux-gnueabi.exe を実行して CodeSourcery Lite のインストールを行います。
■手順07 BricxCCテストリリース版のインストール
(手順01で入手した)test_release20131007.zip を展開して、先ほどインストールした BricxCC に上書きします。
(丸ごとコピーして、上書きする)
■手順08 linux_tools.zip の解凍
(手順01で入手した)linux_tools.zip を解凍すると make.exe と rm.exe の2つのファイルが出てくるので、C:\BricxCC ディレクトリに格納します。
■手順09 lms_api.zipの解凍
(手順01で入手した)lms_api.zipを解凍して、フォルダ(lms_api)ごと C:\BricxCC ディレクトリに格納します。
■手順10 lms2012フォルダの格納
EV3ソースコードから取り出した(手順03で作成した)lms2012フォルダを C:\BricxCC ディレクトリに格納します。
■手順11 環境変数(PATH)の設定
画面左下の Windowsマークを右クリックして システム → システム情報→システムの詳細設定 でシステムのプロパティが開くので、詳細設定タブの環境変数をクリックします。
Pathを選択して 編集 をクリックして 変数値の最初に C:\BricxCC;C:\BricxCC\lms_api; を追記します。
■手順12 ヘッダファイル(JissenPBL.h)、EV3 BricxCCプログラムランチャー(run.rbf) のダウンロード
ヘッダファイル(JissenPBL.h)と EV3 BricxCCプログラムランチャー(run.rbf)をダウンロードします。
■手順13 JissennPBL.h の編集
(手順12で入手した)JissennPBL.h をメモ帳で開いて、#include の部分に追加します。
#include <sys/types.h> //追加
#include <sys/stat.h> //追加
#include //追加
#include "lms2012\lms2012.h"
#include "C:\BricxCC\lms_api\ev3_output.h"
#include "C:\BricxCC\lms_api\ev3_command.h"
#include "C:\BricxCC\lms_api\ev3_lcd.h"
#include "C:\BricxCC\lms_api\ev3_sound.h" //追加
#include "C:\BricxCC\lms_api\ev3_button.h" //追加
#include "C:\BricxCC\lms_api\ev3_constants.h" //追加
#include "C:\BricxCC\lms_api\ev3_timer.h" //追加
■手順14 二重宣言の解消
ヘッダファイル間で二重宣言されてしまっているため、このままコンパイルすると 通常ではエラーが発生してしまいます。 無理矢理ですが、この二重定義のままオブジェクトファイルの生成を行います。 この状態で一度、コンパイルを行います(コンパイルエラーが表示されます)。
⇒ここまで、すごく丁寧に書かれていた説明が、急にわからなくなりました。「一度コンパイルを行います」と言われても、何をどうやってやるのか、具体的な操作が書かれていません。う~ん、困った!
とりあえず、下の方に書いてあるモーターを動かすプログラムを入力してやってみました。
EV3をPCに接続し、EV3の電源を入れて・・・NXCを起動して、モーターを動かすプログラムを入力してみて、コンパイルします。
はい、エラーがドバっとでますね。
これで、続けていいのかなぁ
次に2重宣言のエラーとwarning表示を消します。C:\BricxCC\lms_api内にある ev3_lcd.h の内容を変更します。
ev3_lcd.h の52、54、55行目をコメント「//」にします。
#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 typeev3_constants.h
ev3_constants.h の内容を変更します。
ev3_constants.h も同じように52、53、54、330行をコメント「//」にします。
#define LCD_WIDTH 178 /*!< LCD horizontal pixels */
→ // #define LCD_WIDTH 178 /*!< LCD horizontal pixels */
#define LCD_HEIGHT 128 /*!< LCD vertical pixels */
→ // #define LCD_HEIGHT 128 /*!< LCD vertical pixels */
#define TOPLINE_HEIGHT 10 /*!< Top line vertical pixels */
→ // #define TOPLINE_HEIGHT 10 /*!< Top line vertical pixels */
#define FILENAME_SIZE 120 //!< Max filename size including path, name…
→ // #define FILENAME_SIZE 120 //!< Max filename size including path, name…
■手順15 NXCを起動
BricxCCを起動します。
Port に Automatic
BricType に EV3
Firmware に Linux
を選択します。
■手順16 モーターを動かす
File → NEW
// Sample Program “Motor.c”
#include < stdio.h >
#include < unistd.h >
#include “C:\BricxCC\lms_api\ev3_output.h”
#include “C:\BricxCC\lms_api\ev3_command.h”#include "jissenPBL.h"
int main()
{
if (!OutputInit())
{
return -1;
}
OnFwdEx(OUT_AB,70,0);
Wait(10000);
Off(OUT_AB);
}
このプラグラムを入力して、Motor.c としてセーブします。
「View」→「Project Manager」をクリックします。
「Files」内で右クリックして「Add」を選択して
C:\BricxCC\lms_api\ev3_button.c
C:\BricxCC\lms_api\ev3_command.c
C:\BricxCC\lms_api\ev3_lcd.c
C:\BricxCC\lms_api\ev3_output.c
C:\BricxCC\lms_api\ev3_sound.c
C:\BricxCC\lms_api\ev3_timer.c
これらのパスを追加します。
File→Open から 今作成したプロジェクトファイル Motor.prj を開きます。
それぞれのパスに C:\BricxCC\lms_api\ を追加します。
ここまでで、NXCがEV3で実施可能のハズなのですが・・・使えません。
エラーになります。
エラーログには
motor.c:2:21: error: stdio.h : No such file or directory
motor.c:3:22: error: unistd.h : No such file or directory
make: *** [motor] Error 1
と、エラーが出ます。
そもそも stdio.h が無い・・・
ぐぐったりしたけど・・・さすがに、これは、どうしようもない!?
どなたか、EV3でNXCを使っている方、環境設定のやりかたを教えてください。
追補・・・なんかいろいろといじっていたら、コンパイルができるようになりました。
はっきり言うと・・・なんで動くようになったのかわかりません。(苦笑)
別記事で原因を究明していきたいと思います・・・
続きの記事はこちら EV3でNXCをうごかしてみるプロジェクト 動いた!