Message_data.h
Go to the documentation of this file.
1 
47 #ifndef CLEARPATH_MESSAGE_DATA_H
48 #define CLEARPATH_MESSAGE_DATA_H
49 
50 #include <iostream>
51 #include <string>
52 #include <stdint.h>
55 
56 namespace clearpath
57 {
58 
60  {
61  public:
63  {
64  STEERING = 0,
65  THROTTLE = 2,
66  BRAKE = 4,
68  };
69  public:
70  DataAckermannOutput(void *input, size_t msg_len);
71 
73 
74  static DataAckermannOutput *popNext();
75 
76  static DataAckermannOutput *waitNext(double timeout = 0);
77 
78  static DataAckermannOutput *getUpdate(double timeout = 0);
79 
80  static void subscribe(uint16_t freq = 0);
81 
82  static enum MessageTypes getTypeID();
83 
84  double getSteering();
85 
86  double getThrottle();
87 
88  double getBrake();
89 
90  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
91  };
92 
94  {
95  public:
97  {
98  LEFT_P = 0,
99  LEFT_I = 2,
100  LEFT_D = 4,
101  LEFT_FEEDFWD = 6,
102  LEFT_STIC = 8,
103  LEFT_INT_LIM = 10,
104  RIGHT_P = 12,
105  RIGHT_I = 14,
106  RIGHT_D = 16,
107  RIGHT_FEEDFWD = 18,
108  RIGHT_STIC = 20,
109  RIGHT_INT_LIM = 22,
111  };
112 
113  public:
114  DataDifferentialControl(void *input, size_t msg_len);
115 
117 
119 
120  static DataDifferentialControl *waitNext(double timeout = 0);
121 
122  static DataDifferentialControl *getUpdate(double timeout = 0);
123 
124  static void subscribe(uint16_t freq = 0);
125 
126  static enum MessageTypes getTypeID();
127 
128  double getLeftP();
129 
130  double getLeftI();
131 
132  double getLeftD();
133 
134  double getLeftFeedForward();
135 
136  double getLeftStiction();
137 
138  double getLeftIntegralLimit();
139 
140  double getRightP();
141 
142  double getRightI();
143 
144  double getRightD();
145 
146  double getRightFeedForward();
147 
148  double getRightStiction();
149 
150  double getRightIntegralLimit();
151 
152  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
153  };
154 
156  {
157  public:
159  {
160  LEFT = 0,
161  RIGHT = 2,
163  };
164 
165  public:
166  DataDifferentialOutput(void *input, size_t msg_len);
167 
169 
171 
172  static DataDifferentialOutput *waitNext(double timeout = 0);
173 
174  static DataDifferentialOutput *getUpdate(double timeout = 0);
175 
176  static void subscribe(uint16_t freq);
177 
178  static enum MessageTypes getTypeID();
179 
180  double getLeft();
181 
182  double getRight();
183 
184  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
185  };
186 
188  {
189  public:
191  {
192  LEFT_SPEED = 0,
193  RIGHT_SPEED = 2,
194  LEFT_ACCEL = 4,
195  RIGHT_ACCEL = 6,
197  };
198 
199  public:
200  DataDifferentialSpeed(void *input, size_t msg_len);
201 
203 
204  static DataDifferentialSpeed *popNext();
205 
206  static DataDifferentialSpeed *waitNext(double timeout = 0);
207 
208  static DataDifferentialSpeed *getUpdate(double timeout = 0);
209 
210  static void subscribe(uint16_t freq);
211 
212  static enum MessageTypes getTypeID();
213 
214  double getLeftSpeed();
215 
216  double getLeftAccel();
217 
218  double getRightSpeed();
219 
220  double getRightAccel();
221 
222  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
223  };
224 
225  class DataEcho : public Message
226  {
227  public:
228  DataEcho(void *input, size_t msg_len);
229 
230  DataEcho(const DataEcho &other);
231 
232  static DataEcho *popNext();
233 
234  static DataEcho *waitNext(double timeout = 0);
235 
236  static DataEcho *getUpdate(double timeout = 0);
237 
238  static void subscribe(uint16_t freq);
239 
240  static enum MessageTypes getTypeID();
241 
242  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
243  };
244 
245  class DataEncoders : public Message
246  {
247  private:
250 
251  public:
252  DataEncoders(void *input, size_t msg_len);
253 
254  DataEncoders(const DataEncoders &other);
255 
256  static DataEncoders *popNext();
257 
258  static DataEncoders *waitNext(double timeout = 0);
259 
260  static DataEncoders *getUpdate(double timeout = 0);
261 
262  static void subscribe(uint16_t freq);
263 
264  static enum MessageTypes getTypeID();
265 
266  uint8_t getCount();
267 
268  double getTravel(uint8_t index);
269 
270  double getSpeed(uint8_t index);
271 
272  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
273  };
274 
275  class DataEncodersRaw : public Message
276  {
277  public:
278  DataEncodersRaw(void *input, size_t pkt_len);
279 
280  DataEncodersRaw(const DataEncodersRaw &other);
281 
282  static DataEncodersRaw *popNext();
283 
284  static DataEncodersRaw *waitNext(double timeout = 0);
285 
286  static DataEncodersRaw *getUpdate(double timeout = 0);
287 
288  static void subscribe(uint16_t freq);
289 
290  static enum MessageTypes getTypeID();
291 
292  uint8_t getCount();
293 
294  int32_t getTicks(uint8_t inx);
295 
296  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
297  };
298 
299  class DataFirmwareInfo : public Message
300  {
301  public:
303  {
304  MAJOR_FIRM_VER = 0,
310  };
311 
312  class WriteTime
313  {
314  public:
315  uint32_t rawTime;
316  public:
317  WriteTime(uint32_t time) : rawTime(time)
318  {
319  }
320 
321  uint8_t minute()
322  {
323  return (rawTime) & 0x3f;
324  }
325 
326  uint8_t hour()
327  {
328  return (rawTime >> 6) & 0x1f;
329  }
330 
331  uint8_t day()
332  {
333  return (rawTime >> 11) & 0x3f;
334  }
335 
336  uint8_t month()
337  {
338  return (rawTime >> 17) & 0x0f;
339  }
340 
341  uint8_t year()
342  {
343  return (rawTime >> 21) & 0x7f;
344  }
345  };
346 
347  public:
348  DataFirmwareInfo(void *input, size_t msg_len);
349 
350  DataFirmwareInfo(const DataFirmwareInfo &other);
351 
352  static DataFirmwareInfo *popNext();
353 
354  static DataFirmwareInfo *waitNext(double timeout = 0);
355 
356  static DataFirmwareInfo *getUpdate(double timeout = 0);
357 
358  static void subscribe(uint16_t freq);
359 
360  static enum MessageTypes getTypeID();
361 
362  uint8_t getMajorFirmwareVersion();
363 
364  uint8_t getMinorFirmwareVersion();
365 
366  uint8_t getMajorProtocolVersion();
367 
368  uint8_t getMinorProtocolVersion();
369 
370  WriteTime getWriteTime();
371 
372  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
373  };
374 
375  class DataGear : public Message
376  {
377  public:
378  DataGear(void *input, size_t msg_len);
379 
380  DataGear(const DataGear &other);
381 
382  static DataGear *popNext();
383 
384  static DataGear *waitNext(double timeout = 0);
385 
386  static DataGear *getUpdate(double timeout = 0);
387 
388  static void subscribe(uint16_t freq);
389 
390  static enum MessageTypes getTypeID();
391 
392  uint8_t getGear();
393 
394  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
395  };
396 
398  {
399  public:
401  {
402  FORWARD_MAX = 0,
403  REVERSE_MAX = 2,
405  };
406 
407  public:
408  DataMaxAcceleration(void *input, size_t msg_len);
409 
411 
412  static DataMaxAcceleration *popNext();
413 
414  static DataMaxAcceleration *waitNext(double timeout = 0);
415 
416  static DataMaxAcceleration *getUpdate(double timeout = 0);
417 
418  static void subscribe(uint16_t freq);
419 
420  static enum MessageTypes getTypeID();
421 
422  double getForwardMax();
423 
424  double getReverseMax();
425 
426  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
427  };
428 
429  class DataMaxSpeed : public Message
430  {
431  public:
433  {
434  FORWARD_MAX = 0,
435  REVERSE_MAX = 2,
437  };
438 
439  public:
440  DataMaxSpeed(void *input, size_t msg_len);
441 
442  DataMaxSpeed(const DataMaxSpeed &other);
443 
444  static DataMaxSpeed *popNext();
445 
446  static DataMaxSpeed *waitNext(double timeout = 0);
447 
448  static DataMaxSpeed *getUpdate(double timeout = 0);
449 
450  static void subscribe(uint16_t freq);
451 
452  static enum MessageTypes getTypeID();
453 
454  double getForwardMax();
455 
456  double getReverseMax();
457 
458  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
459  };
460 
462  {
463  public:
465  {
466  X = 0,
467  Y = 2,
468  Z = 4,
470  };
471  public:
472  DataPlatformAcceleration(void *input, size_t msg_len);
473 
475 
477 
478  static DataPlatformAcceleration *waitNext(double timeout = 0);
479 
480  static DataPlatformAcceleration *getUpdate(double timeout = 0);
481 
482  static void subscribe(uint16_t freq = 0);
483 
484  static enum MessageTypes getTypeID();
485 
486  double getX();
487 
488  double getY();
489 
490  double getZ();
491 
492  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
493  };
494 
495  class DataPlatformInfo : public Message
496  {
497  private:
498  uint8_t strlenModel();
499 
500  public:
501  DataPlatformInfo(void *input, size_t msg_len);
502 
503  DataPlatformInfo(const DataPlatformInfo &other);
504 
505  static DataPlatformInfo *popNext();
506 
507  static DataPlatformInfo *waitNext(double timeout = 0);
508 
509  static DataPlatformInfo *getUpdate(double timeout = 0);
510 
511  static void subscribe(uint16_t freq);
512 
513  static enum MessageTypes getTypeID();
514 
515  std::string getModel();
516 
517  uint8_t getRevision();
518 
519  uint32_t getSerial();
520 
521  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
522  };
523 
524  class DataPlatformName : public Message
525  {
526  public:
527  DataPlatformName(void *input, size_t msg_len);
528 
529  DataPlatformName(const DataPlatformName &other);
530 
531  static DataPlatformName *popNext();
532 
533  static DataPlatformName *waitNext(double timeout = 0);
534 
535  static DataPlatformName *getUpdate(double timeout = 0);
536 
537  static void subscribe(uint16_t freq);
538 
539  static enum MessageTypes getTypeID();
540 
541  std::string getName();
542 
543  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
544  };
545 
547  {
548  public:
550  {
551  X = 0,
552  Y = 2,
553  Z = 4,
555  };
556  public:
557  DataPlatformMagnetometer(void *input, size_t msg_len);
558 
560 
562 
563  static DataPlatformMagnetometer *waitNext(double timeout = 0);
564 
565  static DataPlatformMagnetometer *getUpdate(double timeout = 0);
566 
567  static void subscribe(uint16_t freq);
568 
569  static enum MessageTypes getTypeID();
570 
571  double getX();
572 
573  double getY();
574 
575  double getZ();
576 
577  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
578  };
579 
581  {
582  public:
584  {
585  ROLL = 0,
586  PITCH = 2,
587  YAW = 4,
589  };
590  public:
591  DataPlatformOrientation(void *input, size_t msg_len);
592 
594 
596 
597  static DataPlatformOrientation *waitNext(double timeout = 0);
598 
599  static DataPlatformOrientation *getUpdate(double timeout = 0);
600 
601  static void subscribe(uint16_t freq);
602 
603  static enum MessageTypes getTypeID();
604 
605  double getRoll();
606 
607  double getYaw();
608 
609  double getPitch();
610 
611  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
612  };
613 
615  {
616  public:
618  {
619  ROLL_RATE = 0,
620  PITCH_RATE = 2,
621  YAW_RATE = 4,
623  };
624 
625  public:
626  DataPlatformRotation(void *input, size_t msg_len);
627 
629 
630  static DataPlatformRotation *popNext();
631 
632  static DataPlatformRotation *waitNext(double timeout = 0);
633 
634  static DataPlatformRotation *getUpdate(double timeout = 0);
635 
636  static void subscribe(uint16_t freq);
637 
638  static enum MessageTypes getTypeID();
639 
640  double getRollRate();
641 
642  double getPitchRate();
643 
644  double getYawRate();
645 
646  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
647  };
648 
649  class DataPowerSystem : public Message
650  {
651  public:
653  {
654  public:
655  enum Types
656  {
657  EXTERNAL = 0x0,
658  LEAD_ACID = 0x1,
659  NIMH = 0x2,
660  GASOLINE = 0x8
661  };
662  uint8_t rawDesc;
663  public:
664  BatteryDescription(uint8_t desc) : rawDesc(desc)
665  {
666  }
667 
668  bool isPresent()
669  {
670  return rawDesc & 0x80;
671  }
672 
673  bool isInUse()
674  {
675  return rawDesc & 0x40;
676  }
677 
678  enum Types getType()
679  {
680  return (enum Types) (rawDesc & 0x0f);
681  }
682  };
683 
684  public:
685  DataPowerSystem(void *input, size_t msg_len);
686 
687  DataPowerSystem(const DataPowerSystem &other);
688 
689  static DataPowerSystem *popNext();
690 
691  static DataPowerSystem *waitNext(double timeout = 0);
692 
693  static DataPowerSystem *getUpdate(double timeout = 0);
694 
695  static void subscribe(uint16_t freq);
696 
697  static enum MessageTypes getTypeID();
698 
699  uint8_t getBatteryCount();
700 
701  double getChargeEstimate(uint8_t battery);
702 
703  int16_t getCapacityEstimate(uint8_t battery);
704 
705  BatteryDescription getDescription(uint8_t battery);
706 
707  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
708  };
709 
711  {
712  public:
713  DataProcessorStatus(void *input, size_t msg_len);
714 
716 
717  static DataProcessorStatus *popNext();
718 
719  static DataProcessorStatus *waitNext(double timeout = 0);
720 
721  static DataProcessorStatus *getUpdate(double timeout = 0);
722 
723  static void subscribe(uint16_t freq);
724 
725  static enum MessageTypes getTypeID();
726 
727  uint8_t getProcessCount();
728 
729  int16_t getErrorCount(int process);
730 
731  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
732  };
733 
734  class DataRangefinders : public Message
735  {
736  public:
737  DataRangefinders(void *input, size_t msg_len);
738 
739  DataRangefinders(const DataRangefinders &other);
740 
741  static DataRangefinders *popNext();
742 
743  static DataRangefinders *waitNext(double timeout = 0);
744 
745  static DataRangefinders *getUpdate(double timeout = 0);
746 
747  static void subscribe(uint16_t freq);
748 
749  static enum MessageTypes getTypeID();
750 
751  uint8_t getRangefinderCount();
752 
753  int16_t getDistance(int rangefinder);
754 
755  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
756  };
757 
759  {
760  public:
761  DataRangefinderTimings(void *input, size_t msg_len);
762 
764 
766 
767  static DataRangefinderTimings *waitNext(double timeout = 0);
768 
769  static DataRangefinderTimings *getUpdate(double timeout = 0);
770 
771  static void subscribe(uint16_t freq);
772 
773  static enum MessageTypes getTypeID();
774 
775  uint8_t getRangefinderCount();
776 
777  int16_t getDistance(int rangefinder);
778 
779  uint32_t getAcquisitionTime(int rangefinder);
780 
781  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
782  };
783 
785  {
786  public:
788  {
789  X = 0,
790  Y = 2,
791  Z = 4,
793  };
794  public:
795  DataRawAcceleration(void *input, size_t msg_len);
796 
798 
799  static DataRawAcceleration *popNext();
800 
801  static DataRawAcceleration *waitNext(double timeout = 0);
802 
803  static DataRawAcceleration *getUpdate(double timeout = 0);
804 
805  static void subscribe(uint16_t freq);
806 
807  static enum MessageTypes getTypeID();
808 
809  uint16_t getX();
810 
811  uint16_t getY();
812 
813  uint16_t getZ();
814 
815  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
816  };
817 
818  class DataRawCurrent : public Message
819  {
820  public:
821  DataRawCurrent(void *input, size_t msg_len);
822 
823  DataRawCurrent(const DataRawCurrent &other);
824 
825  static DataRawCurrent *popNext();
826 
827  static DataRawCurrent *waitNext(double timeout = 0);
828 
829  static DataRawCurrent *getUpdate(double timeout = 0);
830 
831  static void subscribe(uint16_t freq);
832 
833  static enum MessageTypes getTypeID();
834 
835  uint8_t getCurrentCount();
836 
837  uint16_t getCurrent(int current);
838 
839  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
840  };
841 
842  class DataRawGyro : public Message
843  {
844  public:
846  {
847  ROLL = 0,
848  PITCH = 2,
849  YAW = 4,
851  };
852  public:
853  DataRawGyro(void *input, size_t msg_len);
854 
855  DataRawGyro(const DataRawGyro &other);
856 
857  static DataRawGyro *popNext();
858 
859  static DataRawGyro *waitNext(double timeout = 0);
860 
861  static DataRawGyro *getUpdate(double timeout = 0);
862 
863  static void subscribe(uint16_t freq);
864 
865  static enum MessageTypes getTypeID();
866 
867  uint16_t getRoll();
868 
869  uint16_t getPitch();
870 
871  uint16_t getYaw();
872 
873  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
874  };
875 
877  {
878  public:
880  {
881  X = 0,
882  Y = 2,
883  Z = 4,
885  };
886  public:
887  DataRawMagnetometer(void *input, size_t msg_len);
888 
890 
891  static DataRawMagnetometer *popNext();
892 
893  static DataRawMagnetometer *waitNext(double timeout = 0);
894 
895  static DataRawMagnetometer *getUpdate(double timeout = 0);
896 
897  static void subscribe(uint16_t freq);
898 
899  static enum MessageTypes getTypeID();
900 
901  uint16_t getX();
902 
903  uint16_t getY();
904 
905  uint16_t getZ();
906 
907  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
908  };
909 
911  {
912  public:
914  {
915  ROLL = 0,
916  PITCH = 2,
917  YAW = 4,
919  };
920  public:
921  DataRawOrientation(void *input, size_t msg_len);
922 
924 
925  static DataRawOrientation *popNext();
926 
927  static DataRawOrientation *waitNext(double timeout = 0);
928 
929  static DataRawOrientation *getUpdate(double timeout = 0);
930 
931  static void subscribe(uint16_t freq);
932 
933  static enum MessageTypes getTypeID();
934 
935  uint16_t getRoll();
936 
937  uint16_t getPitch();
938 
939  uint16_t getYaw();
940 
941  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
942  };
943 
945  {
946  public:
947  DataRawTemperature(void *input, size_t msg_len);
948 
950 
951  static DataRawTemperature *popNext();
952 
953  static DataRawTemperature *waitNext(double timeout = 0);
954 
955  static DataRawTemperature *getUpdate(double timeout = 0);
956 
957  static void subscribe(uint16_t freq);
958 
959  static enum MessageTypes getTypeID();
960 
961  uint8_t getTemperatureCount();
962 
963  uint16_t getTemperature(int temperature);
964 
965  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
966  };
967 
968  class DataRawVoltage : public Message
969  {
970  public:
971  DataRawVoltage(void *input, size_t msg_len);
972 
973  DataRawVoltage(const DataRawVoltage &other);
974 
975  static DataRawVoltage *popNext();
976 
977  static DataRawVoltage *waitNext(double timeout = 0);
978 
979  static DataRawVoltage *getUpdate(double timeout = 0);
980 
981  static void subscribe(uint16_t freq);
982 
983  static enum MessageTypes getTypeID();
984 
985  uint8_t getVoltageCount();
986 
987  uint16_t getVoltage(int temperature);
988 
989  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
990  };
991 
993  {
994  public:
995  DataSafetySystemStatus(void *input, size_t msg_len);
996 
998 
1000 
1001  static DataSafetySystemStatus *waitNext(double timeout = 0);
1002 
1003  static DataSafetySystemStatus *getUpdate(double timeout = 0);
1004 
1005  static void subscribe(uint16_t freq);
1006 
1007  static enum MessageTypes getTypeID();
1008 
1009  uint16_t getFlags();
1010 
1011  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
1012  };
1013 
1014  class DataSystemStatus : public Message
1015  {
1016  private:
1020 
1021  public:
1022  DataSystemStatus(void *input, size_t msg_len);
1023 
1024  DataSystemStatus(const DataSystemStatus &other);
1025 
1026  static DataSystemStatus *popNext();
1027 
1028  static DataSystemStatus *waitNext(double timeout = 0);
1029 
1030  static DataSystemStatus *getUpdate(double timeout = 0);
1031 
1032  static void subscribe(uint16_t freq);
1033 
1034  static enum MessageTypes getTypeID();
1035 
1036  uint32_t getUptime();
1037 
1038  uint8_t getVoltagesCount();
1039 
1040  double getVoltage(uint8_t index);
1041 
1042  uint8_t getCurrentsCount();
1043 
1044  double getCurrent(uint8_t index);
1045 
1046  uint8_t getTemperaturesCount();
1047 
1048  double getTemperature(uint8_t index);
1049 
1050  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
1051  };
1052 
1053  class DataVelocity : public Message
1054  {
1055  public:
1057  {
1058  TRANS_VEL = 0,
1059  ROTATIONAL = 2,
1060  TRANS_ACCEL = 4,
1062  };
1063  public:
1064  DataVelocity(void *input, size_t msg_len);
1065 
1066  DataVelocity(const DataVelocity &other);
1067 
1068  static DataVelocity *popNext();
1069 
1070  static DataVelocity *waitNext(double timeout = 0);
1071 
1072  static DataVelocity *getUpdate(double timeout = 0);
1073 
1074  static void subscribe(uint16_t freq);
1075 
1076  static enum MessageTypes getTypeID();
1077 
1078  double getTranslational();
1079 
1080  double getRotational();
1081 
1082  double getTransAccel();
1083 
1084  virtual std::ostream &printMessage(std::ostream &stream = std::cout);
1085  };
1086 
1087 }; // namespace clearpath
1088 
1089 #endif // CLEARPATH_MESSAGE_DATA_H
1090 
virtual std::ostream & printMessage(std::ostream &stream=std::cout)
TFSIMD_FORCE_INLINE const tfScalar & getX() const
uint8_t getFlags()
Definition: Message.cpp:206
std::string getName(void *handle)
static DataAckermannOutput * popNext()
static DataAckermannOutput * getUpdate(double timeout=0)
DataAckermannOutput(void *input, size_t msg_len)
MessageTypes
Definition: Message.h:211
static void subscribe(uint16_t freq=0)
uint16_t getType()
Definition: Message.cpp:211
static enum MessageTypes getTypeID()
double getYaw(const tf2::Quaternion quat)
TFSIMD_FORCE_INLINE const tfScalar & getZ() const
TFSIMD_FORCE_INLINE const tfScalar & getY() const
static DataAckermannOutput * waitNext(double timeout=0)


husky_base
Author(s): Mike Purvis , Paul Bovbel
autogenerated on Fri Oct 2 2020 03:40:07