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

163 lines
7.1 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.

/*
* 说明: 科三项目[超车]评判
*
* 作者: 杨海洋
* 日期: 2024-03-13
*
* ***************************************************************************************
*
* 超车和变更车道的项目点1个。
*
* 刚进入超车项目的时候,(借道超车PUB_JDCC_ZT := 0; //借道超车)
*
* 定义了全局变量ChaoChe_Start_TM进入超车项目的时候赋值。通用
* 评判要用到这个全局变量,按要求定义即可,特殊地点版本)
*
* 超车项目定义了6个阶段
*
* //1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
* //5:回原车道阶段 6完成回原车道阶段(结束项目)
*
* (一)、项目初始化阶段:
* 1记录进项目时刻的时间
* 2记录进项目时刻的累计距离。Itmv10.Start_LJJL := cg.ai_ljjl;
* 3) 计算超车项目的项目距离。(SysSet[504]-->1)
* 如果设置了(SysSet[504]-->6以这个参数设定的距离为标准
* 4初始超车道计算
* SysSet[405]:超车时在超车道上需驶离超车道 0-否 1-是 2-不进项目)
* 如果设置成2那么超车道上是不进项目的。自动读卡进项目不进入项目
*
* //最左侧不进项目
*
* 6.1、如果初始在超车道上
* 1Itmv10.Status:=1;
*
* 2从SysSet[504]-->3 个参数中,得到超车道上的距离限制,必须在这个距离内离开超车道,否则:不按规定考试
* Itmv10.CS_CCD_Max_XSJL
*
* 3从SysSet[504]-->4个参数中得到超车道二次超车距离CS_CCD_ErCiChaoChe_Min_XSJL驶离超车道后记录一个
* 临时距离,必须行驶完这个距离,才能再次进入超车道)
*
* 6.2、如果初始不在超车道上
* 1Itmv10.Status:=2;
*
* 2) 临时记录车道号、车道数、状态2时刻的车道号、状态2时刻的车道数。
*
* Itmv10.Temp_BasePointInLaneNo := cg.RTKKM3.BasePointInLaneNo;
* Itmv10.Temp_BaseLaneCount := cg.RTKKM3.BaseLaneCount;
* Itmv10.Temp_St2_CheDaoHao := cg.RTKKM3.BasePointInLaneNo; //初始在普通车道的车道号
* Itmv10.Temp_St2_CheDaoCount := cg.RTKKM3.BaseLaneCount; //初始在普通车道的车道数
*
*
* 7) 得到完成超车后,必须在超车道上行驶的距离。(行驶完这个距离后,才能返回原车道)
* SysSet[504]-->5
*
* 8) 得到超车的挡位要求(如果没有设置这个参数,那么对挡位没有任何要求)
* SysSet[504]-->10
* 超车档位要求,格式:档位^类型 类型为0表示达到一次即可为1表示超车道上要全程达到。
*
* 9) 得到超车时间,在规定的时间内要返回原车道
* SysSet[504]-->7
*
* 10) 得到超车速和时间要求
* SysSet[482]:超车时车速要求(0-不要求 其它值表示要求 车速^持续时长秒^要求阶段 ^
*
* (二)、变道方向计算
* //计算变道方向
* BianDaoKind := 0; //0:未变道 1往左侧变道 2:往右侧变道
* //1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
* //5:回原车道阶段 6完成回原车道阶段
*
* //左侧变道1
* //左侧变道2
* //左侧变道3
*
* //右侧变道1因为我们测绘定义的缺陷右侧变道暂不考虑车道数变多或者变少的情况)
*
* (三)、超车挡位相关的评判
* //1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
* //5:回原车道阶段 6完成回原车道阶段
* //挡位要求计算
*
* //如果行驶在超车道上
*
* //借道超车的,驶入对向车道了(逆方向)
*
* //1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
* //5:回原车道阶段 6完成回原车道阶段
*
* (四)、方向灯赋值相关
* //方向灯赋值 左方向灯
*
* (五)取消项目和项目距离到达逻辑处理
* //1:初始超车道阶段 2初始普通车道阶段 3左侧超车阶段 4:完成左侧超车阶段
* //5:回原车道阶段 6完成回原车道阶段
*
* //SysSet[405]:超车时在超车道上需驶离超车道
* //超车时在超车道上需驶离超车道 0-否 1-是 2-不进项目)
* //378:变更车道和超车:取消第1个项目 (0-不能 1-不变道也不开转向灯 2-开双跳)
*
* //出项目距离,结束
*
* (六)借道超车相关业务逻辑
* //借道超车状态 0非借道 1:表示超车 2表示正在返回原车道 3回原车道道完成
*
* //Itmv10.Status = 2 普通车道上,准备超车
*
* //借道超车状态 0非借道 1:表示超车 2表示正在返回原车道 3回原车道道完成
* //以下是借道超车相关的业务逻辑
*
*
* (七)超车各个阶段讲解
*
* 2338帧后步进跟踪超车项目。
*
* 超车结束和取消规则:
* 1、项目只能取消一次
* 2、做完一套完整动作的结束项目
* 3、378=2开启双挑灯立即取消
* 3、项目距离设置等于0的读到下一个项目点时未完成完整动作的扣分后结束项目
* 4、项目距离设置大于0距离达到项目距离的且378=1从未变过道的取消项目有过变道但未完成完整动作的扣分后结束项目
* 5、项目距离设置大于0距离达到项目距离的且378!=1扣分后结束项目
*
* 注意超车项目进项目的时候如果在最左侧车道并且405参数等于1 不要报超车进项目语音,等回原车道评判会给外壳发语音事件
*
*/
#ifndef SUB3JUDGE10CCXX_H
#define SUB3JUDGE10CCXX_H
#include "ISub3JudgeWrap.h"
class JUDGE_API Sub3Judge10Ccxx : public ISub3JudgeWrap
{
public:
explicit Sub3Judge10Ccxx();
virtual ~Sub3Judge10Ccxx();
DEAL_API bool dealJudgeEnter() override;
DEAL_API void dealJudgeItem() override;
//是否播报驶离超车道语音
bool pullingLane() { return m_itemv.pullingLane; }
protected:
void Init_Item_10();
private:
TSub3Item10Ccxx m_itemv;
//**********************以下是新科目三************************
private:
//超车前,不通过内、外后视镜观察后方和左侧交通情况并回头观察确认安全
//向左变道时、车轮压车道分界线前10s内头部姿态没有大于左后侧角度【23度】
void NS3JudgeVision_41401();
//超车时,未回头观察被超越车辆动态
//在超车道上头部姿态没有大于右后侧角度【25度】
void NS3JudgeVision_41403();
//超车后,驶回原车道前,不通过内、外后视镜观察后方和右侧交通情况并回头观察确认安全
//向右变道时、车轮压车道分界线前10s内头部姿态没有大于右后侧角度【25度】
void NS3JudgeVision_41405();
};
#endif // SUB3JUDGE10CCXX_H