31
家電とRubyの最高にいい関係 CACAnet Fukuoka/近畿大学 山崎重一郎

Nerusi ruby メタプログラミング

Embed Size (px)

Citation preview

Page 1: Nerusi ruby メタプログラミング

家電とRubyの最高にいい関係

CACAnet Fukuoka/近畿大学 山崎重一郎

Page 2: Nerusi ruby メタプログラミング

mrubyボードで p 家電につぶやき機能 p 日本の電力問題にアプローチ p エンドユーザプログラミング

Page 3: Nerusi ruby メタプログラミング

p OSのオーバーヘッドなしてにハードを直接触れる p 家電にhttpアクセス機能がつく

AI搭載家電

http http

mrubyボード

mrubyボード搭載家電

寝室の掃除 終わったなっしー

Page 4: Nerusi ruby メタプログラミング

掃除機のつぶやきビッグデータ

寝室の掃除終わったし

居間を掃除中

キッチンに到着したし

何かにからまったし

寝室のドアが閉まっているし

日本中のルンバのつぶやきを集める

太郎の部屋に入れないし

Page 5: Nerusi ruby メタプログラミング

ねるし

仮想発電所 効果的節電=発電

ねるし

ねるし

ねるし

ねるし

ねるし

今は寝ないで!

近畿大学/福岡CSK 電力需給

フクオカRuby大賞奨励賞

Page 6: Nerusi ruby メタプログラミング

スマートグリッドとは p 目的(電力の同時同量制御) 電力需給バランス調は需要側の協力が重要

p 方法 電力網を情報技術で制御 莫大な投資が必要

Page 7: Nerusi ruby メタプログラミング

スマートグリッドの問題 p でも 電力需要自体はどうやって制御するの?

Page 8: Nerusi ruby メタプログラミング

スマートグリッドなんてなくても

p 最下流の家電が インターネットに情報を上げ リアルタイムに家電を制御できれば それでいいんじゃない?

インターネット

Page 9: Nerusi ruby メタプログラミング

p 利用者に伝えるだけでも効果がある p 充電機能付きにすると逆制御も可能

日本中のエレベータがつぶやけば

2階なら階段使えば

一人かあ

今電力足りてないし

7人かあ

一人かあ

2人かあ

Page 10: Nerusi ruby メタプログラミング

今は寝ないで! 今は寝ないで!

ぎざぎざが大きいほど、発電効率が悪い プラス側だと、消費電力が増加中

仮想発電所

Page 11: Nerusi ruby メタプログラミング

mruby p 組込みデバイス用Ruby p httpアクセスが1行で書ける SimpleHttp.new("157.13.59.2",80){|h|h.get("/robots/1/tweets/1", {})}

p OSが無いので、リアルタイム処理が軽い p センサー、アクチュエータ関連ライブラリ豊富

シリアル通信、I2C、SPI、サーボのPWM制御

Page 12: Nerusi ruby メタプログラミング

ルンバはAPIを公開している GND

Rx Tx

16V

Page 13: Nerusi ruby メタプログラミング

Roomba Serial Command Interface (SCI)

p 移動 前進、後退、回転、...

p 歌う p センサー 崖、壁、ドックを探す、ゴミ検出、モータ異常、...

p 制御関係 電圧、電流、充電状況、温度

Page 14: Nerusi ruby メタプログラミング

3Dプリンタで作成したルンバケース p  mrubyボードenziを搭載し、ルンバをhttp通信可能に p  無線LANでつぶやけるようにした

Page 15: Nerusi ruby メタプログラミング

ECHONET規格家電 p panasonic、東芝、SONY、デンソー、日立、京セラ、シャープ、NEC、富士通、...

Page 16: Nerusi ruby メタプログラミング

洗濯乾燥機API p  蓋が閉じてるか p  洗濯コース

p  水流設定 p  脱水回転設定

p  すすぎ回数 p  乾燥度設定 p  つけおき工程設定

p  ...

Page 17: Nerusi ruby メタプログラミング

洗濯乾燥機API p  蓋が閉じてるか p  洗濯コース

p  水流設定 p  脱水回転設定

p  すすぎ回数 p  乾燥度設定 p  つけおき工程設定

p  ...

Page 18: Nerusi ruby メタプログラミング

ドメイン指向言語(DSL) p RubyはDSLが作りやすい言語

Ruby on Rails Rake

RSpec ...

p メタプログラミングが得意

Page 19: Nerusi ruby メタプログラミング

エンドユーザプログラミング p 設計方針 ドメイン指向言語 学習不用(直感的にだいたいわかる) 心理的バリアを注意深く除去する

Page 20: Nerusi ruby メタプログラミング

学習不用(?) p テンプレートの修正型 p 例を見ると文法がなんとなくわかる p 改造の方法の例もわかる p 自分の意図がちゃんと伝わればいい

Page 21: Nerusi ruby メタプログラミング

まずロボットに名前をつける =インスタンス生成

p デフォルトの提示(変更可能箇所の表示)

p ユーザ定義の例

p 結果 Robotクラスのインスタンスが生成され     「るん太」メソッドで呼び出せる

ロボットの名前 "るんば"

ロボットの名前 "るん太"

るん太 =>Robotクラスのインスタンスが返ってくる

Page 22: Nerusi ruby メタプログラミング

define_methodで ロボットの名前メソッドを動的に生成

実際のプログラム class Robot

attr :name def initialize(name) @name=name end end def ロボットの名前(name) define_method(name) {Robot.new(name)} end

Page 23: Nerusi ruby メタプログラミング

p ベースステーションからの道順を記憶する

リビング

子供部屋

寝室

ダイニング

るん太.部屋を教える "寝室"

(1) リビングにルンバを置く (2) 上記の設定プログラム実行 (3) ルンバの復帰経路の逆順が リビングへの経路

ベースステーション

ロボットに部屋をおぼえさせる

るん太.部屋を教える "リビング"

Page 24: Nerusi ruby メタプログラミング

プログラム ユーザが書く部分

class Robot attr :name, :route def initialize(name) @name=name @route={} end def 部屋を教える(room) puts "#{room}とベースステーションとの道順をおぼえるなっしー" @route[room]=[] #実際には、ここでロボットからの道順を得る end end def ロボットの名前(name) define_method(name) {Robot.new(name)} end

るん太.部屋を教える "リビング"

Page 25: Nerusi ruby メタプログラミング

p 時刻になると掃除を開始する

リビング

子供部屋

寝室

ダイニング

るん太.時 16 do 掃除する "リビング" 掃除する "寝室" end

ベースステーション

ロボットに時刻起動

るん太.時 17 do 掃除する "ダイニング" 掃除する "寝室" 掃除する "子供部屋" 掃除する "リビング" end

Page 26: Nerusi ruby メタプログラミング

ブロックをcallする class Robot attr :name, :route def initialize(name) @name=name @route={} end def 時(time, &b) b.call(time) end end def 掃除する(room) puts "#{room}掃除終わったなっしー" end def ロボットの名前(name) define_method(name) {Robot.new(name)} end

るん太.時 14 do 掃除する "リビング" end

Page 27: Nerusi ruby メタプログラミング

修飾語の文法

るん太.金曜日.時 16 do 掃除する "リビング" 掃除する "寝室" end

p 条件、繰り返しなど るん太.毎日.時 16 do 掃除する "リビング" 掃除する "寝室" end

Page 28: Nerusi ruby メタプログラミング

洗濯機 p 洗濯機の名前をつけて ロボットの名前 "あらいくまもん"

p 設定を教える 洗剤 "粉" 注水 "多め" 浸け置き分 20 洗い.弱め分 3 洗い.普通分 6 ためすすぎ回 2 脱水分 6

浸け置き 終わったモン

Page 29: Nerusi ruby メタプログラミング

当然ですが、 複雑なことをするには複雑な文法になる

p でも、テンプレートは助けになる p 変更できる場所、選択肢はわかる p 辞書は事前に整備できる p 制御構造は、副詞、形容詞、時制に p 仮定法の表現も、物語風に(?)

Page 30: Nerusi ruby メタプログラミング

学習不用な言語にむけて p テンプレートの修正型 p 例を見ると文法がなんとなくわかる p 改造の方法の例もわかる p 自分の意図がちゃんと伝わればいい

Page 31: Nerusi ruby メタプログラミング

エンド・ユーザ・プログラミング

p 人工知能搭載家電の発展 p どうやって家電とお話するか? p Siriみたいな自然言語? p 簡易プログラミング言語の方が気持ちいいんじゃない?