kobuki.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-05-28 hw630 the first version
  9. */
  10. #ifndef KOBUKI_H_
  11. #define KOBUKI_H_
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #include <rtthread.h>
  16. #ifndef KOBUKI_PACKET_BUFFER
  17. #define KOBUKI_PACKET_BUFFER 128
  18. #endif
  19. #ifndef KOBUKI_SYNC_TIMEOUT
  20. #define KOBUKI_SYNC_TIMEOUT 100
  21. #endif
  22. #define KOBUKI_RECV_HARDWARE_EVENT (1 << 1)
  23. #define KOBUKI_RECV_FIRMWARE_EVENT (1 << 2)
  24. #define KOBUKI_RECV_UUID_EVENT (1 << 3)
  25. #define KOBUKI_RECV_CONTROLLER_INFO_EVENT (1 << 4)
  26. struct kobuki {
  27. // triggered when new data comes in
  28. struct rt_event event;
  29. // odometry
  30. float x;
  31. float y;
  32. float theta;
  33. float v_x;
  34. float v_theta;
  35. // connection status
  36. uint8_t connected;
  37. uint32_t last_sync_tick;
  38. uint16_t timestamp;
  39. // bumper flag
  40. uint8_t bumper;
  41. uint8_t left_bumper;
  42. uint8_t central_bumper;
  43. uint8_t right_bumper;
  44. // wheel drop flag
  45. uint8_t wheel_drop;
  46. uint8_t left_wheel_drop;
  47. uint8_t right_wheel_drop;
  48. // cliff flag
  49. uint8_t cliff;
  50. uint8_t left_cliff;
  51. uint8_t central_cliff;
  52. uint8_t right_cliff;
  53. // raw cliff sensor data
  54. uint16_t left_cliff_adc;
  55. uint16_t central_cliff_adc;
  56. uint16_t right_cliff_adc;
  57. // encoder data
  58. uint16_t left_encoder;
  59. uint16_t right_encoder;
  60. // motor pwm
  61. int8_t left_pwm;
  62. int8_t right_pwm;
  63. // button status
  64. uint8_t button;
  65. uint8_t button_0;
  66. uint8_t button_1;
  67. uint8_t button_2;
  68. // charger status
  69. uint8_t charger;
  70. uint8_t charger_discharging;
  71. uint8_t charger_docking_charged;
  72. uint8_t charger_docking_charging;
  73. uint8_t charger_adapter_charged;
  74. uint8_t charger_adapter_charging;
  75. // battery level
  76. uint8_t battery;
  77. // wheel overcurrent flag
  78. uint8_t wheel_overcurrent;
  79. uint8_t left_wheel_overcurrent;
  80. uint8_t right_wheel_overcurrent;
  81. // docking id flag
  82. uint8_t docking_ir_left;
  83. uint8_t docking_ir_center;
  84. uint8_t docking_ir_right;
  85. uint8_t docking_ir_near_left;
  86. uint8_t docking_ir_near_center;
  87. uint8_t docking_ir_near_right;
  88. uint8_t docking_ir_far_left;
  89. uint8_t docking_ir_far_center;
  90. uint8_t docking_ir_far_right;
  91. // inertial data
  92. uint16_t inertial_angle;
  93. uint16_t inertial_angle_rate;
  94. // motor current
  95. uint16_t left_motor_current;
  96. uint16_t right_motor_current;
  97. // version
  98. uint8_t harware_version_major;
  99. uint8_t harware_version_minor;
  100. uint8_t harware_version_patch;
  101. uint8_t firmware_version_major;
  102. uint8_t firmware_version_minor;
  103. uint8_t firmware_version_patch;
  104. // uuid
  105. uint32_t uuid_0;
  106. uint32_t uuid_1;
  107. uint32_t uuid_2;
  108. // digital input
  109. uint16_t digital_input;
  110. uint8_t digital_input_0;
  111. uint8_t digital_input_1;
  112. uint8_t digital_input_2;
  113. uint8_t digital_input_3;
  114. // analog input
  115. uint16_t analog_input_0;
  116. uint16_t analog_input_1;
  117. uint16_t analog_input_2;
  118. uint16_t analog_input_3;
  119. // PID controller
  120. uint32_t kp;
  121. uint32_t ki;
  122. uint32_t kd;
  123. uint8_t packet[KOBUKI_PACKET_BUFFER];
  124. };
  125. typedef struct kobuki* kobuki_t;
  126. int kobuki_init(kobuki_t robot);
  127. void kobuki_loop(kobuki_t robot);
  128. void kobuki_close(kobuki_t robot);
  129. void kobuki_set_speed(double tv, double rv);
  130. void kobuki_enalbe_3v3(void);
  131. void kobuki_enable_5v(void);
  132. void kobuki_enable_12v_5a(void);
  133. void kobuki_enable_12v_1_5a(void);
  134. void kobuki_set_led1_red(void);
  135. void kobuki_set_led1_green(void);
  136. void kobuki_set_led2_red(void);
  137. void kobuki_set_led2_green(void);
  138. void kobuki_set_controller_gain(uint32_t kp, uint32_t ki, uint32_t kd);
  139. void kobuki_get_controller_gain(void);
  140. void kobuki_reset_controller_gain(void);
  141. void kobuki_get_hardware_version(void);
  142. void kobuki_get_firmware_version(void);
  143. void kobuki_get_uuid(void);
  144. void kobuki_play_sound(uint16_t note, uint8_t duration);
  145. void kobuki_play_sound_on(void);
  146. void kobuki_play_sound_off(void);
  147. void kobuki_play_sound_recharge(void);
  148. void kobuki_play_sound_button(void);
  149. void kobuki_play_sound_error(void);
  150. void kobuki_play_sound_cleaning_start(void);
  151. void kobuki_play_sound_cleaning_end(void);
  152. #ifdef __cplusplus
  153. }
  154. #endif
  155. #endif /* KOBUKI_H_ */