113 struct sockaddr_in serv_addr;
119 socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
121 fprintf(stderr,
"Failed to create socket\n");
125 memset(&serv_addr, 0,
sizeof(serv_addr));
126 serv_addr.sin_family = AF_INET;
127 serv_addr.sin_addr.s_addr = inet_addr(
ip.c_str());
128 serv_addr.sin_port = htons(
port);
131 res = connect(
socket_fd, (
struct sockaddr *)&serv_addr,
sizeof(serv_addr));
132 if (errno == EINPROGRESS) {
136 FD_SET(
static_cast<unsigned int>(
socket_fd), &myset);
137 res = select(
socket_fd + 1,
nullptr, &myset,
nullptr, &tv);
138 if (res < 0 && errno != EINTR) {
139 fprintf(stderr,
"Error connecting to server %d - %s\n", errno, strerror(errno));
143 fprintf(stderr,
"ok");
146 fprintf(stderr,
"Timeout in select() - Cancelling!\n");
162 unsigned int *uintptr;
163 unsigned short *ushortptr;
164 static unsigned char header[24];
165 ushortptr = (
unsigned short *)header;
166 uintptr = (
unsigned int *)header;
168 assert(
sizeof(header) == 24);
171 double time_second = 0;
178 if (recv(
socket_fd, header,
sizeof(header), MSG_WAITALL) == -1) {
185 printf(
"Error, wrong magic number !!!\n");
190 uint16_t msgtype = ntohs(ushortptr[7]);
191 uint32_t msgLength = ntohl(uintptr[2]);
194 if (len != (ssize_t)msgLength) {
195 printf(
"Error, wrong msg length: %d of %d bytes.\n",
static_cast<int>(len), msgLength);
207 unsigned short measurementId;
208 ushortptr = (
unsigned short *)
body;
209 measurementId = ushortptr[0];
212 uintptr = (
unsigned int *)(
body + 6);
213 unsigned int seconds = uintptr[1];
214 unsigned int fractional = uintptr[0];
215 double startTimestamp = seconds + fractional / 4294967296.;
218 uintptr = (
unsigned int *)(
body + 14);
219 seconds = uintptr[1];
220 fractional = uintptr[0];
221 double endTimestamp = seconds + fractional / 4294967296.;
233 unsigned short numSteps = ushortptr[11];
236 short startAngle = (short)ushortptr[12];
237 short stopAngle = (short)ushortptr[13];
240 unsigned short numPoints = ushortptr[14];
243 for (
int i = 0; i < nlayers; i++) {
244 laserscan[i].
clear();
259 if (numPoints > USHRT_MAX - 2)
262 for (
int i = 0; i < numPoints; i++) {
263 ushortptr = (
unsigned short *)(
body + 44 + i * 10);
264 unsigned char layer = ((
unsigned char)
body[44 + i * 10]) & 0x0F;
265 unsigned char echo = ((
unsigned char)
body[44 + i * 10]) >> 4;
269 hAngle = (2.f * M_PI / numSteps) * (
short)ushortptr[1];
270 rDist = 0.01 * ushortptr[2];
274 laserscan[layer].
addPoint(scanPoint);