et west 2017資料:mruby/c、mrubyで実現される効率的なiot開発
TRANSCRIPT
![Page 1: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/1.jpg)
「mruby/c」「mruby」で実現される効率的なIoT開発
九州工業大学情報工学部田中和明
![Page 2: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/2.jpg)
自己紹介• 九州工業大学田中和明(たなかかずあき)
• 教育研究– プログラミング,アルゴリズム,データベース、Robot Sensor Processing
– 組込みシステム(mruby、リアルタイムOS)、デジタルサイネージ、三次元測量(土木)
• Rubyコミュニティ活動
![Page 3: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/3.jpg)
目次• Ruby, mruby• IoT, mruby/c• 事例紹介
![Page 4: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/4.jpg)
Ruby, mruby
![Page 5: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/5.jpg)
プログラム言語Ruby
• オブジェクト指向型スクリプト言語• 可読性が高い• Webアプリケーション開発で広く使われている
• ISO/IEC 30170, JIS X 3017• 日本発のプログラム言語
![Page 6: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/6.jpg)
Rubyを使うメリット• Rubyを使うと、、、
– 開発しやすい– プログラムを再利用しやすい– 可読性が高い(メンテナンスしやすい)
![Page 7: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/7.jpg)
ソフトウェアの開発効率が高い
#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 = s + ary[i];
}
printf("%d¥n", s);
return 0;}
ary = [2,3,5,7,11]
s = 0ary.each do |x|
s = s + xend
puts s
プログラムが読みやすい書きやすい
C言語
Ruby
![Page 8: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/8.jpg)
Rubyプログラムの実行• インタープリタ方式
– 実行時にコードを解析する– 「プログラムを書いて、すぐ実行できる」
• 動的な実行– 動的なメモリ管理(GC)– 「開発者はメモリを管理しなくて良い」
![Page 9: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/9.jpg)
組込みシステム• 組込みシステム
– 機械や装置内に組込まれるシステム– 例:自動車,産業機器(ロボットなど)家電製品,通信装置、ウェアラブル機器
• 開発に伴う困難– 多くの制限がある(CPU・メモリ・時間・電力)
– ハードとソフト両方の技術を使う
![Page 10: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/10.jpg)
IPA SEC 組込みソフトウェア産業の動向把握等に関する調査(2017年)
![Page 11: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/11.jpg)
組込みソフトウェア開発• 組込みソフトウェア開発に
Rubyの良さを取り入れたい
• 何が課題だろうか?
![Page 12: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/12.jpg)
Rubyプログラムの実行• インタープリタ方式
– 実行時にコードを解析する– 「実行時に多くの資源を必要とする」
• 動的な実行– 動的なメモリ管理(GC)– 「実行時間の予測ができない」– 「リアルタイム性が保証できない」
![Page 13: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/13.jpg)
mruby = 軽量Ruby
• Rubyを軽量化した実装– 実行時の消費メモリが少ない– ある程度のリアルタイム性を持つ
• 文法はRubyと同じ• 他のシステムに組込んで使える
– Cプログラムからmrubyプログラムを呼び出す– mrubyプログラムからCの関数を呼び出す
![Page 14: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/14.jpg)
mrubyの開発• 2010年~2012年
– 経済産業省地域イノベーション創出研究開発事業でmrubyを開発(ネットワーク応用通信研究所,福岡CSK,九州工業大学)
• 2016年– NEDO 次世代スマートデバイス開発プロジェクトでmruby用IDEを開発(九州工業大学,SCSK九州,有明高専) IoTフレームワーク
mruby
![Page 15: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/15.jpg)
mrubyの動作• mrubyVMによりプログラムを実行する
def fib(n)return 1 if n<2return fib(n-1)+fib(n-2)
end
puts fib(10)
mruby VM
コンパイル
実行
00000000 52 49 54 45 30 30 30 34 f3 be 00 00 00 f5 4d 41 |RITE0004......MA|00000010 54 5a 30 30 30 30 49 52 45 50 00 00 00 c0 30 30 |TZ0000IREP....00|00000020 30 30 00 00 00 4b 00 01 00 05 00 01 00 00 00 09 |00...K..........|00000030 00 80 00 48 01 00 00 c0 00 80 00 46 00 80 00 06 |...H.......F....|00000040 01 00 00 06 01 c0 04 83 01 00 00 a0 00 80 40 a0 |..............@.|00000050 00 00 00 4a 00 00 00 00 00 00 00 02 00 03 66 69 |...J..........fi|00000060 62 00 00 04 70 75 74 73 00 00 00 00 70 00 03 00 |b...puts....p...|00000070 08 00 00 00 00 00 11 00 02 00 00 26 01 80 40 01 |...........&..@.|00000080 02 40 00 83 01 80 00 b3 01 c0 01 19 01 c0 00 03 |.@..............|00000090 01 80 00 29 01 80 00 06 02 00 40 01 02 00 80 af |...)......@.....|000000a0 01 80 40 a0 02 00 00 06 02 80 40 01 02 80 81 2f |..@.......@..../|000000b0 02 00 40 a0 01 80 c0 ac 01 80 00 29 00 00 00 00 |..@........)....|000000c0 00 00 00 04 00 01 3c 00 00 03 66 69 62 00 00 01 |......<...fib...|000000d0 2d 00 00 01 2b 00 4c 56 41 52 00 00 00 17 00 00 |-...+.LVAR......|000000e0 00 01 00 01 6e 00 00 00 01 ff ff 00 00 45 4e 44 |....n........END|000000f0 00 00 00 00 08 |.....|
mrubyプログラム バイトコード
![Page 16: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/16.jpg)
組込みシステム開発• 従来の組込みソフトのイメージ
ソフトウェア
デバイス
ユーザインターフェース
デバイスドライバ
アプリケーションロジック
リアルタイム処理(割り込み)
このプログラムを作りたい
![Page 17: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/17.jpg)
mrubyを使った組込み開発• mrubyの部分が開発しやすくなる
ソフトウェア
ハードウェア(ターゲットデバイス)
ユーザインターフェース
デバイスドライバ
アプリケーションロジック
リアルタイム処理(割り込み)
mrubyプログラム
VMとして提供し、mrubyからは抽象化される
![Page 18: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/18.jpg)
mrubyの利用事例
ネットワークルータ(IIJ社) Apacheモジュール(OSS)
mrubyマイコンボード(Manycolors社)
ETロボコン(アフレル社,JASA) 組込みシステム向けライブラリ(ILC社)
![Page 19: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/19.jpg)
IoT, mruby/c
![Page 20: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/20.jpg)
IoT
• 組込みシステムの応用• デバイスをネットに接続して活用する
• 必要な技術– ハードウェア(センサ)– ソフトウェア(データ処理)– ネットワーク
![Page 21: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/21.jpg)
IoTで必要な処理• センサの値を取得• データ処理• センサデータの送信• データ蓄積、解析• データの利用
デバイスで行うmrubyの領域
![Page 22: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/22.jpg)
IoTの開発• 組込みシステムでも、より厳しい制約
• IoTデバイス– 小型– コスト– 電力– セキュリティ
実証実験・試作は成功するが、実運用できていない多くの事例
![Page 23: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/23.jpg)
IoTデバイス• 小型デバイスが不可欠
– ソフトが開発できる– ワンチップマイコン
• 試作~実運用まで考えると、– ソフト開発しやすい– 開発したソフトがデバイスに依存しない
![Page 24: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/24.jpg)
IoTデバイスの例
BLEモジュール(Nordic nRF52)
アナログを扱えるワンチップマイコン(Cypress PSoC5LP)
![Page 25: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/25.jpg)
さらにmrubyを小型化する• nRF52モジュール• ARM Cortex M4F• 64KB SRAM• 512KB Flash• BLE 4.2• NFC mrubyは厳しい
↓mrubyの小型化
![Page 26: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/26.jpg)
mruby/c
• mrubyバイトコードと互換性を持つVM• 相違点
– 少ないメモリで動作する(40KB程度)– 複数のmrubyプログラムを動かせる(シングルコア)
– オブジェクト実装の簡素化– 例外処理の簡素化– 処理速度よりも省メモリ
![Page 27: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/27.jpg)
mruby/cの方針• GCは消極的
– 基本的にGCはしない– プログラム終了時に全メモリを開放する– (リファレンスカウントを計画中)
• 最小のクラスライブラリ– 多くのクラスはオプショナル
• Cインターフェースが簡単に記述できる
![Page 28: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/28.jpg)
mruby/cの特徴• OS無しで複数プログラムを実行する
– 複数のセンサを利用する– 優先度が違うプログラムを実行する– (排他制御機能も持つ)
• メモリ管理– 静的に割り当てたメモリを利用する– ほとんどの場合に O(1) でメモリ割り当て
![Page 29: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/29.jpg)
消費メモリの比較実行時に必要なメモリ量
Ruby
mruby
mruby/c
数MB
400KB
< 40KB
![Page 30: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/30.jpg)
mruby/cが想定するデバイス• 小型デバイス、ワンチップマイコン
– 40KB程度のROM、20KB程度のRAM– OS無し
• 省電力デバイス– すぐに起動する
• イベント・ドリブンな処理– プログラムは短時間の動作(起動~実行~終了が短時間)
![Page 31: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/31.jpg)
その他• コンカレント処理
– CPUやOSの支援なしにコンカレント処理– 割り込みが利用できるなら利用する(パフォーマンス向上)
• メモリは静的に確保する– 高速な動的メモリ割り当てアルゴリズム
#define ALLOC_TOTAL_MEMORY_SIZE 0x2800static uint8_t memory_pool[ALLOC_TOTAL_MEMORY_SIZE];
allocもfreeも O(1)
![Page 32: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/32.jpg)
mruby/cのクラス• Object, True, False, Nil• Fixnum• Float• String• Symbol• Array• Hash• Range
赤字はオプショナル#define MRBC_USE_FLOAT 1#define MRBC_USE_STRING 1
![Page 33: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/33.jpg)
mruby/cの独自拡張• コンカレント実行するプログラムは独立したメモリ空間を持つ
• ただし、以下は共有する– クラス– メソッド– グローバル変数($で始まる変数)
![Page 34: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/34.jpg)
mruby/cの事例紹介(1)
![Page 35: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/35.jpg)
・概要- mruby/cを組込んだ水位・雨量センサーを河川等に設置- ゲートウェイを介して計測データを観測
・目的- mruby/cのフィールドでのユースケースの創出- 河川防災・減災に向けた新たな観測システムの構築
・実施主体- しまねソフト研究開発センター(島根県松江市)- 株式会社藤井基礎設計事務所 (島根県松江市)
実証実験mruby/cを組込んだ水位・雨量センサー観測実証実験
![Page 36: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/36.jpg)
・実施体制- しまねソフト研究開発センター
- 株式会社藤井基礎設計事務所
・実証期間- H29.6.21~H29.10.31
・実験場所- 島根県出雲市斐川町 新建川、間樋川
実証実験
・mruby/c水位・雨量センサープログラムの開発・ゲートウェイの通信環境の構築 etc
・センサー等関連機器の現地設置・データの可視化/新たな観測システムの構築検討 etc
mruby/cを組込んだ基盤・送信機
![Page 37: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/37.jpg)
実証実験
インターネット
水位データ送信
水位データ送信
水位データ送信
水位計 W-3
水位計 W-2
水位計 W-1
アンテナ
受信機(ゲートウェイ)LTE/3G
送信機・気圧センサー搭載
雨量データ送信気圧データ送信
雨量計 R-1
(株)藤井基礎設計事務所 サーバー
データグラフ配信(警報メール配信)
スマートフォン(携帯電話)
PC
実証実験システム構成図
![Page 38: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/38.jpg)
実証実験
赤色:河川水位、青色:日雨量
水位センサー設置箇所mruby/c基盤・送信機 実験地
R‐1地点における日雨量とW‐2地点における河川水位
![Page 39: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/39.jpg)
mruby/cの事例紹介(2)
![Page 40: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/40.jpg)
SenStick
• 小型センサデバイス(重さ 3.5g)
奈良先端科学技術大学院大学、Rubyビジネス推進協議会と共同開発
![Page 41: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/41.jpg)
SenStick
• 通信モジュール+
センサ• 搭載するセンサ
– 9軸– 温度– 湿度– 気圧– 照度(可視光、UV)
nRF52モジュール
![Page 42: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/42.jpg)
mruby, mruby/cの入手
https://github.com/mrubyc/mrubyc
http://www.s-itoc.jp
GitHubで公開中
mruby/cの情報: しまねソフト研究開発センター
https://github.com/mruby/mruby
http://forum.mruby.org
mrubyの情報: 軽量Rubyフォーラム
![Page 43: ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発](https://reader033.vdocuments.site/reader033/viewer/2022052308/5a65ebd77f8b9a8c538b4b05/html5/thumbnails/43.jpg)
ありがとうございました• 今後もmruby、mruby/c をよろしくお願いします。
• しまねソフト研究開発センター(A-02)– mruby/cの紹介
• 一般社団法人Rubyビジネス推進協議会(JA-06)– SenStickの紹介