amiro-os / devices / DiWheelDrive / userthread.hpp @ 61544eee
History | View | Annotate | Download (2.392 KB)
1 | 58fe0e0b | Thomas Schöpping | #ifndef AMIRO_USERTHREAD_H_
|
---|---|---|---|
2 | #define AMIRO_USERTHREAD_H_
|
||
3 | |||
4 | #include <ch.hpp> |
||
5 | #include <amiroosconf.h> |
||
6 | 181f2892 | galberding | #include <amiro/Color.h> |
7 | 05d54823 | galberding | |
8 | 181f2892 | galberding | |
9 | // Speed when driving towards the docking station
|
||
10 | #define CHARGING_SPEED 5 |
||
11 | 61544eee | galberding | #define DETECTION_SPEED 10 |
12 | #define DIST_THRESH 100 |
||
13 | #define RELEASE_COUNT 200 |
||
14 | 181f2892 | galberding | // Thresh to determain how much update steps should pass while alining
|
15 | 61544eee | galberding | #define MAX_CORRECTION_STEPS 300 |
16 | 181f2892 | galberding | // Thresh for wheel proxy sensors, when summed values fall below the state changes
|
17 | #define PROXY_WHEEL_THRESH 18000 |
||
18 | e2002d0e | galberding | // Thresh for detecting obsticles
|
19 | 61544eee | galberding | #define PROXY_RING_THRESH 15000 |
20 | 181f2892 | galberding | // Thresh for how long (update steps) the front sensors are allowed to detect white
|
21 | 61544eee | galberding | #define WHITE_COUNT_THRESH 150 |
22 | 181f2892 | galberding | // Rotation around 180 degrees in microradian
|
23 | #define ROTATION_180 3141592 |
||
24 | // Rotation around -20 degrees in microradian
|
||
25 | #define ROTATION_20 -349065 |
||
26 | #define ROTATION_DURATION 10000 |
||
27 | |||
28 | 61544eee | galberding | #define RING_PROX_FRONT_THRESH 18000 |
29 | #define PROX_MAX_VAL 65430 |
||
30 | 58fe0e0b | Thomas Schöpping | |
31 | namespace amiro {
|
||
32 | |||
33 | 181f2892 | galberding | |
34 | 58fe0e0b | Thomas Schöpping | class UserThread : public chibios_rt::BaseStaticThread<USER_THREAD_STACK_SIZE> |
35 | { |
||
36 | 181f2892 | galberding | |
37 | // Messages which can be received and trigger state changes
|
||
38 | public:
|
||
39 | enum msg_content{
|
||
40 | STOP, |
||
41 | START, |
||
42 | EDGE_LEFT, |
||
43 | EDGE_RIGHT, |
||
44 | FUZZY, |
||
45 | DOCK, |
||
46 | UNDOCK, |
||
47 | CHARGE |
||
48 | }; |
||
49 | |||
50 | // States of user thread state machine
|
||
51 | enum states{
|
||
52 | FOLLOW_LINE, |
||
53 | RELEASE, |
||
54 | 019224ff | galberding | RELEASE_TO_CORRECT, |
55 | 181f2892 | galberding | CHARGING, |
56 | DETECT_STATION, |
||
57 | CORRECT_POSITIONING, |
||
58 | REVERSE, |
||
59 | CHECK_POSITIONING, |
||
60 | ba75ee1d | galberding | CHECK_VOLTAGE, |
61 | 181f2892 | galberding | IDLE |
62 | }; |
||
63 | |||
64 | |||
65 | |||
66 | 58fe0e0b | Thomas Schöpping | explicit UserThread();
|
67 | |||
68 | virtual ~UserThread();
|
||
69 | |||
70 | virtual msg_t main();
|
||
71 | 181f2892 | galberding | |
72 | private:
|
||
73 | void setRpmSpeed(const int (&rpmSpeed)[2]); |
||
74 | void lightOneLed(Color color, int idx); |
||
75 | void lightAllLeds(Color color);
|
||
76 | /**
|
||
77 | * Uses light ring indicate the state of charge.
|
||
78 | */
|
||
79 | void showChargingState();
|
||
80 | void checkForMotion();
|
||
81 | bool checkPinVoltage();
|
||
82 | bool checkPinEnabled();
|
||
83 | e2002d0e | galberding | uint16_t getProxyRingSum(); |
84 | 181f2892 | galberding | |
85 | /**
|
||
86 | * Check if current position changes when the wheel are deactivated.
|
||
87 | *
|
||
88 | * When AMiRo drives towards the loading station, it stops when a specific marker is reached.
|
||
89 | * In order to validate that the AMiRo is correctly positioned in the loading station
|
||
90 | * the wheels are turned off. When the position remains the same the docking procedure
|
||
91 | * was successful (return 1) otherwise a correction is needed (return 0).
|
||
92 | */
|
||
93 | int checkDockingSuccess();
|
||
94 | 58fe0e0b | Thomas Schöpping | }; |
95 | |||
96 | } // end of namespace amiro
|
||
97 | |||
98 | #endif // AMIRO_USERTHREAD_H_ |