Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

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

  • Login to see the comments

  • Be the first to like this

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

×