M2M製品開発における
mrubyの効果
九州工業大学
田中 和明
自己紹介
• 九州工業大学
田中 和明(たなか かずあき)
• 組込みシステムに関する教育研究
– プログラミング,データ構造,データベース,
Robot Sensor Processing
Rubyアソシエーション
福岡県Ruby・コンテンツビジネス振興会議
軽量Rubyフォーラム
Rubyビジネス推進協議会
研究
• 2010年~2012年
– 経済産業省 地域イノベーション創出研究開発事
業でmrubyを開発(ネットワーク応用通信研究
所,福岡CSK,九州工業大学)
• 2015年~
– しまねソフト研究開発センターとの共同研究で
mruby/cを開発
• 2016年~
– NEDO 次世代スマートデバイス開発プロジェク
トでmruby用IDEを開発中(九州工業大学,
SCSK九州,有明高専)
mruby
Rubyを組込みソフト開発に利用する
Rubyの特徴
• Webアプリケーション開発では
標準的な開発言語
– 開発しやすい
– プログラムを再利用しやすい
– 可読性
例
#include <stdio.h>
int main(void)
{
int i, s;
int ary[5] = {2,3,5,7,11};
s = 0;
for( i=0 ; i<5 ; i++ ){
s += ary[i];
}
printf("%d¥n", s);
return 0;
}
ary = [2,3,5,7,11]
s = 0
ary.each do |x|
s = s + x
end
puts s
mrubyが目指すもの
• Rubyが持つ「開発しやすさ」を,
組込みソフト開発に利用する(手軽)
• 実行に必要な資源を減らす(軽量)
• 実装をコンパクトにする(シンプル)
• ハードウェアが提供する機能と
ソフトウェアロジックを分離する(分か
りやすさ)
組込みシステム開発
• 従来の開発イメージ
ソフトウェア
ハードウェア
(ターゲットデバイス)
ユーザ
インターフェース
デバイスドライバ
アプリケーション
ロジック
リアルタイム処理
(割り込み)
Cで実装され,単一の
実行オブジェクトとなる
(ファームウェアなど)
開発の種類
• 新規開発 or ライブラリの利用
ソフトウェア
ハードウェア
(ターゲットデバイス)
ユーザ
インターフェース
デバイスドライバ
アプリケーション
ロジック
リアルタイム処理
(割り込み)
通常,既存のライブラリが存在する
mrubyのアイディア
• 最初にライブラリ部分を準備する
• 新規開発部分だけを開発する
ハードウェアに依存する部分
ハードウェアが変わらなければ,
同じものを再利用できる
アプリケーションに依存する部分
ハードウェアとは切り離して
開発したい
mrubyの仕組み
• Ruby:インタープリタ型
• mruby:コンパイラ+VM(仮想計算機)
• コンパイラが生成する中間コードは
デバイス非依存
• 中間コードをVMが実行する
• VMはデバイス依存だが,移植は容易
mrubyを使った開発
• ターゲットデバイス用のmruby VMを
ビルドしておく(初回のみ)
• mrubyアプリケーションをVMで動かす
mruby VM
mrubyアプリケーション
得られる効果
• ライブラリ・ドライバを再利用できる
– VMの中にライブラリが含まれている
– デバイスごとにVMは1つで十分
• ハードとソフトの開発を並行できる
– VMがあれば,アプリケーション開発できる
• ハードの変更が容易
– mrubyプログラムはデバイス非依存
– ソフトへの影響を少なくできる
組込みシステムの開発例
• ハードウェアとソフトウェアを開発する
• どちらも新規開発と仮定する
• 内容
– ハードウェアの開発
– ソフトウェアの開発
– 動作検証
ハードウェア開発
(ターゲットデバイス)
ソフトウェアを開発 動作検証
時間
mrubyを使った開発の
イメージ
時間
ハードウェア開発
(ターゲットデバイス)
動作検証
PC用
VM
作成
VMでの
動作検証
デバイス用VM作成
(PC用を移植する) ハード開発の時間を
増やせる
ハードが未完成でも
ソフト開発できる
PC用VM上で
ソフトウェアを開発
mruby/c
さらに小さいデバイスを目指す
mrubyのフィードバック
• もっと小さいマイコンで使いたい
• 16bit CPU
• 省電力
• リアルタイム処理
• マルチスレッド
mruby/c
• mruby/cの位置づけ
mruby/c
mruby中間コード
(*.mrb)
この部分を小さくする
mruby/c
• mrubyをさらにコンパクトにした実装
• ある程度のリアルタイム性を実現する
実行時に必要なメモリ量
Ruby
mruby
mruby/c
数MB
400KB
< 64KB
mruby/cの特徴
• 小さい実装
– ワンチップマイコンで動作する
(例:Cortex-M3 64KB)
• ROM上のプログラムを実行できる
• 移植しやすい(C99)
mruby/cの機能
• 最小限のクラスライブラリ
• 複数プログラムの並行実行,優先度付き
• C関数の呼び出し
• 共有変数(共有メモリ)
• (計画中)GC機能
性能評価
• Ruby, mruby, mruby/cの実行速度
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
0.16
0.18
0 5000 10000 15000 20000 25000 30000 35000
Execution time
Ruby mruby mruby/c
繰り返し回数
実行時間 [秒]
mruby/cの適用分野
• イベント処理
– 起動時間が短く,ゆらぎが少ない
(ある時間で必ず処理を開始できる)
• 並行処理
– 共有メモリを介した協調動作
DEMO
• IDEも開発しています
while true do
led 1
delay 1000
led 0
delay 1000
end
led delay
研究紹介
• SenStick – 小型ウェアラブルデバイス
奈良先端科学技術大学院大学と共同開発
研究紹介
• エナジーハーベスティング
(ご覧の通り,試作段階です)
研究紹介
• 軽量な通信プロトコル MQTT
入手方法
• Github
• しまねソフト研究開発センターで
紹介資料を公開しています
http://www.s-itoc.jp/
https://github.com/mrubyc/mrubyc
まとめ
(私的な意見ですが)
• 今後のM2Mで要求される技術
– デバイスが増加&通信量が増加
• 軽量な通信
• 省電力

M2M製品開発におけるmrubyの効果160726