heading_diff_ctrl_c.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. ******************************************************************************
  3. * @file : heading_diff_ctrl_c.cpp
  4. * @author : wangyingjie
  5. * @brief : None
  6. * @attention : None
  7. * @date : 2025/5/23
  8. ******************************************************************************
  9. */
  10. #ifndef HEADING_DIFF_CTRL_H
  11. #define HEADING_DIFF_CTRL_H
  12. //#ifdef __cplusplus
  13. //extern "C"
  14. //{
  15. //#endif
  16. #include "control/pid/studio_pid_c.h"
  17. #include "geography/studio_proj_c.h"
  18. #include "geometry/studio_geo_algo_c.h"
  19. //#ifdef __cplusplus
  20. //}
  21. //#endif
  22. // 测试使用
  23. //#include "geometry/studio_geo_utils.h"
  24. //#include "geometry/studio_geo_algo.h"
  25. // 测试使用结束
  26. // 小船控制结构体
  27. typedef struct
  28. {
  29. studio_pid heading_pid; // 方位角PID控制器
  30. studio_point_c target; // 目标点
  31. double base_throttle; // 基础油门
  32. double left_throttle; // 左侧油门
  33. double right_throttle; // 右侧油门
  34. } diff_ctrl;
  35. // 初始化小船控制器
  36. void init_diff_ctrl(diff_ctrl *controller,
  37. const studio_point_c *target,
  38. double base_throttle, // 输入范围0~1.0
  39. double Kp,
  40. double Ki,
  41. double Kd);
  42. void reset_diff_ctrl_goal(diff_ctrl *controller, const studio_point_c *target);
  43. // 正确计算最短路径误差(返回-180~180°)
  44. double calculate_heading_error(double target_deg, double current_deg);
  45. double update_boat(diff_ctrl *controller, const studio_point_c *current_pos, double current_heading_deg);
  46. void simulate_movement(studio_point_c *current_pos, double *current_heading, double left_throttle, double right_throttle);
  47. #endif // HEADING_DIFF_CTRL_H