vehicle_control.cpp 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. #include "vehicle_control.h"
  2. extern std::string gstrserverip;
  3. extern std::string gstrcontrolPort;
  4. extern std::string gstrcontrolInterval;
  5. extern std::string gstruploadMapInterval;
  6. extern std::string gstrid;
  7. extern std::string gstrplateNumber;
  8. namespace iv {
  9. struct msgunit
  10. {
  11. char mstrmsgname[256];
  12. int mnBufferSize = 10000;
  13. int mnBufferCount = 1;
  14. void * mpa;
  15. std::shared_ptr<char> mpstrmsgdata;
  16. int mndatasize = 0;
  17. bool mbRefresh = false;
  18. bool mbImportant = false;
  19. int mnkeeptime = 100;
  20. };
  21. }
  22. extern iv::msgunit shmRemoteCtrl;
  23. using org::jeecg::defsControl::grpc::Empty; ///< other message
  24. using org::jeecg::defsControl::grpc::GPSPoint;
  25. using org::jeecg::defsControl::grpc::MapPoint;
  26. using org::jeecg::defsControl::grpc::CtrlMode; ///< other enum
  27. using org::jeecg::defsControl::grpc::ShiftStatus;
  28. VehicleControlClient::VehicleControlClient(std::shared_ptr<Channel> channel)
  29. {
  30. stub_ = VehicleControl::NewStub(channel);
  31. mpa = new iv::modulecommext::modulecommmsg<iv::remotectrl>();
  32. std::cout<<shmRemoteCtrl.mstrmsgname<<"---"<<shmRemoteCtrl.mnBufferSize<<"---"<<shmRemoteCtrl.mnBufferCount<<std::endl;
  33. mpa->RegisterSend(shmRemoteCtrl.mstrmsgname,shmRemoteCtrl.mnBufferSize,shmRemoteCtrl.mnBufferCount);
  34. }
  35. VehicleControlClient::~VehicleControlClient(void)
  36. {
  37. }
  38. void VehicleControlClient::VehicleControlClientSend(void)
  39. {
  40. }
  41. std::string VehicleControlClient::vehicleControl(void)
  42. {
  43. // Data we are sending to the server.
  44. Empty request;
  45. request.set_id(gstrid);
  46. // Container for the data we expect from the server.
  47. ControlReply reply;
  48. // Context for the client. It could be used to convey extra information to
  49. // the server and/or tweak certain RPC behaviors.
  50. ClientContext context;
  51. gpr_timespec timespec;
  52. timespec.tv_sec = 1;
  53. timespec.tv_nsec = 0;
  54. timespec.clock_type = GPR_TIMESPAN;
  55. context.set_deadline(timespec);
  56. // The actual RPC.
  57. Status status = stub_ -> vehicleControl(&context,request,&reply);
  58. // Act upon its status.
  59. if (status.ok()) {
  60. if(reply.id() == gstrid)
  61. {
  62. shiftCMD = reply.shiftcmd();
  63. steeringWheelAngleCMD = reply.steeringwheelanglecmd();
  64. throttleCMD = reply.throttlecmd();
  65. std::cout<<"throttle:"<<reply.throttlecmd()<<std::endl;
  66. brakeCMD = reply.brakecmd();
  67. }
  68. else
  69. {
  70. // std::cout<<"id:"<<reply.id()<<std::endl;
  71. // if(throttleCMD > 0)throttleCMD -= 1.5;
  72. // if(throttleCMD <= 0)throttleCMD = 0;
  73. // if(brakeCMD > 0)brakeCMD -= 1.5;
  74. // if(brakeCMD <= 0)brakeCMD = 0;
  75. }
  76. return "vehicleControl RPC successed";
  77. } else {
  78. std::cout << status.error_code() << ": " << status.error_message()
  79. << std::endl;
  80. if(status.error_code() == 4)
  81. {
  82. std::cout << "vehicleControl RPC connect timeout" << std::endl;
  83. }
  84. return "vehicleControl RPC failed";
  85. }
  86. }
  87. void VehicleControlClient::updateControlData(void)
  88. {
  89. #if 0
  90. std::cout<<"shift:"<<shiftCMD<<std::endl;
  91. std::cout<<"steeringWheelAngle:"<<steeringWheelAngleCMD<<std::endl;
  92. std::cout<<"throttle:"<<throttleCMD<<std::endl;
  93. std::cout<<"brake:"<<brakeCMD<<std::endl;
  94. #endif
  95. std::cout<<"\n"<<"shift:"<<shiftCMD<<std::endl;
  96. std::cout<<"steeringWheelAngle:"<<steeringWheelAngleCMD<<std::endl;
  97. std::cout<<"throttle:"<<throttleCMD<<std::endl;
  98. std::cout<<"brake:"<<brakeCMD<<"\n"<<std::endl;
  99. iv::remotectrl xmsg;
  100. if(modeCMD == CtrlMode::CMD_REMOTE || modeCMD == CtrlMode::CMD_CLOUD_PLATFORM)
  101. xmsg.set_ntype(iv::remotectrl::CtrlType::remotectrl_CtrlType_REMOTE);
  102. else if(modeCMD == CtrlMode::CMD_AUTO)
  103. xmsg.set_ntype(iv::remotectrl::CtrlType::remotectrl_CtrlType_AUTO);
  104. else if(modeCMD == CtrlMode::CMD_EMERGENCY_STOP)
  105. xmsg.set_ntype(iv::remotectrl::CtrlType::remotectrl_CtrlType_STOP);
  106. if(modeCMD == CtrlMode::CMD_REMOTE || modeCMD == CtrlMode::CMD_CLOUD_PLATFORM)
  107. {
  108. xmsg.set_acc(throttleCMD);
  109. xmsg.set_brake(brakeCMD);
  110. xmsg.set_wheel(steeringWheelAngleCMD);
  111. if(shiftCMD == org::jeecg::defsControl::grpc::ShiftStatus::SHIFT_DRIVE)
  112. xmsg.set_shift(1);
  113. else if(shiftCMD == org::jeecg::defsControl::grpc::ShiftStatus::SHIFT_REVERSE)
  114. xmsg.set_shift(-1);
  115. else
  116. xmsg.set_shift(0);
  117. }
  118. else if(modeCMD == CtrlMode::CMD_AUTO)
  119. {
  120. xmsg.set_acc(0.0);
  121. xmsg.set_brake(0.0);
  122. xmsg.set_wheel(0.0);
  123. xmsg.set_shift(0);
  124. }
  125. else
  126. {
  127. xmsg.set_acc(0.0);
  128. xmsg.set_brake(100.0);
  129. xmsg.set_wheel(0.0);
  130. xmsg.set_shift(0);
  131. }
  132. mpa->ModuleSendMsg(xmsg);
  133. }
  134. void VehicleControlClient::run()
  135. {
  136. QTime xTime;
  137. xTime.start();
  138. uint64_t lastTime = xTime.elapsed();
  139. uint64_t interval = std::atoi(gstrcontrolInterval.c_str());
  140. while (true)
  141. {
  142. if((xTime.elapsed() - lastTime)>=interval)
  143. {
  144. std::string reply = vehicleControl();
  145. std::cout<< reply <<std::endl;
  146. updateControlData();
  147. lastTime = xTime.elapsed();
  148. }
  149. }
  150. }
  151. void VehicleControlClient::ctrlMode_Changed_Slot(org::jeecg::defsControl::grpc::CtrlMode ctrlMode)
  152. {
  153. modeCMD = ctrlMode;
  154. }
  155. VehicleChangeCtrlModeClient::VehicleChangeCtrlModeClient(std::shared_ptr<Channel> channel)
  156. {
  157. stub_ = VehicleControl::NewStub(channel);
  158. }
  159. VehicleChangeCtrlModeClient::~VehicleChangeCtrlModeClient(void)
  160. {
  161. }
  162. std::string VehicleChangeCtrlModeClient::changeCtrlMode(void)
  163. {
  164. // Data we are sending to the server.
  165. Empty request;
  166. request.set_id(gstrid);
  167. // Container for the data we expect from the server.
  168. CtrlModeReply reply;
  169. // Context for the client. It could be used to convey extra information to
  170. // the server and/or tweastd::cout<<"shift:"<<shiftCMD<<std::endl;k certain RPC behaviors.
  171. ClientContext context;
  172. gpr_timespec timespec;
  173. timespec.tv_sec = 1;
  174. timespec.tv_nsec = 0;
  175. timespec.clock_type = GPR_TIMESPAN;
  176. context.set_deadline(timespec);
  177. // The actual RPC.
  178. Status status = stub_ -> changeCtrlMode(&context,request,&reply);
  179. // Act upon its status.
  180. if (status.ok()) {
  181. if(reply.id() == gstrid)
  182. {
  183. modeCMD = reply.modecmd();
  184. }
  185. return "changeCtrlMode RPC successed";
  186. } else {
  187. std::cout << status.error_code() << ": " << status.error_message()
  188. << std::endl;
  189. if(status.error_code() == 4)
  190. {
  191. std::cout << "vehicleControl RPC connect timeout" << std::endl;
  192. }
  193. return "changeCtrlMode RPC failed";
  194. }
  195. }
  196. void VehicleChangeCtrlModeClient::updateCtrolMode(void)
  197. {
  198. // std::cout<<"modeCMD:"<<modeCMD<<std::endl;
  199. emit ctrlMode_Changed(modeCMD);
  200. }
  201. void VehicleChangeCtrlModeClient::run()
  202. {
  203. QTime xTime;
  204. xTime.start();
  205. uint64_t lastTime = xTime.elapsed();
  206. uint64_t interval = std::atoi(gstrcontrolInterval.c_str());
  207. while (true)
  208. {
  209. if((xTime.elapsed() - lastTime)>=interval)
  210. {
  211. std::string reply = changeCtrlMode();
  212. std::cout<< reply <<std::endl;
  213. updateCtrolMode();
  214. lastTime = xTime.elapsed();
  215. }
  216. }
  217. }
  218. VehicleUploadMapClient::VehicleUploadMapClient(std::shared_ptr<Channel> channel)
  219. {
  220. stub_ = VehicleControl::NewStub(channel);
  221. }
  222. VehicleUploadMapClient::~VehicleUploadMapClient(void)
  223. {
  224. }
  225. std::string VehicleUploadMapClient::uploadMap(void)
  226. {
  227. // Data we are sending to the server.
  228. Empty request;
  229. request.set_id(gstrid);
  230. // Container for the data we expect from the server.
  231. UploadMapReply reply;
  232. // Context for the client. It could be used to convey extra information to
  233. // the server and/or tweak certain RPC behaviors.
  234. ClientContext context;
  235. gpr_timespec timespec;
  236. timespec.tv_sec = 2;
  237. timespec.tv_nsec = 0;
  238. timespec.clock_type = GPR_TIMESPAN;
  239. context.set_deadline(timespec);
  240. // The actual RPC.
  241. Status status = stub_ -> UploadMap(&context,request,&reply);
  242. // Act upon its status.
  243. if (status.ok()) {
  244. if(reply.id() == gstrid)
  245. {
  246. // std::cout<<reply.id()<<std::endl;
  247. isNeedMap = false;
  248. patrolPathID = "noPath";
  249. POIPoints.clear();
  250. isNeedMap = reply.isneedmap();
  251. // std::cout<<reply.isneedmap()<<std::endl;
  252. patrolPathID = reply.patrolpathid();
  253. // std::cout<<reply.patrolpathid()<<std::endl;
  254. for(int i = 0;i < reply.mappoints_size();i++)
  255. {
  256. POIPoints.append(reply.mappoints(i));
  257. // std::cout<<reply.mappoints(i).index()<<std::endl;
  258. }
  259. }
  260. return "UploadMap RPC successed";
  261. } else {
  262. std::cout << status.error_code() << ": " << status.error_message()
  263. << std::endl;
  264. if(status.error_code() == 4)
  265. {
  266. std::cout << "vehicleControl RPC connect timeout" << std::endl;
  267. }
  268. return "UploadMap RPC failed";
  269. }
  270. }
  271. void VehicleUploadMapClient::updateMapPOIData(void)
  272. {
  273. std::cout<<"isNeedMap:"<<isNeedMap<<std::endl;
  274. std::cout<<"patrolPathID:"<<patrolPathID<<std::endl;
  275. emit patrolPOI_Recieved(patrolPathID);
  276. }
  277. void VehicleUploadMapClient::run()
  278. {
  279. QTime xTime;
  280. xTime.start();
  281. uint64_t lastTime = xTime.elapsed();
  282. uint64_t interval = std::atoi(gstrcontrolInterval.c_str());
  283. while (true)
  284. {
  285. if((xTime.elapsed() - lastTime)>=interval)
  286. {
  287. if(isNeedMap == false)
  288. {
  289. std::string reply = uploadMap();
  290. // std::cout<< reply <<std::endl;
  291. if(isNeedMap == true)
  292. {
  293. updateMapPOIData();
  294. }
  295. }
  296. lastTime = xTime.elapsed();
  297. }
  298. }
  299. }
  300. void VehicleUploadMapClient::uploadPath_Finished_Slot(std::string pathID)
  301. {
  302. std::cout<<"Path ID:"<<pathID<<" upload finished"<<std::endl;
  303. if(isNeedMap == true)
  304. {
  305. isNeedMap = false;
  306. }
  307. }