Mac OS X でETロボコンに出よう！(EV3RT 環境構築編）


~~2015年度参加者向けの記事を2016年度向けに修正しました[2016/5/3]~~
2019年度向けに修正しました[2019/05/03]
[β7-1 で動作チェックをしていたところBluetooth PANでapp ファイルを転送後，起動すると50%以上の確率で正常に動作しない現象が出ています。](http://www.toppers.jp/ETROBO-ML/2018-May/000112.html)
 こちらの対応が、β7-２で行われたのでETロボコンではβ7-1は使用しない方がよいでしょう。


いちユーザーが独断と偏見でまとめてるページです。

EV3RTの環境構築を行うにあたっては、まずは[TOPPERS EV3RT の公式サイト](http://dev.toppers.jp/trac_user/ev3pf/wiki/DevEnv#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB)を見ましょう。
以下、「TOPPERS EV3RT の公式サイト」を「公式サイト」と呼びます。

基本的には公式サイトに必要最低限のことは書いてあるのですが、公式サイトを見てもよくわからなかった人向けに、ここではもうちょっと詳しく書いています。また、サンプルコードはETロボコンのサンプルコードを使用しています。
コマンドを使い慣れてない方向けに、Finderを使ってできることは極力Finderで行っています。コマンドでできる方はコマンドに置き替えてください。

~~※ この記事の検証は yosemite(10.10.5) で行っています。~~
※ この記事の検証は Sierra(10.12.6) で行っています。

## 開発プラットフォームEV3RTのダウンロード＆インストール
ダウンロードページ
http://dev.toppers.jp/trac_user/ev3pf/wiki/Download
から最新版のEV3RTをダウンロードしてください。
最新版をおすすめします。**特にβ6以降ディレクトリ構成やコマンドが変更されている為、特別な事情がない限りβ6-2より新しいものを使ってください。β7-1もやめておきましょう**
どのバージョンを使うにしてもチーム内でバージョンを揃えましょう。
ただし、同じバージョンで複数出ているものは(例えば、β6,β6-1,β6-2,β6-3など)不具合修正が含まれていることが多いので、一番新しいものにしましょう。

以下、~~最新版~~β7-2をインストールする場合を例示します。 
もし新しいバージョンが出ていたら、適宜読み替えてください。(おそらく2019年度用に新しいHRP２系はリリースされないでしょう。)

(2020/12/6追記)
2020/04/15にバージョン1.0がリリースされています。
2020年度はETロボコンがシミュレータ大会だったため、バージョン1.0を試している人はあまりいないのでは？と想定しています。
なので、初めて使う人が個人で試してみる分には、ベータ版が無難かなと思いますが、何かの大会で使う場合には、バージョンが指定されている場合があるので気をつけてください。
(2020/12/6追記ここまで)


ダウンロードしたev3rt-beta7-2-release.zipをダブルクリックして解凍しましょう。
ここでは、ホームディレクトリ（ユーザ名のフォルダ直下）に置くことにします。
（後々パスが短い方が入力が楽なので）
「ev3rt-beta7-2-release」を「ユーザ名のフォルダ(Finderの「よく使う項目」一覧の中の「家のアイコン」がついているところ)」の中にドラッグアンドドロップで移動します。
名前が長いのでフォルダ名を「ev3rt-beta7-2-release」を「ev3rt」に変更することにします。（コマンドで長い名前を入力するのが間違えやすく、面倒なだけなので、別に変えなくてもいいですよ。複数バージョン入れる場合はバージョンは残しておいた方がよいかも[^8]）
[^8]: 私は歴代揃っている都合上、ev3rt-b7−2にしていますが、ここでは長くなるのでev3rtとしています。

コマンドで解凍するのでターミナルを開きます。
ターミナルで以下のコマンドを入力し、ev3rtフォルダ内に移動します。[^2]

```
cd ~/ev3rt
```

hrp2.tar.xzファイルを解凍します。

```
tar xvf hrp2.tar.xz
```
hrp2というフォルダが作成されます。
これでプラットフォームのインストールはおしまいです。
次に行きましょう。

[^2]: ターミナルは「アプリケーション->ユーティリティー」の中にあります。


# 開発環境（クロスコンパイラ，ツール）のインストール
ここからは「OS X →環境構築方法」のリンク先にある以下のページについての補足です。
http://dev.toppers.jp/trac_user/ev3pf/wiki/DevEnvMac

## (GNU ARM じゃなくて普通の)gcc のインストール

make コマンドが必要なためインストールするようです。なので特にこだわりがなければ、Xcodeをインストールするのが無難かと。(Xcodeは何かと使いますしね)ここではXcodeを使う前提で話を進めます。

### インストールされているか確認する方法
make コマンドが実行できるかどうかでインストールされているかどうかを判断します。そもそも、makeコマンドが必要なためインストールするのですから、makeコマンドを実行してみるのが確実でしょう。

ターミナルを開き make -v と入力してみましょう[^3]

```
make -v
```
[^3]: 通常は`$ make -v`のようにプロンプトの後ろにコマンドを書く形式で書かれますが、`$`からコピペしてしまって？？ってなってる人を何度か見たので、このページでは`$`を記載しないことにしました。

#### a) バージョン番号が表示された
コマンドが実行できましたね。新たにインストールする必要はありません。

#### b) `"make"コマンドを実行するには、コマンドライン・デベロッパ・ツールが必要です。`というメッセージが表示された
メッセージの左下にある「Xcodeを入手」ボタンをクリックすると、App store の Xcode のページが表示されます。ここから入手してください。

#### c) エラーが表示された
App store からXcodeをインストールしてください。

 ※ yosemite の場合、インストールされていないコマンドを実行するとb)のメッセージが表示されるようです
 ※ OSのバージョンによってb)のメッセージが変わっているかもしれません

## mkimage のインストール

http://dev.toppers.jp/trac_user/ev3pf/attachment/wiki/DevEnvMac/mkimage
公式サイトの mkimangeのインストールのところにある「ここ」からリンクされているのが上記URLです。
ちょっと古いですが、β7-2でも問題なく使えています。

downloading をクリックするとmkimage（拡張子なし）というファイルがダウンロードされます。

公式サイトには、「パスの通ったディレクトリに置く 」という説明の下に以下のように書かれています。

```
cp mkimage /usr/local/bin/
```

## `/usr/local/bin/` がパスが通ったディレクトリかどうか確認するには？

`echo $PATH`
と入力してみましょう。私の場合は以下のように表示されました。

```
/usr/local/gcc-arm-none-eabi-6-2017-q2-update/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```

※ インストールしているものによって設定は異なりますから、同じ結果にならなくても問題ありません。あくまで一例として載せただけです。[^7]

[^7]: この記事作成後にPhtyonを入れたりしてるので、すでに変わっています

PATHに複数のパスが指定されている場合は`:`で連結されます。私の場合はパスに/usr/local/binがパスに指定されているので、/usr/local/binに置けば、パスの通ったディレクトリに置いたことになります。
もし、ここに/usr/local/binが出てこなかった場合には、パスに/usr/local/binを追加しましょう。（追加方法は後述の「GNUツールチェーンのインストール」の「パスの通し方」を参考にしてください）

※ いまいち何を言ってるかわからないなあという方は「$PATH」を検索して(ぐぐって)みましょう。

/usr/local/bin にパスが通っていることが確認できたら、mkimageを/usr/local/bin 配下に置きましょう。


特に設定を変更していない場合は、ダウンロードフォルダにダウンロードされているでしょうから、ダウンロードフォルダに移動します。

```
cd ~/Downloads/
```

公式サイトではcpコマンドでコピーするようになっていますが、ダウンロードディレクトリに残していてもしょうがないので、mv コマンドで移動してしまうのがよいでしょう。
（mv コマンドはwindowsの「切り取り→貼り付け」と同じです）

```
mv  mkimage /usr/local/bin/
```

mkimage に実行権限がついているか確認しておきます。

```
ls -l /usr/local/bin/mkimage
```

実行権限がついていない場合は、chmodで変更しておきましょう。

```
chmod 755 /usr/local/bin/mkimage
```

## GNUツールチェーンのインストール
一般的には最新のものをインストールするのがよいですが、公式サイトに「動作確認済バージョン：~~gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2~~ gcc-arm-none-eabi-5_4-2016q2-20160622-mac.tar.bz2 」という記述があります。
リリースされているEV3RTはこのバージョンで動作確認をしています、ということなので、初心者の方は同じバージョンを使うのが無難と思います。
ちなみに私はgcc-arm-none-eabi-6-2017-q2-updateを使用していますが今のところ問題なく使えています。
EV3RTのダウンロードサイトの「変更履歴」の[β７](https://dev.toppers.jp/trac_user/ev3pf/wiki/Download#a2017-04-12VersionBeta7)のところに、
> Support compilation with GCC 6.3.1 (gcc-arm-none-eabi-6-2017-q1-update)

とあるので、こちらでも良いでしょう。
以降、私の環境に合わせてgcc-arm-none-eabi-6-2017-q2-updateを使用することにします。

リンク先にたくさんあってどれかわからないという場合は、下記URLから探しましょう。
~~https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update~~
~~https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update~~
(2020/12/06追記：上記２つは実績もあるので、使っても問題ないと思いますが、新しくインストールする場合は、gcc-arm-none-eabi-6-2017-q2-updateで良いかなと思います。（個人の見解です）)
このページだと、該当バージョンのみ表示されます。

### GNUツールチェーンのダウンロードURLが変わっている
https://launchpad.net/gcc-arm-embedded にあるように、
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm こちらで配布されるように変わっています。[^10]
ダウンロードページは↓です。
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
こんな感じのページです。
![スクリーンショット 2020-12-06 21.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34097/4698e788-172b-453f-b26e-e60ae133dd1d.png)


コメント欄で指摘があるように、 **現時点での最新版 9-2020-q2-updateは使えませんでした。**
**β7-xのビルドには、この記事で使っている`gcc-arm-none-eabi-6-2017-q2-update`をおすすめします。**
どのバージョンからNGなのかは調査していません。

なので、この画面の下の方にスクロールして、丸のついたところの**＋**をクリックして開きます。
![スクリーンショット 2020-12-06 21.29.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34097/bcb91e91-7989-e2c7-5ec9-8c2d24affc57.png)

開いたら、以下のような感じなので、Macのところのダウンロードボタンをクリックしてください。
![スクリーンショット 2020-12-06 21.30.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34097/b3798af9-8d5a-acb7-5aa0-71a3a0b74ae6.png)



[^10]: 新しい方のページに行ってしまうとGNU-AとGNU-RMどっち？と迷ってしまいそうですが、(MindstomrsはARM9)ここで示してくれているので明確ですね！

公式ページには「上記パッケージを解凍し，適当なディレクトリに配置したあと，gcc-arm-none-eabi-5_4-2016q2/bin/binにパスを通してください． 」とあります。適当ってどこ？と迷ったら、「/usr/local/」に置くことにしましょう。[^4]
こちらはev3rtと違ってディレクトリの名前は変えないように。

yosemite の場合はFinderでダブルクリックすれば解凍できます。
解凍したら、ターミナルで`/usr/local/`の下に置きましょう。

解凍したフォルダに移動します。（以下の例では「ダウンロード」フォルダに「6-2017-q2-update」バージョンをダウンロードして解凍したと想定しています。）

```
cd ~/Downloads
mv gcc-arm-none-eabi-6-2017-q2-update /usr/local/
```

[^4]: /opt は MacPorts が使用するので、特別こだわりがなければ使わない方が無難かなと思います。

### パスの通し方
bashの場合、以下のコマンドで.bash_profileにパスの設定を追加できます。bashを使っていない人はツールに応じた設定を行ってください。「6-2017-q2-update」のところはご自身のバージョンを入れてください。

```
echo "export PATH=/usr/local/gcc-arm-none-eabi-6-2017-q2-update/bin:\$PATH" >> ~/.bash_profile
```

以下のコマンドで設定を反映させます。

```
source ~/.bash_profile
```

## EV3RTのコンフィギュレータ（cfg）のインストール

「開発プラットフォームEV3RTのダウンロード＆インストール」でインストールしたEV3RTの中に配置します。

http://toppers.jp/cfg-download.html
上記URLにある「コンフィギュレータ Release 1.9.4（64bit MacOSX用バイナリ）」をクリックするとダウンロードできます。
Finderでダウンロードした「cfg-osx-static-1_9_4.tar.gz」をダブルクリックして解凍します。

拡張子のない「cfg」というファイルが出てきます。これがコンフィギュレータです。このファイルを `~/ev3rt/hrp2/cfg/cfg/`の中に置きます。
Finderでドラッグアンドドロップすれば移動できます。
(「cfg.exe」とか「cfg.cpp」等々が入っているフォルダです。cfgが繰り返されているので間違えないでね)

~~（2016/5/3現在、新しいバージョン1.9.5がリリースされていますが、公式サイトでは1.9.4を使っているのでこちらを使うのが無難でしょう）~~
（時は経過して1.9.6がリリースされています。ちなみにhrp2ディレクトリの中にはWindows用のcfgが入っているのですが（なので、Windowsではこの手順は不要なのです）こちらは1.9.3です。
ぶっちゃけこれらのどれでも良いと思いますが、おそらくhrp2を使っている人のうち、多くの人が使っているであろう1.9.4が無難かなとも思います。ご参考まで）

これで環境構築はできました！
次はいよいよビルドです。
以降、Mac独自の方法ではなく、Windowsの人も同じです。(パスは違うと思いますが)

## サンプルプログラムのダウンロード

ここではTOPPERSのサンプルではなくETロボコン実行委員会が提供しているサンプルプログラムを使用します。[^5]
[^5]: EV3RTのworkspaceフォルダ内にあるサンプルも同様にしてビルド&実行できます。
サンプルプログラムは以下の場所にあります。
~~http://sourceforge.net/projects/etroboev3/files/SampleCode/~~
~~お持ちの走行体に合わせて、~~

~~* EV3wayの場合・・・EV3way_EV3RT_sample.tgz~~
~~* ErikeVの場合・・・ETrikeV_EV3RT_sample.tgz~~
~~をダウンロードしてください。~~
上記取り消し線で消してあるものは、2015年度用のものです。

2016年度以降は以下になります。
https://github.com/ETrobocon/etroboEV3/wiki/sample_program
４行目あたりの「一括ダウンロード」からリンクされているzipにサンプルコードが入っています。

zipの中身は基本的に以下のものと同じです。

```
git clone https://github.com/ETrobocon/etroboEV3.git
```

zipもしくはgit cloneした中からsample_c4というディレクトリを探してください。

```
zipの場合
etroboEV3-master/SampleCode/EV3way_EV3RT_sample/sample_c4

git cloneの場合
etroboEV3/SampleCode/EV3way_EV3RT_sample/sample_c4
```

workspaceディレクトリ内にサンプルコードを配置します。

EV3Wayの場合は、解凍してできた「sample_c4」フォルダを「ev3rt/hrp2/sdk/workspace」の中にコピーします。
~~ETrikeVの場合は「ETrikeV_EV3RT_sample」フォルダを「ev3rt/hrp2/sdk/workspace」の中にコピーします。~~(サンプルコードの公開はプライマリー向けのみとなりました)


# サンプルアプリケーションのビルドと実行
ここではBluetoothを使わない方法を紹介します。Bluetoothの設定等は[Bluetooth編](http://qiita.com/drafts/683db7be0a3c93f03fe9)で紹介しています。

動的ローディング形式とスタンドアローン形式の2種類があります。違いやそれぞれの特徴は公式ページを参照してください。

## 動的ローディング形式の場合

### アプリケーションのビルド
ビルドはworkspaceフォルダで行います。コマンドでworkspaceフォルダに移動します。

```
cd ~/ev3rt/hrp2/sdk/workspace
```

サンプルプログラムをビルドします。

```
make app=sample_c4
```

正常終了した場合、workspaceフォルダにappというファイルができます。
以前ビルド時に生成されたものが残っている可能性があるので、作成されたかどうかは、appファイルの日付が更新されているかどうかで判断してください。

### SDカードにコピーする

動的ローディング形式の場合、初回のみアプリケーションの他にアプリケーションローダもコピーする必要があります。
（ただし、EV3RTのバージョンが変わった場合はそのバージョン用のアプリケーションローダをコピーし直してください）

ここではBluetooth経由ではなく、SDカードに直接コピーします。

 1. ev3rt/sdcard フォルダの中にあるev3rtフォルダとuImageファイルをSDカードにコピーします。[^6]
 1. コピーしたev3rtフォルダの中のappsフォルダに先ほどビルドしたappファイルをコピーします。


実行できるのはappsフォルダ内にあるもののみです。
appファイルはリネームして使用できます。複数のアプリケーションを入れておきたい場合は名前を変えてappsフォルダに入れてください。

 [^6]: 後述するスタンドアローン形式用のuImageを入れないようにね

## スタンドアローン形式の場合

### アプリケーションのビルド
ビルドはworkspaceフォルダで行います。コマンドでworkspaceフォルダに移動します。

```
cd ~/ev3rt/hrp2/sdk/workspace
```

サンプルプログラムをビルドします。

```
make img=sample_c4
```

正常終了した場合、workspaceフォルダにuImageというファイルができます。
以前ビルド時に生成されたものが残っている可能性があるので、作成されたかどうかは、uImageファイルの日付が更新されているかどうかで判断してください。

### SDカードにコピーする
uImageをSDカードのルートフォルダにコピーします。

## 実行方法
サンプルプログラムのreadmeファイルに書かれています。

## 公式サイトのFAQのおすすめ

公式サイトの[FAQ](http://dev.toppers.jp/trac_user/ev3pf/wiki/FAQ#FAQ) のページ、地味に更新されています。周期ハンドラの作り方が簡潔に説明されてたりもします。時々チェックしましょう。