名称 | MIRS2103 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS2103-SOFT-0001 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2021.10.25 | 渡邊敬矢、山口卓人 真木祐弥 | 香川真人 | 第3版 |
モジュール名 | 概要 | 関数名 | 引数 | 戻り値 | 備考・変更点 |
---|---|---|---|---|---|
pilot.c | WAIT,JUDGE,INSPEC,WASH,HOMING の5つの状態を遷移させて機体全体をコントロールするモジュール。 |
int main() int judge() int inspec() int wash() int homing() |
なし | 0 | 特になし |
number_detect.cc | ナンバープレートの数字を認識し、サーバー上の数字と照合してデータを入手するモジュール。 | void number_set_device() void number_get int number_detect() void number_collation() |
int device int *ans int dist なし |
なし なし count_num inspec_dist |
number_collation()については詳細は未定だが、 車を一周(検査)する距離を入手する |
sensor.c | 超音波センサや水位センサ等のI2C通信のセンサの関数を集約したモジュール。 | int uss_open_l() int uss_open_r() int water_open() long uss_get_l() long uss_get_r() long water_get() |
なし | 0(成功)orそれ以外(失敗) 0(成功)orそれ以外(失敗) 0(成功)orそれ以外(失敗) 測定値[cm] (不正な値は-1) 測定値[cm] (不正な値は-1) 測定値[cm] (不正な値は-1) |
超音波センサのほかにタンク内の水位を測定するセンサ用関数を加えた。 |
motor.c | 機体やアームなどモータを使う関数を集約したモジュール。 | int motor() | int mode int speed int dist |
0 | 引数の内容についてはrun_ctrl.ino参照 |
モジュール名 | 概要 | 関数名 | 引数 | 戻り値 | 備考・変更点 |
---|---|---|---|---|---|
com_py.c | Python - C言語間のデータの受け渡し,Pythonプログラムの実行を行う。 | recv_py(),send_py() | int *p | int get_data | データの受け渡しバッファとして、txtファイルを用いる。 |
damage_detect.py | カメラから取得した画像から、対象物の異常を検知する | get_img(),send_buffer(),get_buffer(),dmg_detect() | int send_data | numpy.ndarray camera_image,int get_data | 見本画像と対象物との差分により、異常を検知する |
モジュール名 | 概要 | 関数名 | 引数 | 戻り値 | 備考・変更点 |
---|---|---|---|---|---|
resister.ino | アームと連動したボリュームから様々な計算を行うモジュール | double get_deg_arm() double get_height() double get_body_dist |
なし なし なし |
deg_arm height body_dist |
可変抵抗の角度からアーム座標の座標角、アームの先端高さ、機体の位置を計算する |
height_ctrl.ino | アームとそれに連動する機体をPID制御するモジュール | void height_ctrl_execute() void height_ctrl_set() void height_ctrl_get() void height_ctrl_reset() |
なし double height_s,double height_vel_r,double height_vel_l double *height_s なし |
なし |
resister.inoで得るheightとbody_distの値に対応した引数で与えられる目標高さhとアームの角度から算出される機体位置rを用いる。 |
motor.ino | 各モータにpwm値を渡すモジュール | void motor_open() void motor_set() void motor_a_set |
なし int pwm_r,pwm_l :左右のPWM指令関数値(0~±255) int pwm_a :アームのPWM指令値(0~±255) |
なし |
アームモータ用の関数を追加した |
run_ctrl.ino | 走行やアームの大元の制御を行うモジュール | void run_ctrl_execute() void run_ctrl_set() void run_ctrl_get() void arm_ctrl_set() void arm_ctrl_get() void body_ctrl_set() void body_ctrl_get() |
なし run_state_t state :走行モード double speed :直進速度[cm/s]or回転速度[deg/s] double dist :機体直進距離[cm]or機体回転角度[deg] orアーム座標角[deg]orアーム先端高さ[cm] |
なし | 走行制御だけではなくstateに合わせてアーム等も制御できるようにした。 |
linetrace.ino | ライントレース走行を行うモジュール | void linetrace_open void photoreflector void linetrace_execute |
なし なし way_dist :点検コースの距離 |
なし なし pwm_r, pwm_l:左右のPWM指令関数値(0~±255) istop_linetrace:コースを走り切った際の停止信号, ierrstop:エラーが起こった際の停止信号 |
特になし |
deg_a_ctrl.ino | アーム単体の角度をPD制御するモジュール | void arm_ctrl_execute() void deg_ctrl_a_set() void deg_ctrl_a_get() void deg_ctrl_a_reset() |
なし double deg_a :目標座標角 double *deg_a なし |
なし |
resister.inoで得るdeg_armと引数で与えられる目標角を用いる。 |
state_light.ino | raspiで制御する状態をLEDライトで判別するモジュール | void init_Status_indicator() void off_Status_indicator() void set_Status_indicator() |
なし なし int state |
なし | 特になし |
モジュール名 | 概要 | 備考・変更点 |
---|---|---|
cv2.VideoCapture | カメラ画像を取得する | |
cv2.copyMakeBorder | 画像に黒色の枠領域を追加する | |
cv2.matchTemplate | 2枚の画像の一致座標捜索 | |
cv2.ORB_create / drawMatches | 特徴点マッチングを実装するためのモジュール | 特徴点検出ORBアルゴリズムを使用する |
cv2.blur | 精度向上のための画像のぼかし | |
cv2.absdiff | 画像の差分取得 | |
cv2.threshold | 差分画像の2値化 | |
cv2.cvtColor | BGR -> RGBの変換 | |
cv2.findContours | 輪郭取り出し | |
cv2.boundingRect / cv2.rectangle | 正方形領域の抽出 |