/* * 说明: 科三项目[通用评判]评判 * * 作者: 杨海洋 * 日期: 2024-04-26 * * *************************************************************************************** * * 通用评判算法 * * 一、变量更新及自动进项目处理 * 1、通用评判初始化 * 2、特定变量、发动机怠相关的处理 * 1)脚刹车距离、累计用时、次高挡次数 * 说明:科目三科目结束的时候, KM3AllPass() = True,需要评判> 行驶中在次高挡位及以上行驶时间不足5s ,所以,次高挡次数 达到25次就不扣这个分。 * 2)发动机怠速值处理。 * Set_FDJ_DS(); * 3)座椅检查(贵州)。 * doCheck_ZuoYi(JudgeKM3Obj); * * 3、起步项目触发 * if (Itmv20_CJH.qbjxmsj = 0) or * ((Itmv20_CJH.qbjxmsj <> 0) and (cg.Rtk_Enabled = True) and (lscg[zj(1)].Rtk_Enabled = True) * and (lscg[zj(2)].Rtk_Enabled = True)) then * begin * CallQiBu(Itmv20_CJH.qbsjcs); * end; * * 4、靠边停车项目触发 * Call_Auto_KBTC(JudgeKM3Obj); * * 5、模拟灯光项目触发 * * 二、评判细节 * 1、溜车处理 * * 1)PubLCTCptt.X=0,PubLCTCPtt.Y=0,停车的时候,记录一下停车时刻的(X,Y),PubMaxLCValue := 0;(溜车值置为0) * 2)如果当前是非前进状态,当前GPS对应的(X1,Y1) 与 PubLCTCptt对应的(X,Y)计算距离,同时更新 PubMaxLCValue。如果溜车值大于30,立刻评判:溜车大于30厘米。 * 3)如果当前是前进状态(连续2帧),评判:是否溜车大于10,小于30。并且置空溜车状态。PubMaxLCValue:=0; PubLCTCPtt.X=0; * PubLCTCPtt.Y:=0; * * 2、连续两次挂挡不进 * 1)当前挡位为空挡 * 2)SysSet[507]>5: 2次挂挡不进在停车状态下也判 * 3)得到最近一次的前进挡。(LS2的挡位) * 4)首先检测到5秒前(从LS3往前推),出现过空挡。这个时候是不是表示当前前进挡挂了1次了。 * 5)在4)的基础上,前面又出现了一次LS2的挡位,是不是表示2次了。 * 6)紧接着,在5)的基础上,我检测到前面出现了挡位0,并且离合器是1 * * 3、空挡滑行 * * 4、不按规定速度行驶 * 5、压线评判 * 6、起步方向灯、喇叭 * 7、连续变道 * 重点讲解一下思路 * Is_Lxbd_New() * 1)10秒内,变化了2个或以上的车道 * 2)同一个方向灯,不关闭(变了2次或以上车道) * 8、人行横道网格线内停车 * 9、加速踏板使用错误 * 10、半联动 * 11、制动不平顺 * 12、操作完成后不关灯 * 13、变道方向灯评判2 * 14、副刹车评判 * 15、全程越级加减挡 * 16、连续使用起步挡行驶超过50米 * 17、熄火评判 * 18、启动发动机时挡位未置于空挡 * 19、长时间启动钥匙 * 20、安全带评判 * 21、考试过程中打开车门 * 22、起步挂错挡 * 23、挡位与车速不匹配 * 24、空挡滑行 * 25、全程次高挡相关 * 26、空挡滑行 * 27、其他(非法掉头、超速、夜间行驶) * */ #ifndef SUB3JUDGE20COMM_H #define SUB3JUDGE20COMM_H #include "ISub3JudgeWrap.h" class JUDGE_API Sub3Judge20Comm : public ISub3JudgeWrap { public: explicit Sub3Judge20Comm(); virtual ~Sub3Judge20Comm(); DEAL_API bool dealJudgeEnter() override; DEAL_API void dealJudgeItem() override; protected: //综合评判初始化 void Init_ZongHe(); void ResetFxp(); void itm20_ckfxd(); //设置发动机怠速 void Set_FDJ_DS(); //检查座椅 void doCheck_ZuoYi(); //加载模拟灯光项目 void CallMoNiDengGuang(); //调用起步 void CallQiBu(int qbsj = 5); //======================================= //1、溜车评判 void Judge_LiuChe(); //2、连续两次挂挡不进 void Judge_GuaDangBuJin(); //3、空挡滑行 void Judge_KongDangHuaXing(); //4、不按规定速度 void Judge_GuiDingSuDu(); //5、压线评判(重点) void Judge_YaXian_30120(); //5、压边缘线 (重点) //长时间骑轧车道分界线行驶 void Judge_YaXian_10S_XuXian(); //6、起步方向灯、喇叭 void Judge_QiBu_FXD_LaBa(); //7、连续变更两条以上车道 //重点 void Judge_LianXuBianDao(); bool Is_Lxbd_New(); //是否是连续变道 //徐连刚实现 ***暂时没用到 bool Is_Lxbd_New2(); //是否是连续变道 //老的实现 bool Is_Lxbd_New3(); //是否是连续变道 //杨海洋实现 ***暂时没用到 //8、不能停止人行横道网格线内 //禁停评判 void Judge_ForbiddenTC(); //9、加速踏板错误 void Jugde_JiaSuTaBan(); //10、半联动 void Judge_BanLianDong(); //11、制动不平顺 void Judge_ZhiDongBuPingShun(); //12、操作完成后,不关闭灯光 void Judge_BuGuanBiDengGuang(); //13、变道方向灯评判2(重点翻译) void Judge_BianDaoFangXiangDeng2(); void Mark_FXD_42_43(bool Flag42); void HandleSysSet409_1_Common(); void HandleSysSet409_1_Special(); bool CheckJL_CS_Itmv20(int jl, int cscs = 30); //从当前位置向倒退jl米的距离内,是否减速,低于30 //14、副刹车评判 void Judge_FSC(); //15、越级加减档 void Judge_YueJi_JiaJianDang(); //16、起步挡50 void Judge_QiBuDang_50(); //17、熄火评判 void Judge_XiHuo(); //18、启动发动机挡位未置空挡 void Judge_DW_KongDang(); //19、长时间启动钥匙 void Judge_ChangShiJian_QiDongYaoShi(); //20、安全带 void Judge_AnQuanDai(); //21、打开车门 void Judge_DaKaiCheMen(); //22、起步挂错挡 void Judge_QiBu_GuaCuoDang(); //23、挡位与车速、转速不匹配 void Judge_DangWei_CS_ZS(); //24、全程次高挡评判 void Judge_CiGaoDang(); //25、自动靠边停车(重点) void Call_Auto_KBTC(); //26、夜间行驶及其他业务逻辑 void Judge_Extra(); bool Check_Diaotou(int jl, int dtjd); private: TSub3Item20Comm_CJH m_itemvCJH; TSub3Item20Comm_XLG m_itemvXLG; int m_sys360liji = 0; bool m_CSHItmv20_Flag = false; //std::string m_PubTongYong_Msg; int m_sfyz_state = 0; //模拟灯光是否需要人脸验证 bool m_qbjc_zuoyi = false; //20151207 贵州起步检查 //以下是溜车评判需要用到的变量 int m_PubMaxLCValue = 0; Pointi m_PubLCTCPtt; double m_PubLCTC_GPS_JD = 0.0; double m_PubLCTC_GPS_WD = 0.0; bool m_PubCanMarkLC50Flag = true; //注意初始必须是true bool m_Pub_First_QiBu_Flag = false; //int Pub_JSC_JL = 0; //in car //bool PubCanJudge_XiHuoFlag = true; //in car //int PubKaoBianTCFinish_LJJL = 0; //in car int m_DiaoTou_ID = 0; int64 m_PubLastMark_XuXian_TK = 0; const int m_LaneChangeTime = 10; //连续变道时间 单位秒 杨海洋增加 }; #endif // SUB3JUDGE20COMM_H