[610][adas]添加平行驾驶相关接口;能否启动自驾接口添加手刹状态判断;修改清扫车云控PB与平行驾驶PB共用

This commit is contained in:
xinfengkun
2023-09-07 20:26:20 +08:00
parent 2f4f6f8d49
commit 76cdcf7e72
26 changed files with 336 additions and 129 deletions

View File

@@ -1,5 +1,5 @@
syntax = "proto3";
package com.zhjt.mogo.adas.data.sweeper;
package com.zhjt.mogo.adas.data;
//
@@ -17,11 +17,13 @@ enum MessageType
PadSendBootable = 100008; //8-pad上报状态给云端 type: 100008-> sweeper_bootable.proto
CloudPushBigTaskStatus = 100009; //9pad大任务状态type: 100009-> sweeper_big_task_status.proto
CloudPushTaskSuspendResume = 100010; //10/padtype: 100010-> sweeper_task_cloud_suspend_resume.proto
ParallelDrivingCmd = 200001; //, <->
}
//
//PAD上行消息
message SweeperMessage
message AiCloudPadMessage
{
uint32 msgType = 1; //使
bytes payload = 2; //

View File

@@ -72,6 +72,7 @@ enum MessageType
MsgTypeFSMStatusReasonQueryReq = 0x10123; //fsm状态原因查询
MsgTypeFSMStatusReasonQueryResp = 0x10124; //fsm状态原因查询应答
MsgTypeGetDebugInfo = 0x10125; //debug信息查询 pad->telematics
MsgTypeParallelDrivingCmd = 0x10126; //无人化场景,平行驾驶请求相关指令及状态反馈, 云控<->鹰眼双向透传
}
message Header
@@ -713,3 +714,7 @@ message SessionInfo
//message definition for MsgTypeSSMState
//refer to ssm_info.proto for details
//message definition for MsgTypeParallelDrivingCmd
//查看云端和鹰眼的接口

View File

@@ -0,0 +1,11 @@
syntax = "proto3";
package mogo.yycp.paralleldriving.protocol;
option java_package = "mogo.yycp.paralleldriving.protocol";
message ParallelRequest {
string sn = 1;
int32 type = 2; //类型:1预接管2鹰眼请求 3 遇困4自检异常
int32 takeover = 3; //1接管请求2取消请求接管
string code = 4 ; // 请求上报的类型,如:"PAD_ACTIVE",用于描述type的具体内容不同的code可以对应同一个type
string reason = 5; // 具体的请求原因描述,如:因底盘消息掉帧强退自动驾驶
}

View File

@@ -0,0 +1,8 @@
syntax = "proto3";
package mogo.yycp.paralleldriving.protocol;
option java_package = "mogo.yycp.paralleldriving.protocol";
message ParallelTaskProcessNotice {
string code = 1; // 消息code START_SYNC ; EXIT_SYNC ; UNABLE_TAKEOVER ; EXCEPTION_EXIT_SYNC ; TASK_REJECTED ; PARALLEL_EXCEPTION_MANUAL_DRIVING ; EXCEPTION_EXIT_PARALLEL_DRIVING
string content = 2; //消息具体内容:进入同步状态 ; 同步结束 ; 无法接管 ; 同步异常结束 ; 任务已被拒绝 ; 异常请人工驾驶 ; 平行驾驶异常结束
}

View File

@@ -45,9 +45,9 @@ import com.zhidao.support.adas.high.subscribe.SubscribeInterface;
import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions;
import com.zhidao.support.adas.high.thread.DispatchHandler;
import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.bean.AdasParam;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume;
@@ -71,6 +71,7 @@ import common.HeaderOuterClass;
import function_state_management.FSMStatusReasonQueryOuterClass;
import mogo.telematics.ParamSetCmdOuterClass;
import mogo.telematics.pad.MessagePad;
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest;
import okio.ByteString;
/**
@@ -1889,15 +1890,16 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
}
/**
* 发送清扫车指令到云控
* 发送云控指令
*
* @param messageType 消息类型
* @param reqNo 请求编号
* @param payload 有效数据
* @param padMessageType PAD到域控消息类型
* @param messageType PAD到AI云消息类型
* @param reqNo 请求编号
* @param payload 有效数据
* @return boolean
*/
private boolean sendSweeperCloudTaskCmd(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, @NonNull com.google.protobuf.ByteString payload) {
SweeperCloudTask.SweeperMessage.Builder builder = SweeperCloudTask.SweeperMessage.newBuilder()
private boolean sendAiCloudTaskCmd(@NonNull MessageType padMessageType, @NonNull AiCloudTask.MessageType messageType, @NonNull String reqNo, @NonNull com.google.protobuf.ByteString payload) {
AiCloudTask.AiCloudPadMessage.Builder builder = AiCloudTask.AiCloudPadMessage.newBuilder()
.setMsgType(messageType.getNumber())
.setSysTime(System.currentTimeMillis());
if (!TextUtils.isEmpty(reqNo)) {
@@ -1906,8 +1908,8 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
if (payload != null && !payload.isEmpty()) {
builder.setPayload(payload);
}
SweeperCloudTask.SweeperMessage message = builder.build();
return sendPBMessage(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD.typeCode, message.toByteArray());
AiCloudTask.AiCloudPadMessage message = builder.build();
return sendPBMessage(padMessageType.typeCode, message.toByteArray());
}
/**
@@ -1920,7 +1922,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperStartTaskResp(@NonNull String reqNo, @NonNull SweeperTask.StartTaskResp startTaskResp) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTask, reqNo, startTaskResp.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.CloudPushTask, reqNo, startTaskResp.toByteString());
}
/**
@@ -1933,7 +1935,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperTaskConfirmResp(@NonNull String reqNo, @NonNull SweeperTaskConfirm.TaskConfirmResp taskConfirmResp) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTaskConfirm, reqNo, taskConfirmResp.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.CloudPushTaskConfirm, reqNo, taskConfirmResp.toByteString());
}
/**
@@ -1946,7 +1948,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperStopTaskResp(@NonNull String reqNo, @NonNull SweeperTaskStop.StopTaskResp stopTaskResp) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTaskStop, reqNo, stopTaskResp.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.CloudPushTaskStop, reqNo, stopTaskResp.toByteString());
}
/**
@@ -1961,7 +1963,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperSuspendResumeTaskReq(boolean isSuspend, @NonNull String reqNo, @NonNull SweeperTaskSuspendResume.SuspendResumeTaskReq suspendResumeTaskReq) {
return sendSweeperCloudTaskCmd(isSuspend ? SweeperCloudTask.MessageType.PadSendTaskSuspend : SweeperCloudTask.MessageType.PadSendTaskResume, reqNo, suspendResumeTaskReq.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, isSuspend ? AiCloudTask.MessageType.PadSendTaskSuspend : AiCloudTask.MessageType.PadSendTaskResume, reqNo, suspendResumeTaskReq.toByteString());
}
@@ -1975,7 +1977,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperGetTaskReq(@NonNull String reqNo, @NonNull SweeperTask.GetTaskReq getTaskReq) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.PadSendGetTaskReq, reqNo, getTaskReq.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.PadSendGetTaskReq, reqNo, getTaskReq.toByteString());
}
/**
@@ -1988,7 +1990,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperAutopilotBootable(@NonNull String reqNo, @NonNull SweeperBootable.IsBootable isBootable) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.PadSendBootable, reqNo, isBootable.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.PadSendBootable, reqNo, isBootable.toByteString());
}
/**
@@ -2001,7 +2003,20 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*/
@Override
public boolean sendSweeperCloudSuspendResumeTaskResp(@NonNull String reqNo, @NonNull SweeperTaskCloudSuspendResume.BigTaskActionResp bigTaskActionResp) {
return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTaskSuspendResume, reqNo, bigTaskActionResp.toByteString());
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_SWEEPER_CLOUD_TASK_CMD, AiCloudTask.MessageType.CloudPushTaskSuspendResume, reqNo, bigTaskActionResp.toByteString());
}
/**
* PAD发起平行驾驶请求
*
* @param reqNo 请求编号
* @param parallelRequest 参数
* @return boolean
*/
@Override
public boolean sendParallelDrivingReq(@NonNull String reqNo, @NonNull ParallelDrivingRequest.ParallelRequest parallelRequest) {
return sendAiCloudTaskCmd(MessageType.TYPE_SEND_PARALLEL_DRIVING_REQ, AiCloudTask.MessageType.ParallelDrivingCmd, reqNo, parallelRequest.toByteString());
}
}

View File

@@ -32,6 +32,7 @@ import java.util.regex.Pattern;
import bag_manager.BagManagerOuterClass;
import chassis.SpecialVehicleTaskCmdOuterClass;
import mogo.telematics.pad.MessagePad;
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest;
/**
* @ProjectName: lib-adas-fpga
@@ -1194,6 +1195,18 @@ public class AdasManager implements IAdasNetCommApi {
return mChannel != null && mChannel.sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp);
}
/**
* PAD发起平行驾驶请求
*
* @param reqNo 请求编号
* @param parallelRequest 参数
* @return boolean
*/
@Override
public boolean sendParallelDrivingReq(@NonNull String reqNo, @NonNull ParallelDrivingRequest.ParallelRequest parallelRequest) {
return mChannel != null && mChannel.sendParallelDrivingReq(reqNo, parallelRequest);
}
/**
* 获取工控机固定IP列表
*

View File

@@ -21,6 +21,7 @@ import java.util.Set;
import bag_manager.BagManagerOuterClass;
import chassis.SpecialVehicleTaskCmdOuterClass;
import mogo.telematics.pad.MessagePad;
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest;
/**
* @author nie yunlong
@@ -750,6 +751,15 @@ public interface IAdasNetCommApi {
*/
boolean sendSweeperCloudSuspendResumeTaskResp(@NonNull String reqNo, @NonNull SweeperTaskCloudSuspendResume.BigTaskActionResp bigTaskActionResp);
/**
* PAD发起平行驾驶请求
*
* @param reqNo 请求编号
* @param parallelRequest 参数
* @return boolean
*/
boolean sendParallelDrivingReq(@NonNull String reqNo, @NonNull ParallelDrivingRequest.ParallelRequest parallelRequest);
// TODO 需求暂停 待讨论
// boolean getRoutes();

View File

@@ -7,10 +7,10 @@ import com.mogo.support.obu.ObuScene;
import com.zhidao.support.adas.high.common.MessageType;
import com.zhidao.support.adas.high.common.ProtocolStatus;
import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.bean.AdasParam;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus;
@@ -29,6 +29,7 @@ import function_state_management.FunctionStates;
import mogo.telematics.pad.MessagePad;
import mogo.v2x.MogoV2X;
import mogo.v2x.RoadOverviewEvents;
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass;
import mogo_msg.MogoReportMsg;
import perception.TrafficLightOuterClass;
import planning.RoboSweeperTaskIndexOuterClass;
@@ -302,7 +303,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param taskInfo 数据
*/
void onSweeperFutianCloudTask(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTask.TaskInfo taskInfo);
void onSweeperFutianCloudTask(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTask.TaskInfo taskInfo);
/**
* 2、云端下发子任务请求pad确认type100002-> sweeper_task_confirm.proto
@@ -313,7 +314,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param taskConfirm 数据
*/
void onSweeperFutianCloudTaskConfirm(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskConfirm.TaskConfirm taskConfirm);
void onSweeperFutianCloudTaskConfirm(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskConfirm.TaskConfirm taskConfirm);
/**
* 3、云端下发任务状态到padtype100003-> sweeper_task_status.proto
@@ -324,7 +325,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param taskStatusPush 数据
*/
void onSweeperFutianCloudTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStatus.TaskStatusPush taskStatusPush);
void onSweeperFutianCloudTaskStatus(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStatus.TaskStatusPush taskStatusPush);
/**
* 4、云端请求pad结束任务type100004-> sweeper_task_stop.proto
@@ -335,7 +336,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param stopTaskReq 数据
*/
void onSweeperFutianCloudTaskStop(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStop.StopTaskReq stopTaskReq);
void onSweeperFutianCloudTaskStop(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStop.StopTaskReq stopTaskReq);
/**
* 5、pad请求挂起任务type100005-> sweeper_task_suspend_resume.proto
@@ -347,7 +348,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param suspendResumeTaskResp 数据
*/
void onSweeperFutianCloudTaskSuspendResume(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp);
void onSweeperFutianCloudTaskSuspendResume(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp);
/**
* 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾type: 100008-> sweeper_autopilot.proto
@@ -358,7 +359,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param isBootableResp 数据
*/
void onSweeperFutianCloudBootable(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBootable.IsBootableResp isBootableResp);
void onSweeperFutianCloudBootable(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBootable.IsBootableResp isBootableResp);
/**
* 9、云端下发pad大任务状态type: 100009-> sweeper_big_task_status.proto
@@ -369,7 +370,7 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param bigTaskStatusPush 数据
*/
void onSweeperFutianCloudBigTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush);
void onSweeperFutianCloudBigTaskStatus(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush);
/**
* 10、云端下发任务暂停/恢复指令到padtype: 100010-> sweeper_task_cloud_suspend_resume.proto
@@ -380,15 +381,27 @@ public interface OnAdasListener {
* @param sysTime 当前时间戳
* @param bigTaskActionPush 数据
*/
void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush);
void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush);
/**
* 清扫车云端任务未知类型
* 无人化场景
* 平行驾驶请求相关状态反馈
*
* @param header 头
* @param messageType 消息类型
* @param reqNo 请求编号
* @param sysTime 当前时间戳
* @param parallelTaskProcessNotice 数据
*/
void onParallelDrivingResp(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice parallelTaskProcessNotice);
/**
* AI云端任务未知类型
*
* @param header 头
* @param bytes 原始数据
*/
void onSweeperFutianCloudTaskUnknown(@NonNull MessagePad.Header header, @NonNull byte[] bytes);
void onAiCloudTaskUnknown(@NonNull MessagePad.Header header, @NonNull byte[] bytes);
/**
* Bag管理应答

View File

@@ -73,6 +73,8 @@ public enum MessageType {
TYPE_RECEIVE_SWEEPER_CLOUD_TASK_CMD(MessagePad.MessageType.MsgTypeTaskCmd, "云控下发清扫车任务指令"),
TYPE_SEND_FSM_STATUS_REASON_QUERY_REQ(MessagePad.MessageType.MsgTypeFSMStatusReasonQueryReq, "FSM状态原因查询"),
TYPE_RECEIVE_FSM_STATUS_REASON_QUERY_RESP(MessagePad.MessageType.MsgTypeFSMStatusReasonQueryResp, "FSM状态原因查询应答"),
TYPE_SEND_PARALLEL_DRIVING_REQ(MessagePad.MessageType.MsgTypeParallelDrivingCmd, "平行驾驶请求"),
TYPE_RECEIVE_PARALLEL_DRIVING_STATUS(MessagePad.MessageType.MsgTypeParallelDrivingCmd, "平行驾驶状态"),
//TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释
TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, "Planning决策状态"),
TYPE_RECEIVE_SWEEPER_TASK_INDEX_DATA(MessagePad.MessageType.MsgTypeSweeperTaskIndexData, "清扫车指标数据"),

View File

@@ -13,6 +13,7 @@ import java.util.TimerTask;
import chassis.Chassis;
import chassis.ChassisStatesOuterClass;
import chassis.VehicleStateOuterClass;
import system_master.SystemStatusInfo;
/**
@@ -26,6 +27,7 @@ public class AutopilotAbility250 {
private static final String TAG = AutopilotAbility250.class.getSimpleName();
private volatile Timer timer;
private ChassisStatesOuterClass.ChassisStates chassisStates;
private VehicleStateOuterClass.VehicleState vehicleState;
private int mapVersion = -1;//MAP版本
private int masterVersion = -1;//Master版本
private OnAutopilotAbilityListener listener;
@@ -57,6 +59,10 @@ public class AutopilotAbility250 {
this.chassisStates = chassisStates;
}
protected void setVehicleState(VehicleStateOuterClass.VehicleState vehicleState) {
this.vehicleState = vehicleState;
}
private void onCallback(SystemStatusInfo.StatusInfo statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
@@ -144,17 +150,19 @@ public class AutopilotAbility250 {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "档位异常");
}
}
//TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段
// //电子驻车制动系统
// if (chassisStates.hasEpbSystemStates()) {
// ChassisStatesOuterClass.EPBSystemStates epb = chassisStates.getEpbSystemStates();
// if (epb.hasEpbEnableState()){
// epb.getEpbWorkState();
// }
// }
}
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车");
}
}
}
if (listener != null) {
listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
}

View File

@@ -10,6 +10,7 @@ import java.util.ArrayList;
import chassis.Chassis;
import chassis.ChassisStatesOuterClass;
import chassis.VehicleStateOuterClass;
import system_master.SsmInfo;
/**
@@ -21,6 +22,7 @@ import system_master.SsmInfo;
public class AutopilotAbility350And360 {
private static final String TAG = AutopilotAbility250.class.getSimpleName();
private ChassisStatesOuterClass.ChassisStates chassisStates;
private VehicleStateOuterClass.VehicleState vehicleState;
private int masterVersion = -1;//Master版本
private OnAutopilotAbilityListener listener;
@@ -43,6 +45,10 @@ public class AutopilotAbility350And360 {
this.chassisStates = chassisStates;
}
protected void setVehicleState(VehicleStateOuterClass.VehicleState vehicleState) {
this.vehicleState = vehicleState;
}
private void onCallback(SsmInfo.SsmStatusInf statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
@@ -117,17 +123,19 @@ public class AutopilotAbility350And360 {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "档位异常");
}
}
//TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段
// //电子驻车制动系统
// if (chassisStates.hasEpbSystemStates()) {
// ChassisStatesOuterClass.EPBSystemStates epb = chassisStates.getEpbSystemStates();
// if (epb.hasEpbEnableState()){
// epb.getEpbWorkState();
// }
// }
}
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车");
}
}
}
if (listener != null) {
listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
}

View File

@@ -19,6 +19,7 @@ import java.util.TimerTask;
import chassis.Chassis;
import chassis.ChassisStatesOuterClass;
import chassis.VehicleStateOuterClass;
import function_state_management.FSMStatusReasonQueryOuterClass;
import mogo.telematics.pad.MessagePad;
import system_master.SsmInfo;
@@ -206,6 +207,20 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
}
/**
* 老底盘中手刹状态更新新底盘PB中没有所以单独传递
*
* @param vehicleState 底盘
*/
public void setVehicleState(VehicleStateOuterClass.VehicleState vehicleState) {
if (autopilotAbility250 != null) {
autopilotAbility250.setVehicleState(vehicleState);
}
if (autopilotAbility350And360 != null) {
autopilotAbility350And360.setVehicleState(vehicleState);
}
}
/**
* FSM OFF状态原因更新
*

View File

@@ -9,7 +9,7 @@ import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.ByteUtil;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.protocol.RawData;
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus;
@@ -20,32 +20,33 @@ import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus;
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
import mogo.telematics.pad.MessagePad;
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass;
/**
* 清扫车云端任务调度
* 云控任务清扫车任务调度无人化场景平行驾驶请求相关指令及状态反馈
*/
public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
public class AiCloudTaskMessage extends MyAbstractMessageHandler {
public SweeperCloudTaskMessage() {
public AiCloudTaskMessage() {
}
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
byte[] bytes = raw.originalData.toByteArray();
SweeperCloudTask.SweeperMessage message = SweeperCloudTask.SweeperMessage.parser().parseFrom(bytes, raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("清扫车云端任务调度", raw.receiveTime);
AiCloudTask.AiCloudPadMessage message = AiCloudTask.AiCloudPadMessage.parser().parseFrom(bytes, raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("云控任务", raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
MessagePad.Header header = raw.getHeader();
SweeperCloudTask.MessageType msgType = SweeperCloudTask.MessageType.forNumber(message.getMsgType());//消息类型响应请求时使用对应请求的消息类型
AiCloudTask.MessageType msgType = AiCloudTask.MessageType.forNumber(message.getMsgType());//消息类型响应请求时使用对应请求的消息类型
String reqNo = message.getReqNo(); //请求编号响应请求时使用请求方的请求编号
long sysTime = message.getSysTime(); //当前时间戳
ByteString payload = message.getPayload();
CupidLogUtils.i("SweeperCloudTaskMessage", "MsgType=" + (msgType == null ? "null" : msgType.getNumber()) + " reqNo=" + reqNo + " sysTime=" + sysTime);
boolean isExistPayload = payload != null && !payload.isEmpty();
if (msgType == SweeperCloudTask.MessageType.CloudPushTask || msgType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {
if (msgType == AiCloudTask.MessageType.CloudPushTask || msgType == AiCloudTask.MessageType.PadSendGetTaskReq) {
//1云端下发大任务信息type: 100001-> sweeper_task.proto
//7pad主动拉取当前车辆正在执行任务的完整信息type100007-> sweeper_task.proto
SweeperTask.TaskInfo taskInfo = null;
@@ -55,7 +56,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskInfo == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(taskInfo)));
adasListener.onSweeperFutianCloudTask(header, msgType, reqNo, sysTime, taskInfo);
} else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskConfirm) {
} else if (msgType == AiCloudTask.MessageType.CloudPushTaskConfirm) {
//2云端下发子任务请求pad确认type100002-> sweeper_task_confirm.proto
SweeperTaskConfirm.TaskConfirm taskConfirm = null;
if (isExistPayload) {
@@ -64,7 +65,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskConfirm == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(taskConfirm)));
adasListener.onSweeperFutianCloudTaskConfirm(header, msgType, reqNo, sysTime, taskConfirm);
} else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStatus) {
} else if (msgType == AiCloudTask.MessageType.CloudPushTaskStatus) {
//3云端下发任务状态到padtype100003-> sweeper_task_status.proto
SweeperTaskStatus.TaskStatusPush taskStatusPush = null;
if (isExistPayload) {
@@ -73,7 +74,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskStatusPush == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(taskStatusPush)));
adasListener.onSweeperFutianCloudTaskStatus(header, msgType, reqNo, sysTime, taskStatusPush);
} else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStop) {
} else if (msgType == AiCloudTask.MessageType.CloudPushTaskStop) {
//4云端请求pad结束任务type100004-> sweeper_task_stop.proto
SweeperTaskStop.StopTaskReq stopTaskReq = null;
if (isExistPayload) {
@@ -82,7 +83,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (stopTaskReq == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(stopTaskReq)));
adasListener.onSweeperFutianCloudTaskStop(header, msgType, reqNo, sysTime, stopTaskReq);
} else if (msgType == SweeperCloudTask.MessageType.PadSendTaskSuspend || msgType == SweeperCloudTask.MessageType.PadSendTaskResume) {
} else if (msgType == AiCloudTask.MessageType.PadSendTaskSuspend || msgType == AiCloudTask.MessageType.PadSendTaskResume) {
//5pad请求挂起任务type100005-> sweeper_task_suspend_resume.proto
//6pad请求恢复挂起的任务type100006-> sweeper_task_suspend_resume.proto
SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp = null;
@@ -92,7 +93,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (suspendResumeTaskResp == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(suspendResumeTaskResp)));
adasListener.onSweeperFutianCloudTaskSuspendResume(header, msgType, reqNo, sysTime, suspendResumeTaskResp);
} else if (msgType == SweeperCloudTask.MessageType.PadSendBootable) {
} else if (msgType == AiCloudTask.MessageType.PadSendBootable) {
//8接管后回自驾-pad上报状态给云端 云端下发启动自驾type: 100008-> sweeper_autopilot.proto
SweeperBootable.IsBootableResp isBootableResp = null;
if (isExistPayload) {
@@ -101,7 +102,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (isBootableResp == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(isBootableResp)));
adasListener.onSweeperFutianCloudBootable(header, msgType, reqNo, sysTime, isBootableResp);
} else if (msgType == SweeperCloudTask.MessageType.CloudPushBigTaskStatus) {
} else if (msgType == AiCloudTask.MessageType.CloudPushBigTaskStatus) {
//9云端下发pad大任务状态type: 100009-> sweeper_big_task_status.proto
SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush = null;
if (isExistPayload) {
@@ -110,7 +111,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (bigTaskStatusPush == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(bigTaskStatusPush)));
adasListener.onSweeperFutianCloudBigTaskStatus(header, msgType, reqNo, sysTime, bigTaskStatusPush);
} else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskSuspendResume) {
} else if (msgType == AiCloudTask.MessageType.CloudPushTaskSuspendResume) {
//10云端下发任务暂停/恢复指令到padtype: 100010
SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush = null;
if (isExistPayload) {
@@ -119,12 +120,19 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler {
// Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (bigTaskActionPush == null ? "null" :
// TextFormat.printer().escapingNonAscii(false).printToString(bigTaskActionPush)));
adasListener.onSweeperFutianCloudTaskCloudSuspendResume(header, msgType, reqNo, sysTime, bigTaskActionPush);
} else if (msgType == AiCloudTask.MessageType.ParallelDrivingCmd) {
//无人化场景平行驾驶请求相关指令及状态反馈
ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice parallelTaskProcessNotice = null;
if (isExistPayload) {
parallelTaskProcessNotice = ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice.parseFrom(payload);
}
adasListener.onParallelDrivingResp(header, msgType, reqNo, sysTime, parallelTaskProcessNotice);
} else {
//未知数据类型
CupidLogUtils.i("SweeperCloudTaskMessage", " 错误数据=" + ByteUtil.byteArrToHex(bytes));
adasListener.onSweeperFutianCloudTaskUnknown(header, bytes);
adasListener.onAiCloudTaskUnknown(header, bytes);
}
}
AdasChannel.calculateTimeConsumingBusiness("清扫车云端任务调度", nowTime);
AdasChannel.calculateTimeConsumingBusiness("云控任务", nowTime);
}
}

View File

@@ -42,7 +42,7 @@ public class MyMessageFactory implements IMyMessageFactory {
private IMsg v2nCongestionEventMessage;//主车附近事件推送
private IMsg v2nGlobalPathEventsMessage;//主车路径全局事件推送
private IMsg getParamRespMessage;//参数获取应答
private IMsg sweeperCloudTaskMessage;//云控下发清扫车任务指令
private IMsg aiCloudTaskMessage;//云控任务:清扫车任务指令、无人化场景,平行驾驶请求相关指令及状态反馈
private IMsg m1StitchedVideoMessage;//M1拼接视频
private IMsg fSMStatusReasonRespondMessage;//FSM状态原因查询
@@ -228,12 +228,12 @@ public class MyMessageFactory implements IMyMessageFactory {
getParamRespMessage = new GetParamRespMessage();
}
return getParamRespMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_SWEEPER_CLOUD_TASK_CMD.typeCode) {
//云控下发清扫车任务指令
if (sweeperCloudTaskMessage == null) {
sweeperCloudTaskMessage = new SweeperCloudTaskMessage();
} else if (messageType == MessageType.TYPE_RECEIVE_SWEEPER_CLOUD_TASK_CMD.typeCode || messageType == MessageType.TYPE_RECEIVE_PARALLEL_DRIVING_STATUS.typeCode) {
//云控任务:清扫车任务指令、无人化场景,平行驾驶请求相关指令及状态反馈
if (aiCloudTaskMessage == null) {
aiCloudTaskMessage = new AiCloudTaskMessage();
}
return sweeperCloudTaskMessage;
return aiCloudTaskMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_M1_STITCHED_VIDEO.typeCode) {
//M1拼接视频
if (m1StitchedVideoMessage == null) {

View File

@@ -26,6 +26,7 @@ public class VehicleStateMessage extends MyAbstractMessageHandler {
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
AutopilotAbilityManager.getInstance().setVehicleState(vehicleState);
ChassisStatesOuterClass.ChassisStates chassisStates = compatibility(adasListener, raw, vehicleState);
if (adasListener != null) {
//TODO 暂时关闭老底盘转发 后期 会删除 onVehicleState