[680][adas]启动自动驾驶失败来源切换到FSM2024,移除无用接口

This commit is contained in:
xinfengkun
2024-11-21 17:49:37 +08:00
parent ef966a1e73
commit 663e9d3ff4
13 changed files with 106 additions and 82 deletions

View File

@@ -162,7 +162,7 @@ object DebugDataDispatch {
newBuilder.src = "2"
newBuilder.level = ""
var autopilotStatistics =
AutopilotStatistics(1, SystemClock.elapsedRealtime(), null, newBuilder.build())
AutopilotStatistics(1, SystemClock.elapsedRealtime(), null, null ,newBuilder.build())
CallerAutopilotStatisticsListenerManager.invokeAutopilotStatistics(autopilotStatistics)
}
stopSite -> {

View File

@@ -22,6 +22,8 @@ import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import fsm.Fsm2024;
/**
* Created on 2022/10/9
* 工控机状态信息回调(判断是否能否启动自动驾驶的回调)
@@ -135,11 +137,21 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
public void onAutopilotStatistics(@Nullable AutopilotStatistics statistics) {
if (statistics == null) return;
Logger.d(TAG, "AutopilotStatistics= " + statistics.status);
if (failureCallback != null && 1 == statistics.status){
startFailedCode = statistics.failedMessage.getCode();
startFailedMessage = statistics.failedMessage.getMsg();
if (failureCallback != null && 1 == statistics.status) {
if (statistics.fsmState != null) {
startFailedCode = "";
if (statistics.fsmState.hasSession()) {
Fsm2024.Session session = statistics.fsmState.getSession();
if (session.hasSessionFailReason()) {
startFailedMessage = session.getSessionFailReason();
}
}
} else if (statistics.failedMessage != null) {
startFailedCode = statistics.failedMessage.getCode();
startFailedMessage = statistics.failedMessage.getMsg();
}
failureCallback.onStartAutopilotFailure(startFailedCode, startFailedMessage);
if(!AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)){
if (!AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
LineManager.invokeStartAutopilotFailure(startFailedCode, startFailedMessage);
}
Logger.d(TAG, String.format("statistics-startFailedCode = s%; startFailedMessage = s%",

View File

@@ -78,7 +78,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListe
import com.mogo.eagle.core.function.call.autopilot.CallerReceiveReceivedAckListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StitchedVideoListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerStartAutopilotFailedListenerManager.invokeStartAutopilotFailed
import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerTakeoverListenerManager
@@ -1338,18 +1337,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
private fun receiveReceivedAck(receivedAck: String) {
}
/**
* 启动自动驾驶失败回调
* 根据MAP 系统监控状态返回过滤
* message.getMsg() 获取详细错误说明
* message.getCode() 可用于判断属于什么类型
*
* @param message 数据
*/
override fun onStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?) {
invokeStartAutopilotFailed(message)
}
/**
* 启动自动驾驶状态统计
* 触发机制下发启动自动驾驶命令根据MAP返回状态判断成功或失败

View File

@@ -1,17 +0,0 @@
package com.mogo.eagle.core.function.api.autopilot
import mogo_msg.MogoReportMsg
interface IMoGoStartAutopilotFailedListener {
/**
* 启动自动驾驶失败回调
* 根据MAP 系统监控状态返回过滤
* message.getMsg() 获取详细错误说明
* message.getCode() 可用于判断属于什么类型
*
* @param message 数据
*/
fun onStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?)
}

View File

@@ -1,20 +0,0 @@
package com.mogo.eagle.core.function.call.autopilot
import com.mogo.eagle.core.function.api.autopilot.IMoGoStartAutopilotFailedListener
import com.mogo.eagle.core.function.call.base.CallerBase
import mogo_msg.MogoReportMsg
/**
* 启动自动驾驶失败监听
* 注册/取消注册
*/
object CallerStartAutopilotFailedListenerManager : CallerBase<IMoGoStartAutopilotFailedListener>() {
@Synchronized
fun invokeStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?) {
M_LISTENERS.forEach {
val listener = it.value
listener.onStartAutopilotFailed(message)
}
}
}

View File

@@ -43,7 +43,6 @@ CallerPlanningActionsListenerManager
CallerPlanningRottingListenerManager
CallerPlanningTrajectoryListenerManager
CallerRoboBusJinlvM1StatesListenerManager
CallerStartAutopilotFailedListenerManager
CallerSweeperFutianCleanSystemListenerManager

View File

@@ -1,6 +1,9 @@
package com.zhjt.mogo.adas.data.bean;
import androidx.annotation.Nullable;
import fsm.Fsm2024;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
@@ -36,25 +39,34 @@ public class AutopilotStatistics {
public final int status;
/**
* 用时
* 用时 取消自动驾驶时不赋值
* 单位ms
*/
public final long usedTime;
/**
* 下发的启动自动驾驶命令
* 下发的启动自动驾驶命令 取消自动驾驶时不赋值
*/
@Nullable
public final MessagePad.SetAutopilotModeReq req;
/**
* 失败的消息
* 回调启动自驾成功/失败的时候赋值
*/
@Nullable
public final Fsm2024.FSMStateMsg fsmState;
/**
* 失败的消息 存在FSM2024时 失败此字段不赋值
*/
@Nullable
public final MogoReportMsg.MogoReportMessage failedMessage;
public AutopilotStatistics(int status, long usedTime, MessagePad.SetAutopilotModeReq req, MogoReportMsg.MogoReportMessage failedMessage) {
public AutopilotStatistics(int status, long usedTime, @Nullable MessagePad.SetAutopilotModeReq req, @Nullable Fsm2024.FSMStateMsg fsmState, @Nullable MogoReportMsg.MogoReportMessage failedMessage) {
this.status = status;
this.usedTime = usedTime;
this.req = req;
this.fsmState = fsmState;
this.failedMessage = failedMessage;
}
}

View File

@@ -1833,6 +1833,17 @@ public class AdasManager implements IAdasNetCommApi {
return AutopilotAbilityManager.getInstance().getNodeStateInfo(name);
}
/**
* 获取FSM2024版本
* 正常版本好例如FSM2024发送的为2.0解析后为2012.1解析后为121
* 与FSM开发同学确认 点后的子版本不会出现十位数以上
*
* @return -1未初始化 0SSM判断存在FSM2024节点但并不知具体版本或根据FMS中Version解析失败 其他数值根据FSM数据中的version 判断得出
*/
public int getFsm2024Version() {
return AutopilotAbilityManager.getInstance().getFsm2024Version();
}
/**
* 获取域控PING 地址列表
*

View File

@@ -644,16 +644,6 @@ public interface OnAdasListener {
*/
void onReceiveReceivedAck(@NonNull ReceivedAck receivedAck);
/**
* 启动自动驾驶失败回调
* 根据MAP 系统监控状态返回过滤
* message.getMsg() 获取详细错误说明
* message.getCode() 可用于判断属于什么类型
*
* @param message 数据
*/
void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message);
/**
* 启动自动驾驶状态统计
* 触发机制下发启动自动驾驶命令根据MAP返回状态判断成功或失败

View File

@@ -4,8 +4,10 @@ import android.os.SystemClock;
import androidx.annotation.NonNull;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import fsm.Fsm2024;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
@@ -16,13 +18,18 @@ public class AutopilotReview {
/**
* 下发的启动自动驾驶命令
*/
public MessagePad.SetAutopilotModeReq startReq;
private MessagePad.SetAutopilotModeReq startReq;
private long startTime;//自动驾驶命令下发启动时间
/**
* 失败的消息
*/
public MogoReportMsg.MogoReportMessage failedMessage;
private MogoReportMsg.MogoReportMessage failedMessage;
/**
* 回调启动自驾成功/失败的时候赋值
*/
private Fsm2024.FSMStateMsg fsmState;
private final OnAutopilotReviewListener listener;
@@ -37,11 +44,12 @@ public class AutopilotReview {
private void onCallback(@Define.AutopilotStartStatus int status) {
long usedTime = SystemClock.elapsedRealtime() - startTime;
if (listener != null) {
listener.onReview(new AutopilotStatistics(status, usedTime, startReq, failedMessage));
listener.onReview(new AutopilotStatistics(status, usedTime, startReq, fsmState, failedMessage));
}
startTime = 0;
startReq = null;
failedMessage = null;
fsmState = null;
}
@@ -56,6 +64,10 @@ public class AutopilotReview {
startReq = req;
startTime = SystemClock.elapsedRealtime();
} else {
startTime = 0;
startReq = null;
failedMessage = null;
fsmState = null;
onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.CANCEL);
}
}
@@ -66,12 +78,32 @@ public class AutopilotReview {
* @param message
*/
public void onReportResult(MogoReportMsg.MogoReportMessage message) {
//FSM2024版本大于等于2.0时使用FSM的数据进行判断是否失败
if (AutopilotAbilityManager.getInstance().getFsm2024Version() >= 20) {
return;
}
if (startReq != null && message != null) {
failedMessage = message;
onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED);
}
}
public void setFSM2024State(Fsm2024.FSMStateMsg fsmState) {
this.fsmState = fsmState;
if (startReq != null && fsmState != null) {
if (fsmState.hasSession()) {
Fsm2024.Session session = fsmState.getSession();
if (session.hasSessionActiveMode() && session.hasSessionResult()) {
if (session.getSessionActiveMode() == Fsm2024.ActiveMode.PILOT_ACTIVE &&
session.getSessionResult() == Fsm2024.SessionResult.REQUEST_FAILED) {
onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED);
}
}
}
}
}
/**
* 自动驾驶状态 目前只用于自动驾驶成功结果
*

View File

@@ -75,7 +75,7 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
private final AtomicBoolean isInitCarConfig = new AtomicBoolean(false);//车辆信息是否初始化
private final AtomicInteger isSupportFSM2024 = new AtomicInteger(-1);//-1未初始化 0不支持 1通过SSM V2判断支持 2通过FSM数据源判断支持
private final Map<AdasConstants.NodeName, NodeStateInfo> nodeStateInfos = new ConcurrentHashMap<>();
private int fsm2024Version = -1;//FSM2024版本 -1未初始化 0SSM判断存在FSM2024但是并不知道具体版本或根据FMS中Version解析失败 其他数值根据FSM数据中的version 判断得出
private AutopilotAbilityManager() {
}
@@ -115,6 +115,11 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
}
}
public int getFsm2024Version() {
return fsm2024Version;
}
/**
* 添加不能启动自驾的原因
*
@@ -206,6 +211,17 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
}
public void setFSM2024State(Fsm2024.FSMStateMsg fsmState) {
if (fsm2024Version <= 0) {
if (fsmState.hasVersion()) {
String tem = fsmState.getVersion();
try {
fsm2024Version = Integer.parseInt(tem.replace(".", ""));
} catch (Exception e) {
fsm2024Version = 0;
e.printStackTrace();
}
}
}
updateFSMNormalStateFromFSM();
onCallFSMTimeout(false);
if (autopilotAbilityFsm != null) {
@@ -274,6 +290,9 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
break;
}
}
if (isSupport && fsm2024Version == -1) {
fsm2024Version = 0;
}
updateFSMStateFromSSM(isSupport ? 1 : 0);
}
}
@@ -370,6 +389,7 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
if (!isInitCarConfig.get() && AdasManager.getInstance().getIpcConnectionStatus() == AdasConstants.IpcConnectionStatus.CONNECTED) {
mapVersion = 20300;
isSupportFSM2024.set(-1);
fsm2024Version = -1;
initAutopilotAbility();
isInitAutopilotAbility.set(false);
}
@@ -560,6 +580,7 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener {
initStopData();
isInitAutopilotAbility.set(false);
isSupportFSM2024.set(-1);
fsm2024Version = -1;
isInitCarConfig.set(false);
mapVersion = -1;
isFutianSweeper = false;

View File

@@ -33,6 +33,11 @@ public class FSM2024StateMessage extends MyAbstractMessageHandler {
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState);
if (autopilotReview != null) {
autopilotReview.setFSM2024State(fsmState);
autopilotReview.onAutopilotResult(autopilotState);
}
if (adasListener != null) {
if (fsmState.getRepeatedPilotNotStandbyReasonCount() == 0) {
Fsm2024.FSMStateMsg.Builder builder = fsmState.toBuilder();
@@ -42,11 +47,6 @@ public class FSM2024StateMessage extends MyAbstractMessageHandler {
adasListener.onFSM2024State(raw.getHeader(), fsmState, autopilotState, mode);
}
}
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState);
if (autopilotReview != null) {
autopilotReview.onAutopilotResult(autopilotState);
}
AdasChannel.calculateTimeConsumingBusiness("FSM状态", nowTime);
}

View File

@@ -82,9 +82,6 @@ public class ReportMessage extends MyAbstractMessageHandler {
//分发自动驾驶启动失败相关回调
String code = mogoReportMessage.getCode();
if (startAutopilotFailCode.contains(code)) {
if (adasListener != null) {
adasListener.onStartAutopilotFailed(mogoReportMessage);//启动自动驾驶失败回调
}
if (autopilotReview != null) {
autopilotReview.onReportResult(mogoReportMessage);//统计启动自动驾驶失败原因
}