126 void fixPayload(ecl::PushAndPop<unsigned char> & byteStream);
131 void lockDataAccess();
132 void unlockDataAccess();
139 ecl::Angle<double> getHeading()
const;
140 double getAngularVelocity()
const;
141 VersionInfo versionInfo()
const {
return VersionInfo(firmware.version(), hardware.data.version, unique_device_id.data.udid0, unique_device_id.data.udid1, unique_device_id.data.udid2); }
142 Battery batteryStatus()
const {
return Battery(core_sensors.data.battery, core_sensors.data.charger); }
149 CoreSensors::Data getCoreSensorData()
const {
return core_sensors.data; }
150 DockIR::Data getDockIRData()
const {
return dock_ir.data; }
151 Cliff::Data getCliffData()
const {
return cliff.data; }
152 Current::Data getCurrentData()
const {
return current.data; }
153 Inertia::Data getInertiaData()
const {
return inertia.data; }
154 GpInput::Data getGpInputData()
const {
return gp_input.data; }
155 ThreeAxisGyro::Data getRawInertiaData()
const {
return three_axis_gyro.data; }
156 ControllerInfo::Data getControllerInfoData()
const {
return controller_info.data; }
161 void getWheelJointStates(
double &wheel_left_angle,
double &wheel_left_angle_rate,
162 double &wheel_right_angle,
double &wheel_right_angle_rate);
163 void updateOdometry(ecl::linear_algebra::Vector3d &pose_update,
164 ecl::linear_algebra::Vector3d &pose_update_rates);
169 void resetOdometry();
174 void setBaseControl(
const double &linear_velocity,
const double &angular_velocity);
175 void setLed(
const enum LedNumber &number,
const enum LedColour &colour);
176 void setDigitalOutput(
const DigitalOutput &digital_output);
177 void setExternalPower(
const DigitalOutput &digital_output);
178 void playSoundSequence(
const enum SoundSequences &number);
179 bool setControllerGain(
const unsigned char &type,
const unsigned int &p_gain,
180 const unsigned int &i_gain,
const unsigned int &d_gain);
181 bool getControllerGain();
186 void printSigSlotConnections()
const;
193 bool shutdown_requested;
198 DiffDrive diff_drive;
204 double heading_offset;
209 Parameters parameters;
215 AccelerationLimiter acceleration_limiter;
220 CoreSensors core_sensors;
228 UniqueDeviceID unique_device_id;
229 ThreeAxisGyro three_axis_gyro;
230 ControllerInfo controller_info;
233 PacketFinder packet_finder;
234 PacketFinder::BufferType data_buffer;
237 int version_info_reminder;
238 int controller_info_reminder;
243 void sendBaseControlCommand();
244 void sendCommand(Command command);
245 ecl::Mutex command_mutex;
249 ecl::Mutex data_mutex;
250 Command kobuki_command;
251 Command::Buffer command_buffer;
252 std::vector<short> velocity_commands_debug;
257 EventManager event_manager;
262 std::vector<std::string> log(std::string msg) {
return log(
"",
"", msg); }
263 std::vector<std::string> log(std::string level, std::string msg) {
return log(level,
"", msg); }
264 std::vector<std::string> log(std::string level, std::string name, std::string msg) {
265 std::vector<std::string> ret;
266 if( level !=
"" ) ret.push_back(level);
267 if( name !=
"" ) ret.push_back(name);
268 if( msg !=
"" ) ret.push_back(msg);
275 ecl::Signal<> sig_stream_data, sig_controller_info;
276 ecl::Signal<const VersionInfo&> sig_version_info;
277 ecl::Signal<const std::string&> sig_debug, sig_info, sig_warn, sig_error;
278 ecl::Signal<Command::Buffer&> sig_raw_data_command;
279 ecl::Signal<PacketFinder::BufferType&> sig_raw_data_stream;
280 ecl::Signal<const std::vector<short>&> sig_raw_control_command;
285 ecl::Slot<const std::string&> slot_log_debug, slot_log_info, slot_log_warning, slot_log_error;