libs/range_sensor/c/samples/intensity_sample.c
00001 
00011 #include "urg_ctrl.h"
00012 #include <stdio.h>
00013 #include <string.h>
00014 #include <stdlib.h>
00015 #include <assert.h>
00016 
00017 
00018 static void urg_exit(urg_t *urg, const char *message)
00019 {
00020   printf("%s: %s\n", message, urg_error(urg));
00021   urg_disconnect(urg);
00022 
00023 #ifdef MSC
00024   getchar();
00025 #endif
00026   exit(1);
00027 }
00028 
00029 
00030 static void printData(urg_t *urg, urg_parameter_t *parameter,
00031                       long data[], int data_size, long intensity[])
00032 {
00033 #if 1
00034   int timestamp = urg_recentTimestamp(urg);
00035 
00036   /* Display the front data with timestamp */
00037   /* Neglect the distance data if it is less than urg_minDistance() */
00038   printf("%d: %ld [mm] (%ld) %d [msec]\n", parameter->area_front_,
00039          data[parameter->area_front_],
00040          intensity[parameter->area_front_],
00041          timestamp);
00042 #else
00043   /* Display the all data */
00044   int i;
00045 
00046   for (i = 0; i < data_size; ++i) {
00047     printf("%d: %ld [mm] (%ld)\n", i, data[i], intensity[i]);
00048   }
00049 #endif
00050 }
00051 
00052 
00054 int main(int argc, char *argv[])
00055 {
00056   enum {
00057     CaptureTimes = 1,
00058   };
00059 
00060 #ifdef WINDOWS_OS
00061   const char device[] = "COM3"; /* For Windows */
00062 #else
00063   const char device[] = "/dev/ttyACM0"; /* For Linux */
00064 #endif
00065 
00066   int data_max;
00067   long* data;
00068   long* intensity;
00069   //int scan_msec;
00070   urg_parameter_t parameter;
00071   int ret;
00072   int n;
00073   int i;
00074   urg_t urg;
00075 
00076   /* Connection */
00077   urg_initialize(&urg);
00078   ret = urg_connect(&urg, device, 115200);
00079   if (ret < 0) {
00080     urg_exit(&urg, "urg_connect()");
00081   }
00082 
00083   /* Reserve for receive buffer */
00084   data_max = urg_dataMax(&urg);
00085   data = (long*)malloc(sizeof(long) * data_max);
00086   if (data == NULL) {
00087     perror("data buffer");
00088     exit(1);
00089   }
00090   intensity = (long*)malloc(sizeof(long) * data_max);
00091   if (intensity == NULL) {
00092     perror("data buffer");
00093     exit(1);
00094   }
00095 
00096   urg_parameters(&urg, &parameter);
00097   //scan_msec = urg_scanMsec(&urg);
00098 
00099   if (strcmp("UTM-30LX", urg_model(&urg))) {
00100     /* Top-URG is excluded */
00101 
00102     /* Request for Data using GD */
00103     printf("GD capture\n");
00104     for (i = 0; i < CaptureTimes; ++i) {
00105       /* Request for GD intensity data */
00106       ret = urg_requestData(&urg, URG_GD_INTENSITY, URG_FIRST, URG_LAST);
00107       if (ret < 0) {
00108         urg_exit(&urg, "urg_requestData()");
00109       }
00110 
00111     /* Reception */
00112       n = urg_receiveDataWithIntensity(&urg, data, data_max, intensity);
00113       if (n < 0) {
00114         urg_exit(&urg, "urg_receiveData()");
00115       }
00116       printData(&urg, &parameter, data, n, intensity);
00117     }
00118     printf("\n");
00119   }
00120 
00121   /* Request for Data using MD */
00122   printf("MD(ME) capture\n");
00123 
00124   /* set data acquisition frequency equal to infinity, to get the data more
00125      than 100 times */
00126   /* urg_setCaptureTimes(&urg, UrgInfinityTimes); */
00127   assert(CaptureTimes < 100);
00128   urg_setCaptureTimes(&urg, CaptureTimes);
00129 
00130   /* Request for data */
00131   ret = urg_requestData(&urg, URG_MD_INTENSITY, URG_FIRST, URG_LAST);
00132   if (ret < 0) {
00133     urg_exit(&urg, "urg_requestData()");
00134   }
00135 
00136   for (i = 0; i < CaptureTimes; ++i) {
00137     /* Reception */
00138     n = urg_receiveDataWithIntensity(&urg, data, data_max, intensity);
00139     if (n < 0) {
00140       urg_exit(&urg, "urg_receiveData()");
00141     }
00142     printData(&urg, &parameter, data, n, intensity);
00143   }
00144 
00145   urg_disconnect(&urg);
00146   free(data);
00147   free(intensity);
00148 
00149 #ifdef MSC
00150   getchar();
00151 #endif
00152 
00153   return 0;
00154 }
 All Classes Namespaces Files Functions Variables Enumerations Enumerator