From 2ccf1a18f2a47d956fb1e62b76bcd050893c6502 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 24 Apr 2025 11:56:53 +0800 Subject: [PATCH] =?UTF-8?q?[8.0.0]=20ADAS=20LIB=20=E9=9A=9C=E7=A2=8D?= =?UTF-8?q?=E7=89=A9=E8=BD=A8=E8=BF=B9=E9=A2=84=E6=B5=8B2025=EF=BC=88?= =?UTF-8?q?=E8=80=81=E7=89=88=E6=9C=AC=E5=AE=8C=E5=85=A8=E5=BA=9F=E5=BC=83?= =?UTF-8?q?=E5=B7=B2=E7=A7=BB=E9=99=A4=EF=BC=89;=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=9F=9F=E6=8E=A7=E9=9A=9C=E7=A2=8D=E7=89=A9=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E6=88=90=E9=B9=B0=E7=9C=BC=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E9=9A=9C=E7=A2=8D=E7=89=A9=E7=B1=BB=E5=9E=8B=E6=96=B9?= =?UTF-8?q?=E6=B3=95;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 11 +-- .../IMoGoAutopilotIdentifyListener.kt | 7 ++ .../CallerAutopilotIdentifyListenerManager.kt | 37 ++++++++++ .../zhjt/mogo/adas/common/MessageType.java | 1 + .../src/main/proto/message_pad.proto | 1 + .../src/main/proto/personal/adas.proto | 71 +++++++++++++++++++ .../src/main/proto/prediction.proto | 33 --------- .../src/main/proto/prediction2025.proto | 44 ++++++++++++ .../support/adas/high/OnAdasListener.java | 6 +- .../adas/high/msg/MyMessageFactory.java | 2 +- .../PredictionObstacleTrajectoryMessage.java | 10 +-- 11 files changed, 176 insertions(+), 47 deletions(-) delete mode 100644 libraries/mogo-adas-data/src/main/proto/prediction.proto create mode 100644 libraries/mogo-adas-data/src/main/proto/prediction2025.proto 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 b8625d133b..501c7ae58d 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 @@ -56,6 +56,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamRespon import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyDataUpdate import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyPlanningObj +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokePredictionObstacleTrajectory import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordConfig @@ -136,7 +137,7 @@ import packet_mytest_upload.CopyBag import perception.FusionTrafficLightOuterClass import perception.LaneMarkOuterClass import planning.RoboSweeperTaskIndexOuterClass -import prediction.Prediction +import prediction2025.Prediction2025 import record_cache.RecordPanelOuterClass import system_master.SsmInfo import system_master.SystemStatusInfo @@ -435,12 +436,12 @@ class MoGoAdasListenerImpl : OnAdasListener { return type } - //他车轨迹预测 + //障碍物轨迹预测 override fun onPredictionObstacleTrajectory( - header: MessagePad.Header?, - predictionObjects: Prediction.mPredictionObjects? + header: MessagePad.Header, + predictionObjects: Prediction2025.mPredictionObjects ) { - //他车轨迹预测 + invokePredictionObstacleTrajectory(predictionObjects) } //todo 新增稳定设备类型需要添加,目的避免在nuc设备上使用此类功能 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotIdentifyListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotIdentifyListener.kt index e1e4b54f9a..5caedcb4d9 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotIdentifyListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotIdentifyListener.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.api.autopilot import mogo.telematics.pad.MessagePad import mogo.v2x.* import perception.FusionTrafficLightOuterClass +import prediction2025.Prediction2025 /** * @author xiaoyuzhou @@ -34,6 +35,12 @@ interface IMoGoAutopilotIdentifyListener { */ fun onAutopilotIdentifyDataUpdate(trafficData: List?) {} + /** + * 障碍物轨迹预测 + * + * @param predictionObjects 预测数据 + */ + fun onPredictionObstacleTrajectory(predictionObjects: Prediction2025.mPredictionObjects){} /** * planning识别感知预警物体 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotIdentifyListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotIdentifyListenerManager.kt index de60c84683..6b59745985 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotIdentifyListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotIdentifyListenerManager.kt @@ -2,9 +2,11 @@ package com.mogo.eagle.core.function.call.autopilot import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.call.base.CallerBase +import com.zhjt.mogo.adas.data.Adas import mogo.telematics.pad.MessagePad import mogo.v2x.* import perception.FusionTrafficLightOuterClass +import prediction2025.Prediction2025 /** * 域控制器感知数据 @@ -13,6 +15,33 @@ import perception.FusionTrafficLightOuterClass */ object CallerAutopilotIdentifyListenerManager : CallerBase() { + private val typeMap: Map = mapOf( + Adas.TrackedObjectType.TYPE_PEDESTRIAN to Adas.TrackedObjectClassID.Person, + Adas.TrackedObjectType.TYPE_MOTOR to Adas.TrackedObjectClassID.MotorCycle, + Adas.TrackedObjectType.TYPE_BICYCLE to Adas.TrackedObjectClassID.Bicycle, + Adas.TrackedObjectType.TYPE_CAR to Adas.TrackedObjectClassID.Car, + Adas.TrackedObjectType.TYPE_TRUCK to Adas.TrackedObjectClassID.Truck, + Adas.TrackedObjectType.TYPE_BUS to Adas.TrackedObjectClassID.Bus, + Adas.TrackedObjectType.TYPE_WARNINGTRIANGLE to Adas.TrackedObjectClassID.WarningTriangle, + Adas.TrackedObjectType.TYPE_ROADWORK_OCCUPY_0501 to Adas.TrackedObjectClassID.RoadWork_occupy_0501, + Adas.TrackedObjectType.TYPE_ROADWORK_BREAK_0502 to Adas.TrackedObjectClassID.RoadWork_break_0502, + Adas.TrackedObjectType.TYPE_ROAD_CONGESTION to Adas.TrackedObjectClassID.ROAD_CONGESTION + ) + + /** + * 域控障碍物类型转换成鹰眼使用的类型 + * + * @param classType 域控障碍物类型(目前只有Prediction2025.mPredictionObjects.objs_app.classtype 是域控的障碍物类型) + */ + fun trackedObjectTypeTransform(classType: Int): Int { + var type = Adas.TrackedObjectType.forNumber(classType) + if (type == null) { + type = Adas.TrackedObjectType.TYPE_UNKNOWN + } + val classId = typeMap[type] ?: Adas.TrackedObjectClassID.Unknown + return classId.number + } + /** * 识别交通元素数据发生更新 回调 */ @@ -24,6 +53,14 @@ object CallerAutopilotIdentifyListenerManager : CallerBase lastMessages = 1;// key:data(日期) value:数据 } + +//障碍物类型(域控内部使用) +enum TrackedObjectType { + TYPE_UNKNOWN = 0; + TYPE_PEDESTRIAN = 3; + TYPE_BICYCLE = 4; + TYPE_MOTOR = 5; + TYPE_RIDER = 6; + TYPE_CAR = 7; + TYPE_TRUCK = 8; + TYPE_BUS = 9; + TYPE_TRAIN = 10; + TYPE_SIGN = 20; + TYPE_LIGHT = 30; + TYPE_RED = 31; + TYPE_GREEN = 32; + TYPE_YELLOW = 33; + TYPE_BLACK = 34; + TYPE_TRIANGLEROADBLOCK = 35; + TYPE_WARNINGTRIANGLE = 36; + TYPE_VEGETATION = 37; + TYPE_TRICYCLE = 38; + TYPE_BICYCLE_RIDER = 39; + TYPE_TRICYCLE_RIDER = 40; + TYPE_MOVETRFCLTSPOLE = 41; + TYPE_MULTISEMANTICLTS = 42; + TYPE_UNKNOWN_SMALL = 91; + TYPE_UNKNOWN_BIG = 92; + TYPE_UNKNOWN_STATIC = 93; + TYPE_UNKNOWN_DYNAMIC = 94; + TYPE_FENCE = 95; + TYPE_TRAFFIC_SIGN = 96; + TYPE_NOISE = 97; + TYPE_ROAD = 98; + TYPE_SIDEWALK = 99; + TYPE_CURB = 100; + TYPE_OTHER_FLAT = 101; + TYPE_BUILDING = 102; + TYPE_POLE = 103; + TYPE_TERRAIN = 104; + TYPE_OBSTACLE = 105; + TYPE_OTHER_NOTHINGS = 106; + TYPE_EGO = 107; + TYPE_IGNORE = 110; + TYPE_TAILBACK = 447; + TYPE_ROADWORK_OCCUPY_0501 = 501; + TYPE_ROADWORK_BREAK_0502 = 502; + TYPE_ROAD_CONGESTION = 707; +} + +//障碍物类型(鹰眼使用,目前用于类型转换,鹰眼UI层使用int类型值) +enum TrackedObjectClassID { + Background = 0; + Person = 1; + Bicycle = 2; + Car = 3; + MotorCycle = 4; + TrafficSign = 5; + Bus = 6; + CellPhone = 7; + Truck = 8; + Bottle = 9; + TrafficLight = 10; + Rider = 11; + TriangleRoadblock = 12; + WarningTriangle = 13; + Unknown = 100; + RoadWork_occupy_0501 = 501; + RoadWork_break_0502 = 502; + ROAD_CONGESTION = 707; +}; diff --git a/libraries/mogo-adas-data/src/main/proto/prediction.proto b/libraries/mogo-adas-data/src/main/proto/prediction.proto deleted file mode 100644 index a7bb52d0bc..0000000000 --- a/libraries/mogo-adas-data/src/main/proto/prediction.proto +++ /dev/null @@ -1,33 +0,0 @@ -syntax = "proto2"; - -package prediction; - -// common -import "header.proto"; -import "geometry.proto"; - - -// estimated obstacle intent - -message mPredictionObject { - optional int64 m_nid =1; //target id - optional int32 m_nquality =2; //target tracking life quality - optional int32 classtype =3; //target classtype - optional int32 m_preconfidence=4; //target predciton confidence - - repeated geometry.Point prediction_trajectory = 5; //target prediction trajectory :vector : meter - repeated geometry.Point prediction_pose = 6; //targe prediciton pose vector angle:° - optional geometry.Vector3 objsize = 7; //length width height :meter - -} - -message mPredictionObjects { - optional common.Header header = 1; - optional int32 m_nnum0 =2; // all target number - optional int64 allcyclenum =3;//process cycle number - optional double m_ftime=4; //time stamp - optional double fdeltat=5; // deltatime prediciton time stamp default:0.1s - repeated mPredictionObject objs=6; //obj capcity - -} - diff --git a/libraries/mogo-adas-data/src/main/proto/prediction2025.proto b/libraries/mogo-adas-data/src/main/proto/prediction2025.proto new file mode 100644 index 0000000000..10e5d97d22 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/prediction2025.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; + +package prediction2025; + +// common +import "header.proto"; +import "geometry.proto"; + + + + + +message mTrajectoryApp{ + repeated geometry.Point trajectory_points = 1; //ego coordinate system 预测轨迹线 80个点 第一个点表示物体的位置,之后的79个点表示预测轨迹点,已自车为坐标系 只有x和y + optional float prediction_probability = 2;// only ego trajectory is decimal; other agents trajectory is integer 概率 自车的概率小于1;他车的概率都为1; +} + + +message mPredictionObjectApp{//ego coordinate system + optional int64 m_nid = 1; //target id: 800000 + obs_id; ego_id: 800000 减去800000是障碍物的id(此id是域控未数据融合之前的id,与发给鹰眼(TrackedObjects中的uuid)的可能不一样) + optional int32 classtype = 2; //target classtype 障碍物类型(与TrackedObject中的type类型不同,需要转换,转换完成后一样) + optional bool is_ai_output = 3; //1:ai_output 0:rb_out ; 输出类型:AI输出;规则输出; + repeated mTrajectoryApp prediction_trajectory = 4; //ego and other agent trajectories +} + +//目前仅支持Taxi + +//与障碍物频率相同 MsgTypeTrackedObjects = 0x10001; //障碍物信息 定频10hz +//判断是否有数据:1.感知障碍物节点挂掉时mPredictionObjects.objs_app.size==0;预测节点挂掉时没有数据推送需要做超时判断 + +//判断自车的方法(任意一种方式即可): +//1.mPredictionObjectApp.m_nid==800000表示自车 +//2.mPredictionObjectApp.prediction_trajectory.size==2时表示自车 +//3.mTrajectoryApp.prediction_probability自车的小数,他车的都是1 + +message mPredictionObjects { + optional common.Header header = 1;//障碍物时间戳与障碍物数据(TrackedObjects)时间戳相同 + optional int32 m_nnum0 = 2; // all target number 非未知类型障碍物的个数 + optional int64 allcyclenum = 3;//process cycle number 鹰眼无用 + optional double m_ftime = 4; //time stamp 预测处理后的时间戳 + optional double fdeltat = 5; // deltatime prediciton time stamp default:0.1s 鹰眼无用 + repeated mPredictionObjectApp objs_app = 7; //objs for eagle-eye app display 总个数:AI预测障碍物输出最多31个,算自车32个;规则输出个数不固定 + +} \ No newline at end of file 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 e6bf26e81c..578e3bc47c 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 @@ -45,7 +45,7 @@ import packet_mytest_upload.CopyBag; import perception.FusionTrafficLightOuterClass; import perception.LaneMarkOuterClass; import planning.RoboSweeperTaskIndexOuterClass; -import prediction.Prediction; +import prediction2025.Prediction2025; import record_cache.RecordPanelOuterClass; import system_master.SsmInfo; import system_master.SystemStatusInfo; @@ -141,12 +141,12 @@ public interface OnAdasListener { void onPerceptionTrafficLight(MessagePad.Header header, FusionTrafficLightOuterClass.FusionTrafficLights trafficLights); /** - * 他车轨迹预测 + * 障碍物轨迹预测 * * @param header 头 * @param predictionObjects 他车轨迹预测数据 */ - void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects); + void onPredictionObstacleTrajectory(@NonNull MessagePad.Header header,@NonNull Prediction2025.mPredictionObjects predictionObjects); /** * 透传的点云数据 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 4711f0b415..af9620525a 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 @@ -121,7 +121,7 @@ public class MyMessageFactory implements IMyMessageFactory { perceptionTrafficLightMessage = new PerceptionTrafficLightMessage(); } return perceptionTrafficLightMessage; - } else if (messageType == MessageType.TYPE_RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.typeCode) { + } else if (messageType == MessageType.TYPE_RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY2025.typeCode) { //他车轨迹预测 if (predictionObstacleTrajectoryMessage == null) { predictionObstacleTrajectoryMessage = new PredictionObstacleTrajectoryMessage(); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PredictionObstacleTrajectoryMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PredictionObstacleTrajectoryMessage.java index 466670f770..e9f5e2f1a5 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PredictionObstacleTrajectoryMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PredictionObstacleTrajectoryMessage.java @@ -8,23 +8,23 @@ import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; -import prediction.Prediction; +import prediction2025.Prediction2025; /** - * 他车轨迹预测 + * 障碍物轨迹预测 */ public class PredictionObstacleTrajectoryMessage extends MyAbstractMessageHandler { @Override public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { - Prediction.mPredictionObjects objects = Prediction.mPredictionObjects.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); - AdasChannel.calculateTimeConsumingOnDispatchRaw("他车轨迹预测", raw.receiveTime); + Prediction2025.mPredictionObjects objects = Prediction2025.mPredictionObjects.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.onPredictionObstacleTrajectory(raw.getHeader(), objects); } - AdasChannel.calculateTimeConsumingBusiness("他车轨迹预测", nowTime); + AdasChannel.calculateTimeConsumingBusiness("障碍物轨迹预测", nowTime); } }