SlideShare a Scribd company logo
組込み向けスクリプト⾔語
mrubyをEV3で動かしてみよう
発表者
ETロボコン関⻄地区実⾏委員 安積 卓也、岡嵜 雄平
ETロボコン関⻄地区独⾃勉強会ONE
セッションD-2(15:00-16:30)
72 PAGES
1
ETロボコン2015関⻄地区独⾃勉強会ONE/ETロボコン関⻄地区実⾏委員会
ET ROBOCON
KANSAI 2015
セッション構成
基本編︓担当 岡嵜(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}!“
end
end
# Create a new object
g = Greeter.new("world")
# Output "Hello World!“
g.salute
Rubyとは…
オープンソースの動的なプログラミング⾔語
シンプルさと⾼い⽣産性を備える。
エレガントな⽂法、⾃然に読み書きができ
る。
参考︓https://www.ruby-lang.org/ja/
メリット 5
⼀般的に挙げられるRubyのメリット
「Rubyは書くのが楽しい・気持ちいい」
「Rubyはソースが美しい」
具体的に何が「楽しい・気持ちいい」のか︖
“ざっくり”していてわからない( ゚д゚)ポカーン
メリット 6
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり
無駄なものを書かなくて良い
標準クラスライブラリが
⾼機能で使いやすい
⾔語としての機能が充実
コーディングを楽しくする4要素
メリット 7
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり
無駄なものを書かなくて良い
標準クラスライブラリが
⾼機能で使いやすい
⾔語としての機能が充実
コーディングを楽しくする4要素
メリット 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
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 5 3
Rubyであれば
result = [1, 2, 4] + [5, 3]
と書くだけ︕
メリット 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(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
書き⽅に⾃由度がある
=内部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
オブジェクト指向かつ
スクリプト⾔語である
⽂法に⾃由度があり、
無駄なものを書かなくて良い
⾔語としての機能が充実
コーディングを楽しくする4要素
標準クラスライブラリが
⾼機能で使いやすい
メリット 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
例外処理ができる
JavaやC#と同様に例外の送受信が可能
begin
# 実⾏する処理
rescue
# 例外が発⽣したときの処理 (省略可)
else
# 例外が発⽣しなかったときに実⾏される処理 (省略可)
ensure
# 例外の発⽣有無に関わらず最後に実⾏する処理 (省略可)
end
メリット 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
.rb 実⾏
概要 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/mruby-41869553
構成・プログラムによるが数MB程度あると安⼼。
組込みでもこれくらいならなんとか…
尚、チューニングしてRAM使⽤量を削減した事例もあり
http://www.scsk.jp/fukuoka/services/mruby/nxt01.html
http://qiita.com/yukihiro_matz/items/c4f65288f96340a0808b
メリット 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
+PWM=(Integer): void
+Count() : Integer
+reset() : void
クラス図
メソッド内部の処理を
C⾔語で実装可能
.rbから引数として値を取
り出したり、戻り値を返
すことも可能。
メリット 37
省リソースでも実⾏できる
C⾔語のメソッドを
呼び出せる
Rubyと⽐較したメリット
多くのコンパイラに対応
ソフトリアルタイム
メリット 38
ソフトリアルタイムシステムとして動作
⼤抵の場合は⼀定時間内に処理を完了するが、稀に処理時間がかかる
→mruby VM中でガベージコレクションが動作するため。
0
10
20
30
40
50
60
0 1 2 3 4 5 6 7 8
出現回数[回]
処理時間[ms]
事象に対する処理時間分布
※このグラフは実測値ではありません。
⼤抵は、
4[ms]以内に処理できる
時々、処理が⻑引く
デメリット 39
性能⾯でC⾔語と⽐べると不利
EV3での性能測定は未実施。
が、C⾔語より性能⾯で劣るのはやむなし…
リソースもそれなりに必要
Rubyほどではないが、RAMがそれなりに必要。
EV3ではそこまで⼤きな問題ではないか︖
ETロボコン参加者のメリット 40
mrubyをETロボコンで使う場合、
他⾔語と⽐べてどんなメリットが
あるんだろう︖︖
ETロボコン参加者のメリット 41
コード修正〜⾛⾏までの時間が短い
調整→試⾛を繰り返すETロボコンでは⾮常に有利
ソース
修正
コンパイル
する
実機へ
ロード
起動
ソース
修正
起動
起動が⾼速
C, C++
Java
C#
mruby
Java環境は
時間がかかる
C, C++は
時間がかかる
実機へ
ロード
ETロボコン参加者のメリット 42
EV3上でデバッグが可能
デバッガ(mrdb)を起動し、⾛⾏させながらbreakを貼れる
通常時 デバッグ時
EV3RT
mruby
ruby app
EV3RT
mrdb
ruby app
例えばこんな使い⽅が…
• ruby appに対してbreakを貼る
• ruby appの変数値を確認する
• ruby appの変数値を書き換える
標準⼊出⼒先を
Bluetoothとする
ETロボコン参加者のメリット 43
過去のC⾔語資産を活⽤できる
今年はCで実装し、来年はmrubyへ乗り換える、ということが容易
2015年
2016年
EV3RT
⾃⼰位置推定 ⾛⾏制御 検出
⾛⾏計画
mruby
⾃⼰位置推定 ⾛⾏制御 検出
⾛⾏計画
EV3RT
全てCで実装
mruby化(中⾝はC)
mruby
性能を求められる部分はCで、書き換えが多い部分をmrubyで実装
→開発・調整を効率化しつつ、性能は担保
EV3でmrubyを動かしてみる
[演習]実際に使ってみましょう︕
44
資料作成協⼒者
⽯川 拓也(名古屋⼤学)
⻑原 裕希(⽴命館⼤学)
⻑⾕川 涼(⼤阪⼤学)
発表者の紹介
発表者
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
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
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
最新版を⼊⼿
• パッケージをダウンロードして解凍
– http://www.toppers.jp/tecs.html#mruby_ev3rt
– $ tar xvzf mruby-on-ev3rt+tecs_package-alpha1.0.2.tar.gz
• ダウンロードしたパッケージ名
48
環境の構築
• 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
パスの通し⽅
• クロスコンパイラをインストールしたディレクト
リにPATHを通す
– C:¥Program Files (x86)¥GNU Tools ARM
Embedded¥4.8 2014q1¥bin
※フォルダ名は、クロスコンパイラのバージョンご
とに変わります。
• arm-none-eabi-gccへパスが通っているかを確認
• コンパイラバージョンが表⽰されない場合︓Path
を確認
50
ディレクトリ構造
• 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
コンパイル⼿順
• mrubyのビルド(host⽤コンパイル→ARM⽤クロス
コンパイル)
• パッケージを展開したディレクトリで
– $ cd mruby
– $ make
– mrubyディレクトリでmakeを実⾏すると、mrubyがビル
ドされる。
※ビルドには、ruby及びbisonのインストールが必要
下記の出⼒がされればビルド成功
52
コンパイル⼿順
• EV3RT+TECS・EV3ドライバ・アプリケーションのビ
ルド準備
– SDカードへコピー
• デフォルトでは、cygwinが使⽤されていることを想定の上で、Eドラ
イブにコピーされる。
• ドライブを変更するには、サンプルコードのMakefileを編集。
hr-tecs/workspace/mruby_samples/Makefile
• Makefile内を "SD_DIR" で検索して、変数にSDカードドライブを指定
• SDカードドライブのドライブレターに合わせてください
• ここで指定したディレクトリにEV3⽤イメージファイルがコピーされ
ます
ここの名前をSDカードのドライブ名に変更
53
実⾏したいプログラムを選択
hr-tecs/workspace/mruby_samples/Makefile
実⾏したいアプリアプリケーション
を⼀つ選ぶ
54
コンパイル⼿順
• EV3RT+TECS・EV3ドライバ・アプリケーション
のビルド
– パッケージを展開してディレクトリで
– $ cd hr-tecs/workspace/mruby_samples/
– $ make tecs
• GNU Makeがtecsgenを実⾏してくれます
– $ make depend
• ファイルの依存関係を抽出します
• ヘッダファイルなど、読み込まれるファイルを更新してい
なければ、実⾏する必要ありません。
– $ make
– カレントディレクトリをサンプルアプリケーション
のディレクトリに移動し、makeを⾏うことでコンパ
イルが⾏える。
55
コンパイル⼿順︓①make tecs
tecs.timestampが出⼒されれば成功
56
コンパイル⼿順︓②make depend
touch omit_svc.hが⽣成されてからしばらく待つ
(処理中)︓⻑い場合数分
57
コンパイル⼿順︓③make
このような出⼒が出れば成功
下記のようなエラーになる場合は、SD_DIRの指定が間違っている
もしくは、SDカードを認識していない(ささってない)
58
コンパイル⼿順︓uImage
• ビルドの確認
– mkimageが⽣成され、uImageがコピーされてい
れば、ビルド成功です
– SDカードのルートディレクトリに、uImageとい
うファイルができます
– SDカードをEV3本体に⼊れる
59
本体操作基本操作
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)
• しっぽモータ(:port_a)
• 右モータ(:port_b)
• 左モータ(:port_c)
62
ev3way_sample
• 操作⼿順
– 電源を⼊れる
– ⿊⾊のライン上にカラーセンサを移動
– タッチセンサを押す︓⿊⾊の値を取得
– ⽩⾊の上にカラーセンサを移動
– タッチセンサを押す︓⽩⾊の値を取得
︓しっぽを下ろす
– ライン上移動
– タッチセンサを押す︓ライントレーススタート
63
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
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
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
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
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
パッケージ内のドキュメント
• doc/EV3RT_mruby_API_Reference.pdf
– 提供しているサンプル
• doc/mruby_on_ev3rt+tecs_build.pdf
– 環境設定
• doc/mruby_sample.pdf
– サンプルプログラムの説明
69
問い合わせ先・リンク
• 質問等は下記のMLに
– users@toppers.jp
• モニタ募集中
• EV3RT
– http://dev.toppers.jp/trac_user/ev3pf/wiki/WhatsEV3RT
70
mirb, mrdbをEV3上で動作
デモンストレーション
71
終わりに 72
ETロボコンをスマートに勝ち抜く⼿段として
mrubyの採⽤を、ぜひご検討ください。
今後もmrubyの動向に要注⽬です。

More Related Content

What's hot

Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
Yasutomo Kawanishi
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
 
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
Hirokatsu Kataoka
 
各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法
Katsuhiro Morishita
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
openrtm
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
Takami Sato
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
 
150629 02
150629 02150629 02
150629 02openrtm
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
Koichi Sakata
 
蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)
Shintarou Okada
 
2013 summercamp 02
2013 summercamp 022013 summercamp 02
2013 summercamp 02openrtm
 
150629 03
150629 03150629 03
150629 03openrtm
 
150629 01
150629 01150629 01
150629 01openrtm
 
Open-hardware and Japan
Open-hardware and JapanOpen-hardware and Japan
Open-hardware and Japan
Shigeru Kobayashi
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
Manabu Terada
 
コンピュータビジョン 1章
コンピュータビジョン 1章コンピュータビジョン 1章
コンピュータビジョン 1章
motimune
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフNarihiro Nakamura
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
openrtm
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
 

What's hot (20)

Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
 
各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
150629 02
150629 02150629 02
150629 02
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)
 
2013 summercamp 02
2013 summercamp 022013 summercamp 02
2013 summercamp 02
 
150629 03
150629 03150629 03
150629 03
 
150629 01
150629 01150629 01
150629 01
 
Open-hardware and Japan
Open-hardware and JapanOpen-hardware and Japan
Open-hardware and Japan
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 
コンピュータビジョン 1章
コンピュータビジョン 1章コンピュータビジョン 1章
コンピュータビジョン 1章
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフ
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 

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

ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
shimane-itoc
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
 
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Ruby東京プレゼン 資料
Ruby東京プレゼン 資料
Kazuaki Tanaka
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
mganeko
 
Lpicl304セミナー資料20140727
Lpicl304セミナー資料20140727Lpicl304セミナー資料20140727
Lpicl304セミナー資料20140727
Takahiro Kujirai
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
masayoshi takahashi
 
Rds 2008 R2 Express Editionで遊んでみよう
Rds 2008 R2 Express Editionで遊んでみようRds 2008 R2 Express Editionで遊んでみよう
Rds 2008 R2 Express Editionで遊んでみようguest468ec6
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
 
Openshift 20191108
Openshift 20191108Openshift 20191108
Openshift 20191108
Yasushi Osonoi
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
 
Lpicl304Seminar Presentations on 20150118
Lpicl304Seminar Presentations on 20150118Lpicl304Seminar Presentations on 20150118
Lpicl304Seminar Presentations on 20150118
Takahiro Kujirai
 
20160619_LPICl304 技術解説セミナー in AP浜松町
20160619_LPICl304 技術解説セミナー in AP浜松町20160619_LPICl304 技術解説セミナー in AP浜松町
20160619_LPICl304 技術解説セミナー in AP浜松町
Takahiro Kujirai
 

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

ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
さくルビー.Net誕生
さくルビー.Net誕生さくルビー.Net誕生
さくルビー.Net誕生
 
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Ruby東京プレゼン 資料
Ruby東京プレゼン 資料
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
Lpicl304セミナー資料20140727
Lpicl304セミナー資料20140727Lpicl304セミナー資料20140727
Lpicl304セミナー資料20140727
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
Rds 2008 R2 Express Editionで遊んでみよう
Rds 2008 R2 Express Editionで遊んでみようRds 2008 R2 Express Editionで遊んでみよう
Rds 2008 R2 Express Editionで遊んでみよう
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
 
Openshift 20191108
Openshift 20191108Openshift 20191108
Openshift 20191108
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
Lpicl304Seminar Presentations on 20150118
Lpicl304Seminar Presentations on 20150118Lpicl304Seminar Presentations on 20150118
Lpicl304Seminar Presentations on 20150118
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
20160619_LPICl304 技術解説セミナー in AP浜松町
20160619_LPICl304 技術解説セミナー in AP浜松町20160619_LPICl304 技術解説セミナー in AP浜松町
20160619_LPICl304 技術解説セミナー in AP浜松町
 

More from Takuya Azumi

Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォームAutoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
Takuya Azumi
 
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
Takuya Azumi
 
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
Takuya Azumi
 
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
Takuya Azumi
 
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
Takuya Azumi
 
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
Takuya Azumi
 
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Takuya Azumi
 
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
Takuya Azumi
 

More from Takuya Azumi (8)

Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォームAutoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
Autoware: ROSを用いた一般道自動運転向けソフトウェアプラットフォーム
 
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
ET2016 組込みシステムに適した コンポーネントシステムTECSの最新状況
 
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
 
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
 
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
 
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
 
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
 
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
 

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