We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback
00:00

Formal Metadata

Title
SLAM A 08
Title of Series
Number of Parts
76
Author
License
CC Attribution - NonCommercial - NoDerivatives 3.0 Germany:
You are free to use, copy, distribute and transmit the work or content in unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
1
Thumbnail
04:51
2
Thumbnail
07:18
3
Thumbnail
12:07
4
Thumbnail
05:59
5
Thumbnail
03:20
6
Thumbnail
09:38
7
Thumbnail
07:46
8
9
10
11
12
13
14
15
16
17
18
19
Thumbnail
09:38
20
Thumbnail
08:03
21
Thumbnail
05:55
22
Thumbnail
07:00
23
Thumbnail
05:58
24
Thumbnail
21:58
25
Thumbnail
17:22
26
Thumbnail
08:50
27
Thumbnail
10:06
28
Thumbnail
13:47
29
Thumbnail
04:59
30
Thumbnail
11:21
31
Thumbnail
00:08
32
Thumbnail
05:57
33
Thumbnail
06:28
34
Thumbnail
14:21
35
Thumbnail
04:28
36
Thumbnail
17:03
37
Thumbnail
13:05
38
Thumbnail
00:44
39
Thumbnail
02:50
40
Thumbnail
04:11
41
Thumbnail
03:36
42
Thumbnail
06:17
43
Thumbnail
10:12
44
Thumbnail
04:45
45
Thumbnail
05:37
46
Thumbnail
12:54
47
Thumbnail
00:07
48
Thumbnail
00:06
49
Thumbnail
00:03
50
Thumbnail
00:06
51
Thumbnail
00:02
52
Thumbnail
00:03
53
Thumbnail
06:59
54
Thumbnail
00:24
55
Thumbnail
03:08
56
Thumbnail
03:12
57
Thumbnail
06:55
58
Thumbnail
03:41
59
Thumbnail
02:31
60
Thumbnail
05:53
61
Thumbnail
17:09
62
Thumbnail
01:35
63
Thumbnail
16:58
64
Thumbnail
04:25
65
Thumbnail
05:05
66
Thumbnail
05:08
67
Thumbnail
02:55
68
Thumbnail
15:18
69
Thumbnail
02:26
70
Thumbnail
04:26
71
Thumbnail
07:50
72
Thumbnail
07:27
73
Thumbnail
17:17
74
Thumbnail
08:03
75
Thumbnail
02:52
76
Thumbnail
03:39
Price indexPhysical systemAreaMeasurementRoboticsComputer animation
Subject indexingFunctional (mathematics)Cylinder (geometry)Physical systemQuantum stateAreaMeasurementRange (statistics)RoboticsPoint (geometry)Social classComputer fileDemosceneLevel (video gaming)AngleFlux
AngleComputer animation
Cylinder (geometry)MeasurementRange (statistics)RoboticsQuantum stateComputer animation
AverageCylinder (geometry)Quantum stateMeasurementRange (statistics)DistanceComputer programmingPhysical systemCASE <Informatik>AdditionRadiusLevel of measurementMetreNeuroinformatikDiagram
Hydraulic jumpCylinder (geometry)Range (statistics)Chemical polarityPrice indexAngleAreaDerivation (linguistics)Quantum statePort scannerNichtlineares GleichungssystemFile formatTupleMaxima and minimaPoint (geometry)Computer programmingSubject indexingTotal S.A.Functional (mathematics)Line (geometry)Coordinate systemCylinder (geometry)DistanceElectronic mailing listComputer fileNeuroinformatikPort scannerDerivation (linguistics)Arithmetic meanBitMaxima and minimaLoop (music)Range (statistics)Open setKey (cryptography)DiagramComputer animation
Transcript: English(auto-generated)
There's one more thing I'll ask you to do, but fortunately that is really, really easy. So, we now do have this robot. And the robot's coordinate system is like this. And as I told you earlier, the beams go like that, and back here is an area where no measurements are returned. And now what you just computed is the ray indices that point to the cylinders in the scene and the range.
Now this here starts at index 0 and it ends at index 659. So this may be index 400. I want you now to produce the X-Y coordinates in the robot's coordinate system. So for every detected cylinder given a ray index and a range, I want you to produce the X and Y in the robot's coordinate system.
And for converting the ray index to an angle, there's a function provided in the lego.log file class which is called lego.log file.BeamIndexToAngle. And this will convert the index, like 400 here, to an angle measured in radians.
There's one modification that you'll have to apply to the range measurement. Remember, the robot measures some cylinder. So these are the rays. And from that you would expect a range measurement which looks like that. This should be this ray. And then these other rays, they are closer. So it should look somehow like this.
But as you probably noticed, in reality, the outcome of our light are something like that, even with a peak in here. And in our algorithm, we just computed the average of all those values, which then is here. So in that case, we may get something like that. But as it turns out, this is the correct value for the cylinder's distance.
So the cylinder is here, and we would have to apply the offset of the cylinder radius, which is 55 mm. But in addition, we have to apply a correction here. Empirically, I determined that this correction that we have to apply may be something like 90 mm.
And so whenever you convert one of your resulting ranges to the xy coordinates, remember that you get something like this range, and before converting it to xy, you will have to add up 90 mm. And this is called the cylinder offset. So and this is the final modification I'll ask you for.
The program is FindCylinders Cartesian, and it consists of the compute derivative, which you know already, the FindCylinders, which you'll just have to fill in from your previous solution, and this new function, which you'll have to program. So this function gets a list of all the cylinders that were detected in one scan.
This might be zero or more cylinders. And then for every cylinder, it takes the total beam index range, and from that has to compute an xy coordinate. And just for now, I have put 00 here. And now let's have a look at the main function, which I modified a little bit. So there's still the minimum valid distance and the depth jump,
and there's now the cylinder offset, which is a global variable that you may use in here in the function you have to program. It still opens the log file and reads the log file, but now instead of drawing the result, it will produce a file called cylinders text, and it will write for every single scan one line to this file, which starts with DC, meaning detected cylinders,
and will then list all the Cartesian coordinates of the cylinders you've just found. So in the loop, it calls the computation of the derivative, it calls the FindCylinders, and then it calls your new function computeCartesianCoordinates.

Recommendations