目次
1. 本ドキュメントについて2. 仕様
3. 説明
4. ソース
1. 本ドキュメントについて
-
統合プログラムの説明書をつくる。
このドキュメントでは、モーター駆動系関数についてまとめる。4班では、既に用意されている関数 motor.c に改良を加え、新たなモーター駆動関数を作成した。これについて仕様やプログラムの説明を行う。
2. 仕様
-
統合プログラムの設計、構想をする上で、モーターを動かす関数に要求したい機能が出た。これを仕様として、以下に示す。
- 目標値に達していなくても関数の外から緊急停止が正常に行えること
- 小さな目標値に対して微調整を行わず、大まかに終了すること
- MIRSの姿勢角を計算させること
3. 説明
目標値に達していなくても関数の外から緊急停止が正常に行えること
これは、壁に近づいた際に緊急停止が行えるようにするためである。この機能を実現するために、モーターにパラメータを与えているwhileループの条件式を flag==0 とした。flag は、外部変数についての説明を見ればわかるが、モーターの動作許可のようなものである。このflagを外部変数として統合プログラム上で定義することで、この要求を満足させた。この要求を満足させた関数が、motor_flag.c である。
小さな目標値に対して微調整を行わず、大まかに終了すること
これは、通路が狭く、MIRSの移動に小さな微調整を必要とするため要求された。既存のプログラム motor.c では、小さな目標値に対しても補正動作を行うため、時間がかかる。また、細かな移動では誤差も大きくならないため、目標値に対して細かな補正は行わないモーター駆動関数を作成した。motor.c 内の、目標値に近づいたときの補正動作部を除くことで実現した。この要求を満足させた関数が、motor_rough.c で、これを統合プログラムに組み込むために作った関数が motor_gogo.c である。
MIRSの姿勢角を計算させること
競技中のズレの蓄積をなるべく減らすため、MIRSの姿勢角を計算させたい。このために、新たに作ったモーター駆動関数内に angcal() という関数を作った。これは、MIRSの微小角変位を算出するものである。具体的には、左右の微小移動距離の差を、MIRSの直径で割り、ラジアン[rad]から角度[°]に換算したものである。微小移動距離は、ロータリエンコーダの値から算出した移動距離を一定時間ごと測定し毎回差をとるものである。微小角変位を求めたら、一定時間ごと毎回その和をとることで現在の姿勢角が算出できる。この姿勢角は外部変数 ang として定義してある。姿勢角を求める手順は、左右のタイヤを点として、一定距離からの円弧の中心角を求めるようにすれば求められる。この関数自体は motor_flag.c 内に定義してあるが、motor_rough.c 内にもコメントアウトして文自体は書いてあり、どちらの関数でも姿勢角については計算している。
図. 微小角変位の導出
4. ソース
以下にソースを貼っておく。
motor_flag.c
motor_rough.c
motor_gogo.c
関連文書 統合プログラム説明書