|
@@ -1,7 +1,9 @@
|
|
#include "ivdecision_brain.h"
|
|
#include "ivdecision_brain.h"
|
|
|
|
|
|
|
|
+#include <QCoreApplication>
|
|
#include "common/obs_predict.h"
|
|
#include "common/obs_predict.h"
|
|
#include "ivlog.h"
|
|
#include "ivlog.h"
|
|
|
|
+#include "xmlparam.h"
|
|
|
|
|
|
extern iv::Ivlog * givlog;
|
|
extern iv::Ivlog * givlog;
|
|
|
|
|
|
@@ -26,6 +28,7 @@ namespace iv {
|
|
ivdecision_brain::ivdecision_brain()
|
|
ivdecision_brain::ivdecision_brain()
|
|
{
|
|
{
|
|
mvehState = VehState::normalRun;
|
|
mvehState = VehState::normalRun;
|
|
|
|
+ loadxml();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -34,6 +37,23 @@ int ivdecision_brain::getdecision(brain::decition &xdecition,iv::brain::brainsta
|
|
static qint64 nlastdecisiontime = 0;
|
|
static qint64 nlastdecisiontime = 0;
|
|
static qint64 nLastMapUpdate = 0;
|
|
static qint64 nLastMapUpdate = 0;
|
|
iv::GPSData now_gps_ins;
|
|
iv::GPSData now_gps_ins;
|
|
|
|
+
|
|
|
|
+ std::shared_ptr<iv::hmi::hmimsg> hmi_ptr;
|
|
|
|
+ if(GetHMImsg(hmi_ptr) == true)
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.mbRunPause = hmi_ptr->mbpause();
|
|
|
|
+ if(hmi_ptr->mbbochemode())
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.bocheMode = true;
|
|
|
|
+ }
|
|
|
|
+ ServiceCarStatus.busmode = hmi_ptr->mbbusmode();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(ServiceCarStatus.mbRunPause)
|
|
|
|
+ {
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
if(GetGPS(now_gps_ins) == false)
|
|
if(GetGPS(now_gps_ins) == false)
|
|
{
|
|
{
|
|
return -1; //No GPS Position
|
|
return -1; //No GPS Position
|
|
@@ -66,6 +86,7 @@ int ivdecision_brain::getdecision(brain::decition &xdecition,iv::brain::brainsta
|
|
updatev2x();
|
|
updatev2x();
|
|
updateultra();
|
|
updateultra();
|
|
updateradar();
|
|
updateradar();
|
|
|
|
+ updategroupinfo();
|
|
|
|
|
|
iv::decition::Decition decition= getDecideFromGPS(*now_gps_ins,mgpsMapLine,lidarptr,xvectorper,xtrafficlight);
|
|
iv::decition::Decition decition= getDecideFromGPS(*now_gps_ins,mgpsMapLine,lidarptr,xvectorper,xtrafficlight);
|
|
|
|
|
|
@@ -103,7 +124,227 @@ int ivdecision_brain::getdecision(brain::decition &xdecition,iv::brain::brainsta
|
|
xbs.set_decision_period((QDateTime::currentMSecsSinceEpoch() - nlastdecisiontime));
|
|
xbs.set_decision_period((QDateTime::currentMSecsSinceEpoch() - nlastdecisiontime));
|
|
nlastdecisiontime = QDateTime::currentMSecsSinceEpoch();
|
|
nlastdecisiontime = QDateTime::currentMSecsSinceEpoch();
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return 1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ivdecision_brain::updategroupinfo()
|
|
|
|
+{
|
|
|
|
+ std::shared_ptr<iv::radio::radio_send> groupmsg_ptr;
|
|
|
|
+
|
|
|
|
+ if(false == Getp900(groupmsg_ptr))
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.group_server_status = groupmsg_ptr->server_status();
|
|
|
|
+ ServiceCarStatus.group_comm_speed= (float)groupmsg_ptr->car_control_speed();
|
|
|
|
+ ServiceCarStatus.group_state= groupmsg_ptr->cmd_mode();
|
|
|
|
+
|
|
|
|
+ if(ServiceCarStatus.group_state!=2){
|
|
|
|
+ ServiceCarStatus.group_comm_speed=0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ivdecision_brain::updatechassistocarstatus()
|
|
|
|
+{
|
|
|
|
+ std::shared_ptr<iv::chassis> xchassis_ptr;
|
|
|
|
+ if(false == Getchassis(xchassis_ptr))
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.epb = xchassis_ptr->epbfault();
|
|
|
|
+ ServiceCarStatus.grade = xchassis_ptr->shift();
|
|
|
|
+ ServiceCarStatus.driverMode = xchassis_ptr->drivemode();
|
|
|
|
+ if(xchassis_ptr->has_epsmode()){
|
|
|
|
+ ServiceCarStatus.epsMode = xchassis_ptr->epsmode();
|
|
|
|
+ ServiceCarStatus.receiveEps=true;
|
|
|
|
+ if(ServiceCarStatus.epsMode == 0)
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.mbRunPause = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(xchassis_ptr->has_torque())
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.torque_st = xchassis_ptr->torque();
|
|
|
|
+ if(ServiceCarStatus.msysparam.mvehtype=="bus"){
|
|
|
|
+ ServiceCarStatus.torque_st = xchassis_ptr->torque()*0.4;
|
|
|
|
+ }
|
|
|
|
+ std::cout<<"******* xchassis.torque:"<< xchassis_ptr->torque()<<std::endl;
|
|
|
|
+ std::cout<<"******* ServiceCarStatus.torque_st:"<< ServiceCarStatus.torque_st<<std::endl;
|
|
|
|
+ givlog->warn(" ServiceCarStatus.torque_st: is %f",ServiceCarStatus.torque_st);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(xchassis_ptr->has_engine_speed())
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.engine_speed = xchassis_ptr->engine_speed();
|
|
|
|
+
|
|
|
|
+ std::cout<<"******* xchassis.engine_speed:"<< xchassis_ptr->engine_speed()<<std::endl;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ivdecision_brain::loadxml()
|
|
|
|
+{
|
|
|
|
+ QString strpath = QCoreApplication::applicationDirPath();
|
|
|
|
+ strpath = strpath + "/ADS_decision.xml";
|
|
|
|
+ iv::xmlparam::Xmlparam xp(strpath.toStdString());
|
|
|
|
+ ServiceCarStatus.msysparam.mstrvin = xp.GetParam("vin","10000000000000001");
|
|
|
|
+ ServiceCarStatus.msysparam.mstrid = xp.GetParam("id","1");
|
|
|
|
+ ServiceCarStatus.msysparam.mstriccid = xp.GetParam("iccid","11111111111111111111");
|
|
|
|
+ ServiceCarStatus.msysparam.mvehtype= xp.GetParam("vehType","yuhesen");
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.msysparam.vehWidth = atof(xp.GetParam("vehWidth","2.1").data());
|
|
|
|
+ ServiceCarStatus.msysparam.vehLenth = atof(xp.GetParam("vehLenth","4.6").data());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /*============= 20200113 apollo_fu add ===========*/
|
|
|
|
+ std::string str_zhuchetime = xp.GetParam("zhuchetime","16");
|
|
|
|
+ ServiceCarStatus.msysparam.mzhuchetime =atoi(str_zhuchetime.data());
|
|
|
|
+ /*============= end ================================== */
|
|
|
|
+
|
|
|
|
+ std::string strepsoff = xp.GetParam("epsoff","0.0");
|
|
|
|
+ ServiceCarStatus.mfEPSOff = atof(strepsoff.data());
|
|
|
|
+
|
|
|
|
+ std::string strroadmode_vel = xp.GetParam("roadmode0","10");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode0 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode11","30");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode11 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode14","15");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode14 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ //float a = ServiceCarStatus.mroadmode_vel.mfmode14;
|
|
|
|
+ //cout<<"........"<<a<<endl;
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode15","15");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode15 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ /*==================== 20200113 apollo_fu add =================*/
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode5","10");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode5 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode13","5");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode13 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode16","8");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode16 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode17","8");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode17 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+ strroadmode_vel = xp.GetParam("roadmode18","5");
|
|
|
|
+ ServiceCarStatus.mroadmode_vel.mfmode18 = atof(strroadmode_vel.data());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /*========================= end =============================*/
|
|
|
|
+
|
|
|
|
+ std::string group_cotrol = xp.GetParam("group","false");
|
|
|
|
+ if(group_cotrol=="true"){
|
|
|
|
+ ServiceCarStatus.group_control=true;
|
|
|
|
+ }else{
|
|
|
|
+ ServiceCarStatus.group_control=false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string speed_control = xp.GetParam("speed","false");
|
|
|
|
+ if(speed_control=="true"){
|
|
|
|
+ ServiceCarStatus.speed_control=true;
|
|
|
|
+ }else{
|
|
|
|
+ ServiceCarStatus.speed_control=false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ std::string strparklat = xp.GetParam("parklat","39.0624557");
|
|
|
|
+ std::string strparklng = xp.GetParam("parklng","117.3575493");
|
|
|
|
+ std::string strparkheading = xp.GetParam("parkheading","112.5");
|
|
|
|
+ std::string strparktype = xp.GetParam("parktype","1");
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.mfParkLat = atof(strparklat.data());
|
|
|
|
+ ServiceCarStatus.mfParkLng = atof(strparklng.data());
|
|
|
|
+ ServiceCarStatus.mfParkHeading = atof(strparkheading.data());
|
|
|
|
+ ServiceCarStatus.mnParkType = atoi(strparktype.data());
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.mLidarRotation = atof(xp.GetParam("LidarRotation","90.0").data());
|
|
|
|
+ ServiceCarStatus.mLidarRangeUnit = atof(xp.GetParam("LidarRangeUnit","5.0").data());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ std::string lightlon = xp.GetParam("lightlon","0");
|
|
|
|
+ std::string lightlat = xp.GetParam("lightlat","0");
|
|
|
|
+ ServiceCarStatus.iTrafficeLightLat=atof(lightlat.data());
|
|
|
|
+ ServiceCarStatus.iTrafficeLightLon=atof(lightlon.data());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //mobileEye
|
|
|
|
+ std::string timeWidth =xp.GetParam("waitGpsTimeWidth","5000");
|
|
|
|
+ std::string garageLong =xp.GetParam("outGarageLong","10");
|
|
|
|
+ ServiceCarStatus.waitGpsTimeWidth=atof(timeWidth.data());
|
|
|
|
+ ServiceCarStatus.outGarageLong=atof(garageLong.data());
|
|
|
|
+ //mobileEye end
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //lidar start
|
|
|
|
+ std::string lidarGpsXiuzheng = xp.GetParam("lidarGpsXiuzheng","1.0");
|
|
|
|
+ std::string radarGpsXiuzheng = xp.GetParam("radarGpsXiuzheng","3.0");
|
|
|
|
+ std::string rearRadarGpsXiuzheng = xp.GetParam("rearRadarGpsXiuzheng","0.5");
|
|
|
|
+ std::string rearLidarGpsXiuzheng = xp.GetParam("rearLidarGpsXiuzheng","1.0");
|
|
|
|
+ std::string frontGpsXiuzheng = xp.GetParam("frontGpsXiuzheng","3.0");
|
|
|
|
+ std::string rearGpsXiuzheng = xp.GetParam("rearGpsXiuzheng","1.0");
|
|
|
|
+ std::string gpsOffset_x = xp.GetParam("gpsOffset_X","0");
|
|
|
|
+ std::string gpsOffset_y = xp.GetParam("gpsOffset_Y","0");
|
|
|
|
+ std::string strexternmpc = xp.GetParam("ExternMPC","false"); //If Use MPC set true
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ adjuseGpsLidarPosition();
|
|
|
|
+
|
|
|
|
+ if(strexternmpc == "true")
|
|
|
|
+ {
|
|
|
|
+// mbUseExternMPC = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ServiceCarStatus.msysparam.lidarGpsXiuzheng = atof(lidarGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.radarGpsXiuzheng = atof(radarGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.rearRadarGpsXiuzheng = atof(rearRadarGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.rearLidarGpsXiuzheng = atof(rearLidarGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.frontGpsXiuzheng = atof(frontGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.rearGpsXiuzheng = atof(rearGpsXiuzheng.data());
|
|
|
|
+ ServiceCarStatus.msysparam.gpsOffset_x = atof(gpsOffset_x.data());
|
|
|
|
+ ServiceCarStatus.msysparam.gpsOffset_y = atof(gpsOffset_y.data());
|
|
|
|
+ // lidar end
|
|
|
|
+
|
|
|
|
+ std::string strObsPredict = xp.GetParam("obsPredict","false"); //If Use MPC set true
|
|
|
|
+ if(strObsPredict == "true")
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.useObsPredict = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string inRoadAvoid = xp.GetParam("inRoadAvoid","false"); //If Use MPC set true
|
|
|
|
+ if(inRoadAvoid == "true")
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.inRoadAvoid = true;
|
|
|
|
+ }else{
|
|
|
|
+ ServiceCarStatus.inRoadAvoid = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string avoidObs = xp.GetParam("avoidObs","false"); //If Use MPC set true
|
|
|
|
+ if(avoidObs == "true")
|
|
|
|
+ {
|
|
|
|
+ ServiceCarStatus.avoidObs = true;
|
|
|
|
+ }else{
|
|
|
|
+ ServiceCarStatus.avoidObs = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //map
|
|
|
|
+
|
|
|
|
+ // mstrmemmap_index = xp.GetParam("msg_mapindex","map_index");
|
|
}
|
|
}
|
|
|
|
|
|
void ivdecision_brain::updatev2x()
|
|
void ivdecision_brain::updatev2x()
|
|
@@ -168,6 +409,16 @@ void ivdecision_brain::updatev2x()
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void ivdecision_brain::adjuseGpsLidarPosition()
|
|
|
|
+{
|
|
|
|
+ ServiceCarStatus.msysparam.lidarGpsXiuzheng -= ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+ ServiceCarStatus.msysparam.radarGpsXiuzheng -= ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+ ServiceCarStatus.msysparam.rearRadarGpsXiuzheng += ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+ ServiceCarStatus.msysparam.rearLidarGpsXiuzheng += ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+ ServiceCarStatus.msysparam.frontGpsXiuzheng -= ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+ ServiceCarStatus.msysparam.rearGpsXiuzheng += ServiceCarStatus.msysparam.gpsOffset_y;
|
|
|
|
+}
|
|
|
|
+
|
|
void ivdecision_brain::updateultra()
|
|
void ivdecision_brain::updateultra()
|
|
{
|
|
{
|
|
std::shared_ptr<iv::ultrasonic::ultrasonic> xultra_ptr;
|
|
std::shared_ptr<iv::ultrasonic::ultrasonic> xultra_ptr;
|