SWEST 17 mruby の現状と事例紹介 九州工業大学情報工学部田中和明 RubyAssociation 軽量 Ruby フォーラム

Similar documents
TOPPERS基礎ロボコンセミナー

<4D F736F F F696E74202D20834A815B836C838B835C815B835882CC95E082AB95FB F4B2E B8CDD8AB B83685D>

EV3RTの概要.pptx

TECSをサポートする構造設計ツール ZIPC Toy!

EV3_APIの解説.pptx

Windows への opensource COBOL 環境の構築手順 0. 前提条件当手順は Windows へ opensource COBOL 環境を構築する手順である 手順確認時の OS と時期は以下の通りである OS Windows 8.1(64bit) 時期 2018/09 1. 構築手

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

「Microsoft

インテル(R) Visual Fortran コンパイラ 10.0

Windows2000/XPインストール手順

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト :

IntroductionForGR-PEACH.pptx

第3部:プログラミング実習

インストールマニュアル

Microsoft Word - XOOPS インストールマニュアルv12.doc

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

Microsoft Word - tutorial3-dbreverse.docx

SLCONFIG の操作 JF1PYE Ⅰ. PC と slconfig の通信設定 Ⅱ. Slconfig の操作 Ⅲ. 端末ソフトによる Command 機能 Ⅳ. slconfig 実行形式プログラムの作成 Ⅴ. 端末ソフト Tera Term のダウンロード インストー

Raspberry Pi で WEB カメラを使用 会津大学 RT ミドルウェア講習会 2017 The University of Aizu

EV3RT Real- Time platform for EV3 user/ev3pf/wiki/whatsev3rt TOPPERS/HRP2カーネルをベースとしたプラット フォーム メモリ 保 護 機 能 を 提 供 CやC++で 開 発

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門がじぇるね IoT 部門作品のタイトル : TOPPERS_ASP3 カーネルと astah*-uml による状態マシン図でのソフト設計と動作検証の試み作成者 : 塩出武 ( しおでたけ

Java Bridgeを利用した他言語によるデータロード&プロットデモ

AN1609 GNUコンパイラ導入ガイド

Microsoft.NET Framework インストール手順 1. をご利用される際には Microsoft.NET Framework 2.0 以降のバージョンと Microsoft.NET Framework 4

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

TaskClock_マニュアル.xlsx

Studuinoライブラリ環境設定Mac編

自宅でJava言語の開発環境を作る方法

BricRobo V1.5 インストールマニュアル

無償コンパイラ(JDK(Java Development Kit))を用いたJavaプログラムの実行方法

京都大学認証基盤ドライバソフト 導入手順書 (WindowsVista ~ Windows10 版 ) 京都大学情報環境機構 第 1 版第 2 版第 3 版 2015 年 3 月 27 日 2015 年 6 月 17 日 2015 年 12 月 9 日

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

Microsoft Word - Mac版 Eclipseの導入と設定.docx

24th Embarcadero Developer Camp

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009

Studuino ライブラリ環境設定Windows編

プログラミング基礎

PCL6115-EV 取扱説明書

目次 1 はじめに アンインストール前の注意点 Sophos アンインストール手順 アンインストーラの場所を確認する アンインストーラの実行 F-Secure Client Security for Mac インストー

RW-5100 導入説明書 Windows7 用 2017 年 7 月 シャープ株式会社

G800SE HTMLdocument update

DWR-R02DN Updater 取扱説明書 発 :2015/10/30

Hphi実行環境導入マニュアル_v1.1.1

CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

P7000_P6000バージョンアップ

TOPPERS活用アイデア・アプリケーション開発

Microsoft PowerPoint - DEXCS2015_Salome_Installation pptx

AP-RZA-1A シリアルFlashROMの書き込み方法

Windows Server 2012 および Windows Server 2008 のインストール

FlashAir ソフトウェア更新ツール Version 東芝メモリ株式会社 Copyright 2017 Toshiba Memory Corporation, All Rights Reserved. 対応 OS: 最新の対応 OS は Web サイトをご参照ください 概要本ソフ

CX6_firmup

組込みシステムにおける UMLモデルカタログの実践研究

Java言語環境Java2SEついて

Steinberg 社 - VST3 対応シンセサイザービルド環境テンプレート (Windows 版 ) Quick 説明書 はじめにこの度は Steinberg 社 - VST3 対応シンセサイザービルド環境テンプレートをダウンロードして下さり 誠にありがとうございます 本説明書はビルド環境テンプ

プログラミング実習I

Java言語 第1回

nLiteによるドライバの統合 - フロッピーディスク不要のXPインストールCDの作成方法 -

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

Microsoft Word - 補足説明_Win7_Server2008R2__R1.doc

RW-4040 導入説明書 Windows 7 用 2017 年 7 月 シャープ株式会社

電子納品チェックシステム利用マニュアル

ソフトウェア更新の前に お客様に より快適に LGL22 をご利用いただくため ソフトウェア更新によるアップグレードを行っております この手順書は LGL22 とパソコンを microusb ケーブルにて接続してソフトウェア更新を行う方法となります ソフトウェア更新は microusb ケーブルによ

GettingStartedTK2

開発環境構築ガイド

TOPPERS活用アイデア・アプリケーション開発

GHS混合物分類判定システムインストールマニュアル

地図 SD カードを取り外す 最初に ナビゲーション本体から地図 SD カードを取り外します 本操作は地図 SD カードを初めて ROAD EXPLORER Updater に登録するときや パソコンにダウンロードしたデータを地図 SD カードに保存するときに実行してください 1 ナビゲーション本体

TestDesign for Web

Windows AIKを使用したPE2

1. Borland C++Compiler をインストールする 1.1. Borland C++Compiler をダウンロードする Borland C++Compiler とは Borland 社がフリーソフトウェアとして公開している C 言語と C++ 言語の Windows 用コンパイラです

Microsoft Word - XPC4ソフトマニュアル.doc

Transcription:

SWEST 17 mruby の現状と事例紹介 九州工業大学情報工学部田中和明 RubyAssociation 軽量 Ruby フォーラム

自己紹介 田中和明 ( たなかかずあき ) 九州工業大学情報工学部機械情報工学科 出身は情報工学で, 力学は不得意機械らしいことを研究テーマに... 組込みシステム ( ハード + ソフト ) の研究

Ruby と mruby Ruby オブジェクト志向プログラム言語 ISO30170 / JIS X 3017 Web アプリケーション開発では標準的な言語 mruby Ruby の仕様に従って, 軽量化した言語 実行時に必要なリソースを少なくする

組込みシステム開発の課題 組込みシステムの開発費内訳 (1) (2) (3) に入るのは? A : ハードウェア ( 電子系 ) B : ハードウェア ( 機構系 ) その他共通費用 C : ソフトウェア システム開発費 (3) (1) (2) IPA 組込みソフトウェア産業の現状と課題 より抜粋

組込みシステム開発の課題 組込みシステムの開発費内訳 その他共通費用 システム開発費 ハードウェア ( 機構系 ) ソフトウェア ハードウェア ( 電子系 ) IPA 組込みソフトウェア産業の現状と課題 より抜粋

開発費内訳について 開発費はソフト > ハード ( 電子 ) > ハード ( 機構 ) ハード ( 機構 ) の開発は, 相当のノウハウが蓄積されてきている 物理的な制約から, 自由度は少ない ( 組込みシステムにおいて ) ソフトウェアの開発は, あまり進歩していない 自由度が大きい ( 簡単に複雑化してしまう )

Ruby が使われる理由 ソフトウェア開発がしやすい 開発者のためのプログラム言語である ( まつもとゆきひろ氏 ) プログラムの可読性が高い 自分のプログラム, 他人のプログラムを理解しやすい 多くのライブラリが用意されている

Ruby のプログラム 次のプログラムの振る舞いを推測してみてください Raspi.digitalWrite 5, Raspi::HIGH Raspi.digitalWrite 13, Raspi::LOW Raspi.digitalWrite 26, Raspi::HIGH ( 補足説明 ) digitalwrite: 信号 (HIGH/LOW) を出力する 信号 5: 青色 信号 13: 黄色 信号 26: 赤色

Ruby プログラムの特徴 プログラムを読みやすい プログラムを書きやすい保守しやすい不具合を減らせる ソフトウェアのコストを減らせる開発期間を短縮できる ソフトゥエア開発を試行錯誤できる

Ruby で組込みソフトを開発 かなり無理 Ruby インタープリタが多くの資源を必要とする 数十 MB のメモリ 数百 ms の初期化

mruby 開発へ Ruby の特徴 ( 開発者に優しい ) を組込みソフト開発へ導入する 経済産業省地域イノベーション創出研究開発事業 軽量 Ruby を用いた組込みプラットフォームの研究 開発 2010 年 2012 年

Ruby プログラムの実行 Ruby ソースコード コードの解析 中間コードの生成 実行

mruby の動作 Ruby ソースコード コードの解析 開発時に済ませておく 中間コードの生成 実行 この状態を保存する 組込み機器で動かす

コンパイル C 言語や Java のようなコンパイル動作と同じ? C 言語や Java では, コンパイルにより動作を事前に最適化して機械語に変換している ( コンパイル処理 ). コンパイル後の機械語を実行する. アイディアとしては C や Java と同じしかし...

mruby Ruby コンパイラを作れば良い! Ruby は動的な言語である C や Java のようなコンパイルでは不十分 Ruby の良さが失われてしまう

( 参考 ) 動的とは? a = 15 p a * 2 a = 1.2 p a * 2 a = "abc" p a * 2 a の内容によって a * 2 の動作が変わる. 機械語を生成できない a = [1,2] p a * 2

( 参考 )C 言語では #include <stdio.h> int main(void) { int a1 = 15; double a2 = 1.2; } printf("%d\n", a1 * 2); printf("%f\n", a2 * 2); return 0; a = 15 p a * 2 a = 1.2 p a * 2 a = "abc" p a * 2 a = [1,2] p a * 2

( 参考 ) 動的とは? 先の例は, C++ の仮想関数でも実現できる では以下のようなプログラムは? def func(n) return n+1 end if rand(2)==1 then def func(n) return n*2 end end p func(5)

mruby Ruby に特化したコンパイラと実行環境 さらに さまざまな実行環境に対応する 他機種への対応 : 実行環境に依存する部分だけを実装するだけで良い

VM で実行することで可能となること VM さえ移植すれば, どのような環境でも動作する! VM のビルドに必要なのは,C コンパイラだけ マイコン用の VM PC 用の VM

mruby で実現する 組込みソフトの開発 Ruby ソースコード コンパイル 中間コードの生成 PC 版の VM で動かす挙動を検証できる PC である程度の動作をチェックしたら マイコンに書き込んで VM で動かすターゲット環境

mruby で実現する 組込みソフトの開発 Ruby ソースコード CPU,OS, メモリなど全てが異なっていても OK コンパイル 中間コードの生成 PC 版の VM で動かす挙動を検証できる PC である程度の動作をチェックしたら マイコンに書き込んで VM で動かすターゲット環境

DEMO エミュレーションと実行 loop do Raspi.digitalWrite 26, Raspi::LOW Raspi.digitalWrite 13, Raspi::HIGH Raspi.sleep 1 Raspi.digitalWrite 13, Raspi::LOW Raspi.digitalWrite 5, Raspi::HIGH Raspi.sleep 1 Raspi.digitalWrite 5, Raspi::LOW Raspi.digitalWrite 26, Raspi::HIGH Raspi.sleep 1 end

どうしてこのような実行が可能なのか? VM がコードを実行する仕組み 中間コードは環境に依存しない形式 ハードウェアに依存する機能 ( 関数など ) は, 名前で呼び出す Raspi.digitalWrite 26, Raspi::LOW VM のライブラリから digitalwrite の機能を探してその機能を実行する

mruby 関連情報 mruby 本体 https://github.com/mruby/mruby http://forum.mruby.org/ Ruby mruby 活用ガイドブック 中国経済産業局のホームページからダウンロードできます.

付録 : EV3 で mruby を動かしてみる 資料作成協力者 安積卓也 ( 大阪大学 ) 石川拓也 ( 名古屋大学 ) 長原裕希 ( 立命館大学 ) 長谷川涼 ( 大阪大学 )

EV3 用プラットフォーム LMS2012 (Linux ベースの VM) その他の OSS... 名古屋大学により開発 デバドラなどを Linux などから移植 MINDSTORMS EV3 用 TOPPERS プラットフォーム lejos (Java VM) MonoBrick (.Net framework) ev3dev (Linux) EV3RT 今回のプラットフォーム TOPPERS/ASP TOPPERS/HRP2 TECS 仕様 TECS WG により開発 mruby の動作環境

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 を自動生成

最新版を入手 パッケージをダウンロードして解凍 http://www.toppers.jp/tecs.html#mruby_ev3rt $ tar xvzf mruby-on-ev3rt+tecs_package-alpha1.0.2.tar.gz ダウンロードしたパッケージ名

環境の構築 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/gccarm-none-eabi-4_8-2014q3-20140805-win32.exe mkimage Windows 用バイナリはパッケージに同梱 Cygwin 及びクロスコンパイラのインストールは EV3RT の開発環境構築を参照してください http://dev.toppers.jp/trac_user/ev3pf/wiki/devenvwin

パスの通し方 クロスコンパイラをインストールしたディレクトリに PATH を通す C: Program Files (x86) GNU Tools ARM Embedded 4.8 2014q1 bin フォルダ名は クロスコンパイラのバージョンごとに変わります arm-none-eabi-gcc へパスが通っているかを確認 コンパイラバージョンが表示されない場合 :Path を確認

ディレクトリ構造 bin Windows 向け開発環境のバイナリ mkimage を含む doc mruby リファレンス ビルド手順 サンプルプログラムの説明 hr-tecs TOPPERS/HRP2 及び EV3 プラットフォーム サンプルプログラム (hrtecs/workspace/mruby_samples) mruby mruby ver1.1.0 build_config.rb で EV3 用のクロスコンパイルを指定

コンパイル手順 mruby のビルド (host 用コンパイル ARM 用クロスコンパイル ) パッケージを展開したディレクトリで $ cd mruby $ make mruby ディレクトリで make を実行すると mruby がビルドされる ビルドには ruby 及び bison のインストールが必要下記の出力がされればビルド成功

コンパイル手順 EV3RT+TECS EV3 ドライバ アプリケーションのビルド準備 SD カードへコピー デフォルトでは cygwin が使用されていることを想定の上で E ドライブにコピーされる ドライブを変更するには サンプルコードの Makefile を編集 hr-tecs/workspace/mruby_samples/makefile Makefile 内を "SD_DIR" で検索して 変数に SD カードドライブを指定 SD カードドライブのドライブレターに合わせてください ここで指定したディレクトリに EV3 用イメージファイルがコピーされます ここの名前を SD カードのドライブ名に変更

実行したいプログラムを選択 hr-tecs/workspace/mruby_samples/makefile 実行したいアプリアプリケーションを一つ選ぶ

コンパイル手順 EV3RT+TECS EV3 ドライバ アプリケーションのビルド パッケージを展開してディレクトリで $ cd hr-tecs/workspace/mruby_samples/ $ make tecs GNU Make が tecsgen を実行してくれます $ make depend ファイルの依存関係を抽出します ヘッダファイルなど 読み込まれるファイルを更新していなければ 実行する必要ありません $ make カレントディレクトリをサンプルアプリケーションのディレクトリに移動し make を行うことでコンパイルが行える

コンパイル手順 :1make tecs tecs.timestamp が出力されれば成功

コンパイル手順 :2make depend touch omit_svc.h が生成されてからしばらく待つ ( 処理中 ): 長い場合数分

コンパイル手順 :3make このような出力が出れば成功 下記のようなエラーになる場合は SD_DIR の指定が間違っているもしくは SD カードを認識していない ( ささってない )

コンパイル手順 :uimage ビルドの確認 mkimage が生成され uimage がコピーされていれば ビルド成功です SD カードのルートディレクトリに uimage というファイルができます SD カードを EV3 本体に入れる

本体操作基本操作 中央 (Enter) ボタンで電源オン OS 起動中 中央 (Enter) ボタンで mruby プログラム開始 戻る (Back) ボタン長押しで電源オフ LED が赤の間は OS の起動中 LED が緑になれば OS 起動完了

コンパイル手順 : サンプルプログラムの変更の場合 サンプルプログラムの変更後は make だけで良い (make tecs, make depend は一度だけ ) サンプルプログラムの変更 make

ev3way_sample ET ロボコン用のサンプル 倒立制御しながら ライントレースを行う タッチセンサ (:port_1) カラーセンサ (:port_2) ジャイロセンサ (:port_3) 超音波センサ (:port_4) しっぽモータ (:port_a) 右モータ (:port_b) 左モータ (:port_c)

ev3way_sample 操作手順 電源を入れる 黒色のライン上にカラーセンサを移動 タッチセンサを押す : 黒色の値を取得 白色の上にカラーセンサを移動 タッチセンサを押す : 白色の値を取得 : しっぽを下ろす ライン上移動 タッチセンサを押す : ライントレーススタート

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

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" タッチセンサが押されるまで待つ カラーセンサ n 回取得し 平均値を取得 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

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 def tail_control(angle) $motor_l.reset_count 目標値 現在の値 $motor_r.reset_count # reset Gyro sensor pwm = ((angle - $motor_t.count) * P_GAIN).to_i $gyro.reset pwm = (pwm > PWM_ABS_MAX)? PWM_ABS_MAX : (pwm < -PWM_ABS_MAX)? -PWM_ABS_MAX : pwm # Signal start status $motor_t.power = pwm LED.color = :green $motor_t.stop(true) if pwm == 0 end

ev3way_sample.rb ライントレース 障害物まで一定の距離以下に なると止まる 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 # 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 カラーセンサと閾値と比較し サンプルでは 30に固定 どちらかに曲がる } ここを変更すると 自前のライントレースが可能

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 } バランサの返り値が2つ C言語で実装されたバランサを呼び出す 4ミリ秒周期で実行 現状1ミリ秒程度で処理完了 mubyでも十分制御可能

パッケージ内のドキュメント doc/ev3rt_mruby_api_reference.pdf 提供しているサンプル doc/mruby_on_ev3rt+tecs_build.pdf 環境設定 doc/mruby_sample.pdf サンプルプログラムの説明

問い合わせ先 リンク 質問等は下記の ML に users@toppers.jp モニタ募集中 EV3RT http://dev.toppers.jp/trac_user/ev3pf/wiki/whatsev3rt