= サンプルアプリケーションの実行 = == サンプルプログラムのビルド・実行 == === 実行形式とビルド方法 === 本プラットフォームのアプリケーションは2つの形式で実行することができます。 * ダイナミックローダを使って動的にロードされて実行する * ダイナミックローダを使わずスタンドアローンで実行する ==== 動的ローディング形式(ダイナミックローダ有り) ==== 動的ローディング形式はダイナミックローダを使って、SDカードに入れた又はBluetooth等のシリアル通信で受信したアプリケーションのバイナリファイル(ELF形式)をロードして動的に実行する形式です。 この実行形式には、以下の特徴があります。 * EV3をリセットしなくても実行中のアプリケーションを動的に書き換えます * アプリケーションが変更されてもBluetoothを再接続する必要がありません * PCでアプリケーションのバイナリファイルをSDカードに書き込む手間を省略できます * 複数のアプリケーションを同じSDカードに入れることができます * 高速にコンパイルすることができます * ローダとアプリケーションのインターフェスバージョン(PIL Version)を一致する必要があります * ローダのPIL Versionが更新される場合、アプリケーションの再コンパイルが必要になります * アプリケーションの最大サイズの制限があります(ローダの設定に依存、デフォルトは1MB) * アプリケーションのカーネルオブジェクトの数の制限があります(ローダの設定に依存、デフォルトは以下) * タスク     最大32個 * セマフォ    最大16個 * イベントフラグ 最大16個 * ミューテックス 最大0個![TODO:] 動的ローディング形式を利用するために、アプリケーションのバイナリファイル(ELF形式)をビルドする必要があります。 以下の手順でそのバイナリファイルを生成できます。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make mod=<アプリケーションのフォルダ名>」で動的ローディング用バイナリ(Module)をビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make mod=gyroboy }}} ④ ビルドが正常に終了すると、「app」という動的ローディング用バイナリが生成されます ダイナミックローダを利用して、以下の手順で生成されたアプリケーションのバイナリファイルをロードすることができます。 ① ローダをSDカードに入れていない場合、そのuImageをSDカードのルートフォルダにコピーします * デフォルトのローダのuImageは「sdcard/uImage」です ② SDカードをEV3に差し込んで、電源を入れてローダを実行します * ローダのGUIメニューが表示されたら起動は成功しました ③ ローダのメニューを使って以下の方式でアプリケーションをロードすることができます * SD card:SDカードに入れたアプリケーションをロードします。アプリケーションのバイナリファイルをSDカードの「/ev3rt/apps」というフォルダに入れる必要があります。 * Bluetooth:Bluetoothでアプリケーションをロードします。「[http://dev.toppers.jp/#_Bluetooth%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%96%B9%E6%B3%95 Bluetoothの接続方法]」を参考してBluetoothを接続する必要があります。 * Serial port 1:シリアルケーブルでアプリケーションをロードします。 ④ BluetoothまたはSerial port 1でロードする場合、ターミナルのZMODEM転送機能でアプリケーションのバイナリファイルを送信します [[Image(pic1.png)]] ⑤ アプリケーション実行中、戻るボタンを長押し(0.5秒程度)してアプリケーションを終了できます * アプリケーションを終了すると、ローダのメニューに戻ります。新しいアプリケーションをロードすることができます ==== スタンドアローン形式(ダイナミックローダ無し) ==== スタンドアローン形式は開発したアプリケーションと本プラットフォームを一つのEV3のブートローダ(U-Boot)用ブートイメージ(uImage)としてビルドして、SDカードの指定場所に入れて実行する形式です。この実行形式には、以下の特徴があります。 * アプリケーションの最大サイズやカーネルオブジェクトの数の制限はありません * ダイナミックローダに依存せず単独に動作できます * アプリケーションを更新する度に、手間がかかります * PCでアプリケーションのブートイメージ(uImage)をSDカードに書き込む操作が必要です * EV3をリセットしてから実行するのでBluetoothの再接続が必要です * 同じSDカードにアプリケーションを一つしか入れることができません * コンパイル時間は比較的遅いです * アプリケーションだけではなく、デバイスドライバ等もコンパイルする必要があるからです スタンドアローン形式を利用するために、アプリケーションのブートイメージ(uImage)をビルドする必要があります。以下の手順でそのブートイメージを生成できます。 ① プラットフォームのルートディレクトリ(hrp2)に移動します ② アプリケーションのあるワークスペースに移動します * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します {{{ $ cd workspace }}} ③ 「make app=<アプリケーションのフォルダ名>」でスタンドアローン形式用ブートイメージをビルドします * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします {{{ $ make app=gyroboy }}} ④ ビルドが正常終了すると、 下記のような出力情報が表示されます。「uImage」というスタンドアローン形式用ブートイメージが生成されました 生成されたuImageをSDカードのルートフォルダにコピーして、そのSDカードをEV3の本体に差し込んで、EV3の電源を入れてアプリケーションを実行します。Bluetoothを接続して、アプリケーションの出力情報を見ることができます。 === Bluetoothの接続方法 === ==== Bluetoothドングルの対応状況 ==== Linuxで開発を行う場合、Linuxの事実上の標準プロトコルスタックBlueZがサポートするBluetoothドングルが対応しています。 Windowsで開発を行う場合、Bluetoothドングルのドライバ(プロトコルスタック)により、対応状況が異なります。具体的には、以下の表に参照してください。 || プロトコルスタック || 相性 || 備考 || || Broadcom || ◎ || ABE Bluetooth Dongle(レゴ公式販売)、I-O DATA USB-BT40LE、Kinivo BTD-400 || || Toshiba || ◎ || 販売しているドングルは少ないです(基本はLet’s Noteで搭載) || || Windows汎用ドライバ || ○ || 接続できない時もあります || || CSR || × || CSRのSSPドライバにバグあるらしいので接続は自動的に切断されます || |||||| 凡例 ◎:正常動作 ○:正常動作する場合が多い ×:動作できない || なお、CSRのスタックを利用するドングルのほぼはWindows汎用ドライバもサポートします。デフォルトがCSRであるドングルで開発したい場合、Windows汎用ドライバを試してください。 ==== Bluetoothの接続手順(Windows + 汎用ドライバ編) ==== * TODO: 汎用ドライバは安定になっているため,説明を追加 ==== Bluetoothの接続手順(Windows + Toshibaスタック編) ==== ① EV3の電源を入れて、アプリケーションを実行します ② 「Bluetooth設定」を開いて、「新しい接続」をクリックします [[Image(pic2.png)]] ③ 「カスタムモード」を選択して、「次へ」をクリックします [[Image(pic3.png)]] ④ 「Mindstorms EV3」を選択して、「次へ」をクリックします [[Image(pic4.png)]] * 「Mindstorms EV3」はデフォルトのデバイス名です。「ev3.h」で変更できます。 ⑤ 「Serial Port Profile」を選択して、「次へ」をクリックします [[Image(pic5.png)]] ⑥ 「デフォルトのCOMポートを使用する」をチェックして、「次へ」をクリックします [[Image(pic6.png)]] ⑦ EV3のBluetoothのシリアルポート番号を確認して、「次へ」をクリックします [[Image(pic7.png)]] ⑧ 下記の画面が表示されたらEV3の新規接続設定は完成しました [[Image(pic8.png)]] ⑨ 追加した「Mindstorms EV3」のアイコンをダブルクリックして接続を行います [[Image(pic9.png)]] * 失敗の場合はもう一度ダブルクリックしてください * 既にこのアイコンが存在している場合、②から⑧までの新規接続の手順は省略できます ⑩ 下記の画面が表示されたらPINコード「0000」を入力します [[Image(pic10.png)]] * 「0000」はデフォルトのPINコードです。「ev3.h」で変更できます。 ⑪ 接続は完成したら、ターミナルエミュレータを開いてEV3のBluetoothのシリアルポートに接続します [[Image(pic11.png)]] * 図はTera Termの例です ⑫ 以上でBluetoothの接続が完了しました。ターミナルエミュレータでEV3と通信できるようになりました == サンプルプログラムの一覧 == パッケージには以下のサンプルアプリケーションが入っています。 === 機能テスト用プログラム(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:] ||