dispatch_manager.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // Created by huli on 2020/7/20.
  3. //
  4. #ifndef NNXX_TESTS_DISPATCH_MANAGER_H
  5. #define NNXX_TESTS_DISPATCH_MANAGER_H
  6. #include "../error_code/error_code.h"
  7. #include "../tool/singleton.h"
  8. #include "../tool/thread_condition.h"
  9. #include "../dispatch/carrier.h"
  10. #include "../dispatch/catcher.h"
  11. #include "../dispatch/passageway.h"
  12. #include <vector>
  13. #include <glog/logging.h>
  14. //lacate测量结果结构体, 整车的信息,
  15. typedef struct Locate_information
  16. {
  17. float locate_x; //整车的中心点x值, 四轮的中心
  18. float locate_y; //整车的中心点y值, 四轮的中心
  19. float locate_angle; //整车的旋转角, 四轮的旋转角
  20. float locate_length; //整车的长度, 用于规避碰撞
  21. float locate_width; //整车的宽度, 用于规避碰撞
  22. float locate_height; //整车的高度, 用于规避碰撞
  23. float locate_wheel_base; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车
  24. float locate_wheel_width; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车
  25. bool locate_correct; //整车的校准标记位
  26. //注:理论上, 车宽和左右轮距应该是一样的, 但是实际上车宽比左右轮距略大,
  27. }Locate_information;
  28. //调度管理模块
  29. class Dispatch_manager:public Singleton<Dispatch_manager>
  30. {
  31. // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
  32. friend class Singleton<Dispatch_manager>;
  33. public:
  34. //调度管理 的状态
  35. enum Dispatch_manager_status
  36. {
  37. E_DISPATCH_MANAGER_UNKNOW = 0, //未知
  38. E_DISPATCH_MANAGER_READY = 1, //准备,待机
  39. E_DISPATCH_MANAGER_STORE = 2, //正在存车
  40. E_DISPATCH_MANAGER_PICKUP = 3, //正在取车
  41. E_DISPATCH_MANAGER_FAULT = 10, //故障
  42. };
  43. //调度方向, 停车取车
  44. enum Dispatch_motion_direction
  45. {
  46. E_STORE_CAR =0, //停车, 出入口 -> 停车位
  47. E_PICKUP_CAR =1, //取车, 停车位 -> 出入口
  48. };
  49. private:
  50. // 父类的构造函数必须保护,子类的构造函数必须私有。
  51. Dispatch_manager();
  52. public:
  53. //必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
  54. Dispatch_manager(const Dispatch_manager& other) = delete;
  55. Dispatch_manager& operator =(const Dispatch_manager& other) = delete;
  56. ~Dispatch_manager();
  57. public://API functions
  58. //调度管理 初始化
  59. Error_manager dispatch_manager_init(int dispatch_id);
  60. //调度管理 反初始化
  61. Error_manager dispatch_manager_uninit();
  62. //对外的接口函数,负责接受并处理任务单,
  63. Error_manager execute_task(Dispatch_manager::Dispatch_motion_direction dispatch_motion_direction);
  64. //检查状态
  65. Error_manager check_status();
  66. public://get or set member variable
  67. Dispatch_manager_status get_dispatch_manager_status();
  68. int get_dispatch_id();
  69. void set_dispatch_id(int dispatch_id);
  70. protected://member variable
  71. Dispatch_manager_status m_dispatch_manager_status; //调度管理 的状态
  72. int m_dispatch_id; //调度模块的id, (楚天项目就是单元号, 0~2)
  73. int m_carrier_number; //搬运器的数量, 默认3个
  74. std::vector<Carrier*> m_carrier_vector; //搬运器的对象实例,内存由本类管理
  75. private:
  76. };
  77. #endif //NNXX_TESTS_DISPATCH_MANAGER_H