URG control. More...
#include "math_utils.h"
#include "urg_ctrl.h"
#include "scip_handler.h"
#include "urg_errno.h"
#include "serial_ctrl.h"
#include "serial_utils.h"
#include "serial_errno.h"
#include "ticks.h"
#include "delay.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
Enumerations | |
enum | { ScipTimeout = 1000, EachTimeout = 100 * 2, InvalidRange = -1 } |
Functions | |
void | urg_initialize (urg_t *urg) |
int | urg_connect (urg_t *urg, const char *device, long baudrate) |
Connection. | |
void | urg_disconnect (urg_t *urg) |
Disconnection. | |
int | urg_isConnected (const urg_t *urg) |
Checks whether connected or not and returns the result. | |
const char * | urg_error (const urg_t *urg) |
Get error message. | |
int | urg_versionLines (urg_t *urg, char *lines[], int lines_max) |
Get string containing version information. | |
int | urg_parameters (urg_t *urg, urg_parameter_t *parameters) |
URG Returns parameter. | |
const char * | urg_model (const urg_t *urg) |
URG Returns the sensor type. | |
int | urg_dataMax (const urg_t *urg) |
Returns the number of maximum data obtained in one scan. | |
int | urg_scanMsec (const urg_t *urg) |
Returns measurement time taken for one scan. | |
long | urg_maxDistance (const urg_t *urg) |
Maximum measurable distance. | |
long | urg_minDistance (const urg_t *urg) |
Minimum measureable distance. | |
int | urg_setSkipLines (urg_t *urg, int lines) |
Sets the number of lines to be skiped. | |
int | urg_setSkipFrames (urg_t *urg, int frames) |
Sets number of scans to be skipped. | |
int | urg_setCaptureTimes (urg_t *urg, int times) |
Sets number of times the data to be acquired . | |
int | urg_remainCaptureTimes (const urg_t *urg) |
Get number of remaining times on MD/MS capture. | |
int | urg_requestData (urg_t *urg, urg_request_type request_type, int first_index, int last_index) |
Request for distance data. | |
int | urg_receiveData (urg_t *urg, long data[], int data_max) |
Receive URG data. | |
int | urg_receiveDataWithIntensity (urg_t *urg, long data[], int data_max, long intensity[]) |
Get data with intensity. | |
int | urg_receivePartialData (urg_t *urg, long data[], int data_max, int first_index, int last_index) |
Get partial URG data. | |
long | urg_recentTimestamp (const urg_t *urg) |
Receive time stamp. | |
double | urg_index2rad (const urg_t *urg, int index) |
Change index value into angle (radian). | |
int | urg_index2deg (const urg_t *urg, int index) |
Change index into angle(degree). | |
int | urg_rad2index (const urg_t *urg, double radian) |
Angle(radian) is converted to index value. | |
int | urg_deg2index (const urg_t *urg, int degree) |
Angle(degree) is converted into index. | |
int | urg_laserOn (urg_t *urg) |
Directs laser to switch on. | |
int | urg_laserOff (urg_t *urg) |
Directs laser to switch off. | |
int | urg_reboot (urg_t *urg) |
reboot | |
int | urg_reset (urg_t *urg) |
int | urg_enableTimestampMode (urg_t *urg) |
Enters into time stamp mode. | |
int | urg_disableTimestampMode (urg_t *urg) |
Comes out of time stamp mode. | |
long | urg_currentTimestamp (urg_t *urg) |
Get time stamp. |
URG control.
anonymous enum |
int urg_connect | ( | urg_t * | urg, | |
const char * | device, | |||
long | baudrate | |||
) |
Connection.
[in,out] | urg | Structure of URG control |
[in] | device | Connection device |
[in] | baudrate | Baudrate |
0 | Normal | |
<0 | Error |
Example
urg_t urg; // Coonnection if (urg_connect(&urg, "COM3", 115200) < 0) { printf("urg_connect: %s\n", urg_error(&urg)); return -1; } ... urg_disconnect(&urg);
long urg_currentTimestamp | ( | urg_t * | urg | ) |
Get time stamp.
Returns TM1 response.
[in,out] | urg | Structure of URG control |
>=0 | Timestamp [msec] | |
<0 | Error |
Example
// Enters into time stamp urg_enableTimestampMode(&urg); // Get URG time stamp continuously. for (i = 0; i < 5; ++i) { long timestamp = urg_currentTimestamp(&urg); printf("timestamp: %ld\n", timestamp) } // leave tiemstamp mode urg_disableTimestampMode(&urg);
int urg_dataMax | ( | const urg_t * | urg | ) |
Returns the number of maximum data obtained in one scan.
[in,out] | urg | Structure of URG control |
>=0 | number of maximum data obtained in one scan | |
<0 | Error |
Example
enum { BufferSize = 2048 }; long data[BufferSize]; ... // Checks whether number of maximum data obtained by URG sensor does not exceeds receive buffer // (This is not necessary if size of buffer is dynamically allocated.) int data_max = urg_dataMax(&urg); ASSERT(BufferSize >= data_max);
int urg_deg2index | ( | const urg_t * | urg, | |
int | degree | |||
) |
Angle(degree) is converted into index.
[in,out] | urg | Structure of URG control |
[in] | Angle(degre) |
int urg_disableTimestampMode | ( | urg_t * | urg | ) |
Comes out of time stamp mode.
[in,out] | urg | Structure of URG control |
0 | Normal | |
<0 | Error |
void urg_disconnect | ( | urg_t * | urg | ) |
Disconnection.
[in,out] | urg | Structure of URG control |
int urg_enableTimestampMode | ( | urg_t * | urg | ) |
Enters into time stamp mode.
[in,out] | urg | Structure of URG control |
0 | Normal | |
<0 | Error |
const char* urg_error | ( | const urg_t * | urg | ) |
Get error message.
[in,out] | urg | Structure of URG control |
int urg_index2deg | ( | const urg_t * | urg, | |
int | index | |||
) |
Change index into angle(degree).
[in,out] | urg | Structure of URG control |
[in] | index | Index value |
double urg_index2rad | ( | const urg_t * | urg, | |
int | index | |||
) |
Change index value into angle (radian).
Front of the sensor is a positive in X axis
[in,out] | urg | Structure of URG control |
[in] | index | Index value |
Example
// To operate urg_index2rad(), data from 0 to last_index is stored. // The data of the step not measured becomes -1. urg_requestData(&urg, URG_GD, first_index, last_index); n = urg_receiveData(&urg, data, data_max); for (i = 0; i < n; ++i) { long l = data[i]; if (l > min_distance) { double rad = urg_index2rad(&urg, i); double x = data[i] * cos(rad); double y = data[i] * sin(rad); printf("%f, %f\n", x, y); } }
void urg_initialize | ( | urg_t * | urg | ) |
int urg_isConnected | ( | const urg_t * | urg | ) |
Checks whether connected or not and returns the result.
[in,out] | urg | Structure of URG control |
0 | if connected | |
<0 | if disconnected |
Example
if (urg_isConnected(&urg) < 0) { printf("not connected.\n"); } else { printf("connected.\n"); }
int urg_laserOff | ( | urg_t * | urg | ) |
Directs laser to switch off.
[in,out] | urg | Structure of URG control |
0 | Normal | |
<0 | Error |
int urg_laserOn | ( | urg_t * | urg | ) |
Directs laser to switch on.
[in,out] | urg | Structure of URG control |
0 | Normal | |
<0 | Error |
long urg_maxDistance | ( | const urg_t * | urg | ) |
Maximum measurable distance.
[in,out] | urg | Structure of URG control |
>=0 | Maximum measurable distance [mm] | |
<0 | Error |
Example
... n = urg_receiveData(&urg, data, data_max); min_distance = urg_minDistance(&urg); max_distance = urg_minDistance(&urg); // Output only valid data for (i = 0; i < n; ++i) { long length = data[i]; if ((length > min_distance) && (length < max_distance)) { printf("%d:%d\n", i, length); } }
long urg_minDistance | ( | const urg_t * | urg | ) |
Minimum measureable distance.
[in,out] | urg | Structure of URG control |
>=0 | Minimum measurable distance [mm] | |
<0 | Error |
const char* urg_model | ( | const urg_t * | urg | ) |
URG Returns the sensor type.
[in,out] | urg | Structure of URG control |
URG | sensor type |
printf("URG type: %s\n", urg_model(&urg));
int urg_parameters | ( | urg_t * | urg, | |
urg_parameter_t * | parameters | |||
) |
URG Returns parameter.
[in,out] | urg | Structure of URG control |
[out] | parameters | Structure of URG parameter |
0 | Normal | |
<0 | Error |
Execution example of get_parameters.c (Classic-URG)
% ./get_parameters urg_getParameters: No Error. distance_min: 20 distance_max: 5600 area_total: 1024 area_min: 44 area_max: 725 area_front: 384 scan_rpm: 600 urg_getDistanceMax(): 5600 urg_getDistanceMin(): 20 urg_getScanMsec(): 100 urg_getDataMax(): 726
int urg_rad2index | ( | const urg_t * | urg, | |
double | radian | |||
) |
Angle(radian) is converted to index value.
Front of the sensor is a positive in X axis
[in,out] | urg | Structure of URG control |
[in] | Angle(radian) |
int urg_reboot | ( | urg_t * | urg | ) |
reboot
0 | Normal | |
<0 | Error |
int urg_receiveData | ( | urg_t * | urg, | |
long | data[], | |||
int | data_max | |||
) |
Receive URG data.
[in,out] | urg | Structure of URG control |
[out] | data | Storage location of received data |
[in] | data_max | Maximum number of data that can be received |
0 | > Number of data received | |
<0 | Error |
int urg_receiveDataWithIntensity | ( | urg_t * | urg, | |
long | data[], | |||
int | data_max, | |||
long | intensity[] | |||
) |
Get data with intensity.
[in,out] | urg | Structure of URG control |
[out] | data | Storage location of received data |
[in] | data_max | Maximum number of data that can be received |
[out] | intensity | Storage location of intensity of received data. |
int urg_receivePartialData | ( | urg_t * | urg, | |
long | data[], | |||
int | data_max, | |||
int | first_index, | |||
int | last_index | |||
) |
Get partial URG data.
[in,out] | urg | Structure of URG control |
[out] | data | Storage location of received data |
[in] | data_max | Maximum number of data that can be received |
[in] | first_index | Index of the first data stored. |
[in] | last_index | Index of the last data stored |
0 | > Number of data received | |
<0 | Error |
long urg_recentTimestamp | ( | const urg_t * | urg | ) |
Receive time stamp.
[in,out] | urg | Structure of URG control |
Time | stamp [msec] |
Example
urg_requestData(&urg, URG_GD, URG_FIRST, URG_LAST); n = urg_receiveData(&urg, data, data_max); if (n > 0) { long timestamp = urg_recentTimestamp(&urg); printf("timestamp: %d\n", timestamp); // Display data etc // !!! }
int urg_remainCaptureTimes | ( | const urg_t * | urg | ) |
Get number of remaining times on MD/MS capture.
[in,out] | urg | Structure of URG control |
remaining | times. (100 means infinity times) |
int urg_requestData | ( | urg_t * | urg, | |
urg_request_type | request_type, | |||
int | first_index, | |||
int | last_index | |||
) |
Request for distance data.
Request for distance data of [first_index, last_index]. Return all scan data when specified URG_FIRST, URG_LAST.
[in,out] | urg | Structure of URG control |
[in] | request_type | Received data type. |
[in] | first_index | Index of the first data stored |
[in] | last_index | Index of the last received data stored. |
0 | Normal | |
<0 | Error |
Example
// Get one scan data from GD command urg_requestData(&urg, URG_GD, URG_FIRST, URG_LAST); n = urg_receiveData(&urg, data, data_max); // Get data continuously from MD scan urg_requestData(&urg, URG_MD, URG_FIRST, URG_LAST); while (1) { n = urg_receiveData(&urg, data, data_max); if (n > 0) { // Display data etc ... } }
int urg_reset | ( | urg_t * | urg | ) |
int urg_scanMsec | ( | const urg_t * | urg | ) |
Returns measurement time taken for one scan.
Returns measurement time when motor speed is 100% as specified.
[in,out] | urg | Structure of URG control |
>=0 | measurement time taken for one scan [msec] | |
<0 | Error |
int urg_setCaptureTimes | ( | urg_t * | urg, | |
int | times | |||
) |
Sets number of times the data to be acquired .
[in,out] | urg | Structure of URG control |
[in] | times | Number of scan data |
0 | Normal | |
<0 | Error |
Example
// Data is supplied indefinitely urg_setCaptureTimes(&urg, UrgInfinityTimes); ... // Data acquistion is stopped if laser is switched off. urg_laserOff(&urg);
int urg_setSkipFrames | ( | urg_t * | urg, | |
int | frames | |||
) |
Sets number of scans to be skipped.
[in,out] | urg | Structure of URG control |
[in] | frames | Number of skipped frames. |
0 | Normal | |
<0 | Error |
int urg_setSkipLines | ( | urg_t * | urg, | |
int | lines | |||
) |
Sets the number of lines to be skiped.
The volume of acquire data can be reduced by skipping the lines .
[in,out] | urg | Structure of URG control |
[in] | lines | Number of lines to be skiped. |
0 | Normal | |
<0 | Error |
int urg_versionLines | ( | urg_t * | urg, | |
char * | lines[], | |||
int | lines_max | |||
) |
Get string containing version information.
[in,out] | urg | Structure of URG control |
[out] | lines | Buffer having version information |
[in] | lines_max | Maximum lines in buffer |
0 | Normal | |
<0 | Error |