沼津高専 電子制御工学科
MIRSMG3D 関数レファレンス
MIRSMG3D-FREF-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2009.3.9 細川 牛丸 初版
A02 2010.7.12 牛丸 牛丸 駆動系関数のAPIを改訂


目次








1.はじめに


本ドキュメントは、MIRSMG3Dにおける標準プログラムで使用する関数について取りまとめたドキュメントである。
ただし、本ドキュメントでは画像処理に関する関数については細部まで触れず、それらは、
「MIRSMG3D-IMGP-0002 ボール認識関数レファレンス」「MIRSMG3D-IMGP-0102 数字認識関数レファレンス」に示す。




2.ヘッダファイル一覧


Table 1にヘッダファイルの一覧を示す。

Table 1. - ヘッダファイル一覧
ファイル名 利用される関数 説明
contro.h 行動制御系関数 行動制御プログラムで使われるマクロ、構造体、グローバル変数の定義。詳細はヘッダ内のコメントを参照。
func_extern.h 行動制御系関数 行動制御プログラムで関数の extern 宣言集。
motor.h 駆動系関数、行動制御系関数 主に行動制御系関数で使われるマクロの定義。一部、行動制御系関数でも利用される。詳細はヘッダ内のコメントを参照。
uss.h 超音波制御系関数 超音波距離計測で使われるマクロの定義。詳細はヘッダ内のコメントを参照。
num_threshold_value.h 画像処理系関数 数字認識処理で使われる閾値等のマクロの定義。詳細はヘッダ内のコメントを参照。
bmp.h 画像処理系関数 画像処理で使われるモノクロ値等のマクロの定義。詳細はヘッダ内のコメントを参照。
ball_detect_extern.h 画像処理系関数 ボール認識処理で使われる関数のextern宣言集。
num_detect_extern.h 画像処理系関数 数字認識処理で使われる関数のextern宣言集。



3.関数一覧


Table.2 に行動制御系関数の一覧を示す。

Table.2 - 行動制御系
ファイル名 関数名 書式 引数 戻り値 説明
inititialize.c initialize int initialize(void); なし 0 初期化
search.c search int search(int *target_num); 何番目のターゲットか 0 or -1 ターゲット探索
correction.c correction int correction(void); なし 1 or -1 正体補正
serial_func.c set_serial_port int set_serial_port(int fd, struct termios *oldtio); fd:ファイルディスクリプタ
*oldtio:旧設定
0 シリアルポートの設定
close_serial_port void close_serial_port(int fd, struct termios *oldtio); fd:ファイルディスクリプタ
*oldtio:旧設定
なし シリアルポートを閉じる
put_serial_char int put_serial_char(int fd, char c); fd:ファイルディスクリプタ
c:書き込む値
0 1バイト書き込む
put_serial_string int put_serial_string(int fd, char *s); fd:ファイルディスクリプタ
*s:書き込む文字列の先頭
0 複数文字書き込む
get_serial_char int get_serial_char(int fd); fd:ファイルディスクリプタ 読み込んだ値 値を読み込む
uss_get.c uss_get int uss_get(int uss_num); センサ番号 計測値 超音波センサ距離計測

Table 3に駆動系関数の一覧を示す。

Table 3. - 駆動系
ファイル名 関数名 書式 引数 戻り値 説明
motor.c motor int motor(char sel,int *par); sel:制御指定(s:直進、r:回転、c:周回)
s の場合、par[0]:距離(mm)、par[1]:時間(msec)
r の場合、par[0]:回転角(deg)、par[1]:時間(msec)
c の場合、par[0]:回転角(deg)、par[1]:時間(msec)、par[2]:旋回半径(mm)、par[3]:回転方向(0:時計回り、1:反時計回り)
0 走行制御
motor_straight void motor_straight(void *arg); motor()の第2引数を与える 0 直進制御
motor_rotate void motor_rotate(void *arg); motor()の第2引数を与える 0 その場回転制御
motor_circle void motor_circle(void *arg); motor()の第2引数を与える 0 ポスト周回制御
motor_thread.c motor_thread int motor_thread(char sel,int *par); motor() の引数と同様 0 走行制御スレッド生成
motor_func.c motor_request int motor_request(int fd, count void *req, void *res, size_t req_len, size_t res_len); fd:ファイルディスクリプタ
*req:送信パケット
*res:受信パケット
req_len:送信パケット長
res_len:受信パケット長
0 or 負 モータと通信をするための基本ルーチン
motor_send_control_packet int motor_send_control_packet(int fd, uint8_t speed, uint8_t kp, uint8_t ki); fd:ファイルディスクリプタ
speed:速度指定
kp:kpゲイン
ki:kiゲイン
0 or 負 モータに制御パラメータを送る
motor_recv_status_packet int motor_recv_status_packet(int fd, int8_t *speed, uint16_t *pwm, int32_t *round); fd:ファイルディスクリプタ
*speed:回転速度
*pwm:パルス幅
*round:総回転数
0 or 負 モータの状態を得る
motor_send_start_packet int motor_send_start_packet(int fd); fd:ファイルディスクリプタ 0 or 負 モータ回転を開始
motor_send_clear_packet int motor_send_clear_packet(int fd); fd:ファイルディスクリプタ 0 or 負 総回転数のクリア
motor_send_stop_packet int motor_send_stop_packet(int fd); fd:ファイルディスクリプタ 0 or 負 モータの停止
motor_io.c put_motor int put_motor(MotorInfo ml, MotorInfo mr); ml:左タイヤ構造体
mr:右タイヤ構造体
0 モータへの送信
get_motor int get_motor(MotorInfo *ml, MotorInfo *mr); ml:左タイヤ構造体
mr:右タイヤ構造体
0 モータからの受信

Table 4に画像処理系関数の一覧を示す。

Table 4. - 画像処理系
ファイル名 関数名 書式 引数 戻り値 説明
img_update.c img_update void img_update(char *str, int width, int height); str:ファイル名
width:画像の幅
height:画像の高さ
なし 画像取得
ball_detect.c ball_detect int ball_detect(void); なし 0 ボール認識
hough_circle.c hough_circle void hough_circle(IplImage *src, IplImage *dst , double *dis, double *deg); src:入力画像
dst:出力画像
*dis:距離用ポインタ
*deg:角度用ポインタ
なし ハフサークル実行
num_detect.c hough_circle int isPaper(IplImage *src, int min_pix); src:入力画像
min_pixピクセル数
なし 画像サイズ認識
labelTrim void labelTrim(IplImage *src, IplImage *dst, short *labeling_data, int label_num, char *font_color); src:入力画像
dst:出力画像
labeling_data:データのアドレス
label_num:ラベル番号
font_color:認識対象外色
なし ラベル領域抽出
recognize int recognize(IplImage *src, IplImage *dist_x, IplImage *dist_y); src:入力画像
dist_x:結果1dist_y:結果2
0〜9 or -1 数字を識別
num_detect int num_detect(int max_roop_counter); max_roop_counter:ループ回数 0〜9 or -1 or -999 数字認識
col_threshold.c col_threshold void col_threshold(IplImage *src, IplImage *dst, int th1_min, int th1_max, int th2_min, int th2_max, int th3_min, int th3_max, char *code); src:入力画像
dst:出力画像
th1_min:R/H最小値
th1_max:R/H最大値
th2_min:G/S最小値
th2_max:G/S最大値
th3_min:B/V最小値
th3_max
B/V最大値
code:色空間の指定
なし 色による2値化
fill.c scan_line void scan_line(IplImage *src, int lx, int rx, int y, int col, CvPoint **End_ldx, CvPoint *bufstart, CvPoint *bufend); src:入力画像
dst:出力画像
x:始点のx座標
y:始点のy座標
paint_color:塗りつぶし後の色
なし 関数fillで用いる
fill int fill(IplImage *src, IplImage *dst, int x, int y, int paint_color); 同上 0 or -1 塗りつぶしを行う
val_threshold.c val_threshold void val_threshold(IplImage *src, IplImage *dst, int width, char *font_color); src:入力画像
dst:出力画像
width:ヒステリシスの幅
font_color:対象物の色
なし 2値化処理

Table 5にスレッド系関数の一覧を示す。

Table 5. - スレッド系
ファイル名 関数名 書式 引数 戻り値 説明
thread_func.c irs_ts_ws void *irs_ts_ws(void* t); 使用しない なし On/Off I/Oセンサ値取得スレッド
uss_read void *uss_read(void *arg); センサ番号 なし 超音波センサ距離計測スレッド
motor_thread.c motor_thread_straight void *motor_thread_straight(void *arg); motor_thread()の引数と同様 0 直進制御スレッド
motor_thread_rotate void *motor_thread_rotate(void *arg); motor_thread()の引数と同様 0 その場回転制御スレッド
motor_thread_circle void *motor_thread_circle(void *arg); motor_thread()の引数と同様 0 ポスト周回制御スレッド



4.行動制御関数

int initialize(void)
    プログラムで使用する変数の初期化やスレッドの設定、生成を行う。

int search(int *target_num)

int correction(void)

int set_serial_port(int fd, struct termios *oldtio)

void close_serial_port(int fd, struct termios *oldtio)

int put_serial_char(int fd, char c)

int put_serial_string(int fd, char *s)

int get_serial_char(int fd)



5.駆動系関数

int motor(char sel,int *par)

void motor_straight(void *arg)

void motor_rotate(void *arg)

void motor_circle(void *arg)

int motor_thread(char sel,int dis_or_deg,int time)

int motor_request(int fd, count void *req, void *res, size_t req_len, size_t res_len)

int motor_send_control_packet(int fd, uint8_t speed, uint8_t kp, uint8_t ki)

motor_recv_status_packet(int fd, int8_t *speed, uint16_t *pwm, int32_t *round)

int motor_send_start_packet(int fd)

int motor_send_clear_packet(int fd)

int motor_send_stop_packet(int fd)

int put_motor(MotorInfo ml, MotorInfo mr)

int put_motor(MotorInfo ml, MotorInfo mr)




6.画像処理系関数


はじめに示したように、画像処理の詳しい内容については、
「MIRSMG3D-IMGP-0002 ボール認識関数レファレンス」「MIRSMG3D-IMGP-0102 数字認識関数レファレンス」を参照。



7.スレッド関数


void *irs_ts_ws(void* t)
    On/Off I/Oセンサ12個のOn/Offデータを指定された間隔で読み続けるスレッド。読み取ったデータは、グローバル変数I/O[0]〜I/O[7]、TS[0]〜TS[3]に格納される。このスレッドはinitialize()を実行した時点で生成される。

void *uss_read(void *arg)
    指定された間隔で最新の超音波距離測定データを読み続けるスレッド。生成時に引数として使用する超音波センサ番号を与える必要がある。読みとったデータは、グローバル変数uss[0]〜uss[3]に格納される。

void *uss_read(void *arg)
    指定された間隔で最新の超音波距離測定データを読み続けるスレッド。生成時に引数として使用する超音波センサ番号を与える必要がある。読みとったデータは、グローバル変数uss[0]〜uss[3]に格納される。

void *motor_thread_straight(void *arg)
    motor_straight()と同様の処理を行うスレッド。motor_thread()を通して生成される。

void *motor_thread_rotate(void *arg)
    motor_rotate()と同様の処理を行うスレッド。motor_thread()を通して生成される。

void *motor_thread_circle(void *arg)
    motor_circle()と同様の処理を行うスレッド。motor_thread()を通して生成される。






関連文書