amiro-os / devices / DiWheelDrive / amiro_map.hpp @ b8b3a9c9
History | View | Annotate | Download (1.775 KB)
1 | e1f1c4b5 | galberding | #ifndef AMIRO_MAP
|
---|---|---|---|
2 | #define AMIRO_MAP
|
||
3 | |||
4 | #include "global.hpp" |
||
5 | b8b3a9c9 | galberding | #include "linefollow.hpp" |
6 | e1f1c4b5 | galberding | #include <amiroosconf.h> |
7 | b8b3a9c9 | galberding | #include <ch.hpp> |
8 | #include <cstdint> |
||
9 | e1f1c4b5 | galberding | |
10 | b8b3a9c9 | galberding | #define MAX_NODES 10 |
11 | #define NODE_ATTRIBUTES 3 |
||
12 | e1f1c4b5 | galberding | |
13 | b8b3a9c9 | galberding | namespace amiro {
|
14 | e1f1c4b5 | galberding | |
15 | b8b3a9c9 | galberding | struct node {
|
16 | uint8_t id; |
||
17 | uint8_t flag; |
||
18 | uint8_t left; |
||
19 | uint8_t right; |
||
20 | types::position pL; // Left
|
||
21 | types::position pR; // Right
|
||
22 | types::position pB; // Back
|
||
23 | }; |
||
24 | e1f1c4b5 | galberding | |
25 | b8b3a9c9 | galberding | class AmiroMap { |
26 | public:
|
||
27 | uint8_t get_next() { return next; }
|
||
28 | e1f1c4b5 | galberding | |
29 | b8b3a9c9 | galberding | void set_next( uint8_t next) { this->next = next; } |
30 | e1f1c4b5 | galberding | |
31 | b8b3a9c9 | galberding | uint8_t get_current() { return current; }
|
32 | |||
33 | void set_current( uint8_t current) { this->current = current; } |
||
34 | |||
35 | node* get_nodeList() { return nodeList; }
|
||
36 | |||
37 | uint8_t get_nodeCount() { return nodeCount; }
|
||
38 | |||
39 | void set_nodeCount( uint8_t nodeCount) { this->nodeCount = nodeCount; } |
||
40 | e1f1c4b5 | galberding | |
41 | b8b3a9c9 | galberding | bool get_valid() { return valid; } |
42 | |||
43 | void set_valid( bool valid) { this->valid = valid; } |
||
44 | |||
45 | AmiroMap(Global *global) : global{global} {} |
||
46 | |||
47 | /**
|
||
48 | * Initialize a new map from configuration.
|
||
49 | * @param config map configuration array
|
||
50 | *
|
||
51 | */
|
||
52 | void initialize(uint8_t (&config)[MAX_NODES][NODE_ATTRIBUTES]);
|
||
53 | |||
54 | |||
55 | /**
|
||
56 | Update the internal map state according to the detected fixpoint
|
||
57 | This function should be called for a generic update, each can cycle and in
|
||
58 | case a fixpoint on one side is detected.
|
||
59 | Internal state maschine will go into an error state in case both sensors are black.
|
||
60 | |||
61 | @param left fixpoint on left side detected
|
||
62 | @param right fixpoint on right side detected
|
||
63 | @param strategy current line follow strategy
|
||
64 | |||
65 | |||
66 | */
|
||
67 | void update(bool left, bool right, LineFollowStrategy strategy); |
||
68 | |||
69 | private:
|
||
70 | Global *global; |
||
71 | bool valid = false; |
||
72 | uint8_t nodeCount = 0;
|
||
73 | node nodeList[MAX_NODES]; |
||
74 | uint8_t current = 0;
|
||
75 | uint8_t next = 0;
|
||
76 | }; |
||
77 | }; // namespace amiro
|
||
78 | e1f1c4b5 | galberding | |
79 | #endif /* AMIRO_MAP */ |