/*-----------------------------------------------------------*/ int init_urg_laser(urg_t **urg,int modality) { int ret; /*Switching capturing mode*/ urg_capturing_mode=modality; /*Memory structure allocation*/ *urg=malloc(sizeof(urg_t)); /*Printing and signalling allocation error*/ if (!(*urg)) { fprintf(stderr, "Error in urg memory allocation\n"); return -1; } /*Urg laser connection (structure, file descriptor, baud rate)*/ ret = urg_connect(*urg, DEVICE, 115200); if (ret < 0) { return ret; } /*Switching on the laser scanner*/ urg_laserOn(*urg); pthread_mutex_init(&mutex_laser_read, NULL); /*Getting parameters*/ if(!parameter) parameter=malloc(sizeof(urg_parameter_t)); urg_parameters(*urg, parameter); frontal_index=get_frontal_index(*urg); /*Switch to select the laser range finder acquiring mode*/ switch (urg_capturing_mode) { case CONTINUOUS: /*keep capturing*/ urg_setCaptureTimes(*urg, UrgInfinityTimes); /*request all the data*/ urg_requestData(*urg, URG_MD, URG_FIRST, URG_LAST); break; case HYBRID: /*keep capturing capture_times*/ urg_setCaptureTimes(*urg, capture_times); /*request data*/ urg_requestData(*urg, URG_MD, URG_FIRST, URG_LAST); break; case ON_DEMAND: urg_requestData(*urg, URG_GD, URG_FIRST, URG_LAST); break; default: break; } return ret; }
//! main int main(int argc, char *argv[]) { #ifdef WINDOWS_OS const char device[] = "COM3"; /* For Windows */ #else const char device[] = "/dev/ttyACM0"; /* For Linux */ #endif urg_t urg; urg_parameter_t parameters; int ret; /* Connection */ urg_initialize(&urg); ret = urg_connect(&urg, device, 115200); if (ret < 0) { urg_exit(&urg, "urg_connect()"); } /* Get sensor parameter */ ret = urg_parameters(&urg, ¶meters); printf("urg_getParameters: %s\n", urg_error(&urg)); if (ret < 0) { urg_disconnect(&urg); exit(1); } /* Display */ printf("distance_min: %ld\n", parameters.distance_min_); printf("distance_max: %ld\n", parameters.distance_max_); printf("area_total: %d\n", parameters.area_total_); printf("area_min: %d\n", parameters.area_min_); printf("area_max: %d\n", parameters.area_max_); printf("area_front: %d\n", parameters.area_front_); printf("scan_rpm: %d\n", parameters.scan_rpm_); printf("\n"); /* Display information from URG structure (same resource as above) */ printf("urg_getDistanceMax(): %ld\n", urg_maxDistance(&urg)); printf("urg_getDistanceMin(): %ld\n", urg_minDistance(&urg)); printf("urg_getScanMsec(): %d\n", urg_scanMsec(&urg)); printf("urg_getDataMax(): %d\n", urg_dataMax(&urg)); #ifdef MSC getchar(); #endif return 0; }
/*! main */ int main(int argc, char *argv[]) { enum { CaptureTimes = 10, }; #ifdef WINDOWS_OS const char device[] = "COM3"; /* For Windows */ #else const char device[] = "/dev/ttyACM0"; /* For Linux */ #endif int data_max; long* data; urg_parameter_t parameter; int ret; int n; int i; /* Connection */ urg_t urg; ret = urg_connect(&urg, device, 115200); if (ret < 0) { urg_exit(&urg, "urg_connect()"); } /* Request for Data using GD */ data_max = urg_dataMax(&urg); data = (long*)malloc(sizeof(long) * data_max); if (data == NULL) { perror("data buffer"); exit(1); } urg_parameters(&urg, ¶meter); /* Request for Data using GD */ printf("GD capture\n"); for (i = 0; i < CaptureTimes; ++i) { /* Request for data */ ret = urg_requestData(&urg, URG_GD, URG_FIRST, URG_LAST); if (ret < 0) { urg_exit(&urg, "urg_requestData()"); } /* Reception */ n = urg_receiveData(&urg, data, data_max); if (n < 0) { urg_exit(&urg, "urg_receiveData()"); } /* Display */ printData(&urg, ¶meter, data); } printf("\n"); /* Request for Data using MD */ printf("MD capture\n"); /* set data acquisition frequency equal to infinity, to get the data more than 100 times */ /* urg_setCaptureTimes(&urg, UrgInfinityTimes); */ assert(CaptureTimes < 100); urg_setCaptureTimes(&urg, CaptureTimes); /* Request for data */ ret = urg_requestData(&urg, URG_MD, URG_FIRST, URG_LAST); if (ret < 0) { urg_exit(&urg, "urg_requestData()"); } for (i = 0; i < CaptureTimes; ++i) { /* Reception */ n = urg_receiveData(&urg, data, data_max); if (n < 0) { urg_exit(&urg, "urg_receiveData()"); } /* Display */ printData(&urg, ¶meter, data); } urg_disconnect(&urg); free(data); #ifdef MSC getchar(); #endif return 0; }
//! main int main(int argc, char *argv[]) { enum { CaptureTimes = 10, }; #ifdef WINDOWS_OS const char device[] = "COM3"; /* For Windows */ #else const char device[] = "/dev/ttyACM0"; /* For Linux */ #endif int data_max; long* data; int timestamp = -1; int previous_timestamp; int remain_times; //int scan_msec; urg_parameter_t parameter; int ret; int n; int i; urg_t urg; /* Connection */ urg_initialize(&urg); ret = urg_connect(&urg, device, 115200); if (ret < 0) { urg_exit(&urg, "urg_connect()"); exit(1); } /* Reserve for receive buffer */ data_max = urg_dataMax(&urg); data = (long*)malloc(sizeof(long) * data_max); if (data == NULL) { fprintf(stderr, "data_max: %d\n", data_max); perror("data buffer"); exit(1); } urg_parameters(&urg, ¶meter); //scan_msec = urg_scanMsec(&urg); /* Request for MD data */ /* To get data continuously for more than 100 times, set capture times equal to infinity times(UrgInfinityTimes) */ /* urg_setCaptureTimes(&urg, UrgInfinityTimes); */ assert(CaptureTimes < 100); urg_setCaptureTimes(&urg, CaptureTimes); /* Request for data */ ret = urg_requestData(&urg, URG_MD, URG_FIRST, URG_LAST); if (ret < 0) { urg_exit(&urg, "urg_requestData()"); } for (i = 0; i < CaptureTimes; ++i) { /* Reception */ n = urg_receiveData(&urg, data, data_max); printf("n = %d\n", n); if (n < 0) { urg_exit(&urg, "urg_receiveData()"); } else if (n == 0) { printf("n == 0\n"); --i; continue; } /* Display the front data with timestamp */ /* Delay in reception of data at PC causes URG to discard the data which cannot be transmitted. This may results in remain_times to become discontinuous */ previous_timestamp = timestamp; timestamp = urg_recentTimestamp(&urg); remain_times = urg_remainCaptureTimes(&urg); /* Neglect the distance data if it is less than urg_minDistance() */ printf("%d/%d: %ld [mm], %d [msec], (%d)\n", remain_times, CaptureTimes, data[parameter.area_front_], timestamp, timestamp - previous_timestamp); printf("%d, %d\n", i, remain_times); if (remain_times <= 0) { break; } } urg_disconnect(&urg); free(data); #ifdef MSC getchar(); #endif return 0; }