Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)

6 435 vues

Publié le

NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)

Publié dans : Logiciels
  • Identifiez-vous pour voir les commentaires

  • Soyez le premier à aimer ceci

NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)

  1. 1. 4. NXTプラットフォーム ⽯石川 拓也 名古屋⼤大学  ⼤大学院情報科学研究科 最終更新⽇日:2012/05/30 2012/06/02 TOPPERSプロジェクト認定 1
  2. 2. 内容 •  NXTプラットフォームについて ‒  提供するデバイスドライバやミドルウェアのコン ポーネントについて紹介 •  機能概要 •  コンポーネント図 •  インターフェース(受け⼝口関数) •  使⽤用例 2012/06/02 TOPPERSプロジェクト認定 2
  3. 3. NXTのハードウェア構成 •  ハードウェア構成のイメージ図 2012/06/02 TOPPERSプロジェクト認定 3 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  4. 4. ASP+TECS デバイスドライバ・ ミドルウェア NXTプラットフォームの概要(1/3) •  ASP+TECS ‒  カーネルオブジェクト ‒  タイマ ‒  シリアル通信 •  デバイスドライバ ‒  ボタン、バッテリ、センサ、モータ •  コプロセッサ ‒  Bluetooth ‒  ディスプレイ ‒  サウンド ‒  Flash •  ミドルウェア ‒  ボタンチェック ‒  Bluetooth接続 ‒  バランサ NXT カーネル タイマ シリアル ユーザアプリケーション 2012/06/02 TOPPERSプロジェクト認定 4
  5. 5. NXTプラットフォームの概要(2/3) •  提供するコンポーネントの定義 ‒  カーネル •  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:Flashコントローラ ‒  tBalancer_decl.cdl : バランサ TOPPERSプロジェクト認定 52012/06/02
  6. 6. NXTプラットフォームの概要(3/3) •  提供するコンポーネントの⽣生成 ‒  カーネル依存部 •  target/mindstorms_nxt_gcc/target_syssvc_inst.cdl : ‒  低レベル出⼒力力 ‒  シリアルドライバ ‒  tBluetooth_inst.cdl : NXTのBluetoothドライバとBluetooth接続タスク »  Bluetoothを使ってシリアル通信を実現 ‒  NXTのデバイスドライバ、ミドルウェア •  tecs_lib/mindstorms_nxt/target_lib_inst.cdl: ‒  ボタン ‒  コプロセッサ ‒  Flashコントローラ ‒  ボタンチェック周期ハンドラ ※ その他のコンポーネントはユーザが⽣生成する •  例 ‒  モータ ‒  センサ ‒  バランサ TOPPERSプロジェクト認定 62012/06/02
  7. 7. ASP+TECSの解説 •  タイマ •  シリアル通信 ‒  Bluetoothを使⽤用 2012/06/02 TOPPERSプロジェクト認定 7
  8. 8. タイマ(1/2) •  現在時刻の取得 ‒  ASPカーネルのサービスコールを使⽤用 •  ER getTime(SYSTIM *p_systemTime) ‒  システム時刻の参照 »  ASPカーネルが起動してから現在までの時間 »  ミリ秒単位 ‒  システム時刻はp_systemTimeで指定したメモリ領域に返される •  ER getMicroTime(SYSUTM *p_systemMicroTime) ‒  性能評価⽤用システム時刻の参照 »  マイクロ秒単位 ‒  システム時刻はp_systemMicroTimeで指定したメモリ領域に返 される •  カーネルオブジェクト(タスクやセマフォ)以外の サービスコール ‒  セルタイプtKernelのセルの受け⼝口eKernel 2012/06/02 TOPPERSプロジェクト認定 8
  9. 9. タイマ(2/2) •  使⽤用例 /* コンポーネント記述 */ celltype tSample{ require tKernel.eKernel; entry sSample eSample; }; /* 呼出し */ void eSample_main() { SYSTIM currentTime; getTime(&currentTime); }; 2012/06/02 TOPPERSプロジェクト認定 9
  10. 10. シリアル通信 •  ASPカーネルのシリアル通信 ‒  システムログ(シリアル送信) •  void syslog(uint_t prio, const char *format, ...) ‒  prio:ログの優先度 ‒  format, ...:表⽰示するログ(printf等と同様の記法) ※asp+tecs/doc/user.txtの「8.システムサービス」を参照 ‒  シリアル受信 •  ER_UINT cSerialPort_read(char_t *buffer, uint_t length) ‒  length:⻑⾧長さ、buffer:受信バッファ •  ホストPCとのシリアル通信⽅方法 ‒  Bluetoothを使⽤用 •  NXTではシリアルのコネクタがない •  NXTとホストPCで仮想シリアル通信 ‒  ターミナル •  Tera Term •  screenコマンド(screen /dev/tty. ) 2012/06/02 TOPPERSプロジェクト認定 10
  11. 11. syslog •  使⽤用例 ‒  syslogはライブラリ関数なので、コンポーネント 記述は不要 •  そのライブラリ関数の中で、シリアル通信⽤用セルの受け⼝口関数 を直接呼び出している /* 呼出し */ void eSample_main() { int x = 1; syslog(LOG_NOTICE, "sample%d", x); }; 2012/06/02 TOPPERSプロジェクト認定 11
  12. 12. シリアル受信(1/2) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample call sSerialPort cSerialPort; }; cell tSample Sample{ cSerialPort = SerialPort1.eSerialPort; }; SerialPort1Sample 2012/06/02 TOPPERSプロジェクト認定 12
  13. 13. シリアル受信(2/2) •  使⽤用例(呼び⼝口関数) void eSample_main() { char_t c; cSerialPort_read(&c, 1); } SerialPort1Sample 2012/06/02 TOPPERSプロジェクト認定 13
  14. 14. デバイスドライバの解説 •  提供するコンポーネント ‒  セルを⽣生成済み •  コプロセッサ ‒  AVR、TWI •  ボタン •  Flashコントローラ •  Bluetooth ‒  ※必須ではない ‒  定義のみ提供する •  ディスプレイ ‒  ディスプレイ、LCD、SPI •  サウンド •  バッテリ •  モータ •  センサ ⽣生成済みのセルを プラットフォーム として提供 アプリケーション (ユーザ)レベル でセルを⽣生成 2012/06/02 TOPPERSプロジェクト認定 14
  15. 15. Bluetooth(1/5) •  機能概要 ‒  Bluetooth通信の確⽴立立 •  マスタ/スレーブ ‒  Bluetooth通信 •  送信/受信 2012/06/02 TOPPERSプロジェクト認定 15 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  16. 16. Bluetooth(2/5) •  複合セルタイプtBluetoothのセルのコンポーネント図 Bluetooth BluetoothBody InitializeBluetooth AlarmTimeOut sBluetooth eBluetooth 2012/06/02 TOPPERSプロジェクト認定 16
  17. 17. Bluetooth(3/5) •  コンポーネント記述(組上げ記述) ※ これは提供物に含まれているので、改めて記述する必要は ない ‒  target_syssvc_inst.cdlからimportされる cell tSemaphore BluetoothSemapohre{ attribute = C_EXP("TA_TPRI"); count = 0; max = 1; }; cell tBluetooth Bluetooth { // Bluetooth本体 cSemaphore = BluetoothSemaphore.eSemaphore; keyCode = "1234"; }; 2012/06/02 TOPPERSプロジェクト認定 17 tBluetooth_inst.cdl
  18. 18. Bluetooth(4/5) •  セルタイプtBluetoothのインタフェース(⼀一部) ‒  シグニチャ:sBluetooth,受け⼝口:eBluetooth •  void open(void) ‒  USART1送受信バッファをBluetooth通信⽤用に切り替える •  uint8_t initializeSlave(void) ‒  NXTをスレーブデバイスとして初期化し,マスタデバイスとの接 続を確⽴立立後、ストリームモードに以降する ‒  ストリームモード以降後は、Bluetoothコマンドは受け付けず、 シリアル通信路として機能する •  bool_t isConnected(void) ‒  接続が確⽴立立したかをチェックする •  uint32_t sendPacket([in] const uint8_t *buffer,                       [in] uint32_t length) ‒  データを送信する 2012/06/02 TOPPERSプロジェクト認定 18
  19. 19. Bluetooth(5/5) •  キーコードの設定 ‒  tBluetooth_inst.cdl内Bluetoothセルを⽣生成している 部分において、keyCodeで設定する •  デフォルトの値は 1234 •  注意点 ‒  ASPカーネルでのシリアル通信でBluetoothを使⽤用 •  syslogやシリアル受信 •  Bluetoothでの仮想シリアル通信を利⽤用 ‒  ASPカーネルのシリアル通信を利⽤用する場合、 Bluetoothコンポーネントの機能をユーザアプリが直 接利⽤用した場合の動作は保証しない •  syslogやtSerialPortを使⽤用する 2012/06/02 TOPPERSプロジェクト認定 19
  20. 20. ディスプレイ(1/7) •  機能概要 ‒  ディスプレイ表⽰示 •  ⽂文字列や数字 •  提供するコンポーネントの定義 ‒  複合セルタイプtDisplay 2012/06/02 TOPPERSプロジェクト認定 20 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  21. 21. ディスプレイ(2/7) •  複合セルタイプtDisplayのセルの⽣生成例 ‒  コンポーネント図 Display DisplayBody InitializeDisplay SPI sDisplay eDisplay LCD 2012/06/02 TOPPERSプロジェクト認定 21 TerminateDisplay
  22. 22. ディスプレイ(3/7) •  セルSPIのコンポーネント図 SPI SPIBody ISRSPI sSPI eSPI 2012/06/02 TOPPERSプロジェクト認定 22
  23. 23. ディスプレイ(4/7) •  複合セルタイプtDisplayのセルの⽣生成例 ‒  コンポーネント記述(組上げ記述) cell tDisplay Display{ // ディスプレイ }; 2012/06/02 TOPPERSプロジェクト認定 23 tSample.cdl
  24. 24. ディスプレイ(5/7) •  tDisplayのインタフェース(⼀一部) ‒  シグニチャ:sDisplay, 受け⼝口:eDisplay •  void update(void) ‒  バッファの内容を画⾯面に表⽰示する •  void clear([in] bool_t updateToo) ‒  画⾯面表⽰示⽤用バッファのクリア •  void gotoXY([in] uint8_t x, [in] uint8_t y) ‒  ⽂文字表⽰示位置の設定 •  void putString([in] const char_t *string) ‒  ⽂文字列を画⾯面表⽰示⽤用バッファに⼊入れる •  void putInt([in] int32_t val, [in] uint8_t place); ‒  符号付き整数を画⾯面表⽰示⽤用バッファに⼊入れる 2012/06/02 TOPPERSプロジェクト認定 24
  25. 25. ディスプレイ(6/7) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample; call sDisplay cDisplay; }; cell tSample Sample{ cDisplay = Display.eDisplay; }; DisplaySample 2012/06/02 TOPPERSプロジェクト認定 25
  26. 26. ディスプレイ(7/7) •  使⽤用例(呼び⼝口関数) void eSample_main() { cDisplay_gotoXY(0, 0); // 表示位置を(0,0)に cDisplay_putString("sample"); // "sample"をバッファに cDisplay_update(); // 画面を更新 } DisplaySample 2012/06/02 TOPPERSプロジェクト認定 26
  27. 27. サウンド(1/6) •  機能概要 ‒  サウンドを出⼒力力する •  ⾳音の周波数、鳴らす時間を指定 •  ⾳音量を設定 •  提供するコンポーネントの定義 ‒  複合セルタイプtSound 2012/06/02 TOPPERSプロジェクト認定 27 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  28. 28. サウンド(2/6) •  複合セルタイプtSoundのセルの⽣生成例 ‒  コンポーネント図 Sound SoundBody ISRSound InitializeSound sSound eSound 2012/06/02 TOPPERSプロジェクト認定 28
  29. 29. サウンド(3/6) •  複合セルタイプtSoundのセルの⽣生成例 ‒  コンポーネント記述(組上げ記述) cell tSound Sound{ // サウンド }; 2012/06/02 TOPPERSプロジェクト認定 29 tSample.cdl
  30. 30. サウンド(4/6) •  tSoundのインタフェース ‒  シグニチャ:sSound, 受け⼝口:eSound •  void beepTone([in] uint32_t frequency,                  [in] uint32_t msecond) ‒  トーンサウンドの出⼒力力 •  void setVolume([in] uint8_t volume) ‒  ⾳音量の設定 ※ 0か100を設定することを推奨    それ以外の値の場合、出⼒力力サウンドの周波数が変わる 2012/06/02 TOPPERSプロジェクト認定 30
  31. 31. サウンド(5/6) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample; call sSound cSound; }; cell tSample Sample{ cSound = Sound.eSound; }; SoundSample 2012/06/02 TOPPERSプロジェクト認定 31
  32. 32. サウンド(6/6) •  使⽤用例(呼び⼝口関数) void eSample_main() { cSound_setVolume(100); // 音量100 % cSound_beepTone(660, 100); // 660Hzの音を100ms鳴らす } SoundSample 2012/06/02 TOPPERSプロジェクト認定 32
  33. 33. コプロセッサ(1/5) •  機能概要 ‒  コプロセッサ(AVR)と通信をする •  TWIバスを通じて、2m秒周期で受信と送信を交互に⾏行行う ‒  センサ、ボタン、バッテリの状態を受信 ‒  モータの出⼒力力値を送信 •  送受信データを管理する •  セルAVRを提供 2012/06/02 TOPPERSプロジェクト認定 33 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  34. 34. コプロセッサ(2/5) •  セルAVRのコンポーネント図 AVR AVRBody CyclicAVR InitializeAVR TWI sAvrMotor eAvrMotor ...etc sCyclic eCyclic 2012/06/02 TOPPERSプロジェクト認定 34
  35. 35. コプロセッサ(2/5) •  セルTWIのコンポーネント図 TWI TWIBody ISRTWI 2012/06/02 TOPPERSプロジェクト認定 35
  36. 36. コプロセッサ(3/5) •  コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要は ない cell tAVR AVR{ // コプロセッサ }; 2012/06/02 TOPPERSプロジェクト認定 36 target_lib_inst.cdl
  37. 37. コプロセッサ(4/5) •  AVRのインターフェース(⼀一部) ‒  シグニチャ:sAvrMotor, 受け⼝口:eAvrMotor •  void setMotor([in] uint8_t portNumber, [in] int8_t powerPercent, [in] bool_t brake) ‒  モータにPWM値をセット ‒  シグニチャ:sAvrSensor, 受け⼝口:eAvrSensor •  void setInputPower([in] uint8_t portNumber, [in] uint8_t powerType); ‒  ポートに電源を供給 •  uint16_t getSensor([in] uint8_t portNumber) ‒  センサ値の取得 ‒  シグニチャ:sAvrBattery, 受け⼝口:eAvrBattery •  uint16_t batteryVoltage(void) ‒  バッテリ電圧値の取得 2012/06/02 TOPPERSプロジェクト認定 37
  38. 38. コプロセッサ(5/5) •  注意事項 ‒  AVRは、センサ、モータ、ボタン、バッテリ、ミ ドルウェアのコンポーネントが呼び出すことを想 定している •  ユーザアプリが直接AVRを呼び出すことは想定しておらず、 ユーザアプリから直接呼び出した場合の動作は保証しない 2012/06/02 TOPPERSプロジェクト認定 38
  39. 39. バッテリ(1/6) •  機能概要 ‒  バッテリ残量の取得 •  提供するコンポーネントの定義 ‒  セルタイプtBattery 2012/06/02 TOPPERSプロジェクト認定 39 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  40. 40. バッテリ(2/6) •  セルタイプtBatteryのセルの⽣生成例 ‒  コンポーネント図 Battery sBattery eBattery 2012/06/02 TOPPERSプロジェクト認定 40 AVR セルAVRの受け⼝口 sAvrBattery eAvrBattery につなぐ必要がある
  41. 41. バッテリ(3/6) •  セルタイプtBatteryのセルの⽣生成例 ‒  コンポーネント記述(組上げ記述) cell tBattery Battery{ // バッテリ cAvrButton = AVR.eAvrButton; }; 2012/06/02 TOPPERSプロジェクト認定 41 tSample.cdl
  42. 42. バッテリ(4/6) •  tBatteryのインタフェース ‒  シグニチャ:sBattery,受け⼝口:eBattery •  uint16_t getBatteryVoltage(void) ‒  バッテリ残量の電圧値を返す. »  セルAVRを通して取得する 2012/06/02 TOPPERSプロジェクト認定 42
  43. 43. バッテリ(5/6) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample; call sBattery cBattery; }; cell tSample Sample{ cBattery = Battery.eBattery; }; BatterySample 2012/06/02 TOPPERSプロジェクト認定 43
  44. 44. バッテリ(6/6) •  使⽤用例(呼び⼝口関数) void eSample_main() { uint16_t battery; // バッテリ残量の取得 battery = cBattery_getBatteryVoltage(); } 2012/06/02 TOPPERSプロジェクト認定 44 BatterySample
  45. 45. ボタン(1/6) •  機能概要 ‒  ボタン(ENTER,EXIT,RUN,STOP)押下状態 の取得 •  セルButtonを提供 2012/06/02 TOPPERSプロジェクト認定 45 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  46. 46. ボタン(2/6) •  セルButtonのコンポーネント図 Button AVR sButton eButton 2012/06/02 TOPPERSプロジェクト認定 46 ButtonBody ButtonUpdate
  47. 47. ボタン(3/6) •  コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要は ない cell tButton Button{ // ボタン cAvrButton = AVR.eAvrButton; }; 2012/06/02 TOPPERSプロジェクト認定 47 target_lib_inst.cdl
  48. 48. ボタン(4/6) •  Buttonのインタフェース(⼀一部) ‒  シグニチャ:sButton,受け⼝口:eButton •  bool_t isRUNButton(void) ‒  RUNボタンが押下されているならばtrue,そうでなければfalseを 返す. •  bool_t isENTERButton(void) ‒  ENTERボタンが押下されているならばtrue,そうでなければ falseを返す. •  bool_t isSTOPButtonOnly(void) ‒  STOPボタンのみが押下されているならばtrue,そうでなければ falseを返す. 2012/06/02 TOPPERSプロジェクト認定 48
  49. 49. ボタン(5/6) •  使⽤用例(コンポーネント記述) celltype tSample{ require tKernel.eKernel; entry sSample eSample; call sButton cButton; }; cell tSample Sample{ cButton = Button.eButton; }; ButtonSample 2012/06/02 TOPPERSプロジェクト認定 49
  50. 50. ボタン(6/6) •  使⽤用例(呼び⼝口関数) void eSample_main() { if(cButton_isRUNButton()){ // RUNボタンが押されたら、exitTaskを呼ぶ exitTask(); } } 2012/06/02 TOPPERSプロジェクト認定 50 ButtonSample
  51. 51. モータ(1/7) •  機能概要 ‒  モータの回転数の取得/設定 ‒  モータのPWM値のセット 2012/06/02 TOPPERSプロジェクト認定 51 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  52. 52. モータ(2/7) •  提供するコンポーネントの定義 ‒  複合セルタイプtRotaryEncoder •  モータの割込みハンドラと終了処理ルーチン •  モータを使⽤用するときは、 tRotaryEncoder のセルの呼び⼝口と tMotorのセルの受け⼝口を結合 ‒  セルタイプtMotor •  モータの回転数 •  モータのPWM値 2012/06/02 TOPPERSプロジェクト認定 52 ・接続するポート番号を属性   としてもつ ・ユーザアプリケーションの   コンポーネントと結合するため   の受け⼝口をもつ ・tRotaryEncoderのセル   と結合するための受け⼝口をもつ ・セルAVRへPWM値を   送るための呼び⼝口をもつ
  53. 53. モータ(3/7) •  モータ関連のセルの⽣生成例 ‒  コンポーネント図 RightMotor LeftMotor AVR RotaryEncoder RotaryEncoder RotaryEncoderBody Initialize Motor Terminate Motor Cyclic Motor ISR Motor sMotor eMotor 2012/06/02 TOPPERSプロジェクト認定 53 セルAVRの 受け⼝口 sAvrMotor eAvrMotor につなぐ必要 がある セルRotaryEncoderの呼び⼝口 ciMotorInterrupt[x](x=0,1,2) を、tMotorのセルの受け⼝口 eiMotorInterrupt につなぐ必要がある
  54. 54. モータ(4/7) •  モータ関連のセルの⽣生成例 ‒  コンポーネント記述(組上げ記述) cell tMotor RightMotor { // 右モータ portNumber = NXT_PORT_B; // Bポート cAvrMotor = AVR.eAvrMotor; }; cell tMotor LeftMotor { //左モータ portNumber = NXT_PORT_C; // Cポート cAvrMotor = AVR.eAvrMotor; }; cell tRotaryEncoder RotaryEncoder{ ciMotorInterrupt[0] = TailMotor.eiMotorInterrupt; ciMotorInterrupt[1] = RightMotor.eiMotorInterrupt; ciMotorInterrupt[2] = LeftMotor.eiMotorInterrupt; }; 2012/06/02 TOPPERSプロジェクト認定 54 tSample.cdl
  55. 55. モータ(5/7) •  tMotorのインタフェース ‒  シグニチャ:sMotor,受け⼝口:eMotor •  void setPWM([in] int8_t pwm, [in] bool_t brakeMode) ‒  モータのPWM値をセット •  void setRevolution ([in] int32_t revolution) ‒  モータの回転数をセット »  ロータリエンコーダの初期化 •  void getRevolution([out] int32_t *revolution) ‒  モータの回転数を取得 2012/06/02 TOPPERSプロジェクト認定 55
  56. 56. モータ(6/7) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample call sMotor cLeftMotor; }; cell tSample Sample{ cLeftMotor = LeftMotor.eMotor; }; LeftMotorSample 2012/06/02 TOPPERSプロジェクト認定 56
  57. 57. モータ(7/7) •  使⽤用例(呼び⼝口関数) void eSample_main() { cLeftMotor_setPWM(20, 1); // モータのPWMを20に設定 } LeftMotorSample 2012/06/02 TOPPERSプロジェクト認定 57
  58. 58. センサ(1/10) •  機能概要 ‒  センサ値の取得 2012/06/02 TOPPERSプロジェクト認定 58 Bluetooth LCDディスプレイ サウンド ボタン バッテリセンサ メインプロセッサ コプロセッサ センサポート モータポート USART1SPI SSC TWI PIOA I2C
  59. 59. センサ(2/10) •  提供するコンポーネントの定義 ‒  複合セルタイプtSensorDriver •  センサの初期化ルーチンとI2Cの割込みハンドラ •  各種センサを使⽤用するときは、 tSensorDriver のインスタン スの呼び⼝口と各種センサのインスタンスの受け⼝口を結合 ‒  各種センサのセルタイプ •  光センサ •  ジャイロセンサ •  タッチセンサ •  超⾳音波センサ ‒  センサ値の取得など 2012/06/02 TOPPERSプロジェクト認定 59 ・接続するポート番号を属性   としてもつ ・ユーザアプリケーションの   コンポーネントと結合するため   の受け⼝口をもつ ・tSensorDriverのセル   と結合するための受け⼝口をもつ ・セルAVRからセンサ値を   取得するための呼び⼝口をもつ
  60. 60. センサ(3/10) •  光センサの コンポーネント図 •  ジャイロセンサの コンポーネント図 LightSensor LightSensor Body Terminate LightSensor SensorPort GyroSensor GyroSensor Body SensorPort sSensor eSensor sSensor eSensor 2012/06/02 TOPPERSプロジェクト認定 60 sSensorControl eSensorControl
  61. 61. センサ(4/10) •  タッチセンサの コンポーネント図 •  超⾳音波センサの コンポーネント図 TouchSensor TouchSensor Body SensorPort SonicSensor SonicSensor Body Terminate SonicSensor SensorPort I2C 2012/06/02 TOPPERSプロジェクト認定 61 sSensor eSensor sSensor eSensor
  62. 62. センサ(5/10) •  センサ関連のセルの⽣生成例 ‒  コンポーネント図 GyroSensor SonicSensor AVR SensorDriver SensorDriver SensorDriverBody Initialize Sensor ISR I2C sSensor eSensor 2012/06/02 TOPPERSプロジェクト認定 62 セルAVRの 受け⼝口 sAvrSensor eAvrSensor につなぐ必要 がある セルSensorDriverの呼び⼝口 ciSensorDriver[x](x=0,1,2,3) を、各種センサのセルの受け⼝口 eiSensorDriver につなぐ必要がある
  63. 63. センサ(6/10) •  センサ関連のセルの⽣生成例 ‒  コンポーネント記述(組上げ記述) cell tGyroSensor GyroSensor{ // ジャイロセンサ portNumber = NXT_PORT_S1; cAvrSensor = AVR.eAvrSensor; }; cell tSonicSensor SonicSensor{ // 超音波センサ portNumber = NXT_PORT_S2; cAvrSensor = AVR.eAvrSensor; }; cell tSensorDriver SensorDriver{ ciSensorDriver[0] = GyroSensor.eiSensorDriver; ciSensorDriver[1] = SonicSensor.eiSensorDriver; // 省略:他のセンサとの結合 }; 2012/06/02 TOPPERSプロジェクト認定 63 tSample.cdl
  64. 64. センサ(7/10) •  tLightSensorのインタフェース ‒  シグニチャ:sSensor, 受け⼝口:eSensor •  void getValue([out] uint16_t *value) ‒  光センサデータの取得 ‒  シグニチャ:sSensorControl,受け⼝口: eSensorControl •  void on(void) / void off(void) ‒  光センサのON/OFF ‒  プログラム起動時はON •  tGyroSensorのインタフェース ‒  シグニチャ:sSensor, 受け⼝口:eSensor •  void getValue([out] uint16_t *value) ‒  ジャイロセンサデータの取得 2012/06/02 TOPPERSプロジェクト認定 64
  65. 65. センサ(8/10) •  tTouchSensorのインタフェース ‒  シグニチャ:sSensor, 受け⼝口:eSensor •  void getValue([out] uint16_t *value) ‒  タッチセンサデータの取得(⾮非接触ならば0,接触ならば1) •  tSonicSensorのインタフェース ‒  シグニチャ:sSensor, 受け⼝口:eSensor •  void getValue([out] uint16_t *value) ‒  超⾳音波センサ計測距離データの取得 •  超⾳音波センサ初期化/終了処理のためのAPIはない ‒  ⾃自動で呼ばれる 2012/06/02 TOPPERSプロジェクト認定 65
  66. 66. センサ(9/10) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample call sSensor cLightSensor; call sSensorControl cLightSensorControl; }; cell tSample Sample{ cLightSensor = LightSensor.eSensor; cLightSensorControl = LightSensor.eSensorControl; }; LightSensorSample 2012/06/02 TOPPERSプロジェクト認定 66
  67. 67. センサ(10/10) •  使⽤用例(呼び⼝口関数) void eSample_main() { uint16_t light; cLightSensorControl_on(); // 光センサをON cLightSensor_getValue(&light); // 光センサの値を取得 } Sample 2012/06/02 TOPPERSプロジェクト認定 67 LightSensor
  68. 68. ミドルウェア(1/4) •  ボタンチェック周期ハンドラ(CheckNXTButton) ‒  機能概要 •  10ミリ秒周期でボタンの押下状態をチェックする •  押下されているボタンに応じて以下の処理を⾏行行う ‒  STOP:プログラムを再起動する ‒  EXIT:プログラムを終了し、電源を切る ‒  STOP+ENTER:NXT BIOSを書き換え後、電源を切る »  再度電源を⼊入れると、プログラムダウンロード可能な状態と なる 2012/06/02 TOPPERSプロジェクト認定 68
  69. 69. ミドルウェア(2/4) •  Bluetooth接続タスク(ConnectBluetoothTask) ‒  機能概要 •  システムの起動時に起動する優先度2のタスク •  NXTのBluetoothデバイス名を設定 •  NXTをスレーブとしてBluetooth接続を確⽴立立し、仮想シリアル 通信を可能にする ‒  デバイス名の設定 •  tBluetooth_inst.cdl内ConnectBluetoothセルを⽣生成している部分に おいて、deviceNameで設定する •  デフォルトの値は ET1234 2012/06/02 TOPPERSプロジェクト認定 69
  70. 70. ミドルウェア(3/4) •  コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要はな い ‒  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プロジェクト認定 70 ram_only.cdl / ram+rom.cdl
  71. 71. ミドルウェア(4/4) •  コンポーネント記述(組上げ記述) ※これは提供物に含まれているので、改めて記述する必要はな い ‒  target_syssvc_inst.cdlからimportされる 2012/06/02 TOPPERSプロジェクト認定 // Bluetooth接続タスク cell tConnectBluetooth ConnectBluetooh { cBluetooth = Bluetooth.eBluetooth; // デバイス名の設定 deviceName = { 'E', 'T', '1', '2', '3', '4', '0' }; }; cell tTask ConnectBluetoothTask { cBody = ConnectBluetooth.eConnectBluetooth; taskAttribute = C_EXP("TA_ACT"); priority = 2; stackSize = 512; }; 71 tBluetooth_inst.cdl
  72. 72. バランサ(1/4) •  セルタイプ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プロジェクト認定 72
  73. 73. バランサ(2/4) •  セルタイプtBalancerの⽣生成例 ‒  コンポーネント記述(組上げ記述) // バランサ cell tBalancer Balancer{ }; 2012/06/02 TOPPERSプロジェクト認定 73 tSample.cdl Balancer Balancer BalancerBody Initialize Balancer
  74. 74. バランサ(3/4) •  使⽤用例(コンポーネント記述) celltype tSample{ entry sSample eSample call sBalancer cBalancer; }; cell tSample Sample{ cBalancer = Balancer.eBalancer; }; BalancerSample 2012/06/02 TOPPERSプロジェクト認定 74
  75. 75. バランサ(4/4) •  使⽤用例(呼び⼝口関数) void eSample_main() { /* 省略:変数宣言とパラメータの設定 */ cBalancer_control(speed, turn, gyro, gyroOffset, rev_l, rev_r, battery, &pwm_l, &pwm_r); } 2012/06/02 TOPPERSプロジェクト認定 75 BalancerSample
  76. 76. 使⽤用するファームウェアの選択 •  拡張NXTファームウェア or NXT BIOSの選択 ‒  target_lib_inst.cdlで選択する •  importするcdlファイルで制御 TOPPERSプロジェクト認定 762012/06/02 // 拡張NXTファームウェアを使用する場合 // ram_onlyを残し、ram+romをコメントアウト(削除) import("ram_only.cdl"); // import("ram+rom.cdl"); target_lib_inst.cdl // NXT BIOSを使用する場合 // ram+romを残し、ram_onlyをコメントアウト(削除) // import("ram_only.cdl"); import("ram+rom.cdl"); target_lib_inst.cdl
  77. 77. Flashコントローラ •  機能概要 ‒  Flashコントローラにより、NXT BIOSを書き換え る •  セルFlashを提供 ‒  NXT BIOSを使⽤用する場合に⽣生成される ‒  ram+rom.cdlで⽣生成 ‒  周期ハンドラCheckNXTButtonの本体から呼ばれ るので、ユーザアプリケーションが意識する必要 はない TOPPERSプロジェクト認定 772012/06/02

×