User manual
Version: v4.5.2
1
// C API example : framePtr is a ftkFrameQuery pointer
2
r12 = framePtr -> markers [ 0u ]. rotation [ 1u ][ 2u ];
// this is -0.0828
3
// C++ API example : frame is a atracsys :: FrameData instance
4
r21 = frame. markers (). front (). rotation ().at( 2u ).at( 1u );
// this is -0.0336
Listing A.1: Access to the rotation components, from both C and C++ API, same
R
and
⃗t
as above.
The corresponding reconstructed 3D points are:
⃗
x
0
=
(
191
.
153
−
110
.
391
873
.
010
)
T
⃗
x
1
=
(
198
.
294
−
75
.
553
870
.
821
)
T
⃗
x
2
=
(
237
.
517
−
75
.
823
874
.
934
)
T
⃗
x
3
=
(
221
.
837
−
116
.
360
876
.
675
)
T
Now, using homogeneous coordinates, it can be checked easily that:
(
R
⃗t
0
1
)
·
(
⃗
p
i
1
)
≃
(
⃗
x
i
1
)
∀
i
∈
[0; 3]
(
R
⃗t
0
1
)
·
(
⃗
p
0
1
)
=
190
.
802
−
110
.
569
872
.
977
1
≃
(
⃗
x
0
1
)
(
R
⃗t
0
1
)
·
(
⃗
p
1
1
)
=
198
.
099
−
75
.
386
870
.
775
1
≃
(
⃗
x
1
1
)
(
R
⃗t
0
1
)
·
(
⃗
p
2
1
)
=
237
.
889
−
75
.
902
874
.
949
1
≃
(
⃗
x
2
1
)
(
R
⃗t
0
1
)
·
(
⃗
p
3
1
)
=
222
.
010
−
116
.
581
876
.
743
1
≃
(
⃗
x
3
1
)
A.3 Inverting a marker pose
If the position and orientation of a marker is needed in the coordinate system of another marker, the trans-
formation should be inverted. When homogeneous coordinates are used, this invertion is trivial:
X
tracker
=
T
·
X
marker
X
marker
=
T
−
1
·
X
tracker
If usual 3-dimensional coordinates are used, the invertion reads:
⃗
x
tracker
=
R
·
⃗
x
marker
+
⃗t
⃗
x
marker
=
R
−
1
·
⃗
x
tracker
−
R
−
1
·
⃗t
As
R
is a rotation matrix,
R
−
1
can be trivially obtained using
R
−
1
=
R
T
. A common mistake is to use
−
⃗t
instead of
−
R
−
1
·
⃗t
.
Atracsys / 2020-06-17 / 16:48:00
100 / 113