From 99c36c6c6b5ca0173d335aad91acbc26f9b45b69 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 28 Nov 2024 15:17:38 +0800 Subject: [PATCH] =?UTF-8?q?[690][adas]=E6=96=B0=E5=A2=9E=E4=BA=BA=E5=B7=A5?= =?UTF-8?q?=E6=8E=A5=E7=AE=A1=E6=97=B6=E7=BB=99PAD=E5=8F=91=E5=90=8E?= =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4=E6=95=B0=E6=8D=AE=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E4=B8=8E=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 15 +++++++++ .../zhjt/mogo/adas/common/MessageType.java | 7 ++++ .../src/main/proto/message_pad.proto | 10 ++++++ .../zhidao/support/adas/high/AdasChannel.java | 20 +++++++++++ .../zhidao/support/adas/high/AdasManager.java | 17 ++++++++++ .../support/adas/high/IAdasNetCommApi.java | 14 ++++++++ .../support/adas/high/OnAdasListener.java | 9 +++++ .../high/msg/CaptureImgOnTakeOverMessage.java | 33 +++++++++++++++++++ .../adas/high/msg/MyMessageFactory.java | 7 ++++ 9 files changed, 132 insertions(+) create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java 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 99acee63a5..87b6d7c4f9 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 @@ -1338,6 +1338,21 @@ class MoGoAdasListenerImpl : OnAdasListener { } } + /** + * 接管时前方和后方摄像头数据请求的响应 + * + * @param header 头 + * @param isFront true:前方摄像头 false:后方摄像头 + * @param data 数据 + */ + override fun onCaptureImgOnTakeOver( + header: MessagePad.Header, + isFront: Boolean, + data: MessagePad.CaptureImgOnTakeOver + ) { + + } + /** * 是否可以启动自动驾驶 * 使用方法查看:app_ipc_monitoring/uiMainActivity/onAutopilotAbility diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java index f0771035b6..31f37d973f 100644 --- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java @@ -95,6 +95,8 @@ public enum MessageType { TYPE_RECEIVE_SSM_FUNC_MSG(MessagePad.MessageType.MsgTypeSSMFuncMsg, "SSM功能响应"), TYPE_SEND_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态查询"), TYPE_RECEIVE_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态响应"), + TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureImgReqOnTakeOver, "接管时摄像头数据请求"), + //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, "清扫车指标数据"), @@ -106,6 +108,11 @@ public enum MessageType { TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_BACK(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Back, "相机标定检查视频120后"), TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_LEFT(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Left, "相机标定检查视频120左"), TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_RIGHT(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Right, "相机标定检查视频120右"), + + + TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureFrontImgOnTakeOver, "人工接管时给PAD发前摄像头数据响应"), + TYPE_RECEIVE_CAPTURE_BACK_IMG_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureBackImgOnTakeOver, "人工接管时给PAD发后摄像头数据响应"), + ; 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 b9f77fc20f..7ee8c30228 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -24,6 +24,8 @@ enum MessageType MsgTypeCameraCalibCheckData120Back = 0x01004; //相机标定检查视频, 10hz, jpeg. image_raw_back MsgTypeCameraCalibCheckData120Left = 0x01005; //相机标定检查视频, 10hz, jpeg. image_raw_left MsgTypeCameraCalibCheckData120Right = 0x01006; //相机标定检查视频, 10hz, jpeg. image_raw_right + MsgTypeCaptureFrontImgOnTakeOver = 0x01007;//人工接管时给PAD发前摄像头数据响应 + MsgTypeCaptureBackImgOnTakeOver = 0x01008;//人工接管时给PAD发后摄像头数据响应 MsgTypeTrajectory = 0x10000; //局部轨迹,车前引导线 定频10hz MsgTypeTrackedObjects = 0x10001; //障碍物信息 定频10hz @@ -97,6 +99,7 @@ enum MessageType MsgTypePowerUnit = 0x1012e;//电源模块通信 MsgTypeSSMFuncMsg = 0x1012f;//SSM功能(上下行) MsgTypeSSMFuncStatusQuery = 0x10130;//SSM功能状态查询及返回(上下行) + MsgTypeCaptureImgReqOnTakeOver = 0x10132;//人工接管时PAD请求前后摄像头数据 } message Header @@ -940,4 +943,11 @@ message CollisionReport double longitude = 1; double latitude = 2; double timestamp = 3;//时间, 单位:秒 +} + +//message definition for MsgTypeCaptureImgReqOnTakeOver MsgTypeCaptureFrontImgOnTakeOver MsgTypeCaptureBackImgOnTakeOver +message CaptureImgOnTakeOver +{ + uint32 uuid = 1; + bytes data = 2; } \ 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 05ac922192..0f5fc2c190 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 @@ -3049,6 +3049,26 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendSsmFuncMsg(true, system_master.SsmInfo.MessageType.STATION_STATUS_QUERY, SsmInfo.OrderInfo.newBuilder().setOrderId(orderId).build().toByteString()); } + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendCaptureImgReqOnTakeOver(int uuid) { + MessagePad.CaptureImgOnTakeOver.Builder builder = MessagePad.CaptureImgOnTakeOver.newBuilder() + .setUuid(uuid); + MessagePad.CaptureImgOnTakeOver req = builder.build(); + return sendPBMessage(MessageType.TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER, req.toByteArray()); + } + } 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 8d965a7bc0..fdb651860b 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 @@ -1855,6 +1855,23 @@ public class AdasManager implements IAdasNetCommApi { return mChannel == null ? -1L : mChannel.sendSsmFuncQueryAutoPilotStation(orderId); } + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendCaptureImgReqOnTakeOver(int uuid) { + return mChannel == null ? -1L : mChannel.sendCaptureImgReqOnTakeOver(uuid); + } + /** * 查询节点状态 * 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 8abb7a99a5..c7f35baeb0 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 @@ -1344,6 +1344,20 @@ public interface IAdasNetCommApi { */ long sendSsmFuncQueryAutoPilotStation(@NonNull String orderId); + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + long sendCaptureImgReqOnTakeOver(int uuid); + // 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 d25862952e..2692687c37 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 @@ -638,6 +638,15 @@ public interface OnAdasListener { */ void onNodeStateInfo(@NonNull NodeStateInfo stateInfo); + /** + * 接管时前方和后方摄像头数据请求的响应 + * + * @param header 头 + * @param isFront true:前方摄像头 false:后方摄像头 + * @param data 数据 + */ + void onCaptureImgOnTakeOver(@NonNull MessagePad.Header header, boolean isFront, @NonNull MessagePad.CaptureImgOnTakeOver data); + /** * 是否有能力启动自动驾驶 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java new file mode 100644 index 0000000000..fa7a6b3fa9 --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java @@ -0,0 +1,33 @@ +package com.zhidao.support.adas.high.msg; + +import android.os.SystemClock; + +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.common.MessageType; + +import mogo.telematics.pad.MessagePad; + +/** + * 接管时前方和后方摄像头数据请求的响应 + */ +public class CaptureImgOnTakeOverMessage extends MyAbstractMessageHandler { + + @Override + public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { + MessagePad.CaptureImgOnTakeOver data = MessagePad.CaptureImgOnTakeOver.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(); + adasListener.onCaptureImgOnTakeOver(header, header.getMsgType() == MessageType.TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER.typeCode, data); + } + AdasChannel.calculateTimeConsumingBusiness("接管时前方和后方摄像头数据请求的响应", nowTime); + } + +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index b221e7746c..8ee150b3d5 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 @@ -55,6 +55,7 @@ public class MyMessageFactory implements IMyMessageFactory { private IMsg laneMarksTranMessage;//车道线 private IMsg powerUnitMessage;//电源模块 private IMsg padSsmFuncMsgMessage;//SSM功能 + private IMsg captureImgOnTakeOverMessage;//接管时前方和后方摄像头数据请求的响应 private final AutopilotReview autopilotReview; private final TurnLightState lightLeft = new TurnLightState(); @@ -317,6 +318,12 @@ public class MyMessageFactory implements IMyMessageFactory { padSsmFuncMsgMessage = new PadSsmFuncMsgMessage(); } return padSsmFuncMsgMessage; + } else if (messageType == MessageType.TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER.typeCode || messageType == MessageType.TYPE_RECEIVE_CAPTURE_BACK_IMG_ON_TAKE_OVER.typeCode) { + //接管时正前方和后方摄像头数据请求的响应 + if (captureImgOnTakeOverMessage == null) { + captureImgOnTakeOverMessage = new CaptureImgOnTakeOverMessage(); + } + return captureImgOnTakeOverMessage; } else { //MessageType.TYPE_DEFAULT.typeCode return null;