ETロボコン(2015/南関東地区)に会社でチームを組んで参加するのですが、なかなか大変そう&楽しそうでテンションが上ります。今回から機体がEV3 に変わったこともあり、あまり開発環境絡みの情報が見当たりません。というわけで、週末の時間使って開発環境周りを調べてみました。
ETロボコンのプログラム(C/C++)を、IDE(NetBeans)を使っていい感じに編集できるまでの道のりを確立したので、備忘録として載せておきます。
Eclipse は癖が強くて個人的に好きになれないのと、(一応試したところ)ヘッダのインクルードパスの設定が思ったとおりに行かなかったので、NetBeans を使っていきます。
本記事ではビルドできるところまで持っていきます。
あとは、本記事では触れませんが、プロジェクトの実行時に、半自動プログラム転送スクリプトを走らせることで…IDE上でコードの修正から実機での検証までを一気に通すことが出来ます!(前に書いた Teraterm マクロを応用して、転送からBluetoothを使用してログを受信、そしてJava製自作ログ解析ツールへの連携まで行います!)
基本的な開発環境を揃える
http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT
TOPPERS/EV3RT のサイトを参考に、Cygwin上でビルド出来る環境を構築します。ブログ執筆時のバージョンは、β5 です 。
workspace フォルダ以下に、モジュールを置いて、workspace/Makefile を使用してビルドする基本的なビルド手順を、IDE(NetBeans) でサポートする方針で行きます。
このあとの手順では、C:\cygwin\home\hrp2 に TOPPERS/EV3 を展開し、付属のサンプルである test-cpp をビルドするようにプロジェクト等を設定していきます。
IDEのインストール
https://netbeans.org/downloads/index.html
IDE(NetBeans ) のC++向けパッケージをインストールします。ブログ執筆時のバージョンは 8.0.2。
IDEの設定
まずは NetBeansを起動して、下記のとおり設定を開きます。
メニュー [メニュー] → [ツール] → [オプション] → [C/C++]
ここで、TOPPERS/EV3RT の開発に使うクロスコンパイラを登録します。
登録後はこんな感じです。Cコンパイラ、C++コンパイラ、アセンブラは Gnu Tools ARM Embedded のインストール先にあるgcc, g++, as を設定します。make は cygwin と一緒にインストールされた make コマンドを設定します(もしかしたら、MinGW の make でもいいかもしれない。動作未確認)。
プロジェクトの作成
以下の手順でプロジェクトを作っていきます。
- メニュー [ファイル] → [新規プロジェクト]
- カテゴリ[C/C++], プロジェクト[既存のソースを使用するC/C++プロジェクト]を選択し、次へ
- 次の通り設定して次へ
- [既存のソースフォルダ]をビルド対象のソースファイルが置いてあるフォルダに設定
(例:C:\cygwin\home\naou\hrp2\workspace\test-cpp ) - ツールコレクションを、前の手順で作成した設定を使用するように設定する(例: Cygwin_4.x_ARM)
- [構成モード]をカスタムに設定する
- [既存のソースフォルダ]をビルド対象のソースファイルが置いてあるフォルダに設定
- [既存のMakefile] をTOPPERS/EV3RT の workspace 以下に置いてある Makefile を使用するように設定し次へ(例: C:/cygwin/home/naou/hrp2/workspace/Makefile)
- [ビルド・コマンド]を 「${MAKE} -f Makefile mod=(モジュール名) PWD=(workspaceのパス) 」と 設定し次へ。なお、この際パスの区切り文字は”/”(スラッシュ)で記載すると良いようです。
(例: ${MAKE} -f Makefile mod=test-cpp PWD=/home/naou/hrp2/workspace) ※
ちなみに、PWDを設定するのは、IDEからmakeを実行した際に、環境変数PWDが空になる問題を回避するためです。
※ 「C:/cygwin/ …」 とWindowsのパスでも良いようです。しかし、make 4.0 では Windowsのパスを処理できずエラーとなるようです(make の古いバージョンを使っている場合、もしくは執筆時点の最新版 make 4.1を使用している場合は問題が起きない)
- 残りはデフォルトの設定のまま次へを押して、最後までいったら終了
少し小細工
あとはインクルードパスを設定すれば良い・・・と言いたいところですが、多少小細工が必要です。
というのも、TOPPERS/EV3RTのプログラムは、Make時に生成されるヘッダーファイルを参照するのです。つまり、ビルド時までインクルードファイルが存在しないということ…。そうなると、IDEの文法チェックが常にエラーを吐く形となりあまり気分がよくありません。
エラーを吐かせたままでも開発できますが、気持よく開発するために対策します。
まずは Workspace (例: C:/cygwin/home/naou/hrp2/workspace/) に移動し、プロジェクトをappとしてビルドします(例: make app=test-cpp)。
すると、Workspace 以下に OBJ フォルダができます。workspace/OBJ_dummy フォルダを作成し、この中に、workspace/OBJ/ev3api_cfg.h と workspace/OBJ/kernel_cfg.h をコピーします。この OBJ_dummy以下に置いたヘッダファイルを開発中に参照することで、ヘッダーが見つからないエラーを回避します。
インクルード・パスの設定
最後にヘッダーファイルが見つからない問題を解決し、補完対象を正しく出すために、インクルード・パスの設定を行っていきます。
メニュー [メニュー] → [ツール] → [オプション] → [C/C++] で、前の手順で作成したツール・コレクションを選びます。
コード支援タブを選び、Cコンパイラ 及び C++ コンパイラに次のパスを登録します。(C:\cygwin\home\naou の部分は、実際にインストールしたパスを指定)
- C:\cygwin\home\naou\hrp2\workspace\common\lib\libcpp-test\include (test-cppが使用している。通常使わない)
- C:\cygwin\home\naou\hrp2\workspace\common\lib\libcpp-ev3\include (C++コンパイラのみ)
- C:\cygwin\home\naou\hrp2\target\ev3_gcc\api\include
- C:\cygwin\home\naou\hrp2\include
- C:\cygwin\home\naou\hrp2\target\ev3_gcc
- C:\cygwin\home\naou\hrp2\arch
- C:\cygwin\home\naou\hrp2\arch\arm_gcc\am1808
- C:\cygwin\home\naou\hrp2\workspace\OBJ_dummy
これで、test-cppプロジェクトをIDE上でちゃんと表示できて、ビルドまで出来るはずです!
やっぱ、補完があるって素晴らしい!
結構ややこしい手順でしたが、ざっくり書いてみました。わかりにくい箇所もあるかと思いますが、分からない場所などありましたら、コメントください!(`・ω・´)
こんにちは、はじめまして。
初めてのコメント、失礼します。
プログラミング初心者です。
ブログを読ませていただき、なんとか環境までは整いました。
ありがとうございます。
自分の希望として、EV3のモータの回転数等を取得し、
Bluetoothを通してPC側に送信し、ログを取りたいと考えているのですが。
ブログでも今後の流れとして書いてあったので、楽しみに待っているのですが。
ちょっと、自分で試行錯誤してやってみたのですが、方法が全くわかりません…。
もしよろしかったら、教えていただけないでしょうか。よろしくお願いします。
コメントありがとうございます!
実は会社の教育施策としてEV3触ってるので、あまり踏み入ったことをブログに書きにくい現状があります。。。
会社で書いたコードなどは持ち出せないので。。。
(環境構築までは実機不要なのでプライベートでもいくらでも出来るのですが…)
ノウハウはたくさん溜まってきてるので、
具体的にわからないこととか教えていただけましたらお答えできるかもしれません。