diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java index 9d9433ce6b..6c67c2a753 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java @@ -8,13 +8,19 @@ public * 描述 */ class DataTypes { + /** - * adas识别数据 + * 识别感知和云端感知数据,全部标记为Marker融合数据 + */ + public static final String TYPE_MARKER_MERGE = "TYPE_MARKER_MERGE"; + + /** + * adas识别数据,Mock用 */ public static final String TYPE_MARKER_ADAS = "TYPE_MARKER_ADAS"; /** - * 云端下发数据 + * 云端下发数据,Mock用 */ public static final String TYPE_MARKER_CLOUD_DATA = "TYPE_MARKER_CLOUD_DATA"; diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java index 3d63facadf..e019b5ca82 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS; + public /** * @author congtaowang @@ -256,7 +258,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { } /** - * 绘制某个物体的一个数据 todo 缓存问题 + * 绘制某个物体的一个数据 * * @param recognizedListResult {@link ADASRecognizedResult} * @param newAdasRecognizedMarkersCaches @@ -289,16 +291,14 @@ class AdasRecognizedResultDrawer extends BaseDrawer { final MogoLatLng renderLoc = new MogoLatLng(recognizedListResult.lat, recognizedListResult.lon); long cost = System.currentTimeMillis() - start; final long intervalRef = interval - cost; -// SimpleHandlerThreadPool.getInstance().postRender(() -> { marker.addDynamicAnchorPosition(renderLoc, (float) recognizedListResult.heading, intervalRef); -// }); } else { marker.setRotateAngle(((float) recognizedListResult.heading)); marker.setPosition(recognizedListResult.lat, recognizedListResult.lon); } String carColor = recognizedListResult.color; if (TextUtils.isEmpty(carColor)) { - carColor = getModelRenderColor(recognizedListResult.type, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); + carColor = getModelRenderColor(recognizedListResult.type, FROM_ADAS, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); } marker.setAnchorColor(carColor); @@ -323,10 +323,10 @@ class AdasRecognizedResultDrawer extends BaseDrawer { String carColor = recognizedListResult.color; if (TextUtils.isEmpty(carColor)) { - carColor = getModelRenderColor(recognizedListResult.type, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); + carColor = getModelRenderColor(recognizedListResult.type, FROM_ADAS, recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading); } MogoMarkerOptions options = new MogoMarkerOptions() - .owner(DataTypes.TYPE_MARKER_ADAS) + .owner(DataTypes.TYPE_MARKER_MERGE) .anchor(0.5f, 0.5f) .set3DMode(true) .gps(true) @@ -336,7 +336,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { .icon3DRes(resId) .rotate((float) recognizedListResult.heading) .position(new MogoLatLng(recognizedListResult.lat, recognizedListResult.lon)); - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(DataTypes.TYPE_MARKER_ADAS, options); + IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(DataTypes.TYPE_MARKER_MERGE, options); cacheMarkerIconResMd5Val(resIdVal, marker); return marker; } @@ -358,6 +358,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { if (mLastPositions != null) { mLastPositions.clear(); } - sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_ADAS); + sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE); } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java index af0347fb43..4789fa73c3 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java @@ -26,9 +26,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ADAS; -import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_MY_LOCATION; -import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_ADAS; -import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_DATA; +import static com.mogo.cloud.socket.entity.SocketDownDataHelper.FROM_ROAD_UNIT; import static java.lang.Math.PI; public @@ -208,39 +206,47 @@ class BaseDrawer { * @param lat 纬度 * @return 实际车辆颜色 */ - protected String getModelRenderColor(int type, double speed, double lon, double lat, double angle) { + protected String getModelRenderColor(int type, int fromType, double speed, double lon, double lat, double angle) { AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom(type); if (recognizedType == AdasRecognizedType.classIdTrafficBus) { return "#D8D8D8FF"; } - if (recognizedType == AdasRecognizedType.classIdUnKnow) { //todo unKnow颜色绘制 + if (recognizedType == AdasRecognizedType.classIdUnKnow) { return Car3DModelColor.Normal.color; } - // 距离策略 - double[] coordinates = getCurCoordinates(); - double distance = CoordinateUtils.calculateLineDistance(lon, lat, coordinates[0], coordinates[1]) * 100; - if (distance < 50) { - return Car3DModelColor.Dangerous.color; - } else if (distance < 100 && distance >= 50) { - return Car3DModelColor.Warming.color; - } - -// 他车车速和自车车速对比速度策略 -// 自车速度 >= 50% 危险 -// 10% < 自车速度 < 50% 警告 - double curSpeed = getCurSpeed(); - if (curSpeed > 0 && speed > curSpeed) { - double rate = ((speed - curSpeed) / curSpeed) * 100; - if (rate >= 50) { - return Car3DModelColor.Dangerous.color; - } else if (rate > 10 && rate < 50) { - return Car3DModelColor.Warming.color; - } - } + // 距离策略 todo 此处两种策略是临时方案 +// double[] coordinates = getCurCoordinates(); +// double distance = CoordinateUtils.calculateLineDistance(lon, lat, coordinates[0], coordinates[1]) * 100; +// if (distance < 50) { +// return Car3DModelColor.Dangerous.color; +// } else if (distance < 100 && distance >= 50) { +// return Car3DModelColor.Warming.color; +// } +// +//// 他车车速和自车车速对比速度策略 +//// 自车速度 >= 50% 危险 +//// 10% < 自车速度 < 50% 警告 +// double curSpeed = getCurSpeed(); +// if (curSpeed > 0 && speed > curSpeed) { +// double rate = ((speed - curSpeed) / curSpeed) * 100; +// if (rate >= 50) { +// return Car3DModelColor.Dangerous.color; +// } else if (rate > 10 && rate < 50) { +// return Car3DModelColor.Warming.color; +// } +// } // 默认颜色 - return Car3DModelColor.Normal.color; + switch (fromType) { + case FROM_ADAS: + return Car3DModelColor.Normal_Visual.color; + case FROM_ROAD_UNIT: + return Car3DModelColor.Normal_Cloud.color; + default: + return Car3DModelColor.Normal.color; + } +// return Car3DModelColor.Normal.color; } /** @@ -292,6 +298,9 @@ class BaseDrawer { public enum Car3DModelColor { Normal("#D8D8D8FF"), + Normal_Visual("#D8CFF8BD"), + Normal_Cloud("#D8F8D69B"), + Warming("#FFD53EFF"), Dangerous("#FF3C45FF"); @@ -467,14 +476,4 @@ class BaseDrawer { return new double[]{lon, lat}; } - protected String getDataTypes(int fromType) { - switch (fromType) { - case FROM_MY_LOCATION: - return TYPE_MARKER_CLOUD_DATA; - case FROM_ADAS: - return TYPE_MARKER_ADAS; - default: - return TYPE_MARKER_CLOUD_DATA; - } - } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java index 20bc6015f9..91123607f8 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java @@ -34,6 +34,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_MERGE; + /** * @author congtaowang * @since 2020/10/28 @@ -120,7 +122,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } mMarkersCaches.clear(); mLastPositions.clear(); - sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_CLOUD_DATA); + sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE); return true; } if (data == null || ( @@ -130,7 +132,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic mMarkersCaches.clear(); } mLastPositions.clear(); - sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_CLOUD_DATA); + sendMessage(MSG_REMOVE_DIRTY_MARKERS, DataTypes.TYPE_MARKER_MERGE); return true; } return false; @@ -244,7 +246,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } private void removeUselessLastRecord() { // todo 最好重新设计一个数据结构,用于多线程数据过期失效的场景,参见redis数据过期 - if (mLastPositions == null || mLastPositions.isEmpty()) { + if (mLastPositions.isEmpty()) { return; } IMogoADASController adasControllerApi = MogoApisHandler.getInstance().getApis().getAdasControllerApi(); @@ -302,10 +304,16 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic double[] matchLonLat = getMatchLonLat(cloudRoadData.getUuid(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading(), lastLon, lastLat); SocketDownData.CloudRoadDataProto.Builder builder = cloudRoadData.toBuilder(); - builder.setWgslon(matchLonLat[0]); - builder.setWgslat(matchLonLat[1]); +// builder.setWgslon(matchLonLat[0]); +// builder.setWgslat(matchLonLat[1]); + builder.setWgslon(56.0); + builder.setWgslat(57.0); - cloudRoadData = builder.build(); //todo 验证值是否改变 + double lon = cloudRoadData.getWgslon(); + Log.d(TAG, "test lon : " + lon); + + +// cloudRoadData = builder.build(); mLastPositions.put(uniqueKey, cloudRoadData); @@ -321,7 +329,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic marker.setRotateAngle(((float) cloudRoadData.getHeading())); marker.setPosition(cloudRoadData.getWgslat(), cloudRoadData.getWgslon()); } - marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading())); + marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getFromType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading())); if (shouldShowSpeed(cloudRoadData.getType())) { showSelfSpeed(marker, cloudRoadData.getSpeed(), cloudRoadData.getUuid(), cloudRoadData.getType(), MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()); } @@ -425,7 +433,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } MogoMarkerOptions options = new MogoMarkerOptions() - .owner(getDataTypes(data.getFromType())) + .owner(TYPE_MARKER_MERGE) .anchor(0.5f, 0.5f) .rotate((float) data.getHeading()) .object(data) @@ -435,7 +443,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic String resIdVal; if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { options.set3DMode(true); - options.anchorColor(getModelRenderColor(data.getType(), data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading())); + options.anchorColor(getModelRenderColor(data.getType(), data.getFromType(), data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading())); int resId = getModelRes(data.getType()); resIdVal = resId + ""; options.resName(mMarkerCachesResMd5Values.get(resIdVal)); @@ -446,7 +454,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic options.icon(view); resIdVal = view.getId() + ""; } - IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(getDataTypes(data.getFromType()), options); + IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(TYPE_MARKER_MERGE, options); cacheMarkerIconResMd5Val(resIdVal, marker); if (!TextUtils.isEmpty(data.getSn())) { @@ -502,7 +510,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic } /** - * 展示用户信息米娜版 + * 展示用户信息面版 * * @param data 道路数据 */ diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 4a0a066599..d9e2d98bf4 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -966,9 +966,9 @@ public class MogoServices implements IMogoMapListener, @Override public void onAdasCarDataCallback( ADASCarStateInfo stateInfo ) { -// if(TimeDelayUploadManager.getInstance().isMock()){ //todo 模拟数据下,不更新由工控机传输的自车位置 -// return; -// } + if(TimeDelayUploadManager.getInstance().isMock()){ //模拟数据时,不更新由工控机传输的自车位置 + return; + } if ( stateInfo != null && stateInfo.getValues() != null ) { JSONObject data = new JSONObject(); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index ee1aa969d7..4535a2c389 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -2,8 +2,6 @@ package com.mogo.module.service.marker; import android.content.Context; import android.graphics.Rect; -import android.os.Handler; -import android.os.Message; import android.text.TextUtils; import com.mogo.cloud.socket.entity.SocketDownData; @@ -38,13 +36,11 @@ import com.mogo.module.service.network.RefreshModel; import com.mogo.realtime.api.MoGoAiCloudRealTime; import com.mogo.realtime.socket.IMogoCloudOnMsgListener; import com.mogo.service.adas.IMogoADASControlStatusChangedListener; -import com.mogo.service.adas.entity.ADASRecognizedResult; import com.mogo.service.module.IMogoBizActionDoneListener; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.ViewUtils; -import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; import com.zhidao.carchattingprovider.ICallChatResponse; @@ -148,7 +144,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, @Override public void onMsgReceived(SocketDownData.LauncherSnapshotProto mogoSnapshotSetData) { DebugConfig.setStatus(DebugConfig.sDownloadSnapshot, true); -// SnapshotSetDataDrawer.getInstance().renderSnapshotData(mogoSnapshotSetData); //todo 6月4号 提测版本中去掉云端下发数据展示 + SnapshotSetDataDrawer.getInstance().renderSnapshotData(mogoSnapshotSetData); //todo 6月4号 提测版本中去掉云端下发数据展示 // Message msg = mSnapshotHandler.obtainMessage(); // msg.obj = mogoSnapshotSetData; // msg.what = MSG_SNAPSHOT; @@ -158,11 +154,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // adas 每隔一定频率传递过来的数据 MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback(resultList -> { + AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList); // Message msg = mSnapshotHandler.obtainMessage(); // msg.obj = resultList; // msg.what = MSG_ADAS; // msg.sendToTarget(); - AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList); //添加自车的定位图标,碰撞只有一个预警,还需要和adas 联调, // for ( ADASRecognizedResult result : resultList) {