|
@@ -30,6 +30,10 @@ GearLevelIndicate ggearRealVal;
|
|
|
ChassisErrCode gchassErr;
|
|
|
StsMach gstsMach;
|
|
|
float gsteerDeg, gspeed;
|
|
|
+double lastspeedSetVal = 0;
|
|
|
+double lastEpsSetVal = 0;
|
|
|
+
|
|
|
+GearPrkgAssistReq lastgearSetVal= GearPrkgAssistReq::kNoRequest;
|
|
|
|
|
|
static void ShareChassis(void * pa,iv::chassis * pchassis)
|
|
|
{
|
|
@@ -49,33 +53,75 @@ static void ShareChassis(void * pa,iv::chassis * pchassis)
|
|
|
|
|
|
void executeDecition(const iv::brain::decition decition)
|
|
|
{
|
|
|
-// std::cout<<"acc is "<<decition.torque()<<" ang is "<<decition.wheelangle()<<std::endl;
|
|
|
-
|
|
|
- car_control_module.sm_task_20ms(); // 线控状态机函数
|
|
|
- switch (decition.gear()) {
|
|
|
- case 1:
|
|
|
- car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearP);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearR);
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearD);
|
|
|
- break;
|
|
|
- default:
|
|
|
- car_control_module.set_target_gear(GearPrkgAssistReq::kNoRequest);
|
|
|
- break;
|
|
|
+ std::cout<<"Command: Acc is "<<decition.accelerator()<<" Angle is "<<decition.wheelangle()<<" DangWei is "<<decition.gear()<<std::endl;
|
|
|
+
|
|
|
+ GearPrkgAssistReq gearSetVal= GearPrkgAssistReq::kNoRequest;
|
|
|
+ double speedSetVal = 0;
|
|
|
+ double EpsSetVal = 0;
|
|
|
+
|
|
|
+ if(decition.has_gear()){
|
|
|
+ switch (decition.gear()) {
|
|
|
+ case 1:
|
|
|
+ //car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearP);
|
|
|
+ gearSetVal=GearPrkgAssistReq::kTargetGearP;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ //car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearR);
|
|
|
+ gearSetVal=GearPrkgAssistReq::kTargetGearR;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ //car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearD);
|
|
|
+ gearSetVal=GearPrkgAssistReq::kTargetGearD;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ //car_control_module.set_target_gear(GearPrkgAssistReq::kNoRequest);
|
|
|
+ gearSetVal=GearPrkgAssistReq::kNoRequest;;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ lastgearSetVal=gearSetVal;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ gearSetVal=lastgearSetVal;
|
|
|
}
|
|
|
|
|
|
- car_control_module.set_target_acc_mps2(decition.accelerator());
|
|
|
- car_control_module.set_target_pinion_ag_in_deg(decition.wheelangle());
|
|
|
- if(decition.leftlamp()==true)
|
|
|
+ if(decition.has_accelerator()){
|
|
|
+ speedSetVal=decition.accelerator();
|
|
|
+ lastspeedSetVal=speedSetVal;
|
|
|
+ //speedSetVal=0.1;
|
|
|
+ // car_control_module.set_target_acc_mps2(decition.accelerator());
|
|
|
+// car_control_module.set_target_acc_mps2(0.1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ speedSetVal=lastspeedSetVal;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(decition.has_wheelangle())
|
|
|
+ {
|
|
|
+ // car_control_module.set_target_pinion_ag_in_deg(0.0);
|
|
|
+ EpsSetVal=decition.wheelangle();
|
|
|
+ lastEpsSetVal=EpsSetVal;
|
|
|
+ // EpsSetVal=0.0;//
|
|
|
+ // car_control_module.set_target_pinion_ag_in_deg(decition.wheelangle());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ EpsSetVal=lastEpsSetVal;
|
|
|
+ }
|
|
|
+ // gearSetVal=GearPrkgAssistReq::kTargetGearD;
|
|
|
+ car_control_module.set_target_gear(gearSetVal);
|
|
|
+ car_control_module.set_target_acc_mps2(speedSetVal);
|
|
|
+ car_control_module.set_target_pinion_ag_in_deg(EpsSetVal);
|
|
|
+
|
|
|
+ if(decition.has_leftlamp() && decition.leftlamp()==true)
|
|
|
car_control_module.set_turn_light_status(TurnLightIndicReq::kLeft);
|
|
|
- else if(decition.rightlamp()==true)
|
|
|
+ else if(decition.has_rightlamp() && decition.rightlamp()==true)
|
|
|
car_control_module.set_turn_light_status(TurnLightIndicReq::kRight);
|
|
|
else
|
|
|
car_control_module.set_turn_light_status(TurnLightIndicReq::kOff);
|
|
|
-/*
|
|
|
+
|
|
|
+ /*
|
|
|
void set_lat_lgt_ctrl_req(bool req); // 握手请求, true:请求握手, false:退出握手
|
|
|
void set_target_gear(GearPrkgAssistReq tar); // 目标档位请求
|
|
|
bool is_lat_lgt_ctrl_active(); // 底盘控制状态反馈, true: 底盘可线控, false: 底盘不可控
|
|
@@ -104,18 +150,22 @@ void ListenDeciton(const char * strdata,const unsigned int nSize,const unsigned
|
|
|
qDebug("not D");
|
|
|
}
|
|
|
if((oldtime - QDateTime::currentMSecsSinceEpoch())<-100)
|
|
|
- qDebug("dection time is %ld diff is %ld ",QDateTime::currentMSecsSinceEpoch(),oldtime - QDateTime::currentMSecsSinceEpoch());
|
|
|
- oldtime = QDateTime::currentMSecsSinceEpoch();
|
|
|
+ // qDebug("dection time is %ld diff is %ld ",QDateTime::currentMSecsSinceEpoch(),oldtime - QDateTime::currentMSecsSinceEpoch());
|
|
|
+ oldtime = QDateTime::currentMSecsSinceEpoch();
|
|
|
gMutex.lock();
|
|
|
gdecition.CopyFrom(xdecition);
|
|
|
gMutex.unlock();
|
|
|
gnDecitionNum = gnDecitionNumMax;
|
|
|
+ std::cout<<"update decision. "<<std::endl;
|
|
|
}
|
|
|
|
|
|
|
|
|
void sendthread()
|
|
|
{
|
|
|
iv::brain::decition xdecition;
|
|
|
+// car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearD);
|
|
|
+// car_control_module.sm_task_20ms(); // 线控状态机函数
|
|
|
+
|
|
|
while(1)
|
|
|
{
|
|
|
if(gnDecitionNum <= 0)
|
|
@@ -130,10 +180,22 @@ void sendthread()
|
|
|
gnDecitionNum--;
|
|
|
}
|
|
|
|
|
|
- gstatus = car_control_module.is_lat_lgt_ctrl_active();
|
|
|
- executeDecition(xdecition);
|
|
|
+ bool bstatus = car_control_module.is_lat_lgt_ctrl_active();
|
|
|
+
|
|
|
+ if(bstatus == true)
|
|
|
+ {
|
|
|
+ // std::cout<<"di pan ke kong "<<std::endl;
|
|
|
+ executeDecition(xdecition);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<" lat lgt req. status: "<<(int)car_control_module.get_chassis_err_state()
|
|
|
+ <<" machine state: "<<(int)car_control_module.get_chassis_statemachine_sts()<< std::endl;
|
|
|
+ car_control_module.set_lat_lgt_ctrl_req(true);
|
|
|
+ }
|
|
|
|
|
|
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
|
|
+ car_control_module.sm_task_20ms(); // 线控状态机函数
|
|
|
+ std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -142,6 +204,7 @@ void * gpa;
|
|
|
void recvthread()
|
|
|
{
|
|
|
iv::chassis xchassis;
|
|
|
+ int tmp1[10] = {0,1,2,3,4,5,6,7,8,9};
|
|
|
while(1)
|
|
|
{
|
|
|
gstatus = car_control_module.is_lat_lgt_ctrl_active();
|
|
@@ -152,6 +215,9 @@ void recvthread()
|
|
|
gspeed = car_control_module.get_current_vehicle_spd_in_ms();
|
|
|
gsteerDeg = car_control_module.get_current_steer_ang_in_deg();
|
|
|
|
|
|
+ std::cout<<"FeedBack: current_vehicle_spd_in_ms is "<<gspeed<<"err code :"<<(int)gchassErr<<std::endl;
|
|
|
+
|
|
|
+
|
|
|
xchassis.set_angle_feedback(gsteerDeg);
|
|
|
|
|
|
ShareChassis(gpa,&xchassis);
|
|
@@ -182,8 +248,10 @@ int main(int argc, char *argv[])
|
|
|
strpath = argv[1];
|
|
|
std::cout<<strpath.toStdString()<<std::endl;
|
|
|
|
|
|
- car_control_module.set_lat_lgt_ctrl_req(true);
|
|
|
- car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearP);
|
|
|
+ // car_control_module.set_lat_lgt_ctrl_req(true);
|
|
|
+ // car_control_module.sm_task_20ms(); // 线控状态机函数
|
|
|
+
|
|
|
+ //car_control_module.set_target_gear(GearPrkgAssistReq::kTargetGearP);
|
|
|
|
|
|
iv::xmlparam::Xmlparam xp(strpath.toStdString());
|
|
|
std::string gstrmemdecition = xp.GetParam("dection","deciton");
|
|
@@ -193,7 +261,7 @@ int main(int argc, char *argv[])
|
|
|
gpadecition = iv::modulecomm::RegisterRecv(gstrmemdecition.data(),ListenDeciton);
|
|
|
|
|
|
std::thread xthread(sendthread);
|
|
|
- std::thread myxthread(recvthread);
|
|
|
+// std::thread myxthread(recvthread);
|
|
|
|
|
|
return a.exec();
|
|
|
}
|