目的
大学の講義でNXTを用いた授業があるが,授業で提供されている資料が古く,Macの人が環境構築できない現状である.
そのため,備忘録として自分が環境構築した方法を残しておく.
エラー対処については適時追加する.
環境
- MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
- macOS 10.13 (High Sierra)
手順
1.Wineのインストール
Windowsのファイルを実行するために用いる.
brewを用いるため,導入していない人は自分で調べて導入してほしい.
以下のコマンドを実行してwineを導入する.
$ brew install wine
実行後,/usr/local/bin/wineconsole
のファイルが存在することを確認する.
2.YAGARTOのインストール
コンパイラツールであるYAGARTOをダウンロードする.
その前に,NXTで用いる環境をまとめるディレクトリを作る.
筆者はホームディレクトリ直下にNXT
というディレクトリを作成した.
こちらのサイトから
yagarto-bu-2.21_gcc-4.6.2-c-c++_nl-1.19.0_gdb-7.3.1_eabi_intelmac_20111119.dmg
をダウンロードする.
ダウンロード後,dmgを実行しyagarto-4.6.2
と出てくるので,先ほど作成したNXTに移して実行.
そうすると,yagarto-4.6.2
というディレクトリが出てくる.
このディレクトリをyagarto
に名前を変更する.
3.nxtOSEKのダウンロード
こちらのサイトからダウンロードする.
筆者はnxtOSEK_v218.zip
をダウンロードした.
ダウンロード終了後,2にて作成したNXT
の直下に配置する.
この時点でのNXT
内は以下のようになっている.
NXT
├── nxtOSEK
├── yagarto
└── yagarto-4.6.2.app
しかし,現状では必要ファイルが不足している.
そのため,こちらからosek_os-1.1.lzh
をダウンロードする.
その後,解凍をして出てきたtoppers_osek/sg/sg.exe
をNXT/nxtOSEK/toppers_osek/sg
にコピーをする.
この時点でのNXT/nxtOSEK/toppers_osek/sg
内は以下のようになっている.
NXT/nxtOSEK/toppers_osek/sg
├── impl_oil
├── lego_nxt.sgt
└── sg.exe
4.NeXTToolのインストール
NXTにプログラムを送信するために用いる.
NeXT Tools
ではなくNeXTTool
である為間違えないように.
Download for Mac OSX (universal binary)
とある場所からダウンロードする.
ダウンロード後,2で作成したNXT
の直下に配置する.
この時点でのNXT
内は以下のようになっている.
NXT
├── nexttool
├── nxtOSEK
├── yagarto
└── yagarto-4.6.2.app
5.NXT Fantom Driverのインストール
パソコンにNXTを認識させるために用いる.
こちらのサイトからダウンロードする.
ダウンロード後,解凍して出てきたMAC legodriver.pkg
を実行する.
6.makeのための準備
現在のままだとCygwinを用いるようになっているため,Macでも問題がないように変更する.
以下の4箇所を探して変更する.各々の設定に合わせて変更してほしい.
9行目
- GNUARM_ROOT = /cygdrive/C/cygwin/GNUARM
+ GNUARM_ROOT = /Users/vivid344/NXT/yagarto # YAGARTOのパス
14行目
- NEXTTOOL_ROOT = /cygdrive/C/cygwin/nexttool
+ NEXTTOOL_ROOT = /Users/vivid344/NXT # nexttoolがあるパス
21行目
- TARGET_PREFIX :=arm-elf
+ TARGET_PREFIX :=arm-none-eabi
38行目
- NEXTTOOL = NeXTTool.exe
+ NEXTTOOL = nexttool
また,Wineや,cygpathで現状だとエラーが起きるため変更を行う.
Cで開発を行う場合は以下の2箇所の修正を行う.
312行目
- WINECONSOLE := /Applications/Wine.app/Contents/MacOS/startwine wineconsole
+ WINECONSOLE := /usr/local/bin/wineconsole
335〜336行目
- $(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg $(shell cygpath -m -w ${TOPPERS_OSEK_OIL_SOURCE}) \
- -os=ECC2 -I$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/impl_oil -template=$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/lego_nxt.sgt
+ $(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg.exe $(TOPPERS_OSEK_OIL_SOURCE) -os=ECC2 -I${TOPPERS_OSEK_ROOT_SG}/sg/impl_oil -template=${TOPPERS_OSEK_ROOT_SG}/sg/lego_nxt.sgt
C++で開発を行う場合は以下の2箇所の修正を行う.
316行目
- WINECONSOLE := /Applications/Wine.app/Contents/MacOS/startwine wineconsole
+ WINECONSOLE := /usr/local/bin/wineconsole
339〜340行目
- $(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg $(shell cygpath -m -w ${TOPPERS_OSEK_OIL_SOURCE}) \
- -os=ECC2 -I$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/impl_oil -template=$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/lego_nxt.sgt
+ $(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg.exe $(TOPPERS_OSEK_OIL_SOURCE) -os=ECC2 -I${TOPPERS_OSEK_ROOT_SG}/sg/impl_oil -template=${TOPPERS_OSEK_ROOT_SG}/sg/lego_nxt.sgt
続いて,各関数を呼び出すために必要なファイルをmakeする.
NXT/nxtOSEK/ecrobot/c
にて以下のコマンドを実行する.
$ make all
$ make release
これをNXT/nxtOSEK/ecrobot/c++
,NXT/nxtOSEK/ecrobot/bios
,NXT/nxtOSEK/ecrobot/nxtway_gs_balancer/
にても同様に行う.
7.実際にmakeする
Cで行う人はNXT/nxtOSEK/samples_c/helloworld
C++で行う人はNXT/nxtOSEK/samples_c++/cpp/Helloworld
にて以下のコマンドを実行する.
$ make all
実行後,.rxe
ファイルが生成される確認する.
生成されない場合,6にて変更した箇所が間違っている可能性がある.
8.ロボットで実行する
NXTとPCをUSBで繋ぎ,NXTの電源を入れる.
その後以下のコマンドを実行する.
$ ./rxeflash.sh
その後,ロボット側で実行し,該当ファイルがあるかを確認.
以上で終了.
まとめ
以上で筆者の環境では構築することが出来た.
今後新しく開発をするときには,NXT/nxtOSEK/
の下で開発をする.
またMakefileのNXTOSEK_ROOT
を各々の環境に書き換えてからmakeを行うように.