[690][adas]新增人工接管时给PAD发后摄像头数据请求与响应

This commit is contained in:
xinfengkun
2024-11-28 15:17:38 +08:00
parent 82dd240a6c
commit 99c36c6c6b
9 changed files with 132 additions and 0 deletions

View File

@@ -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

View File

@@ -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发后摄像头数据响应"),
;

View File

@@ -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;
}

View File

@@ -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());
}
}

View File

@@ -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);
}
/**
* 查询节点状态
*

View File

@@ -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();

View File

@@ -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);
/**
* 是否有能力启动自动驾驶
*

View File

@@ -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);
}
}

View File

@@ -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;