subject-two/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge07Xxqy.cpp
2025-03-26 16:56:51 +08:00

319 lines
9.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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
}
}
}