Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
組込み向けスクリプト⾔語
mrubyをEV3で動かしてみよう
発表者
ETロボコン関⻄地区実⾏委員 安積 卓也、岡嵜 雄平
ETロボコン関⻄地区独⾃勉強会ONE
セッションD-2(15:00-16:30)
72 PAGES
1
ETロボコン20...
セッション構成
基本編︓担当 岡嵜(15:00-15:30)
応⽤編︓担当 岡嵜(16:10-16:30)
演習︓担当 安積(15:30-16:10)
Rubyの紹介 mrubyの紹介
mirbやmrdbをEV3で動かすデモ
時間があれば…
2
Rubyの紹介
オブジェクト指向スクリプト⾔語
3
概要 4
# The Greeter class
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello #{@name}!“
...
メリット 5
⼀般的に挙げられるRubyのメリット
「Rubyは書くのが楽しい・気持ちいい」
「Rubyはソースが美しい」
具体的に何が「楽しい・気持ちいい」のか︖
“ざっくり”していてわからない( ゚д゚)ポカーン
メリット 6
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり
無駄なものを書かなくて良い
標準クラスライブラリが
⾼機能で使いやすい
⾔語としての機能が充実
コーディングを楽しくする4要素
メリット 7
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり
無駄なものを書かなくて良い
標準クラスライブラリが
⾼機能で使いやすい
⾔語としての機能が充実
コーディングを楽しくする4要素
メリット 8
Rubyはオブジェクト指向⾔語である
=オブジェクト指向モデルを実装しやすい
Motor
-Port : Port
-PWM : Integer
-Count : Integer
+PWM=(Integer): void
+Cou...
メリット 9
Rubyはスクリプト⾔語である
=コンパイルが不要、インタプリタ形式で実⾏
.c .exe 実⾏
.rb 実⾏
Ruby VM上で
コンパイル・リンク
プログラムしたソースをすぐに実⾏でき
カットアンドトライが容易になる
def aaaaa
(ソース上に存在)
メリット 10
Rubyはスクリプト⾔語である
=クラスやメソッドの動的定義が可能に
def bbbbb
def ccccc
.rb def aaaaa
既存のメソッド定義を上書き
新たに定義
新たに定義...
メリット 11
デモ1︓メソッドを動的に宣⾔する
メリット 12
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり
無駄なものを書かなくて良い
標準クラスライブラリが
⾼機能で使いやすい
⾔語としての機能が充実
コーディングを楽しくする4要素
メリット 13
クラスライブラリが充実している
=細かい処理をライブラリに任せることにより、
ソフトの振る舞いをシンプルに記述できる
例えば、プログラムでしばしば(︖)登場する
「2つの配列を連結する処理」
1 2 4 5 3+ = 1 2 4...
メリット 14
デモ2︓Time・Hashを使ってみる(irb)
メリット 15
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり、
無駄なものを書かなくて良い
⾔語としての機能が充実
コーディングを楽しくする4要素
標準クラスライブラリが
⾼機能で使いやすい
メリット 16
無駄なものを書かなくて良い
=コード量を少なくすることができる
nums = [8, 6, 3, 7, 1]
nums.sort!
int nums[5] = {8, 6, 3, 7, 1}
int i, j, tmp;
for...
メリット 17
書き⽅に⾃由度がある
=内部DSLがより⾃然⾔語に近づく
Part.build forward(10).straight(20).tail(:down).balance, distance(20)
例1︓メソッドチェーン
Par...
メリット 18
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり、
無駄なものを書かなくて良い
⾔語としての機能が充実
コーディングを楽しくする4要素
標準クラスライブラリが
⾼機能で使いやすい
メリット 19
リテラルが充実
宣⾔したらそれがObjectとなる。(newは不要)
1 => Integer 1.to_s =>”1”
“abc” => String “abc”.length => 3
[1, 2, 3] => Array ...
メリット 20
例外処理ができる
JavaやC#と同様に例外の送受信が可能
begin
# 実⾏する処理
rescue
# 例外が発⽣したときの処理 (省略可)
else
# 例外が発⽣しなかったときに実⾏される処理 (省略可)
ensure
...
メリット 21
ブロック渡しができる
簡易的なコールバックを簡単に実現できる
メソッドA
メソッドB
ブロック
メソッドBにて、メソッドAから
渡されたブロックを実⾏できる。
メリット 22
デモ3︓ブロック渡し
デメリット 23
Rubyにもデメリットはある…
C⾔語に⽐べて処理性能悪すぎ︕使い物にならねーよ︕
既存のC⾔語ソースを全部Rubyで書き換えるなんて、無理
RAMが⾜りねえええええええええええええええ
デメリット 24
そんなあなた⽅にオススメなのが、mruby
before
mrubyに出会う前の⼈たち
after
mrubyに出会った⼈たち
mrubyの紹介
組込み機器上でRubyを実⾏
25
概要 26
mrubyとは…
ISO規格に準拠した軽量実装版のRuby
静的ライブラリをリンクすることによって、
アプリケーションに組込むことが可能
参考︓http://www.mruby.org/
アプリケーション
libmruby.a
.r...
概要 27
どうすれば⼊⼿できるのか︖
ソースコードはgithubに公開されている
参考︓https://github.com/mruby/mruby
2014年1⽉
2014年11⽉
mruby-1.0.0がリリース
mruby-1.1.0が...
概要 28
使⽤例
• ⾃動販売機の売上出⼒
• ルータF/W
• 太陽光発電システム
いずれもリアルタイム性を追求しない⽤途で
⽤いられている。(理由は後述)
メリット 29
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 30
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 31
.rb
アプリケーション
libmruby.a
.mrb 実⾏
.rbファイルを中間ファイル(.mrb)へコンパイル
実⾏時の性能改善、ソースコードの中⾝が流出することを防⽌
メリット 32
省メモリで動作可能
Rubyと⽐較して、省スペックで動作できるよう実装されている
⽂献によると400KBのRAMで動作実績ありとのこと。
参考︓http://www.slideshare.net/kazuakitanaka391...
メリット 33
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 34
mrubyは標準C関数のみで実装されている
多くのクロスコンパイラに対応している。GCC ARMでもビルド可能
設定が同梱されているコンパイラ
GCC ARM⽤の設定は
別途作成済み
GCC Clang
Visual C
メリット 35
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 36
性能を担保したい箇所はC⾔語で実装できる
Rubyのソース上からはRubyのクラス、メソッドとして利⽤できる
app.rb
Motor
-Port : Port
-PWM : Integer
-Count : Integer
+...
メリット 37
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 38
ソフトリアルタイムシステムとして動作
⼤抵の場合は⼀定時間内に処理を完了するが、稀に処理時間がかかる
→mruby VM中でガベージコレクションが動作するため。
0
10
20
30
40
50
60
0 1 2 3 4 5 6...
デメリット 39
性能⾯でC⾔語と⽐べると不利
EV3での性能測定は未実施。
が、C⾔語より性能⾯で劣るのはやむなし…
リソースもそれなりに必要
Rubyほどではないが、RAMがそれなりに必要。
EV3ではそこまで⼤きな問題ではないか︖
ETロボコン参加者のメリット 40
mrubyをETロボコンで使う場合、
他⾔語と⽐べてどんなメリットが
あるんだろう︖︖
ETロボコン参加者のメリット 41
コード修正〜⾛⾏までの時間が短い
調整→試⾛を繰り返すETロボコンでは⾮常に有利
ソース
修正
コンパイル
する
実機へ
ロード
起動
ソース
修正
起動
起動が⾼速
C, C++
Java
C#
mruby...
ETロボコン参加者のメリット 42
EV3上でデバッグが可能
デバッガ(mrdb)を起動し、⾛⾏させながらbreakを貼れる
通常時 デバッグ時
EV3RT
mruby
ruby app
EV3RT
mrdb
ruby app
例えばこんな使い...
ETロボコン参加者のメリット 43
過去のC⾔語資産を活⽤できる
今年はCで実装し、来年はmrubyへ乗り換える、ということが容易
2015年
2016年
EV3RT
⾃⼰位置推定 ⾛⾏制御 検出
⾛⾏計画
mruby
⾃⼰位置推定 ⾛⾏制御 ...
EV3でmrubyを動かしてみる
[演習]実際に使ってみましょう︕
44
資料作成協⼒者
⽯川 拓也(名古屋⼤学)
⻑原 裕希(⽴命館⼤学)
⻑⾕川 涼(⼤阪⼤学)
発表者の紹介
発表者
ETロボコン関⻄地区実⾏委員 安積 卓也
2010 MINDSTORMS NXT⽤TOPPERS/ASP+TECSプラットフォームと教育コンテンツ
ETロボコン認定プラットフォームのひとつ
https://www.topp...
EV3⽤プラットフォーム
TOPPERS/ASP
MINDSTORMS EV3⽤
TOPPERSプラットフォーム
今回の
プラットフォームEV3RT
leJOS
(Java VM)
LMS2012
(LinuxベースのVM)
TOPPERS/H...
mruby,TECSを利⽤可能なPF
• mruby on ev3rt+tecs
– http://www.toppers.jp/tecs.html#mruby_ev3rt
– TECSとはTOPPERSプロジェクトで開発しているコン
ポーネン...
最新版を⼊⼿
• パッケージをダウンロードして解凍
– http://www.toppers.jp/tecs.html#mruby_ev3rt
– $ tar xvzf mruby-on-ev3rt+tecs_package-alpha1.0....
環境の構築
• Windows7、 Windows8、Windows8.1
• Cygwinインストール
– ruby
– GNU Make
– bison
• クロスコンパイラ
– arm-none-eabi-gcc.exe (GNU Too...
パスの通し⽅
• クロスコンパイラをインストールしたディレクト
リにPATHを通す
– C:¥Program Files (x86)¥GNU Tools ARM
Embedded¥4.8 2014q1¥bin
※フォルダ名は、クロスコンパイラの...
ディレクトリ構造
• bin
– Windows向け開発環境のバイナリ
– mkimageを含む
• doc
– mrubyリファレンス
– ビルド⼿順
– サンプルプログラムの説明
• hr-tecs
– TOPPERS/HRP2及びEV3プ...
コンパイル⼿順
• mrubyのビルド(host⽤コンパイル→ARM⽤クロス
コンパイル)
• パッケージを展開したディレクトリで
– $ cd mruby
– $ make
– mrubyディレクトリでmakeを実⾏すると、mrubyがビル
...
コンパイル⼿順
• EV3RT+TECS・EV3ドライバ・アプリケーションのビ
ルド準備
– SDカードへコピー
• デフォルトでは、cygwinが使⽤されていることを想定の上で、Eドラ
イブにコピーされる。
• ドライブを変更するには、サンプ...
実⾏したいプログラムを選択
hr-tecs/workspace/mruby_samples/Makefile
実⾏したいアプリアプリケーション
を⼀つ選ぶ
54
コンパイル⼿順
• EV3RT+TECS・EV3ドライバ・アプリケーション
のビルド
– パッケージを展開してディレクトリで
– $ cd hr-tecs/workspace/mruby_samples/
– $ make tecs
• GNU...
コンパイル⼿順︓①make tecs
tecs.timestampが出⼒されれば成功
56
コンパイル⼿順︓②make depend
touch omit_svc.hが⽣成されてからしばらく待つ
(処理中)︓⻑い場合数分
57
コンパイル⼿順︓③make
このような出⼒が出れば成功
下記のようなエラーになる場合は、SD_DIRの指定が間違っている
もしくは、SDカードを認識していない(ささってない)
58
コンパイル⼿順︓uImage
• ビルドの確認
– mkimageが⽣成され、uImageがコピーされてい
れば、ビルド成功です
– SDカードのルートディレクトリに、uImageとい
うファイルができます
– SDカードをEV3本体に⼊れる
...
本体操作基本操作
OS起動中中央(Enter)ボタンで
電源オン
中央(Enter)ボタンで
mrubyプログラム開始
LEDが⾚
の間はOS
の起動中
戻る(Back)ボタン
⻑押しで電源オフ
LEDが緑になれ
ばOS起動完了
60
コンパイル⼿順︓サンプルプログラムの変更
の場合
サンプルプログラムの変更後はmakeだけで良い
(make tecs, make dependは⼀度だけ)
サンプルプ
ログラムの
変更
make
61
ev3way_sample
• ETロボコン⽤のサンプル
– 倒⽴制御しながら、ライントレースを⾏う
• タッチセンサ(:port_1)
• カラーセンサ(:port_2)
• ジャイロセンサ(:port_3)
• 超⾳波センサ(:port_4...
ev3way_sample
• 操作⼿順
– 電源を⼊れる
– ⿊⾊のライン上にカラーセンサを移動
– タッチセンサを押す︓⿊⾊の値を取得
– ⽩⾊の上にカラーセンサを移動
– タッチセンサを押す︓⽩⾊の値を取得
︓しっぽを下ろす
– ライン上...
ev3way_sample.rb︓初期化
begin
LCD.puts "ev3way_sample.rb"
LCD.puts "--- mruby version ---"
Speaker.volume = 1
forward = turn ...
ev3way_sample.rb︓⿊⾊、⽩⾊の取得
# Calibration
$black_value = color_calibration
LCD.puts "black::#{$black_value}"
$white_value = ...
ev3way_sample.rb︓スタート準備
# wait start
LCD.puts "Ready to start"
loop {
#initialize tail
tail_control(TAIL_ANGLE_STAND_UP)
R...
ev3way_sample.rb︓ライントレース
# main loop
forward = turn = 0
loop {
start = RTOS.msec
# up tail
tail_control(TAIL_ANGLE_DRIVE)
...
ev3way_sample.rb︓倒⽴制御
# main loop
loop {
start = RTOS.msec
…
# call balance_control API
pwm_l, pwm_r = Balancer.control(
f...
パッケージ内のドキュメント
• doc/EV3RT_mruby_API_Reference.pdf
– 提供しているサンプル
• doc/mruby_on_ev3rt+tecs_build.pdf
– 環境設定
• doc/mruby_samp...
問い合わせ先・リンク
• 質問等は下記のMLに
– users@toppers.jp
• モニタ募集中
• EV3RT
– http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT
70
mirb, mrdbをEV3上で動作
デモンストレーション
71
終わりに 72
ETロボコンをスマートに勝ち抜く⼿段として
mrubyの採⽤を、ぜひご検討ください。
今後もmrubyの動向に要注⽬です。
Prochain SlideShare
Chargement dans…5
×

組込み向けスクリプト言語mrubyをEV3で動かしてみよう

9 940 vues

Publié le

ETロボコン 2015 関西地区 地区独自勉強会 ONE セッション資料

Publié dans : Logiciels
  • Identifiez-vous pour voir les commentaires

組込み向けスクリプト言語mrubyをEV3で動かしてみよう

  1. 1. 組込み向けスクリプト⾔語 mrubyをEV3で動かしてみよう 発表者 ETロボコン関⻄地区実⾏委員 安積 卓也、岡嵜 雄平 ETロボコン関⻄地区独⾃勉強会ONE セッションD-2(15:00-16:30) 72 PAGES 1 ETロボコン2015関⻄地区独⾃勉強会ONE/ETロボコン関⻄地区実⾏委員会 ET ROBOCON KANSAI 2015
  2. 2. セッション構成 基本編︓担当 岡嵜(15:00-15:30) 応⽤編︓担当 岡嵜(16:10-16:30) 演習︓担当 安積(15:30-16:10) Rubyの紹介 mrubyの紹介 mirbやmrdbをEV3で動かすデモ 時間があれば… 2
  3. 3. Rubyの紹介 オブジェクト指向スクリプト⾔語 3
  4. 4. 概要 4 # The Greeter class class Greeter def initialize(name) @name = name.capitalize end def salute puts "Hello #{@name}!“ end end # Create a new object g = Greeter.new("world") # Output "Hello World!“ g.salute Rubyとは… オープンソースの動的なプログラミング⾔語 シンプルさと⾼い⽣産性を備える。 エレガントな⽂法、⾃然に読み書きができ る。 参考︓https://www.ruby-lang.org/ja/
  5. 5. メリット 5 ⼀般的に挙げられるRubyのメリット 「Rubyは書くのが楽しい・気持ちいい」 「Rubyはソースが美しい」 具体的に何が「楽しい・気持ちいい」のか︖ “ざっくり”していてわからない( ゚д゚)ポカーン
  6. 6. メリット 6 オブジェクト指向かつ スクリプト⾔語である ⽂法に⾃由度があり 無駄なものを書かなくて良い 標準クラスライブラリが ⾼機能で使いやすい ⾔語としての機能が充実 コーディングを楽しくする4要素
  7. 7. メリット 7 オブジェクト指向かつ スクリプト⾔語である ⽂法に⾃由度があり 無駄なものを書かなくて良い 標準クラスライブラリが ⾼機能で使いやすい ⾔語としての機能が充実 コーディングを楽しくする4要素
  8. 8. メリット 8 Rubyはオブジェクト指向⾔語である =オブジェクト指向モデルを実装しやすい Motor -Port : Port -PWM : Integer -Count : Integer +PWM=(Integer): void +Count() : Integer +reset() : void class Motor < Device def initialize(port) @Port = port @PWM = 0 @Count = 0 end def PWM=(pwm) end def Count end def reset end end C++, C#, Javaと同様にクラスを定義できる クラス図
  9. 9. メリット 9 Rubyはスクリプト⾔語である =コンパイルが不要、インタプリタ形式で実⾏ .c .exe 実⾏ .rb 実⾏ Ruby VM上で コンパイル・リンク プログラムしたソースをすぐに実⾏でき カットアンドトライが容易になる
  10. 10. def aaaaa (ソース上に存在) メリット 10 Rubyはスクリプト⾔語である =クラスやメソッドの動的定義が可能に def bbbbb def ccccc .rb def aaaaa 既存のメソッド定義を上書き 新たに定義 新たに定義 クラスやメソッドをプログラム中で書き換えたり 新たに定義したりすることが可能(メタプログラミング)
  11. 11. メリット 11 デモ1︓メソッドを動的に宣⾔する
  12. 12. メリット 12 オブジェクト指向かつ スクリプト⾔語である ⽂法に⾃由度があり 無駄なものを書かなくて良い 標準クラスライブラリが ⾼機能で使いやすい ⾔語としての機能が充実 コーディングを楽しくする4要素
  13. 13. メリット 13 クラスライブラリが充実している =細かい処理をライブラリに任せることにより、 ソフトの振る舞いをシンプルに記述できる 例えば、プログラムでしばしば(︖)登場する 「2つの配列を連結する処理」 1 2 4 5 3+ = 1 2 4 5 3 Rubyであれば result = [1, 2, 4] + [5, 3] と書くだけ︕
  14. 14. メリット 14 デモ2︓Time・Hashを使ってみる(irb)
  15. 15. メリット 15 オブジェクト指向かつ スクリプト⾔語である ⽂法に⾃由度があり、 無駄なものを書かなくて良い ⾔語としての機能が充実 コーディングを楽しくする4要素 標準クラスライブラリが ⾼機能で使いやすい
  16. 16. メリット 16 無駄なものを書かなくて良い =コード量を少なくすることができる nums = [8, 6, 3, 7, 1] nums.sort! int nums[5] = {8, 6, 3, 7, 1} int i, j, tmp; for(i = 0 ; i < 5 ; i++) { for(j = 4 ; j > i ; j--) { if(nums[j – 1] > nums[j]) { tmp = nums[j - 1]; nums[j - 1] = nums[j]; nums[j] = tmp } } } 例︓配列に格納した数値をソートする処理 Rubyでの実装例 C⾔語での実装例 数字を昇順に並べ替えるだけにも かかわらず、気を遣う点が多すぎる
  17. 17. メリット 17 書き⽅に⾃由度がある =内部DSLがより⾃然⾔語に近づく Part.build forward(10).straight(20).tail(:down).balance, distance(20) 例1︓メソッドチェーン Part.build do forward(10) straight(20) tail(:down) balance distance(20) end 例2︓ブロック Part.build forward: 10, straight: 20, tail: :down, balance: :on, distance: 20 例3︓ハッシュ 「モータパワー10で前進、20°の⽅向へ直進、尻尾は下げる、バランス⾛ ⾏ 、20センチ⾛⾏するまで」というシナリオをDSL化した例
  18. 18. メリット 18 オブジェクト指向かつ スクリプト⾔語である ⽂法に⾃由度があり、 無駄なものを書かなくて良い ⾔語としての機能が充実 コーディングを楽しくする4要素 標準クラスライブラリが ⾼機能で使いやすい
  19. 19. メリット 19 リテラルが充実 宣⾔したらそれがObjectとなる。(newは不要) 1 => Integer 1.to_s =>”1” “abc” => String “abc”.length => 3 [1, 2, 3] => Array [1, 2, 3].sum => 6 {:a => 1, :b => 2, :c => 3} =>Hash 1..3 => Range :a => Symbol
  20. 20. メリット 20 例外処理ができる JavaやC#と同様に例外の送受信が可能 begin # 実⾏する処理 rescue # 例外が発⽣したときの処理 (省略可) else # 例外が発⽣しなかったときに実⾏される処理 (省略可) ensure # 例外の発⽣有無に関わらず最後に実⾏する処理 (省略可) end
  21. 21. メリット 21 ブロック渡しができる 簡易的なコールバックを簡単に実現できる メソッドA メソッドB ブロック メソッドBにて、メソッドAから 渡されたブロックを実⾏できる。
  22. 22. メリット 22 デモ3︓ブロック渡し
  23. 23. デメリット 23 Rubyにもデメリットはある… C⾔語に⽐べて処理性能悪すぎ︕使い物にならねーよ︕ 既存のC⾔語ソースを全部Rubyで書き換えるなんて、無理 RAMが⾜りねえええええええええええええええ
  24. 24. デメリット 24 そんなあなた⽅にオススメなのが、mruby before mrubyに出会う前の⼈たち after mrubyに出会った⼈たち
  25. 25. mrubyの紹介 組込み機器上でRubyを実⾏ 25
  26. 26. 概要 26 mrubyとは… ISO規格に準拠した軽量実装版のRuby 静的ライブラリをリンクすることによって、 アプリケーションに組込むことが可能 参考︓http://www.mruby.org/ アプリケーション libmruby.a .rb 実⾏
  27. 27. 概要 27 どうすれば⼊⼿できるのか︖ ソースコードはgithubに公開されている 参考︓https://github.com/mruby/mruby 2014年1⽉ 2014年11⽉ mruby-1.0.0がリリース mruby-1.1.0がリリース(デバッガを同梱)
  28. 28. 概要 28 使⽤例 • ⾃動販売機の売上出⼒ • ルータF/W • 太陽光発電システム いずれもリアルタイム性を追求しない⽤途で ⽤いられている。(理由は後述)
  29. 29. メリット 29 省リソースでも実⾏できる C⾔語のメソッドを 呼び出せる Rubyと⽐較したメリット 多くのコンパイラに対応 ソフトリアルタイム
  30. 30. メリット 30 省リソースでも実⾏できる C⾔語のメソッドを 呼び出せる Rubyと⽐較したメリット 多くのコンパイラに対応 ソフトリアルタイム
  31. 31. メリット 31 .rb アプリケーション libmruby.a .mrb 実⾏ .rbファイルを中間ファイル(.mrb)へコンパイル 実⾏時の性能改善、ソースコードの中⾝が流出することを防⽌
  32. 32. メリット 32 省メモリで動作可能 Rubyと⽐較して、省スペックで動作できるよう実装されている ⽂献によると400KBのRAMで動作実績ありとのこと。 参考︓http://www.slideshare.net/kazuakitanaka391/mruby-41869553 構成・プログラムによるが数MB程度あると安⼼。 組込みでもこれくらいならなんとか… 尚、チューニングしてRAM使⽤量を削減した事例もあり http://www.scsk.jp/fukuoka/services/mruby/nxt01.html http://qiita.com/yukihiro_matz/items/c4f65288f96340a0808b
  33. 33. メリット 33 省リソースでも実⾏できる C⾔語のメソッドを 呼び出せる Rubyと⽐較したメリット 多くのコンパイラに対応 ソフトリアルタイム
  34. 34. メリット 34 mrubyは標準C関数のみで実装されている 多くのクロスコンパイラに対応している。GCC ARMでもビルド可能 設定が同梱されているコンパイラ GCC ARM⽤の設定は 別途作成済み GCC Clang Visual C
  35. 35. メリット 35 省リソースでも実⾏できる C⾔語のメソッドを 呼び出せる Rubyと⽐較したメリット 多くのコンパイラに対応 ソフトリアルタイム
  36. 36. メリット 36 性能を担保したい箇所はC⾔語で実装できる Rubyのソース上からはRubyのクラス、メソッドとして利⽤できる app.rb Motor -Port : Port -PWM : Integer -Count : Integer +PWM=(Integer): void +Count() : Integer +reset() : void クラス図 メソッド内部の処理を C⾔語で実装可能 .rbから引数として値を取 り出したり、戻り値を返 すことも可能。
  37. 37. メリット 37 省リソースでも実⾏できる C⾔語のメソッドを 呼び出せる Rubyと⽐較したメリット 多くのコンパイラに対応 ソフトリアルタイム
  38. 38. メリット 38 ソフトリアルタイムシステムとして動作 ⼤抵の場合は⼀定時間内に処理を完了するが、稀に処理時間がかかる →mruby VM中でガベージコレクションが動作するため。 0 10 20 30 40 50 60 0 1 2 3 4 5 6 7 8 出現回数[回] 処理時間[ms] 事象に対する処理時間分布 ※このグラフは実測値ではありません。 ⼤抵は、 4[ms]以内に処理できる 時々、処理が⻑引く
  39. 39. デメリット 39 性能⾯でC⾔語と⽐べると不利 EV3での性能測定は未実施。 が、C⾔語より性能⾯で劣るのはやむなし… リソースもそれなりに必要 Rubyほどではないが、RAMがそれなりに必要。 EV3ではそこまで⼤きな問題ではないか︖
  40. 40. ETロボコン参加者のメリット 40 mrubyをETロボコンで使う場合、 他⾔語と⽐べてどんなメリットが あるんだろう︖︖
  41. 41. ETロボコン参加者のメリット 41 コード修正〜⾛⾏までの時間が短い 調整→試⾛を繰り返すETロボコンでは⾮常に有利 ソース 修正 コンパイル する 実機へ ロード 起動 ソース 修正 起動 起動が⾼速 C, C++ Java C# mruby Java環境は 時間がかかる C, C++は 時間がかかる 実機へ ロード
  42. 42. ETロボコン参加者のメリット 42 EV3上でデバッグが可能 デバッガ(mrdb)を起動し、⾛⾏させながらbreakを貼れる 通常時 デバッグ時 EV3RT mruby ruby app EV3RT mrdb ruby app 例えばこんな使い⽅が… • ruby appに対してbreakを貼る • ruby appの変数値を確認する • ruby appの変数値を書き換える 標準⼊出⼒先を Bluetoothとする
  43. 43. ETロボコン参加者のメリット 43 過去のC⾔語資産を活⽤できる 今年はCで実装し、来年はmrubyへ乗り換える、ということが容易 2015年 2016年 EV3RT ⾃⼰位置推定 ⾛⾏制御 検出 ⾛⾏計画 mruby ⾃⼰位置推定 ⾛⾏制御 検出 ⾛⾏計画 EV3RT 全てCで実装 mruby化(中⾝はC) mruby 性能を求められる部分はCで、書き換えが多い部分をmrubyで実装 →開発・調整を効率化しつつ、性能は担保
  44. 44. EV3でmrubyを動かしてみる [演習]実際に使ってみましょう︕ 44 資料作成協⼒者 ⽯川 拓也(名古屋⼤学) ⻑原 裕希(⽴命館⼤学) ⻑⾕川 涼(⼤阪⼤学)
  45. 45. 発表者の紹介 発表者 ETロボコン関⻄地区実⾏委員 安積 卓也 2010 MINDSTORMS NXT⽤TOPPERS/ASP+TECSプラットフォームと教育コンテンツ ETロボコン認定プラットフォームのひとつ https://www.toppers.jp/etrobo-asp.html 2015 mruby on ev3rt+tecs︓http://www.toppers.jp/tecs.html#mruby_ev3rt 組込みソフトウェア・プラットフォームの研究・開発を⾏っています。 システムソフトウェア、モデルベース開発、⾃動運転等 45 TOPPERS/ASPカーネルの開発メンバ︓https://www.toppers.jp/asp-kernel.html TOPPERSカーネル向けシミュレーション環境の開発メンバ︓ https://www.toppers.jp/sim.html TECS(TOPPERS Embedded Component System)の開発メンバ︓ https://www.toppers.jp/tecs.html
  46. 46. EV3⽤プラットフォーム TOPPERS/ASP MINDSTORMS EV3⽤ TOPPERSプラットフォーム 今回の プラットフォームEV3RT leJOS (Java VM) LMS2012 (LinuxベースのVM) TOPPERS/HRP2 TECS仕様 • 名古屋⼤学により開発 • デバドラなどを Linuxなどから移植 MonoBrick (.Net framework) ev3dev (Linux) その他のOSS... • TECS WGにより開発 • mrubyの動作環境 46
  47. 47. mruby,TECSを利⽤可能なPF • mruby on ev3rt+tecs – http://www.toppers.jp/tecs.html#mruby_ev3rt – TECSとはTOPPERSプロジェクトで開発しているコン ポーネントシステム(アプリケーションをコンポーネ ントベース開発するためのシステム) – ev3rt+tecsはEV3RT上でのアプリケーションのコン ポーネントベース開発が可能な環境 • C++APIのようにEV3のモジュールをTECSコンポーネントと して扱うことができる – TECSの提供するmrubyブリッジ機能により,mruby からev3rt+tecsが提供するモジュール機能を利⽤でき る • mrubyからCコードを呼ぶためのI/Fを⾃動⽣成 47
  48. 48. 最新版を⼊⼿ • パッケージをダウンロードして解凍 – http://www.toppers.jp/tecs.html#mruby_ev3rt – $ tar xvzf mruby-on-ev3rt+tecs_package-alpha1.0.2.tar.gz • ダウンロードしたパッケージ名 48
  49. 49. 環境の構築 • Windows7、 Windows8、Windows8.1 • Cygwinインストール – ruby – GNU Make – bison • クロスコンパイラ – arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors) https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc- arm-none-eabi-4_8-2014q3-20140805-win32.exe • mkimage – Windows⽤バイナリはパッケージに同梱 • Cygwin及びクロスコンパイラのインストールはEV3RTの開発環境 構築を参照してください。 – http://dev.toppers.jp/trac_user/ev3pf/wiki/DevEnvWin 49
  50. 50. パスの通し⽅ • クロスコンパイラをインストールしたディレクト リにPATHを通す – C:¥Program Files (x86)¥GNU Tools ARM Embedded¥4.8 2014q1¥bin ※フォルダ名は、クロスコンパイラのバージョンご とに変わります。 • arm-none-eabi-gccへパスが通っているかを確認 • コンパイラバージョンが表⽰されない場合︓Path を確認 50
  51. 51. ディレクトリ構造 • bin – Windows向け開発環境のバイナリ – mkimageを含む • doc – mrubyリファレンス – ビルド⼿順 – サンプルプログラムの説明 • hr-tecs – TOPPERS/HRP2及びEV3プラットフォーム – サンプルプログラム(hr- tecs/workspace/mruby_samples) • mruby – mruby ver1.1.0 – build_config.rbでEV3⽤のクロスコンパイルを指定 51
  52. 52. コンパイル⼿順 • mrubyのビルド(host⽤コンパイル→ARM⽤クロス コンパイル) • パッケージを展開したディレクトリで – $ cd mruby – $ make – mrubyディレクトリでmakeを実⾏すると、mrubyがビル ドされる。 ※ビルドには、ruby及びbisonのインストールが必要 下記の出⼒がされればビルド成功 52
  53. 53. コンパイル⼿順 • EV3RT+TECS・EV3ドライバ・アプリケーションのビ ルド準備 – SDカードへコピー • デフォルトでは、cygwinが使⽤されていることを想定の上で、Eドラ イブにコピーされる。 • ドライブを変更するには、サンプルコードのMakefileを編集。 hr-tecs/workspace/mruby_samples/Makefile • Makefile内を "SD_DIR" で検索して、変数にSDカードドライブを指定 • SDカードドライブのドライブレターに合わせてください • ここで指定したディレクトリにEV3⽤イメージファイルがコピーされ ます ここの名前をSDカードのドライブ名に変更 53
  54. 54. 実⾏したいプログラムを選択 hr-tecs/workspace/mruby_samples/Makefile 実⾏したいアプリアプリケーション を⼀つ選ぶ 54
  55. 55. コンパイル⼿順 • EV3RT+TECS・EV3ドライバ・アプリケーション のビルド – パッケージを展開してディレクトリで – $ cd hr-tecs/workspace/mruby_samples/ – $ make tecs • GNU Makeがtecsgenを実⾏してくれます – $ make depend • ファイルの依存関係を抽出します • ヘッダファイルなど、読み込まれるファイルを更新してい なければ、実⾏する必要ありません。 – $ make – カレントディレクトリをサンプルアプリケーション のディレクトリに移動し、makeを⾏うことでコンパ イルが⾏える。 55
  56. 56. コンパイル⼿順︓①make tecs tecs.timestampが出⼒されれば成功 56
  57. 57. コンパイル⼿順︓②make depend touch omit_svc.hが⽣成されてからしばらく待つ (処理中)︓⻑い場合数分 57
  58. 58. コンパイル⼿順︓③make このような出⼒が出れば成功 下記のようなエラーになる場合は、SD_DIRの指定が間違っている もしくは、SDカードを認識していない(ささってない) 58
  59. 59. コンパイル⼿順︓uImage • ビルドの確認 – mkimageが⽣成され、uImageがコピーされてい れば、ビルド成功です – SDカードのルートディレクトリに、uImageとい うファイルができます – SDカードをEV3本体に⼊れる 59
  60. 60. 本体操作基本操作 OS起動中中央(Enter)ボタンで 電源オン 中央(Enter)ボタンで mrubyプログラム開始 LEDが⾚ の間はOS の起動中 戻る(Back)ボタン ⻑押しで電源オフ LEDが緑になれ ばOS起動完了 60
  61. 61. コンパイル⼿順︓サンプルプログラムの変更 の場合 サンプルプログラムの変更後はmakeだけで良い (make tecs, make dependは⼀度だけ) サンプルプ ログラムの 変更 make 61
  62. 62. ev3way_sample • ETロボコン⽤のサンプル – 倒⽴制御しながら、ライントレースを⾏う • タッチセンサ(:port_1) • カラーセンサ(:port_2) • ジャイロセンサ(:port_3) • 超⾳波センサ(:port_4) • しっぽモータ(:port_a) • 右モータ(:port_b) • 左モータ(:port_c) 62
  63. 63. ev3way_sample • 操作⼿順 – 電源を⼊れる – ⿊⾊のライン上にカラーセンサを移動 – タッチセンサを押す︓⿊⾊の値を取得 – ⽩⾊の上にカラーセンサを移動 – タッチセンサを押す︓⽩⾊の値を取得 ︓しっぽを下ろす – ライン上移動 – タッチセンサを押す︓ライントレーススタート 63
  64. 64. ev3way_sample.rb︓初期化 begin LCD.puts "ev3way_sample.rb" LCD.puts "--- mruby version ---" Speaker.volume = 1 forward = turn = 0 # initialize sensors $sonar = UltrasonicSensor.new(SONAR_SENSOR) $color = ColorSensor.new(COLOR_SENSOR) $color.reflect $touch = TouchSensor.new(TOUCH_SENSOR) $gyro = GyroSensor.new(GYRO_SENSOR) # initialize motors $motor_l = Motor.new(LEFT_MOTOR) $motor_r = Motor.new(RIGHT_MOTOR) $motor_t = Motor.new(TAIL_MOTOR) $motor_t.reset_count # Signal calibration LED.color = :orange … ポート番号を指定して初期化 (インスタンス化) ひとつしかないもの(ポート番号指定不要)は、ひとつしかないもの(ポート番号指定不要)は、 クラスメソッドとして直接呼び出す 64
  65. 65. ev3way_sample.rb︓⿊⾊、⽩⾊の取得 # Calibration $black_value = color_calibration LCD.puts "black::#{$black_value}" $white_value = color_calibration LCD.puts "white::#{$white_value}" threshold = (($black_value + $white_value) / 2).round # wait start LCD.puts "Ready to start" def color_calibration(n=10) loop { break if $touch.pressed? RTOS.delay(10) } col = 0 n.times { col += $color.reflect} col = (col / n).round Speaker.tone(:a4, 200) RTOS.delay(500) col end カラーセンサn回取得し、 平均値を取得 ライントレースの 基準値を計算 タッチセンサが押されるまで待つ 65
  66. 66. ev3way_sample.rb︓スタート準備 # wait start LCD.puts "Ready to start" loop { #initialize tail tail_control(TAIL_ANGLE_STAND_UP) RTOS.delay(10) # Touch sensor start break if $touch.pressed? } # reset motor encoder $motor_l.reset_count $motor_r.reset_count # reset Gyro sensor $gyro.reset # Signal start status LED.color = :green def tail_control(angle) pwm = ((angle - $motor_t.count) * P_GAIN).to_i pwm = (pwm > PWM_ABS_MAX) ? PWM_ABS_MAX : (pwm < -PWM_ABS_MAX) ? -PWM_ABS_MAX : pwm $motor_t.power = pwm $motor_t.stop(true) if pwm == 0 end しっぽの位置を指定された⾓度に保つ (フィードバック制御) ⽬標値⽬標値 現在の値現在の値 66
  67. 67. ev3way_sample.rb︓ライントレース # main loop forward = turn = 0 loop { start = RTOS.msec # up tail tail_control(TAIL_ANGLE_DRIVE) if sonar_alert forward = turn = 0 else # Line trace turn = $color.reflect >= threshold ? 20 : -20 forward = 30 end … } def sonar_alert $sonar_counter += 1 if $sonar_counter == 10 distance = $sonar.distance $sonar_alert = distance <= SONAR_ALERT_DISTANCE && distance >= 0 $sonar_counter = 0 end $sonar_alert end サンプルでは、30に固定 障害物まで⼀定の距離以下に なると⽌まる カラーセンサと閾値と⽐較し どちらかに曲がる ここを変更すると、 ⾃前のライントレースが可能 67
  68. 68. ev3way_sample.rb︓倒⽴制御 # main loop loop { start = RTOS.msec … # call balance_control API pwm_l, pwm_r = Balancer.control( forward.to_f, turn.to_f, -$gyro.rate.to_f, GYRO_OFFSET, $motor_l.count.to_f, $motor_r.count.to_f, Battery.mV.to_f) $motor_l.stop(true) if pwm_l == 0 $motor_l.power = pwm_l $motor_r.stop(true) if pwm_r == 0 $motor_r.power = pwm_r wait = 4 - (RTOS.msec - start) RTOS.delay(wait) if wait > 0 } C⾔語で実装されたバランサを呼び出す 4ミリ秒周期で実⾏ 現状1ミリ秒程度で処理完了 mubyでも⼗分制御可能 バランサの返り値が2つ 68
  69. 69. パッケージ内のドキュメント • doc/EV3RT_mruby_API_Reference.pdf – 提供しているサンプル • doc/mruby_on_ev3rt+tecs_build.pdf – 環境設定 • doc/mruby_sample.pdf – サンプルプログラムの説明 69
  70. 70. 問い合わせ先・リンク • 質問等は下記のMLに – users@toppers.jp • モニタ募集中 • EV3RT – http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT 70
  71. 71. mirb, mrdbをEV3上で動作 デモンストレーション 71
  72. 72. 終わりに 72 ETロボコンをスマートに勝ち抜く⼿段として mrubyの採⽤を、ぜひご検討ください。 今後もmrubyの動向に要注⽬です。

×