230 lines
6.9 KiB
C++
230 lines
6.9 KiB
C++
/*
|
||
* 说明: 科三项目[通用评判]评判
|
||
*
|
||
* 作者: 杨海洋
|
||
* 日期: 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
|