Robobot linesensor description

From Rsewiki
Revision as of 11:11, 29 December 2023 by Jca (Talk | contribs)

Jump to: navigation, search

Back to Robobot

Back to Software description

The 'Line sensor (sedge)' receives the raw line sensor data from the Teensy.

The data is generated from two measurements for each sensor, one measurement when the LED illumination is on, and one measurement, when the illumination is off. The difference between these two is received by the sedge module.

Each sensor has a slight overlap with the neighboring cells dependent on the distance from the sensor to the floor.

The data rate is controlled by this module from the settings in the 'robot.ini' configuration file in the [edge] section:

[edge]
rate_ms = 8
lograw = true
highpower = true
printraw = false
...

The data rate is here 8 ms, the data is generated every 1 ms, but 8 ms should be sufficient and there is a limit to the data transfer speed on the USB connection (4000-5000 messages per second should be possible).

The raw data can be logged, and looks like this


Contents

Line edge sensor

Robobot level 2.png

Figure. An important part of the Robobot is the ability to follow a line. This page focuses on this part.

Data analysis

The data from a 4-second test drive is analyzed. A video can be seen at this link.

https://panopto.dtu.dk/Panopto/Pages/Viewer.aspx?id=a7a5d643-a2df-4ed2-b019-b0e600c96a4e

Line-sensor-1-clip.png

Normalized data

% Edge sensor logfile normalized 'log_20231228_103218.821/log_edge_normalized.txt'
% 1 	Time (sec)
% 2..9 	Sensor value in 0..1000 scale for black to white
% 10 	Line width (m)
1703755938.9114 372 451 391 381 407 369 369 395  0.0000
1703755938.9198 412 478 421 403 405 364 381 420  0.0000
1703755938.9276 346 451 404 365 371 352 374 389  0.0000
1703755938.9360 405 478 415 401 405 383 391 409  0.0000
1703755938.9434 402 451 413 383 391 378 376 395  0.0000
...
1703755939.2074 488 615 584 447 423 381 408 451  0.0000
1703755939.2154 468 662 655 487 423 378 403 460  0.0000
1703755939.2243 491 685 670 496 405 352 394 451  0.0000
1703755939.2321 521 735 743 529 433 378 421 460  0.0263
1703755939.2403 551 792 828 574 423 396 428 488  0.0364
1703755939.2482 561 831 871 614 431 364 418 454  0.0415
1703755939.2553 561 863 929 662 431 391 431 466  0.0462
1703755939.2633 584 897 982 678 445 398 433 485  0.0493
1703755939.2723 567 876 989 680 423 371 411 471  0.0483
1703755939.2803 557 892 997 667 419 369 381 440  0.0477
1703755939.2876 590 908 1000 700 433 391 411 460  0.0512
1703755939.2955 580 902 997 671 421 386 401 449  0.0490
1703755939.3035 580 883 1000 696 425 378 403 435  0.0500
1703755939.3117 577 895 1000 694 423 391 416 443  0.0500
...

extracted edge data

The extracted edge data log looks like this

% Edge sensor logfile log_20231228_103218.821/log_edge.txt
% 	Calib white 424 544 611 598 621 551 525 444
% 	Calib black 121 105 144 147 123 142 124 90
% 	White threshold (of 1000) 700 
% 	Crossing line level (m) 0.080000 
% 1 	Time (sec)
% 2 	Edge valid
% 3 	Left edge position(m)
% 4 	Right edge position (m)
% 5 	Crossing valid
% 6 	Line width (m)
1703755938.9043 0 -0.000 -0.000 0 0.0000
1703755938.9114 0 -0.000 -0.000 0 0.0000
...
1703755939.2154 0 -0.000 -0.000 0 0.0000
1703755939.2243 0 -0.000 -0.000 0 0.0000
1703755939.2321 1 0.051 0.025 0 0.0263
1703755939.2403 1 0.056 0.019 0 0.0364
1703755939.2482 1 0.058 0.016 0 0.0415
...
1703755939.5034 1 0.020 -0.035 0 0.0552
1703755939.5116 1 0.016 -0.038 0 0.0539
1703755939.5195 1 0.013 -0.041 0 0.0541
1703755939.5276 1 0.009 -0.044 0 0.0528
1703755939.5355 1 0.006 -0.048 0 0.0533
1703755939.5433 1 0.001 -0.051 0 0.0524
1703755939.5513 1 -0.001 -0.055 0 0.0536
1703755939.5595 1 -0.004 -0.060 0 0.0560
1703755939.5675 1 -0.007 -0.064 0 0.0575
1703755939.5755 1 -0.012 -0.068 0 0.0550
1703755939.5835 1 -0.014 -0.068 0 0.0538
1703755939.5913 1 -0.016 -0.068 0 0.0519
1703755939.5995 1 -0.019 -0.068 0 0.0485
...
1703755940.6238 1 -0.004 -0.054 0 0.0503
1703755940.6318 1 -0.003 -0.053 0 0.0497
1703755940.6399 1 -0.002 -0.054 0 0.0519
1703755940.6480 1 -0.001 -0.054 0 0.0523
1703755940.6561 1 -0.002 -0.051 0 0.0495
1703755940.6640 1 -0.001 -0.053 0 0.0514
1703755940.6718 1 0.000 -0.054 0 0.0546
1703755940.6801 1 -0.001 -0.053 0 0.0517
1703755940.6879 1 -0.001 -0.051 0 0.0497


Sensor heat map

The sensor has 8 detection points that deliver the difference between illuminated and not as an analog value.

Line-sensor-1 heatmap.png

Figure. Line sensor values (normalized). After 0.3 sec a line is detected (orange-yellow values). The robot is asked to follow the left edge. The robot is therefore turning left to have the left edge centered below the robot. After 2 seconds there is a crossing line to the right. After 4 seconds a crossing line is seen, both left and right, and then nothing.

3D view of sensor values

Line-sensor-1 mesh.png

Figure. The same data as above is now shown with amplitude. The data is normalized so that calibrated white is 1000 and calibrated black is 0. The wooden floor has a level of about 400. The edge is detected with a threshold of 700, if any sensor is above 700, then a line is deemed to be valid. The sample rate is 8ms.

Sensor values

Line-sensor-1 values.png

Figure. The line becomes valid after about 0.3 seconds, here the left edge (red) is seen 6cm to the left (of the robot center line). The robot then turns left, a bit too much, and then keeps the left edge centered with the robot. The line width (green dotted) is estimated to be about 5cm, it is 4.3cm, so a bit over-estimated. After 2 seconds, the line width expands to about 7 cm, but this does not trigger the crossing line flag, as the threshold is set to 8cm. After 4 seconds a crossing line is detected.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox