Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
TA
Uploaded by
Takuya Azumi
PDF, PPTX
8,544 views
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 57
2
/ 57
3
/ 57
4
/ 57
5
/ 57
6
/ 57
7
/ 57
8
/ 57
9
/ 57
10
/ 57
11
/ 57
12
/ 57
13
/ 57
14
/ 57
15
/ 57
16
/ 57
17
/ 57
18
/ 57
19
/ 57
20
/ 57
21
/ 57
22
/ 57
23
/ 57
24
/ 57
25
/ 57
26
/ 57
27
/ 57
28
/ 57
29
/ 57
30
/ 57
31
/ 57
32
/ 57
33
/ 57
34
/ 57
35
/ 57
36
/ 57
37
/ 57
38
/ 57
39
/ 57
40
/ 57
41
/ 57
42
/ 57
43
/ 57
44
/ 57
45
/ 57
46
/ 57
47
/ 57
48
/ 57
49
/ 57
50
/ 57
51
/ 57
52
/ 57
53
/ 57
54
/ 57
55
/ 57
56
/ 57
57
/ 57
More Related Content
PDF
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
by
Takuya Azumi
PDF
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
by
Takuya Azumi
PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
PDF
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
by
Takuya Azumi
PDF
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
by
Takuya Azumi
PDF
TOPPERS TECS WG 2016
by
Hiroshi Oyama
PDF
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
by
Takuya Azumi
PDF
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
by
Takuya Azumi
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
by
Takuya Azumi
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
by
Takuya Azumi
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
by
Takuya Azumi
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
by
Takuya Azumi
TOPPERS TECS WG 2016
by
Hiroshi Oyama
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
by
Takuya Azumi
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
by
Takuya Azumi
What's hot
PDF
C21 SQL Server のスレッド管理 by 古賀啓一郎
by
Insight Technology, Inc.
PDF
技術紹介: S2E: Selective Symbolic Execution Engine
by
Asuka Nakajima
PDF
LPICレベル1技術解説セミナー(2012/11/11)
by
Kazuko Itoda
PPTX
Starc verilog hdl2013d
by
Kiyoshi Ogawa
PDF
TOPPERSプロジェクト紹介 OSC2016京都
by
Takuya Azumi
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
by
NTT DATA Technology & Innovation
PPTX
How to use STARC RTL Design Style Guide Verilog-HDL 2011 version
by
Kiyoshi Ogawa
PPTX
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
by
Kiyoshi Ogawa
PDF
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
by
Hironobu Isoda
PPTX
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
PDF
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
by
Tetsuya Hasegawa
PDF
RFC6243(With-defaults Capability for NETCONF)の勉強資料
by
Tetsuya Hasegawa
PDF
RFC5277(NETCONF Event Notifications)の勉強資料
by
Tetsuya Hasegawa
PPT
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PDF
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
by
Tetsuya Hasegawa
PDF
20130329 rtm3
by
openrtm
PPTX
【第5回東京SoftLayer勉強会】LT7 SoftLayerでOpenStackを動かしてみた
by
Nobuyuki Matsui
PPTX
Ll tiger clojure
by
Toshiaki Maki
PDF
分散ストリーム処理フレームワーク Apache S4
by
AdvancedTechNight
C21 SQL Server のスレッド管理 by 古賀啓一郎
by
Insight Technology, Inc.
技術紹介: S2E: Selective Symbolic Execution Engine
by
Asuka Nakajima
LPICレベル1技術解説セミナー(2012/11/11)
by
Kazuko Itoda
Starc verilog hdl2013d
by
Kiyoshi Ogawa
TOPPERSプロジェクト紹介 OSC2016京都
by
Takuya Azumi
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
by
NTT DATA Technology & Innovation
How to use STARC RTL Design Style Guide Verilog-HDL 2011 version
by
Kiyoshi Ogawa
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
by
Kiyoshi Ogawa
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
by
Hironobu Isoda
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
by
Tetsuya Hasegawa
RFC6243(With-defaults Capability for NETCONF)の勉強資料
by
Tetsuya Hasegawa
RFC5277(NETCONF Event Notifications)の勉強資料
by
Tetsuya Hasegawa
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
by
Tetsuya Hasegawa
20130329 rtm3
by
openrtm
【第5回東京SoftLayer勉強会】LT7 SoftLayerでOpenStackを動かしてみた
by
Nobuyuki Matsui
Ll tiger clojure
by
Toshiaki Maki
分散ストリーム処理フレームワーク Apache S4
by
AdvancedTechNight
Similar to NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
PDF
20130329 rtm1
by
openrtm
PDF
組み込み入門
by
Yuki Suga
PDF
Python physicalcomputing
by
Noboru Irieda
PPT
フィルタドライバ入門
by
firewood
PDF
さわってみようTOPPERS/SSP
by
NSaitoNmiri
PDF
Bluetooth通信の仕組みと活用法紹介
by
Takehiko YOSHIDA
PDF
ものづくりプロジェクトII 一日でわかるArduino入門
by
Yoichi Yamazaki
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
PDF
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
by
ROBOTIS Japan
PPTX
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
by
CODE BLUE
PDF
マイコンロボット実習
by
Takehiko YOSHIDA
KEY
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
by
Yasuhiro Ishii
PDF
coma Study Room vol.2 Arduino Workshop
by
Eto Haruhiko
PPTX
Androidとfpgaを高速fifo通信させちゃう
by
ksk sue
PDF
D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用
by
Atomu Hidaka
PPT
130329 01
by
openrtm
PDF
20130329 rtm01
by
openrtm
PDF
組み込み入門
by
Yuki Suga
PDF
RTコンポーネント作成入門
by
openrtm
PDF
KOGEI & KAIT Funnel WS
by
Shigeru Kobayashi
20130329 rtm1
by
openrtm
組み込み入門
by
Yuki Suga
Python physicalcomputing
by
Noboru Irieda
フィルタドライバ入門
by
firewood
さわってみようTOPPERS/SSP
by
NSaitoNmiri
Bluetooth通信の仕組みと活用法紹介
by
Takehiko YOSHIDA
ものづくりプロジェクトII 一日でわかるArduino入門
by
Yoichi Yamazaki
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
by
ROBOTIS Japan
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
by
CODE BLUE
マイコンロボット実習
by
Takehiko YOSHIDA
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
by
Yasuhiro Ishii
coma Study Room vol.2 Arduino Workshop
by
Eto Haruhiko
Androidとfpgaを高速fifo通信させちゃう
by
ksk sue
D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用
by
Atomu Hidaka
130329 01
by
openrtm
20130329 rtm01
by
openrtm
組み込み入門
by
Yuki Suga
RTコンポーネント作成入門
by
openrtm
KOGEI & KAIT Funnel WS
by
Shigeru Kobayashi
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
1.
3. ⾛走⾏行行体サンプルプログラム ⽯石川 拓也 名古屋⼤大学 ⼤大学院情報科学研究科 最終更新⽇日:2012/05/30 2012/06/02
TOPPERSプロジェクト認定 1
2.
内容 • ⾛走⾏行行体サンプルプログラムについて ‒ サンプルプログラムの機能 ‒
サンプルプログラムのタスク構成 • モデリング ‒ TECSを⽤用いた開発 • ソフトウェアプラットフォームでサポートする部分 • ユーザが作成する部分 2012/06/02 TOPPERSプロジェクト認定 2
3.
サンプルプログラムの機能(1/2) • プログラムの流れ ‒ プログラム起動直後 •
尻尾モータ制御 ‒ ⾛走⾏行行体を⾃自⽴立立させる • Bluetooth通信確⽴立立 ‒ ホストPCとペアリング ‒ ⾛走⾏行行開始待ち状態 • ホストPCから、ʼ’gʼ’キーを送信すると⾛走⾏行行を開始する ‒ 奇数'g'コマンドで左エッジスタート ‒ 偶数'g'コマンドで右エッジスタート ‒ ⾛走⾏行行中 • 倒⽴立立⼆二輪制御 ‒ バランサの機能により、設定された速度、舵⾓角で倒⽴立立⾛走⾏行行を⾏行行う ためのモータのPWM値を計算し、それをモータにセットする ‒ 4ミリ秒周期で処理する • ライントレース制御 ‒ 光センサの値からライントレースを⾏行行うための舵⾓角を計算する ‒ 10ミリ秒周期で処理する 2012/06/02 TOPPERSプロジェクト認定 3
4.
サンプルプログラムの機能(2/2) • プログラムの流れ(続き) ‒ プログラムの停⽌止 •
EXITボタンを押すとプログラムを終了 • STOPボタンを押すとプログラムを再起動 • STOP+ENTERボタンを押すとNXT BIOS書き換え ‒ コマンドの受信 • 'g':⾛走⾏行行開始 • 's':停⽌止 • 'b':光センサ(⿊黒)のキャリブレーション • 'w':光センサ(⽩白)のキャリブレーション • 'l':光センサ(⽬目標値)のキャリブレーション • 'f':スピードのセット • 't':尻尾⾓角のセット 2012/06/02 TOPPERSプロジェクト認定 4
5.
サンプルプログラムのタスク構成 • 尻尾制御タスク ‒ 尻尾のモータを制御する •
倒⽴立立⼆二輪制御タスク ‒ 指定された速度・舵⾓角で倒⽴立立⼆二輪⾛走⾏行行するように左右の モータを制御する • ライントレース制御タスク ‒ ライントレース⾛走⾏行行するように舵⾓角を制御する • コマンド受信タスク ‒ シリアルポート(Bluetooth)経由でコマンドを受信・解析 し、各パラメータをセットする • ⾛走⾏行行開始待ちタスク ‒ ⾛走⾏行行開始待ち状態を維持し、⾛走⾏行行開始のシグナルを受け取 ると、倒⽴立立⼆二輪制御タスクとライントレース制御タスクを 起動して、⾛走⾏行行を開始させる 2012/06/02 TOPPERSプロジェクト認定 5
6.
UMLによる設計 2012/06/02 TOPPERSプロジェクト認定 6 •
オブジェクト図(⼀一部)起動処理 ライントレース制御倒 輪制御 尻尾制御 センサドライバモータドライバ ログ出 & シリアル通信 コマンド受信
7.
TECSコンポーネント図 2012/06/02 TOPPERSプロジェクト認定 7 •
ユーザアプリケーション起動処理 ライントレース制御倒 輪制御 尻尾制御 センサドライバモータドライバ ログ出 & シリアル通信 コマンド受信
8.
TECSコンポーネント図 • 全体像 TOPPERSプロジェクト認定 82012/06/02
9.
UMLからTECSのモデルへの変換 • 変換するメリット ‒ クラスのインスタンス化やインスタンス間の接続を するためのC⾔言語のソースコードを⾃自動⽣生成してく れる •
ユーザがC⾔言語で書くのは、メソッドの中⾝身だけでよい • 変換の⽅方針 ‒ メソッドヘッダの集合 → シグニチャ ‒ クラス → セルタイプ ‒ クラスの属性 → セルタイプの属性、内部変数 ‒ クラス間の関連 → 呼び⼝口と受け⼝口 • シグニチャのインスタンス化 ‒ インスタンス化と接続 →セルの⽣生成とセル間の結合 • 組上げ記述 TOPPERSプロジェクト認定 92012/06/02
10.
TECSを⽤用いた開発の流れ • コンポーネントの設計 ‒ シグニチャの定義 ‒
セルタイプの定義 • コンポーネントの実装 ‒ コンポーネントの提 供する機能を実装 • シグニチャとセルタイプ の情報から⾃自動⽣生成され たテンプレートコードを 利⽤用 • C⾔言語実装 • 組上げ記述の作成 ‒ 組上げ記述によりア プリケーションを構 築 コンポーネント 記述 組上げ記述 セルタイプ コード テンプレート コード コンパイラ ヘッダ インタフェース コード コンポーネント 設計者 コンポーネント 開発者 アプリケーション 開発者 設計 設計 実装 バイナリ ⾃自動⽣生成 ⾃自動⽣生成 2012/06/02 TOPPERSプロジェクト認定 10 TECS ジェネレータ
11.
ソフトウェアの構成要素 • ソフトウェアプラットフォームでサポートする部分 ‒ ミドルウェア •
ボタンチェック周期ハンドラ • Bluetooth接続タスク • バランサ ‒ デバイスドライバ • バッテリ • モータ • センサ • シリアル通信(Bluetooth) • ユーザアプリケーションの部分 ‒ 尻尾制御 ‒ 倒⽴立立⼆二輪制御 ‒ ライントレース制御 ‒ コマンド受信 ‒ ⾛走⾏行行開始待ち 2012/06/02 TOPPERSプロジェクト認定 11
12.
ソフトウェアプラットフォームで サポートする部分 TOPPERSプロジェクト認定 122012/06/02
13.
ASP+TECS デバイスドライバ・ ミドルウェア ソフトウェアプラットフォーム(1/4) • ASP+TECS ‒ カーネルオブジェクト ‒
タイマ ‒ シリアル通信 • デバイスドライバ ‒ ボタン、バッテリ、センサ、モータ • コプロセッサ ‒ Bluetooth ‒ ディスプレイ ‒ サウンド • ミドルウェア ‒ ボタンチェック ‒ Bluetooth接続 ‒ バランサ NXT カーネル タイマ シリアル ユーザアプリケーション 2012/06/02 TOPPERSプロジェクト認定 13
14.
ソフトウェアプラットフォーム(2/4) • 提供するコンポーネントの定義 ‒ カーネル •
include/kernel.cdl : カーネルオブジェクト • syssvc/tLogTask.cdl : システムログ出⼒力力タスク • syssvc/tSysLog.cdl : システムログバッファ • syssvc/tSerialPort.cdl: シリアルポート • target/mindstorms_nxt_gcc/target_syssvc_decl.cdl : ‒ tPutLogMindstormsNXT.cdl : 低レベル出⼒力力 ‒ tSIOPortMindstormsNXT.cdl : シリアルドライバ ‒ NXTのデバイスドライバ、ミドルウェア • tecs_lib/mindstorms_nxt/target_lib_decl.cdl: ‒ tBluetooth_decl.cdl : Bluetooth ‒ tDisplay_decl.cdl,tLCD_decl.cdl,tSPI_decl.cdl : ディスプレイ ‒ tSound_decl.cdl : サウンド ‒ tAVR_decl.cdl,tTWI_decl.cdl : コプロセッサ ‒ tButton_decl.cdl : ボタン ‒ tBattery_decl.cdl : バッテリ ‒ tMotor_decl.cdl : モータ ‒ tSensor_decl.cdl : センサ ‒ tFlash_decl.cdl:フラッシュコントローラ ‒ tBalancer_decl.cdl : バランサ TOPPERSプロジェクト認定 142012/06/02
15.
ソフトウェアプラットフォーム(3/4) • 提供するコンポーネントの⽣生成 ‒ カーネル •
target/mindstorms_nxt_gcc/target_syssvc_inst.cdl : ‒ 低レベル出⼒力力 ‒ シリアルドライバ ‒ tBluetooth_inst.cdl : NXTのBluetoothドライバ ‒ NXTのデバイスドライバ、ミドルウェア • tecs_lib/mindstorms_nxt/target_lib_inst.cdl: ‒ コプロセッサ ‒ ボタン ‒ ボタンチェック ‒ Flashコントローラ ※ その他のコンポーネントはユーザが⽣生成する • 例 ‒ モータ ‒ センサ ‒ バランサ TOPPERSプロジェクト認定 152012/06/02
16.
ソフトウェアプラットフォーム(4/4) • コンポーネント記述ファイルの読込み ‒ プラットフォームが提供するコンポーネントの定義や⽣生成 TOPPERSプロジェクト認定2012/06/02 //
カーネルオブジェクトの定義 import("kernel.cdl"); // NXTのデバイスドライバ、ミドルウェアの定義 import(target_lib_decl.cdl); // NXTのデバイスドライバ、ミドルウェアの生成 import(target_lib_decl.cdl); // ターゲット依存のシステムサービスの定義 import("target_syssvc_decl.cdl"); // システムサービスの定義 import("syssvc/tSerialPort.cdl"); import("syssvc/tSysLog.cdl"); import("syssvc/tLogTask.cdl"); // ターゲット依存のシステムサービスの組上げ import("target_syssvc_inst.cdl"); // ここからユーザアプリの記述 tSample.cdl 16
17.
ミドルウェアの解説(1/2) • ボタンチェック周期ハンドラ(CheckNXTButton) ‒ 機能概要 •
10ミリ秒周期でボタンの押下状態をチェックする • 押下されているボタンに応じて以下の処理を⾏行行う ‒ STOP:プログラムを再起動する ‒ EXIT:プログラムを終了し、電源を切る ‒ STOP+ENTER:NXT BIOSを書き換え後、電源を切る » 再度電源を⼊入れると、プログラムダウンロード可能な状態と なる • Bluetooth接続タスク(ConnectBluetoothTask) ‒ 機能概要 • システムの起動時に起動する優先度2のタスク • NXTのBluetoothデバイス名を設定 • NXTをスレーブとしてBluetooth接続を確⽴立立し、仮想シリアル 通信を可能にする 2012/06/02 TOPPERSプロジェクト認定 17
18.
ミドルウェアの解説(2/2) • バランサ ‒ セルタイプ:tBalancer ‒
tBalancerセルのインタフェース • シグニチャ:sBalancer,受け⼝口:eBalancer ‒ void control([in] int16_t forward, [in] int16_t turn, [in] uint16_t gyro, [in] uint16_t gyroOffset, [in] int32_t leftRevolution, [in] int32_t rightRevolution, [in] uint16_t battery, [out] int8_t *pwm_l, [out] int8_t *pwm_r) » 倒⽴立立制御に必要なモータのPWM値を求める » balance_controlと同様 2012/06/02 TOPPERSプロジェクト認定 18
19.
ミドルウェアの⽣生成(1/3) • コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要はな い ‒ target_lib_inst.cdlからimportされる //
ボタンチェック周期ハンドラ cell tCheckNXTButtonBody CheckNXTButtonBody { cButton = Button.eButton; // NXT BIOSを使用する場合、Flashを結合(ram+rom.cdl) cFlash = Flash.eFlash; }; cell tCyclicHandler CheckNXTButton { ciBody = CheckNXTButtonBody.eiBody; attribute = C_EXP("TA_STA"); cyclicTime = 10; cyclicPhase = 1; }; 2012/06/02 TOPPERSプロジェクト認定 19 ram_only.cdl / ram+rom.cdl
20.
ミドルウェアの⽣生成(2/3) • コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要はな い ‒ target_syssvc_inst.cdlからimportされる //
Bluetooth接続タスク cell tConnectBluetooth ConnectBluetooh { cBluetooth = Bluetooth.eBluetooth; }; cell tTask ConnectBluetoothTask{ cBody = ConnectBluetooth.eConnectBluetooth; taskAttribute = C_EXP("TA_ACT"); priority = 2; stackSize = 512; }; 2012/06/02 TOPPERSプロジェクト認定 20 tBluetooth_inst.cdl
21.
参考情報 • Bluetoothのキーコードとデバイス名の設定 ‒ セルBluetoothの属性keyCodeと
セル ConnectBluetoothの属性deviceNameを設定する • デフォルト値はそれぞれ、 1234 と"ET1234" 2012/06/02 TOPPERSプロジェクト認定 tBluetooth_inst.cdl cell tBluetooth Bluetooth { // Bluetooth本体 cSemaphore = BluetoothSemapohre.eSemaphore; // キーコードの設定 keyCode = "1234"; }; cell tConnectBluetooth ConnectBluetooth { cBluetooth = Bluetooth.eBluetooth; // デバイス名の設定 deviceName = { 'E', 'T', '1', '2', '3', '4', '0' }; }; 21
22.
ミドルウェアの⽣生成(3/3) • セルタイプtBalancerの⽣生成例 ‒ コンポーネント記述(組上げ記述) //
バランサ cell tBalancer Balancer { }; tSample_inst.cdl 2012/06/02 TOPPERSプロジェクト認定 22
23.
デバイスドライバの解説(1/3) • バッテリ ‒ セルタイプ:tBattery •
バッテリ電圧の残量を取得 • モータ ‒ セルタイプ:tRotaryEncoder • モータの割込みハンドラと終了処理ルーチン • モータを使⽤用するときは、 tMotorDriver のインスタンスの呼 び⼝口とモータのインスタンスの受け⼝口を結合 ‒ セルタイプ:tMotor • モータの回転数を取得/設定 • モータのPWM値を設定 2012/06/02 TOPPERSプロジェクト認定 23
24.
デバイスドライバの解説(2/3) • センサ ‒ セルタイプ:tSensorDriver •
センサの初期化ルーチンとI2Cの割込みハンドラ • 各種センサを使⽤用するときは、 tSensorDriver のインスタン スの呼び⼝口と各種センサのインスタンスの受け⼝口を結合 ‒ セルタイプ:tXXXSensor • 各種センサのセンサ値を取得 • XXXは、 ‒ Light(光センサ) ‒ Gyro(ジャイロセンサ) ‒ Touch(タッチセンサ) ‒ Sonic(超⾳音波センサ) TOPPERSプロジェクト認定 242012/06/02
25.
デバイスドライバの解説(3/3) • シリアル通信 ‒ セルタイプ:tSerialPort •
シリアルポート(Bluetooth)を通じて、シリアル通信を⾏行行う • 受信 • 送信(ログ出⼒力力) TOPPERSプロジェクト認定 252012/06/02
26.
デバイスドライバの⽣生成(1/6) • バッテリの⽣生成(組上げ記述) // バッテリセンサ cell
tBattery Battery{ cAvrBattery = AVR.eAvrBattery; }; 2012/06/02 TOPPERSプロジェクト認定 26 tSample_inst.cdl
27.
モータとセンサの接続ポート • モータ ‒ ポートA:尻尾モータ ‒
ポートB:右モータ ‒ ポートC:左モータ • センサ ‒ ポート1:ジャイロセンサ ‒ ポート2:超⾳音波センサ ‒ ポート3:光センサ ‒ ポート4:タッチセンサ 2012/06/02 TOPPERSプロジェクト認定 27
28.
デバイスドライバの⽣生成(2/6) • モータの⽣生成(組上げ記述) cell tMotor
TailMotor{ // 尻尾モータ cAvrMotor = AVR.eAvrMotor; portNumber = NXT_PORT_A; }; cell tMotor RightMotor{ // 右モータ cAvrMotor = AVR.eAvrMotor; portNumber = NXT_PORT_B; }; cell tMotor LeftMotor{ //左モータ cAvrMotor = AVR.eAvrMotor; portNumber = NXT_PORT_C; }; 2012/06/02 TOPPERSプロジェクト認定 28 tSample_inst.cdl
29.
デバイスドライバの⽣生成(3/6) • モータの⽣生成(組上げ記述) cell tRotaryEncoder
RotaryEncoder{ ciMotorInterrupt[0] = TailMotor.eiMotorInterrupt; ciMotorInterrupt[1] = RightMotor.eiMotorInterrupt; ciMotorInterrupt[2] = LeftMotor.eiMotorInterrupt; }; 2012/06/02 TOPPERSプロジェクト認定 29 tSample_inst.cdl
30.
デバイスドライバの⽣生成(4/6) • センサの⽣生成(組上げ記述) cell tGyroSensor
GyroSensor{ // ジャイロセンサ cAvrSensor = AVR.eAvrSensor; portNumber = NXT_PORT_S1; }; cell tSonicSensor SonicSensor{ // 超音波センサ cAvrSensor = AVR.eAvrSensor; portNumber = NXT_PORT_S2; }; cell tLightSensor LightSensor{ // 光センサ cAvrSensor = AVR.eAvrSensor; portNumber = NXT_PORT_S3; }; 2012/06/02 TOPPERSプロジェクト認定 30 tSample_inst.cdl
31.
デバイスドライバの⽣生成(5/6) • センサの⽣生成(組上げ記述) ‒ 続き cell
tTouchSensor TouchSensor{ //タッチセンサ cAvrSensor = AVR.eAvrSensor; portNumber = NXT_PORT_S4; }; cell tSensorDriver SensorDriver{ ciSensorDriver[0] = GyroSensor.eiSensorDriver; ciSensorDriver[1] = SonicSensor.eiSensorDriver; ciSensorDriver[2] = LightSensor.eiSensorDriver; ciSensorDriver[3] = TouchSensor.eiSensorDriver; }; 2012/06/02 TOPPERSプロジェクト認定 31 tSample_inst.cdl
32.
デバイスドライバの⽣生成(6/6) • シリアルドライバの⽣生成(組上げ記述) cell tSerialPort
SerialPort1 { // シリアルドライバ // ターゲット依存部のシリアルドライバと結合 cSIOPort = SIOPortTarget.eSIOPort; receiveBufferSize = 256; sendBufferSize = 256; }; 2012/06/02 TOPPERSプロジェクト認定 32 tSample_inst.cdl
33.
ユーザが作成する部分 TOPPERSプロジェクト認定 332012/06/02
34.
コンポーネントの設計(1/7) • コンポーネントの設計 ‒ シグニチャの定義 ‒
セルタイプの定義 • コンポーネントの実装 ‒ コンポーネントの提 供する機能を実装 • シグニチャとセルタイプ の情報から⾃自動⽣生成され たテンプレートコードを 利⽤用 • C⾔言語実装 • 組上げ記述の作成 ‒ 組上げ記述によりア プリケーションを構 築 コンポーネント 記述 組上げ記述 セルタイプ コード テンプレート コード コンパイラ ヘッダ インタフェース コード コンポーネント 設計者 コンポーネント 開発者 アプリケーション 開発者 設計 設計 実装 バイナリ ⾃自動⽣生成 ⾃自動⽣生成 2012/06/02 TOPPERSプロジェクト認定 34 TECS ジェネレータ
35.
コンポーネントの設計(2/7) • シグニチャ定義 2012/06/02 TOPPERSプロジェクト認定
35 // 尻尾ターゲット角制御のシグニチャ signature sTailController{ void setAngle([in] int32_t angle); void getAngle([out] int32_t *angle); void signalStop(void); void signalStart(void); void calibrate(void); }; // バランサタスクパラメータセット // のシグニチャ signature sBalancerControl{ void setSpeed([in] int16_t speed); void getSpeed([out] int16_t *speed); void setTurn([in] int16_t turn); void getTurn([out] int16_t *turn); void calibrate(void); }; tSample_decl.cdl // ライントレーサタスクパラメータセットの // シグニチャ signature sLinetracerControl{ void setLightThreshold ([in] uint8_t color, [in] uint16_t light); void getLightThreshold ([in] uint8_t color, [out] uint16_t *light); void setEdge([in] int8_t edge); void getEdge([out] int8_t *edge); };
36.
コンポーネントの設計(3/7) • 尻尾制御コンポーネント 2012/06/02 TOPPERSプロジェクト認定
36 [singleton] celltype tTailControllerTaskBody{ require tKernel.eKernel; entry sTaskBody eBody; entry sTailController eTailController; call sMotor cTailMotor; attr{ int32_t tailAngleStop; int32_t tailAngleDrive; float32_t kp; int8_t maxPwm; int8_t minPwm; }; var{ int32_t targetAngle; }; }; tSample_decl.cdl
37.
コンポーネントの設計(4/7) • 倒⽴立立⼆二輪制御コンポーネント 2012/06/02 TOPPERSプロジェクト認定
37 [singleton] celltype tBalancerTaskBody{ require tKernel.eKernel; entry sTaskBody eBody; entry sBalancerControl eBalancerControl; call sMotor cRightMotor; call sMotor cLeftMotor; call sSensor cGyroSensor; call sBattery cBattery; call sBalancer cBalancer; attr{ int16_t maxSpeed; int16_t minSpeed; }; var{ uint16_t gyroOffset; int16_t speed; int16_t turn; }; }; tSample_decl.cdl
38.
コンポーネントの設計(5/7) • ライントレース制御コンポーネント 2012/06/02 TOPPERSプロジェクト認定
38 [singleton] celltype tLinetracerTaskBody{ require tKernel.eKernel; entry sTaskBody eBody; entry sLinetracerControl eLinetracerControl; call sSensor cLightSensor; call sSensorControl cLightSensorControl; call sBalancerControl cBalancerControl; attr{ int16_t maxTurn; int16_t minTurn; }; var{ uint16_t lightThreshold; int8_t edge; int16_t black; int16_t white; }; }; tSample_decl.cdl
39.
コンポーネントの設計(6/7) • コマンド受信コンポーネント 2012/06/02 TOPPERSプロジェクト認定
39 [singleton] celltype tGetCommandTaskBody{ require tKernel.eKernel; entry sTaskBody eBody; call sSerialPort cSerialPort; call sSysLog cSysLog; call sLinetracerControl cLinetracerControl; call sBalancerControl cBalancerControl; call sTailController cTailController; call sSemaphore cSemaphore; var{ int32_t parameter = 0; int8_t sign = 1; }; }; tSample_decl.cdl
40.
コンポーネントの設計(7/7) • ⾛走⾏行行開始待ちコンポーネント [singleton] celltype tStarterTaskBody{
require tKernel.eKernel; entry sTaskBody eBody; call sCyclic cTailControllerTask; call sCyclic cBalancerTask; call sCyclic cLinetracerTask; call sTailController cTailController; call sSemaphore cSemaphore; [optional] call sSensor cTouchSensor; }; 2012/06/02 TOPPERSプロジェクト認定 40 tSample_decl.cdl
41.
コンポーネントの実装(1/9) • コンポーネントの設計 ‒ シグニチャの定義 ‒
セルタイプの定義 • コンポーネントの実装 ‒ コンポーネントの提 供する機能を実装 • シグニチャとセルタイプ の情報から⾃自動⽣生成され たテンプレートコードを 利⽤用 • C⾔言語実装 • 組上げ記述の作成 ‒ 組上げ記述によりア プリケーションを構 築 コンポーネント 記述 組上げ記述 セルタイプ コード テンプレート コード コンパイラ ヘッダ インタフェース コード コンポーネント 設計者 コンポーネント 開発者 アプリケーション 開発者 設計 設計 実装 バイナリ ⾃自動⽣生成 ⾃自動⽣生成 2012/06/02 TOPPERSプロジェクト認定 41 TECS ジェネレータ
42.
コンポーネントの実装(2/9) • テンプレートコードの例(singletonなし) ‒ ⾃自動⽣生成される部分 TOPPERSプロジェクト認定
422012/06/02 void eMotor_setPWM(CELLIDX idx, int8_t pwm, bool_t brakeMode) { CELLCB *p_cellcb; if (VALID_IDX(idx)) { p_cellcb = GET_CELLCB(idx); } else { /* エラー処理コードをここに記述します */ } /* ここに処理本体を記述します #_TEFB_# */ } gen/tMotor_templ.c
43.
コンポーネントの実装(3/9) • テンプレートコードの例(singletonあり) ‒ ⾃自動⽣生成される部分 TOPPERSプロジェクト認定
432012/06/02 void eBody_main() { } gen/tStarterTaskBody_templ.c
44.
コンポーネントの実装(4/9) TOPPERSプロジェクト認定 442012/06/02 void eBody_main() {
// 一部省略 cTailMotor_getRevolution(&rev); pwm_f = (float32_t)(VAR_targetAngle - rev) * ATTR_kp; if(pwm_f > (float32_t)ATTR_maxPwm){ pwm = ATTR_maxPwm; } else if(pwm_f < (float32_t)ATTR_minPwm){ pwm = ATTR_minPwm; } else { pwm = (int8_t)pwm_f; } cTailMotor_setPWM(pwm, 1); } tTailControllerTaskBody.c 結合先セルの 機能を呼び出す ⾃自⾝身の変数を 参照 ⾃自⾝身の属性を 参照
45.
コンポーネントの実装(5/9) • 尻尾制御コンポーネント:tTailControllerTaskBody.c ‒ 受け⼝口関数
eBody_main • 尻尾モータを⽬目標⾓角度になるようにP制御する周期タスク本体 • ⽬目標⾓角度は、変数targetAngle ‒ 受け⼝口関数 eTailController_calibrate • 尻尾モータのキャリブレーション • モータを逆回転させ、⽌止まった位置で、ロータリエンコーダの 回転数を初期化する ‒ 受け⼝口関数 eTailController_signalStop • ⽬目標⾓角度を、NXTが⾃自⽴立立する際の位置に設定 ‒ 属性tailAngleStop ‒ 受け⼝口関数 eTailController_signalStart • ⽬目標⾓角度を、NXTが⾛走⾏行行する際の位置に設定 ‒ 属性tailAngleDrive ‒ 受け⼝口関数 eTailController_setAngle • ⽬目標⾓角度をセットする ‒ 受け⼝口関数 eTailController_getAngle • ⽬目標⾓角度を取得する TOPPERSプロジェクト認定 452012/06/02
46.
コンポーネントの実装(6/9) • 倒⽴立立⼆二輪制御コンポーネント:tBalancerTaskBody.c ‒ 受け⼝口関数
eBody_main • 倒⽴立立⼆二輪制御のためのパラメータを計算し、モータの出⼒力力を設定 する周期タスク • ⽬目標速度は、変数speed • ⽬目標舵⾓角は、変数turn • セルBalancerの機能により、パラメータ計算 ‒ 受け⼝口関数 eBalancerControl_calibrate • ジャイロセンサオフセット値のキャリブレーション • 現在のジャイロセンサの値を、ジャイロセンサのオフセット値と する(変数gyroOffset) ‒ 受け⼝口関数 eBalancerControl_setXXX • ⽬目標速度/⾓角度を設定する ‒ XXXは、Speed / Turn ‒ 受け⼝口関数 eBalancerControl_getXXX • ⽬目標速度/⾓角度を取得する TOPPERSプロジェクト認定 462012/06/02
47.
コンポーネントの実装(7/9) • ライントレース制御コンポーネント:tLinetracerTaskBody.c ‒ 受け⼝口関数
eBody_main • 光センサの値からライントレースのための舵⾓角を計算し、倒⽴立立⼆二輪 制御コンポーネントに伝達する周期タスク • 光センサの値が閾値より⼤大きいか⼩小さいかを判定し、舵⾓角を決定す る、単純な制御 • 光センサ値の閾値は、変数lightThreshold ‒ 受け⼝口関数 eLinetracerControl_setLightThreshold • 光センサ値の閾値をセットする ‒ 引数に指定された値が有効範囲外であった場合には、現在の光センサ の値を、光センサ値の閾値とする ‒ 受け⼝口関数 eLinetracerControl_getLightThreshold • 光センサ値の閾値を取得する ‒ 受け⼝口関数 eLinetracerControl_setEdge/getEdge • ⾛走⾏行行時のエッジをセットする/取得する TOPPERSプロジェクト認定 472012/06/02
48.
コンポーネントの実装(8/9) • コマンド受信コンポーネント:tGetCommandTaskBody.c ‒ 受け⼝口関数
eBody_main • シリアルポート(Bluetooth)経由でコマンドを受信し、制御 タスクのパラメータをセットする ‒ コマンドの形式:'整数''コマンド⼀一⽂文字' • 'g'コマンド:⾛走⾏行行開始 ‒ 奇数'g'コマンドで左エッジスタート ‒ 偶数'g'コマンドで右エッジスタート ‒ 倒⽴立立⼆二輪制御コンポーネントのジャイロセンサオフセット値を キャリブレーション(NXTが静⽌止しているはずなので、ジャイロ センサオフセット値が適切に設定されるはず) • 's'コマンド:停⽌止 • 'b'コマンド:光センサ(⿊黒)のキャリブレーション • 'w'コマンド:光センサ(⽩白)のキャリブレーション • 'l'コマンド:光センサ(⽬目標値)のキャリブレーション • 'i'コマンド:出⼒力力するログの優先度をセット • 'f'コマンド:スピードのセット TOPPERSプロジェクト認定 482012/06/02
49.
コンポーネントの実装(9/9) • ⾛走⾏行行開始待ちコンポーネント:tStarterTaskBody.c ‒ 受け⼝口関数
eBody_main • プログラムの起動時の処理を⾏行行うタスク • 尻尾モータを⾃自⽴立立時の位置に制御 ‒ 尻尾モータのキャリブレーション ‒ ⾃自⽴立立位置に⽬目標⾓角度を設定 ‒ 尻尾モータ制御タスクをstart • コマンド受信タスクから⾛走⾏行行開始のシグナルを受信する ‒ セマフォを使⽤用 ‒ 倒⽴立立⼆二輪制御タスクをstart ‒ 尻尾モータの⽬目標⾓角度を⾛走⾏行行時の位置に制御 ‒ ライントレース制御タスクをstart TOPPERSプロジェクト認定 492012/06/02
50.
アプリケーションの組上げ(1/8) • コンポーネントの設計 ‒ シグニチャの定義 ‒
セルタイプの定義 • コンポーネントの実装 ‒ コンポーネントの提 供する機能を実装 • シグニチャとセルタイプ の情報から⾃自動⽣生成され たテンプレートコードを 利⽤用 • C⾔言語実装 • 組上げ記述の作成 ‒ 組上げ記述によりア プリケーションを構 築 TECS ジェネレータ コンポーネント 記述 組上げ記述 セルタイプ コード テンプレート コード コンパイラ ヘッダ インタフェース コード コンポーネント 設計者 コンポーネント 開発者 アプリケーション 開発者 設計 設計 実装 バイナリ ⾃自動⽣生成 ⾃自動⽣生成 2012/06/02 TOPPERSプロジェクト認定 50
51.
アプリケーションの組上げ(2/8) 2012/06/02 TOPPERSプロジェクト認定 51 •
TECSコンポーネント図 起動処理 ライントレース制御倒 輪制御 尻尾制御 センサドライバモータドライバ ログ出 & シリアル通信 コマンド受信
52.
アプリケーションの組上げ(3/8) • 尻尾制御コンポーネントの⽣生成 TOPPERSプロジェクト認定 522012/06/02 cell
tTailControllerTaskBody TailControllerTaskBody{ cTailMotor = TailMotor.eMotor; tailAngleStop = 108; tailAngleDrive = 0; kp = 2.5; maxPwm = 60; minPwm = -60; }; cell tCyclicTask TailControllerTask{ cBody = TailControllerTaskBody.eBody; cyclicAttribute = C_EXP("TA_NULL"); cyclicTime = 4; cyclicPhase = 1; priority = 5; stackSize = 512; }; セルの結合 属性の設定 tSample_inst.cdl
53.
アプリケーションの組上げ(4/8) • 倒⽴立立⼆二輪制御コンポーネントの⽣生成 TOPPERSプロジェクト認定 532012/06/02 cell
tBalancerTaskBody BalancerTaskBody{ cRightMotor = RightMotor.eMotor; cLeftMotor = LeftMotor.eMotor; cGyroSensor = GyroSensor.eSensor; cBattery = Battery.eBattery; cBalancer = Balancer.eBalancer; maxSpeed = 100; minSpeed = -100; }; cell tCyclicTask BalancerTask{ cBody = BalancerTaskBody.eBody; cyclicAttribute = C_EXP("TA_NULL"); cyclicTime = 4; cyclicPhase = 1; priority = 1; stackSize = 1024; }; tSample_inst.cdl
54.
アプリケーションの組上げ(5/8) • ライントレース制御コンポーネントの⽣生成 TOPPERSプロジェクト認定 542012/06/02 cell
tLinetracerTaskBody LinetracerTaskBody{ cLightSensor = LightSensor.eSensor; cLightSensorControl = LightSensor.eSensorControl; cBalancerControl = BalancerTaskBody.eBalancerControl; maxTurn = 100; minTurn = -100; }; cell tCyclicTask LinetracerTask{ cBody = LinetracerTaskBody.eBody; cyclicAttribute = C_EXP("TA_NULL"); cyclicTime = 10; cyclicPhase = 1; priority = 4; stackSize = 512; }; tSample_inst.cdl
55.
アプリケーションの組上げ(6/8) • ⾛走⾏行行開始シグナル⽤用セマフォの⽣生成 TOPPERSプロジェクト認定 552012/06/02 cell
tSemaphore StartSemaphore{ attribute = C_EXP("TA_NULL"); count = 0; /* 初期資源数は0 */ max = 1; /* 最大資源数は1 */ }; tSample_inst.cdl
56.
アプリケーションの組上げ(7/8) • コマンド受信コンポーネントの⽣生成 TOPPERSプロジェクト認定 562012/06/02 cell
tGetCommandTaskBody GetCommandTaskBody{ cSerialPort = SerialPort1.eSerialPort; cSysLog = SysLog.eSysLog; cLinetracerControl = LinetracerTaskBody.eLinetracerControl; cBalancerControl = BalancerTaskBody.eBalancerControl; cTailController = TailControllerTaskBody.eTailController; cSemaphore = StartSemaphore.eSemaphore; }; cell tTask GetCommandTask{ cBody = GetCommandTaskBody.eBody; taskAttribute = C_EXP("TA_ACT"); priority = 5; stackSize = 1024; }; tSample_inst.cdl
57.
アプリケーションの組上げ(8/8) • ⾛走⾏行行開始待ちコンポーネントの⽣生成 TOPPERSプロジェクト認定 572012/06/02 cell
tStarterTaskBody StarterTaskBody{ cTailControllerTask = TailControllerTask.eCyclic; cBalancerTask = BalancerTask.eCyclic; cLinetracerTask = LinetracerTask.eCyclic; cTailController = TailControllerTaskBody.eTailController; cSemaphore = StartSemaphore.eSemaphore; }; cell tTask StarterTask{ cBody = StarterTaskBody.eBody; taskAttribute = C_EXP("TA_ACT"); priority = 6; stackSize = 1024; }; tSample_inst.cdl
Download