Revision a3c54343
| devices/DiWheelDrive/amiro_map.cpp | ||
|---|---|---|
| 127 | 127 |
// Update travel distance |
| 128 | 128 |
// check if the nodes of the specific strategy where visited |
| 129 | 129 |
if (state.strategy |
| 130 |
== (nodeList[state.current].visited & nodeList[state.next].visited)) {
|
|
| 130 |
== nodeList[state.current].visited) {
|
|
| 131 | 131 |
flag |= 0x8; |
| 132 | 132 |
// only update distance if both nodes were visited |
| 133 | 133 |
// Calculate estimated length of the edge |
| 134 | 134 |
if (state.strategy == 0x01) {
|
| 135 | 135 |
// Amiro is driving on the right edge |
| 136 |
if (state.eLength == 0) {
|
|
| 136 |
// only calculate edge length if the node is already vivited |
|
| 137 |
if ((state.eLength == 0) && (state.strategy == nodeList[state.current].visited)) {
|
|
| 137 | 138 |
state.eLength = calculateDist(&nodeList[state.next].pR, |
| 138 | 139 |
&nodeList[state.current].pR); |
| 139 | 140 |
} |
| 140 |
state.dist = calculateDist(&nodeList[state.current].pR, ¤tPos) * 100 / |
|
| 141 |
state.eLength; |
|
| 141 |
state.dist = calculateDist(&nodeList[state.current].pR, ¤tPos); |
|
| 142 | 142 |
} else {
|
| 143 | 143 |
// Driving on the left edge |
| 144 |
if (state.eLength == 0) {
|
|
| 145 |
state.eLength = |
|
| 146 |
calculateDist(&nodeList[state.next].pL, &nodeList[state.current].pL); |
|
| 144 |
if ((state.eLength == 0) && |
|
| 145 |
(state.strategy == nodeList[state.current].visited)) {
|
|
| 146 |
state.eLength = calculateDist(&nodeList[state.next].pR, |
|
| 147 |
&nodeList[state.current].pR); |
|
| 147 | 148 |
} |
| 148 |
state.dist = calculateDist(&nodeList[state.current].pL, ¤tPos) * 100 / state.eLength;
|
|
| 149 |
state.dist = calculateDist(&nodeList[state.current].pL, ¤tPos); |
|
| 149 | 150 |
|
| 150 | 151 |
} |
| 151 | 152 |
} |
| ... | ... | |
| 156 | 157 |
return (uint32_t) sqrt(pow((p2->x - p1->x)/10000, 2) + |
| 157 | 158 |
pow((p2->y - p1->y)/10000, 2)); |
| 158 | 159 |
} |
| 160 |
|
|
| 161 |
uint8_t trackUpdate(uint16_t WL, uint16_t WR, LineFollowStrategy strategy, ut_states state){
|
|
| 162 |
|
|
| 163 |
} |
|
| devices/DiWheelDrive/amiro_map.hpp | ||
|---|---|---|
| 5 | 5 |
#include "linefollow.hpp" |
| 6 | 6 |
#include <amiroosconf.h> |
| 7 | 7 |
#include <ch.hpp> |
| 8 |
#include <cstdint> |
|
| 8 | 9 |
#include <math.h> |
| 9 | 10 |
|
| 10 | 11 |
|
| ... | ... | |
| 39 | 40 |
class AmiroMap {
|
| 40 | 41 |
public: |
| 41 | 42 |
map_state * get_state() { return &state; }
|
| 43 |
uint8_t getNodeCount(){ return nodeCount; }
|
|
| 44 |
node * getNodeList(){return nodeList; }
|
|
| 45 |
|
|
| 42 | 46 |
|
| 43 | 47 |
AmiroMap(Global *global) : global{global} {}
|
| 44 | 48 |
|
| ... | ... | |
| 64 | 68 |
*/ |
| 65 | 69 |
uint8_t update(uint16_t WL, uint16_t WR, LineFollowStrategy strategy); |
| 66 | 70 |
|
| 71 |
|
|
| 72 |
/** |
|
| 73 |
If this is called instead of update new fixpoints can automativally |
|
| 74 |
get detected and will be added to the current nodeList. |
|
| 75 |
Internally the update will be called. |
|
| 76 |
If there are no nodes in the node list they will be created. |
|
| 77 |
*/ |
|
| 78 |
uint8_t trackUpdate(uint16_t WL, uint16_t WR, LineFollowStrategy strategy, ut_states state); |
|
| 79 |
|
|
| 67 | 80 |
private: |
| 68 | 81 |
Global *global; |
| 69 | 82 |
LineFollowStrategy lfStrategy = LineFollowStrategy::EDGE_RIGHT; |
Also available in: Unified diff