[650][adas] NDE V2N事件:绿波通行(单路口)事件推送, 透传、行人横穿(路侧)事件推送, 透传、他车逆行(路侧)事件推送, 透传、拥堵事件推送, 透传;数据中心新增NDE相关接口

This commit is contained in:
xinfengkun
2024-06-13 11:31:19 +08:00
parent d7e4daddc0
commit f205893029
10 changed files with 436 additions and 3 deletions

View File

@@ -80,6 +80,10 @@ public enum MessageType {
TYPE_RECEIVE_PARALLEL_DRIVING_STATUS(MessagePad.MessageType.MsgTypeParallelDrivingCmd, "平行驾驶状态", 5000),
TYPE_SEND_RECEIVED_ACK(MessagePad.MessageType.MsgTypeReceivedAck, "发送消息回执"),
TYPE_RECEIVE_RECEIVED_ACK(MessagePad.MessageType.MsgTypeReceivedAck, "接收消息回执"),
TYPE_RECEIVE_V2N_NIO_GREEN_WAVE_PASSAGE_EVENT(MessagePad.MessageType.MsgTypeV2nNioGreenWavePassageEvent, "V2N NIO绿波通行单路口"),
TYPE_RECEIVE_V2N_NIO_CROSSOVER_EVENT(MessagePad.MessageType.MsgTypeV2nNioCrossoverEvent, "V2N NIO行人横穿路侧"),
TYPE_RECEIVE_V2N_NIO_OTHER_RETROGRADE_EVENT(MessagePad.MessageType.MsgTypeV2nNioOtherRetrogradeEvent, "V2N NIO他车逆行路侧"),
TYPE_RECEIVE_V2N_NIO_CONGESTION_EVENT(MessagePad.MessageType.MsgTypeV2nNioCongestionEvent, "V2N NIO拥堵事件"),
//TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释
TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, "Planning决策状态"),
TYPE_RECEIVE_SWEEPER_TASK_INDEX_DATA(MessagePad.MessageType.MsgTypeSweeperTaskIndexData, "清扫车指标数据"),

View File

@@ -77,6 +77,11 @@ enum MessageType
MsgTypeGetDebugInfo = 0x10125; //debug信息查询 pad->telematics
MsgTypeParallelDrivingCmd = 0x10126; //无人化场景,平行驾驶请求相关指令及状态反馈, 云控<->鹰眼双向透传
MsgTypeReceivedAck = 0x10127; //消息接收ack, 表示消息已接收到
MsgTypeV2nNioGreenWavePassageEvent = 0x10128; //绿波通行(单路口)事件推送, 透传
MsgTypeV2nNioCrossoverEvent = 0x10129; //行人横穿(路侧)事件推送, 透传
MsgTypeV2nNioOtherRetrogradeEvent = 0x1012a; //他车逆行(路侧)事件推送, 透传
MsgTypeV2nNioCongestionEvent = 0x1012b; //拥堵事件推送, 透传
}
message Header
@@ -94,6 +99,130 @@ message ReceivedAck
repeated uint64 msgids = 1; //确认收到的msgid列表
}
// message definition for MsgTypeV2nNioGreenWavePassageEvent
message V2nCrossSpeed
{
//直行
uint32 speed_straight_min = 1;
uint32 speed_straight_max = 2;
//左转
uint32 speed_left_min = 3;
uint32 speed_left_max = 4;
//右转
uint32 speed_right_min = 5;
uint32 speed_right_max = 6;
//车道限速
uint32 max_speed = 7;
//限速来源 0融合 1默认
uint32 max_status = 8;
//路口经度
double lng = 9;
//路口纬度
double lat = 10;
}
// message definition for MsgTypeV2nNioCongestionEvent
message V2nCongestion
{
// 消息时间,发送消息时间戳,单位毫秒
uint64 msg_time = 1;
// 消息名称
string msg_name = 2;
// 数据源0:路侧设备、1:人工上报、2:地图、3:三方数据源
uint32 data_source = 3;
// 路段拥堵详情
repeated CongestionInfo infos = 4;
}
message Geo{
// 经度
double lon = 1;
// 维度
double lat = 2;
}
message EventLocationGeo{
//开始经度--队头
double startLng = 1;
//开始纬度--队头
double startLat = 2;
//结束经度 -- 队尾
double endLng = 3;
//结束纬度 --队尾
double endLat =4;
// 事件区域--- 车道中心线的坐标
repeated Geo regions = 5;
}
message TimePeriod{
// 事件开始时间UTC+0 时间戳,精确到毫秒
uint64 start_time = 1;
// 事件结束时间UTC+0 时间戳,精确到毫秒,没有传 0
uint64 end_time = 2;
// 事件更新时间UTC+0 时间戳,精确到毫秒,没有传 0
uint64 update_time = 3;
// 事件确认时间UTC+0 时间戳,精确到毫秒,没有传 0
uint64 confirm_time = 4;
}
message CongestionInfo
{
// 事件状态0:消散、1:生成
uint32 data_status = 1;
// 事件时间相关信息
TimePeriod time_period = 2;
// 事件发生位置的经纬度信息
EventLocationGeo event_location_geo = 3;
//事件发生的原始照片
repeated string img_file_key = 4;
// 事件类型, 101 施工、 102 三角牌, 103 静止车,104 拥堵
uint32 event_type = 5;
// 事件唯一性
string msg_uuid = 6;
// 拥堵等级 1畅通2缓行3拥堵4严重拥堵
uint32 congestion_level = 7;
// 车道号
uint32 lane_no = 8;
// 拥堵细类 0路段拥堵1 路口拥堵
uint32 congestion_type = 9;
// 车道方向正北是0顺时针方向
double bearing = 10;
// 如果拥堵细类是路口,则有该路口中心点坐标
double lon = 11;
double lat = 12;
// 视频地址 2024-06-03新增字段
string video_url = 13;
// 来源ip 2024-06-03 新增字段
string camera_ip = 14;
}
enum EventType
{
CONVERSE_RUNNING = 0;//逆行/倒车
SLOW_RUNNING = 1;//慢行
SPEEDING_RUNNING = 2;//快行
EMERGENCY_BRAKING = 3;//紧急制动
ABNORMAL_PARKING = 4;//异常停车
NON_VEHICLE_INTRUSION = 5;//行人/非机动车闯入
}
// message definition for MsgTypeV2nNioCrossoverEvent / MsgTypeV2nNioOtherRetrogradeEvent
message Event
{
uint32 channelId = 1; //渠道来源mogo默认10
uint64 rcuId = 2; //平台未维护,暂用基站号
EventType eventType = 3; //事件类别
uint32 confidence = 4; //事件置信度
uint32 gnssType = 5; //坐标系类型, 0:GCJ02坐标系2:WGS84坐标系
double longitude = 6;
double latitude = 7;
uint64 timestamp = 8; //时间戳
string eventId = 9; // 事件id
string exts = 10; //扩展字段传递相机ip{"cameraIp":"172.18.7.40"}
uint32 targetIdsLen = 11; //事件关联的目标对象uuid个数
repeated string targetIds = 12; //事件关联的目标对象uuid列表
}
// message definition for MsgTypeTrajectory
message TrajectoryPoint
{
@@ -345,7 +474,7 @@ message CarConfigResp
double maxAcceleration = 8; //最大加速度, 单位m/s²
string carType = 9; //车辆类型
string subCarType = 10; //车辆子类型
string vinCode = 11;//车辆vin码
string vinCode = 11;//车辆vin码 taxi: 420 bus: 440
reserved 12 to 100;
int32 mapVersion = 101;//dockVersion解析出版本号仅用于版本对比解析失败为-1。例如"MAP-taxi_RoboTaxi_df_2.8.0.3_20220928_test" 解析结果为20800
bool isDF = 102;//车型是否是东风

View File

@@ -11,8 +11,8 @@ import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo.adas.data.AiCloudTask;
import com.zhjt.mogo.adas.data.bean.AdasParam;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import com.zhjt.mogo.adas.data.bean.ReceivedAck;
import com.zhjt.mogo.adas.data.bean.LaunchConditionData;
import com.zhjt.mogo.adas.data.bean.ReceivedAck;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable;
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask;
@@ -480,6 +480,38 @@ public interface OnAdasListener {
*/
void onM1StitchedVideo(@NonNull MessagePad.Header header, @NonNull byte[] data);
/**
* 绿波通行(单路口)事件推送, 透传
*
* @param header 头
* @param crossSpeed 数据
*/
void onV2nNioGreenWavePassageEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.V2nCrossSpeed crossSpeed);
/**
* 行人横穿(路侧)事件推送, 透传
*
* @param header 头
* @param event 数据
*/
void onV2nNioCrossoverEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.Event event);
/**
* 他车逆行(路侧)事件推送, 透传
*
* @param header 头
* @param event 数据
*/
void onV2nNioOtherRetrogradeEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.Event event);
/**
* 拥堵事件推送, 透传
*
* @param header 头
* @param congestion 数据
*/
void onV2nNioCongestionEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.V2nCongestion congestion);
/**
* 域控SSM接口接收超时
* 状态变动时才会回调默认SSM状态正常
@@ -492,7 +524,7 @@ public interface OnAdasListener {
* 是否有能力启动自动驾驶
*
* @param isAutopilotAbility 是否能启动自动驾驶
* @param launchConditionData 原始数据
* @param launchConditionData 原始数据
* @param unableAutopilotReasons 不能启动自动驾驶原因
*/
void onAutopilotAbility(boolean isAutopilotAbility, @NonNull LaunchConditionData launchConditionData, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);

View File

@@ -46,6 +46,10 @@ public class MyMessageFactory implements IMyMessageFactory {
private IMsg aiCloudTaskMessage;//云控任务:清扫车任务指令、无人化场景,平行驾驶请求相关指令及状态反馈
private IMsg m1StitchedVideoMessage;//M1拼接视频
private IMsg fSMStatusReasonRespondMessage;//FSM状态原因查询
private IMsg v2nNioGreenWavePassageEventMessage;//V2N NIO绿波通行单路口
private IMsg v2nNioCrossoverEventMessage;//V2N NIO行人横穿路侧
private IMsg v2nNioOtherRetrogradeEventMessage;//V2N NIO他车逆行路侧
private IMsg v2nNioCongestionEventMessage;//V2N NIO拥堵事件
private final AutopilotReview autopilotReview;
private final TurnLightState lightLeft = new TurnLightState();
@@ -254,6 +258,30 @@ public class MyMessageFactory implements IMyMessageFactory {
fSMStatusReasonRespondMessage = new FSMStatusReasonRespondMessage();
}
return fSMStatusReasonRespondMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_GREEN_WAVE_PASSAGE_EVENT.typeCode) {
//V2N NIO绿波通行单路口
if (v2nNioGreenWavePassageEventMessage == null) {
v2nNioGreenWavePassageEventMessage = new V2nNioGreenWavePassageEventMessage();
}
return v2nNioGreenWavePassageEventMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_CROSSOVER_EVENT.typeCode) {
//V2N NIO行人横穿路侧
if (v2nNioCrossoverEventMessage == null) {
v2nNioCrossoverEventMessage = new V2nNioCrossoverEventAndOtherRetrogradeEventMessage(messageType);
}
return v2nNioCrossoverEventMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_OTHER_RETROGRADE_EVENT.typeCode) {
//V2N NIO他车逆行路侧
if (v2nNioOtherRetrogradeEventMessage == null) {
v2nNioOtherRetrogradeEventMessage = new V2nNioCrossoverEventAndOtherRetrogradeEventMessage(messageType);
}
return v2nNioOtherRetrogradeEventMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_CONGESTION_EVENT.typeCode) {
//V2N NIO拥堵事件
if (v2nNioCongestionEventMessage == null) {
v2nNioCongestionEventMessage = new V2nNioCongestionEventMessage();
}
return v2nNioCongestionEventMessage;
} else {
//MessageType.TYPE_DEFAULT.typeCode
return null;

View File

@@ -0,0 +1,31 @@
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 mogo.telematics.pad.MessagePad;
/**
* V2N NIO拥堵事件
*/
public class V2nNioCongestionEventMessage extends MyAbstractMessageHandler {
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
MessagePad.V2nCongestion v2nCongestion = MessagePad.V2nCongestion.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("V2N NIO拥堵事件", raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
adasListener.onV2nNioCongestionEvent(raw.getHeader(), v2nCongestion);
}
AdasChannel.calculateTimeConsumingBusiness("V2N NIO拥堵事件", nowTime);
}
}

View File

@@ -0,0 +1,43 @@
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;
/**
* V2N NIO行人横穿路侧和 V2N NIO他车逆行路侧
*/
public class V2nNioCrossoverEventAndOtherRetrogradeEventMessage extends MyAbstractMessageHandler {
private final MessagePad.MessageType messageType;
private final String TAG;
public V2nNioCrossoverEventAndOtherRetrogradeEventMessage(MessagePad.MessageType messageType) {
this.messageType = messageType;
TAG = messageType == MessageType.TYPE_RECEIVE_V2N_NIO_CROSSOVER_EVENT.typeCode ? "V2N NIO行人横穿路侧" : "V2N NIO他车逆行路侧";
}
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
MessagePad.Event event = MessagePad.Event.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw(TAG, raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_CROSSOVER_EVENT.typeCode) {
adasListener.onV2nNioCrossoverEvent(raw.getHeader(), event);
} else if (messageType == MessageType.TYPE_RECEIVE_V2N_NIO_OTHER_RETROGRADE_EVENT.typeCode) {
adasListener.onV2nNioOtherRetrogradeEvent(raw.getHeader(), event);
}
}
AdasChannel.calculateTimeConsumingBusiness(TAG, nowTime);
}
}

View File

@@ -0,0 +1,31 @@
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 mogo.telematics.pad.MessagePad;
/**
* V2N NIO绿波通行单路口
*/
public class V2nNioGreenWavePassageEventMessage extends MyAbstractMessageHandler {
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
MessagePad.V2nCrossSpeed v2nCrossSpeed = MessagePad.V2nCrossSpeed.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("V2N NIO绿波通行单路口", raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
adasListener.onV2nNioGreenWavePassageEvent(raw.getHeader(), v2nCrossSpeed);
}
AdasChannel.calculateTimeConsumingBusiness("V2N NIO绿波通行单路口", nowTime);
}
}