-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkobuki_manager.h
230 lines (145 loc) · 5.49 KB
/
kobuki_manager.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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// To add your copyright and license header
#ifndef _KOBUKI_MANAGER_H_
#define _KOBUKI_MANAGER_H_
#include <node.h>
#include <v8.h>
#include <csignal>
#include <ecl/time.hpp>
#include <ecl/sigslots.hpp>
#include <ecl/geometry/pose2d.hpp>
#include <ecl/linear_algebra.hpp>
#include "kobuki_driver/kobuki.hpp"
#include <string>
#include "gen/generator_helper.h"
#include "gen/array_helper.h"
#include "gen/core_sensors_data.h"
#include "gen/dockir_data.h"
#include "gen/cliff_data.h"
#include "gen/current_data.h"
#include "gen/gp_input_data.h"
#include "gen/inertia_data.h"
#include "gen/three_axis_gyro_data.h"
#include "gen/controller_info_data.h"
#include "gen/battery.h"
#include "gen/version_info.h"
#include "gen/wheel_joint_states.h"
#include "gen/digital_output.h"
#include "gen/pose_update_data.h"
//#include "gen/thread-event-helper.h"
#include "gen/promise-helper.h"
class KobukiManager {
public:
KobukiManager();
explicit KobukiManager(const std::string& sigslotsNamespace);
~KobukiManager();
KobukiManager& operator = (const KobukiManager& rhs);
public:
//kobuki APIs
CoreSensorsData getCoreSensorData();
DockIRData getDockIRData();
CliffData getCliffData();
CurrentData getCurrentData();
GpInputData getGpInputData();
InertiaData getInertiaData();
ThreeAxisGyroData getRawInertiaData();
ControllerInfoData getControllerInfoData();
Battery batteryStatus();
double getHeading();
double getAngularVelocity();
VersionInfo versionInfo();
WheelJointStates getWheelJointStates(const WheelJointStates& wheelJointStates);
bool isAlive();
bool isEnabled();
bool isShutdown();
void resetOdometry();
void setBaseControl(const double& linear, const double& angular);
void setLed(const std::string& ledNo, const std::string& ledColor);
void setDigitalOutput(const DigitalOutput& digitalOutput);
void setExternalPower(const DigitalOutput& digitalOutput);
void playSoundSequence(const std::string& soundSequence);
bool setControllerGain(const ControllerInfoData& controllerInfoData);
bool getControllerGain();
PoseUpdateData updateOdometry();
PoseUpdateData updateOdometry(const PoseUpdateData& pose);
//sigslots callbacks
void callNewDataEvent();
void callRosDebug(const std::string& ros_debug);
void callRosInfo(const std::string& ros_info);
void callRosWarn(const std::string& ros_warn);
void callRosError(const std::string& ros_error);
void callButtonEvent(const kobuki::ButtonEvent& button_event);
void callBumperEvent(const kobuki::BumperEvent& bumper_event);
void callCliffEvent(const kobuki::CliffEvent& cliff_event);
void callWheelEvent(const kobuki::WheelEvent& wheel_event);
void callPowerEvent(const kobuki::PowerEvent& power_event);
void callInputEvent(const kobuki::InputEvent& input_event);
void callRobotEvent(const kobuki::RobotEvent& robot_event);
void callVersionInfo(const kobuki::VersionInfo& version_info);
//v8 event callbacks
static void newDataEvent(uv_async_t *handle);
static void rosDebug(uv_async_t *handle);
static void rosInfo(uv_async_t *handle);
static void rosWarn(uv_async_t *handle);
static void rosError(uv_async_t *handle);
static void buttonEvent(uv_async_t *handle);
static void bumperEvent(uv_async_t *handle);
static void cliffEvent(uv_async_t *handle);
static void wheelEvent(uv_async_t *handle);
static void powerEvent(uv_async_t *handle);
static void inputEvent(uv_async_t *handle);
static void robotEvent(uv_async_t *handle);
static void versionInfo(uv_async_t *handle);
v8::Handle<v8::Promise> connect(const std::string& eventName);
void disconnect(const std::string& eventName);
void SetJavaScriptThis(v8::Local<v8::Object> JavaScriptThis) {
js_this_.Reset(JavaScriptThis);
}
private:
kobuki::Kobuki kobuki;
ecl::Pose2D<double> pose_ecl;
std::string sigslots_namespace = "/kobuki";
Nan::Persistent<v8::Object> js_this_;
//slots name
ecl::Slot<> slot_stream_data;
ecl::Slot<const std::string&> slot_ros_debug;
ecl::Slot<const std::string&> slot_ros_info;
ecl::Slot<const std::string&> slot_ros_warn;
ecl::Slot<const std::string&> slot_ros_error;
ecl::Slot<const kobuki::ButtonEvent&> slot_button_event;
ecl::Slot<const kobuki::BumperEvent&> slot_bumper_event;
ecl::Slot<const kobuki::CliffEvent&> slot_cliff_event;
ecl::Slot<const kobuki::WheelEvent&> slot_wheel_event;
ecl::Slot<const kobuki::PowerEvent&> slot_power_event;
ecl::Slot<const kobuki::InputEvent&> slot_input_event;
ecl::Slot<const kobuki::RobotEvent&> slot_robot_event;
ecl::Slot<const kobuki::VersionInfo&> slot_version_info;
ecl::Signal<const kobuki::VersionInfo&> signal_version_info;
//uv_async_t name
uv_async_t async_stream_data;
uv_async_t async_button_event;
uv_async_t async_bumper_event;
uv_async_t async_cliff_event;
uv_async_t async_wheel_event;
uv_async_t async_power_event;
uv_async_t async_input_event;
uv_async_t async_robot_event;
uv_async_t async_version_info;
uv_async_t async_ros_debug;
uv_async_t async_ros_info;
uv_async_t async_ros_warn;
uv_async_t async_ros_error;
//data
kobuki::ButtonEvent button_event;
kobuki::BumperEvent bumper_event;
kobuki::CliffEvent cliff_event;
kobuki::WheelEvent wheel_event;
kobuki::PowerEvent power_event;
kobuki::InputEvent input_event;
kobuki::RobotEvent robot_event;
kobuki::VersionInfo *version_info;
std::string ros_debug;
std::string ros_info;
std::string ros_warn;
std::string ros_error;
};
#endif // _KOBUKI_MANAGER_H_