Más contenido relacionado
La actualidad más candente (20)
Similar a NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3) (20)
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
- 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
- 10. TECSを⽤用いた開発の流れ
• コンポーネントの設計
‒ シグニチャの定義
‒ セルタイプの定義
• コンポーネントの実装
‒ コンポーネントの提
供する機能を実装
• シグニチャとセルタイプ
の情報から⾃自動⽣生成され
たテンプレートコードを
利⽤用
• C⾔言語実装
• 組上げ記述の作成
‒ 組上げ記述によりア
プリケーションを構
築
コンポーネント
記述
組上げ記述
セルタイプ
コード
テンプレート
コード
コンパイラ
ヘッダ
インタフェース
コード
コンポーネント
設計者
コンポーネント
開発者
アプリケーション
開発者
設計
設計
実装
バイナリ
⾃自動⽣生成
⾃自動⽣生成
2012/06/02 TOPPERSプロジェクト認定 10
TECS
ジェネレータ
- 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
- 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
- 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
- 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
- 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
ジェネレータ
- 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
- 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
- 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