319 lines
9.8 KiB
C++
319 lines
9.8 KiB
C++
#include "Sub3Judge07Xxqy.h"
|
||
#include "HFactory.h"
|
||
|
||
Sub3Judge07Xxqy::Sub3Judge07Xxqy()
|
||
{
|
||
m_exam = __NEW__(TKM3Item);
|
||
}
|
||
|
||
Sub3Judge07Xxqy::~Sub3Judge07Xxqy()
|
||
{
|
||
__DELETE__(m_exam);
|
||
}
|
||
|
||
bool Sub3Judge07Xxqy::dealJudgeEnter()
|
||
{
|
||
if(m_exam->TestPro != ItemProFlagInit) return false;
|
||
// if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return false;
|
||
|
||
const TChuanGan* cg = m_car->historyChuanGan();
|
||
const std::string& ksdd = TableSysSet->get211();
|
||
setSeed(cg->real.gps.sj);
|
||
|
||
m_itemv = TSub3Item07Xxqy();
|
||
m_itemv.Temp_LJJL_CM = cg->ai_ljjl_cm;
|
||
|
||
//SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音,0:不需要 1:需要
|
||
const std::vector<std::string>& s512 = TableSysSet->asArray512();
|
||
m_itemv.WavKind = s512.size() > 2 && s512[2] != "" ? std::atoi(s512[2].c_str()) : 0;
|
||
//SysSet[509]:1-3
|
||
//(*
|
||
// (1)Jslxmjl: 学校区域项目距离
|
||
// (2)学校区域是否刹车
|
||
// (3)学校区域限速值,不能大于30
|
||
//*)
|
||
const std::vector<std::string>& s509 = TableSysSet->asArray509();
|
||
m_itemv.Temp_XMJL = s509.size() > 0 && s509[0] != "" ? std::atoi(s509[0].c_str()) : 30;
|
||
|
||
m_itemv.Judge_JSC = s509.size() > 1 && s509[1] != "" ? std::atoi(s509[1].c_str()) == 1 : false;
|
||
m_itemv.Temp_XS = s509.size() > 2 && s509[2] != "" ? std::atoi(s509[2].c_str()) : 30;
|
||
if(ksdd != siteof::njdckm3)
|
||
{
|
||
if(m_itemv.Temp_XS > 30)
|
||
m_itemv.Temp_XS = 30;
|
||
}
|
||
|
||
//学校区域禁止按喇叭:0(默认)-不扣;1-扣分(20-51)
|
||
m_itemv.Forbidden_LaBa_Flag = s509.size() > 8 && s509[8] != "" ? std::atoi(s509[8].c_str()) == 1 : false;
|
||
|
||
if(ksdd == siteof::nj || ksdd == siteof::njdckm3 || m_itemv.WavKind == 1)
|
||
{
|
||
//ToDo:语音播报-->通过学校区域
|
||
}
|
||
|
||
//是否需要停车让行
|
||
m_itemv.Temp_TCRX = true;
|
||
//SysSet[334]-->2 学校区域随机行人相关
|
||
const std::vector<std::string>& s334 = TableSysSet->asArray334();
|
||
if(s334.size() > 1 && s334[1] != "") //20180823
|
||
{
|
||
//Randomize;
|
||
//a = Random(10) + 1; //1-10
|
||
int a = random2(1, 10);
|
||
if(a <= std::atoi(s334[1].c_str())) //20180823
|
||
{
|
||
//ToDo:语音播报-->前方有行人通过
|
||
m_itemv.Temp_TCRX = false;
|
||
m_itemv.SJXR_Flag = true;
|
||
m_car->createEventSound({itemNo(), sound::sub3_411002});
|
||
}
|
||
else
|
||
{
|
||
m_itemv.Temp_TCRX = true;
|
||
}
|
||
}
|
||
|
||
m_exam->TestPro = ItemProFlagJudge;
|
||
////ToDo2:生成进项目事件
|
||
return true;
|
||
}
|
||
|
||
void Sub3Judge07Xxqy::dealJudgeItem()
|
||
{
|
||
HELP_COST_TIME("");
|
||
if(m_exam->TestPro != ItemProFlagJudge) return;
|
||
if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return;
|
||
|
||
const TChuanGan* cg = m_car->historyChuanGan();
|
||
const TSensorInfo& sor = cg->real.sensor;
|
||
const TGpsInfo& gps = cg->real.gps;
|
||
const std::string& ksdd = TableSysSet->get211();
|
||
|
||
//禁止鸣号
|
||
if(m_itemv.Forbidden_LaBa_Flag == true || ksdd == siteof::scyb)
|
||
{
|
||
const TSensorInfo& sor1 = m_car->historySensor(1);
|
||
const TSensorInfo& sor2 = m_car->historySensor(2);
|
||
const TSensorInfo& sor3 = m_car->historySensor(3);
|
||
if(sor.lb == SYES && sor1.lb == SYES && sor2.lb == SNOT && sor3.lb == SNOT)
|
||
{
|
||
JUDGE_MARK_SUB3(20, "51", false);
|
||
}
|
||
}
|
||
|
||
#if JUDGE_USE_INSPECT
|
||
//无锡科研所规定学校区域全程速度不能大于30
|
||
m_itemv.Temp_XMJL = 50;
|
||
const TGpsInfo& gps1 = m_car->historyGps(1);
|
||
if(Tools::greater(gps.sd, 30) && Tools::greater(gps1.sd, 30))
|
||
{
|
||
JUDGE_MARK_SUB3(7, "02", false);
|
||
}
|
||
#endif
|
||
|
||
//20190305
|
||
if(ksdd == siteof::guizhou || ksdd == siteof::guizhouas)
|
||
{
|
||
if(!m_itemv.Temp_TCRX)
|
||
{
|
||
if(m_itemv.tcsj == 0)
|
||
{
|
||
if(cg->move == moveStop)
|
||
m_itemv.tcsj = cg->tkCnt;
|
||
}
|
||
else
|
||
{
|
||
if(cg->tkCnt - m_itemv.tcsj > 5*SECOND)
|
||
{
|
||
//ToDo:语音播报-->行人已通过
|
||
m_itemv.Temp_TCRX = true;
|
||
m_car->createEventSound({itemNo(), sound::sub3_411003});
|
||
}
|
||
else
|
||
{
|
||
if(cg->move != moveStop)
|
||
m_itemv.tcsj = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//20180823
|
||
if(m_itemv.Temp_TCRX == false && cg->move == moveStop)
|
||
{
|
||
m_itemv.Temp_TCRX = true;
|
||
if(m_car->historyMoveState(1) != moveStop)
|
||
{
|
||
//ToDo:语音播报-->行人已通过
|
||
m_car->createEventSound({itemNo(), sound::sub3_411003});
|
||
}
|
||
}
|
||
}
|
||
|
||
//特殊地点版本
|
||
if(ksdd == siteof::nj)
|
||
{
|
||
const TGpsInfo& gps1 = m_car->historyGps(1);
|
||
if(std::round(gps.sd) > m_itemv.Temp_XS && std::round(gps1.sd) > m_itemv.Temp_XS)
|
||
{
|
||
m_itemv.Temp_JL_NanJing = 0;
|
||
}
|
||
else
|
||
{
|
||
if(m_itemv.Temp_JL_NanJing == 0)
|
||
m_itemv.Temp_JL_NanJing = cg->ai_ljjl_cm;
|
||
}
|
||
if(m_itemv.Temp_JL_NanJing > 0)
|
||
{
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_JL_NanJing > 3000)
|
||
{
|
||
m_itemv.JSC_Flag = true;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(sor.jsc == SYES)
|
||
{
|
||
m_itemv.JSC_Flag = true;
|
||
}
|
||
|
||
bool OKFlag = false;
|
||
if(ksdd == siteof::nj || ksdd == siteof::njdckm3 || m_itemv.WavKind == 1)
|
||
{
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM > m_itemv.Temp_XMJL * 100)
|
||
{
|
||
OKFlag = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
OKFlag = true;
|
||
}
|
||
if(OKFlag == true)
|
||
{
|
||
if(ksdd == siteof::shandongjnkm3)
|
||
{
|
||
const TGpsInfo& gps1 = m_car->historyGps(1);
|
||
if(std::round(gps.sd) < m_itemv.Temp_XS && std::round(gps1.sd) < m_itemv.Temp_XS)
|
||
{
|
||
m_itemv.ShanDongKM3_JianSu_Flag = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
const TGpsInfo& gps1 = m_car->historyGps(1);
|
||
//车速大于30
|
||
if(std::round(gps.sd) > m_itemv.Temp_XS && std::round(gps1.sd) > m_itemv.Temp_XS)
|
||
{
|
||
//只要大于30就扣分
|
||
if(m_itemv.HasMark_7_02 == false)
|
||
{
|
||
if(ksdd == siteof::guizhouas)
|
||
{
|
||
JUDGE_MARK_SUB3(20, "38", false);
|
||
}
|
||
else
|
||
{
|
||
JUDGE_MARK_SUB3(7, "02", false);
|
||
}
|
||
m_itemv.HasMark_7_02 = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//结束学校区域项目
|
||
bool OKFlag = false;
|
||
if(ksdd == siteof::nj || ksdd == siteof::njdckm3 || m_itemv.WavKind == 1)
|
||
{
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM >= (m_itemv.Temp_XMJL + 30) * 100)
|
||
{
|
||
OKFlag = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM >= m_itemv.Temp_XMJL * 100)
|
||
{
|
||
OKFlag = true;
|
||
}
|
||
}
|
||
|
||
if(OKFlag == true)
|
||
{
|
||
//判断之前整个过程中面部是否向左右看
|
||
//ToDo:头部姿态
|
||
if(!m_itemv.Temp_TCRX) //20180823
|
||
{
|
||
JUDGE_MARK_SUB3(7, "03", true);
|
||
}
|
||
//特殊地点版本规则翻译
|
||
if(ksdd == siteof::gdjykm3 || ksdd == siteof::chongqingkm3 || ksdd == siteof::hnpy || ksdd == siteof::gxbhkm3 ||
|
||
ksdd == siteof::guizhou || ksdd == siteof::guizhouas || ksdd == siteof::nj || ksdd == siteof::njdckm3 ||
|
||
m_itemv.Judge_JSC == true)
|
||
{
|
||
if(m_itemv.JSC_Flag == false && m_itemv.HasMark_7_02 == false)
|
||
{
|
||
JUDGE_MARK_SUB3(7, "02", false);
|
||
m_itemv.HasMark_7_02 = true;
|
||
}
|
||
}
|
||
if(ksdd == siteof::shandongjnkm3)
|
||
{
|
||
if(m_itemv.HasMark_7_02 == false)
|
||
{
|
||
if(m_itemv.ShanDongKM3_JianSu_Flag == false)
|
||
{
|
||
JUDGE_MARK_SUB3(7, "02", false);
|
||
m_itemv.HasMark_7_02 = true;
|
||
}
|
||
}
|
||
}
|
||
//ToDo:语音提示-->完成学校区域
|
||
m_exam->TestPro = ItemProFlagEnd;
|
||
NS3JudgeVision_41102();
|
||
return;
|
||
}
|
||
|
||
char buf[256] = {0};
|
||
SafeSprintf(buf, sizeof(buf), JUDGE_UTF8S("项目距离=%d,WavKind=%d,限速=%d,Judge手刹=%d,随机行人=%d,已行驶=%d米"),
|
||
m_itemv.Temp_XMJL, m_itemv.WavKind, m_itemv.Temp_XS,
|
||
m_itemv.Judge_JSC == true ? 1 : 0,
|
||
m_itemv.SJXR_Flag == true ? 1 : 0,
|
||
(cg->ai_ljjl_cm - m_itemv.Temp_LJJL_CM) / 100); //div
|
||
showStatus(std::string(buf));
|
||
NS3JudgeVision_41102();
|
||
}
|
||
|
||
|
||
void Sub3Judge07Xxqy::NS3JudgeVision_41102()
|
||
{
|
||
//不观察左、右方交通情况,
|
||
//学校区域项目中,从项目开始到项目结束,头部姿态没有大于左侧角度【18度】或大于右侧角度【20度】
|
||
if(!NS3UsingAndData(NS3UsingPose)) return;
|
||
|
||
int64 nowTime = m_car->GetCurrentTime2();
|
||
const TNS3PoseSysset& poseSys = m_nsub3->getPoseSysset();
|
||
const TVisionPose* pose0 = m_nsub3->hisPose(0);
|
||
if(pose0->zy < -poseSys.left || pose0->zy > poseSys.right)
|
||
{
|
||
m_itemv.observe.obsTime = nowTime;
|
||
}
|
||
|
||
bool opportunity = m_exam->TestPro == ItemProFlagEnd;
|
||
|
||
if(opportunity && !m_itemv.observe.isJudge)
|
||
{
|
||
m_itemv.observe.isJudge = true;
|
||
if(m_itemv.observe.obsTime == 0) //(nowTime - m_itemv.observe.obsTime > 10*SECOND)
|
||
{
|
||
JUDGE_MARK_NSUB3(7, "01", false);
|
||
//NS3video
|
||
}
|
||
}
|
||
}
|
||
|