mirror of
https://github.com/Dev-KATECH/ADM.git
synced 2026-05-17 01:43:59 +09:00
ver 26.3.17.1
- Drive_Mode.c 수정 : RC - ACU handover 전환 로직 보완 : RC -> ACU / ACU -> RC 전환 시 5km/h 이하에서만 Permit 되도록 수정 : 5km/h 초과 시 Handover Phase가 In Progress가 되도록 수정 : handover 속도 조건에 차속 피드백 외 제어 명령 속도 조건 추가 : ACU -> RC 전환 시 RC 속도 명령 5km/h 이하 조건 추가 : RC -> ACU 전환 시 ACU 속도 명령 5km/h 이하 조건 추가 : handover 진행 중 요청/제어 주체 해제 시 비상정지 진입 조건 보완 : ACU -> RC 진행 중 ACU Drive Mode 해제 시 Emergency 진입 : RC -> ACU 진행 중 RC ACU 요청 해제 시 Emergency 진입 : 관련 Handover/Emergency 상태 변수 설정 보완 - Drive_Mode.c/ExecuteEmergencyMode 함수 수정 : Handover conflict 발생 후 RC manual 요청으로 복구 가능하도록 조건 보완
This commit is contained in:
parent
3dd57671c9
commit
99ad012576
Binary file not shown.
File diff suppressed because it is too large
Load Diff
18658
GW/Debug_FLASH/GW.srec
18658
GW/Debug_FLASH/GW.srec
File diff suppressed because it is too large
Load Diff
@ -7,16 +7,26 @@ static bool IsVehicleStopped(void)
|
|||||||
return (GV_VCU_Vx_Fbk < 1.0f);
|
return (GV_VCU_Vx_Fbk < 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool IsVehicleBelowHandoverSpeed(void)
|
||||||
|
{
|
||||||
|
return (GV_VCU_Vx_Fbk <= 5.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsRcHandoverReady(void)
|
||||||
|
{
|
||||||
|
return IsVehicleBelowHandoverSpeed() && (GV_RC_Vx_Command <= 5U);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsAcuHandoverReady(void)
|
||||||
|
{
|
||||||
|
return IsVehicleBelowHandoverSpeed() && (GV_ACU_Vx_Command <= 5U);
|
||||||
|
}
|
||||||
|
|
||||||
static bool HasAcuRequest(void)
|
static bool HasAcuRequest(void)
|
||||||
{
|
{
|
||||||
return (GV_ACU_Drive_mode == 1U);
|
return (GV_ACU_Drive_mode == 1U);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsParkGear(void)
|
|
||||||
{
|
|
||||||
return (GV_VCU_GearSelStat == 0U);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool IsRcParkRequest(void)
|
static bool IsRcParkRequest(void)
|
||||||
{
|
{
|
||||||
return (GV_RC_GearSelStat == 0U);
|
return (GV_RC_GearSelStat == 0U);
|
||||||
@ -26,6 +36,10 @@ static uint8_t s_prevRcManualOn = 0U;
|
|||||||
static uint8_t s_prevRcAutoOn = 0U;
|
static uint8_t s_prevRcAutoOn = 0U;
|
||||||
static RcModeReq_e s_lastRcModeReq = RC_REQ_DEFAULT;
|
static RcModeReq_e s_lastRcModeReq = RC_REQ_DEFAULT;
|
||||||
static RcModeReq_e s_rcModeReqRaw = RC_REQ_NONE;
|
static RcModeReq_e s_rcModeReqRaw = RC_REQ_NONE;
|
||||||
|
static bool s_acuToRcHandoverActive = false;
|
||||||
|
static bool s_rcToAcuHandoverActive = false;
|
||||||
|
static bool s_acuToRcSourceSeen = false;
|
||||||
|
static bool s_rcToAcuSourceSeen = false;
|
||||||
|
|
||||||
static DriveMode_e curMode = DRIVE_MODE_DEFAULT;
|
static DriveMode_e curMode = DRIVE_MODE_DEFAULT;
|
||||||
static DriveMode_e nextMode = DRIVE_MODE_DEFAULT;
|
static DriveMode_e nextMode = DRIVE_MODE_DEFAULT;
|
||||||
@ -182,6 +196,48 @@ void CheckDriveMode(void)
|
|||||||
{
|
{
|
||||||
requestedRcMode = s_rcModeReqRaw;
|
requestedRcMode = s_rcModeReqRaw;
|
||||||
|
|
||||||
|
if (s_acuToRcHandoverActive &&
|
||||||
|
(curMode == DRIVE_MODE_ACU) &&
|
||||||
|
!IsRcHandoverReady() &&
|
||||||
|
!HasAcuRequest())
|
||||||
|
{
|
||||||
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
|
nextPhase = HO_HOLD;
|
||||||
|
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||||
|
GV_RC_ModeReq = s_rcModeReqRaw;
|
||||||
|
Time_SetAutoOnWait(false);
|
||||||
|
s_acuToRcHandoverActive = false;
|
||||||
|
s_acuToRcSourceSeen = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_rcToAcuHandoverActive &&
|
||||||
|
(curMode == DRIVE_MODE_RC) &&
|
||||||
|
!IsAcuHandoverReady() &&
|
||||||
|
(GV_RC_ACU_Drive_Mode == 0U))
|
||||||
|
{
|
||||||
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
|
nextPhase = HO_HOLD;
|
||||||
|
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||||
|
GV_RC_ModeReq = s_rcModeReqRaw;
|
||||||
|
Time_SetAutoOnWait(false);
|
||||||
|
s_rcToAcuHandoverActive = false;
|
||||||
|
s_rcToAcuSourceSeen = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestedRcMode != RC_REQ_MANUAL)
|
||||||
|
{
|
||||||
|
s_acuToRcHandoverActive = false;
|
||||||
|
s_acuToRcSourceSeen = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestedRcMode != RC_REQ_AUTO)
|
||||||
|
{
|
||||||
|
s_rcToAcuHandoverActive = false;
|
||||||
|
s_rcToAcuSourceSeen = false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||||
(GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) &&
|
(GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) &&
|
||||||
(requestedRcMode != RC_REQ_MANUAL))
|
(requestedRcMode != RC_REQ_MANUAL))
|
||||||
@ -195,7 +251,8 @@ void CheckDriveMode(void)
|
|||||||
|
|
||||||
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||||
(GV_VCU_EmergencyCause == EMG_HO_CONFLICT) &&
|
(GV_VCU_EmergencyCause == EMG_HO_CONFLICT) &&
|
||||||
(requestedRcMode != RC_REQ_DEFAULT))
|
(requestedRcMode != RC_REQ_DEFAULT) &&
|
||||||
|
(requestedRcMode != RC_REQ_MANUAL))
|
||||||
{
|
{
|
||||||
nextMode = DRIVE_MODE_EMERGENCY;
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
nextPhase = HO_HOLD;
|
nextPhase = HO_HOLD;
|
||||||
@ -206,7 +263,9 @@ void CheckDriveMode(void)
|
|||||||
|
|
||||||
if (!((curMode == DRIVE_MODE_EMERGENCY) &&
|
if (!((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||||
(((GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) && (requestedRcMode != RC_REQ_MANUAL)) ||
|
(((GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) && (requestedRcMode != RC_REQ_MANUAL)) ||
|
||||||
((GV_VCU_EmergencyCause == EMG_HO_CONFLICT) && (requestedRcMode != RC_REQ_DEFAULT)))))
|
((GV_VCU_EmergencyCause == EMG_HO_CONFLICT) &&
|
||||||
|
(requestedRcMode != RC_REQ_DEFAULT) &&
|
||||||
|
(requestedRcMode != RC_REQ_MANUAL)))))
|
||||||
GV_VCU_EmergencyCause = EMG_NONE;
|
GV_VCU_EmergencyCause = EMG_NONE;
|
||||||
|
|
||||||
switch (requestedRcMode)
|
switch (requestedRcMode)
|
||||||
@ -259,19 +318,23 @@ void CheckDriveMode(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RC_REQ_MANUAL:
|
case RC_REQ_MANUAL:
|
||||||
if (curMode == DRIVE_MODE_ACU && !IsVehicleStopped())
|
if (curMode == DRIVE_MODE_ACU && !IsRcHandoverReady())
|
||||||
{
|
{
|
||||||
nextPhase = HO_HOLD;
|
s_acuToRcHandoverActive = true;
|
||||||
nextMode = DRIVE_MODE_EMERGENCY;
|
if (HasAcuRequest())
|
||||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
s_acuToRcSourceSeen = true;
|
||||||
|
|
||||||
|
nextPhase = HO_INPROG;
|
||||||
}
|
}
|
||||||
else if (curMode == DRIVE_MODE_ACU && nextPhase != HO_HOLD)
|
else if (curMode == DRIVE_MODE_ACU)
|
||||||
{
|
{
|
||||||
nextPhase = HO_PERMIT;
|
nextPhase = HO_PERMIT;
|
||||||
if (!HasAcuRequest())
|
if (!HasAcuRequest())
|
||||||
{
|
{
|
||||||
nextMode = DRIVE_MODE_DEFAULT;
|
nextMode = DRIVE_MODE_RC;
|
||||||
nextPhase = HO_NONE;
|
nextPhase = HO_NONE;
|
||||||
|
s_acuToRcHandoverActive = false;
|
||||||
|
s_acuToRcSourceSeen = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (curMode == DRIVE_MODE_DEFAULT && IsVehicleStopped())
|
else if (curMode == DRIVE_MODE_DEFAULT && IsVehicleStopped())
|
||||||
@ -297,6 +360,36 @@ void CheckDriveMode(void)
|
|||||||
nextMode = DRIVE_MODE_EMERGENCY;
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||||
}
|
}
|
||||||
|
else if ((curMode == DRIVE_MODE_RC) &&
|
||||||
|
(GV_RC_Drive_Mode == 0U) &&
|
||||||
|
(GV_RC_ACU_Drive_Mode == 1U) &&
|
||||||
|
!IsAcuHandoverReady())
|
||||||
|
{
|
||||||
|
s_rcToAcuHandoverActive = true;
|
||||||
|
nextPhase = HO_INPROG;
|
||||||
|
}
|
||||||
|
else if ((curMode == DRIVE_MODE_RC) &&
|
||||||
|
(GV_RC_Drive_Mode == 0U) &&
|
||||||
|
(GV_RC_ACU_Drive_Mode == 1U))
|
||||||
|
{
|
||||||
|
s_rcToAcuHandoverActive = true;
|
||||||
|
nextPhase = HO_PERMIT;
|
||||||
|
if (HasAcuRequest())
|
||||||
|
{
|
||||||
|
nextMode = DRIVE_MODE_ACU;
|
||||||
|
nextPhase = HO_NONE;
|
||||||
|
s_rcToAcuHandoverActive = false;
|
||||||
|
s_rcToAcuSourceSeen = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
autoWaitOn = true;
|
||||||
|
if (Time_GetAutoOnWaitSec() >= 30U)
|
||||||
|
{
|
||||||
|
nextPhase = HO_HOLD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ((curMode == DRIVE_MODE_DEFAULT) && (GV_VCU_HandoverPhase == HO_HOLD))
|
else if ((curMode == DRIVE_MODE_DEFAULT) && (GV_VCU_HandoverPhase == HO_HOLD))
|
||||||
{
|
{
|
||||||
nextMode = DRIVE_MODE_DEFAULT;
|
nextMode = DRIVE_MODE_DEFAULT;
|
||||||
@ -463,12 +556,12 @@ void ExecuteEmergencyMode()
|
|||||||
// Keep emergency latched for handover speed-fail until RC requests MANUAL.
|
// Keep emergency latched for handover speed-fail until RC requests MANUAL.
|
||||||
if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL && s_rcModeReqRaw != RC_REQ_MANUAL)
|
if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL && s_rcModeReqRaw != RC_REQ_MANUAL)
|
||||||
nextMode = DRIVE_MODE_EMERGENCY;
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
else if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_CONFLICT && s_rcModeReqRaw != RC_REQ_DEFAULT)
|
else if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_CONFLICT &&
|
||||||
|
s_rcModeReqRaw != RC_REQ_DEFAULT && s_rcModeReqRaw != RC_REQ_MANUAL)
|
||||||
nextMode = DRIVE_MODE_EMERGENCY;
|
nextMode = DRIVE_MODE_EMERGENCY;
|
||||||
|
|
||||||
// Exit emergency mode when no emergency source remains.
|
// Exit emergency mode when no emergency source remains.
|
||||||
else if(!isEmergency && !isEmergencyVcu &&
|
else if(!isEmergency && !isEmergencyVcu &&
|
||||||
GV_VCU_EmergencyCause != EMG_HO_CONFLICT &&
|
|
||||||
s_rcModeReqRaw == RC_REQ_MANUAL &&
|
s_rcModeReqRaw == RC_REQ_MANUAL &&
|
||||||
IsRcParkRequest())
|
IsRcParkRequest())
|
||||||
nextMode = DRIVE_MODE_RC;
|
nextMode = DRIVE_MODE_RC;
|
||||||
|
|||||||
@ -7,7 +7,7 @@ void SET_SW_VER(void)
|
|||||||
{
|
{
|
||||||
GV_YEAR = 26;
|
GV_YEAR = 26;
|
||||||
GV_Month = 3;
|
GV_Month = 3;
|
||||||
GV_Day = 13;
|
GV_Day = 17;
|
||||||
GV_Ver = 1;
|
GV_Ver = 1;
|
||||||
GV_CAR_NUM = 240623;
|
GV_CAR_NUM = 240623;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user