05_1 タイトル


 1)方向の管理          
 方向は絶対方向と相対方向の二つで管理している。
  1−1)絶対方向 
   絶対方向とは、迷路の上方を北と設定し、現在マウスが東西南北のどちらの方向を向いているかを管理、記憶する。
 絶対方向は、8ビットの変数 dir に以下のように記憶する。
            北 0x00
       西  0x03     東 0x01
            南 0x02  
  1−2)相対方向 
   相対方向とは、マウスの前方を直進と設定し、マウスが前後左右のどちらの方向に進む(旋回する)かを管理、記憶する。
 相対方向は、8ビットの変数 rot_dir に以下のように記憶する。
            直進 0x00
       左旋回 0x03     右旋回 0x01
            後進(反転) 0x02  

 2)迷路地図の管理          
 迷路地図は、絶対方向の壁の有無と、座標の未通過、既通過を記憶した、8ビットの配列変数をもちいて管理している。
  2−1)dataの耕造 
 8ビットの変数のビットごとに、絶対方向の壁の有無と、座標の未通過、既通過を以下のように記憶する。
                西 南 東 北
      7 6 5 4 − 3 2 1 0
                1 0 0 1    西側と北側に壁が有る
      1                    現在の座標は通過済み
      0                    現在の座標は未通過  
  2−2)迷路地図の構造 
   迷路地図は、迷路の構造から、256個の8ビットデータを格納する1次元の配列変数をもちいて管理、記憶する。
 地図はスタート地点を 0x00とし、南北方向は配列変数の添え字の上位4ビット、東西方向は下位4ビットを使い、配列変数 wall_map[] に以下のように記憶する。
     北
       0xf0 0xf1  0xf2 0xf3 ・ ・   0xfe 0xff
       0xe0
        ・
        ・
        ・
       0x20
       0x10
       0x00 0x01  0x02 0x03 ・ ・   0x0e 0x0f
     西                  東  

 3)相対方向(旋回方向)から絶対方向を求める          
 マウスの旋回方向(相対方向)と現在の絶対方向から、旋回が終わった後の絶対方向を求める方法は、計算で求める方法とデータテーブルを使う方法と二つ考えられる。
 現在の絶対方向は南(0x02)、旋回方向(相対方向)は左(0x03)と仮定し、二つの方法で旋回後の絶対方向を求める。
  3−1)計算で求める 
      0x02+ 0x03= 0x05       :南を向いているマウスが、左に旋回する
            0x05 AND 0x03= 0x01  :マウスは東(0x01)を向く
  実際は
           dir= ( (dir+ rot_dir) & 0x03 ) ;  と コーディングする 
  3−2)データテーブルを使って求める 
   以下のように、2次元の配列変数 direction_rot[絶対方向 dir][相対方向 dir_rot]を用意する。
  char direction_rot[4][4]= {
	 {0x00,0x01,0x02,0x03},
	 {0x01,0x02,0x03,0x00},
	 {0x02,0x03,0x00,0x01},  /* 南向 & 左旋回	direction_rot[0x02][0x03] */
	 {0x03,0x00,0x01,0x02}} ; /* direction_rot[0x02][0x03] is 0x01 マウスは東を向く */
  実際は
           dir= direction_rot[0x02][0x03] ;   または
           dir= direction_rot[dir][dir_rot] ;  と コーディングする 

 4)走行コースの地図          
 マウスの走行コースは、route_map という、1次元の配列変数に記憶させる。
 route_map[] には  [直進区画数][旋回方向][直進区画数][旋回方向][直進区画数] ・・・・・
      ・・・・・[直進区画数][旋回方向][直進区画数][0xff(走行終了のflag)] という配列で
                                        データを格納する。
 直進区画数と旋回方向のデータ構造は、以下のとうり。
  4−1)直進区画数のデータ構造
       bit7  bit6  bit5  bit4   bit3  bit2  bit1  bit0
			 1   斜め走行				    	bit3 --> bit0  直進区画数
  bit7は、直進走行のデータというflag
  bit6がsetされていれば、斜め走行区間
   	bit3 --> bit0  は、(直進区画数− 1)が格納される
                 従って、データが 0xc2 ならば 斜め・3区画直進となる

  4−2)旋回方向のデータ構造
       bit7	  bit6	   bit5	   bit4   bit3  bit2  bit1  bit0
								1	旋回方向	    bit3 --> bit0  旋回角
  bit5は、旋回方向のデータというflag
  bit4がsetされていれば、左旋回  ゼロならば右旋回
  bit3 --> bit0  は、旋回数  旋回角は、45度旋回×旋回数が旋回角と表現する
                 従って、bit3 --> bit0 には、旋回数のデータが入る
	                   データが 0x32 ならば 左・90度旋回となる
  

 5)定数の設定          
 定数の設定は、変数の型と条件判断のためのフラグ、アナログセンサのチャンネルを設定した standardDef.h と、走行距離や制御定と壁データの初期値などを設定した constant.h の、二つに分割してある。
 調整が必要な制御定数は、一つのファイルにまとめた方が使い易いというだけのこと。
  5−1)standardDef.h 
  standardDef.h には、変数の型と条件判断のためのフラグ、アナログセンサのチャンネルが設定してある。
/*			標準的な定数data & インターフェイス・制御系のマクロを記入した header file				*/
/*														file name 	standardDef.h					*/
/*																lase edit '99/09/10		k.notoya	*/
/*==================================================================================================*/
/*		変数の型とサイズ																			*/
/*==================================================================================================*/

#define	SCHAR	signed char			/* signed    8 bit	data	*/
#define	UCHAR	unsigned char		/* unsigned  8 bit	data	*/
#define	SSHORT	signed short int	/* signed   16 bit	data	*/
#define	USHORT	unsigned short int	/* unsigned 16 bit	data	*/
#define	SINT	signed int			/* signed   32 bit	data	*/
#define	UINT	unsigned int		/* unsigned 32 bit	data	*/
#define	SLONG	signed long int		/* signed   64 bit	data	*/
#define	ULONG	unsigned long int	/* unsigned 64 bit	data	*/

/*==================================================================================================*/
/*		全モジュール共通 フラグ & 方向 & ポートadress											*/
/*==================================================================================================*/

	/* 稼動 or 停止	*/
#define	WAKE	0xf0	/* 稼動				*/
#define	SLEEP	0x00	/*     停止	*/

	/* 励磁mode		2相励磁	or 1-2相励磁	*/
#define	OneTwo	0xff	/* 1-2相励磁	*/
#define	TwoTwo	0x00	/*   2相励磁	*/

	/* 進行方向		前進 or 後進 or 斜め走行		running_direction に記憶	*/
#define FORWARD		0x00	/* mouseは前進している	*/
#define BACKWARD	0xff	/*         後退している	*/
	/* #define ASLANT		0x0f	*/	/*         斜め走行中	*/

	/* 到着した or まだ着いていない	*/
#define	Arrive		0x00	/* 到着した			*/
#define	NotArrive	0xff	/* まだ着いていない	*/


	/* 探査mode(mouseの走行mode)					mode に記憶	*/
#define GoalMode	0x00	/* 現在の座標 --> goal			*/
#define StartMode	0x0f	/* 現在の座標 --> start地点		*/
#define StartGoal	0xf0	/* start地点 --> goal			*/
#define AxisAxisx	0xff	/* 現在の座標 --> 未探査の座標	*/

	/* 探査が終わった or 継続中						search_flag に記憶	*/
/*#define CONTINUE	0x00	*/	/* 探査は継続中		*/
/*#define GoalMode	0x00	*/	/* 現在の座標 --> goal mode で 探査中	*/
/*#define StartMode	0x0f	*/	/* 現在の座標 --> goal を1回探査した	*/
#define EndSearch	0xff		/* 探査が終わった	*/


	/* 成功 or 失敗	*/
#define	SUCCESS	0xf0	/* 成功				*/
#define	FAILURE	0x00	/*     失敗	*/

	/* 可能 or 不可能	*/
#define	Possible	0x00	/* 可能						*/
#define	Impossible	0xff	/*     不可能			*/
#define	LastTurn	0x0f	/* 次の旋回が最後の旋回		*/
#define	LastAdvance	0xf0	/* 前進を続ける				*/

	/* 存在する or 存在しない	*/
#define	NotExist	0x00	/* 存在しない	*/
#define	Exist		0xff	/* 存在する		*/
#define	LOST		0x0f	/* lostした		*/

	/* 未探査の座標が見つかった or 無かった		*/
#define	FOUND		0x00	/* 未探査の座標が見つかった	*/
#define	NotFound	0xff	/* 未探査の座標は 無かった	*/


	/* 絶対方向		dir	に記憶	*/
#define	NORTH		0x00
#define	EAST		0x01
#define SOUTH		0x02
#define	WEST		0x03

	/* 旋回方向										turn_direction に記憶	*/
#define	STRAIGHT	0x00	/* mouseは直進する		*/
#define SPIN_RIGHT	0x01	/* 信地旋回で右回転する	*/
#define REVERS_SPIN	0x02
#define SPIN_LEFT	0x08
#define PIVO_RIGHT	0xf1	/* pivot_turnで右に旋回する	*/
#define PIVO_LEFT	0xf2
#define SLA_RIGHT	0xf4	/* slalomで右に旋回する	*/
#define SLA_LEFT	0xf8
	/* 旋回時に、仮想車輪を加速する or Not を 判断する		(turn_direction & SLALOM)	*/
/*#define SLALOM	0xf0  *//* 旋回は slalom  or Not   (turn_direction & SLALOM)	*/

	/* 姿勢制御の方向	*/
#define RIGHT	0x01	/* 前回は、右に姿勢を制御した	*/
#define LEFT	0x08

	/* 走行状態		走行終了時 or 走行状態		running_condition に記憶	*/
		/* 【注意】旋回時に、仮想車輪を加速する or Not を 判断基準を		*/
		/*  	( (turn_direction & SLALOM) != 0xf0 ) の値で決定している	*/
		/* 従って #define SLALOM	0xf0 は、変更禁止  						*/
#define CONTINUE	0x00	/* mouseは走行していた			*/ 
#define SLALOM		0xf0	/*         slalom をした		*/
#define ASLANT		0x0f	/*         斜め走行をしている	*/
#define HALT		0xff	/*         停止していた			*/


	/* 走行状態 	探査走行 or 高速走行 && 斜め走行 or 定常走行		running_mode に記憶	*/
#define SEARCH		0x00	/* mouseは探査走行中	*/
#define ATTACK_SPN1	0x01	/* 		time attack		信地旋回	*/
#define ATTACK_SLA1	0x02	/* 		time attack		slalom 定常走行		speed_0	*/
#define ATTACK_SLA2	0x03	/* 		time attack		slalom 定常走行		speed_1	*/
#define ATTACK_ASL1	0x10	/* 		time attack		slalom 斜め走行		speed_0	*/
#define ATTACK_ASL2	0x11	/* 		time attack		slalom 斜め走行		speed_2	*/

	/* 走行状態		加速中 or 定常走行中 or 減速中	accele_condition に記憶	*/
#define ACCELE		0x00	/* mouseは	加速中		*/
#define GENERAL		0x03	/*		    定常走行中	*/
#define REDUCE		0x0C	/* 2倍のレートで減速中	*/
#define SINGLE		0x0f	/* 1倍のレートで減速中  信地旋回 & slalomの入り口	*/
#define DOUBLE		0x0C	/* 2倍のレートで減速中	*/

	/* 走行状態		最高速度まで加速した or Not	speed_level に記憶	*/
#define STOPPING	0xff	/* mouseは	停止中				*/
#define MINIMUN		0x03	/*		    最低速度で走行中	*/
#define MIDDLE		0x0c	/*		    2速で走行中		*/
#define FARST		0x0f	/*		    3速で走行中		*/
#define MAXIMUM		0x30	/*			最高速度で走行中	*/


/* センサのチャンネル	*/
	/* 壁情報を地図に書き込むため、センサの選択は絶対方向で指示する		*/
	/* 発光時間は、constant.h で 設定									*/
	/* 【注意】 距離センサは発光制御をしなけれなならないので、AN_0(A/D.C channel_0)を右・前壁に設定し	*/
	/*		  反時計廻りに発光素子と受光素子をポートに接続すること									*/
								/*	      left_side    rihgt_side			*/
#define	RIGHT_FRONT		0x00	/*	             / ̄ ̄\           		*/
#define	RIGHT_SIDE		0x01    /* 	 left_front	|	↑  | right_front		*/
#define	LEFT_SIDE	  	0x02    /*  			|	    |					*/
#define LEFT_FRONT		0x03	/*     			|	    |           		*/
								/*         	 	 \    /      				*/
								/*				    ̄ ̄						*/
#define	FRONT_STEER		0x04	/* front steering	AN_4	*/
#define	GYRO			0x05	/* gyro dada read	AN_5	*/

	/* D/A.C & 予備	*/
/*	#define	RESERVE1	0x06	*/	/* 予備	1*/
/*	#define	RESERVE2	0x07	*/	/* 予備	2*/ 

  5−2)constant.h 
  constant.h には、走行距離や制御定と壁データの初期値などの、調整が必要な制御定数が設定してある。

	/* mouseの走行速度		speed_select に代入する加速テーブルadressの offset(初速)	*/
#define speed_0		0		/* 探査時の速度		offset zero	*/
#define speed_1		(15+ 10+ 5)		/* 探査時の速度		offset 15		*/
#define speed_2		(30+ 20+ 15)	/* 探査時の速度		offset 30		*/
#define speed_3		(45+ 30+ 20)	/* 探査時の速度		offset 45		*/
#define speed_4		(55+ 40+ 25)	/* 探査時の速度		offset 55		*/


	/* 直進走行の区画数		*/
			/* 最大速度 6区画以上直進 	3区画加速 --> 1+ x 区画定常走行 --> 2区画減速
				  最大速度走行 基本概念
					 加速パルス数は、減速できるパルス数によって決定され、減速は加速の2倍の減速レートで減速する。
			 		従って、減速走行の距離を、加速する距離の1/2以上を確保すれば減速する距離が不足することは無い。	*/

#define general_enter_secsion		5	/* 定常走行  最大速度に入るまでの走行区画数	*/
#define general_accele_secsion		3	/* 定常走行  最大速度までの加速区画数			*/
#define general_reduce_secsion		2	/* 定常走行  最大速度からの減速区画数			*/

#define aslant_enter_secsion		5	/* 斜め走行  最大速度に入るまでの走行区画数	*/
#define aslant_accele_secsion		3	/* 斜め走行  最大速度までの加速区画数			*/
#define aslant_reduce_secsion		2	/* 斜め走行  最大速度からの減速区画数			*/


	/* 斜め走行対応 slalom data	*/
	/*  45deg 斜め走行対応 slalom	*/
/*#define	SLA_45DEG			295		/* 45deg slaom	仮想車輪 pulse数	*/
#define	SLA_45DEG			280		/* 295- 15		45deg slaom	仮想車輪 pulse数	*/
	/*  90deg 斜め走行対応 slalom	*/
/* #define	SLA_90DEG			345		/* 345		90deg slaom	仮想車輪 pulse数	*/
#define	SLA_90DEG			(296- 3)		/* 345- 49		90deg slaom	仮想車輪 pulse数	*/
	/*  90deg V_turn(半径 80mm) data	*/
/*#define	SLA_90V80DEG		306		/* 90deg V_turn(半径 80mm) 仮想車輪 pulse数	*/
#define	SLA_90V80DEG		249			/* 306- 57		90deg V_turn(半径 80mm) 仮想車輪 pulse数	*/
	/*  90deg V_turn(半径 70mm) data	*/
/*#define	SLA_90V70DEG		268		/* 90deg V_turn(半径 70mm) 仮想車輪 pulse数	*/
#define	SLA_90V70DEG		(201- 7)		/* 256- 67		90deg V_turn(半径 70mm) 仮想車輪 pulse数	*/
	/* 135deg 斜め走行対応 slalom	*/
/*#define	SLA_135DEG			454		/* 135deg slaom	仮想車輪 pulse数	*/
/*#define	SLA_135DEG			389		/* 454- 65	135deg slaom	仮想車輪 pulse数	*/
#define	SLA_135DEG			(374- 15)		/* 454- 65- 15	135deg slaom	仮想車輪 pulse数	*/
	/* 180deg 斜め走行対応 slalom	*/
#define	SLA_180DEG			592		/* 180deg slaom	仮想車輪 pulse数	*/

	/* 旋回に進入するときの減速パルス数	*/
#define	REDUCE45		0 ;		/* 45 deg 旋回に進入するときの減速パルス数	*/
#define	REDUCE9070		50 ;	/* 90 deg_R70 旋回に進入するときの減速パルス数	*/
#define	REDUCE9080		30 ;	/* 90 deg_R80 旋回に進入するときの減速パルス数	*/
#define	REDUCE9090		15 ;	/* 90 deg_R90 旋回に進入するときの減速パルス数	*/
#define	REDUCE135		75 ;	/* 135 deg_R70 旋回に進入するときの減速パルス数	*/
#define	REDUCE180		15 ;

	/* slalom V_turn時に、直進する距離	*/
#define	STRAIGHT10			24		/* 10mm直進する距離(パルス数)		10mm/0.41 is  24.39 パルス	*/
#define	STRAIGHT20			49		/* 20mm直進する距離(パルス数)		20mm/0.41 is  48.78 パルス	*/

	/* slalom時に、横壁を確認する位置(残りの走行距離)	*/
#define	LOOK45	20
#define	LOOK90	30
#define	LOOK135	40

	/* 斜め走行時に、減算する走行距離	*/
#define	SUBD45		156	/* SUBD45  is 63.97mm/0.41mm  156.02 パルス 	*/
	/* #define	SUBD90		65	/* SUBD90  is 26.50mm/0.41mm   64.63 パルス	*/
#define	SUBD90		5	/* SUBD90  is 26.50mm/0.41mm   64.63 パルス	*/
#define	SUBD135		27	/* SUBD135 is 10.97mm/0.41mm   26,75 パルス	*/

	/* 斜め走行時に、姿勢制御を停止する距離	*/
#define	REVISION_SLEEP		100		/* 0.41mm* 100 is 41mm 	*/



	/* 仮設定する壁data	No_1	公式迷路	*/
#ifdef KoushikiMeiro
	#define Right_Front_MAX		515		/* 右・前壁data	*/
	#define Right_Front_MID		285
	#define Right_Front_MIN		196		/* org data is 196	*/

	#define Right_Side_MAX		483		/* 右・横壁data	*/
	#define Right_Side_MID		410
	#define Right_Side_MIN		214

	#define Left_Side_MAX		376		/* 左・横壁data	*/
	#define Left_Side_MID		428
	#define Left_Side_MIN		206

	#define Left_Front_MAX		533		/* 左・前壁data	*/
	#define Left_Front_MID		364
	#define Left_Front_MIN		251		/* org data is 176	*/
#endif


	/* 仮設定する壁data	No_2	自作迷路	2005/02/14	*/
#ifdef JisakuMeiro
	#define Right_Front_MAX		604		/* 右・前壁data	*/
	#define Right_Front_MID		204
	#define Right_Front_MIN		139

	#define Right_Side_MAX		475		/* 右・横壁data	*/
	#define Right_Side_MID		391
	#define Right_Side_MIN		172

	#define Left_Side_MAX		467		/* 左・横壁data	*/
	#define Left_Side_MID		267
	#define Left_Side_MIN		137

	#define Left_Front_MAX		655		/* 左・前壁data	*/
	#define Left_Front_MID		243
	#define Left_Front_MIN		162
#endif

	/* 仮設定する壁data	No_2	自作迷路	2002/12/12	*/
#ifdef JisakuMeiroOLD
	#define Right_Front_MAX		496		/* 右・前壁data	*/
	#define Right_Front_MID		189
	#define Right_Front_MIN		134		/* org data is 111	*/

	#define Right_Side_MAX		475		/* 右・横壁data	*/
	#define Right_Side_MID		391
	#define Right_Side_MIN		172

	#define Left_Side_MAX		467		/* 左・横壁data	*/
	#define Left_Side_MID		267
	#define Left_Side_MIN		137

	#define Left_Front_MAX		517		/* 左・前壁data	*/
	#define Left_Front_MID		211
	#define Left_Front_MIN		145		/* org data is 120	*/
#endif
  

 6)広域変数          
 かつて、Cのプログラムは広域変数をなるべく使わずに、各ルーチンの関係がなるべく疎になるように組むのがベターだと教えていただいた。で、いろいろ頑張ったが、あたしには無理だった。
 広域変数使いまくり、ルーチンの関係は新婚さんみたいにベッタベッタ。私が使うんだからえぇ〜だろさ。
 以下が設定した広域変数とヘッダーファイル。注意点は、スタートアップルーチン内でアセンブラで組んだ配列変数は、ヘッダーファイルで外部変数の宣言をしてあるところ。

  6−1)広域変数 

#include "d:\standardDef.h"	/* 標準的な定数data & インターフェイス・制御系のマクロ		*/
#include "d:\constant.h"	/* mouseの走行に必要な標準的な定数data	*/

	/* 迷路解析	*/
UCHAR axis,axis_x ;
UCHAR dir,dir_x,rot_dir ;
UCHAR goal_axis,goal_dir ;
UCHAR route_map_adress ;	/* route_map adress	*/
UCHAR mode ;				/* 探査mode			*/
UCHAR search_flag ;		/* 未探索の座標が無区なった、探査終了   then search_flag is 0xff	*/
UCHAR deside_flag ;		/* 迷路解析と走行mode	*/
UCHAR possible_continue ;	/* if 0x00 then 1歩で未探査の座標に行ける	*/
UCHAR running_condition ;	/* マウスは連続走行をしていた or Not	*/
UCHAR running_mode ;	/* 走行modeと走行速度を記憶		*/
						/* 探査走行 or 高速走行 && 斜め走行 or 定常走行	*/
UCHAR first_RevolutionAbsDir ;	/* 最初に旋回する絶対方向	*/
UCHAR final_goal_axis ;	/* goalの4区画の最後のgoalの座標を記憶	*/
UCHAR final_absolute_direction ;	/* 最後の絶対方向を記憶	*/
UCHAR map_renewal ;	/* 壁データを迷路地図に記入する or Not	*/

SSHORT weight ;		/* 旋回の重み   16ビット処理	*/
SSHORT WDT_counter ;	/* WDT(ウオッチドックタイマ)経過時間count  65.536msec* WDT_counter	*/

UCHAR axis_mem ;	/* 未探査の座標の記憶					*/
UCHAR axis_cnt ;	/* 仮想マウスが溯り始める座標を記憶		*/
SSHORT step_mem ;	/* 歩数 一時記憶   16ビット	*/
	/* mapに記入するため、壁の有無を記憶するフラグ	*/
UCHAR volatile front_wall, side_wall ;	/* 壁data設定のため、壁の有無を記憶		*/


	/* 以下は探査走行中の制御に必要な広域変数		*/
		/* volatile SCHAR emergency ;	/* 緊急停止flag dip_switchの入力待ちに戻る	*/
UCHAR volatile wall_condition ;	/* 壁合わせのための基本data	*/
UCHAR revision_flag ;	/* 姿勢制御を する or Not	*/
UCHAR turn_direction ;	/* 旋回方向 記憶	*/
	/* 未使用 UCHAR running_direction ;	*/	/* 進行方向	 前進 or 後進 or 斜め走行	*/
SSHORT mark_distance ;	/* 目標走行距離			*/
SSHORT error_pulse ;	/* 走行距離の誤差 or start位置の調整	*/
volatile SSHORT position_now,distance_compare ;	/* 設定距離を走行する	*/
	/* time attack 中の制御に必要な広域変数		*/
SCHAR speed_level ;		/* 最高速度まで加速した or Not	*/
UCHAR step_high ;				/* 高速走行 直進区画数 記憶	*/
UCHAR dir_high, dir_high_old ;	/* 高速走行 旋回方向 記憶		*/


	/* 加速・減速 & 姿勢制御		共通	*/
UCHAR dir_high, dir_high_old ;	/* 高速走行 旋回方向 記憶		*/
UCHAR current_flows ;	/* motor の電流値(A/D.Cに書きこむ値)を記憶	*/
SSHORT subtract_pulse ;	/* 走行速度に合わせて 早めに slalomeに進入するパルス数	*/
UCHAR accele_condition ;	/* 加速中 or 定常走行中 or 減速中	*/
SSHORT accele_pulse,reduce_pulse ;  /* 加速 & 減速 pulse数	*/
SSHORT difference_accele_pulse ;	/* 加速パルス数の不足分を記憶	*/
SSHORT distance_reduce,reduce_pulse_mem ;	/* 減速パルス数	*/
UCHAR revision_direction,old_revision_direction ;	/* 姿勢制御の方向	*/
volatile SSHORT revisLM,revisRM ;	/* revision price	制御値		*/
volatile SSHORT propoFL,propoFR ;	/* proportion price		比例値		*/
		/* volatile SSHORT diffeFL,diffeFR ;	*/	/* differential price	微分値		*/
volatile SSHORT integFL,integFR ;	/* integral price		積分値		*/
		/* SSHORT deflecation_integral ;	*/	/* 偏差の積分値		*/


	/* stepping motor の 加速・減速		*/
UCHAR current ;	/* motor の電流値(A/D.Cに書きこむ値)	*/
SSHORT accele_adress ;	/* 仮想車輪の現在の 速度data adress を記憶	*/
SSHORT speed_select ;	/* 走行速度を変更するための、速度data table の offset	*/
SSHORT reduce_limit, reduce_limit_mem ;	/* 最低速度(slalom進入速度) 記憶	*/
SSHORT left_motor_adress,right_motor_adress ;	/* 励磁data adress 記憶		*/
SCHAR Left_Reiji, Right_Reiji ;					/* 励磁data 記憶	*/

	/* アナログ・センサ	*/
volatile SCHAR sens_number ;	/* データを読み込むA/D.Cの番号を記憶	*/
volatile SSHORT analog[4] ;		/* アナログ・センサの値を記憶		*/
volatile SSHORT analog_old[4] ;		/* アナログ・センサの値を記憶		*/
	/* センサのdataと比較する値を記憶	*/
SSHORT left_side_max, left_side_mid, left_side_min ;
SSHORT left_front_max, left_front_mid, left_front_min ;
SSHORT right_front_max, right_front_mid, right_front_min ;
SSHORT right_side_max, right_side_mid, right_side_min ;

/*==================================================================================================*/
/*		迷路地図	*/
/*==================================================================================================*/

UCHAR cris_map[5] ;		/* 5区画後方を走る仮想マウスの座標map		*/
UCHAR wall_map[256] ;	/* 壁data_map		wall_map (y+x)		*/
USHORT step_map[256] ;	/* 歩数 map 16 bit data			*/
UCHAR route_map[256] ;	/* route_mapは、1次元のmap		*/
UCHAR axis_map[256] ;
UCHAR axis_new_map[256] ;
UCHAR direc_map[256] ; 
  


  6−1)広域変数のヘッダーファイル 


#include "d:\standardDef.h"	/* 標準的な定数data & インターフェイス・制御系のマクロ		*/
#include "d:\constant.h"	/* mouseの走行に必要な標準的な定数data	*/

	/* 迷路解析	*/
extern UCHAR axis,axis_x ;
extern UCHAR dir,dir_x,rot_dir ;
extern UCHAR goal_axis,goal_dir ;
extern UCHAR route_map_adress ;		/* route_map adress	*/
extern UCHAR mode ;					/* 探査mode			*/
extern UCHAR search_flag ;	/* 未探索の座標が無区なった、探査終了   then search_flag is 0xff	*/
extern UCHAR deside_flag ;	/* 迷路解析と走行mode	*/
extern UCHAR possible_continue ;	/* if 0x00 then 1歩で未探査の座標に行ける	*/
extern UCHAR running_condition ;	/* マウスは連続走行をしていた or Not	*/
extern UCHAR running_mode ;	/* 走行modeと走行速度を記憶		*/
						/* 探査走行 or 高速走行 && 斜め走行 or 定常走行	*/
extern UCHAR first_RevolutionAbsDir ;	/* 最初に旋回する絶対方向	*/
extern UCHAR final_goal_axis ;	/* goalの4区画の最後のgoalの座標を記憶	*/
extern UCHAR final_absolute_direction ;	/* 最後の絶対方向を記憶	*/

extern UCHAR map_renewal ;	/* 壁データを迷路地図に記入する or Not	*/
extern SSHORT weight ;	/* 旋回の重み   16ビット処理	*/
extern SSHORT WDT_counter ;	/* WDT(ウオッチドックタイマ)経過時間count  65.536msec* WDT_counter	*/

extern UCHAR axis_mem ;	/* 未探査の座標の記憶					*/
extern UCHAR axis_cnt ;	/* 仮想マウスが溯り始める座標を記憶		*/
extern SSHORT step_mem ;	/* 歩数 一時記憶   16ビット	*/
	/* mapに記入するため、壁の有無を記憶するフラグ	*/
extern volatile UCHAR front_wall, side_wall ;	/* 壁data設定のため、壁の有無を記憶		*/


	/* 走行中の制御	*/
		/* extern volatile SCHAR emergency ;	/* 緊急停止flag dip_switchの入力待ちに戻る	*/
extern volatile UCHAR wall_condition ;	/* 壁合わせのための基本data	*/
extern UCHAR revision_flag ;	/* 姿勢制御を する or Not	*/
extern UCHAR turn_direction ;	/* 旋回方向 記憶	*/
	/* 未使用 extern UCHAR running_direction ;	*/	/* 進行方向	 前進 or 後進 or 斜め走行	*/
extern SSHORT mark_distance ;	/* 目標走行距離			*/
extern SSHORT error_pulse ;		/* 走行距離の誤差 or start位置の調整	*/
extern volatile SSHORT position_now,distance_compare ;	/* 設定距離を走行する	*/
	/* time attack 中の制御に必要な広域変数		*/
extern SCHAR speed_level ;		/* 最高速度まで加速した or Not	*/
extern UCHAR step_high ;				/* 高速走行 直進区画数 記憶	*/
extern UCHAR dir_high, dir_high_old ;	/* 高速走行 旋回方向 記憶		*/


	/* 加速・減速 & 姿勢制御		共通	*/
extern SSHORT subtract_pulse ;	/* 走行速度に合わせて 早めに slalomeに進入するパルス数	*/
extern UCHAR current_flows ;	/* motor の電流値(A/D.Cに書きこむ値)を記憶	*/
extern UCHAR accele_condition ;	/* 加速中 or 定常走行中 or 減速中	*/
extern SSHORT accele_pulse,reduce_pulse ;  		/* 加速 & 減速 pulse数	*/
extern SSHORT difference_accele_pulse ;	/* 加速パルス数の不足分を記憶	*/
extern SSHORT distance_reduce,reduce_pulse_mem ;	/* 減速パルス数	*/
extern UCHAR revision_direction,old_revision_direction ;	/* 姿勢制御の方向	*/
extern volatile SSHORT revisLM,revisRM ;	/* revision price	制御値		*/
extern volatile SSHORT propoFL,propoFR ;	/* proportion price		比例値		*/
		/* extern volatile SSHORT diffeFL,diffeFR ;	*/	/* differential price	微分値		*/
extern volatile SSHORT integFL,integFR ;	/* integral price		積分値		*/
		/* extern SSHORT deflecation_integral ;	*/	/* 偏差の積分値		*/


	/* stepping motor の 加速・減速		*/
extern UCHAR current ;	/* motor の電流値(A/D.Cに書きこむ値)	*/
extern SSHORT accele_adress ;	/* 仮想車輪の現在の 速度data adress を記憶	*/
extern SSHORT speed_select ;	/* 走行速度を変更するための、速度data table の offset	*/
extern SSHORT reduce_limit, reduce_limit_mem ;	/* 最低速度(slalom進入速度) 記憶	*/
extern SSHORT left_motor_adress,right_motor_adress ;	/* 励磁data adress 記憶		*/
extern SCHAR Left_Reiji, Right_Reiji ;					/* 励磁data 記憶	*/

	/* アナログ・センサ	*/
extern volatile SCHAR sens_number ;	/* データを読み込むA/D.Cの番号を記憶	*/
extern volatile SSHORT analog[4] ;		/* アナログ・センサの値を記憶		*/
extern volatile SSHORT analog_old[4] ;		/* アナログ・センサの値を記憶		*/
	/* センサのdataと比較する値を記憶	*/
extern SSHORT left_side_max, left_side_mid, left_side_min ;
extern SSHORT left_front_max, left_front_mid, left_front_min ;
extern SSHORT right_front_max, right_front_mid, right_front_min ;
extern SSHORT right_side_max, right_side_mid, right_side_min ;

/*==================================================================================================*/
/*		迷路地図																			*/
/*==================================================================================================*/

extern UCHAR cris_map[5] ;		/* 5区画後方を走る仮想マウスの座標map		*/
extern UCHAR wall_map[256] ;	/* 壁data_map		wall_map (y+x)		*/
extern USHORT step_map[256] ;	/* 歩数 map 16 bit data			*/
extern UCHAR route_map[256] ;	/* route_mapは、1次元のmap		*/
extern UCHAR axis_map[256] ;
extern UCHAR axis_new_map[256] ;
extern UCHAR direc_map[256] ;

/*==================================================================================================*/
/*		壁データのローテーションとLEDのdata				*/
/*==================================================================================================*/

	/* 方向データのローテーション	相対方向を絶対方向に直す	*/
	/* direction_rot[絶対方向 dir][相対方向 dir_new] ;	*/
extern const UCHAR direction_rot[4][4] ;	/* 相対方向を絶対方向に直す	*/

	/* wall_set_rot[絶対方向]		絶対方向に対応する壁dataを読み込む	*/
extern const UCHAR wall_set_rot[4] ;	/* 絶対方向に対応する壁dataを読み込む	*/
extern const UCHAR wall_res_rot[4] ;


 	/* LEDの点燈データ	*/
extern const UCHAR	led_data1[15] ;
extern const UCHAR	led_data2[5][5] ;

extern const UCHAR	led_Left[35] ;
extern const UCHAR	led_Center[10] ;
extern const UCHAR	led_Right[35] ;


	/* 励磁data(2相励磁)	*/
extern const UCHAR reiji_R[8] ;
extern const UCHAR reiji_L[8] ;
	/* 励磁data(1−2相励磁)	*/
extern const UCHAR reiji_R12[8] ;
extern const UCHAR reiji_L12[8] ;

	/* 加速data(時定数)		*/
extern const USHORT accele121[2150] ;
extern const USHORT r901out[350] ;
  





Mouse2005の部屋へ
MicroMouseの部屋へ
ホーム