Main Page
Namespaces
Classes
Files
File List
File Members
src
main.cpp
Go to the documentation of this file.
1
//
2
// main.cpp
3
//
4
// LD-MRS example driver and application.
5
// This code should compile under Linux.
6
//
7
// The main() function contains calls to several demo applications.
8
// Most of the scanner parameters - including its IP address - are set up
9
// directly in the LDMRS class constructor.
10
//
11
// All source code provided here is intended for demonstration and reference purposes only.
12
// SICK provides no warranty whatsoever for the function of this code.
13
//
14
// Note that not all features are available with all firmware versions of the MRS. Please refer
15
// to the manual if the intended functionality is available with your device.
16
//
17
// Change log:
18
// 2013-09-18, willhvo:
19
// - Started change log.
20
// 2014-03-04, willhvo:
21
// - Added NtpTimeApp demo.
22
// 2014-12-18, willhvo:
23
// - Added ScanpointCoordinateApp demo.
24
//
25
26
#include "
tools/errorhandler.hpp
"
27
#include "
BasicDatatypes.hpp
"
28
#include "
manager.hpp
"
29
30
//
31
// This example demonstrates setting and receiving the NTP timestamp of the MRS. The timestamp
32
// can be set with two commands, and is automatically included in every data packet received
33
// from the sensor.
34
// This feature is available in all firmware versions.
35
//
36
// The MRS device should be configured like this:
37
// m_weWantScanData: true
38
// m_weWantObjectData: false
39
// m_weWantFieldData: false
40
// m_weWantScanDataFromSopas: false
41
//
42
int
mrsNtpTimeApp
()
43
{
44
// First, create the manager object. The manager handles devices, collects
45
// device data and forwards it to the application(s).
46
printInfoMessage
(
"mrsNtpTimeApp: Creating the manager."
,
true
);
47
Manager
manager;
48
49
Sourcetype
type;
50
std::string name;
51
UINT16
id;
52
bool
result =
false
;
53
54
// Add the MRS device (sensor)
55
printInfoMessage
(
"mrsNtpTimeApp: Adding the LDMRS device."
,
true
);
56
type =
Sourcetype_LDMRS
;
57
name =
"LDMRS-1"
;
58
id
= 1;
59
result = manager.
addAndRunDevice
(type, name,
id
);
60
if
(result ==
false
)
61
{
62
printError
(
"mrsNtpTimeApp: Failed to add device "
+ name +
", aborting!"
);
63
return
0;
64
}
65
66
// Add the application. As the devices may send configuration data only once
67
// at startup, the applications may want to be present before the devices are
68
// started. But - this is not needed here.
69
printInfoMessage
(
"mrsNtpTimeApp: Adding the application MrsNtpTimeApp."
,
true
);
70
type =
Sourcetype_MrsNtpTimeApp
;
71
name =
"MRS Example NTP time App"
;
72
id
= 51;
73
result = manager.
addApplication
(type, name,
id
);
74
if
(result ==
false
)
75
{
76
printError
(
"mrsNtpTimeApp: Failed to add application "
+ name +
", aborting!"
);
77
return
0;
78
}
79
printInfoMessage
(
"mrsNtpTimeApp: Application NTP-time is running."
,
true
);
80
81
82
// This loop never ends
83
while
(1)
84
{
85
// Sleep 100 ms
86
usleep(100000);
87
}
88
89
return
0;
90
}
91
92
93
//
94
// This example demonstrates setting and checking the FlexibleResolution feature of the
95
// LDMRS. This feature is not available in all firmware versions.
96
//
97
// The MRS device should be configured like this:
98
// m_weWantScanData: true
99
// m_weWantObjectData: false
100
// m_weWantFieldData: false
101
// m_weWantScanDataFromSopas: false
102
//
103
int
sectorChangeApp
()
104
{
105
// First, create the manager object. The manager handles devices, collects
106
// device data and forwards it to the application(s).
107
printInfoMessage
(
"sectorChangeApp: Creating the manager."
,
true
);
108
Manager
manager;
109
110
Sourcetype
type;
111
std::string name;
112
UINT16
id;
113
bool
result =
false
;
114
115
// Add the MRS device (sensor)
116
printInfoMessage
(
"sectorChangeApp: Adding the LDMRS device."
,
true
);
117
type =
Sourcetype_LDMRS
;
118
name =
"LDMRS-1"
;
119
id
= 1;
120
result = manager.
addAndRunDevice
(type, name,
id
);
121
if
(result ==
false
)
122
{
123
printError
(
"sectorChangeApp: Failed to add device "
+ name +
", aborting!"
);
124
return
0;
125
}
126
127
// Add the application. As the devices may send configuration data only once
128
// at startup, the applications may want to be present before the devices are
129
// started. But - this is not needed here.
130
printInfoMessage
(
"sectorChangeApp: Adding the application MrsSectorChangeApp."
,
true
);
131
type =
Sourcetype_MrsChangeApp
;
132
name =
"MRS Example Sector Change App"
;
133
id
= 51;
134
result = manager.
addApplication
(type, name,
id
);
135
if
(result ==
false
)
136
{
137
printError
(
"sectorChangeApp: Failed to add application "
+ name +
", aborting!"
);
138
return
0;
139
}
140
printInfoMessage
(
"sectorChangeApp: Application SectorChange is running."
,
true
);
141
142
143
// This loop never ends
144
while
(1)
145
{
146
// Sleep 100 ms
147
usleep(100000);
148
}
149
150
return
0;
151
}
152
153
154
//
155
// SOPAS scan data reception application.
156
// This example shows the reception of scan data via the SOPAS interface.
157
// Note 1: If only scan data is required, it is recommended to use the MRS interface instead.
158
// Note 2: Not all MRS devices have a SOPAS interface.
159
//
160
// The MRS device should be configured like this:
161
// m_weWantScanData: false
162
// m_weWantObjectData: false
163
// m_weWantFieldData: false
164
// m_weWantScanDataFromSopas: true
165
//
166
int
mrsSopasScandataApp
()
167
{
168
// First, create the manager object. The manager handles devices, collects
169
// device data and forwards it to the application(s).
170
printInfoMessage
(
"mrsSopasScandataApp: Creating the manager."
,
true
);
171
Manager
manager;
172
173
// Add the application. As the devices may send configuration data only once
174
// at startup, the applications must be present before the devices are
175
// started. Here, we are using the general data display app because we only want
176
// to show the received data.
177
Sourcetype
type;
178
std::string name;
179
UINT16
id;
180
bool
result =
false
;
181
182
printInfoMessage
(
"mrsSopasScandataApp: Adding the application MrsApp."
,
true
);
183
type =
Sourcetype_MrsApp
;
184
name =
"MRS ExampleApp"
;
185
id
= 50;
186
result = manager.
addApplication
(type, name,
id
);
187
if
(result ==
false
)
188
{
189
printError
(
"mrsSopasScandataApp: Failed to add application "
+ name +
", aborting!"
);
190
return
0;
191
}
192
printInfoMessage
(
"mrsSopasScandataApp: Application is running."
,
true
);
193
194
//
195
// Add and run the sensor
196
//
197
printInfoMessage
(
"mrsSopasScandataApp: Adding the LDMRS device."
,
true
);
198
type =
Sourcetype_LDMRS
;
199
name =
"LDMRS-1"
;
200
id
= 1;
201
result = manager.
addAndRunDevice
(type, name,
id
);
202
if
(result ==
false
)
203
{
204
printError
(
"mrsSopasScandataApp: Failed to add device "
+ name +
", aborting!"
);
205
return
0;
206
}
207
208
// This loop never ends
209
while
(1)
210
{
211
// Sleep 100 ms
212
usleep(100000);
213
}
214
215
return
0;
216
}
217
218
219
//
220
// Field setting application.
221
//
222
// The MRS device should be configured like this:
223
// m_weWantScanData: false
224
// m_weWantObjectData: false
225
// m_weWantFieldData: true
226
// m_weWantScanDataFromSopas: false
227
//
228
int
mrsFieldApp
()
229
{
230
// First, create the manager object. The manager handles devices, collects
231
// device data and forwards it to the application(s).
232
printInfoMessage
(
"mrsFieldApp: Creating the manager."
,
true
);
233
Manager
manager;
234
235
// Add the application. As the devices may send configuration data only once
236
// at startup, the applications must be present before the devices are
237
// started.
238
Sourcetype
type;
239
std::string name;
240
UINT16
id;
241
bool
result =
false
;
242
243
printInfoMessage
(
"mrsFieldApp: Adding the application MrsFieldApp."
,
true
);
244
type =
Sourcetype_MrsFieldApp
;
245
name =
"MRS FieldApp"
;
246
id
= 50;
247
result = manager.
addApplication
(type, name,
id
);
248
if
(result ==
false
)
249
{
250
printError
(
"mrsFieldApp: Failed to add application "
+ name +
", aborting!"
);
251
return
0;
252
}
253
printInfoMessage
(
"mrsFieldApp: Application is running."
,
true
);
254
255
//
256
// Add and run the sensor
257
//
258
printInfoMessage
(
"mrsFieldApp: Adding the LDMRS device."
,
true
);
259
type =
Sourcetype_LDMRS
;
260
name =
"LDMRS-1"
;
261
id
= 1;
262
result = manager.
addAndRunDevice
(type, name,
id
);
263
if
(result ==
false
)
264
{
265
printError
(
"mrsFieldApp: Failed to add device "
+ name +
", aborting!"
);
266
return
0;
267
}
268
269
// This loop never ends
270
while
(1)
271
{
272
// Sleep 100 ms
273
usleep(100000);
274
}
275
276
return
0;
277
}
278
279
280
//
281
// Demo application for scanpoint coordinate calculation. Receives the scanpoints, and prints coordinates of the points at the
282
// configured scan angle.
283
//
284
// The MRS device could be configured like this:
285
// m_weWantScanData: true
286
// m_weWantObjectData: false
287
// m_weWantFieldData: false
288
// m_weWantScanDataFromSopas: false
289
//
290
int
mrsScanpointCoordinateApp
()
291
{
292
// First, create the manager object. The manager handles devices, collects
293
// device data and forwards it to the application(s).
294
printInfoMessage
(
"mrsScanpointCoordinateApp: Creating the manager."
,
true
);
295
Manager
manager;
296
297
// Add the application. As the devices may send configuration data only once
298
// at startup, the applications must be present before the devices are
299
// started.
300
Sourcetype
type;
301
std::string name;
302
UINT16
id;
303
bool
result =
false
;
304
305
printInfoMessage
(
"mrsScanpointCoordinateApp: Adding the application MrsScanpointCoordinateApp."
,
true
);
306
type =
Sourcetype_MrsScanpointCoordinateApp
;
307
name =
"MRS CoordinateApp"
;
308
id
= 50;
309
result = manager.
addApplication
(type, name,
id
);
310
if
(result ==
false
)
311
{
312
printError
(
"mrsScanpointCoordinateApp: Failed to add application "
+ name +
", aborting!"
);
313
return
0;
314
}
315
printInfoMessage
(
"mrsScanpointCoordinateApp: Application is running."
,
true
);
316
317
//
318
// Add and run the sensor
319
//
320
printInfoMessage
(
"mrsScanpointCoordinateApp: Adding the LDMRS device."
,
true
);
321
type =
Sourcetype_LDMRS
;
322
name =
"LDMRS-1"
;
323
id
= 1;
324
result = manager.
addAndRunDevice
(type, name,
id
);
325
if
(result ==
false
)
326
{
327
printError
(
"mrsScanpointCoordinateApp: Failed to add device "
+ name +
", aborting!"
);
328
return
0;
329
}
330
331
// This loop never ends
332
while
(1)
333
{
334
// Sleep 100 ms
335
usleep(100000);
336
}
337
338
return
0;
339
}
340
341
342
343
//
344
// Minimal demo application. Receives all datatypes and just prints the data.
345
//
346
// The MRS device could be configured like this:
347
// m_weWantScanData: true
348
// m_weWantObjectData: true
349
// m_weWantFieldData: false
350
// m_weWantScanDataFromSopas: false
351
//
352
int
mrsApp
()
353
{
354
// First, create the manager object. The manager handles devices, collects
355
// device data and forwards it to the application(s).
356
printInfoMessage
(
"mrsApp: Creating the manager."
,
true
);
357
Manager
manager;
358
359
// Add the application. As the devices may send configuration data only once
360
// at startup, the applications must be present before the devices are
361
// started.
362
Sourcetype
type;
363
std::string name;
364
UINT16
id;
365
bool
result =
false
;
366
367
printInfoMessage
(
"mrsApp: Adding the application MrsApp."
,
true
);
368
type =
Sourcetype_MrsApp
;
369
name =
"MRS ExampleApp"
;
370
id
= 50;
371
result = manager.
addApplication
(type, name,
id
);
372
if
(result ==
false
)
373
{
374
printError
(
"mrsApp: Failed to add application "
+ name +
", aborting!"
);
375
return
0;
376
}
377
printInfoMessage
(
"mrsApp: Application is running."
,
true
);
378
379
//
380
// Add and run the sensor
381
//
382
printInfoMessage
(
"mrsApp: Adding the LDMRS device."
,
true
);
383
type =
Sourcetype_LDMRS
;
384
name =
"LDMRS-1"
;
385
id
= 1;
386
result = manager.
addAndRunDevice
(type, name,
id
);
387
if
(result ==
false
)
388
{
389
printError
(
"mrsApp: Failed to add device "
+ name +
", aborting!"
);
390
return
0;
391
}
392
393
// This loop never ends
394
while
(1)
395
{
396
// Sleep 100 ms
397
usleep(100000);
398
}
399
400
return
0;
401
}
402
403
404
//
405
// The main program.
406
// Choose the desired application here.
407
//
408
int
main
(
int
argc,
char
**argv)
409
{
410
//
411
// LD-MRS Example
412
//
413
int
result;
414
415
// The MRS-App connects to an MRS, reads its configuration and receives all incoming data.
416
result =
mrsApp
();
417
418
// The MRS-App connects to an MRS, reads its configuration and displays scanpoint coordinates.
419
// result = mrsScanpointCoordinateApp();
420
421
// The MRS NtpTimeApp demonstrates setting and reading the NTP timestamp.
422
// result = mrsNtpTimeApp();
423
424
// The SectorChangeApp demonstrates the usage of the FlexRes feature.
425
// result = sectorChangeApp();
426
427
// The FieldApp demonstrates the usage of the SOPAS interface. It removes and creates fields and
428
// eval cases.
429
// result = mrsFieldApp();
430
431
// The SopasScandataApp demonstrates reading scan data via the SOPAS interface.
432
// result = mrsSopasScandataApp();
433
434
435
return
result;
436
}
printError
void printError(std::string message)
Definition:
errorhandler.cpp:87
mrsApp
int mrsApp()
Definition:
main.cpp:352
Sourcetype_MrsApp
Definition:
BasicDatatypes.hpp:84
UINT16
uint16_t UINT16
Definition:
BasicDatatypes.hpp:27
main
int main(int argc, char **argv)
Definition:
main.cpp:408
mrsSopasScandataApp
int mrsSopasScandataApp()
Definition:
main.cpp:166
Manager::addAndRunDevice
bool addAndRunDevice(Sourcetype deviceType, std::string deviceName, UINT16 wantedId=0xFFFF)
Definition:
manager.cpp:91
mrsFieldApp
int mrsFieldApp()
Definition:
main.cpp:228
printInfoMessage
#define printInfoMessage(a, b)
Definition:
errorhandler.hpp:13
Sourcetype_MrsNtpTimeApp
Definition:
BasicDatatypes.hpp:87
Manager::addApplication
bool addApplication(Sourcetype appType, std::string appName, UINT16 wantedId=0xFFFF)
Definition:
manager.cpp:178
manager.hpp
Manager
Definition:
manager.hpp:18
sectorChangeApp
int sectorChangeApp()
Definition:
main.cpp:103
mrsScanpointCoordinateApp
int mrsScanpointCoordinateApp()
Definition:
main.cpp:290
Sourcetype
Sourcetype
Definition:
BasicDatatypes.hpp:76
Sourcetype_MrsFieldApp
Definition:
BasicDatatypes.hpp:86
mrsNtpTimeApp
int mrsNtpTimeApp()
Definition:
main.cpp:42
Sourcetype_MrsChangeApp
Definition:
BasicDatatypes.hpp:85
BasicDatatypes.hpp
Sourcetype_MrsScanpointCoordinateApp
Definition:
BasicDatatypes.hpp:88
errorhandler.hpp
Sourcetype_LDMRS
Definition:
BasicDatatypes.hpp:81
libsick_ldmrs
Author(s): SICK AG
, Martin Günther
, Jochen Sprickerhof
autogenerated on Mon Oct 26 2020 03:27:30