command.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * Copyright (c) 2019, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-08-26 sogwms The first version
  9. */
  10. #ifndef __COMMAND_H__
  11. #define __COMMAND_H__
  12. #include <rtthread.h>
  13. #include <chassis.h>
  14. /* Command */
  15. // down-link
  16. #define COMMAND_NONE (rt_uint16_t)(0X0000)
  17. #define COMMAND_SET_CHASSIS_STOP (rt_uint16_t)(0X0001)
  18. #define COMMAND_SET_CHASSIS_FORWARD (rt_uint16_t)(0X0002)
  19. #define COMMAND_SET_CHASSIS_BACKWARD (rt_uint16_t)(0X0003)
  20. #define COMMAND_SET_CHASSIS_ROTATE_LEFT (rt_uint16_t)(0X0004)
  21. #define COMMAND_SET_CHASSIS_ROTATE_RIGHT (rt_uint16_t)(0X0005)
  22. #define COMMAND_SET_CHASSIS_MOVE_LEFT (rt_uint16_t)(0X0006)
  23. #define COMMAND_SET_CHASSIS_MOVE_RIGHT (rt_uint16_t)(0X0007)
  24. #define COMMAND_SET_CHASSIS_FORWARD_WITH_PARAM (rt_uint16_t)(0X1002)
  25. #define COMMAND_SET_CHASSIS_BACKWARD_WITH_PARAM (rt_uint16_t)(0X1003)
  26. #define COMMAND_SET_CHASSIS_ROTATE_LEFT_WITH_PARAM (rt_uint16_t)(0X1004)
  27. #define COMMAND_SET_CHASSIS_ROTATE_RIGHT_WITH_PARAM (rt_uint16_t)(0X1005)
  28. #define COMMAND_SET_CHASSIS_MOVE_LEFT_WITH_PARAM (rt_uint16_t)(0X1006)
  29. #define COMMAND_SET_CHASSIS_MOVE_RIGHT_WITH_PARAM (rt_uint16_t)(0X1007)
  30. #define COMMAND_SET_CHASSIS_VELOCITY_LINEAR_X (rt_uint16_t)(0x1008)
  31. #define COMMAND_SET_CHASSIS_VELOCITY_LINEAR_Y (rt_uint16_t)(0x1009)
  32. #define COMMAND_SET_CHASSIS_VELOCITY_ANGULAR_Z (rt_uint16_t)(0x100A)
  33. #define COMMAND_SET_WHEEL0_PID (rt_uint16_t)(0x2000)
  34. #define COMMAND_SET_WHEEL1_PID (rt_uint16_t)(0x2001)
  35. #define COMMAND_SET_WHEEL2_PID (rt_uint16_t)(0x2002)
  36. #define COMMAND_SET_WHEEL3_PID (rt_uint16_t)(0x2003)
  37. #define COMMAND_SET_WHEELS_PID (rt_uint16_t)(0x2004)
  38. #define COMMAND_SET_DEFAULT_PID (rt_uint16_t)(0x3000)
  39. // ! Must keep all COMMAND_GET_XXX value is between COMMAND_GET_START and COMMAND_GET_END
  40. #define COMMAND_GET_START (rt_uint16_t)(0x5000)
  41. #define COMMAND_GET_WHEEL0_PID (rt_uint16_t)(0x5001)
  42. #define COMMAND_GET_WHEEL1_PID (rt_uint16_t)(0x5002)
  43. #define COMMAND_GET_WHEEL2_PID (rt_uint16_t)(0x5003)
  44. #define COMMAND_GET_WHEEL3_PID (rt_uint16_t)(0x5004)
  45. #define COMMAND_GET_WHEELS_PID (rt_uint16_t)(0x5005)
  46. #define COMMAND_GET_END (rt_uint16_t)(0x8FFF)
  47. // up-link
  48. #define COMMAND_RC_VIBRATE (rt_uint16_t)(0x9000)
  49. #define COMMAND_SEND_PID (rt_uint16_t)(0xA000)
  50. #define COMMAND_SEND_SENSOR (rt_uint16_t)(0xA001)
  51. #define COMMAND_SEND_RPY (rt_uint16_t)(0xA002)
  52. // PID ID
  53. #define PID_ID_WHEEL_0 1
  54. #define PID_ID_WHEEL_1 2
  55. #define PID_ID_WHEEL_2 3
  56. #define PID_ID_WHEEL_3 4
  57. struct cmd_pid
  58. {
  59. int id; // range: 1 ~ max
  60. float kp;
  61. float ki;
  62. float kd;
  63. };
  64. struct cmd_sensor
  65. {
  66. int32_t acc_x;
  67. int32_t acc_y;
  68. int32_t acc_z;
  69. int32_t gyro_x;
  70. int32_t gyro_y;
  71. int32_t gyro_z;
  72. int32_t mag_x;
  73. int32_t mag_y;
  74. int32_t mag_z;
  75. };
  76. struct cmd_rpy
  77. {
  78. float roll;
  79. float pitch;
  80. float yaw;
  81. };
  82. struct cmd_velocity
  83. {
  84. union
  85. {
  86. float linear_x; // m/s
  87. float linear_y;
  88. float angular_z;
  89. float common;
  90. } data;
  91. };
  92. struct command_sender
  93. {
  94. char *name;
  95. rt_err_t (*send)(rt_uint16_t cmd, void *param, rt_uint16_t size);
  96. };
  97. typedef struct command_sender *command_sender_t;
  98. rt_err_t command_handle(rt_uint16_t cmd, void *param, rt_uint16_t size);
  99. rt_err_t command_send(command_sender_t sender, rt_uint16_t cmd, void *param, rt_uint16_t size);
  100. rt_err_t command_init(chassis_t chas);
  101. #endif