///////////////////////////////////////////////// ///////////////////////////////////////////////// #pragma once #include #include #include #include #include #define _USE_MATH_DEFINES #include #include #include #include using namespace std; //const double PI=3.14159265359; #define URG_DATA_MAX 2000 #define OBSTACLE_MAX 1024 #define MOVE_OBST_MAX_MAIN 1000 #define PATH_POINTS_MAX 1024 extern unsigned int urg_data_num; extern double urg_range_deg; extern double urg_leng_max; extern double urg_leng_min; extern double noise_odometory_v_gain; extern double noise_odometory_w_gain; extern double noise_urg; extern double obstacle_z; //一様分布乱数 double Uniform( void ); //正規分布乱数 double rand_normal( double mu, double sigma ); struct pantilt{ double pan; double tilt; pantilt(){ pan = 0.0; tilt = 0.0; } }; /* struct PointCloud{ double point_x[320*240]; double point_y[320*240]; double point_z[320*240]; int data_num; PointCloud(){ data_num=320*240; } };*/ struct TWIST{ //Twist定義 double v; //目標速度(m/s) double w; //目標角速度(rad/s) TWIST(){ v = 0.0; w = 0.0; } }; struct ROBOT{ //ロボットの定義 long double x; //X座標(m) long double y; //Y座標(m) long double theta; //角度(rad) double v; //目標速度(m/s) double w; //目標角速度(rad/s) double real_v; //実態速度(m/s) double real_w; //実態角速度(rad/s) double ac_trans_limit; //加速度(m/s2) double ac_rot_limit; //角速度(rad/s2) long double x_dummy; long double y_dummy; long double theta_dummy; ROBOT(){ x = 0.0; y = 0.0; v = 0.0; w = 0.0; theta = 0.0; real_v=0.0; real_w=0.0; ac_trans_limit=5.0; ac_rot_limit=5.0; } }; struct URG{ //測域センサの定義 double leng[URG_DATA_MAX]; double x[URG_DATA_MAX]; double y[URG_DATA_MAX]; int data_num; double start_rad; double reso; double leng_max; double leng_min; URG(){ data_num=(int)URG_DATA_MAX*urg_range_deg/360.0; start_rad=-data_num/2.0/URG_DATA_MAX*2*M_PI; reso=2*M_PI/URG_DATA_MAX; leng_max=urg_leng_max; leng_min=urg_leng_min; for(int i=0;i