沼津高専 電子制御工学科
ソフトウェア調査報告書
MIRS9901-REPO-0010
改訂記録
版数 作成日 作成者 承認 改訂内容 提出先
A01 2000.1.18 菅谷 佐田 初版
A02 2000.1.31 菅谷 佐田 第1回調査報告について文書を追加


ソフトウェア調査報告


1.はじめに

第一回目の調査報告は、自律小型知能ロボットMIRS用リアルタイムモニタ 「MIRX68K」説明書(http://www2.denshi.numazu-ct.ac.jp/mirs/m3db/kaihatu/tool/kiki/soft/mirx/mirx68k.htm)と昨年までの調査報告書を参考に、ソフトウェア開発環境と開発の流れを調査し,第2回の調査では開発計画書のモード遷移をもとにMIRS9901のタスク構成を検討した。


2.MIRX68Kについて。

リアルタイムモニタは複数のタスクを管理する。
タスクについて:
プログラムは機能別に、センサ管理、フィードバック演算、DCモータ駆動部、行動判断部のように分割したり、動作モード別に分割したりできる。このようにして分割した仕事の固まりをタスクという。タスクで行われる処理にはノーマル処理(プログラム中での事象により行われる)、タイマ処理(一定の時間周期で行われる)、割り込み処理(非同期で発生する外部信号による割り込みによって行われる)がある。
C言語では夫々のタスクは関数として扱われる為、4つの関数を1つのグループとしてこれをタスク・ファイルと呼ぶ。
4つの関数は以下の通りである

・イニシャライズ・タスク:
プログラム開始時に、モニタは全てのタスクのこのイニシャライズタスクを一度だけ起動する。 ここではタスクの初期設定(タイマ処理、割り込み処理の設定など)や登録、初期値の設定、また 初めに実行するタスクの登録などを行う。 ・ノーマルタスク:
タイマ処理でも割り込み処理でもない、一般的な処理を行う関数である。プログラムの中での事象によって起動する処理はここに書く。 ・タイマータスク:
ユーザが指定する時間周期で実行される。 ・割り込みタスク:
指定したポートから、割り込み要求信号があるときに実行される割り込み処理関数である。信号があると実行中の他のタスクを中断して実行される。実行中は他からの信号による割り込みはマスクする(割り込みレベル4以下のみ)ようになっている。

レディ状態のノーマルタスクが複数個存在するとき、どれに実行権を渡すかを決定するために、優先度というものが導入されている。各ノーマルタスクには0から6のいずれかの優先度が与えられ、同時にレディ状態になったノーマルタスクがある場合には、優先度の高い(0が最高)ものから順に実行される。即時性が高く要求されるノーマルタスクの優先度は高く、多少の時間の遅れが許容できるノーマルタスクの優先度は低く設定すればよい。
また夫々のタスクの大きさについて、リアルタイム処理では、1つのタスクがCPUを占有する時間が長いと、他のタスクの実行やタイマタスクの実行の遅延につながるため1つのタスクの大きさ(処理時間)を制限しなければならない。目安として、1タスクあたりの実行時間が、数msec以内とすることが望ましい。実行時間に問題があるような大きなタスクは、更に分割する必要がある。
実際タスク・ファイルを作成する時は、ファイル名をtask00.c、task01.c、task02.c、・・・と番号を連続させ、MIRX68Kのソースファイルmirx68kc.c(Ver.3.2 July 28,1998)が置かれているディレクトリ内に置く必要がある。


3.MIRS9901のタスクの構成

タスクは低レベルタスクと高レベルタスクとメインタスクに大別され、基本的には低レベルタスクはハードウェアの制御を高レベルタスクは低レベルタスクを用いてシステムの動作を実現する。メインタスク(行動計画タスク)はスイッチ状態やセンサ情報をもとに動作を決定しそれに応じたタスクの起動を行う。

MIRS9901ソフトウェアは下記のタスクから構成される。

低レベルタスク
task00:PWM制御タスク
task01:自己位置認識(ロータリーエンコーダ)タスク
task02:超音波センサ制御タスク
task03:赤外線センサ制御タスク
task04:タッチセンサ制御タスク
task05:MMI制御タスク
高レベルタスク
task06:走行制御タスク
task07:総合試験タスク
メインタスク
task08:行動計画タスク


4.タスクの機能

以下に夫々のタスクの機能を記す。

task00:PWM制御タスク
機能;走行制御タスクBBに書き込んであるデューティ比からPWM信号を作成し左右のモータに出力する。

task01:自己位置認識タスク
機能;一定時間毎に実行され、ロータリーエンコーダの値から自己位置のx、y座標と姿勢 角θを検出しBBに書き込む。

task02:超音波センサ制御タスク
機能;一定時間毎に実行され超音波を送信する。また超音波を受信するごとに距離計測データをBBに書き込む。

task03:赤外線センサ制御タスク
機能;一定時間毎に実行し赤外線センサの情報をBBに書き込む。

task04:タッチセンサ制御タスク
機能;タッチセンサが反応する毎に、このタスクを実行してタッチセンサの反応を読み取りBBに書き込む。

task05:MMI制御タスク
機能;主に7seg.LED表示,単色LED点灯の処理を行う。電源投入時またはリセットボタンが押されたとき、一回だけ初期設定し,処理終了後行動計画タスクを起動する。タスクの初期化,ハードウェアの初期設定,掲示板(BB)の初期化を行う。また,DIPスイッチを読み込み,動作モードをBBに書き込む。

task06:走行制御タスク
機能;行動計画タスクから起動される。各モードにしたがって行動する。探索モードではタッチセンサを使用しながらポストを探索し受信データからポストがあると判断さ   れたとき、ポスト獲得モードに移る。ポスト獲得モードではポストの周りを回って   赤外線を探しスイッチを押す。 この時ポストスイッチのX座標、Y座標、角θをB   Bに書き込む。

task07:試験タスク
機能;テストモードにしたがって、超音波、赤外線、タッチセンサ、 サーボ、ロータリーエンコーダ、及び走行テストを行う。

task08:行動計画タスク
機能;試験走行か本戦かを判断し、試験走行の時は総合試験タスクを起動する。本戦の時は、BB情報に基づいて走行制御タスクを起動する。1回目にすべてポストを獲得し終わったら2回目の動き(軌跡)を作成する。