沼津高専 電子制御工学科
MIRS0204ソフトウェア詳細設計書
MIRS0204-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2003.5.27 中西・武藤 村田 初版
A02 2003.6.17 中西・武藤 村田 API,I/Oアドレスの追加

目次

  1. はじめに
  2. 概要
  3. OS(RT-Linuxの概要
  4. 開発言語(C++)の概要
  5. 行動モードの詳細
  6. クラスの構成
  7. 各クラスの詳細
  8. 試験

  1. はじめに
  2. 本ドキュメントは、MIRS0204 基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる

  3. 概要
  4. MIRS0204ソフトウェアはRT-Linux上で動作するプログラム群で構成される。 プログラムはC++を用いて開発され、MIRS,POST,その他センサなどのクラス、RTタスクドライバ及びヘッダで構成される。

  5. OS(RT-Linuxの概要
  6. 主な内容はMIRS0204技術調査RT-LinuxMIRS0204-TECH-0008を参照。

  7. 開発言語(C++)の概要
  8. MIRS0204ではセンサなどクラスに分割してプログラミングしようと考えている。 そこで、開発言語としてC言語をオブジェクト指向(Object Oriented Programming)を 反映できるように拡張したC++を採用した。 C++はC言語のほぼ完全な上位互換の言語である。 また、コンパイラもGCC(GNU Compiler Collection)の一部として利用できるため、 特に新しく導入する必要もない。

  9. 行動モードの詳細
  10. クラスの構成
  11. クラス構成をUML図(Unified Modeling Language)を用いて示す。

  12. 各クラスの詳細
  13. class Mirs MIRS本体クラス
    メンバ変数
    int mode; モード保持
    Tss tssFront; 正面タッチセンサ
    Tss tssFRight; 正面右タッチセンサ
    Tss tssFLeft; 正面左タッチセンサ
    Tss tssRight; 右タッチセンサ
    Tss tssLeft; 左タッチセンサ
    Tss tssRear; 後部タッチセンサ
    Irs irsFront; 正面赤外線センサ
    Irs irsLeft; 左赤外線センサ
    Uss ussFront; 正面超音波センサ
    Uss ussRear; 後部超音波センサ
    Uss ussRight; 右超音波センサ
    Uss ussLeft; 左超音波センサ
    Move move; 動きに関するクラス
    Place place; 位置
    メンバ関数
    class Tss タッチセンサクラス
    構成要素
    赤外線・タッチセンサデバイスドライバ(独自開発)
    I/Oポート:0140H,0142H
    メンバ変数
    bool value; タッチセンサが押されていればture
    メンバ関数
    bool getTss(void); 値を取得
    bool callBackTss(void); タッチセンサに変化が起こると呼ばれる
    class Irs 赤外線センサクラス
    構成要素
    赤外線・タッチセンサデバイスドライバ(独自開発)
    I/Oポート:0140H,0142H
    メンバ変数
    int value; 赤外線の値
    メンバ関数
    int getIrs(void); 値を取得
    int callBackIrs(void); 赤外線センサに変化が起こると呼ばれる
    class Uss 超音波センサクラス
    構成要素
    超音波センサRTタスクモジュール(MIRS標準API)
    メンバ変数
    double distance; 距離
    メンバ関数
    double getUss(void); 距離を取得
    double sendUss(void); 超音波を発信し、距離を取得
    class Dcp デジタルコンパスクラス
    構成要素
    デジタルコンパスデバイスドライバ(独自開発)
    I/Oポート:0150H
    メンバ変数
    int direction; 方向
    メンバ関数
    int getDcp(void); 方向を取得
    class Enc ロータリーエンコーダクラス
    構成要素
    ロータリーエンコーダRTタスクモジュール(MIRS標準API)
    メンバ変数
    double speed; 速度
    int direction; 回転方向(+1:反時計,-1:時計)
    メンバ関数
    double getSpeed(void); 速度を取得
    int getDirection(void); 回転方向を取得
    class Pwm PWM制御クラス
    構成要素
    PWM・ロータリーエンコーダRTタスクモジュール(MIRS標準API)
    メンバ変数
    double speed; 速度
    int direction; 回転方向
    メンバ関数
    void setPwm(double s, int d); 速度と回転方向を指定
    int stop(void); 停止
    class Move 動きに関するクラス
    メンバ変数
    Pwm pwmLeft; 左側PWM
    Pwm pwmRight; 右側PWM
    Enc encLeft; 左側ロータリーエンコーダ
    Enc encRight; 右側ロータリーエンコーダ
    Dcp dcp; デジタルコンパス
    Place currentPlace; 現在の位置
    Place nextPlace; 次の位置
    メンバ関数
    class Place 位置に関するクラス
    メンバ変数
    double m_x; X座標
    double m_y; Y座標
    double m_r; 極座標でのR
    double m_a; 極座標でのθ
    double m_d; MIRSの傾き
    メンバ関数
    void setPlace(double a, double b, coordinates c, double d); 位置を指定
    double getPlaceX(void); X座標を取得
    double getPlaceY(void); Y座標を取得
    double getPlaceR(void); Rを取得
    double getPlaceA(void); θを取得
    double getPlaceD(void); MIRS(or Post)の角度を取得
    class Post ポストクラス
    メンバ変数
    int id; ポスト番号
    bool finish; 取得してあればture
    Place place; ポストの位置
    メンバ関数
    void setId(void); ポストNo.を指定
    void finishPost(void); ポスト取得を指定
    class Field 競技場クラス
    メンバ変数
    int postNum; ポストの数
    Post post[postNum]; ポスト
    メンバ関数

  14. 試験
  15. フトウェアの面から見た必要な試験を列挙する。開発が進む間に不安点や疑問点が出てきた場合はそれらについても適宜試験をう。