= サンプルアプリケーションのビルドと実行 =
{{{
#!html
}}}
== 実行形式とビルド方法 ==
本プラットフォームのアプリケーションは、以下の2つの方法で実行することができます。
* 動的ローディング形式:OSとアプリケーションの実行ファイルを分け、OS実行中に、ダイナミックローディング機能を使ってアプリケーションの実行ファイルだけをロードして実行する。
* スタンドアローン形式:ダイナミックローディング機能を使わず、OSとアプリケーションを1つの実行ファイルにして単独(スタンドアローン)で実行する。
== 動的ローディング形式(ダイナミックローディング機能を利用) ==
=== 動的ローディング形式とは? ===
動的ローディング形式は、ダイナミックローディング機能をもつアプリケーションローダ(apploader)を使って、SDカードに入れた、またはBluetooth等のシリアル通信で受信したアプリケーションの実行ファイル(ELF形式)をロードして動的に実行する形式です。
この実行形式には、以下の特徴があります。
__メリット__
* EV3をリセットすることなく、OS動作中にアプリケーションを書き換えることができます。
* アプリケーションを更新する度に、PCでアプリケーションの実行ファイルをSDカードに書き込む作業を省略できます。
* アプリケーションを更新した場合でも、Bluetoothを再接続する必要がありません。
* 複数のアプリケーションを1枚のSDカード(「/ev3rt/apps/」以下)に入れることができます。
* 高速にコンパイルすることができます。
* OSとデバイスドライバ等を変更しない限り、これらを再度コンパイルする必要はありません。
* アプリケーションの開発時には、アプリケーションだけコンパイルすれば良いので、コンパイル時間が短縮できます。
__注意事項__
* ローダとアプリケーションのインターフェスバージョン(PIL Version)を一致させる必要があります。
* ローダのPIL Versionが更新される場合、アプリケーションの再コンパイルが必要になります。
* アプリケーションの最大サイズの制限があります(ローダの設定に依存しますが、デフォルトは1MB)。
* アプリケーションのカーネルオブジェクトの数の制限があります(ローダの設定に依存、デフォルトは以下)。
|| '''カーネルオブジェクト''' || '''最大個数''' ||
|| タスク || 32 ||
|| セマフォ || 16 ||
|| イベントフラグ || 16 ||
|| データキュー || 16 ||
|| 優先度データキュー || 16 ||
|| ミューテックス || 16 ||
=== 動的ローディング形式用の実行ファイル(ELF形式)の生成 ===
① EV3RTのルートディレクトリ(hrp2)に移動します。
② ロードしたいアプリケーションのワークスペースに移動します。
* サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します。※ EV3RTのβ5-2 以前のバージョンを使っている場合には、[http://dev.toppers.jp/trac_user/ev3pf/wiki/FAQ#QEV3RTのバージョンをβ6に更新したらworkspaceディレクトリがなくなりましたどこに移動されたのでしょうか こちら]を参照してください。
{{{
$ cd sdk/workspace
}}}
③ 「make app=<アプリケーションのフォルダ名>」で、動的ローディング用実行ファイルをビルドします。※ EV3RTのβ5-2 以前のバージョンを使っている場合には、[http://dev.toppers.jp/trac_user/ev3pf/wiki/FAQ#Qダイナミックローディング用の実行ファイルを作成するためにmakemodフォルダ名と実行したら以下のように表示されましたこれはどんな意味でしょうか こちら]を参照してください。
* サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします。
{{{
$ make app=gyroboy
}}}
④ ビルドが正常に終了すると、以下のように「app」という動的ローディング用実行ファイルが生成されます。
[[Image(cygwin-mod-gyroboy-ls.png)]]
=== PCからEV3へのアプリケーションのロード方法の選択 ===
アプリケーションローダを実行して、生成されたアプリケーションのバイナリファイルをEV3にロード&実行することができます。 アプリケーションローダがSDカードに入っていない場合には、その uImage をSDカードのルートフォルダにコピーしておきます。
* デフォルトのアプリケーションローダの uImage は、ダウンロードしたEV3RTパッケージの sdcard/uImage ですので、これを使ってください。
* また、hrp2/base-workspace ディレクトリで、$ make app=loader コマンドを実行して生成される uImage でも構いません(上と同じものです)
① SDカードをEV3に差し込んで、EV3の電源を入れてEV3RTのアプリケーションローダを起動します
* ローダのGUIメニューが表示されたら起動は成功です
② EV3のアプリケーションローダのメニューで、アプリケーションをロードする方法をいくつか紹介します。
* SD card:SDカードに入っているアプリケーションをロードします。ロードするアプリケーションの実行ファイルを、予め、SDカードの「/ev3rt/apps/」に格納しておく必要があります。ロードしたいファイル名を選択すると、アプリケーションをロードして実行します。
* Bluetooth:Bluetoothで接続されたPCから、アプリケーションをロードします。
* 「[wiki:DevEnv#Bluetoothの接続 Bluetoothの接続方法]」を参考にして、予めPCとEV3のBluetoothペアリングを実施しておいてください。
* Serial port 1:シリアルケーブル接続されたPCから、アプリケーションをロードします。
==== SDカードによるアプリケーションのロード方法 ====
① EV3を起動する前に、PC上で、SDカードの /ev3rt/apps/ ディレクトリ以下に動的ローディング用実行ファイルをコピーしておきます。
② SDカードをEV3に挿し、EV3を起動します。アプリケーションローダのメニューで、「SD card」を選択し、上下ボタンで実行したいアプリケーションを選び、選択ボタンを押すとアプリケーションを実行できます。
* 戻るボタンを押すと、アプリケーションを終了し、ローダのメニューに戻ります。別のアプリケーションをロードすることができます。
==== SDカード+USBケーブルによるアプリケーションのロード方法 ====
① SDカードをEV3に挿し、EV3のアプリケーションローダを起動します。
② 以下のように、EV3とPCをUSBケーブルで接続します(PC側はUSBスタンダートのA型、EV3側はミニUSBのB型)。
[[Image(usb1.png)]] [[Image(usb2.png)]]
③ PC上でEV3RTのSDカードが外部記憶装置として認識されますので、SDカードの /ev3rt/apps/ ディレクトリ以下に動的ローディング用実行ファイルをコピーします。コピーが完了したら、必ず、PC上で「外部記憶装置を取り出す」処理をしてから、USBケーブルを抜きます。
④ EV3のアプリケーションローダのメニューで「SD card」を選択し、上下ボタンで実行したいアプリケーションを選び、選択ボタンを押すとアプリケーションを実行できます。
* 戻るボタンを押すと、アプリケーションを終了し、ローダのメニューに戻ります。別のアプリケーションをロードすることができます。
==== Bluetooth PAN(Personal Area Network)によるアプリケーションのロード方法 ====
① EV3を起動とPCをBluetoothで接続します。接続プロトコルを選択する必要がある場合は,PANを選択してください(SPPではありません)。
② EV3のアプリケーションローダのメニューで「Bluetooth PAN」を選択して、転送待ち状態にします(「Receive App File」と画面に表示されます)。
③ PC側でアプリをビルドした端末で、以下のように入力します。
{{{
$ make upload [ip=] [from=<手元のファイル名>] [to=<アップロード後のファイル名>]
}}}
* デフォルトの設定は,以下の通りです。
* BT PAN IP: 10.0.10.1
* 手元のファイル名:app
* アップロード後のファイル名:app
* ここでロードされたアプリケーションのバイナリファイルは、SDカードの「/ev3rt/apps/」以下に格納されます。
④ 正常にロードできている場合、EV3の画面に「App Received」と表示されます。選択ボタン(中央のボタン)を押すと、ロードしたアプリケーションを実行できます。
* 戻るボタンを押すと、アプリケーションを終了し、ローダのメニューに戻ります。別のアプリケーションをロードすることができます。
==== シリアルケーブルによるアプリケーションのロード方法 ====
① EV3を起動した状態で、PCで Tera Term を起動し、EV3に接続します(COMポートのserial port profile側に接続してください)。接続されるまで待ちます。
② シリアルケーブル(Serial port 1)でロードする場合、EV3のメニューで Serial port 1 を選択して、転送待ち状態にします(「Receive App File」と画面に表示されます)。
③ PCで、 Tera Term のZMODEM転送機能を使ってアプリケーションのバイナリファイルをロードします。
[[Image(pic1.png)]]
* ファイルの選択画面が表示されるので、EV3にロードしたいバイナリファイルを選択します。ファイルを選択すると、送信状況を表すダイアログが表示され、送信100%になったら、送信完了です。
* ここでロードされたアプリケーションのバイナリファイルは、SDカードの「/ev3rt/apps/」以下に格納されます。
④ 正常にロードできている場合、EV3の画面に「App Received」と表示されます。選択ボタン(中央のボタン)を押すと、ロードしたアプリケーションを実行できます。
* 戻るボタンを押すと、アプリケーションを終了し、ローダのメニューに戻ります。別のアプリケーションをロードすることができます。
== スタンドアローン形式(ダイナミックローダ無し) ==
=== スタンドアローン形式とは? ===
スタンドアローン形式は、開発したアプリケーションと本プラットフォームを一つのEV3のブートローダ(U-Boot)用ブートイメージ(uImage)としてビルドして、SDカードの指定場所に入れて実行する形式です。この実行形式には、以下の特徴があります。
__メリット__
* アプリケーションの最大サイズやカーネルオブジェクトの数の制限はありません
* ダイナミックローディング機能やアプリケーションローダに依存せず、単独に動作できます
__注意事項__
* アプリケーションを更新する度に、再構築の手間がかかります
* PCでアプリケーションのブートイメージ(uImage)をSDカードに書き込む操作が必要です
* EV3をリセットしてから実行するので、Bluetoothを使用する場合には、再接続が必要です
* 同じSDカードにアプリケーションを一つしか入れることができません
* コンパイル時間は比較的遅いです
* アプリケーションだけではなく、デバイスドライバ等もコンパイルする必要があるからです
=== スタンドアローン形式用のバイナリファイルの生成 ===
スタンドアローン形式を利用するために、アプリケーションのブートイメージ(uImage)をビルドする必要があります。以下の手順でそのブートイメージを生成できます。
① プラットフォームのルートディレクトリ(hrp2)に移動します。
② アプリケーションのあるワークスペースに移動します。※ EV3RTのβ5-2 以前のバージョンを使っている場合には、[http://dev.toppers.jp/trac_user/ev3pf/wiki/FAQ#QEV3RTのバージョンをβ6に更新したらworkspaceディレクトリがなくなりましたどこに移動されたのでしょうか こちら]を参照してください。
* サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します
{{{
$ cd sdk/workspace
}}}
③ 「make img=<アプリケーションのフォルダ名>」でスタンドアローン形式用ブートイメージをビルドします。※ EV3RTのβ5-2 以前のバージョンを使っている場合には、[http://dev.toppers.jp/trac_user/ev3pf/wiki/FAQ#Qダイナミックローディング用の実行ファイルを作成するためにmakemodフォルダ名と実行したら以下のように表示されましたこれはどんな意味でしょうか こちら]を参照してください。
* サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします
{{{
$ make img=gyroboy
}}}
④ ビルドが正常終了すると、 下記のような出力情報が表示されます。
[[Image(cygwin-app-gyroboy.png)]]
「uImage」というスタンドアローン形式用ブートイメージが生成されます。
[[Image(cygwin-app-gyroboy-ls.png)]]
生成されたuImageをSDカードのルートフォルダにコピーします。
SDカードをEV3の本体に差し込んでEV3の電源を入れてアプリケーションを実行します。Bluetoothを接続すれば、アプリケーションの出力を見ることができます。
=== ===
== サンプルプログラムの一覧 ==
パッケージには以下のサンプルアプリケーションが入っています。
=== 機能テスト用プログラム(helloev3) ===
|| アプリケーション名 || helloev3 ||
|| 機能説明 || プラットフォームの各種機能をテストできるアプリケーション ||
|| ソースフォルダ || workspace/helloev3 ||
|| 組み立て方 || 任意 ||
|| デバイス接続 || 自由です。アプリケーション実行中に動的に接続を設定します。 ||
|| 使い方 || ![TODO:] ||
=== 二輪型倒立振子ロボット制御(gyroboy) ===
|| アプリケーション名 || gyroboy ||
|| 機能説明 || ジャイロセンサで二輪型倒立振子ロボットを制御するサンプルアプリケーション ||
|| ソースフォルダ || workspace/gyroboy ||
|| 組み立て方 || 「[http://robotsquare.com/wp-content/uploads/2013/10/45544_gyroboy.pdf LEGO MINDSTORMS EV3 Education 45544 Instructions Gyro Boy]」 ||
|| デバイス接続 || ジャイロセンサ:ポート2、左モータ:ポートA、右モータ:ポートD ||
|| 使い方 || ![TODO:] ||
=== ライントレース(linetrace) ===
|| アプリケーション名 || linetrace ||
|| 機能説明 || PID制御で簡単なライントレース機能を実現するサンプルアプリケーション ||
|| ソースフォルダ || workspace/linetrace ||
|| 組み立て方 || 「[http://robotsquare.com/wp-content/uploads/2013/10/45544_educator.pdf LEGO MINDSTORMS EV3 Education 45544 Instructions Educator Vehicle]」 ||
|| デバイス接続 || カラーセンサ:ポート3、左モータ:ポートB、右モータ:ポートC ||
|| 使い方 || ![TODO:] ||
=== Trike for EV3(trike) ===
|| アプリケーション名 || trike ||
|| 機能説明 || Trike for EV3で簡単なライントレース機能を実現するサンプルアプリケーション ||
|| ソースフォルダ || workspace/trike ||
|| 組み立て方 || 「Trike for EV3」 ||
|| デバイス接続 || ![TODO:] ||
|| 使い方 || ![TODO:] ||