#include #include #include #include "xmlparam.h" #include "modulecomm.h" #include "ivbacktrace.h" #include "ivversion.h" #include "canmsg.pb.h" #include "decition.pb.h" #include "chassis.pb.h" #include "torquebrake.h" #include #ifdef Q_OS_LINUX #include #endif #include "candbc.h" #include "sterraes.h" sterraes * gpsterraes; static void * gpacansend; static void * gpadecition; static void * gpachassis; static std::string gstrmemdecition; static std::string gstrmemcansend; static std::string gstrmemchassis; static bool gbSendRun = true; static bool gbChassisEPS = false; static iv::brain::decition gdecition_def; static iv::brain::decition gdecition; static QTime gTime; static int gnLastSendTime = 0; static int gnLastRecvDecTime = -1000; static int gnDecitionNum = 0; //when is zero,send default; const int gnDecitionNumMax = 100; static int gnIndex = 0; static bool gbHaveVehSpd = false; static double gfVehSpd = 0.0; static bool gbHaveWheelAngle = false; static double gfWheelAngle = 0.0; static double gfWheelSpeedLim = 300; //300 degrees per second static QMutex gMutex; static std::thread * gpsendthread = NULL; unsigned char ADS_EPS_1[24];// 0x195/405 unsigned char ADS_EPS_3[24]; // 0x1BC/444 unsigned char ADS_ONEBOX_1[24];// 0x159/345 unsigned char ADS_VCU_1[24]; // 0x167/359 static int gnState = 0; //0 not act 1 act CANPacker * gpPacker; std::vector mvectorADSEPS1; std::vector mvectorADSEPS3; std::vector mvectorADSONEBOX1; std::vector mvectorADSVCU1; void set_EPS1_signal(std::string strsigname,double value){ gpsterraes->set_EPS1_signal(strsigname,value); } void set_EPS3_signal(std::string strsigname,double value){ gpsterraes->set_EPS3_signal(strsigname,value); } void set_ONEBOX1_signal(std::string strsigname,double value){ gpsterraes->set_ONEBOX1_signal(strsigname,value); } void set_VCU1_signal(std::string strsigname,double value){ gpsterraes->set_VCU1_signal(strsigname,value); } void ExecSend(); void executeDecition(const iv::brain::decition &decition) { } void Activate() { std::this_thread::sleep_for(std::chrono::milliseconds(100)); iv::brain::decition xdecition; xdecition.set_brake(0.0); xdecition.set_torque(0.0); // for(int j=0;j<100000;j++) // { std::cout<<" run "<CopyFrom(xraw); // qDebug(" 0x144: %02X %02X %02X %02X %02X %02X %02X %02X",byte_144[0],byte_144[1],byte_144[2],byte_144[3], // byte_144[4],byte_144[5],byte_144[6],byte_144[7]); xmsg.set_channel(0); xmsg.set_index(gnIndex); xraw.set_id(0x1BC); xraw.set_data(ADS_EPS_3,24); xraw.set_bext(false); xraw.set_bremote(false); xraw.set_len(24); xmsg.set_channel(0); // iv::can::canraw * pxraw1BC = xmsg.add_rawmsg(); // pxraw1BC->CopyFrom(xraw); xraw.set_id(0x159); xraw.set_data(ADS_ONEBOX_1,24); xraw.set_bext(false); xraw.set_bremote(false); xraw.set_len(24); // iv::can::canraw * pxraw159 = xmsg.add_rawmsg(); // pxraw159->CopyFrom(xraw); xraw.set_id(0x167); xraw.set_data(ADS_VCU_1,24); xraw.set_bext(false); xraw.set_bremote(false); xraw.set_len(24); // iv::can::canraw * pxraw167 = xmsg.add_rawmsg(); // pxraw167->CopyFrom(xraw); xmsg.set_channel(0); xmsg.set_index(gnIndex); gnIndex++; xmsg.set_mstime(QDateTime::currentMSecsSinceEpoch()); int ndatasize = xmsg.ByteSize(); char * strser = new char[ndatasize]; std::shared_ptr pstrser; pstrser.reset(strser); if(xmsg.SerializeToArray(strser,ndatasize)) { iv::modulecomm::ModuleSendMsg(gpacansend,strser,ndatasize); } else { std::cout<<"MainWindow::onTimer serialize error."<GetEPS3Data(ADS_EPS_3); ExecSend(); rollcouter++; if(rollcouter>14)rollcouter = 0; } void SendEPS1() { static int rollcouter = 0; // std::cout<<" roll count:: "<GetEPS1Data(ADS_EPS_1); ExecSend(); rollcouter++; if(rollcouter>14)rollcouter = 0; } void testes() { int i = 0; int rollcouter = 0; double fwheelang = 90.0; set_EPS1_signal("ADS_1_RollgCntr1",rollcouter); set_EPS1_signal("ADS_1_Resd1",0.0); set_EPS1_signal("ADS_1_SteerAgReq",fwheelang); set_EPS1_signal("ADS_1_SteerAgVld",1.0); set_EPS1_signal("ADS_1_SteerPilotAgEna",0.0); set_EPS1_signal("ADS_1_RollgCntr2",rollcouter); set_EPS1_signal("ADS_1_Resd2",0.0); set_EPS1_signal("ADS_1_SteerTqEna",1.0); set_EPS1_signal("ADS_1_LdwWarningCmd",0.0); set_EPS1_signal("ADS_1_LdwWarningCmdVld",2.0); set_EPS1_signal("ADS_1_SteerMaxTqReq",10.0); set_EPS1_signal("ADS_1_SteerMinTqReq",1.0); set_EPS1_signal("ADS_1_ADSHealthSts",1.0); set_EPS1_signal("CutOutFreshvalues_2CB_S",1.0); set_EPS1_signal("CutOutMAC_2CB_S",1.0); set_EPS3_signal("ADS_3_RollgCntr1",rollcouter); set_EPS3_signal("ADS_3_Resd1",0.0); set_EPS3_signal("ADS_3_SteerParkAgReq",0.0); set_EPS3_signal("ADS_3_SteerParkAgVld",0.0); set_EPS3_signal("ADS_3_SteerParkAgEna",0.0); set_EPS3_signal("ADS_3_RollgCntr2",rollcouter); set_EPS3_signal("ADS_3_Resd2",0.0); set_EPS3_signal("ADS_3_ParkFcnMode",0.0); set_EPS3_signal("ADS_3_ADSParkHealthSts",0.0); for(i=0;i<10;i++) { set_EPS1_signal("ADS_1_SteerPilotAgEna",0.0); SendEPS1(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } // for(i=0;i<10;i++) // { // set_EPS3_signal("ADS_3_SteerParkAgEna",1.0); // set_EPS3_signal("ADS_3_SteerParkAgReq",0.0); // set_EPS3_signal("ADS_3_SteerParkAgVld",0.0); // SendEPS3(); // std::this_thread::sleep_for(std::chrono::milliseconds(10)); // } for(i=0;i<3000;i++) { set_EPS1_signal("ADS_1_SteerPilotAgEna",2.0); set_EPS1_signal("ADS_1_SteerAgReq",fwheelang); set_EPS1_signal("ADS_1_SteerAgVld",1.0); SendEPS1(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } for(i=0;i<10;i++) { set_EPS1_signal("ADS_1_SteerPilotAgEna",0.0); SendEPS1(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } void sendthread() { initial(); iv::brain::decition xdecition; UnAcitvate(); // UnAcitvate(); int nstate = 0; //0 Un 1 Activate // Activate(); while(gbSendRun) { if(gnDecitionNum <= 0) { if(nstate == 1) { UnAcitvate(); nstate = 0; } xdecition.CopyFrom(gdecition_def); } else { if(nstate == 0) { Activate(); nstate = 1; } gMutex.lock(); xdecition.CopyFrom(gdecition); gMutex.unlock(); gnDecitionNum--; } #ifdef TORQUEBRAKETEST if(gnothavetb < 10) { iv::controller::torquebrake xtb; gMutextb.lock(); xtb.CopyFrom(gtb); gMutextb.unlock(); if(xtb.enable()) { xdecition.set_torque(xtb.torque()); xdecition.set_brake(xtb.brake()); std::cout<<" use xtb. torque: "<control_torque(xtb.torque()); // gcontroller->control_brake(xtb.brake()); // qDebug("use tb value torque is %f brake is %f",xtb.torque(),xtb.brake()); } else { // qDebug("torquebrake not enable."); } gnothavetb++; } #endif executeDecition(xdecition); if(gbChassisEPS == false) ExecSend(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } UnAcitvate(); } #ifdef Q_OS_LINUX void sig_int(int signo) { gbSendRun = false; gpsendthread->join(); iv::modulecomm::Unregister(gpacansend); iv::modulecomm::Unregister(gpachassis); iv::modulecomm::Unregister(gpadecition); std::cout<<" controller exit."<