SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
組込みシステム開発の 
勘所と実践 
⾼高 瀬 英 希
組込みシステムとは? 
• 乱暴暴な定義をすれば, 
「汎⽤用システム以外のコンピュータシステム」 
• 各種の機器に組み込まれて,特定の機能を実現する 
ためにその制御を⾏行行うコンピュータシステム 
• アプリケーション特有の要求に対して特化して 
設計されるため,必然的に多様な専⽤用システムになる 
• 利利⽤用可能な資源が限られる 
– プロセッサ周波数,メモリ量量,バス幅,... 
– 回路路⾯面積,製品サイズ,... 
– 信頼性,連続駆動時間,消費電⼒力力,... 
2
組込みシステムの適⽤用分野 
産業機械 
制御機器 
情報家電機器 
モバイル情報端末 
⾃自動⾞車車 
航空・宇宙 
3
組込みシステムの特性 
• 機器の⾼高機能化,複雑化,デジタル化 
• 環境とのインタラクション 
• ⾼高い信頼性 
• 特定⽤用途向け(+「汎⽤用機能」) 
• 厳しいリソース制約 
– CPU能⼒力力,メモリ容量量,製品サイズ,低消費電⼒力力 
• ネットワーク接続性とセキュリティ強化 
• リアルタイム性   
4
組込みシステム開発の勘所 
リアルタイム性を確保する 
既存資産の仕様を理理解する 
– 実習教材システムの紹介 
理理想と現実のぶれを考慮する 
– 外部環境とのシステム同定 
クロス開発環境を整備する 
– リモートデバッグ環境 
5
リアルタイム性 
組込みシステムにはリアルタイム性が必要 
• タスクが定められた時刻(デッドライン)までに処理理を 
終えるための性能 
– 処理理結果の正確さに加えて,処理理時間の正確さが求められる 
• ⼊入⼒力力から応答までの処理理時間が⼀一定に⾒見見積もれることが重要 
– 単に⾼高速であればいいわけではない! 
• 例例1:ブレーキシステム 
○:ペダルを踏んだら常に3ms以内に制動が働く 
×:最速1msで制動が働く,たまに10msくらい掛かることがある 
• 例例2:動画再⽣生プレーヤ 
○:常に30fpsの処理理性能を保証する 
×:最⾼高50fps,頻繁に10fpsまで性能が落落ちる 
6
リアルタイム性の分類 
• ハードリアルタイム 
− デッドラインを過ぎると 
処理理の価値がただちに0 
(以下)になる 
− 例例:ブレーキ制御 
• ソフトリアルタイム 
− デッドラインを過ぎると 
処理理の価値が緩やかに 
減少していく 
− 例例:動画再⽣生プレーヤ 
価値 
時間 
デッド 
ライン 
価値 
時間 
デッド 
ライン 
7
LEDーCamp2競技会のミッション 
地点間を指定された 
順序かつ時間で移動する 
処理理時間を考慮して 
ソフトウェアを設計する 
8
リアルタイム性向上のために 
• 時間制約を洗い出す 
– ⼊入⼒力力から処理理までの時間 
– 処理理そのものに掛ける時間 本実習の着眼点 
– 処理理終了了から出⼒力力までの時間 
• 処理理を適切切にタスク分割する 
– システムの機能と重要度度に応じて分割する 
• 重要度度=優先度度 
– モジュール化のためにも重要(⽣生産性・保守性UP) 
• 今回の教材では実践が難しい,,, 
9
組込みシステム開発の勘所 
リアルタイム性を確保する 
既存資産の仕様を理理解する 
– 実習教材システムの紹介 
理理想と現実のぶれを考慮する 
– 外部環境とのシステム同定 
クロス開発環境を整備する 
– リモートデバッグ環境 
10
実習教材システムの構成 
Arduino Uno R3 
11 
物体との距離離 
超⾳音波距離離センサ 
iRobot Create 
デバッグデータ 
書き込み 
FlashAir
iRobot Create 
• 掃除機型ロボット 
– お掃除機能の無いRoomba 
• 主要な検知系 
– 左右バンパ 
– IRセンサ(ドッグ位置検知) 
– クリフセンサ 
– ボタン×3 
• 主要な制御系 
– 左右タイヤ 
– LED×3 
• コマンドモジュール 
– ホストからは8ビットのシリアル通信でやり取り 
– ROS (Robot Operating Systems) による隠蔽化 
• CPU : Atmel AVR ATMega168 8-bit RISK 18.432MHz 
• Flash memory 14336bytes (14kbyte) EEPROM 512bytes 
12
iRobot Create 
左バンパ 
D-Sub 25pin経由で 
Arduinoと接続 
充電 
Power/Play/ 
Advancedボタン 
右バンパ 
右タイヤ左タイヤ 
13 
バッテリ 
ドッグとの 
接触位置 
ドッグ位置 
検知⽤用のIR 
他ドッグとの 
⼲干渉に注意
Createの動作モード 
• Off Mode 
• Passive Mode 
– Play/Advancedの操作で10種類のデモが動作できる 
– センサ値の取得はできる 
• Safe Mode 
– 制御コマンドのやり取りによって,センサ値の取得 
および動作の制御ができる 
– 落落下検知,脱輪輪または充電時には緊急停⽌止する 
• Full Mode 
– 制御コマンドのやり取りによって,センサ値の取得 
および動作の制御ができる 
14
Create API 
• 詳細は資料料集末尾のAPIリファレンスにて 
• センサ系 
– 各種検知系の状態や値を取得する 
– APIによって振る舞いや戻り値の意味が異異なることに 
注意すること 
• スタート制御系 
– 動作モードを指定しつつスタートする 
– 動作モードを変更更する 
• 動作制御系 
– Createの動作(主にタイヤ)を制御する 
15
Maxbotix LV-EZ1 
• 超⾳音波の送受信で物体までの距離離を測るセンサ 
• 主要なスペック 
– 測定範囲:0インチ〜~254インチ(約6.45mまで)  
– 分解能:1インチ(約2.54cm) 
– 超⾳音波周波数:42kHz 
• 出⼒力力形式 
– シリアル 
– アナログ電圧(PWMをCRで平滑滑) 
– パルス幅出⼒力力 
• API (getRange) の戻り値の単位は「mm」 
16
Arduino 
• オープンソース・ハードウェア 
– ハードウェア設計が公表されている 
– CC BYーSA(表⽰示・継承)で 
再利利⽤用が可能 
• Arduino IDE:統合開発環境 
– 詳細は後述 
• Arduino Uno R3 
– マイコン:ATmega328P (AVR 8-bit MCU / 16MHz) 
– 動作電圧:5V ⼊入⼒力力電圧(推奨):7〜~12V 
– デジタルI/Oピン:14本(うち6本はPWM出⼒力力可) 
– アナログ⼊入⼒力力ピン:6本(デジタルI/Oとしても使⽤用可) 
– Flash:32KB (うち0.5KBはブートローダ) 
– SRAM:2KB EEPROM:1KB 
17
FlashAir 
• ⼀一般的には「無線LAN搭載SDHCメモリカード」 
• 実際は, 
フラッシュメモリ 
+無線LAN 
+Webサーバ 
• LEDーCamp2では,無線でのリアルタイム 
デバッグに利利⽤用する 
– 詳細は後述 
18
組込みシステム開発の勘所 
リアルタイム性を確保する 
既存資産の仕様を理理解する 
– 実習教材システムの紹介 
理理想と現実のぶれを考慮する 
– 外部環境とのシステム同定 
クロス開発環境を整備する 
– リモートデバッグ環境 
19
外部環境とのインタラクション 
センサ 
アクチュエータ 
外部環境 
(物理理現象) 
計算機 
オペレータシステム 
20
理理想とのぶれ 
Drive(100, 100);理理想的な 
移動位置 
21 
現実,,, 
ずれの要因: 
個体差 
センサ特性 
床⾯面の材質 
タイヤの摩耗度度 
etc, etc, … 
最⼩小⼆二乗法を⽤用いて 
パラメータを調整する
左右モータの出⼒力力 
L 
R 
外乱v 
外乱v 
モータL⼊入⼒力力 
モータR⼊入⼒力力 
外乱は測定誤差とする 
モータL⼊入⼒力力=L⾛走⾏行行距離離 
モータR⼊入⼒力力=R⾛走⾏行行距離離 
• L,Rそれぞれのずれの要因になる関数を知りたい 
• 逆関数を求められれば,ちゃんと指定した通りの 
距離離を⾛走ってくれるようになるはず 
22
計測 
中⼼心点を(0,0), 始点を(-r, 0)とすれば 
x^2 + y^2 = r^2より 
(-r+x)^2 + y^2 = r^2 
r = (x^2 + y^2) / 2x, θ = atan(y, -r+x) 
θ 
到達点 (x,y) 
r 
タイヤ間距離離=260mm 
始点 (0,0)中⼼心点 (r,0) 
r 
左モータ⾛走⾏行行距離離 = 2 π * (r+L) / θ 
右モータ⾛走⾏行行距離離 = 2 π * (r-L) / θ 
23
最⼩小⼆二乗法による逆関数の導出 
input A 
output 
y 
・逆関数 
24 
測定 
利利⽤用 
1⼊入⼒力力1出⼒力力 1次関数
ここまでの例例は1⼊入⼒力力1出⼒力力 
• 実際には考慮すべき⼊入⼒力力値はまだある 
– 速度度:複数の設定速度度それぞれで求める 
– バッテリー:本システムではほぼ影響しない 
output 
input1 
input2 
2⼊入⼒力力1出⼒力力 
平⾯面関数 
25
組込みシステム開発の勘所 
リアルタイム性を確保する 
既存資産の仕様を理理解する 
– 実習教材システムの紹介 
理理想と現実のぶれを考慮する 
– 外部環境とのシステム同定 
クロス開発環境を整備する 
– リモートデバッグ環境 
26
クロス開発環境 
• セルフ開発 
– プログラムの開発環境と 
実⾏行行環境が同じ 
• クロス開発 
– プログラムの開発環境と 
実⾏行行環境が異異なる 
– デバッグ環境も異異なる 
27 
組込みではクロス開発が当たり前 
開発環境・デバッグ環境を 
整備することが重要!!
Arduino IDE 
• エディタ・コンパイラ・ダウンロード・デバッグの 
各機能が統合された開発環境 
– 内部で gcc や avrdude が動作 
– 注意点:Arduinoのプログラム書き換えの際は 
Createの電源を切切っておくこと! 
ボード名 
「ツール」→「マイコンボード」 ポート名 
「ツール」→「シリアルポート」 
マイコンに書き込み 
コード⾏行行数 
スケッチ名 
検証・コンパイル 
シリアルモニタを開く
Arduinoのプログラミングモデル 
• Arduino⾔言語 
– C⾔言語のすべての構造 
– ⼀一部のC++の機能 
• クラスなど 
29 
setup() 
最初に⼀一回だけ実⾏行行される 
loop() 
繰り返し実⾏行行される 
delay() 
m秒単位で遅延させる
シリアルデバッグ 
30 
Arduinoと 
ノートPCを 
ケーブル接続 
void setup() { 
Serial.begin(9600); 
} 
void loop() { 
Serial.println(Hello!!); 
Serial.println(num); 
num++; 
delay(1000); 
} 
シリアルモニタで 
出⼒力力を確認
FlashAirを使った無線デバッグ 
31 
無線で 
データ通信 
Webブラウザ上で 
リアルタイム表⽰示
デバッグ画⾯面のブラウザ表⽰示 
32 
センサ値表⽰示メッセージ表⽰示 
⾃自動スクロールで 
ログデータを表⽰示
デバッグデータの出⼒力力⽅方法 
• 各種センサ値の出⼒力力:DATA.CSV 
– 形式:[serialNumber], [elapsedTime], 
資料料集から 
修正 
[totalDistance], [currentAngle], [battery] 
– API例例:CreateDataSDWriter.printCreateData(create); 
• printf デバッグ:PRINT.CSV 
– 形式:[Num],[Tag],[Message] 
• [Num] は1から開始してインクリメントすること 
– API例例:SDWriter.printf(“print.csv”, 
%d,DATA,Hello FlashAir!!n, + 
+print_counter); 
• FlashAirへの接続⽅方法は配布資料料を参照 
33
FlashAirデバッグの注意点① 
資料料集から 
• printCreateData APIの内部で 
getDistance(), getAngle() を使⽤用している 
修正 
– getDistance(), getAngle() は前回実⾏行行時からの 
差分を返しており,printCreateData APIは内部で 
値を累累積している 
• ログの取得/表⽰示にオーバヘッドが掛かる 
– ログ取得:SDカードへの書き込み 
– ログ表⽰示:ネットワーク接続・スクリプト実⾏行行 
→ デバッグ機能の有無で振る舞いは変わる!! 
34
FlashAirデバッグの注意点② 
• FlashAirへの接続が安定しない場合には 
モバイルバッテリでArduinoに給電する 
資料料集から 
修正 
– FlashAirの電⼒力力供給が安定しないため 
– CreateとArduinoの電源ライン(⾚赤線)は抜いておく 
• 未使⽤用時はFlashAir接続を遮断する 
– トラフィックの負荷軽減のため 
• ルータの同時接続数は50 
– FlashAirのWebサーバは1リクエストずつ逐次処理理する 
35
組込みシステム開発の勘所 
リアルタイム性を確保する 
既存資産の仕様を理理解する 
理理想と現実のぶれを考慮する 
クロス開発環境を整備する 
36 
本講義の内容を 
“まずは”チーム開発実習に 
活かして取り組みましょう!

Contenu connexe

En vedette

Raspberry piでシリアルサーボ
Raspberry piでシリアルサーボRaspberry piでシリアルサーボ
Raspberry piでシリアルサーボ
Tatsuya Yamamoto
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいか
Tsuyoshi Kato
 
プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
 プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター) プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
Ryota Nakamura
 
Graphic recoding-ws-
Graphic recoding-ws-Graphic recoding-ws-
Graphic recoding-ws-
Naoka MISAWA
 
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
Samurai Incubate Inc.
 

En vedette (20)

L-R
L-RL-R
L-R
 
Androidでロボットを動かそう・すまべん関西201003
Androidでロボットを動かそう・すまべん関西201003Androidでロボットを動かそう・すまべん関西201003
Androidでロボットを動かそう・すまべん関西201003
 
組込みSW開発技術研究会キックオフミーティング
組込みSW開発技術研究会キックオフミーティング組込みSW開発技術研究会キックオフミーティング
組込みSW開発技術研究会キックオフミーティング
 
ESS2015 10周年記念企画パネル1: これからの10年 ~岐路に立つ日本の学会活動~
ESS2015 10周年記念企画パネル1: これからの10年 ~岐路に立つ日本の学会活動~ESS2015 10周年記念企画パネル1: これからの10年 ~岐路に立つ日本の学会活動~
ESS2015 10周年記念企画パネル1: これからの10年 ~岐路に立つ日本の学会活動~
 
Raspberry piでシリアルサーボ
Raspberry piでシリアルサーボRaspberry piでシリアルサーボ
Raspberry piでシリアルサーボ
 
アウトソーシング嫌いのベンチャーが2ヶ月間でオフショア開発でサービスをローンチしてみた(pjマネジメント編)
アウトソーシング嫌いのベンチャーが2ヶ月間でオフショア開発でサービスをローンチしてみた(pjマネジメント編)アウトソーシング嫌いのベンチャーが2ヶ月間でオフショア開発でサービスをローンチしてみた(pjマネジメント編)
アウトソーシング嫌いのベンチャーが2ヶ月間でオフショア開発でサービスをローンチしてみた(pjマネジメント編)
 
組込みだからこそアジャイルやろうよ! (JASA中部セミナー20131004)
組込みだからこそアジャイルやろうよ! (JASA中部セミナー20131004)組込みだからこそアジャイルやろうよ! (JASA中部セミナー20131004)
組込みだからこそアジャイルやろうよ! (JASA中部セミナー20131004)
 
情報の『見える化』ってなぜ大事?どうやるの? ~グラフィック・レコーディングで考えてみよう~フェリス女学院大学『社会的起業』
情報の『見える化』ってなぜ大事?どうやるの?~グラフィック・レコーディングで考えてみよう~フェリス女学院大学『社会的起業』情報の『見える化』ってなぜ大事?どうやるの?~グラフィック・レコーディングで考えてみよう~フェリス女学院大学『社会的起業』
情報の『見える化』ってなぜ大事?どうやるの? ~グラフィック・レコーディングで考えてみよう~フェリス女学院大学『社会的起業』
 
議論を楽しく見える化しよう!グラフィック・レコーディングワークショップ
議論を楽しく見える化しよう!グラフィック・レコーディングワークショップ議論を楽しく見える化しよう!グラフィック・レコーディングワークショップ
議論を楽しく見える化しよう!グラフィック・レコーディングワークショップ
 
Backlogを使ったオフショア開発 #nucon
Backlogを使ったオフショア開発 #nuconBacklogを使ったオフショア開発 #nucon
Backlogを使ったオフショア開発 #nucon
 
Dns primer
Dns primerDns primer
Dns primer
 
車載組込ブラウザの過去7年と今を40分でまとめてみる
車載組込ブラウザの過去7年と今を40分でまとめてみる車載組込ブラウザの過去7年と今を40分でまとめてみる
車載組込ブラウザの過去7年と今を40分でまとめてみる
 
組み込み入門
組み込み入門組み込み入門
組み込み入門
 
現場の見える化で、チーム力を向上させる
現場の見える化で、チーム力を向上させる現場の見える化で、チーム力を向上させる
現場の見える化で、チーム力を向上させる
 
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
組み込みやろうぜ!ソフト屋さん向けの組み込み電子工作講座 (情報科学若手の会2013 #wakate2013 )
 
C++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいかC++がなぜ組込みに採用されにくいか
C++がなぜ組込みに採用されにくいか
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
 プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター) プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
プログラムによる計測と制御の仕組みを学ぶための学習支援ソフトウェア (ポスター)
 
Graphic recoding-ws-
Graphic recoding-ws-Graphic recoding-ws-
Graphic recoding-ws-
 
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
サムライセミナー「スタートアップのための失敗しないオフショア開発の利用法」
 

Similaire à LED-Camp2「組込みシステム開発の勘所と実践」

130329 01
130329 01130329 01
130329 01
openrtm
 
130610 芝浦工大講義
130610 芝浦工大講義130610 芝浦工大講義
130610 芝浦工大講義
openrtm
 
20130329 rtm01
20130329 rtm0120130329 rtm01
20130329 rtm01
openrtm
 
20130329 rtm1
20130329 rtm120130329 rtm1
20130329 rtm1
openrtm
 
JavaOne Preso How to make Geiger usin SunSPOT and Arduino
JavaOne Preso How to make Geiger usin SunSPOT and ArduinoJavaOne Preso How to make Geiger usin SunSPOT and Arduino
JavaOne Preso How to make Geiger usin SunSPOT and Arduino
Masafumi Ohta
 

Similaire à LED-Camp2「組込みシステム開発の勘所と実践」 (20)

190418 titech robotics
190418 titech robotics190418 titech robotics
190418 titech robotics
 
CAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品についてCAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品について
 
東京工業大学「ロボット技術」ロボットミドルウェア
東京工業大学「ロボット技術」ロボットミドルウェア東京工業大学「ロボット技術」ロボットミドルウェア
東京工業大学「ロボット技術」ロボットミドルウェア
 
130329 01
130329 01130329 01
130329 01
 
2024年度 東京工業大学「ロボット技術」 ロボットミドルウェア (2024年4月11日)
2024年度 東京工業大学「ロボット技術」 ロボットミドルウェア (2024年4月11日)2024年度 東京工業大学「ロボット技術」 ロボットミドルウェア (2024年4月11日)
2024年度 東京工業大学「ロボット技術」 ロボットミドルウェア (2024年4月11日)
 
東京工業大学「ロボット技術・ロボットミドルウェア」
東京工業大学「ロボット技術・ロボットミドルウェア」東京工業大学「ロボット技術・ロボットミドルウェア」
東京工業大学「ロボット技術・ロボットミドルウェア」
 
OpenMange Power Center のご紹介
OpenMange Power Center のご紹介OpenMange Power Center のご紹介
OpenMange Power Center のご紹介
 
230420_東工大授業「ロボット技術」資料.pdf
230420_東工大授業「ロボット技術」資料.pdf230420_東工大授業「ロボット技術」資料.pdf
230420_東工大授業「ロボット技術」資料.pdf
 
Stateless Circuit Model toward a Theorem-proving Hardware Description Language
Stateless Circuit Model toward a Theorem-proving Hardware Description LanguageStateless Circuit Model toward a Theorem-proving Hardware Description Language
Stateless Circuit Model toward a Theorem-proving Hardware Description Language
 
130610 芝浦工大講義
130610 芝浦工大講義130610 芝浦工大講義
130610 芝浦工大講義
 
System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理System Center Operations Managerによる仮想環境の高度な管理
System Center Operations Managerによる仮想環境の高度な管理
 
20130329 rtm01
20130329 rtm0120130329 rtm01
20130329 rtm01
 
20130329 rtm1
20130329 rtm120130329 rtm1
20130329 rtm1
 
Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
JavaOne Preso How to make Geiger usin SunSPOT and Arduino
JavaOne Preso How to make Geiger usin SunSPOT and ArduinoJavaOne Preso How to make Geiger usin SunSPOT and Arduino
JavaOne Preso How to make Geiger usin SunSPOT and Arduino
 
160428 東工大「ロボット技術」授業資料
160428 東工大「ロボット技術」授業資料160428 東工大「ロボット技術」授業資料
160428 東工大「ロボット技術」授業資料
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
 
オープンソースでシステム監視!統合監視ソフトウェアZabbix
オープンソースでシステム監視!統合監視ソフトウェアZabbixオープンソースでシステム監視!統合監視ソフトウェアZabbix
オープンソースでシステム監視!統合監視ソフトウェアZabbix
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
 

Plus de Hideki Takase

関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
 

Plus de Hideki Takase (20)

Rclex: A Library for Robotics meet Elixir
Rclex: A Library for Robotics meet ElixirRclex: A Library for Robotics meet Elixir
Rclex: A Library for Robotics meet Elixir
 
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
 
関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング
 
ROS 2 Client Library for E^2
ROS 2 Client Library for E^2ROS 2 Client Library for E^2
ROS 2 Client Library for E^2
 
Elixir/Nervesはナウでヤングなcoolなすごいやつ
Elixir/NervesはナウでヤングなcoolなすごいやつElixir/Nervesはナウでヤングなcoolなすごいやつ
Elixir/Nervesはナウでヤングなcoolなすごいやつ
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワークElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
 
Rclex: ElixirでROS!!
Rclex: ElixirでROS!!Rclex: ElixirでROS!!
Rclex: ElixirでROS!!
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
 
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
 
ROSCon2019 参加報告:オーバビュー+α
ROSCon2019 参加報告:オーバビュー+αROSCon2019 参加報告:オーバビュー+α
ROSCon2019 参加報告:オーバビュー+α
 
ElixirでFPGAを設計する
ElixirでFPGAを設計するElixirでFPGAを設計する
ElixirでFPGAを設計する
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
 
ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて
ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けてZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて
ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて
 
Cockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with ElixirCockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with Elixir
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
TOPPERSプロジェクトのご紹介@IoT ALGYAN
TOPPERSプロジェクトのご紹介@IoT ALGYANTOPPERSプロジェクトのご紹介@IoT ALGYAN
TOPPERSプロジェクトのご紹介@IoT ALGYAN
 
ElixirでFPGAハードウェアが作れちゃう,かも!!?
ElixirでFPGAハードウェアが作れちゃう,かも!!?ElixirでFPGAハードウェアが作れちゃう,かも!!?
ElixirでFPGAハードウェアが作れちゃう,かも!!?
 

LED-Camp2「組込みシステム開発の勘所と実践」

  • 2. 組込みシステムとは? • 乱暴暴な定義をすれば, 「汎⽤用システム以外のコンピュータシステム」 • 各種の機器に組み込まれて,特定の機能を実現する ためにその制御を⾏行行うコンピュータシステム • アプリケーション特有の要求に対して特化して 設計されるため,必然的に多様な専⽤用システムになる • 利利⽤用可能な資源が限られる – プロセッサ周波数,メモリ量量,バス幅,... – 回路路⾯面積,製品サイズ,... – 信頼性,連続駆動時間,消費電⼒力力,... 2
  • 3. 組込みシステムの適⽤用分野 産業機械 制御機器 情報家電機器 モバイル情報端末 ⾃自動⾞車車 航空・宇宙 3
  • 4. 組込みシステムの特性 • 機器の⾼高機能化,複雑化,デジタル化 • 環境とのインタラクション • ⾼高い信頼性 • 特定⽤用途向け(+「汎⽤用機能」) • 厳しいリソース制約 – CPU能⼒力力,メモリ容量量,製品サイズ,低消費電⼒力力 • ネットワーク接続性とセキュリティ強化 • リアルタイム性 4
  • 5. 組込みシステム開発の勘所 リアルタイム性を確保する 既存資産の仕様を理理解する – 実習教材システムの紹介 理理想と現実のぶれを考慮する – 外部環境とのシステム同定 クロス開発環境を整備する – リモートデバッグ環境 5
  • 6. リアルタイム性 組込みシステムにはリアルタイム性が必要 • タスクが定められた時刻(デッドライン)までに処理理を 終えるための性能 – 処理理結果の正確さに加えて,処理理時間の正確さが求められる • ⼊入⼒力力から応答までの処理理時間が⼀一定に⾒見見積もれることが重要 – 単に⾼高速であればいいわけではない! • 例例1:ブレーキシステム ○:ペダルを踏んだら常に3ms以内に制動が働く ×:最速1msで制動が働く,たまに10msくらい掛かることがある • 例例2:動画再⽣生プレーヤ ○:常に30fpsの処理理性能を保証する ×:最⾼高50fps,頻繁に10fpsまで性能が落落ちる 6
  • 7. リアルタイム性の分類 • ハードリアルタイム − デッドラインを過ぎると 処理理の価値がただちに0 (以下)になる − 例例:ブレーキ制御 • ソフトリアルタイム − デッドラインを過ぎると 処理理の価値が緩やかに 減少していく − 例例:動画再⽣生プレーヤ 価値 時間 デッド ライン 価値 時間 デッド ライン 7
  • 8. LEDーCamp2競技会のミッション 地点間を指定された 順序かつ時間で移動する 処理理時間を考慮して ソフトウェアを設計する 8
  • 9. リアルタイム性向上のために • 時間制約を洗い出す – ⼊入⼒力力から処理理までの時間 – 処理理そのものに掛ける時間 本実習の着眼点 – 処理理終了了から出⼒力力までの時間 • 処理理を適切切にタスク分割する – システムの機能と重要度度に応じて分割する • 重要度度=優先度度 – モジュール化のためにも重要(⽣生産性・保守性UP) • 今回の教材では実践が難しい,,, 9
  • 10. 組込みシステム開発の勘所 リアルタイム性を確保する 既存資産の仕様を理理解する – 実習教材システムの紹介 理理想と現実のぶれを考慮する – 外部環境とのシステム同定 クロス開発環境を整備する – リモートデバッグ環境 10
  • 11. 実習教材システムの構成 Arduino Uno R3 11 物体との距離離 超⾳音波距離離センサ iRobot Create デバッグデータ 書き込み FlashAir
  • 12. iRobot Create • 掃除機型ロボット – お掃除機能の無いRoomba • 主要な検知系 – 左右バンパ – IRセンサ(ドッグ位置検知) – クリフセンサ – ボタン×3 • 主要な制御系 – 左右タイヤ – LED×3 • コマンドモジュール – ホストからは8ビットのシリアル通信でやり取り – ROS (Robot Operating Systems) による隠蔽化 • CPU : Atmel AVR ATMega168 8-bit RISK 18.432MHz • Flash memory 14336bytes (14kbyte) EEPROM 512bytes 12
  • 13. iRobot Create 左バンパ D-Sub 25pin経由で Arduinoと接続 充電 Power/Play/ Advancedボタン 右バンパ 右タイヤ左タイヤ 13 バッテリ ドッグとの 接触位置 ドッグ位置 検知⽤用のIR 他ドッグとの ⼲干渉に注意
  • 14. Createの動作モード • Off Mode • Passive Mode – Play/Advancedの操作で10種類のデモが動作できる – センサ値の取得はできる • Safe Mode – 制御コマンドのやり取りによって,センサ値の取得 および動作の制御ができる – 落落下検知,脱輪輪または充電時には緊急停⽌止する • Full Mode – 制御コマンドのやり取りによって,センサ値の取得 および動作の制御ができる 14
  • 15. Create API • 詳細は資料料集末尾のAPIリファレンスにて • センサ系 – 各種検知系の状態や値を取得する – APIによって振る舞いや戻り値の意味が異異なることに 注意すること • スタート制御系 – 動作モードを指定しつつスタートする – 動作モードを変更更する • 動作制御系 – Createの動作(主にタイヤ)を制御する 15
  • 16. Maxbotix LV-EZ1 • 超⾳音波の送受信で物体までの距離離を測るセンサ • 主要なスペック – 測定範囲:0インチ〜~254インチ(約6.45mまで) – 分解能:1インチ(約2.54cm) – 超⾳音波周波数:42kHz • 出⼒力力形式 – シリアル – アナログ電圧(PWMをCRで平滑滑) – パルス幅出⼒力力 • API (getRange) の戻り値の単位は「mm」 16
  • 17. Arduino • オープンソース・ハードウェア – ハードウェア設計が公表されている – CC BYーSA(表⽰示・継承)で 再利利⽤用が可能 • Arduino IDE:統合開発環境 – 詳細は後述 • Arduino Uno R3 – マイコン:ATmega328P (AVR 8-bit MCU / 16MHz) – 動作電圧:5V ⼊入⼒力力電圧(推奨):7〜~12V – デジタルI/Oピン:14本(うち6本はPWM出⼒力力可) – アナログ⼊入⼒力力ピン:6本(デジタルI/Oとしても使⽤用可) – Flash:32KB (うち0.5KBはブートローダ) – SRAM:2KB EEPROM:1KB 17
  • 18. FlashAir • ⼀一般的には「無線LAN搭載SDHCメモリカード」 • 実際は, フラッシュメモリ +無線LAN +Webサーバ • LEDーCamp2では,無線でのリアルタイム デバッグに利利⽤用する – 詳細は後述 18
  • 19. 組込みシステム開発の勘所 リアルタイム性を確保する 既存資産の仕様を理理解する – 実習教材システムの紹介 理理想と現実のぶれを考慮する – 外部環境とのシステム同定 クロス開発環境を整備する – リモートデバッグ環境 19
  • 20. 外部環境とのインタラクション センサ アクチュエータ 外部環境 (物理理現象) 計算機 オペレータシステム 20
  • 21. 理理想とのぶれ Drive(100, 100);理理想的な 移動位置 21 現実,,, ずれの要因: 個体差 センサ特性 床⾯面の材質 タイヤの摩耗度度 etc, etc, … 最⼩小⼆二乗法を⽤用いて パラメータを調整する
  • 22. 左右モータの出⼒力力 L R 外乱v 外乱v モータL⼊入⼒力力 モータR⼊入⼒力力 外乱は測定誤差とする モータL⼊入⼒力力=L⾛走⾏行行距離離 モータR⼊入⼒力力=R⾛走⾏行行距離離 • L,Rそれぞれのずれの要因になる関数を知りたい • 逆関数を求められれば,ちゃんと指定した通りの 距離離を⾛走ってくれるようになるはず 22
  • 23. 計測 中⼼心点を(0,0), 始点を(-r, 0)とすれば x^2 + y^2 = r^2より (-r+x)^2 + y^2 = r^2 r = (x^2 + y^2) / 2x, θ = atan(y, -r+x) θ 到達点 (x,y) r タイヤ間距離離=260mm 始点 (0,0)中⼼心点 (r,0) r 左モータ⾛走⾏行行距離離 = 2 π * (r+L) / θ 右モータ⾛走⾏行行距離離 = 2 π * (r-L) / θ 23
  • 24. 最⼩小⼆二乗法による逆関数の導出 input A output y ・逆関数 24 測定 利利⽤用 1⼊入⼒力力1出⼒力力 1次関数
  • 25. ここまでの例例は1⼊入⼒力力1出⼒力力 • 実際には考慮すべき⼊入⼒力力値はまだある – 速度度:複数の設定速度度それぞれで求める – バッテリー:本システムではほぼ影響しない output input1 input2 2⼊入⼒力力1出⼒力力 平⾯面関数 25
  • 26. 組込みシステム開発の勘所 リアルタイム性を確保する 既存資産の仕様を理理解する – 実習教材システムの紹介 理理想と現実のぶれを考慮する – 外部環境とのシステム同定 クロス開発環境を整備する – リモートデバッグ環境 26
  • 27. クロス開発環境 • セルフ開発 – プログラムの開発環境と 実⾏行行環境が同じ • クロス開発 – プログラムの開発環境と 実⾏行行環境が異異なる – デバッグ環境も異異なる 27 組込みではクロス開発が当たり前 開発環境・デバッグ環境を 整備することが重要!!
  • 28. Arduino IDE • エディタ・コンパイラ・ダウンロード・デバッグの 各機能が統合された開発環境 – 内部で gcc や avrdude が動作 – 注意点:Arduinoのプログラム書き換えの際は Createの電源を切切っておくこと! ボード名 「ツール」→「マイコンボード」 ポート名 「ツール」→「シリアルポート」 マイコンに書き込み コード⾏行行数 スケッチ名 検証・コンパイル シリアルモニタを開く
  • 29. Arduinoのプログラミングモデル • Arduino⾔言語 – C⾔言語のすべての構造 – ⼀一部のC++の機能 • クラスなど 29 setup() 最初に⼀一回だけ実⾏行行される loop() 繰り返し実⾏行行される delay() m秒単位で遅延させる
  • 30. シリアルデバッグ 30 Arduinoと ノートPCを ケーブル接続 void setup() { Serial.begin(9600); } void loop() { Serial.println(Hello!!); Serial.println(num); num++; delay(1000); } シリアルモニタで 出⼒力力を確認
  • 31. FlashAirを使った無線デバッグ 31 無線で データ通信 Webブラウザ上で リアルタイム表⽰示
  • 33. デバッグデータの出⼒力力⽅方法 • 各種センサ値の出⼒力力:DATA.CSV – 形式:[serialNumber], [elapsedTime], 資料料集から 修正 [totalDistance], [currentAngle], [battery] – API例例:CreateDataSDWriter.printCreateData(create); • printf デバッグ:PRINT.CSV – 形式:[Num],[Tag],[Message] • [Num] は1から開始してインクリメントすること – API例例:SDWriter.printf(“print.csv”, %d,DATA,Hello FlashAir!!n, + +print_counter); • FlashAirへの接続⽅方法は配布資料料を参照 33
  • 34. FlashAirデバッグの注意点① 資料料集から • printCreateData APIの内部で getDistance(), getAngle() を使⽤用している 修正 – getDistance(), getAngle() は前回実⾏行行時からの 差分を返しており,printCreateData APIは内部で 値を累累積している • ログの取得/表⽰示にオーバヘッドが掛かる – ログ取得:SDカードへの書き込み – ログ表⽰示:ネットワーク接続・スクリプト実⾏行行 → デバッグ機能の有無で振る舞いは変わる!! 34
  • 35. FlashAirデバッグの注意点② • FlashAirへの接続が安定しない場合には モバイルバッテリでArduinoに給電する 資料料集から 修正 – FlashAirの電⼒力力供給が安定しないため – CreateとArduinoの電源ライン(⾚赤線)は抜いておく • 未使⽤用時はFlashAir接続を遮断する – トラフィックの負荷軽減のため • ルータの同時接続数は50 – FlashAirのWebサーバは1リクエストずつ逐次処理理する 35
  • 36. 組込みシステム開発の勘所 リアルタイム性を確保する 既存資産の仕様を理理解する 理理想と現実のぶれを考慮する クロス開発環境を整備する 36 本講義の内容を “まずは”チーム開発実習に 活かして取り組みましょう!