[650][adas] 更新红绿灯PB,新增融合数据

This commit is contained in:
xinfengkun
2024-06-24 17:56:27 +08:00
parent db7ae84de6
commit d235abdadb
10 changed files with 72 additions and 72 deletions

View File

@@ -83,7 +83,7 @@ import mogo.v2x.MogoV2X
import mogo.v2x.RoadOverviewEvents
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass
import mogo_msg.MogoReportMsg
import perception.TrafficLightOuterClass
import perception.FusionTrafficLightOuterClass
import planning.RoboSweeperTaskIndexOuterClass
import prediction.Prediction
import record_cache.RecordPanelOuterClass
@@ -330,10 +330,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//感知红绿灯
//融合感知红绿灯
override fun onPerceptionTrafficLight(
header: MessagePad.Header?,
trafficLights: TrafficLightOuterClass.TrafficLights?
trafficLights: FusionTrafficLightOuterClass.FusionTrafficLights?
) {
if (trafficLights != null) {
CallerAutopilotIdentifyListenerManager.invokeAutopilotPerceptionTrafficLight(

View File

@@ -28,8 +28,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.zhjt.service.chain.ChainLog
import perception.TrafficLightOuterClass
import perception.TrafficLightOuterClass.TrafficLight
import perception.FusionTrafficLightOuterClass
fun TrafficLightStatus.convert(): TrafficLightEnum {
return when {
@@ -40,12 +39,12 @@ fun TrafficLightStatus.convert(): TrafficLightEnum {
}
}
fun TrafficLight.convert(): TrafficLightEnum {
fun FusionTrafficLightOuterClass.FusionTrafficLight.convert(): TrafficLightEnum {
return when (this.state) {
TrafficLightOuterClass.LightState.STATE_GREEN -> TrafficLightEnum.GREEN
TrafficLightOuterClass.LightState.STATE_YELLOW -> TrafficLightEnum.YELLOW
TrafficLightOuterClass.LightState.STATE_RED -> TrafficLightEnum.RED
TrafficLightOuterClass.LightState.STATE_OFF -> TrafficLightEnum.BLACK
FusionTrafficLightOuterClass.FusionLightState.STATE_GREEN_FUSION -> TrafficLightEnum.GREEN
FusionTrafficLightOuterClass.FusionLightState.STATE_YELLOW_FUSION -> TrafficLightEnum.YELLOW
FusionTrafficLightOuterClass.FusionLightState.STATE_RED_FUSION -> TrafficLightEnum.RED
FusionTrafficLightOuterClass.FusionLightState.STATE_OFF_FUSION -> TrafficLightEnum.BLACK
else -> TrafficLightEnum.BLACK
}
}
@@ -96,7 +95,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
* 工控机感知红绿灯
* @param trafficLights 感知红绿灯
*/
override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) {
override fun onAutopilotPerceptionTrafficLight(trafficLights: FusionTrafficLightOuterClass.FusionTrafficLights?) {
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onAutopilotPerceptionTrafficLight ---- hasObuLightStatus = $hasObuLightStatus ----hasAiLightStatus = $hasAiLightStatus , trafficLights : ${trafficLights?:"null"}"
@@ -104,7 +103,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
if (!hasObuLightStatus) {
if (!hasAiLightStatus) {
trafficLights?.let {
var light: TrafficLight? = null
var light: FusionTrafficLightOuterClass.FusionTrafficLight? = null
if (it.hasStraight()) {
light = it.straight
} else if (it.hasLeft()) {

View File

@@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.api.autopilot
import mogo.telematics.pad.MessagePad
import mogo.v2x.*
import perception.TrafficLightOuterClass
import perception.FusionTrafficLightOuterClass
/**
* @author xiaoyuzhou
@@ -24,10 +24,10 @@ interface IMoGoAutopilotIdentifyListener {
fun onAutopilotIdentifyPlanningObj(planningObjects: List<MessagePad.PlanningObject>?){}
/**
* 感知红绿灯
* 融合感知红绿灯
* @param trafficLights 感知红绿灯
*/
fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?){}
fun onAutopilotPerceptionTrafficLight(trafficLights: FusionTrafficLightOuterClass.FusionTrafficLights?){}
/**

View File

@@ -4,7 +4,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.call.base.CallerBase
import mogo.telematics.pad.MessagePad
import mogo.v2x.*
import perception.TrafficLightOuterClass
import perception.FusionTrafficLightOuterClass
/**
* 域控制器感知数据
@@ -36,10 +36,10 @@ object CallerAutopilotIdentifyListenerManager : CallerBase<IMoGoAutopilotIdentif
}
/**
* 感知红绿灯
* 融合感知红绿灯
*/
@Synchronized
fun invokeAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) {
fun invokeAutopilotPerceptionTrafficLight(trafficLights: FusionTrafficLightOuterClass.FusionTrafficLights?) {
M_LISTENERS.forEach {
val listener = it.value
listener.onAutopilotPerceptionTrafficLight(trafficLights)

View File

@@ -20,7 +20,7 @@ public enum MessageType {
TYPE_RECEIVE_VEHICLE_STATE(MessagePad.MessageType.MsgTypeVehicleState, "老底盘状态"),
TYPE_RECEIVE_AUTOPILOT_STATE(MessagePad.MessageType.MsgTypeAutopilotState, "自动驾驶状态"),
TYPE_RECEIVE_REPORT_MESSAGE(MessagePad.MessageType.MsgTypeReportMessage, "监控事件报告"),
TYPE_RECEIVE_PERCEPTION_TRAFFIC_LIGHT(MessagePad.MessageType.MsgTypePerceptionTrafficLight, "感知红绿灯"),
TYPE_RECEIVE_PERCEPTION_TRAFFIC_LIGHT(MessagePad.MessageType.MsgTypePerceptionTrafficLight, "融合感知红绿灯"),
TYPE_RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY(MessagePad.MessageType.MsgTypePredictionObstacleTrajectory, "他车轨迹预测"),
TYPE_RECEIVE_POINT_CLOUD(MessagePad.MessageType.MsgTypePointCloud, "点云透传"),
TYPE_RECEIVE_PLANNING_OBJECTS(MessagePad.MessageType.MsgTypePlanningObjects, "Planning障碍物"),

View File

@@ -0,0 +1,43 @@
syntax = "proto2";
package perception;
import "header.proto";
enum FusionLightType {
TYPE_DEFAULT_FUSION = 0;
TYPE_VEHICLE_FUSION = 1;
TYPE_BICYLE_FUSION = 2;
TYPE_PEDSTRIAN_FUSION = 3;
TYPE_LANE_FUSION = 5;
}
enum FusionLightState {
STATE_OFF_FUSION = 0;
STATE_RED_FUSION = 1;
STATE_YELLOW_FUSION = 2;
STATE_GREEN_FUSION = 3;
STATE_FLASH_FUSION = 4;
}
message FusionTrafficLight {
optional int64 id = 1;
optional FusionLightType type = 2 [default = TYPE_DEFAULT_FUSION];
optional FusionLightState state = 3 [default = STATE_OFF_FUSION];
optional float duration = 4; // seconds since the last state changed
optional FusionLightState next_state = 5 [default = STATE_OFF_FUSION];
optional float next_duration = 6 [default = -1.0]; // seconds since the last state changed
optional FusionLightState next_two_state = 7 [default = STATE_OFF_FUSION];
optional float next_two_duration = 8 [default = -1.0]; // seconds since the last state changed
}
message FusionTrafficLights {
optional common.Header header = 1;
optional FusionTrafficLight straight = 2;
optional FusionTrafficLight left = 3;
optional FusionTrafficLight right = 4;
optional FusionTrafficLight u_turn = 5;
optional bool shield = 6 [default = false];//wheather the traffic lights are shield
optional uint32 source = 7 [default = 0]; // 0: vehicle, 1:V2I, 2: V2N
}

View File

@@ -24,7 +24,7 @@ enum MessageType
MsgTypeVehicleState = 0x10003; //底盘信息, 透传底盘状态pb参考底盘 定频20hz
MsgTypeAutopilotState = 0x10004; //自动驾驶状态 定频20hz
MsgTypeReportMessage = 0x10005; //系统事件 不定频
MsgTypePerceptionTrafficLight = 0x10006; //感知红绿灯 定频10hz
MsgTypePerceptionTrafficLight = 0x10006; //融合感知红绿灯 定频10hz
MsgTypePredictionObstacleTrajectory = 0x10007; //他车轨迹预测 定频10hz
MsgTypePointCloud = 0x10008; //点云透传 定频1hz
MsgTypePlanningObjects = 0x10009; //planning障碍物 定频10hz
@@ -356,7 +356,7 @@ message AutopilotState
// refer to mogo_report_msg.proto
// message definition for MessageType: MsgTypePerceptionTrafficLight
// refer to traffic_light.proto
// refer to fusion_traffic_light.proto
// message definition for MessageType: MsgTypePredictionObstacleTrajectory
// refer to prediction.proto

View File

@@ -1,43 +0,0 @@
syntax = "proto2";
package perception;
import "header.proto";
enum LightType {
TYPE_DEFAULT = 0;
TYPE_VEHICLE = 1;//机动车道
TYPE_BICYLE = 2;//自行车道
TYPE_PEDSTRIAN = 3;//行人道
TYPE_LANE = 5;//车道
}
enum LightState {
STATE_OFF = 0;//没检测到灯
STATE_RED = 1;
STATE_YELLOW = 2;
STATE_GREEN = 3;
STATE_FLASH = 4;//闪烁
STATE_OFF_FUSION = 5;
}
message TrafficLight {
optional int64 id = 1;
optional LightType type = 2 [default = TYPE_DEFAULT];//灯所处的车道类型
optional LightState state = 3 [default = STATE_OFF];//灯态
optional float duration = 4; // seconds since the last state changed
optional LightState next_state = 5 [default = STATE_OFF_FUSION];
}
//触发方式120m以内会有信号但远的时候可能不准越近越准
//straight left right u_turn 同一时间只有会有一个触发
message TrafficLights {
optional common.Header header = 1;
optional TrafficLight straight = 2;//直行灯
optional TrafficLight left = 3;//左转灯
optional TrafficLight right = 4;//右转灯
optional TrafficLight u_turn = 5;//掉头灯
optional bool shield = 6 [default = false];//wheather the traffic lights are shield
optional uint32 source = 7 [default = 0]; // 0: vehicle, 1:V2I, 2: V2N
}

View File

@@ -38,7 +38,7 @@ import mogo.v2x.MogoV2X;
import mogo.v2x.RoadOverviewEvents;
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass;
import mogo_msg.MogoReportMsg;
import perception.TrafficLightOuterClass;
import perception.FusionTrafficLightOuterClass;
import planning.RoboSweeperTaskIndexOuterClass;
import prediction.Prediction;
import record_cache.RecordPanelOuterClass;
@@ -128,12 +128,12 @@ public interface OnAdasListener {
void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage);
/**
* 感知红绿灯
* 融合感知红绿灯
*
* @param header 头
* @param trafficLights 感知红绿灯
*/
void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights);
void onPerceptionTrafficLight(MessagePad.Header header, FusionTrafficLightOuterClass.FusionTrafficLights trafficLights);
/**
* 他车轨迹预测

View File

@@ -8,23 +8,24 @@ import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.protocol.RawData;
import perception.TrafficLightOuterClass;
import perception.FusionTrafficLightOuterClass;
/**
* 感知红绿灯
* 融合感知红绿灯
*/
public class PerceptionTrafficLightMessage extends MyAbstractMessageHandler {
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
TrafficLightOuterClass.TrafficLights trafficLights = TrafficLightOuterClass.TrafficLights.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("感知红绿灯", raw.receiveTime);
FusionTrafficLightOuterClass.FusionTrafficLights trafficLights = FusionTrafficLightOuterClass.FusionTrafficLights.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) {
adasListener.onPerceptionTrafficLight(raw.getHeader(), trafficLights);
}
AdasChannel.calculateTimeConsumingBusiness("感知红绿灯", nowTime);
AdasChannel.calculateTimeConsumingBusiness("融合感知红绿灯", nowTime);
}
}