******************************************************************************** セッションS1-a テーマ:「mrubyの現状と事例紹介」 講師:田中 和明(九州工業大学)    安積 卓也(大阪大学) 日時:2015/08/27 21:00~22:30 参加人数:45名程度 ******************************************************************************** (議事録本文) 前半:スライドをベースに説明を行い,最後は簡単なプログラムを動かすデモを行った. 後半:mruby,TECSを動かす環境を構築する説明を行い,実際に倒立制御をしながらライントレースするロボットのデモを行った. 自己紹介 —田中 和明(たなか かずあき) —九州工業大学 情報工学部 機械情報工学科 —組み込みシステム(ハード+ソフト)の研究 Ruby —オブジェクト指向(すべてがオブジェクト) mruby —rubyの仕様に従って,軽量化した言語 —実行時に必要なリソースを少なくする 組み込みシステム開発の課題 —質問:組み込みシステムの開発費の内訳は? ソフト>ハード(電子)>ハード(機構) —ハードの開発は相当のノウハウが蓄積されているのに対し,ソフトの開発はあまり進歩していないので,自由度が大きい.(簡単に複雑化してしまう) —コストを削減するためには,ソフトウェアを書かない(ライブラリが多い言語を使うと良い) Rubyの特徴 —ソフトウェア開発がしやすい —プログラムの可読性が高い —多くのライブラリが用意されている 開発のコスト削減,開発期間の短縮につながる. Rubyで組み込みシステムを開発するのは無理 —ライブラリが膨大なため,多くの資源を必要とする(数10MBのメモリ,数100msの初期化) mruby開発へ —経産省 地域イノベーション創出研究開発事業 「軽量Rubyを用いた組み込みプラットフォームの研究・開発」 —2010年〜2012年 rubyは動的な言語 —rubyに特化したコンパイラと実行環境(CやJavaのコンパイラではrubyの良さが損なわれる.) —さまざまな実行環境に対応する VMを移植することで,どの環境でも動作する.(ビルドに必要なものはCコンパイラだけ) —64bit,32bit,16bit,8bit(ARMcore,Intel,RX系)で動作確認済み mrubyでの開発 —VMによってCPU,OS,メモリが異なっていても実行できる. —PCで動作チェックを行い,ターゲット環境で実行できる. なぜ可能なのか? ハードウェアに依存する機能は,名前(アドレスではなく)で探して呼び出す. 欠点は,名前呼び出しなので遅い(クリティカルなシステムには使えない) mruby本体 —https://github.com/mruby/mruby(最新版) ※運が悪ければバグの可能性 —http://forum.mruby.org/(テスト済み) デモ —いくつかのプログラムを並列に実行. —出来たバイナリコードを見る. TECS —TOPPERSプロジェクトで開発しているコンポーネントシステム EV3RT+TECS —EV3RT上でのアプリケーションのコンポーネント開発が可能な環境 EV3でmrubyを動かす —mruby on EV3+TECSのパッケージをダウンロード https://www.toppers.jp/tecs.html#mruby_ev3rt 環境の構築 —windows7,windows8,windows8.1 —cygwinのインストール —クロスコンパイラ —mkimage デモおよびソースコードの解説 —倒立制御しながら,ライントレースを行うロボットのデモ —ライントレース部分の解説 —倒立制御部分の解説 質疑応答 Q.ライントレースに関して,4ms周期で1msで処理完了しているが,残りの75%を走行戦略など違うことに使えるのか? A.複数のVMを立ち上げて,マルチスレッドで実行すれば出来る.タスク間はリアルタイム通信. Q.動的言語の特徴である,実行時に変わりながら実行することはできるのか? A.現状は出来ないが,先例があり,Javaでインタラクティブに動かすものを作っている. Q.名前呼び出しで探索しているので遅いという欠点があるが,キャッシュはしてないのか? A. キャッシュはしてないが,サーチするときに一度探索したものは,上に持ってくるようにして似たようなことはしている. Q. 複数のVMを動かしたときのタスク間の通信は?(Ruby上で) A. 2つの方法がある.1つはTOPPERS/ITRONが用意しているメモリ共有やメッセージボックスを使う方法.もう1つはメッセージボックスを使ってキューを作って通信する方法. Q.TECSとmrubyを組み合わせることでよかったことは?TECSがない方が良い場合はある? A.すでに用意されているライブラリについてはmrubyですぐに使えるのが良いが,1から手で書いたプログラムよりは性能が(少し)落ちる可能性がある. Q.デモについて,ライントレースがカクカクしていたがmrubyのせいなのか? A.それはアルゴリズムの問題.mrubyでもPID制御をすれば,なめらかに制御できる. Q.なぜTECSと絡めたのか? A.TECSが自動生成してくれるのでCとmrubyの切れ目を決めずに段階的にできる.  Cのプロトタイプ宣言だけなら情報(型など)が足りない.データ構造を客観的に把握するためには情報を足す必要がある.その役割をTECSが担う. Q.オーバーヘッドはあるのか? A.オーバーヘッドはない.それがTECSの強み. Q.mrubyはLuaを意識していると思うが,違いは? A.使われているエリアが違う.Luaはコンパクトなところに使われているが,mrubyはコンパクトなところには使えない(使う意味がない)ので競合はしていない.C言語との中間あたりの位置づけ. Q.高速化については? A.高速化については意識してない.高速化を図るよりも時間の見積もりをできることが重要だと思う.実行時間の変動がないようにすることに意識している.(最悪実行時間〜最良実行時間) Q.C#やJavaなどのリフレクションはmrubyでも使えるのか? A.もちろん使える.リフレクションに関してはRubyは強い. Q.VMのストラクトのコンテクストのメモリは? A.90Byte程度.(制御ブロック部分だけでは).ヒープなどの概念はなく,固定. Q.関数呼び出しなどはスタックを使わないのか? A.スタック使う.スタック領域が固定である. Q.バイナリをはくなら,事前コンパイル(AOTコンパイル)をする手もあるのでは? A.バイナリをポータブルにしたいと考えている. Q.mrubyのディスコンパイラは作れるのか. A.理論上はできるが,実際に作るのは難しい.同じ意味のソースコードを生成するか怪しい.ちなみに盗まれた時のリスクを回避するために逆コンパイルできないようにするデコーダをVMにいれることを検討している. Q.並列処理では以前のmrubyではメモリをかなり使うが,このmrubyは違うのか. A.今まであったmrubyの機能をいくつか減らすことでコンパクトにしている.新しいアーキテクチャである.(まだ発表してない)