From 59db2bf7c432742784b9ae2c6015e2c5350a2b7a Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 26 Apr 2023 17:05:19 +0800 Subject: [PATCH] =?UTF-8?q?[dev=5Fsweeper310][adas]=E4=BA=91=E6=8E=A7?= =?UTF-8?q?=E6=B8=85=E6=89=AB=E8=BD=A6=E6=94=B6=E5=8F=91=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotControlProvider.kt | 79 +++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 101 +++ .../IMoGoAutopilotControlProvider.kt | 71 ++- .../IMoGoSweeperFutianCloudTaskListener.kt | 89 +++ .../CallerAutoPilotControlManager.kt | 86 ++- ...erSweeperFutianCloudTaskListenerManager.kt | 125 ++++ .../src/main/proto/FSMStatusReasonQuery.proto | 10 + .../src/main/proto/message_pad.proto | 68 +- .../src/main/proto/mogo_v2x.proto | 583 ++++++++++++++++-- .../src/main/proto/param_set_cmd.proto | 3 +- .../src/main/proto/road_overview_events.proto | 14 + .../src/main/proto/sweeper/README.md | 184 ++++++ .../sweeper/sweeper_big_task_status.proto | 25 + .../main/proto/sweeper/sweeper_bootable.proto | 32 + .../proto/sweeper/sweeper_cloud_task.proto | 29 + .../main/proto/sweeper/sweeper_common.proto | 17 + .../src/main/proto/sweeper/sweeper_task.proto | 87 +++ .../proto/sweeper/sweeper_task_confirm.proto | 34 + .../proto/sweeper/sweeper_task_status.proto | 18 + .../proto/sweeper/sweeper_task_stop.proto | 41 ++ .../sweeper/sweeper_task_suspend_resume.proto | 34 + .../zhidao/support/adas/high/AdasChannel.java | 108 ++++ .../zhidao/support/adas/high/AdasManager.java | 85 +++ .../support/adas/high/IAdasNetCommApi.java | 68 ++ .../support/adas/high/OnAdasListener.java | 89 +++ .../support/adas/high/common/MessageType.java | 2 + .../adas/high/msg/MyMessageFactory.java | 7 + .../high/msg/SweeperCloudTaskMessage.java | 78 +++ 28 files changed, 2107 insertions(+), 60 deletions(-) create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt create mode 100644 libraries/mogo-adas-data/src/main/proto/FSMStatusReasonQuery.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/road_overview_events.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/README.md create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_big_task_status.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_bootable.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_cloud_task.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_common.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_confirm.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_status.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_stop.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_suspend_resume.proto create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java 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 70e54a5877..d0e73edff8 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 @@ -55,6 +55,11 @@ import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS import com.zhidao.support.adas.high.common.CupidLogUtils import com.zhidao.support.adas.high.common.MessageType import com.zhjt.mogo.adas.data.bean.MogoReport +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.SweeperTaskSuspendResume +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants import io.netty.channel.Channel @@ -829,6 +834,80 @@ class MoGoAutopilotControlProvider : AdasManager.getInstance().sendRoboSweeperFuTianTaskCmd(fuTianTaskCmd) } + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + override fun sendSweeperStartTaskResp(reqNo: String, startTaskResp: SweeperTask.StartTaskResp): Boolean { + return AdasManager.getInstance().sendSweeperStartTaskResp(reqNo, startTaskResp) + } + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + override fun sendSweeperTaskConfirmResp(reqNo: String, taskConfirmResp: SweeperTaskConfirm.TaskConfirmResp): Boolean { + return AdasManager.getInstance().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp) + } + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + override fun sendSweeperStopTaskResp(reqNo: String, stopTaskResp: SweeperTaskStop.StopTaskResp): Boolean { + return AdasManager.getInstance().sendSweeperStopTaskResp(reqNo, stopTaskResp) + } + + /** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + override fun sendSweeperSuspendResumeTaskReq(isSuspend: Boolean, reqNo: String, suspendResumeTaskReq: SweeperTaskSuspendResume.SuspendResumeTaskReq): Boolean { + return AdasManager.getInstance().sendSweeperSuspendResumeTaskReq(isSuspend,reqNo, suspendResumeTaskReq) + } + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + override fun sendSweeperGetTaskReq(reqNo: String, getTaskReq: SweeperTask.GetTaskReq): Boolean { + return AdasManager.getInstance().sendSweeperGetTaskReq(reqNo, getTaskReq) + } + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + override fun sendSweeperAutopilotBootable(reqNo: String, isBootable: SweeperBootable.IsBootable): Boolean { + return AdasManager.getInstance().sendSweeperAutopilotBootable(reqNo, isBootable) + } + 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 06c400a20a..3c53400565 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 @@ -60,6 +60,14 @@ import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.OnAdasListener import com.zhidao.support.adas.high.common.ProtocolStatus 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.SweeperTaskSuspendResume +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD import function_state_management.FunctionStates @@ -615,6 +623,99 @@ class MoGoAdasListenerImpl : OnAdasListener { } } + /** + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskInfo 数据 + */ + override fun onSweeperFutianCloudTask(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskInfo: SweeperTask.TaskInfo) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTask(messageType, reqNo, sysTime, taskInfo) + } + + /** + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskConfirm 数据 + */ + override fun onSweeperFutianCloudTaskConfirm(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskConfirm: SweeperTaskConfirm.TaskConfirm) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskConfirm(messageType, reqNo, sysTime, taskConfirm) + } + + /** + * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskStatusPush 数据 + */ + override fun onSweeperFutianCloudTaskStatus(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskStatusPush: SweeperTaskStatus.TaskStatusPush) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskStatus(messageType, reqNo, sysTime, taskStatusPush) + } + + /** + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param stopTaskReq 数据 + */ + override fun onSweeperFutianCloudTaskStop(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, stopTaskReq: SweeperTaskStop.StopTaskReq) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskStop(messageType, reqNo, sysTime, stopTaskReq) + } + + /** + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param suspendResumeTaskResp 数据 + */ + override fun onSweeperFutianCloudTaskSuspendResume(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, suspendResumeTaskResp: SweeperTaskSuspendResume.SuspendResumeTaskResp) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudTaskSuspendResume(messageType, reqNo, sysTime, suspendResumeTaskResp) + } + + /** + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param isBootableResp 数据 + */ + override fun onSweeperFutianCloudBootable(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, isBootableResp: SweeperBootable.IsBootableResp) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudBootable(messageType, reqNo, sysTime, isBootableResp) + } + + /** + * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param bigTaskStatusPush 数据 + */ + override fun onSweeperFutianCloudBigTaskStatus(header: MessagePad.Header, messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, bigTaskStatusPush: SweeperBigTaskStatus.BigTaskStatusPush) { + CallerSweeperFutianCloudTaskListenerManager.invokeSweeperFutianCloudBigTaskStatus(messageType, reqNo, sysTime, bigTaskStatusPush) + } + /** * Bag管理应答 * 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 4c7ec99bab..03509c9813 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 @@ -2,9 +2,15 @@ package com.mogo.eagle.core.function.api.autopilot import chassis.SpecialVehicleTaskCmdOuterClass import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters -import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult +import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider +import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootable +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.GetTaskReq +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.StartTaskResp +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume.SuspendResumeTaskReq +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirmResp +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp /** * @author xiaoyuzhou @@ -291,6 +297,69 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { */ fun sendSweeperFuTianTaskCmd(fuTianTaskCmd: SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd) + + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + fun sendSweeperStartTaskResp(reqNo: String, startTaskResp: StartTaskResp): Boolean + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + fun sendSweeperTaskConfirmResp(reqNo: String, taskConfirmResp: TaskConfirmResp): Boolean + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + fun sendSweeperStopTaskResp(reqNo: String, stopTaskResp: StopTaskResp): Boolean + + /** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + fun sendSweeperSuspendResumeTaskReq(isSuspend: Boolean, reqNo: String, suspendResumeTaskReq: SuspendResumeTaskReq): Boolean + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + fun sendSweeperGetTaskReq(reqNo: String, getTaskReq: GetTaskReq): Boolean + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + fun sendSweeperAutopilotBootable(reqNo: String, isBootable: IsBootable): Boolean + /** * 打开点云绘制 * 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 new file mode 100644 index 0000000000..c5aad62c89 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoSweeperFutianCloudTaskListener.kt @@ -0,0 +1,89 @@ +package com.mogo.eagle.core.function.api.autopilot + +import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask +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.SweeperTaskSuspendResume.SuspendResumeTaskResp +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus.BigTaskStatusPush +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus.TaskStatusPush +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskReq + +/** + * 清扫车(福田)云端任务接口 + */ +interface IMoGoSweeperFutianCloudTaskListener { + + /** + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskInfo 数据 + */ + fun onSweeperFutianCloudTask(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskInfo: SweeperTask.TaskInfo) + + /** + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskConfirm 数据 + */ + fun onSweeperFutianCloudTaskConfirm(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskConfirm: TaskConfirm) + + /** + * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskStatusPush 数据 + */ + fun onSweeperFutianCloudTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskStatusPush: TaskStatusPush) + + /** + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param stopTaskReq 数据 + */ + fun onSweeperFutianCloudTaskStop(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, stopTaskReq: StopTaskReq) + + /** + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param suspendResumeTaskResp 数据 + */ + fun onSweeperFutianCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, suspendResumeTaskResp: SuspendResumeTaskResp) + + /** + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param isBootableResp 数据 + */ + fun onSweeperFutianCloudBootable(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, isBootableResp: IsBootableResp) + + /** + * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param bigTaskStatusPush 数据 + */ + fun onSweeperFutianCloudBigTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, bigTaskStatusPush: BigTaskStatusPush) + +} \ No newline at end of file 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 a9fd29e07f..02d52f2a61 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 @@ -3,22 +3,29 @@ package com.mogo.eagle.core.function.call.autopilot import android.os.SystemClock import chassis.SpecialVehicleTaskCmdOuterClass import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters -import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity +import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_EAGLE_START_AUTOPILOT import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT -import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotControlProvider import com.mogo.eagle.core.function.call.base.CallerBase import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootable +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.GetTaskReq +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.StartTaskResp +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume.SuspendResumeTaskReq +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirmResp +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants import com.zhjt.service_biz.BizConfig import kotlin.random.Random + /** *@author xiaoyuzhou *@date 2021/10/14 2:15 下午 @@ -422,6 +429,81 @@ object CallerAutoPilotControlManager { providerApi?.sendSweeperFuTianTaskCmd(fuTianTaskCmd) } + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + fun sendSweeperStartTaskResp( reqNo: String, startTaskResp: StartTaskResp): Boolean { + return providerApi?.sendSweeperStartTaskResp(reqNo, startTaskResp) ?: false + } + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + fun sendSweeperTaskConfirmResp( reqNo: String, taskConfirmResp: TaskConfirmResp): Boolean { + return providerApi?.sendSweeperTaskConfirmResp(reqNo, taskConfirmResp) ?: false + } + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + fun sendSweeperStopTaskResp( reqNo: String, stopTaskResp: StopTaskResp): Boolean { + return providerApi?.sendSweeperStopTaskResp(reqNo, stopTaskResp) ?: false + } + + /** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + fun sendSweeperSuspendResumeTaskReq(isSuspend: Boolean, reqNo: String, suspendResumeTaskReq: SuspendResumeTaskReq): Boolean { + return providerApi?.sendSweeperSuspendResumeTaskReq(isSuspend, reqNo, suspendResumeTaskReq) ?: false + } + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + fun sendSweeperGetTaskReq( reqNo: String, getTaskReq: GetTaskReq): Boolean { + return providerApi?.sendSweeperGetTaskReq(reqNo, getTaskReq) ?: false + } + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + fun sendSweeperAutopilotBootable( reqNo: String, isBootable: IsBootable): Boolean { + return providerApi?.sendSweeperAutopilotBootable(reqNo, isBootable) ?: false + } + + /** * 打开点云绘制 */ 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 new file mode 100644 index 0000000000..ae53ce6b5e --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerSweeperFutianCloudTaskListenerManager.kt @@ -0,0 +1,125 @@ +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.sweeper.bootable.SweeperBootable +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop + +/** + * 清扫车(福田)云端任务接口 + */ +object CallerSweeperFutianCloudTaskListenerManager : CallerBase() { + + /** + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskInfo 数据 + */ + fun invokeSweeperFutianCloudTask(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskInfo: SweeperTask.TaskInfo) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudTask(messageType, reqNo, sysTime, taskInfo) + } + } + + /** + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskConfirm 数据 + */ + fun invokeSweeperFutianCloudTaskConfirm(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskConfirm: SweeperTaskConfirm.TaskConfirm) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudTaskConfirm(messageType, reqNo, sysTime, taskConfirm) + } + } + + /** + * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskStatusPush 数据 + */ + fun invokeSweeperFutianCloudTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskStatusPush: SweeperTaskStatus.TaskStatusPush) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudTaskStatus(messageType, reqNo, sysTime, taskStatusPush) + } + } + + /** + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param stopTaskReq 数据 + */ + fun invokeSweeperFutianCloudTaskStop(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, stopTaskReq: SweeperTaskStop.StopTaskReq) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudTaskStop(messageType, reqNo, sysTime, stopTaskReq) + } + } + + /** + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param suspendResumeTaskResp 数据 + */ + fun invokeSweeperFutianCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, suspendResumeTaskResp: SweeperTaskSuspendResume.SuspendResumeTaskResp) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudTaskSuspendResume(messageType, reqNo, sysTime, suspendResumeTaskResp) + } + } + + /** + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param isBootableResp 数据 + */ + fun invokeSweeperFutianCloudBootable(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, isBootableResp: SweeperBootable.IsBootableResp) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudBootable(messageType, reqNo, sysTime, isBootableResp) + } + } + + /** + * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param bigTaskStatusPush 数据 + */ + fun invokeSweeperFutianCloudBigTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, bigTaskStatusPush: SweeperBigTaskStatus.BigTaskStatusPush) { + M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperFutianCloudBigTaskStatus(messageType, reqNo, sysTime, bigTaskStatusPush) + } + } +} \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/FSMStatusReasonQuery.proto b/libraries/mogo-adas-data/src/main/proto/FSMStatusReasonQuery.proto new file mode 100644 index 0000000000..487fde2d5c --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/FSMStatusReasonQuery.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package function_state_management; + +message FSMStatusReasonQuery { + uint32 type = 1; // 0:default, 1:请求反馈原因 +} + +message FSMStatusReasonRespond { + repeated string fsm_status_reason_respond = 1; +} \ No newline at end of file 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 e32a91efa3..675d7b66ce 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -62,6 +62,13 @@ enum MessageType MsgTypeBagManagerCmd = 0x1011b; //bag管理 MsgTypePlanningCmd = 0x1011c; //给planning的指令 MsgTypeSetParamReqV2 = 0x1011d; //设置参数命令V2 + MsgTypeV2nCongestionEvent = 0x1011e; //主车附近拥堵事件推送, 透传 + MsgTypeV2nGlobalPathEvents = 0x1011f; //主车路径全局事件推送, 透传 + MsgTypeGetParamReq = 0x10120; //参数获取请求 + MsgTypeGetParamResp = 0x10121; //参数获取应答 + MsgTypeTaskCmd = 0x10122; //云控任务指令, 云控<->鹰眼双向透传 + MsgTypeFSMStatusReasonQueryReq = 0x10123; //fsm状态原因查询 + MsgTypeFSMStatusReasonQueryResp = 0x10124; //fsm状态原因查询应答 } message Header @@ -141,10 +148,21 @@ message TrackedObject string strUuid = 101;//String类型车辆ID } + +message LocalizationInfo{ + double stamp = 1; //seconds + float longitude = 2; + float latitude = 3; + float alt = 4; + float heading = 5; +} + message BlindAreaData { - float angleResolution = 1; - repeated int32 distances = 2; + float angleResolution = 1; //degrees + repeated int32 distances = 2; //unit: cm + LocalizationInfo localizationInfo = 3; + float maxRange = 4; //unit: m } message TrackedObjects @@ -231,6 +249,7 @@ message Line message TrajectoryDownloadReq { Line line = 1; //路线 + uint32 source = 2; //指令来源: 0: default, 1:pad, 2:aicloud } // message definition for MessageType: MsgTypeBasicInfoReq @@ -238,7 +257,7 @@ message BasicInfoReq { } -// message definition for MessageType: MsgTypeBasicInfoRsp +// message definition for MessageType: MsgTypeBasicInfoResp message BasicInfoResp { string sn = 1; @@ -273,7 +292,7 @@ message RouteInfo message SetAutopilotModeReq { uint32 mode = 1; //1: enter autopilot mode, 0: quit autopilot mode - uint32 source = 2; //命令来源: 0: pad模拟, 1: aicloud业务 + uint32 source = 2; //命令来源: 0: pad模拟, 1: pad业务, 2:aicloud RouteInfo routeInfo = 3; //自动驾驶路径信息 } @@ -299,6 +318,8 @@ message CarConfigResp double maxSpeedLimit = 6; //最大自动驾驶限速, 单位:m/s double minAcceleration = 7; //最小加速度, 单位:m/s² double maxAcceleration = 8; //最大加速度, 单位:m/s² + string carType = 9; //车辆类型 + string subCarType = 10; //车辆子类型 } // message definition for MsgTypeRecordCause @@ -562,7 +583,13 @@ message PlanningActionMsg //message definition for MsgTypeSetParamReq message SetOneParam { - uint32 type = 1; // 0:default 1:绕障类功能开关(bool) 2:变道绕障的目标障碍物速度阈值(double, m/s) + uint32 type = 1; // 0:default 1:绕障类功能开关(bool) 2:变道绕障的目标障碍物速度阈值(double, m/s) + // 3:AEB开关(bool) 0:关闭自动紧急制动功能 1:启用自动紧急制动功能 + // 4:限制绕障开关(bool) 0:正常绕障 1:限制绕障 默认0 + // 5:停车让行线前避让等待开关(bool) 0:停车让行线前无需等待 1:停车让行线前需要等待 默认0 + // 6:地图限速功能开关(bool) 0:不使用地图限速功能 1:使用地图限速功能 默认0 + // 7:环岛模式开关(bool) 0:普通模式 1:环岛模式 默认0 + // 8:弱网减速停车策略开关(bool) 0:关闭弱网减速停车策略 1:使用弱网减速停车策略 string value = 2; // 转成字符串的值 } @@ -599,16 +626,43 @@ message TripInfoEvent //message definition for MsgTypePlanningCmd message PullOverCmd { - uint32 cmd = 1; //0: default 1: 靠边停车 2:重新起步 + uint32 cmd = 1; //0: default 1: 靠边停车 2:重新起步 3:紧急停车 +} + +message LaneChangeCmd +{ + uint32 cmd = 1; //0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 } message PlanningCmd { PullOverCmd pullOverCmd = 1; + LaneChangeCmd laneChangeCmd = 2; } //message definition for MsgTypeSetParamReqV2 //refer to param_set_cmd.proto for details //message definition for MsgTypeBackCameraVideo -//payload:jpeg data +//payload:jpeg data + +//message definition for MsgTypeV2nCongestionEvent +//refer to RSI_PB in mogo_v2x.proto for details + +//message definition for MsgTypeV2nGlobalPathEvents +//refer to road_overview_events.proto for details + +//message definition for MsgTypeGetParamReq +//复用 SetParamReq + +//message definition for MsgTypeGetParamResp +//复用 SetParamReq + +//message definition for MsgTypeTaskCmd +//查看云端和鹰眼的接口 + +//message definition for MsgTypeFSMStatusReasonQueryReq +//refer to FSMStatusReasonQuery.proto for details + +//message definition for MsgTypeFSMStatusReasonQueryResp +//refer to FSMStatusReasonQuery.proto for details \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/mogo_v2x.proto b/libraries/mogo-adas-data/src/main/proto/mogo_v2x.proto index 987485620f..429678a969 100644 --- a/libraries/mogo-adas-data/src/main/proto/mogo_v2x.proto +++ b/libraries/mogo-adas-data/src/main/proto/mogo_v2x.proto @@ -1,88 +1,573 @@ syntax = "proto2"; package mogo.v2x; +import "header.proto"; message VerticalOffset_PB{ - oneof VerticalOffset{ - int32 offset1 = 1; - int32 offset2 = 2; - int32 offset3 = 3; - int32 offset4 = 4; - int32 offset5 = 5; - int32 offset6 = 6; - int32 elevation = 7; - } + //-- Vertical Offset + //-- All below in steps of 10cm above or below the reference ellipsoid + //offset1 VertOffset-B07, -- with a range of +- 6.3 meters vertical + //offset2 VertOffset-B08, -- with a range of +- 12.7 meters vertical + //offset3 VertOffset-B09, -- with a range of +- 25.5 meters vertical + //offset4 VertOffset-B10, -- with a range of +- 51.1 meters vertical + //offset5 VertOffset-B11, -- with a range of +- 102.3 meters vertical + //offset6 VertOffset-B12, -- with a range of +- 204.7 meters vertical + //elevation Elevation -- with a range of -409.5 to + 6143.9 meters + oneof VerticalOffset{ + int32 offset1 = 1; + int32 offset2 = 2; + int32 offset3 = 3; + int32 offset4 = 4; + int32 offset5 = 5; + int32 offset6 = 6; + int32 elevation = 7; + } } message VehicleSize_PB { - required int32 width = 1; - required int32 length = 2; - optional int32 height = 3; + required int32 width = 1; + required int32 length = 2; + optional int32 height = 3; } message AccelerationSet4Way_PB { - required int32 lon = 1; - required int32 lat = 2; - required int32 vert = 3; - required int32 yaw = 4; + required int32 lon = 1; + required int32 lat = 2; + required int32 vert = 3; + required int32 yaw = 4; } ////////////////////////////////////////////////////////////////// //经纬度偏差,来描述一个坐标点的相对位置。约定偏差值等于真实值减去参考值。 //提供了 7 种尺度的描述方式 message PositionOffsetLL_PB{ - oneof PositionOffsetLL{ - Position_LL_24B position_LL1 = 1; - Position_LL_28B position_LL2 = 2; - Position_LL_32B position_LL3 = 3; - Position_LL_36B position_LL4 = 4; - Position_LL_44B position_LL5 = 5; - Position_LL_48B position_LL6 = 6; - Position_LLmD_64b position_LatLon = 7; - } + //position-LL1 Position-LL-24B, + //-- within +- 22.634554 meters of the reference position + //position-LL2 Position-LL-28B, + //-- within +- 90.571389 meters of the reference position + //position-LL3 Position-LL-32B, + //-- within +- 362.31873 meters of the reference position + //position-LL4 Position-LL-36B, + //-- within +- 01.449308 Kmeters of the reference position + //position-LL5 Position-LL-44B, + //-- within +- 23.189096 Kmeters of the reference position + //position-LL6 Position-LL-48B, + //-- within +- 92.756481 Kmeters of the reference position + //position-LatLon Position-LLmD-64b + oneof PositionOffsetLL{ + Position_LL_24B position_LL1 = 1; + Position_LL_28B position_LL2 = 2; + Position_LL_32B position_LL3 = 3; + Position_LL_36B position_LL4 = 4; + Position_LL_44B position_LL5 = 5; + Position_LL_48B position_LL6 = 6; + Position_LLmD_64b position_LatLon = 7; + } } + message Position_LL_24B{ - // (-2048..2047) - required int64 lon = 1; - required int64 lat = 2; + // (-2048..2047) + required int64 lon = 1; + required int64 lat = 2; } message Position_LL_28B{ - // (-8192..8191) - required int64 lon = 1; - required int64 lat = 2; + // (-8192..8191) + required int64 lon = 1; + required int64 lat = 2; } message Position_LL_32B{ - // (-32768..32767) - required int64 lon = 1; - required int64 lat = 2; + // (-32768..32767) + required int64 lon = 1; + required int64 lat = 2; } message Position_LL_36B{ - // (-131072..131071) - required int64 lon = 1; - required int64 lat = 2; + // (-131072..131071) + required int64 lon = 1; + required int64 lat = 2; } message Position_LL_44B{ - // (-2097152..2097151) - required int64 lon = 1; - required int64 lat = 2; + // (-2097152..2097151) + required int64 lon = 1; + required int64 lat = 2; } message Position_LL_48B{ - // (-8388608..8388607) - required int64 lon = 1; - required int64 lat = 2; + // (-8388608..8388607) + required int64 lon = 1; + required int64 lat = 2; } message Position_LLmD_64b{ - // 定义经度数值。东经为正,西经为负。 - //分辨率为1e-7°。 - required int64 lon = 1; - required int64 lat = 2; + // 定义经度数值。东经为正,西经为负。 + //分辨率为1e-7°。 + required int64 lon = 1; + required int64 lat = 2; } ////////////////////////////////////////////////////////////////// message PositionOffsetLLV_PB{ - required PositionOffsetLL_PB offsetLL = 1; + required PositionOffsetLL_PB offsetLL = 1; + optional VerticalOffset_PB offsetV = 2; +} - optional VerticalOffset_PB offsetV = 2; +/************************************************/ +message RoadSideInformation_PB { + //发送方为自己发送的同类消息,依次进行编号。编号数值为0~127,循环使用。 + //该数据字段用于接收方对来自同一发送方的同一类消息,进行连续收包的监控和丢包的统计。 + required int64 msgCnt = 1; + //数值用来表示当前年份,已经过去的总分钟数(UTC时间)。 + //其分辨率为1分钟。该数值配合DSecond数值,则可以表示以毫秒记的全年已过去的总时间。 + optional int64 moy = 2; + //RSU_ID + required String_PB id = 3; + //RSU 对应坐标 + required Position3D_PB refPos = 4; + //交通事件内容 + optional RTEList_PB rtes = 5; + //交通标志内容 + optional RTSList_PB rtss = 6; +} + +message String_PB { + required uint32 string_type = 1; + required string str_value = 2; +} + +message Position3D_PB { + required int64 lat = 1; + required int64 Long = 2; + optional int64 elevation = 3; +} + +message RTEList_PB { + //定义道路交通事件集合。 + //至少包含1个道路交通事件信息,最多包含8个。 + repeated RTEData_PB rteData = 1; +} + +message RTEData_PB { + //(0..255) + required int64 rteId = 1; + // required EventType_PB eventType=2; + required int32 eventType = 2; + required EventSource_PB eventSource = 3; + optional PositionOffsetLLV_PB eventPos = 4; + // 分辨率为10 cm。 + // (0..65535) + optional int64 eventRadius = 5; + //提供ASCII字符文本形式,支持长度1字节到512字节。该类型不提供 + //提供中文编码形式,符合GB2312-80的编码规则,1个中文字符由2字节信息编码,支持长度1到256 + //个中文字符 + //Description + optional String_PB description = 6; + + optional RSITimeDetails_PB timeDetails = 7; + // 表示RSI消息中不同类型交通事件或交通标志的优先级。数值长度占8位,其中低五位为0,为无效 + //位,高三位为有效数据位。数值有效范围是B00000000到B11100000,分别表示8档由低到高的优先级。 + //对应 RSIPriority + optional String_PB priority = 8; + optional ReferencePathList_PB referencePaths = 9; + optional ReferenceLinkList_PB referenceLinks = 10; + //定义置信度。 + //分辨率为0.005。 + // 0-200 + optional int32 eventConfidence = 11; +} + +message EventSource_PB { + //unknown(0), -- 0 Unknown + //police(1), -- 1 traffic police + //government(2), -- 2 govenment + //meteorological(3), -- 3 meteorological department + //internet(4), -- 4 internet services + //detection(5), -- 5 local detection + enum EventSource{ + EventSource_unknown = 0; + EventSource_police = 1; + EventSource_government = 2; + EventSource_meteorological = 3; + EventSource_internet = 4; + EventSource_detection = 5; + }; + required EventSource event_source = 1; +} + +message RSITimeDetails_PB{ + //数值用来表示当前年份,已经过去的总分钟数(UTC时间)。 + //其分辨率为1分钟。该数值配合DSecond数值,则可以表示以毫秒记的全年已过去的总时间。 + //(0..527040) + optional int64 startTime = 1; + optional int64 endTime = 2; + optional TimeConfidence_PB endTimeConfidence = 3; +} + +message TimeConfidence_PB { + //unavailable (0), -- Not Equipped or unavailable + //time-100-000 (1), -- Better than 100 Seconds + //time-050-000 (2), -- Better than 50 Seconds + //time-020-000 (3), -- Better than 20 Seconds + //time-010-000 (4), -- Better than 10 Seconds + //time-002-000 (5), -- Better than 2 Seconds + //time-001-000 (6), -- Better than 1 Second + //time-000-500 (7), -- Better than 0.5 Seconds + //time-000-200 (8), -- Better than 0.2 Seconds + //time-000-100 (9), -- Better than 0.1 Seconds + //time-000-050 (10), -- Better than 0.05 Seconds + //time-000-020 (11), -- Better than 0.02 Seconds + //time-000-010 (12), -- Better than 0.01 Seconds + //time-000-005 (13), -- Better than 0.005 Seconds + //time-000-002 (14), -- Better than 0.002 Seconds + //time-000-001 (15), -- Better than 0.001 Seconds + //-- Better than one millisecond + //time-000-000-5 (16), -- Better than 0.000,5 Seconds + //time-000-000-2 (17), -- Better than 0.000,2 Seconds + //time-000-000-1 (18), -- Better than 0.000,1 Seconds + //time-000-000-05 (19), -- Better than 0.000,05 Seconds + //time-000-000-02 (20), -- Better than 0.000,02 Seconds + //time-000-000-01 (21), -- Better than 0.000,01 Seconds + //time-000-000-005 (22), -- Better than 0.000,005 Seconds + //time-000-000-002 (23), -- Better than 0.000,002 Seconds + //time-000-000-001 (24), -- Better than 0.000,001 Seconds + //-- Better than one micro second + //time-000-000-000-5 (25), -- Better than 0.000,000,5 Seconds + //time-000-000-000-2 (26), -- Better than 0.000,000,2 Seconds + //time-000-000-000-1 (27), -- Better than 0.000,000,1 Seconds + //time-000-000-000-05 (28), -- Better than 0.000,000,05 Seconds + //time-000-000-000-02 (29), -- Better than 0.000,000,02 Seconds + //time-000-000-000-01 (30), -- Better than 0.000,000,01 Seconds + //time-000-000-000-005 (31), -- Better than 0.000,000,005 Seconds + //time-000-000-000-002 (32), -- Better than 0.000,000,002 Seconds + //time-000-000-000-001 (33), -- Better than 0.000,000,001 Seconds + //-- Better than one nano second + //time-000-000-000-000-5 (34), -- Better than 0.000,000,000,5 Seconds + //time-000-000-000-000-2 (35), -- Better than 0.000,000,000,2 Seconds + //time-000-000-000-000-1 (36), -- Better than 0.000,000,000,1 Seconds + //time-000-000-000-000-05 (37), -- Better than 0.000,000,000,05 Seconds + //time-000-000-000-000-02 (38), -- Better than 0.000,000,000,02 Seconds + //time-000-000-000-000-01 (39) -- Better than 0.000,000,000,01 Seconds + enum TimeConfidence { + TimeConfidence_unavailable = 0; + TimeConfidence_time_100_000 = 1; + TimeConfidence_time_050_000 = 2; + TimeConfidence_time_020_000 = 3; + TimeConfidence_time_010_000 = 4; + TimeConfidence_time_002_000 = 5; + TimeConfidence_time_001_000 = 6; + TimeConfidence_time_000_500 = 7; + TimeConfidence_time_000_200 = 8; + TimeConfidence_time_000_100 = 9; + TimeConfidence_time_000_050 = 10; + TimeConfidence_time_000_020 = 11; + TimeConfidence_time_000_010 = 12; + TimeConfidence_time_000_005 = 13; + TimeConfidence_time_000_002 = 14; + TimeConfidence_time_000_001 = 15; + TimeConfidence_time_000_000_5 = 16; + TimeConfidence_time_000_000_2 = 17; + TimeConfidence_time_000_000_1 = 18; + TimeConfidence_time_000_000_05 = 19; + TimeConfidence_time_000_000_02 = 20; + TimeConfidence_time_000_000_01 = 21; + TimeConfidence_time_000_000_005 = 22; + TimeConfidence_time_000_000_002 = 23; + TimeConfidence_time_000_000_001 = 24; + TimeConfidence_time_000_000_000_5 = 25; + TimeConfidence_time_000_000_000_2 = 26; + TimeConfidence_time_000_000_000_1 = 27; + TimeConfidence_time_000_000_000_05 = 28; + TimeConfidence_time_000_000_000_02 = 29; + TimeConfidence_time_000_000_000_01 = 30; + TimeConfidence_time_000_000_000_005 = 31; + TimeConfidence_time_000_000_000_002 = 32; + TimeConfidence_time_000_000_000_001 = 33; + TimeConfidence_time_000_000_000_000_5 = 34; + TimeConfidence_time_000_000_000_000_2 = 35; + TimeConfidence_time_000_000_000_000_1 = 36; + TimeConfidence_time_000_000_000_000_05 = 37; + TimeConfidence_time_000_000_000_000_02 = 38; + TimeConfidence_time_000_000_000_000_01 = 39; + }; + optional TimeConfidence time_confidence = 1; + +} + +message ReferencePathList_PB { + //SIZE(1..8) + repeated ReferencePath_PB referencePath = 1; +} + +message ReferenceLinkList_PB { + //(1-16) + repeated ReferenceLink_PB ReferenceLink = 1; +} + +message RTSList_PB { + //定义道路交通标志集合。 + //至少包含1个道路交通标志信息,最多包含16个 + repeated RTSData_PB rtsData = 1; +} + +message RTSData_PB { + //(0..255) + required int64 rtsId = 1; + // required SignType_PB signType=2; + required int32 signType = 2; + optional PositionOffsetLLV_PB signPos = 3; + optional String_PB description = 4; + optional RSITimeDetails_PB timeDetails = 5; + optional String_PB priority = 6; + optional ReferencePathList_PB referencePaths = 7; + optional ReferenceLinkList_PB referenceLinks = 8; +} + +message ReferencePath_PB { + required PathPointList_PB activePath = 1; + //表示绝对值半径大小。 + //分辨率为10 cm。 + //(0..65535) + required int64 pathRadius = 2; +} + +message PathPointList_PB { + //(1..32)) + repeated PositionOffsetLLV_PB offsetLLV = 1; +} + +message ReferenceLink_PB { + required NodeReferenceID_PB upstreamNodeId = 1; + required NodeReferenceID_PB downstreamNodeId = 2; + optional ReferenceLanes_PB referenceLanes = 3; +} + +message NodeReferenceID_PB { + //0-65535 + optional int64 region = 1; + //0-65535 + required int64 id = 2; +} + +message ReferenceLanes_PB { + enum ReferenceLanesType{ + ReferenceLanesType_reserved = 0; + ReferenceLanesType_lane1 = 1; + ReferenceLanesType_lane2 = 2; + ReferenceLanesType_lane3 = 3; + ReferenceLanesType_lane4 = 4; + ReferenceLanesType_lane5 = 5; + ReferenceLanesType_lane6 = 6; + ReferenceLanesType_lane7 = 7; + ReferenceLanesType_lane8 = 8; + ReferenceLanesType_lane9 = 9; + ReferenceLanesType_lane10 = 10; + ReferenceLanesType_lane11 = 11; + ReferenceLanesType_lane12 = 12; + ReferenceLanesType_lane13 = 13; + ReferenceLanesType_lane14 = 14; + ReferenceLanesType_lane15 = 15; + }; + required ReferenceLanesType lane = 1; +} + +message RSI_PB { + required RoadSideInformation_PB rsiFrame = 1; + optional common.Header header = 2; } + + + +message VehicleClassification_PB { + required int32 classification = 1; + optional int32 fuelType = 2; +} + +message MotionConfidenceSet_PB { + enum SpeedConfidence_PB { + SpeedConfidence_unavailable = 0; + SpeedConfidence_prec100ms = 1; + SpeedConfidence_prec10ms = 2; + SpeedConfidence_prec5ms = 3; + SpeedConfidence_prec1ms = 4; + SpeedConfidence_prec0_1ms = 5; + SpeedConfidence_prec0_05ms = 6; + SpeedConfidence_prec0_01ms = 7; + } + optional SpeedConfidence_PB speedCfd = 1; + enum HeadingConfidence_PB { + HeadingConfidence_unavailable = 0; + HeadingConfidence_prec10deg = 1; + HeadingConfidence_prec05deg = 2; + HeadingConfidence_prec01deg = 3; + HeadingConfidence_prec0_d1deg = 4; + HeadingConfidence_prec0_d05deg = 5; + HeadingConfidence_prec0_d01deg = 6; + HeadingConfidence_prec0_d0125deg = 7; + } + optional HeadingConfidence_PB headingCfd = 2; + enum SteeringWheelAngleConfidence_PB { + SteeringWheelAngleConfidence_unavailable = 0; + SteeringWheelAngleConfidence_prec2deg = 1; + SteeringWheelAngleConfidence_prec1deg = 2; + SteeringWheelAngleConfidence_prec0_02deg = 3; + } + optional SteeringWheelAngleConfidence_PB steerCfd = 3; +} + + +message TransmissionState_PB{ + // neutral (0), -- Neutral + //park (1), -- Park + //forwardGears (2), -- Forward gears + //reverseGears (3), -- Reverse gears + //reserved1 (4), + //reserved2 (5), + //reserved3 (6), + //unavailable (7)-- not-equipped or unavailable value, + //-- Any related speed is relative to the vehicle reference frame used + enum TransmissionState{ + TransmissionState_neutral = 1; + TransmissionState_park = 2; + TransmissionState_forwardGears = 3; + TransmissionState_reverseGears = 4; + TransmissionState_reserved1 = 5; + TransmissionState_reserved2 = 6; + TransmissionState_reserved3 = 7; + TransmissionState_unavailable = 8; + }; + required TransmissionState transmission_state = 1; +} + +message PositionConfidenceSet_PB { + enum PositionConfidence_PB { + PositionConfidence_unavailable = 0; + PositionConfidence_a500m = 1; + PositionConfidence_a200m = 2; + PositionConfidence_a100m = 3; + PositionConfidence_a50m = 4; + PositionConfidence_a20m = 5; + PositionConfidence_a10m = 6; + PositionConfidence_a5m = 7; + PositionConfidence_a2m = 8; + PositionConfidence_a1m = 9; + PositionConfidence_a50cm = 10; + PositionConfidence_a20cm = 11; + PositionConfidence_a10cm = 12; + PositionConfidence_a5cm = 13; + PositionConfidence_a2cm = 14; + PositionConfidence_a1cm = 15; + } + required PositionConfidence_PB poscon = 1; + + enum ElevationConfidence_PB { + ElevationConfidence_unavailable = 0; + ElevationConfidence_elev_500_00 = 1; + ElevationConfidence_elev_200_00 = 2; + ElevationConfidence_elev_100_00 = 3; + ElevationConfidence_elev_050_00 = 4; + ElevationConfidence_elev_020_00 = 5; + ElevationConfidence_elev_010_00 = 6; + ElevationConfidence_elev_005_00 = 7; + ElevationConfidence_elev_002_00 = 8; + ElevationConfidence_elev_001_00 = 9; + ElevationConfidence_elev_000_50 = 10; + ElevationConfidence_elev_000_20 = 11; + ElevationConfidence_elev_000_10 = 12; + ElevationConfidence_elev_000_05 = 13; + ElevationConfidence_elev_000_02 = 14; + ElevationConfidence_elev_000_01 = 15; + } + optional ElevationConfidence_PB elevationCon = 2; +} + +message SourceType_PB{ + //定义交通参与者数据的来源。包括以下类型: + //——unknown:未知数据源类型; + //——selfinfo:RSU 自身信息; + //——v2x:来源于参与者自身的 v2x 广播消息; + //——video:来源于视频传感器; + //——microwaveRadar:来源于微波雷达传感器; + //——loop:来源于地磁线圈传感器; + //——lidar:来源于激光雷达传感器; + //——integrated:2 类或以上感知数据的融合结果。 + enum SourceType{ + SourceType_unknown = 1; + SourceType_selfinfo = 2; + SourceType_v2x = 3; + SourceType_video = 4; + SourceType_microwaveRadar = 5; + SourceType_loop = 6; + SourceType_lidar = 7; + SourceType_integrated = 8; + }; + required SourceType source_type = 1; +} + + +message ParticipantData_PB{ + //ptcType ParticipantType, + //ptcId INTEGER (0..65535), + //-- temporary ID set by RSU + //-- 0 is RSU itself + //-- 1..255 represent participants detected by RSU + //-- ptcId of different participant needs to be unique in RSU + //source SourceType, + //id OCTET STRING (SIZE(8)) OPTIONAL, + //-- temperary vehicle ID from BSM + //secMark DSecond, + //pos PositionOffsetLLV, + //posConfidence PositionConfidenceSet, + //transmission TransmissionState OPTIONAL, + //speed Speed, + //heading Heading, + //angle SteeringWheelAngle OPTIONAL, + //motionCfd MotionConfidenceSet OPTIONAL, + //accelSet AccelerationSet4Way OPTIONAL, + //size VehicleSize, + //-- Size of participant including motor/non-motor/pedestrian/rsu + //-- is represented by DE_VehilceSize + //vehicleClass VehicleClassification OPTIONAL, + + // required ParticipantType_PB ptcType = 1; + required int64 ptcType = 1; + required int32 ptcId = 2;//不同参与者的ptcId在RSU中需要是唯一的, + required SourceType_PB source = 3; + optional String_PB id = 4; // 车的临时id,跟BSM消息一致 + /* DSecond */ //1分钟内的毫秒级时刻分辨率为1毫秒,有效范围时0~59999.60000及以上表示未知或无效数值 + required int64 secMark = 5; + required PositionOffsetLLV_PB pos = 6; // 中心位置 + required PositionConfidenceSet_PB posConfidence = 7; + optional TransmissionState_PB transmission = 8; // 车辆挡位 + //速度 0.02m/s + required int32 speed = 9; + //航向角 + required int32 heading = 10; + //SteeringWheelAngle_t 方向盘转角(-126..127) + optional int32 angle = 11; + optional MotionConfidenceSet_PB motionCfd = 12; + optional AccelerationSet4Way_PB accelSet = 13; + required VehicleSize_PB size = 14; + optional VehicleClassification_PB vehicleClass = 15; +} + +message ParticipantList_PB{ + // 定义交通参与者列表。应用于RSM消息中,表示RSU当前探测到的所有或者部分交通参与者信息 + // size 为1-16个 + repeated ParticipantData_PB participantData = 1; +} + +message RoadsideSafetyMessage_PB { + /* MsgCount */ + //发送方为自己发送的同类消息,依次进行编号。编号数值为 0 ~ 127。 + //当发送方开始发起某一类数据时,它可以随机选择起始编号,随后依次递增。发送方也可以在 + //连续发送相同的数据帧时,选择使用相同的 MsgCount 消息编号。编号到达 127 后,则下一个回到 0。 + required int64 msgCnt = 1; + required String_PB id = 2; //RSU_ID + required Position3D_PB refPos = 3; // 三维坐标 + required ParticipantList_PB participants = 4; //交通参与者信息 +} + + +message RSM_PB { + required RoadsideSafetyMessage_PB rsmFrame = 1; + optional common.Header header = 2; +} + diff --git a/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto b/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto index 1524e30c31..155cf621d4 100644 --- a/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto +++ b/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto @@ -4,7 +4,8 @@ package mogo.telematics; enum ParamSetType { ParamSetTypeNone = 0; - ParamSetTypeBlindArea = 1; + ParamSetTypeBlindArea = 1; //bool, 0:off 1:on + ParamSetTypeV2N = 2; //bool, 0:不发给PnC 1:发给Pnc } message ParamSetCmd diff --git a/libraries/mogo-adas-data/src/main/proto/road_overview_events.proto b/libraries/mogo-adas-data/src/main/proto/road_overview_events.proto new file mode 100644 index 0000000000..e8e18ef999 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/road_overview_events.proto @@ -0,0 +1,14 @@ +syntax = "proto2"; +package mogo.v2x; + +//下发的时机与频率: +//自车在自动驾驶状态时,云端推送自动驾驶路线上的全局事件, 频率 1HZ; 手动驾驶不推送; +message RoadOverviewData { + required uint64 msgId = 1; // 消息ID + required uint64 timestamp = 2; //unix时间戳 + optional bytes constructData = 3; //施工 RSI_PB + optional bytes triangleData = 4; //三角牌 RSI_PB + optional bytes congestionData = 5; //拥堵 RSI_PB + optional bytes parkingViolationData = 6; //违停 ---包含 静态障碍车 RSM_PB + optional uint32 eventCount = 7; //全部事件数据 +} diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/README.md b/libraries/mogo-adas-data/src/main/proto/sweeper/README.md new file mode 100644 index 0000000000..a022d1bbed --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/README.md @@ -0,0 +1,184 @@ +# 大型清扫车云端调度链路pad-云 PB定义 +## 此目录内PB文件仅用于云端下发清扫车任务 +|清扫车功能|PB| +|:-|:-| +|清扫车云端任务调度|sweeper/sweeper_cloud_task.proto| +|1、云端下发大任务信息(type: 100001)|sweeper/sweeper_task.proto| +|2、云端下发子任务,请求pad确认(type:100002)|sweeper/sweeper_task_confirm.proto| +|3、云端下发任务状态到pad(type:100003)|sweeper/sweeper_task_status.proto| +|4、云端请求pad结束任务(type:100004)|sweeper/sweeper_task_stop.proto| +|5、pad请求挂起任务(type:100005)|sweeper/sweeper_task_suspend_resume.proto| +|6、pad请求恢复挂起的任务(type:100006)|sweeper/sweeper_task_suspend_resume.proto| +|7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)|sweeper/sweeper_task.proto| +|8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)|sweeper/sweeper_bootable.proto| +|9、云端下发pad大任务状态(type: 100009)|sweeper/sweeper_big_task_status.proto| + +# 接口使用说明 +## 回调接口类:IMoGoSweeperFutianCloudTaskListener +## 下发接口类:CallerAutoPilotControlManager + +~~~ +服务端发: +/** + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskInfo 数据 + */ +fun onSweeperFutianCloudTask(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskInfo: SweeperTask.TaskInfo) + +客户端回复: +/** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + CallerAutoPilotControlManager.INSTANCE.sendSweeperStartTaskResp(); + +客户端发: +/** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ +CallerAutoPilotControlManager.INSTANCE.sendSweeperGetTaskReq() 回复上面回调 +~~~ + +~~~ +服务端发: +/** + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskConfirm 数据 + */ + fun onSweeperFutianCloudTaskConfirm(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskConfirm: TaskConfirm) +客户端回复: +/** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ +CallerAutoPilotControlManager.INSTANCE.sendSweeperTaskConfirmResp() +~~~ + +~~~ +服务端发: +/** + * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskStatusPush 数据 + */ +fun onSweeperFutianCloudTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, taskStatusPush: TaskStatusPush) + +客户端回复: +无 +~~~ + +~~~ +服务端发: +/** + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param stopTaskReq 数据 + */ +fun onSweeperFutianCloudTaskStop(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, stopTaskReq: StopTaskReq) + +客户端回复: +/** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ +CallerAutoPilotControlManager.INSTANCE.sendSweeperStopTaskResp() +~~~ + +~~~ +客户端发: +/** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ +CallerAutoPilotControlManager.INSTANCE.sendSweeperSuspendResumeTaskReq() + +服务端回复: +/** + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param suspendResumeTaskResp 数据 + */ +fun onSweeperFutianCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, suspendResumeTaskResp: SuspendResumeTaskResp) +~~~ + +~~~ +客户端发: +/** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ +CallerAutoPilotControlManager.INSTANCE.sendSweeperAutopilotBootable() + +服务端回复: +/** + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param isBootableResp 数据 + */ +fun onSweeperFutianCloudBootable(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, isBootableResp: IsBootableResp) +~~~ + +~~~ +服务端发: +/** + * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + * + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param bigTaskStatusPush 数据 + */ +fun onSweeperFutianCloudBigTaskStatus(messageType: SweeperCloudTask.MessageType, reqNo: String, sysTime: Long, bigTaskStatusPush: BigTaskStatusPush) + +客户端回复: +无 +~~~ \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_big_task_status.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_big_task_status.proto new file mode 100644 index 0000000000..a2a536ad62 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_big_task_status.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task.big; + + +/**** 9、云端下发pad大任务状态(type: 100009) ****/ + +//9.1、请求信息 +// 任务状态 +enum BigTaskStatus { + TO_START = 0; //待开始 + RUNNING = 1; // 运行中 + CANCLE = 2; // 取消 + FINISHED = 3; // 结束 + ABNORMAL = 4; // 异常 +} + +message BigTaskStatusPush { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + BigTaskStatus TaskStatus = 3;// 大任务状态 + uint64 systemTime = 4; // 时间戳 +} + +//4.2、响应信息 +//无 diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_bootable.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_bootable.proto new file mode 100644 index 0000000000..d4e7d23d48 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_bootable.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.bootable; + +import "sweeper/sweeper_common.proto"; + +/**** 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008) ****/ + +//8.1、请求信息 +/** +pad 上报是否可以进自驾 +*/ +message IsBootable { + string sn = 1; // sn + string taskId = 2; // 大任务Id + string subTaskId = 3; // 子任务id + uint64 lineId = 4; //路线id +} + + +//8.2、响应信息 + +/** +云端响应 +*/ +message IsBootableResp { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + string subTaskId = 3;// 子任务ID + common.Code code = 4; //响应状态 + string msg = 5; //响应详情 +} + diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_cloud_task.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_cloud_task.proto new file mode 100644 index 0000000000..a0a9bab56b --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_cloud_task.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper; + +//清扫车云端任务调度 + +//消息类型 msgType +enum MessageType +{ + DefaultType = 0; + CloudPushTask = 100001; //1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + CloudPushTaskConfirm = 100002; //2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + CloudPushTaskStatus = 100003; //3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + CloudPushTaskStop = 100004; //4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + PadSendTaskSuspend = 100005; //5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + PadSendTaskResume = 100006; //6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + PadSendGetTaskReq = 100007; //7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + PadSendBootable = 100008; //8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_bootable.proto + CloudPushBigTaskStatus = 100009; //9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto +} + +//云下行消息 +//PAD上行消息 +message SweeperMessage +{ + uint32 msgType = 1; //消息类型,响应请求时,使用对应请求的消息类型 + bytes payload = 2; //消息内容 + string reqNo = 3; //请求编号,响应请求时,使用请求方的请求编号 + uint64 sysTime = 4; //当前时间戳 +} diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_common.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_common.proto new file mode 100644 index 0000000000..ed034f52fe --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_common.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.common; + +// 任务状态 +enum TaskStatus { + TO_START = 0; //待开始 + RUNNING = 1; // 运行中 + SUSPENDED = 2; // 暂停 + FINISHED = 3; // 结束 + ABNORMAL = 4; // *异常 +} + +// 响应状态 +enum Code { + SUCCEED = 0; // 成功 + FAILED = 1; // 失败 +} \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task.proto new file mode 100644 index 0000000000..f5e8e1f5fd --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task.proto @@ -0,0 +1,87 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task; + +import "sweeper/sweeper_common.proto"; + +/**** 1、云端下发大任务信息(type: 100001) ****/ + +//1.1、请求信息 +/** +点位信息 +*/ +message Location +{ + double wgsLongitude = 1; // wgs84经度 + double wgsLatitude = 2; // wgs84维度 + double longitude = 3; // gcj02经度 + double latitude = 4; // gcj02维度 + string siteName = 5; // 站点名称 + string address = 6; // 站点详细地址 +} + +// 任务类型枚举 +enum TaskModel +{ + AUTO = 0; //自动驾驶 + MANUAL = 1; //人工驾驶 +} + +/** +子任务列表 +*/ +message SubTaskInfo +{ + string subTaskId = 1; // 子任务编号 + string subTaskName = 2; // 子任务名称 + TaskModel taskModel = 3; // 任务类型 + Location startLocation = 4; // 起点 + Location endLocation = 5; // 终点 + uint32 lineId = 6; // 路线Id + string lineName = 7; // 路线名称 + common.TaskStatus taskStatus = 8; // 任务状态 +} + +/** +调度任务 + */ +message TaskInfo { + + string sn = 1; // sn + string taskId = 2; // 大任务Id + string taskName = 3; // 大任务名称 + uint64 taskStartTime = 4; //任务开始时间 时间戳 + uint64 taskEndTime = 5; //任务预计结束时间 时间戳 + uint64 currentTime = 6; //当前时间戳 + repeated SubTaskInfo subList = 7; // 子任务列表信息 +} + +//1.2、响应信息 +// 响应状态 +enum StartTaskCode { + MANUAL_CONFIRM = 0; // 安全员确认执行任务-pad + MANUAL_REFUSE = 1; // 安全员拒绝任务-pad + RECEIVED = 2; // 收到任务 + OVER_TIME = 3; // 超时未确认 +} + +/** +开始大任务响应 +*/ +message StartTaskResp { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + StartTaskCode code = 3; //响应状态 +} + + +/**** 7、pad主动拉取当前车辆正在执行任务的完整信息 (type:100007) ****/ + +//7.1、请求信息 +/** +pad主动拉取当前车辆正在执行任务的完整信息请求 +*/ +message GetTaskReq { + string sn = 1;// sn +} + +//7.2、响应信息 (同1.1请求信息) \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_confirm.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_confirm.proto new file mode 100644 index 0000000000..fb01378f12 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_confirm.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task.confirm; + + +/**** 2、云端下发子任务,请求pad确认 (type:100002) ****/ + +//2.1、请求信息 +/** +子任务安全员确认请求 +*/ +message TaskConfirm { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + string subTaskId = 3;// 子任务编号 +} + +//2.2、响应信息 +// 响应状态 +enum TaskConfirmCode { + MANUAL_CONFIRM = 0; // 安全员确认执行任务-pad + MANUAL_REFUSE_ALL = 1; // 安全员拒绝全部任务-pad + MANUAL_REFUSE_SINGLE = 2; // 安全员拒绝单个子任务-pad + OVER_TIME = 3; // 超时未确认 +} + +/** +子任务安全员确认响应 +*/ +message TaskConfirmResp { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + string subTaskId = 3;// 子任务编号 + TaskConfirmCode code = 4; //响应状态 +} \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_status.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_status.proto new file mode 100644 index 0000000000..e103d187a6 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_status.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task.status; + +import "sweeper/sweeper_common.proto"; + +/**** 3、云端下发任务状态到pad (type:100003) ****/ + +//3.1、请求信息 +message TaskStatusPush { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + string subTaskId = 3;// 子任务编号 + common.TaskStatus TaskStatus = 4;// 子任务状态 + uint64 systemTime = 5; // 时间戳 +} + +//3.2、响应信息 +// 无 diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_stop.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_stop.proto new file mode 100644 index 0000000000..286e42790e --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_stop.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task.stop; + + +/**** 4、云端请求pad结束任务 (type:100004) ****/ + +//4.1、请求信息 +// 任务状态 +enum StopTaskType { + TIMEOUT = 0; //超时结束 + ADVANCE = 1; // 提前结束 + NORMAL = 2; // 正常结束 +} + + +/** +云端结束任务请求 + */ +message StopTaskReq { + + string sn = 1;// sn + string taskId = 2;// 大任务ID + StopTaskType type = 3; //任务结束类型 +} + +//4.2、响应信息 +// 响应状态 +enum StopTaskCode { + MANUAL_CONFIRM = 0; // 安全员确认 + MANUAL_REFUSE = 1; // 安全员拒绝 + OVER_TIME = 2; // 超时未确认 +} + +/** +结束任务响应 +*/ +message StopTaskResp { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + StopTaskCode code = 3; //响应状态 +} \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_suspend_resume.proto b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_suspend_resume.proto new file mode 100644 index 0000000000..2eaa58afb3 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/sweeper/sweeper_task_suspend_resume.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package com.zhjt.mogo.adas.data.sweeper.task; + +import "sweeper/sweeper_common.proto"; + +/**** 5、pad请求挂起任务 (type:100005) ****/ +/**** 6、pad请求恢复挂起的任务 (type:100006) ****/ + +//5.1、请求信息 +//6.1、请求信息 +/** +pad挂起任务请求 +pad恢复挂起的任务请求 + */ +message SuspendResumeTaskReq { + + string sn = 1;// sn + string taskId = 2;// 大任务ID + string subTaskId = 3;// 大任务ID +} + +//5.2、响应信息 +//6.2、响应信息 +/** +挂起任务响应 +恢复挂起的任务响应 +*/ +message SuspendResumeTaskResp { + string sn = 1;// sn + string taskId = 2;// 大任务编号 + string subTaskId = 3;// 子任务ID + common.Code code = 4; //响应状态 + string msg = 5; //响应详情 +} \ No newline at end of file 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 ba409d723a..9e21e960fe 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,6 +45,12 @@ 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.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.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; import com.zhjt.service.chain.ChainLog; import com.zhjt.service.chain.TracingConstants; @@ -1568,5 +1574,107 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } + /** + * 发送清扫车指令到云控 + * + * @param messageType 消息类型 + * @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() + .setMsgType(messageType.getNumber()) + .setSysTime(System.currentTimeMillis()); + if (!TextUtils.isEmpty(reqNo)) { + builder.setReqNo(reqNo); + } + 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()); + } + + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperStartTaskResp(@NonNull String reqNo, @NonNull SweeperTask.StartTaskResp startTaskResp) { + return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTask, reqNo, startTaskResp.toByteString()); + } + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperTaskConfirmResp(@NonNull String reqNo, @NonNull SweeperTaskConfirm.TaskConfirmResp taskConfirmResp) { + return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTaskConfirm, reqNo, taskConfirmResp.toByteString()); + } + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperStopTaskResp(@NonNull String reqNo, @NonNull SweeperTaskStop.StopTaskResp stopTaskResp) { + return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.CloudPushTaskStop, reqNo, stopTaskResp.toByteString()); + } + + /** + * 结束任务响应 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + @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()); + } + + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + @Override + public boolean sendSweeperGetTaskReq(@NonNull String reqNo, @NonNull SweeperTask.GetTaskReq getTaskReq) { + return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.PadSendGetTaskReq, reqNo, getTaskReq.toByteString()); + } + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + @Override + public boolean sendSweeperAutopilotBootable(@NonNull String reqNo, @NonNull SweeperBootable.IsBootable isBootable) { + return sendSweeperCloudTaskCmd(SweeperCloudTask.MessageType.PadSendBootable, reqNo, isBootable.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 74bb199b85..6f6b0d5c67 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 @@ -10,6 +10,11 @@ import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.Define; import com.zhidao.support.adas.high.common.MessageType; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; +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.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; import java.util.HashSet; import java.util.List; @@ -822,6 +827,86 @@ public class AdasManager implements IAdasNetCommApi { return mChannel != null && mChannel.sendBagManagerCmd(bagManager); } + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperStartTaskResp(@NonNull String reqNo, @NonNull SweeperTask.StartTaskResp startTaskResp) { + return mChannel != null && mChannel.sendSweeperStartTaskResp(reqNo, startTaskResp); + } + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperTaskConfirmResp(@NonNull String reqNo, @NonNull SweeperTaskConfirm.TaskConfirmResp taskConfirmResp) { + return mChannel != null && mChannel.sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); + } + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + @Override + public boolean sendSweeperStopTaskResp(@NonNull String reqNo, @NonNull SweeperTaskStop.StopTaskResp stopTaskResp) { + return mChannel != null && mChannel.sendSweeperStopTaskResp(reqNo, stopTaskResp); + } + + /** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + @Override + public boolean sendSweeperSuspendResumeTaskReq(boolean isSuspend, @NonNull String reqNo, @NonNull SweeperTaskSuspendResume.SuspendResumeTaskReq suspendResumeTaskReq) { + return mChannel != null && mChannel.sendSweeperSuspendResumeTaskReq(isSuspend, reqNo, suspendResumeTaskReq); + } + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + @Override + public boolean sendSweeperGetTaskReq(@NonNull String reqNo, @NonNull SweeperTask.GetTaskReq getTaskReq) { + return mChannel != null && mChannel.sendSweeperGetTaskReq(reqNo, getTaskReq); + } + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + @Override + public boolean sendSweeperAutopilotBootable(@NonNull String reqNo, @NonNull SweeperBootable.IsBootable isBootable) { + return mChannel != null && mChannel.sendSweeperAutopilotBootable(reqNo, isBootable); + } + /** * 获取工控机固定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 2eddd3c226..af1c9776b0 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 @@ -6,6 +6,11 @@ import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.Define; import com.zhidao.support.adas.high.common.MessageType; +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.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; import java.util.List; import java.util.Set; @@ -506,6 +511,69 @@ public interface IAdasNetCommApi { */ boolean sendBagManagerCmd(BagManagerOuterClass.BagManager bagManager); + /** + * 开始大任务响应 + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto/StartTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param startTaskResp 参数 + * @return boolean + */ + boolean sendSweeperStartTaskResp(@NonNull String reqNo, @NonNull SweeperTask.StartTaskResp startTaskResp); + + /** + * 子任务安全员确认响应 + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto/TaskConfirmResp 响应信息 + * + * @param reqNo 请求编号 + * @param taskConfirmResp 参数 + * @return boolean + */ + boolean sendSweeperTaskConfirmResp(@NonNull String reqNo, @NonNull SweeperTaskConfirm.TaskConfirmResp taskConfirmResp); + + /** + * 结束任务响应 + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto/StopTaskResp 响应信息 + * + * @param reqNo 请求编号 + * @param stopTaskResp 参数 + * @return boolean + */ + boolean sendSweeperStopTaskResp(@NonNull String reqNo, @NonNull SweeperTaskStop.StopTaskResp stopTaskResp); + + /** + * 挂起任务 恢复挂起的任务 + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto/SuspendResumeTaskReq + * + * @param isSuspend true:挂起任务 false:恢复挂起的任务 + * @param reqNo 请求编号 + * @param suspendResumeTaskReq 参数 + * @return boolean + */ + boolean sendSweeperSuspendResumeTaskReq(boolean isSuspend, @NonNull String reqNo, @NonNull SweeperTaskSuspendResume.SuspendResumeTaskReq suspendResumeTaskReq); + + + /** + * pad主动拉取当前车辆正在执行任务的完整信息请求 + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto/GetTaskReq + * + * @param reqNo 请求编号 + * @param getTaskReq 参数 + * @return boolean + */ + boolean sendSweeperGetTaskReq(@NonNull String reqNo, @NonNull SweeperTask.GetTaskReq getTaskReq); + + /** + * pad上报是否可以进自驾 + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)sweeper_bootable.proto/IsBootable + * + * @param reqNo 请求编号 + * @param isBootable 参数 + * @return boolean + */ + boolean sendSweeperAutopilotBootable(@NonNull String reqNo, @NonNull SweeperBootable.IsBootable isBootable); + // 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 a979279247..7fe8d823fd 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 @@ -1,8 +1,18 @@ package com.zhidao.support.adas.high; +import androidx.annotation.NonNull; + import com.mogo.support.obu.ObuScene; import com.zhidao.support.adas.high.common.ProtocolStatus; 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.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; import org.jetbrains.annotations.NotNull; @@ -253,6 +263,85 @@ public interface OnAdasListener { */ void onSweeperTaskIndexData(MessagePad.Header header, RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex); + /** + * 1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + * 7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskInfo 数据 + */ + void onSweeperFutianCloudTask(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperTask.TaskInfo taskInfo); + + /** + * 2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskConfirm 数据 + */ + void onSweeperFutianCloudTaskConfirm(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperTaskConfirm.TaskConfirm taskConfirm); + + /** + * 3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param taskStatusPush 数据 + */ + void onSweeperFutianCloudTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperTaskStatus.TaskStatusPush taskStatusPush); + + /** + * 4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param stopTaskReq 数据 + */ + void onSweeperFutianCloudTaskStop(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperTaskStop.StopTaskReq stopTaskReq); + + /** + * 5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + * 6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param suspendResumeTaskResp 数据 + */ + void onSweeperFutianCloudTaskSuspendResume(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp); + + /** + * 8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param isBootableResp 数据 + */ + void onSweeperFutianCloudBootable(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperBootable.IsBootableResp isBootableResp); + + /** + * 9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + * + * @param header 头 + * @param messageType 消息类型 + * @param reqNo 请求编号 + * @param sysTime 当前时间戳 + * @param bigTaskStatusPush 数据 + */ + void onSweeperFutianCloudBigTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, @NonNull SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush); + /** * 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 fdeb95356d..962a36e698 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 @@ -59,6 +59,8 @@ public enum MessageType { TYPE_SEND_BAG_MANAGER_CMD(MessagePad.MessageType.MsgTypeBagManagerCmd, "Bag管理请求"), TYPE_RECEIVE_BAG_MANAGER_CMD(MessagePad.MessageType.MsgTypeBagManagerCmd, "Bag管理应答"), TYPE_SEND_PLANNING_CMD(MessagePad.MessageType.MsgTypePlanningCmd, "给Planning指令"), + TYPE_SEND_SWEEPER_CLOUD_TASK_CMD(MessagePad.MessageType.MsgTypeTaskCmd, "发送清扫车指令到云控"), + TYPE_RECEIVE_SWEEPER_CLOUD_TASK_CMD(MessagePad.MessageType.MsgTypeTaskCmd, "云控下发清扫车任务指令"), //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/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index 1597921140..1cc9cb3744 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 @@ -38,6 +38,7 @@ public class MyMessageFactory implements IMyMessageFactory { private IMsg bagManagerMessage;//Bag管理应答 private IMsg backCameraVideoMessage;//清扫车后摄像头 private IMsg pointCloudMessage;//3D点云 + private IMsg sweeperCloudTaskMessage;//云控下发清扫车任务指令 private final AutopilotReview autopilotReview; @@ -197,6 +198,12 @@ public class MyMessageFactory implements IMyMessageFactory { backCameraVideoMessage = new BackCameraVideoMessage(); } return backCameraVideoMessage; + } else if (messageType == MessageType.TYPE_RECEIVE_SWEEPER_CLOUD_TASK_CMD.typeCode) { + //云控下发清扫车任务指令 + if (sweeperCloudTaskMessage == null) { + sweeperCloudTaskMessage = new SweeperCloudTaskMessage(); + } + return sweeperCloudTaskMessage; } else { //MessageType.TYPE_DEFAULT.typeCode return null; 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/SweeperCloudTaskMessage.java new file mode 100644 index 0000000000..e730d67df1 --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java @@ -0,0 +1,78 @@ +package com.zhidao.support.adas.high.msg; + +import android.os.SystemClock; + +import com.google.protobuf.ByteString; +import com.google.protobuf.InvalidProtocolBufferException; +import com.zhidao.support.adas.high.AdasChannel; +import com.zhidao.support.adas.high.OnAdasListener; +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.sweeper.bootable.SweeperBootable; +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +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; + +/** + * 清扫车云端任务调度 + */ +public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { + + public SweeperCloudTaskMessage() { + } + + @Override + public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { + SweeperCloudTask.SweeperMessage message = SweeperCloudTask.SweeperMessage.parser().parseFrom(raw.originalData.toByteArray(), 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());//消息类型,响应请求时,使用对应请求的消息类型 + String reqNo = message.getReqNo(); //请求编号,响应请求时,使用请求方的请求编号 + long sysTime = message.getSysTime(); //当前时间戳 + ByteString payload = message.getPayload(); + if (msgType == SweeperCloudTask.MessageType.CloudPushTask || msgType == SweeperCloudTask.MessageType.PadSendGetTaskReq) { + //1、云端下发大任务信息(type: 100001)-> sweeper_task.proto + //7、pad主动拉取当前车辆正在执行任务的完整信息(type:100007)-> sweeper_task.proto + SweeperTask.TaskInfo taskInfo = SweeperTask.TaskInfo.parseFrom(payload); + adasListener.onSweeperFutianCloudTask(header, msgType, reqNo, sysTime, taskInfo); + } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskConfirm) { + //2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto + SweeperTaskConfirm.TaskConfirm taskConfirm = SweeperTaskConfirm.TaskConfirm.parseFrom(payload); + adasListener.onSweeperFutianCloudTaskConfirm(header, msgType, reqNo, sysTime, taskConfirm); + } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStatus) { + //3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto + SweeperTaskStatus.TaskStatusPush taskStatusPush = SweeperTaskStatus.TaskStatusPush.parseFrom(payload); + adasListener.onSweeperFutianCloudTaskStatus(header, msgType, reqNo, sysTime, taskStatusPush); + } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStop) { + //4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto + SweeperTaskStop.StopTaskReq stopTaskReq = SweeperTaskStop.StopTaskReq.parseFrom(payload); + adasListener.onSweeperFutianCloudTaskStop(header, msgType, reqNo, sysTime, stopTaskReq); + } else if (msgType == SweeperCloudTask.MessageType.PadSendTaskSuspend || msgType == SweeperCloudTask.MessageType.PadSendTaskResume) { + //5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto + //6、pad请求恢复挂起的任务(type:100006)-> sweeper_task_suspend_resume.proto + SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp = SweeperTaskSuspendResume.SuspendResumeTaskResp.parseFrom(payload); + adasListener.onSweeperFutianCloudTaskSuspendResume(header, msgType, reqNo, sysTime, suspendResumeTaskResp); + } else if (msgType == SweeperCloudTask.MessageType.PadSendBootable) { + //8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto + SweeperBootable.IsBootableResp isBootableResp = SweeperBootable.IsBootableResp.parseFrom(payload); + adasListener.onSweeperFutianCloudBootable(header, msgType, reqNo, sysTime, isBootableResp); + } else if (msgType == SweeperCloudTask.MessageType.CloudPushBigTaskStatus) { + //9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto + SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush = SweeperBigTaskStatus.BigTaskStatusPush.parseFrom(payload); + adasListener.onSweeperFutianCloudBigTaskStatus(header, msgType, reqNo, sysTime, bigTaskStatusPush); + } +// adasListener.onBagManagerCmd(raw.getHeader(), bagManager); + } + AdasChannel.calculateTimeConsumingBusiness("清扫车云端任务调度", nowTime); + } +}