aboutsummaryrefslogtreecommitdiff
path: root/docs/user_guide/aruco_markers_pipeline/aruco_markers_description.md
blob: 061fb19d6a6d7c496ad0237b81933bc9751f06de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Setup ArUco markers into a scene
================================

First of all, ArUco markers needs to be printed and placed into the scene.

## Print ArUco markers from a ArUco dictionary

ArUco markers always belongs to a set of markers called ArUco markers dictionary.

![ArUco dictionaries](../../img/aruco_dictionaries.png)

Many ArUco dictionaries exist with properties concerning the format, the number of markers or the difference between each markers to avoid error in tracking.

Here is the documention [about ArUco markers dictionaries](https://docs.opencv.org/3.4/d9/d6a/group__aruco.html#gac84398a9ed9dd01306592dd616c2c975).

The creation of [ArUcoMarkers](../../argaze.md/#argaze.ArUcoMarkers.ArUcoMarker) pictures from a dictionary is illustrated in the code below:
 
``` python
from argaze.ArUcoMarkers import ArUcoMarkersDictionary

# Create a dictionary of specific April tags
aruco_dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary('DICT_APRILTAG_16h5')

# Export marker n°5 as 3.5 cm picture with 300 dpi resolution
aruco_dictionary.create_marker(5, 3.5).save('./markers/', 300)

# Export all dictionary markers as 3.5 cm pictures with 300 dpi resolution
aruco_dictionary.save('./markers/', 3.5, 300)
```

!!! note
      There is **A4_DICT_APRILTAG_16h5_5cm_0-7.pdf** file located in *./src/argaze/ArUcoMarkers/utils/* folder ready to be printed on A4 paper sheet.

Let's print some of them before to go further.

!!! warning
	Print markers with a blank zone around them to help in their detection.

## Describe ArUco markers place

Once [ArUcoMarkers](../../argaze.md/#argaze.ArUcoMarkers.ArUcoMarker) pictures are placed into a scene it is possible to describe their 3D places into a file.

![ArUco scene](../../img/aruco_scene.png)

Where ever the origin point is, all markers places need to be described in a [right-handed 3D axis](https://robotacademy.net.au/lesson/right-handed-3d-coordinate-frame/) where:

* +X is pointing to the right,
* +Y is pointing to the top,
* +Z is pointing to the backward.

!!! warning
	All ArUco markers spatial values must be given in **centimeters**.

### Edit OBJ file description

OBJ file format could be exported from most 3D editors.

``` obj
o DICT_APRILTAG_16h5#0_Marker
v -5.000000 14.960000 0.000000
v 0.000000 14.960000 0.000000
v -5.000000 19.959999 0.000000
v 0.000000 19.959999 0.000000
vn 0.0000 0.0000 1.0000
s off
f 1//1 2//1 4//1 3//1
o DICT_APRILTAG_16h5#1_Marker
v 25.000000 14.960000 0.000000
v 30.000000 14.960000 0.000000
v 25.000000 19.959999 0.000000
v 30.000000 19.959999 0.000000
vn 0.0000 0.0000 1.0000
s off
f 5//2 6//2 8//2 7//2
o DICT_APRILTAG_16h5#2_Marker
v -5.000000 -5.000000 0.000000
v 0.000000 -5.000000 0.000000
v -5.000000 0.000000 0.000000
v 0.000000 0.000000 0.000000
vn 0.0000 0.0000 1.0000
s off
f 9//3 10//3 12//3 11//3
o DICT_APRILTAG_16h5#3_Marker
v 25.000000 -5.000000 0.000000
v 30.000000 -5.000000 0.000000
v 25.000000 0.000000 0.000000
v 30.000000 0.000000 0.000000
vn 0.0000 0.0000 1.0000
s off
f 13//4 14//4 16//4 15//4
```

Here are common OBJ file features needed to describe ArUco markers places:  

* Object lines (starting with *o* key) indicate markers dictionary and id by following this format: **DICTIONARY**#**ID**\_Marker.
* Vertice lines (starting with *v* key) indicate markers corners. The marker size will be automatically deducted from the geometry.
* Plane normals (starting with *vn* key) need to be exported for further pose estimation.
* Face (starting with *f* key) link vertices and normals indexes together.

!!! warning
	All markers must have the same size and belong to the same dictionary.

### Edit JSON file description

JSON file format allows to describe markers places using translation and euler angle rotation vectors.

``` json
{
    "dictionary": "DICT_APRILTAG_16h5",
    "marker_size": 5,
    "places": {
        "0": {
            "translation": [-2.5, 17.5, 0],
            "rotation": [0.0, 0.0, 0.0]
        },
        "1": {
            "translation": [27.5, 17.5, 0],
            "rotation": [0.0, 0.0, 0.0]
        },
        "2": {
            "translation": [-2.5, -2.5, 0],
            "rotation": [0.0, 0.0, 0.0]
        },
        "3": {
            "translation": [27.5, -2.5, 0],
            "rotation": [0.0, 0.0, 0.0]
        }
    }
}
```