-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathkobuki.h
195 lines (155 loc) · 4.31 KB
/
kobuki.h
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-05-28 hw630 the first version
*/
#ifndef KOBUKI_H_
#define KOBUKI_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <rtthread.h>
#ifndef KOBUKI_PACKET_BUFFER
#define KOBUKI_PACKET_BUFFER 128
#endif
#ifndef KOBUKI_SYNC_TIMEOUT
#define KOBUKI_SYNC_TIMEOUT 100
#endif
#define KOBUKI_RECV_HARDWARE_EVENT (1 << 1)
#define KOBUKI_RECV_FIRMWARE_EVENT (1 << 2)
#define KOBUKI_RECV_UUID_EVENT (1 << 3)
#define KOBUKI_RECV_CONTROLLER_INFO_EVENT (1 << 4)
struct kobuki {
// triggered when new data comes in
struct rt_event event;
// odometry
float x;
float y;
float theta;
float v_x;
float v_theta;
// connection status
uint8_t connected;
uint32_t last_sync_tick;
uint16_t timestamp;
// bumper flag
uint8_t bumper;
uint8_t left_bumper;
uint8_t central_bumper;
uint8_t right_bumper;
// wheel drop flag
uint8_t wheel_drop;
uint8_t left_wheel_drop;
uint8_t right_wheel_drop;
// cliff flag
uint8_t cliff;
uint8_t left_cliff;
uint8_t central_cliff;
uint8_t right_cliff;
// raw cliff sensor data
uint16_t left_cliff_adc;
uint16_t central_cliff_adc;
uint16_t right_cliff_adc;
// encoder data
uint16_t left_encoder;
uint16_t right_encoder;
// motor pwm
int8_t left_pwm;
int8_t right_pwm;
// button status
uint8_t button;
uint8_t button_0;
uint8_t button_1;
uint8_t button_2;
// charger status
uint8_t charger;
uint8_t charger_discharging;
uint8_t charger_docking_charged;
uint8_t charger_docking_charging;
uint8_t charger_adapter_charged;
uint8_t charger_adapter_charging;
// battery level
uint8_t battery;
// wheel overcurrent flag
uint8_t wheel_overcurrent;
uint8_t left_wheel_overcurrent;
uint8_t right_wheel_overcurrent;
// docking id flag
uint8_t docking_ir_left;
uint8_t docking_ir_center;
uint8_t docking_ir_right;
uint8_t docking_ir_near_left;
uint8_t docking_ir_near_center;
uint8_t docking_ir_near_right;
uint8_t docking_ir_far_left;
uint8_t docking_ir_far_center;
uint8_t docking_ir_far_right;
// inertial data
uint16_t inertial_angle;
uint16_t inertial_angle_rate;
// motor current
uint16_t left_motor_current;
uint16_t right_motor_current;
// version
uint8_t harware_version_major;
uint8_t harware_version_minor;
uint8_t harware_version_patch;
uint8_t firmware_version_major;
uint8_t firmware_version_minor;
uint8_t firmware_version_patch;
// uuid
uint32_t uuid_0;
uint32_t uuid_1;
uint32_t uuid_2;
// digital input
uint16_t digital_input;
uint8_t digital_input_0;
uint8_t digital_input_1;
uint8_t digital_input_2;
uint8_t digital_input_3;
// analog input
uint16_t analog_input_0;
uint16_t analog_input_1;
uint16_t analog_input_2;
uint16_t analog_input_3;
// PID controller
uint32_t kp;
uint32_t ki;
uint32_t kd;
uint8_t packet[KOBUKI_PACKET_BUFFER];
};
typedef struct kobuki* kobuki_t;
int kobuki_init(kobuki_t robot);
void kobuki_loop(kobuki_t robot);
void kobuki_close(kobuki_t robot);
void kobuki_set_speed(double tv, double rv);
void kobuki_enalbe_3v3(void);
void kobuki_enable_5v(void);
void kobuki_enable_12v_5a(void);
void kobuki_enable_12v_1_5a(void);
void kobuki_set_led1_red(void);
void kobuki_set_led1_green(void);
void kobuki_set_led2_red(void);
void kobuki_set_led2_green(void);
void kobuki_set_controller_gain(uint32_t kp, uint32_t ki, uint32_t kd);
void kobuki_get_controller_gain(void);
void kobuki_reset_controller_gain(void);
void kobuki_get_hardware_version(void);
void kobuki_get_firmware_version(void);
void kobuki_get_uuid(void);
void kobuki_play_sound(uint16_t note, uint8_t duration);
void kobuki_play_sound_on(void);
void kobuki_play_sound_off(void);
void kobuki_play_sound_recharge(void);
void kobuki_play_sound_button(void);
void kobuki_play_sound_error(void);
void kobuki_play_sound_cleaning_start(void);
void kobuki_play_sound_cleaning_end(void);
#ifdef __cplusplus
}
#endif
#endif /* KOBUKI_H_ */