int init(urg_t *urg){ int error; int i; char *device = "/dev/ttyACM0"; //SERIAL PORT DETECTION fprintf(stderr, "List of serial ports :\n"); int found_port_size = urg_serial_find_port(); if (found_port_size == 0) { fprintf(stderr, "could not found serial ports.\n"); exit(EXIT_FAILURE); } for (i = 0; i < found_port_size; ++i) { fprintf(stderr, "%s", (char *)urg_serial_port_name(i)); device = (char *)urg_serial_port_name(i); } fprintf(stderr, "\n"); fprintf(stderr, "Connection à %s\n", device); error = urg_open(urg, URG_SERIAL, device, BAUDRATE); if(error < 0){ error_func(urg, "connection failed"); } else{ fprintf(stderr, "Connection établie à %s\n", device); urg_set_scanning_parameter(urg, urg_rad2step(urg, ANGLE_MIN), urg_rad2step(urg, ANGLE_MAX), 0);//scan en continu, on ne garde que les point entre -PI/2 et PI/2 fprintf(stderr, "Parameters set\n"); error = urg_start_measurement(urg, URG_DISTANCE, URG_SCAN_INFINITY, 0); if(error < 0){ error_func(urg, "failed to start measurement"); } } get_val(calc, 0, urg);//calcule les tables de cos/sin à l'avance return error; }
int main(void) { const char connect_device[] = "/dev/ttyACM0"; const long connect_baudrate = 115200; urg_t urg; int first_step; int last_step; int skip_step; int scan_times; int skip_scan; int ret; // 計測パラメータの設定 // センサに対して接続を行う。 // 接続を行うと、計測パラメータの設定は初期化される ret = urg_open(&urg, URG_SERIAL, connect_device, connect_baudrate); // \todo check error code // 計測範囲を指定する // センサ正面方向の 90 [deg] 範囲のデータ取得を行い、ステップ間引きを行わない例 first_step = urg_rad2step(&urg, -45); last_step = urg_rad2step(&urg, +45); skip_step = 0; ret = urg_set_scanning_parameter(&urg, first_step, last_step, skip_step); // \todo check error code // 計測回数と計測の間引きを指定して、計測を開始する // 123 回の計測を指示し、スキャンの間引きを行わない例 scan_times = 123; skip_scan = 0; ret = urg_start_measurement(&urg, URG_DISTANCE, scan_times, skip_scan); // \todo check error code return 0; }
int urg_deg2step(const urg_t *urg, double degree) { return urg_rad2step(urg, degree * M_PI / 180.0); }