dispatch_coordinates.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. //
  2. // Created by huli on 2021/3/24.
  3. //
  4. #include "dispatch_coordinates.h"
  5. #include "../tool/proto_tool.h"
  6. Dispatch_coordinates::Dispatch_coordinates()
  7. {
  8. mpp_space_lock = nullptr;
  9. m_space_lock_rows = 0;
  10. m_space_lock_columns = 0;
  11. m_space_lock_total = 0;
  12. }
  13. Dispatch_coordinates::~Dispatch_coordinates()
  14. {
  15. dispatch_coordinates_uninit();
  16. }
  17. //初始化 调度的坐标系 模块。如下三选一
  18. Error_manager Dispatch_coordinates::dispatch_coordinates_init()
  19. {
  20. return dispatch_coordinates_init_from_protobuf(DISPATCH_COORDINATES_PARAMETER_PATH);
  21. }
  22. //初始化 调度的坐标系 模块。从文件读取
  23. Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(std::string prototxt_path)
  24. {
  25. Dispatch_proto::Dispatch_coordinates_parameter_all t_dispatch_coordinates_parameter_all;
  26. if(! proto_tool::read_proto_param(prototxt_path,t_dispatch_coordinates_parameter_all) )
  27. {
  28. return Error_manager(DISPATCH_COORDINATES_READ_PROTOBUF_ERROR,MINOR_ERROR,
  29. "Dispatch_coordinates read_proto_param failed");
  30. }
  31. return dispatch_coordinates_init_from_protobuf(t_dispatch_coordinates_parameter_all);
  32. }
  33. //初始化 调度的坐标系 模块。从protobuf读取
  34. Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Dispatch_proto::Dispatch_coordinates_parameter_all& dispatch_coordinates_parameter_all)
  35. {
  36. LOG(INFO) << " ---Dispatch_coordinates::dispatch_coordinates_init_from_protobuf() run--- "<< this;
  37. Error_manager t_error;
  38. m_space_lock_rows = dispatch_coordinates_parameter_all.parkspace_number().rows();
  39. m_space_lock_columns = dispatch_coordinates_parameter_all.parkspace_number().columns();
  40. m_space_lock_total = dispatch_coordinates_parameter_all.parkspace_number().total();
  41. mpp_space_lock = new space_device*[m_space_lock_rows];
  42. for (int i = 0; i < m_space_lock_rows; ++i)
  43. {
  44. mpp_space_lock[i] = new space_device[m_space_lock_columns];
  45. for (int j = 0; j < m_space_lock_columns; ++j)
  46. {
  47. //注意了, 这里一定要初始化为-1, 因为设备id=0 是有效设备
  48. mpp_space_lock[i][j].m_catcher_id = -1;
  49. mpp_space_lock[i][j].m_carrier_id = -1;
  50. }
  51. }
  52. int size;
  53. size = dispatch_coordinates_parameter_all.packspace_coordinates_parameters_size();
  54. for (int i = 0; i < size; ++i)
  55. {
  56. Point3D_tool::Point3D t_point3d;
  57. int id = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).id();
  58. t_point3d.x = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).x();
  59. t_point3d.y = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).y();
  60. t_point3d.z = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).z();
  61. m_packspace_coordinates[id] = t_point3d;
  62. }
  63. size = dispatch_coordinates_parameter_all.passageway_coordinates_parameters_size();
  64. for (int i = 0; i < size; ++i)
  65. {
  66. Point3D_tool::Point3D t_point3d;
  67. int id = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).id();
  68. t_point3d.x = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).x();
  69. t_point3d.y = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).y();
  70. t_point3d.z = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).z();
  71. m_passageway_coordinates[id] = t_point3d;
  72. }
  73. size = dispatch_coordinates_parameter_all.carrier_coordinates_parameters_size();
  74. for (int i = 0; i < size; ++i)
  75. {
  76. Point3D_tool::Point3D t_point3d;
  77. int id = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).id();
  78. t_point3d.x = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).x();
  79. t_point3d.y = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).y();
  80. t_point3d.z = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).z();
  81. m_carrier_coordinates[id] = t_point3d;
  82. }
  83. size = dispatch_coordinates_parameter_all.catcher_coordinates_parameters_size();
  84. for (int i = 0; i < size; ++i)
  85. {
  86. Point3D_tool::Point3D t_point3d;
  87. int id = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).id();
  88. t_point3d.x = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).x();
  89. t_point3d.y = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).y();
  90. t_point3d.z = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).z();
  91. m_catcher_coordinates[id] = t_point3d;
  92. }
  93. m_carrier_box.x_min = dispatch_coordinates_parameter_all.carrier_box_parameters().x_min();
  94. m_carrier_box.x_max = dispatch_coordinates_parameter_all.carrier_box_parameters().x_max();
  95. m_carrier_box.y_min = dispatch_coordinates_parameter_all.carrier_box_parameters().y_min();
  96. m_carrier_box.y_max = dispatch_coordinates_parameter_all.carrier_box_parameters().y_max();
  97. m_carrier_box.z_min = dispatch_coordinates_parameter_all.carrier_box_parameters().z_min();
  98. m_carrier_box.z_max = dispatch_coordinates_parameter_all.carrier_box_parameters().z_max();
  99. m_catcher_box.x_min = dispatch_coordinates_parameter_all.catcher_box_parameters().x_min();
  100. m_catcher_box.x_max = dispatch_coordinates_parameter_all.catcher_box_parameters().x_max();
  101. m_catcher_box.y_min = dispatch_coordinates_parameter_all.catcher_box_parameters().y_min();
  102. m_catcher_box.y_max = dispatch_coordinates_parameter_all.catcher_box_parameters().y_max();
  103. m_catcher_box.z_min = dispatch_coordinates_parameter_all.catcher_box_parameters().z_min();
  104. m_catcher_box.z_max = dispatch_coordinates_parameter_all.catcher_box_parameters().z_max();
  105. m_catcher_b_min = dispatch_coordinates_parameter_all.catcher_b_min();
  106. m_catcher_b_max = dispatch_coordinates_parameter_all.catcher_b_max();
  107. m_catcher_d1_min = dispatch_coordinates_parameter_all.catcher_d1_min();
  108. m_catcher_d1_max = dispatch_coordinates_parameter_all.catcher_d1_max();
  109. m_catcher_d2_min = dispatch_coordinates_parameter_all.catcher_d2_min();
  110. m_catcher_d2_max = dispatch_coordinates_parameter_all.catcher_d2_max();
  111. std::cout << " huli test :::: " << " m_packspace_coordinates.size() = " << m_packspace_coordinates.size() << std::endl;
  112. std::cout << " huli test :::: " << " m_passageway_coordinates.size() = " << m_passageway_coordinates.size() << std::endl;
  113. std::cout << " huli test :::: " << " m_carrier_coordinates.size() = " << m_carrier_coordinates.size() << std::endl;
  114. std::cout << " huli test :::: " << " m_catcher_coordinates.size() = " << m_catcher_coordinates.size() << std::endl;
  115. m_default_wheelbase = dispatch_coordinates_parameter_all.default_wheelbase();
  116. m_catcher_1th_floor_z = dispatch_coordinates_parameter_all.catcher_1th_floor_z();
  117. m_catcher_2th_floor_z = dispatch_coordinates_parameter_all.catcher_2th_floor_z();
  118. m_catcher_3th_floor_z = dispatch_coordinates_parameter_all.catcher_3th_floor_z();
  119. m_catcher_4th_floor_z = dispatch_coordinates_parameter_all.catcher_4th_floor_z();
  120. m_carrier_1th_floor_z = dispatch_coordinates_parameter_all.carrier_1th_floor_z();
  121. m_carrier_2th_floor_z = dispatch_coordinates_parameter_all.carrier_2th_floor_z();
  122. m_carrier_3th_floor_z = dispatch_coordinates_parameter_all.carrier_3th_floor_z();
  123. m_carrier_4th_floor_z = dispatch_coordinates_parameter_all.carrier_4th_floor_z();
  124. m_catcher_d1_d2_distance = dispatch_coordinates_parameter_all.catcher_d1_d2_distance();
  125. m_catcher_wheel_base_limit = dispatch_coordinates_parameter_all.catcher_wheel_base_limit();
  126. m_carrier_y_y1_distance = dispatch_coordinates_parameter_all.carrier_y_y1_distance();
  127. m_carrier_default_y1_back = dispatch_coordinates_parameter_all.carrier_default_y1_back();
  128. m_carrier_default_y1_leave = dispatch_coordinates_parameter_all.carrier_default_y1_leave();
  129. m_carrier_default_y_back = dispatch_coordinates_parameter_all.carrier_default_y_back();
  130. m_carrier_default_y_leave = dispatch_coordinates_parameter_all.carrier_default_y_leave();
  131. m_carrier_default_x_left = dispatch_coordinates_parameter_all.carrier_default_x_left();
  132. m_carrier_default_x_right = dispatch_coordinates_parameter_all.carrier_default_x_right();
  133. m_passageway_terminal_id_min = dispatch_coordinates_parameter_all.passageway_terminal_id_min();
  134. m_passageway_terminal_id_max = dispatch_coordinates_parameter_all.passageway_terminal_id_max();
  135. m_passageway_terminal_number = dispatch_coordinates_parameter_all.passageway_terminal_number();
  136. size = dispatch_coordinates_parameter_all.passageway_functioning_patterns_size();
  137. for (int i = m_passageway_terminal_id_min; i < size; ++i)
  138. {
  139. m_passageway_functioning_pattern_map[i] = (Passageway_functioning_pattern)dispatch_coordinates_parameter_all.passageway_functioning_patterns(i);
  140. }
  141. if ( m_passageway_terminal_number != m_passageway_terminal_id_max - m_passageway_terminal_id_min +1 ||
  142. m_passageway_terminal_number != size)
  143. {
  144. return Error_manager(Error_code::PARAMETER_ERROR, Error_level::MINOR_ERROR,
  145. " Dispatch_coordinates::dispatch_coordinates_init_from_protobuf PARAMRTER ERROR ");
  146. }
  147. m_parkspace_id_min = dispatch_coordinates_parameter_all.parkspace_id_min();
  148. m_parkspace_id_max = dispatch_coordinates_parameter_all.parkspace_id_max();
  149. m_parkspace_id_total = dispatch_coordinates_parameter_all.parkspace_id_total();
  150. m_car_wheel_base_min = dispatch_coordinates_parameter_all.car_wheel_base_min();
  151. m_car_wheel_base_max = dispatch_coordinates_parameter_all.car_wheel_base_max();
  152. return Error_code::SUCCESS;
  153. }
  154. //反初始化
  155. Error_manager Dispatch_coordinates::dispatch_coordinates_uninit()
  156. {
  157. for (int i = 0; i < m_space_lock_rows; ++i)
  158. {
  159. delete [](mpp_space_lock[i]);
  160. }
  161. delete [](mpp_space_lock);
  162. return Error_code::SUCCESS;
  163. }
  164. void Dispatch_coordinates::set_space_lock(int space_rows, int space_columns, int catcher_id, int carrier_id)
  165. {
  166. std::unique_lock<std::mutex> t_lock(m_lock);
  167. mpp_space_lock[space_rows][space_columns].m_catcher_id = catcher_id;
  168. mpp_space_lock[space_rows][space_columns].m_carrier_id = carrier_id;
  169. }
  170. void Dispatch_coordinates::set_space_lock_for_catcher(int space_rows, int space_columns, int catcher_id)
  171. {
  172. std::unique_lock<std::mutex> t_lock(m_lock);
  173. mpp_space_lock[space_rows][space_columns].m_catcher_id = catcher_id;
  174. }
  175. void Dispatch_coordinates::set_space_lock_for_carrier(int space_rows, int space_columns, int carrier_id)
  176. {
  177. std::unique_lock<std::mutex> t_lock(m_lock);
  178. mpp_space_lock[space_rows][space_columns].m_carrier_id = carrier_id;
  179. }
  180. void Dispatch_coordinates::set_space_lock(int space_id, int catcher_id, int carrier_id)
  181. {
  182. int space_rows = (space_id-1) / m_space_lock_columns;
  183. int space_columns = (space_id-1) % m_space_lock_columns;
  184. set_space_lock(space_rows, space_columns, catcher_id, carrier_id);
  185. }
  186. void Dispatch_coordinates::set_space_lock_for_catcher(int space_id, int catcher_id)
  187. {
  188. int space_rows = (space_id-1) / m_space_lock_columns;
  189. int space_columns = (space_id-1) % m_space_lock_columns;
  190. set_space_lock_for_catcher(space_rows, space_columns, catcher_id);
  191. }
  192. void Dispatch_coordinates::set_space_lock_for_carrier(int space_id, int carrier_id)
  193. {
  194. int space_rows = (space_id-1) / m_space_lock_columns;
  195. int space_columns = (space_id-1) % m_space_lock_columns;
  196. set_space_lock_for_carrier(space_rows, space_columns, carrier_id);
  197. }