8 #ifndef INCLUDE_WALLABY_CREATE_HPP_ 9 #define INCLUDE_WALLABY_CREATE_HPP_ 40 typedef unsigned int speed_t;
59 void append(
const unsigned char& byte);
60 void append(
const unsigned char *data,
const size_t& size);
63 void remove(
const size_t& i,
const size_t& len = 1);
65 const unsigned char *data()
const;
68 unsigned char byte(
const size_t& i);
73 std::vector<unsigned char> m_script;
118 unsigned char distance[2];
119 unsigned char angle[2];
128 unsigned char voltage[2];
131 unsigned char batteryCharge[2];
132 unsigned char batteryCapacity[2];
140 unsigned char wallSignal[2];
141 unsigned char cliffLeftSignal[2];
142 unsigned char cliffFrontLeftSignal[2];
143 unsigned char cliffFrontRightSignal[2];
144 unsigned char cliffRightSignal[2];
146 unsigned char userAnalogInput[2];
161 char rightVelocity[2];
162 char leftVelocity[2];
170 unsigned char leftEncoderCounts[2];
171 unsigned char rightEncoderCounts[2];
174 unsigned char lightBumpLeftSignal[2];
175 unsigned char lightBumpFrontLeftSignal[2];
176 unsigned char lightBumpCenterLeftSignal[2];
177 unsigned char lightBumpCenterRightSignal[2];
178 unsigned char lightBumpFrontRightSignal[2];
179 unsigned char lightBumpRightSignal[2];
181 char leftMotorCurrent[2];
182 char rightMotorCurrent[2];
183 char mainBrushMotorCurrent[2];
184 char sideBrushMotorCurrent[2];
195 class CliffFrontLeft;
196 class CliffFrontRight;
200 class CliffLeftSignal;
201 class CliffFrontLeftSignal;
202 class CliffFrontRightSignal;
203 class CliffRightSignal;
204 class CargoBayAnalogSignal;
205 class CargoBayDigitalInputs;
208 class BatteryTemperature;
210 class BatteryCapacity;
215 class WheelDropRight;
217 class WheelDropCaster;
220 class LightBumpFrontLeft;
221 class LightBumpFrontRight;
222 class LightBumpRight;
223 class LightBumpCenterLeft;
224 class LightBumpCenterRight;
226 class LightBumpLeftSignal;
227 class LightBumpFrontLeftSignal;
228 class LightBumpFrontRightSignal;
229 class LightBumpRightSignal;
230 class LightBumpCenterLeftSignal;
231 class LightBumpCenterRightSignal;
281 bool connect(
const BaudRate baudRate);
296 bool isConnected()
const;
299 void setPassiveMode();
308 bool write(
const unsigned char& c);
311 bool write(
const unsigned char *data,
const size_t& len);
328 int read(
unsigned char *data,
const size_t& len);
337 bool blockingRead(
unsigned char *data,
const size_t& size,
unsigned timeout = 25);
343 return blockingRead(reinterpret_cast<unsigned char *>(&data),
sizeof(T),
344 timeout ? timeout :
sizeof(T) * 7);
347 void setLeds(
const bool& advance,
const bool& play,
const unsigned char& color,
const unsigned char& brightness);
349 void drive(
const short& velocity,
const short& radius);
350 void driveDirect(
const short& left,
const short& right);
351 void driveStraight(
const short& speed);
360 void turn(
const short& angle,
const unsigned short& speed);
368 void move(
const short& millimeters,
const unsigned short& speed);
374 void spin(
const short& speed);
381 short angularVelocity()
const;
383 void spinClockwise(
const short& speed);
384 void spinCounterClockwise(
const short& speed);
386 bool setBaudRate(
const unsigned char& baudCode);
388 void setDistance(
const int distance);
389 void setAngle(
const int angle);
441 void setRefreshRate(
const unsigned short& refreshRate);
442 const unsigned short& refreshRate()
const;
449 static Create *instance();
462 pthread_mutex_lock(&m_mutex);
469 pthread_mutex_unlock(&m_mutex);
481 void setLocalBaudRate(
const speed_t& baudRate);
489 inline void lazyDelete(T *&ptr)
494 inline timeval timeOfDay()
const 498 GetSystemTimeAsFileTime(&ft);
499 unsigned long t = (ULONGLONG)ft.dwLowDateTime + ((ULONGLONG)(ft.dwHighDateTime) << 32);
502 tv.tv_usec = t % 1000L;
503 tv.tv_sec = (t - tv.tv_usec) / 1000L;
507 gettimeofday(&ret, NULL);
512 inline bool hasRequiredTimePassed(
const timeval& timestamp)
const 515 timeval current = timeOfDay();
517 timersub(¤t, ×tamp, &result);
518 const long msecs = result.tv_sec * 1000 + result.tv_usec / 1000;
519 return msecs > m_refreshRate;
525 inline double timevalToFloat(
const timeval& tv)
527 return ((
double)tv.tv_sec) + ((double)tv.tv_usec / 1000000.0);
530 inline float deg2rad(
const float& deg)
532 return deg / 180.0 *
PI;
537 void updateSensorPacket1();
538 void updateSensorPacket2(
bool forceUpdate =
false);
539 void updateSensorPacket3();
540 void updateSensorPacket4();
541 void updateSensorPacket5();
542 void updateSensorPacket101();
546 unsigned short m_refreshRate;
554 timeval timestamps[6];
562 mutable CreateSensors::PlayButton *m_playButton;
563 mutable CreateSensors::AdvanceButton *m_advanceButton;
565 mutable CreateSensors::Wall *m_wall;
566 mutable CreateSensors::CliffLeft *m_cliffLeft;
567 mutable CreateSensors::CliffFrontLeft *m_cliffFrontLeft;
568 mutable CreateSensors::CliffFrontRight *m_cliffFrontRight;
569 mutable CreateSensors::CliffRight *m_cliffRight;
570 mutable CreateSensors::VirtualWall *m_virtualWall;
572 mutable CreateSensors::WallSignal *m_wallSignal;
573 mutable CreateSensors::CliffLeftSignal *m_cliffLeftSignal;
574 mutable CreateSensors::CliffFrontLeftSignal *m_cliffFrontLeftSignal;
575 mutable CreateSensors::CliffFrontRightSignal *m_cliffFrontRightSignal;
576 mutable CreateSensors::CliffRightSignal *m_cliffRightSignal;
577 mutable CreateSensors::CargoBayAnalogSignal *m_cargoBayAnalogSignal;
578 mutable CreateSensors::CargoBayDigitalInputs *m_cargoBayDigitalInputs;
580 mutable CreateSensors::LightBumpLeft *m_lightBumpLeft;
581 mutable CreateSensors::LightBumpFrontLeft *m_lightBumpFrontLeft;
582 mutable CreateSensors::LightBumpCenterLeft *m_lightBumpCenterLeft;
583 mutable CreateSensors::LightBumpCenterRight *m_lightBumpCenterRight;
584 mutable CreateSensors::LightBumpFrontRight *m_lightBumpFrontRight;
585 mutable CreateSensors::LightBumpRight *m_lightBumpRight;
587 mutable CreateSensors::LightBumpLeftSignal *m_lightBumpLeftSignal;
588 mutable CreateSensors::LightBumpFrontLeftSignal *m_lightBumpFrontLeftSignal;
589 mutable CreateSensors::LightBumpCenterLeftSignal *m_lightBumpCenterLeftSignal;
590 mutable CreateSensors::LightBumpCenterRightSignal *m_lightBumpCenterRightSignal;
591 mutable CreateSensors::LightBumpFrontRightSignal *m_lightBumpFrontRightSignal;
592 mutable CreateSensors::LightBumpRightSignal *m_lightBumpRightSignal;
594 mutable CreateSensors::IR *m_ir;
596 mutable CreateSensors::ChargingState *m_chargingState;
597 mutable CreateSensors::BatteryTemperature *m_batteryTemperature;
598 mutable CreateSensors::BatteryCharge *m_batteryCharge;
599 mutable CreateSensors::BatteryCapacity *m_batteryCapacity;
601 mutable CreateSensors::Angle *m_angle;
602 mutable CreateSensors::Distance *m_distance;
604 mutable CreateSensors::BumpLeft *m_bumpLeft;
605 mutable CreateSensors::BumpRight *m_bumpRight;
607 mutable CreateSensors::WheelDropLeft *m_wheelDropLeft;
608 mutable CreateSensors::WheelDropRight *m_wheelDropRight;
609 mutable CreateSensors::WheelDropCaster *m_wheelDropCaster;
615 pthread_mutex_t m_mutex;
short rightVelocity
Definition: create.hpp:86
unsigned char numberOfStreamPackets
Definition: create.hpp:158
Definition: create.hpp:114
char stasis
Definition: create.hpp:185
void endAtomicOperation()
Definition: create.hpp:466
unsigned char cliffFrontLeft
Definition: create.hpp:103
Definition: create.hpp:189
unsigned char chargingSourcesAvailable
Definition: create.hpp:147
int distance
Definition: create.hpp:83
unsigned char userDigitalInputs
Definition: create.hpp:145
unsigned char cargoBayDigitalInputs
Definition: create.hpp:107
unsigned char lightBumpBits
Definition: create.hpp:173
Definition: create.hpp:79
unsigned char buttons
Definition: create.hpp:117
short leftVelocity
Definition: create.hpp:87
Mode
Definition: create.hpp:250
Definition: create.hpp:153
unsigned char lowSideDriverAndWheelOvercurrents
Definition: create.hpp:108
unsigned char cliffRight
Definition: create.hpp:105
unsigned char ir
Definition: create.hpp:116
void beginAtomicOperation()
Definition: create.hpp:459
unsigned char mode
Definition: create.hpp:155
#define PI
Definition: create.hpp:47
Definition: create.hpp:53
short radius
Definition: create.hpp:85
Facilitates communication with the iRobot (R) Create (TM)
Definition: create.hpp:241
unsigned char cliffLeft
Definition: create.hpp:102
unsigned char bumpsAndWheelDrops
Definition: create.hpp:100
BaudRate
Definition: create.hpp:268
Definition: create.hpp:125
timeval timestamp
Definition: create.hpp:81
int angle
Definition: create.hpp:84
Definition: create.hpp:251
unsigned char songPlaying
Definition: create.hpp:157
unsigned char chargingState
Definition: create.hpp:127
Definition: create.hpp:252
#define EXPORT_SYM
Definition: export.h:14
char batteryTemperature
Definition: create.hpp:130
void setDefaultBaudRate(const BaudRate defaultBaudRate)
Definition: create.hpp:473
Definition: create.hpp:98
unsigned char virtualWall
Definition: create.hpp:106
Definition: create.hpp:168
unsigned char cliffFrontRight
Definition: create.hpp:104
unsigned char wall
Definition: create.hpp:101
Definition: create.hpp:138
unsigned char songNumber
Definition: create.hpp:156
BaudRate defaultBaudRate() const
Definition: create.hpp:474
bool blockingRead(T &data, unsigned timeout=0)
Definition: create.hpp:341
Definition: create.hpp:93
Definition: create.hpp:253