EV3RTの概要

ETロボコン向けTOPPERS活⽤セミナー
EV3RTの概要
2016年6⽉11⽇(⼟)
松原豊(名古屋⼤学) ⽯川拓也⽒の資料を基に作成
1
EV3RT
• Real-Time platform for EV3
•  http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT
• TOPPERS/HRP2カーネルをベースとしたプラット
フォーム
•  メモリ保護機能を提供
• CやC++で開発が可能
•  TOPPERS OS/newlib/EV3⽤のAPIを利⽤可能
• その他の利点
•  起動時間が早い(約5秒.LMS2012では30秒以上)
•  メモリ消費量が少ない(LMS2012の約10%)
•  ダイナミックローディング機能(OSを再起動せずにアプリケー
ションを更新可能)
• ETロボコン2015以降,公式プラットフォーム
2
ETロボコン2016のプラットフォーム
https://github.com/ETrobocon/etroboEV3/wiki
3
EV3⽤プラットフォームの発展経緯
• 
• 
• 
LMS2012
(LinuxベースのVM)
その他のOSS
2014年から名古屋⼤学を中⼼に開発
C/C++でアプリを開発
デバドラなどを
Linuxなどから移植
MINDSTORMS EV3⽤
TOPPERSプラットフォーム
leJOS
(Java VM)
TOPPERS/EV3RT
MonoBrick
(.NET framework)
mruby on
EV3RT+TECS
ev3dev
(Linux)
TOPPERS/HRP2
TOPPERS/ASP
TECS仕様
mruby サポート
• 
• 
TECS WGを中⼼に開発
mrubyによるアプリ開発
4
EV3RTのアーキテクチャ
•  HRPカーネルの機能を利⽤し,アプリケーションを⾮特権モードで
動作させ,カーネルやデバイスドライバなどを特権モードで動作さ
せることで,アプリケーションの不具合を検出しやすくしている
5
2015年度に導⼊された主な機能
EV3RT LCDの画⾯
USB経由でのファイル転送
アプリケーションローダ起動画⾯.
5秒で起動!
PCからEV3RT(USBデバイスとして認識
される)にアプリの実⾏ファイルを転送.
Bluetooth経由でも可能.
コンソール機能.
EV3の画⾯で,
動作ログを確認できる!
6
2015年度の更新内容
リリース⽇
バージョン
主な更新内容
2015年4⽉22⽇
β4
• 
• 
• 
C++ APIサポート
LCDへのログ表⽰
Bluetooth機能拡充
2015年6⽉1⽇
β5
• 
• 
アプリケーションローダ更新
サンプルプログラム追加,修正
2015年9⽉10⽇
β5-1
• 
Bluetoothのバグ修正
2015年12⽉9⽇
β5-2
• 
アプリケーションローダのバグ修正
β6
• 
• 
• 
• 
カラーセンサのRGB-RAWモード対応
ダイナミックローディング時のCRE/
DTQ/CRE-PDQ/CRE_MTXサポート
Bluetooth CC2560Aチップサポート
USB経由でのファイル転送サポート
2016年3⽉2⽇
2016年03⽉14⽇
β6-1
• 
軽微な修正,バグ修正
2016年03⽉17⽇
β6-2
• 
• 
アナログセンサの初期化ルーチン更新
シリアル出⼒選択機能
7
すぐに利⽤可能なサービス
TOPPERS/EV3RTウェブサイト
•  開発環境構築のマニュアル
•  サンプルアプリケーションのビルドと実⾏
•  ユーザマニュアル(アプリケーション開発者向け)
•  EV3RT C APIリファレンス
•  EV3RT C++ APIリファレンス
•  EV3RT mruby APIリファレンス
•  FAQ
教育教材
•  2015年度ETロボコン向けTOPPERS活⽤セミナー動画
http://toppers.jp/etrobo_seminar15.html
(本⽇の動画を掲載予定)
サポートメーリングリスト
•  etrobo@toppers.jp
•  誰でも投稿,閲覧可能
8
EV3RTのインストール
• 開発環境をホストPCにインストール
•  http://dev.toppers.jp/trac_user/ev3pf/wiki/DevEnv の「開
発環境(クロスコンパイラ,ツール)のインストール」を参考に
• パッケージをダウンロード
•  http://dev.toppers.jp/trac_user/ev3pf/wiki/Download から
β6-2(ev3rt-beta6-2-release.zip)を取得
• パッケージを解凍
$unzipev3rt-beta6-2-release.zip
• カーネルソースコードを解凍
$cdev3rt-beta6-2-release
$tarxvfhrp2.tar.xz
9
EV3RTパッケージのフォルダ構成
ファイル/フォルダ名
内容
Changelog.txt
リリースノート.変更履歴.
EV3RT_C_API_Reference/
EV3RTのC APIリファレンス
index.htmlを開くと閲覧可能
EV3RT_CPP_API_Reference/
EV3RTのC++ APIリファレンス
ngki_spec-171.pdf
TOPPERSカーネルの仕様書(Ver.1.7.1)
sdcard/
SDカードに保存するファイルのサンプル
EV3RTはカーネルやアプリケーションのイメージ
ファイルをSDカードに保存し,EV3本体に挿⼊
することで使⽤
hrp2/
EV3RTのソースコード本体(後ろで詳細に解説)
•  HRP2カーネル
•  デバイスドライバやミドルウェア
•  アプリケーションのワークスペース
10
SDカードに置くファイルのサンプル
sdcardフォルダの中⾝
ファイル/フォルダ名
内容
uImage
EV3RTのカーネル,動的ローダのイメージファイル
(EV3起動時にここから実⾏を始める)
ev3rt/
EV3RTが使⽤するディレクトリ
apps/
アプリケーションのロードイメージを置くフォルダ
etc/rc.conf.ini
各種設定ファイル
res/
サンプルアプリケーション(ファイルI/O)で使⽤して
いるフォルダ.プログラムでは「/ev3rt/res」というパ
スでアクセスできる.
11
設定ファイルでできること
ログ出⼒先の変更
rc.conf.ini
[Debug]
#DefaultPort=UART←UARTを使用する場合
DefaultPort=BT←Bluetoothを使用する場合
#DefaultPort=LCD←LCDを使用する場合
無効化
※何も指定しない場合の出⼒先はLCD
Bluetoothの接続情報の変更
[Bluetooth]
LocalName=MindstormsEV3
PinCode=0000
rc.conf.ini
ホストPCから⾒える
デバイス名
ペアリング時の
ピンコード
12
EV3RTのカーネル(hrp2フォルダ)の内容
アプリケーション開発に関係しそうなもののみ
フォルダ名
内容
arch, include, extension,
kernel, library, pdic, syssvc,
target
HRP2カーネルのソースコード.
デバイスドライバなどは target/ev3_gcc/ の下
base-workspace
アプリケーションローダ
sdk/workspace
アプリケーション開発⽤ワークスペース
サンプルアプリケーション
cfg
EV3RTでのアプリケーション開発に必要なツール
(静的API→Cコード⽣成)
Windows以外の環境では,cfgのバイナリを⼊れ替
える必要がある.
http://www.toppers.jp/cfg-download.html から環境に
あったバイナリをダウンロードし,cfg/cfg/ に置く
configure
アプリケーションのMakefileをテンプレートから⽣
成するユーティリティ
13
アプリケーションのビルド
• EV3RTのworkspaceフォルダに移動してアプリ
ケーションをビルド
$cdev3rt-beta6-2-release/hrp2/sdk/workspace/
• スタンドアローン形式のモジュールをビルドす
る場合は make img=<フォルダ名>
$makeimg=helloev3
• 動的ローディング形式のモジュールをビルドす
る場合は make app=<フォルダ名>
$makeapp=helloev3
14
スタンドアローン形式
• EV3RTとアプリケーションを⼀つのモジュールにリンク
して,EV3RTの起動とともにアプリケーションの実⾏を
開始する形式
• EV3RTとアプリケーションが⼀つのuImageファイルと
なるため,SDカードのuImageファイルを置き換えるこ
とでアプリケーションを書き換える
•  SDカードのトップフォルダにuImageを置けばよい
•  EV3が起動すると,EV3のメモリに書き込まれている
ブートローダubootが起動し,SDカードにある
uImageファイルをSDRAMに展開してEV3RTを起動
15
動的ローディング形式
• アプリケーションローダにより,アプリケーションを
EV3RTの起動後にロードする形式
•  アプリケーションモジュール(デフォルト名はapp)
と,ローダを含むEV3RTのモジュールを別々にビル
ドする
•  アプリケーションローダは,スタンドアローン形式で
提供されるアプリケーションの⼀種
• 動的ローディング⽤のアプリケーションモジュールは,
SDカードの/ev3rt/appsフォルダに置く
•  EV3RT起動中に,Bluetooth/USB/シリアルケーブル
経由でアプリケーションモジュールを転送可能
•  http://dev.toppers.jp/trac_user/ev3pf/wiki/
SampleProgram#PCからEV3へのアプリケーションのロー
ド⽅法の選択
16
アプリケーションの実⾏:スタンドアローン
1. 
2. 
3. 
4. 
実⾏モジュール(uImage)を make img で⽣成
uImage をSDカードのトップに置く
EV3を起動(中央ボタンを押す)
「Run App」と画⾯下部に表⽰されているときに, 中央ボタンを押すとアプリケーションが起動
17
アプリケーションの実⾏:動的ローディング
1.  アプリケーションのモジュールを make app で⽣成
2.  app をSDカードの/ev3rt/apps/に置く
•  ファイル名を app から変更しても構わない
3.  EV3を起動(中央ボタンを押す)
4.  「Load App」と画⾯下部に表⽰されているときに中央ボタンを
押すと,アプリケーションローダが起動するので「SD card」を
選択し,アプリケーションを選択して起動
•  上下ボタンでカーソル移動,中央ボタンで決定
•  アプリケーション実⾏時にバックボタンを⻑押しすると,コン
ソールに戻る
•  コンソールで右ボタンを押して「Shutdown」と画⾯下部に表⽰
されているときに中央ボタンを押すと電源を切る(左+右+
バックボタンを同時に⻑押しする⽅法もある)
18
ビルドの仕組み(make での処理内容)
1.  sdk/workspace/Makefileを使ってmake img=test or
app=test を実⾏
2.  sdk/workspace/test/Makefile.incをinclude
•  configureのパラメータを設定
3.  sdk/OBJをmkdirしてOBJ/に移動
4.  OBJ/でconfigureを実⾏して,Makefileを⽣成
•  sdk/workspace/testをパスに含めて,2の設定を使⽤
•  Makefileのテンプレートはsdk/common/Makefile.img,
Makefile.app
5.  OBJ/で4.で⽣成したMakefileを使ってmake
6.  スタンドアローン版の場合は,objcopyでELF形式のモジュール
からバイナリ形式のhrp2を⽣成したあと,mkimageコマンドで
hrp2からuImageを⽣成
•  ubootがロードするためのファイル形式に変換
7.  sdk/workspace/にapp or uImageをコピー
•  appは動的ローディング形式のアプリケーションモジュール
19