From 76cdcf7e72ff2e697699dca3df048c88ee24fb93 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 7 Sep 2023 20:26:20 +0800 Subject: [PATCH] =?UTF-8?q?[610][adas]=E6=B7=BB=E5=8A=A0=E5=B9=B3=E8=A1=8C?= =?UTF-8?q?=E9=A9=BE=E9=A9=B6=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=9B?= =?UTF-8?q?=E8=83=BD=E5=90=A6=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B7=BB=E5=8A=A0=E6=89=8B=E5=88=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=EF=BC=9B=E4=BF=AE=E6=94=B9=E6=B8=85=E6=89=AB?= =?UTF-8?q?=E8=BD=A6=E4=BA=91=E6=8E=A7PB=E4=B8=8E=E5=B9=B3=E8=A1=8C?= =?UTF-8?q?=E9=A9=BE=E9=A9=B6PB=E5=85=B1=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../callback/ISweeperCloudTaskCallback.kt | 6 +-- .../sweepercloud/model/SweeperTaskModel.java | 38 +++++++-------- .../util/SweeperCloudTaskUtils.kt | 14 +++--- .../autopilot/MoGoAutopilotControlProvider.kt | 8 ++++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 41 ++++++++++++---- .../IMoGoAutopilotControlProvider.kt | 10 ++++ .../IMoGoParallelDrivingStatusListener.kt | 16 +++++++ .../IMoGoSweeperFutianCloudTaskListener.kt | 18 +++---- .../CallerAutoPilotControlManager.kt | 12 +++++ .../CallerParallelDrivingListenerManager.kt | 21 +++++++++ ...erSweeperFutianCloudTaskListenerManager.kt | 18 +++---- ...r_cloud_task.proto => ai_cloud_task.proto} | 6 ++- .../src/main/proto/message_pad.proto | 5 ++ .../main/proto/parallelDrivingRequest.proto | 11 +++++ .../proto/parallelTaskProcessNotice.proto | 8 ++++ .../zhidao/support/adas/high/AdasChannel.java | 47 ++++++++++++------- .../zhidao/support/adas/high/AdasManager.java | 13 +++++ .../support/adas/high/IAdasNetCommApi.java | 10 ++++ .../support/adas/high/OnAdasListener.java | 35 +++++++++----- .../support/adas/high/common/MessageType.java | 2 + .../ability/AutopilotAbility250.java | 28 +++++++---- .../ability/AutopilotAbility350And360.java | 28 +++++++---- .../ability/AutopilotAbilityManager.java | 15 ++++++ ...skMessage.java => AiCloudTaskMessage.java} | 42 ++++++++++------- .../adas/high/msg/MyMessageFactory.java | 12 ++--- .../adas/high/msg/VehicleStateMessage.java | 1 + 26 files changed, 336 insertions(+), 129 deletions(-) create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingStatusListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingListenerManager.kt rename libraries/mogo-adas-data/src/main/proto/{sweeper/sweeper_cloud_task.proto => ai_cloud_task.proto} (89%) create mode 100644 libraries/mogo-adas-data/src/main/proto/parallelDrivingRequest.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/parallelTaskProcessNotice.proto rename libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/{SweeperCloudTaskMessage.java => AiCloudTaskMessage.java} (77%) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt index d564062e3d..631cfd330a 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt @@ -3,7 +3,7 @@ package com.mogo.och.sweepercloud.callback import chassis.ChassisStatesOuterClass import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean import com.mogo.och.sweepercloud.database.bean.WeltDataBean -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.bootable.SweeperBootable.IsBootableResp import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon @@ -22,7 +22,7 @@ interface ISweeperCloudTaskCallback { /** * 接取云端任务/正在执行中任务信息回调 */ - fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType,taskInfo: SweeperTask.TaskInfo?) + fun onSweeperCloudTask(messageType: AiCloudTask.MessageType, taskInfo: SweeperTask.TaskInfo?) /** * 云端下发子任务请求pad确认 @@ -42,7 +42,7 @@ interface ISweeperCloudTaskCallback { /** * 挂起/恢复 */ - fun onSweeperCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType,taskId:String,subTaskId:String,code:Code) + fun onSweeperCloudTaskSuspendResume(messageType: AiCloudTask.MessageType,taskId:String,subTaskId:String,code:Code) /** * pad请求云端进入自驾 diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 13b1bc7d75..2b749ff5ed 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -39,7 +39,7 @@ import com.mogo.och.sweepercloud.constant.SweeperConst; import com.mogo.och.sweepercloud.database.MyDataBase; import com.mogo.och.sweepercloud.database.bean.WeltDataBean; import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils; -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; @@ -332,7 +332,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTask(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTask.TaskInfo taskInfo) { CallerLogger.d(M_SWEEPER + TAG, @@ -344,7 +344,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskConfirm(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskConfirm.TaskConfirm taskConfirm) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + @@ -356,7 +356,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStatus.TaskStatusPush taskStatusPush) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); @@ -367,7 +367,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskStop(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStop.StopTaskReq stopTaskReq) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); @@ -378,7 +378,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskSuspendResume(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); @@ -390,7 +390,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudBootable(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBootable.IsBootableResp isBootableResp) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); @@ -401,7 +401,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudBigTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); @@ -412,7 +412,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, + public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskCloudSuspendResume:" + printMessage(bigTaskActionPush)); @@ -521,7 +521,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM SweeperTask.GetTaskReq getTaskReq = builder.build(); CallerLogger.d(M_SWEEPER + TAG, - "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber()); + "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendGetTaskReq.getNumber()); getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq); } @@ -534,11 +534,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setTaskId(taskId); builder.setCode(code); SweeperTask.StartTaskResp startTaskResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTask.getNumber()); getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber()); + "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTask.getNumber()); } /** @@ -551,9 +551,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setSubTaskId(subTaskId); builder.setCode(code); SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); + "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); } @@ -569,10 +569,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setTaskId(taskId); builder.setCode(code); SweeperTaskStop.StopTaskResp stopTaskResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskStop.getNumber()); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); + "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskStop.getNumber()); getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp); } @@ -593,7 +593,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM String reqNo = SweeperCloudTaskUtils.getRequestId(); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber()); + "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendBootable.getNumber()); getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable); //SweeperCloudTaskUtils.mockSendCloudBootable(); } @@ -609,10 +609,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setTaskId(taskId); builder.setCode(code); SweeperTaskCloudSuspendResume.BigTaskActionResp resp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber()); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskSuspendResume); + "sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskSuspendResume); getAutoPilotControlManager().sendSweeperCloudSuspendResumeTaskResp(reqNo, resp); } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt index 9e353f8ac9..e63b6806fb 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt @@ -19,7 +19,7 @@ import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener import com.mogo.och.sweepercloud.constant.SweeperConst import com.mogo.och.sweepercloud.model.SweeperTaskModel import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType +import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.Location @@ -50,7 +50,7 @@ object SweeperCloudTaskUtils { * 模拟云控发送任务给pad */ @JvmStatic - fun mockSendCloudTaskInfo(messageType: MessageType) { + fun mockSendCloudTaskInfo(messageType: AiCloudTask.MessageType) { val builder = TaskInfo.newBuilder() builder.sn = getDriverSn() builder.taskId = "10" @@ -169,7 +169,7 @@ object SweeperCloudTaskUtils { builder.taskId = "10" builder.subTaskId = "1" SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm( - MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -185,7 +185,7 @@ object SweeperCloudTaskUtils { builder.subTaskId = "1" builder.taskStatus = SweeperCommon.TaskStatus.RUNNING SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus( - MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -200,7 +200,7 @@ object SweeperCloudTaskUtils { builder.taskId = "10" builder.type = SweeperTaskStop.StopTaskType.ADVANCE SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop( - MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -216,7 +216,7 @@ object SweeperCloudTaskUtils { builder.taskStatus = SweeperCommon.TaskStatus.FINISHED builder.systemTime = System.currentTimeMillis() SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus( - MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -233,7 +233,7 @@ object SweeperCloudTaskUtils { builder.code = SweeperCommon.Code.SUCCEED UiThreadHandler.getsUiHandler().postDelayed({ SweeperTaskModel.getInstance().onSweeperFutianCloudBootable( - MessageType.PadSendBootable, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.PadSendBootable, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) }, 10000) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index 66d9ccfe70..02af434818 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -70,6 +70,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop import com.zhjt.service.chain.ChainLog import io.netty.channel.Channel import mogo.telematics.pad.MessagePad +import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest import java.util.* import java.util.concurrent.TimeUnit @@ -1093,6 +1094,13 @@ class MoGoAutopilotControlProvider : return AdasManager.getInstance().sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp) } + override fun sendParallelDrivingReq( + reqNo: String, + parallelRequest: ParallelDrivingRequest.ParallelRequest + ): Boolean { + return AdasManager.getInstance().sendParallelDrivingReq(reqNo, parallelRequest) + } + override fun setIsDrawPointCloud(isDrawPointCloud: Boolean) { if (isDrawPointCloud) { AdasManager.getInstance().subscribeInterface( diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 148ce1a59e..e1d461c1b7 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -56,9 +56,9 @@ import com.mogo.support.obu.ObuScene import com.zhidao.support.adas.high.OnAdasListener import com.zhjt.mogo.adas.data.bean.AdasParam import com.zhidao.support.adas.high.common.ProtocolStatus +import com.zhjt.mogo.adas.data.AiCloudTask 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.s_r.SweeperTaskSuspendResume @@ -73,6 +73,7 @@ import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.TrackedObject import mogo.v2x.MogoV2X import mogo.v2x.RoadOverviewEvents +import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass import mogo_msg.MogoReportMsg import perception.TrafficLightOuterClass import planning.RoboSweeperTaskIndexOuterClass @@ -576,7 +577,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudTask( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskInfo: SweeperTask.TaskInfo? @@ -600,7 +601,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudTaskConfirm( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskConfirm: SweeperTaskConfirm.TaskConfirm? @@ -624,7 +625,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudTaskStatus( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskStatusPush: SweeperTaskStatus.TaskStatusPush? @@ -648,7 +649,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudTaskStop( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, stopTaskReq: SweeperTaskStop.StopTaskReq? @@ -673,7 +674,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudTaskSuspendResume( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, suspendResumeTaskResp: SweeperTaskSuspendResume.SuspendResumeTaskResp? @@ -697,7 +698,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudBootable( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, isBootableResp: SweeperBootable.IsBootableResp? @@ -721,7 +722,7 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onSweeperFutianCloudBigTaskStatus( header: MessagePad.Header, - messageType: SweeperCloudTask.MessageType, + messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskStatusPush: SweeperBigTaskStatus.BigTaskStatusPush? @@ -743,17 +744,37 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param sysTime 当前时间戳 * @param bigTaskActionPush 数据 */ - override fun onSweeperFutianCloudTaskCloudSuspendResume(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskActionPush: SweeperTaskCloudSuspendResume.BigTaskActionPush?) { + override fun onSweeperFutianCloudTaskCloudSuspendResume(header: MessagePad.Header, messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskActionPush: SweeperTaskCloudSuspendResume.BigTaskActionPush?) { CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskCloudSuspendResume(messageType, reqNo, sysTime, bigTaskActionPush) } + /** + * 无人化场景 + * 平行驾驶请求相关状态反馈 + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param parallelTaskProcessNotice 数据 + */ + override fun onParallelDrivingResp( + header: MessagePad.Header, + messageType: AiCloudTask.MessageType, + reqNo: String?, + sysTime: Long, + parallelTaskProcessNotice: ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice? + ) { + CallerParallelDrivingListenerManager.invokeParallelDrivingListener(parallelTaskProcessNotice) + } + /** * 清扫车云端任务未知类型 * * @param header 头 * @param bytes 原始数据 */ - override fun onSweeperFutianCloudTaskUnknown(header: MessagePad.Header, bytes: ByteArray) { + override fun onAiCloudTaskUnknown(header: MessagePad.Header, bytes: ByteArray) { CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskUnknown(bytes) } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt index 7361850d87..a3cff8dc8f 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt @@ -13,6 +13,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfi import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionResp +import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest /** * @author xiaoyuzhou @@ -458,6 +459,15 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { */ fun sendSweeperAutopilotBootable(reqNo: String, isBootable: IsBootable): Boolean + /** + * PAD发起平行驾驶请求 + * + * @param reqNo 请求编号(目前没有传递需求,可以传null) + * @param parallelRequest 参数 + * @return boolean + */ + fun sendParallelDrivingReq(reqNo: String, parallelRequest: ParallelDrivingRequest.ParallelRequest): Boolean + /** * pad收到云端下发暂停恢复响应 * 10、云端下发任务暂停/恢复指令到pad(type: 100010)sweeper_task_cloud_suspend_resume.proto/BigTaskActionResp diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingStatusListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingStatusListener.kt new file mode 100644 index 0000000000..7b6e862aae --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingStatusListener.kt @@ -0,0 +1,16 @@ +package com.mogo.eagle.core.function.api.autopilot + +import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass + +/** + * 平行驾驶状态 + */ +interface IMoGoParallelDrivingStatusListener { + + /** + * 需要判空 + */ + fun onParallelDrivingResp( + parallelTaskProcessNotice: ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice? + ) +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt index 55dba62ef9..df7af89ee8 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt @@ -1,6 +1,6 @@ package com.mogo.eagle.core.function.api.autopilot -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask +import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootableResp import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus.BigTaskStatusPush @@ -24,7 +24,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param taskInfo 数据 */ - fun onSweeperFutianCloudTask(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, taskInfo: SweeperTask.TaskInfo?) + fun onSweeperFutianCloudTask(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskInfo: SweeperTask.TaskInfo?) /** * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto @@ -34,7 +34,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param taskConfirm 数据 */ - fun onSweeperFutianCloudTaskConfirm(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, taskConfirm: TaskConfirm?) + fun onSweeperFutianCloudTaskConfirm(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskConfirm: TaskConfirm?) /** * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto @@ -44,7 +44,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param taskStatusPush 数据 */ - fun onSweeperFutianCloudTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, taskStatusPush: TaskStatusPush?) + fun onSweeperFutianCloudTaskStatus(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, taskStatusPush: TaskStatusPush?) /** * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto @@ -54,7 +54,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param stopTaskReq 数据 */ - fun onSweeperFutianCloudTaskStop(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, stopTaskReq: StopTaskReq?) + fun onSweeperFutianCloudTaskStop(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, stopTaskReq: StopTaskReq?) /** * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto @@ -65,7 +65,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param suspendResumeTaskResp 数据 */ - fun onSweeperFutianCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, suspendResumeTaskResp: SuspendResumeTaskResp?) + fun onSweeperFutianCloudTaskSuspendResume(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, suspendResumeTaskResp: SuspendResumeTaskResp?) /** * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto @@ -75,7 +75,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param isBootableResp 数据 */ - fun onSweeperFutianCloudBootable(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, isBootableResp: IsBootableResp?) + fun onSweeperFutianCloudBootable(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, isBootableResp: IsBootableResp?) /** * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto @@ -85,7 +85,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param bigTaskStatusPush 数据 */ - fun onSweeperFutianCloudBigTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskStatusPush: BigTaskStatusPush?) + fun onSweeperFutianCloudBigTaskStatus(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskStatusPush: BigTaskStatusPush?) /** * 10、云端下发任务暂停/恢复指令到pad(type: 100010)-> sweeper_task_cloud_suspend_resume.proto @@ -95,7 +95,7 @@ interface IMoGoSweeperFutianCloudTaskListener { * @param sysTime 当前时间戳 * @param bigTaskActionPush 数据 */ - fun onSweeperFutianCloudTaskCloudSuspendResume(messageType: SweeperCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskActionPush: BigTaskActionPush?) + fun onSweeperFutianCloudTaskCloudSuspendResume(messageType: AiCloudTask.MessageType, reqNo: String?, sysTime: Long, bigTaskActionPush: BigTaskActionPush?) /** * 清扫车云端任务未知类型 diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 705ed05b16..d8d50c1478 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -24,6 +24,7 @@ import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionResp import com.zhjt.service.chain.ChainLog import com.zhjt.service_biz.BizConfig +import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest import kotlin.random.Random @@ -642,6 +643,17 @@ object CallerAutoPilotControlManager { return providerApi?.sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp) ?: false } + /** + * PAD发起平行驾驶请求 + * + * @param reqNo 请求编号(目前没有传递需求,可以传null) + * @param parallelRequest 参数 + * @return boolean + */ + fun sendParallelDrivingReq( reqNo: String, parallelRequest: ParallelDrivingRequest.ParallelRequest): Boolean { + return providerApi?.sendParallelDrivingReq(reqNo, parallelRequest) ?: false + } + /** * 打开点云绘制 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingListenerManager.kt new file mode 100644 index 0000000000..c7ccd21d99 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingListenerManager.kt @@ -0,0 +1,21 @@ +package com.mogo.eagle.core.function.call.autopilot + +import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingStatusListener +import com.mogo.eagle.core.function.call.base.CallerBase +import mogo.telematics.pad.MessagePad +import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass + +/** + * 平行驾驶状态回调,云端说有状态变化就回调 + */ +object CallerParallelDrivingListenerManager : CallerBase() { + + + fun invokeParallelDrivingListener(parallelTaskProcessNotice: ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice?) { + M_LISTENERS.forEach { + val listener = it.value + listener.onParallelDrivingResp(parallelTaskProcessNotice) + } + } + +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt index ba6a151961..b190ff80b2 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt @@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.call.autopilot import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCloudTaskListener import com.mogo.eagle.core.function.call.base.CallerBase -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.s_r.SweeperTaskSuspendResume @@ -26,7 +26,7 @@ object CallerSweeperFutianCloudTaskListenerManager : CallerBase sweeper_bootable.proto CloudPushBigTaskStatus = 100009; //9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto CloudPushTaskSuspendResume = 100010; //10、云端下发任务暂停/恢复指令到pad(type: 100010)-> sweeper_task_cloud_suspend_resume.proto + + ParallelDrivingCmd = 200001; //无人化场景,平行驾驶请求相关指令及状态反馈, 云控<->鹰眼双向透传 } //云下行消息 //PAD上行消息 -message SweeperMessage +message AiCloudPadMessage { uint32 msgType = 1; //消息类型,响应请求时,使用对应请求的消息类型 bytes payload = 2; //消息内容 diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index efac86daca..1b6356ede8 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -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 +//查看云端和鹰眼的接口 + diff --git a/libraries/mogo-adas-data/src/main/proto/parallelDrivingRequest.proto b/libraries/mogo-adas-data/src/main/proto/parallelDrivingRequest.proto new file mode 100644 index 0000000000..5c90a136f8 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/parallelDrivingRequest.proto @@ -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; // 具体的请求原因描述,如:因底盘消息掉帧强退自动驾驶 +} diff --git a/libraries/mogo-adas-data/src/main/proto/parallelTaskProcessNotice.proto b/libraries/mogo-adas-data/src/main/proto/parallelTaskProcessNotice.proto new file mode 100644 index 0000000000..67e23c5e50 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/parallelTaskProcessNotice.proto @@ -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; //消息具体内容:进入同步状态 ; 同步结束 ; 无法接管 ; 同步异常结束 ; 任务已被拒绝 ; 异常请人工驾驶 ; 平行驾驶异常结束 +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index cadfd60c66..5a287a7650 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -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()); + } + } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index dd0918f7df..a97e53cd07 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -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列表 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index 3e1d1a3f3a..472de9aaa2 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -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(); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index def18d33d9..1bfe69df7a 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -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确认(type:100002)-> 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、云端下发任务状态到pad(type:100003)-> 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结束任务(type:100004)-> 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请求挂起任务(type:100005)-> 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、云端下发任务暂停/恢复指令到pad(type: 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管理应答 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java index 08428bb6f8..6f886b4f7d 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java @@ -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, "清扫车指标数据"), diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java index 42ac6a90d9..74a9312eae 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java @@ -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 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); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java index 0b94ccc7b7..9ea99c68d6 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java @@ -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 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); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java index 08b2f45622..256e526868 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java @@ -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状态原因更新 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AiCloudTaskMessage.java similarity index 77% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java rename to libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AiCloudTaskMessage.java index 2af62348ec..ff1e29de81 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AiCloudTaskMessage.java @@ -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 //7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> 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确认(type:100002)-> 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、云端下发任务状态到pad(type:100003)-> 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结束任务(type:100004)-> 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) { //5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto //6、pad请求恢复挂起的任务(type:100006)-> 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、云端下发任务暂停/恢复指令到pad(type: 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); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index c3195b3de7..fb5c74d1e2 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java @@ -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) { diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java index 567249f372..bc437ddc6f 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java @@ -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