ETロボコンにQt Creatorで参加してきました
はじめに
この投稿はQt Advent Calendar 2014 - QiitaとETロボコン Advent Calendar 2014 - Adventarのマルチポストな記事です。12月6日分です。
ETロボコンの紹介、Qt CreatorでnxtOSEKの開発環境を構築した手順など書いていきます。
Qtシール。ここしか貼るとこなかってん。。。
ETロボコンとは
正式名称「ETソフトウェアデザインロボットコンテスト」。
5年後、15年後に世界をリードするエンジニアの育成を目指し、若手、初級エンジニア、および中級エンジニア向けに、分析・設計モデリング開発、製品サービスの企画開発にチャレンジする機会を提供する。(公式ページより引用)
LEGO社のマインドストームというロボット教育向けのブロックで全チーム同一のロボットを組み立て、ソフトウェアの設計審査および走行競技の評価を競う、というコンテストです。
ハードウェアはマインドストームNXT*1。
参加登録
ETロボコンは今年から以下の2部門、3クラスに分かれています。
プライマリークラスよりアドバンストクラスの方が要求される技術レベル(設計・実装とも)が高く、アーキテクトはさらに企画・提案力を求められる審査内容になっています。
今回は初参加のうえ集まったメンバーがほぼ組み込み未経験者、NXTの使用経験もなし、ということでプライマリークラスに参加しました。
会社に打診したところ参加登録費・機材購入費・旅費交通費・宿泊費は支弁してくれるということで、企業枠での登録となりました。
チーム名は決定時にたまたま連れて行っていたうちの息子の名前(いずみ)から「いずみん」になりましあばばばば。
開発環境
OSとか
とりあえずJAVA分からんしC言語では書きたくないしC++だよね、ということでnxtOSEKを使用。
拡張NXTファームウェアで開発していたのだけれど東海地区大会直前にプログラムサイズが大きくなってリンクできなくなったので慌ててNXT BIOSに変更。
IDEといえばQt Creator!!
やっと本題です。
一応チームリーダーであるAtsushi4が
「どうしても普段使い慣れたQt Creatorじゃなきゃやだやだやだーーー」
とうちの3歳児*3ばりに駄々をこねて勝手に開発環境をセットアップしました。
Qt Creator初めての方も見られるかもしれないので、セットアップした内容を順番に説明します。
(nxtOSEKの環境はインストール済みの前提)
プロジェクトの作成
- 適当な、空白やマルチバイト文字を含まないフォルダに適当な名前のproファイルを作成します。ここではsampleフォルダにsample.proを作成したとします。
- 同じフォルダにnxtOSEK用のMakefileとかoilファイルも置いておきます。
- sample.proをQt Creatorで開きます。
それから、以下の設定をsample.proに追加していきます。
- Qt CreatorはデフォルトでQtライブラリを使用するようになっているので、これを使用しない設定をしておきます。
- nxtOSEKのヘッダファイルが見えるようにインクルードパスを追加
- qmakeがnxtOSEK用のMakefileを上書きしないように、qmakeの出力ファイル名を指定
- Makefile、oilファイルなどをQt Creatorで簡単に開けるようにプロジェクトに追加
- Qt Creatorのプロジェクトに追加したソースからnxtOSEKのMakefileにインクルードできるソースリストを出力するように設定
sample.pro
CONFIG -= app_bundle CONFIG -= qt # OSEK Path NXTOSEK_ROOT = ../../../../ INCLUDEPATH += \ $$NXTOSEK_ROOT/toppers_osec/include \ $$NXTOSEK_ROOT/ecrobot \ $$NXTOSEK_ROOT/toppers_jsp/windev/devicemanager \ $$NXTOSEK_ROOT/ecrobot/c \ $$NXTOSEK_ROOT/ecrobot/c++/util \ $$NXTOSEK_ROOT/ecrobot/c++/device \ $$NXTOSEK_ROOT/lejos_nxj/src/nxtvm/platform/nxt \ $$NXTOSEK_ROOT/ecrobot/nxtway_gs_balancer QMAKE_MAKEFILE = qt_makefile OTHER_FILES += \ balancer_param.c \ mascet.oil \ Makefile # Generate source list for nxtOSEK system(echo "TARGET_CPP_SOURCES=$$SOURCES>nxt_sources")
ビルド設定
nxtOSEK用のバイナリをビルドするための設定をします。この設定はプロジェクトごとに必要です。面倒です。(.proとかでできる方法があれば教えてメガネの人。)
- Qt Creator一番左のモードセレクタから「プロジェクト」を選択
- 「概要」の「シャドウビルド」のチェックを外す
- 「ビルドステップ」の「Make」の「詳細」を開き、「(MinGWのbin)\mingw32-make.exeの代わりに使用するコマンド」に"make"を、「Make引数」に"all"を指定
- 「ビルド時の環境変数」から「PATH」を探して先頭にcygwinのbinディレクトリのパスを追加
- 上の方の「実行」タブ(?)を押して、「実行」の「追加」ボタンから「カスタム実行ファイル」を選択
- 「実行ファイル」に"bash"、引数に"appflash.sh"(NXT BIOSの場合)を指定
また、自動生成したソースリストをnxtOSEK用のMakefileから見えるようにしておきます。
nxtOSEK用のMakefileに1行追加
include nxt_sources
これでQt Creatorの補完やジャンプ、検索、リファクタリングも使えるし、Ctrl+Shift+BでNXT用バイナリのビルドが、Ctrl+RでNXTへの転送ができるようになりました。
Qt Creatorの便利な使い方については、たすくせんせー(Tasuku Suzuki (@task_jp) | Twitter)が昨日の記事で紹介されているのでそちらをどうぞ。
Qt Creator を便利に使いこなそう - Qiita
その他
NXT用のMakefileとQt Creatorのproファイル両方に共通する設定(nxtOSEKのルートパス、ソースリストのファイル名など)をpriファイルにまとめておいて両方からincludeするようにしたり、Qt Creatorの自動ビルドチェックで波線が出ないように基本型をifdefで分けてtypedefしたりとかしていました。詳しくは割愛。
PC側ツール
走行中のNXTとBluetooth通信してスタート指示を出したりログを受信したりするツールもQtで作りました。Qt5はQSerialPortがあって良かった!connectもラムダが書けて快適です。
NXTへのコマンド送信、ログの受信、コースと走行経路の表示など。
走行練習用に適当に作ったのですが結局チャンピオンシップ大会本番まで活躍しました。
こんな画面
走行経路書いてみたり
ズームだって簡単
おわりに
組み込み分からん、モデリング分からん、NXT買ってみてもどこから触ったらいいか分からん、という状態から始まり、月に1~2度週末に生涯学習センターの会議室を借りて集合、それ以外は家事と育児の合間を縫ってコーディング、レプリカコースが無いのでA3コピー用紙に印刷して貼り合わせたり、スケジューリングをミスってモデル提出2週間前にモデルを書き始めたり、東海地区大会前日の帰宅2時間前にナニカが降りてきてマップ走行が突然成功したりと、波乱万丈でしたがともかくチャンピオンシップ大会優勝してきました。
ETロボコン2014大会詳細 | チャンピオンシップ大会【ETロボコン2014公式サイト】
ETロボコン2014ランキング
チームメンバーの頑張りはもちろん、東海地区大会の後レプリカコースをお貸しくださったビッグマウスさんをはじめ応援してくださった皆さんに、育児のピンチに関西から駆けつけてくれた妻の両親に、そして家族に、感謝。
QtとQt Creatorにもね。