From 9030c6d4d006b92ac3d2823d3c3a76795c8d0425 Mon Sep 17 00:00:00 2001 From: jirka Date: Wed, 20 Aug 2008 10:43:58 +0200 Subject: [PATCH] Hokuyo sample source, need to add makefiles ... --- src/hokuyo_sample/HowToUseTheSampleSource.txt | 40 + src/hokuyo_sample/SerialTest | Bin 0 -> 11826 bytes src/hokuyo_sample/SerialTest_eng.c | 237 + src/hokuyo_sample/logfile.dat | 7700 +++++++++++++++++ 4 files changed, 7977 insertions(+) create mode 100644 src/hokuyo_sample/HowToUseTheSampleSource.txt create mode 100755 src/hokuyo_sample/SerialTest create mode 100644 src/hokuyo_sample/SerialTest_eng.c create mode 100644 src/hokuyo_sample/logfile.dat diff --git a/src/hokuyo_sample/HowToUseTheSampleSource.txt b/src/hokuyo_sample/HowToUseTheSampleSource.txt new file mode 100644 index 00000000..f69e58ec --- /dev/null +++ b/src/hokuyo_sample/HowToUseTheSampleSource.txt @@ -0,0 +1,40 @@ +================================================== +How to use this sample source + +1. Compile + + % gcc -o SerialTest SerialTest.c + + Executable file "SerialTest" is created. + +2. Execute + + % ./SerialTest /dev/ttyS0 logfile.dat + + Data will be obtained and saved in to the file "logfile.dat" from the URG Connected to first port (COM1) + If URG is connected to other ports change /dev/ttyS0 as follows + + COM2: /dev/ttyS2 + USB: /devttyACM0 + (All distributions may not have same device file name) + +3. Output file + + Output file "logfile.dat" after running the sample program have the following format. +------------------------------------------- +[Step Number] [distance] (first scan) +[Step Number] [distance] + : (until step 786) +[Empty Row] +[Step Number] [distance] (second scan) +[Step Number] [distance] + : (until step 786) +[Empty Row] + : : + +(same until 10 scan) +--------------------------------------------- +Data is seperated by space and line feed so it can be directly used to plot graph using "gnuplot" by following command + % gnuplot + >splot "logfile.dat" using 2 + diff --git a/src/hokuyo_sample/SerialTest b/src/hokuyo_sample/SerialTest new file mode 100755 index 0000000000000000000000000000000000000000..7100cb83dbe0af010f3f9ab6ce702b1be8ea4a4b GIT binary patch literal 11826 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 literal 0 HcmV?d00001 diff --git a/src/hokuyo_sample/SerialTest_eng.c b/src/hokuyo_sample/SerialTest_eng.c new file mode 100644 index 00000000..eb07eed8 --- /dev/null +++ b/src/hokuyo_sample/SerialTest_eng.c @@ -0,0 +1,237 @@ +/*! + @File + @Brief: This is a demo program to obtain 10 scan data from URG-Series and save them into the file. + @Note : This sample source is a referece for the user when creating his/her program and does not gurantee for users program + @Note : Hokuyo Automatic Co., Ltd does not bear responsibility for any loss or damage caused due to this demo program. + @Note : Mention the publisher's name when distributing this source or its part to the third party + @Publisher HOKUYO AUTOMATIC CO.,LTD. + @author Tomoaki Yoshida + @Date 2005/03/11 + */ +#include +#include +#include +#include +// SERIAL PORT RELATED FUNCTIONS + +//! SPEED SETTINGS +/*! + @param aBR [in] Declared for communication speed (9600-500000) + @return cfset[i|o] Returned value for speed function + Returns B0 if failed + */ +speed_t bitrate(int aBR) +{ + switch(aBR) + { + case 9600: + return B9600; + + case 19200: + return B19200; + + case 38400: + return B38400; + + case 57600: + return B57600; + + case 115200: + return B115200; + + case 230400: + return B230400; + + case 460800: + return B460800; + + case 500000: + return B500000; + + default: // invalid bitrate + return B0; + } +} + +/* Parameter settings for serial port communication + @param aFd [in] File descriptor to point serial port + @param aSpeed [in] Communication speed (bps) + @retval 0 Failed + @retval 1 Success + */ +int setupSerial(int aFd, int aSpeed) +{ + int speed; + struct termios tio; + + speed=bitrate(aSpeed); + if(speed==0) + return 0; // invalid bitrate + + tcgetattr(aFd,&tio); + + cfsetispeed(&tio,speed); // bitrate + cfsetospeed(&tio,speed); // bitrate + + tio.c_cflag=(tio.c_cflag & ~CSIZE) | CS8; // data bits = 8bit + + tio.c_iflag&= ~( BRKINT | ICRNL | ISTRIP ); + tio.c_iflag&= ~ IXON; // no XON/XOFF + tio.c_cflag&= ~PARENB; // no parity + tio.c_cflag&= ~CRTSCTS; // no CTS/RTS + tio.c_cflag&= ~CSTOPB; // stop bit = 1bit + + // Other + tio.c_lflag &= ~( ISIG | ICANON | ECHO ); + + // Commit + if(tcsetattr(aFd,TCSADRAIN,&tio)==0) + return 1; + return 0; +} + +//! Open and set up specified serial port +/*! + @param aDevNme [in] Serial port device file name + @param aSpeed [in] Communication speed(bps) + @return Serial port file handle + Returns NULL when failed to open. + */ +FILE* openSerial(char *aDevName, int aSpeed) +{ + FILE* dev; + + dev=fopen(aDevName,"w+"); + if(dev==NULL) + return NULL; // invalid device file + + // setup parameters + if(setupSerial(fileno(dev),aSpeed)) + return dev; + + // fail + perror("setting term parameters"); + fclose(dev); + return NULL; +} + +// + +//! Obtain scanned data +/*! + @param aPort [in] Serial port file handle where URG is connected + @param aStart [in] Starting scan step from (0-768) + @param aEnd [in] Ending scan step at (0-768) + @param aSkip [in] Number of steps to be merged when multiple points are combined(1-99) + @return Obtained distance data + memory pointer is malloc. Should be freed after use. + Returns NULL when failed + */ +int* urgGetScan(FILE* aPort, int aStart, int aEnd, int aSkip) +{ + char req[16]; + int *scan,*pt; + char line[80]; + int i; + + sprintf(req,"G%03d%03d%02d\n",aStart,aEnd,aSkip); + i=fwrite(req,sizeof(char),strlen(req),aPort); + if(i==0) + return NULL; + // echo-back + if(fgets(line,sizeof(line),aPort)==NULL) + return NULL; + if(strcmp(req,line)!=0) + { + // invalid + return NULL; + } + + // status + if(fgets(line,sizeof(line),aPort)==NULL) + return NULL; + if(strcmp("0\n",line)!=0) + { + //invalid + return NULL; + } + // result + scan=(int*)malloc(sizeof(int)*((aEnd-aStart)/aSkip+1)); + pt=scan; + while(1) + { + if(fgets(line,sizeof(line),aPort)==NULL) + { + free(scan); + return NULL; + } + if(!strcmp("\n",line)) + { + //end of result + break; + } + for(i=0;i