[6.5.0]fix bug of rombie and wait to replace iconres , and add func of identify remove when 1000 delay has no data , plus trace log and bug ,which has java contain the pb

This commit is contained in:
EmArrow
2024-07-09 20:03:28 +08:00
parent 647fd8aa46
commit 03ca894088
16 changed files with 146 additions and 68 deletions

View File

@@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.business.ai
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.util.Log
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -18,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_RO
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_READY_START
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_START
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_RANGE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REJECT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST_DELAY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST_ERROR
@@ -122,7 +122,12 @@ class RomaManager() : IMoGoPlanningRottingListener,
&& CallerMapIdentifyManager.roam.first!= TAG
&& CallerMapIdentifyManager.roam.second) {
ToastUtils.showLong("正在展示路口漫游,请稍后重试")
Log.e("emArrow", "正在展示路口漫游,请稍后重试")
MapRomaTrace.log(
"",
CHAIN_CODE_ROMA_REJECT,
TAG,
mutableMapOf("reject" to "正在展示路口,点触漫游按钮")
)
CallerMapRomaListener.invokeMapRoma(false)
return
}

View File

@@ -1,8 +1,12 @@
package com.mogo.eagle.core.function.business.identify
import android.annotation.SuppressLint
import android.os.Handler
import android.os.Looper
import android.util.Log
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.traffic.TrafficData
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.map.identify.MogoIdentifyManager
import mogo.telematics.pad.MessagePad
import mogo.telematics.pad.MessagePad.TrackedObject
@@ -38,6 +42,7 @@ class IdentifyBeautifyDataDrawer : Identify {
//清除缓存
TrackManager.getInstance().clearCache(resultList)
val filterList = TrackManager.getInstance().filterTrafficData(resultList)
if (filterList.size > 0) {
// 绘制新数据

View File

@@ -12,15 +12,16 @@ import com.mogo.eagle.core.function.call.obu.CallerObuWarningListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isTaxi
import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler
import com.mogo.eagle.core.utilcode.util.ParseVersionUtils
import com.mogo.map.MogoMap
import com.zhjt.service.chain.ChainLog
import mogo.telematics.pad.MessagePad
import mogo.telematics.pad.MessagePad.TrackedObject
import mogo.yycp.api.proto.SocketDownData
import java.util.concurrent.TimeUnit
object IdentifyFactory : Identify, IMoGoObuStatusListener, IMoGoAutopilotCarConfigListener {
private const val TAG = "IdentifyFactory"
private const val MSG_CHECK = 999
object DriverIdentify {
internal val originDataDrawer = IdentifyOriginDataDrawer()
@@ -36,13 +37,15 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener, IMoGoAutopilotCarConf
private var identify: Identify? = null
private var aiCloudIdentify: Identify? = null
private var startTime: Long = 0L
fun initType(){
fun initType() {
drawType("默认开启感知优化等待docker版本")
identify = UserIdentify.beautifyDataDrawer
aiCloudIdentify = AiIdentify.aiCloudDataDrawer
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerObuWarningListenerManager.addListener(TAG, this)
mDrawerHandler.sendEmptyMessageDelayed(MSG_CHECK, 1000L)
}
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
@@ -105,34 +108,57 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener, IMoGoAutopilotCarConf
}
}
when (msg.what) {
MSG_CHECK -> {
if(startTime == 0L){
sendEmptyMessageDelayed(MSG_CHECK, 1000L)
return
}
val endTime = System.nanoTime()
val internal = TimeUnit.NANOSECONDS.toMillis(endTime - startTime)
if(internal >= 1000){
identify!!.clearOldMarker()
}
sendEmptyMessageDelayed(MSG_CHECK, 1000L)
}
MSG_DATA_TRACK -> {
if (msg.obj is List<*>) {
identify!!.renderAdasRecognizedResult(msg.obj as List<TrackedObject>?)
startTime = System.nanoTime()
}
}
MSG_DATA_AI_TRACK -> {
if (msg.obj is List<*>) {
aiCloudIdentify!!.renderAiCloudResult(msg.obj as List<SocketDownData.CloudRoadDataProto>, msg.data.getString("mapInstance")!!)
aiCloudIdentify!!.renderAiCloudResult(
msg.obj as List<SocketDownData.CloudRoadDataProto>,
msg.data.getString("mapInstance")!!
)
}
}
MSG_DATA_WARNING -> {
if (msg.obj is List<*>) {
identify!!.renderPlanningWarningObj(msg.obj as List<MessagePad.PlanningObject>?)
}
}
MSG_DATA_OBU_WARNING_UPDATE -> {
if (msg.obj is TrafficData) {
identify!!.renderOBUWarningObj(true, msg.obj as TrafficData)
}
}
MSG_DATA_OBU_WARNING_REMOVE -> {
if (msg.obj is TrafficData) {
identify!!.renderOBUWarningObj(false, msg.obj as TrafficData)
}
}
MSG_DATA_CLEAR -> {
identify!!.clearOldMarker()
}
MSG_DATA_AI_CLEAR -> {
aiCloudIdentify!!.clearAiMarker(msg.data.getString("mapInstance")!!)
}
@@ -147,11 +173,14 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener, IMoGoAutopilotCarConf
mDrawerHandler.sendMessage(message)
}
override fun renderAiCloudResult(resultList: List<SocketDownData.CloudRoadDataProto>, mapInstance:String) {
override fun renderAiCloudResult(
resultList: List<SocketDownData.CloudRoadDataProto>,
mapInstance: String
) {
val message = Message.obtain()
message.what = MSG_DATA_AI_TRACK
message.obj = resultList
message.data.putString("mapInstance",mapInstance)
message.data.putString("mapInstance", mapInstance)
mDrawerHandler.sendMessage(message)
}
@@ -168,10 +197,10 @@ object IdentifyFactory : Identify, IMoGoObuStatusListener, IMoGoAutopilotCarConf
mDrawerHandler.sendMessage(message)
}
override fun clearAiMarker(mapInstance:String) {
override fun clearAiMarker(mapInstance: String) {
val message = Message.obtain()
message.what = MSG_DATA_AI_CLEAR
message.data.putString("mapInstance",mapInstance)
message.data.putString("mapInstance", mapInstance)
mDrawerHandler.sendMessage(message)
}

View File

@@ -76,6 +76,7 @@ class IdentifyOriginDataDrawer : Identify {
mMarkersCaches.remove(key)
MogoIdentifyManager.getInstance()
.removeMarker(key)
TrackerSourceFilterHelper.removeBottomMarker(key)
}
val filterList = filterTrafficData(resultList)
@@ -109,6 +110,7 @@ class IdentifyOriginDataDrawer : Identify {
mFilterTrafficData[uuid] = temp
mMarkersCaches[uuid] = temp
trafficDataUuidList.add(uuid)
TrackerSourceFilterHelper.filterZombieMarker(data)
}
return mFilterTrafficData
}
@@ -121,6 +123,7 @@ class IdentifyOriginDataDrawer : Identify {
for (uuid in trafficDataUuidList) {
MogoIdentifyManager.getInstance()
.removeMarker(uuid)
TrackerSourceFilterHelper.removeBottomMarker(uuid)
}
trafficDataUuidList.clear()
mMarkersCaches.clear()

View File

@@ -1,5 +1,7 @@
package com.mogo.eagle.core.function.business.identify;
import static com.mogo.map.MogoMap.DEFAULT;
import android.annotation.SuppressLint;
import android.util.ArraySet;
@@ -9,7 +11,6 @@ import com.mogo.eagle.core.data.enums.TrafficTypeEnum;
import com.mogo.eagle.core.data.traffic.TrafficData;
import com.mogo.eagle.core.utilcode.geometry.S2CellId;
import com.mogo.eagle.core.utilcode.geometry.S2LatLng;
import com.mogo.map.MogoMap;
import com.mogo.map.identify.MogoIdentifyManager;
import java.util.HashMap;
@@ -124,6 +125,7 @@ public class TrackManager {
cellIdCaches.forcePut(uuid, trackObj.getCellIdPos());
mMarkersCaches.put(uuid, trackObj);
trafficDataUuid.add(uuid);
TrackerSourceFilterHelper.INSTANCE.filterZombieMarker(data);
}
//Log.i("costTime","" + (System.currentTimeMillis() - cost));
}
@@ -156,7 +158,8 @@ public class TrackManager {
mMarkersCaches.remove(key);
WarningHelper.INSTANCE.remove(key);
MogoIdentifyManager.getInstance()
.removeMarker(key, MogoMap.DEFAULT);
.removeMarker(key, DEFAULT);
TrackerSourceFilterHelper.INSTANCE.removeBottomMarker(key);
}
@SuppressLint("NewApi")
@@ -167,7 +170,8 @@ public class TrackManager {
mMarkersCaches.forEach((uuid, trackObj) -> {
trackObj.clear();
MogoIdentifyManager.getInstance()
.removeMarker(uuid, MogoMap.DEFAULT);
.removeMarker(uuid, DEFAULT);
TrackerSourceFilterHelper.INSTANCE.removeBottomMarker(uuid);
});
mMarkersCaches.clear();
}

View File

@@ -3,20 +3,21 @@ package com.mogo.eagle.core.function.business.identify
import android.annotation.SuppressLint
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.mogo.eagle.core.function.call.biz.CallerFuncBizListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.map.R
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isTaxi
import com.mogo.map.overlay.core.Level
import com.mogo.map.overlay.point.Point
import com.zhidaoauto.map.sdk.open.renders.marker.Marker
import com.zhidaoauto.map.sdk.open.renders.marker.MarkerOptions
import mogo.telematics.pad.MessagePad.*
import mogo.telematics.pad.MessagePad
import mogo.telematics.pad.MessagePad.SubSource
import mogo.telematics.pad.MessagePad.TrackedObject
import mogo.telematics.pad.MessagePad.TrackedSource
object TrackerSourceFilterHelper {
private const val TAG = "TrackerSourceColor"
private val cacheZombieMap = mutableMapOf<String, Point.Options>()
@SuppressLint("NewApi")
fun filterData(data: TrackedObject): Boolean {
@@ -31,16 +32,19 @@ object TrackerSourceFilterHelper {
1 -> if (isIPC(data)) {
trackIPCFilter = false
}
2 -> {
if (isObu(data).second) {
trackIPCFilter = false
}
}
3 -> {
if (isV2I(data).second) {
trackIPCFilter = false
}
}
4 -> {
if (isV2nRSM(data).second) {
trackIPCFilter = false
@@ -63,15 +67,15 @@ object TrackerSourceFilterHelper {
return ""
}
if(data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_CONE.type){
if (data.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_CONE.type) {
return ""
}
if(FunctionBuildConfig.isFusionColor){
if(isFusion(data)){
if (FunctionBuildConfig.isFusionColor) {
if (isFusion(data)) {
color = "#982FFFFF"
}
if(isV2X(data)){
if (isV2X(data)) {
color = "#F6F6F6FF"
}
}
@@ -99,43 +103,61 @@ object TrackerSourceFilterHelper {
}
//僵尸车
if (data.addAttribute == AdditionalAttribute.ATTR_ZOMBIE) {
// if (data.addAttribute == AdditionalAttribute.ATTR_ZOMBIE) {
// color = "#7A8499FF"
// if (FunctionBuildConfig.skinMode == 1) {
// color = "#9BA8BCFF"
// }
val opt = Point.Options.Builder(TAG,Level.MAP_MARKER)
.setId(data.uuid.toString())
.latitude(data.latitude)
.longitude(data.longitude)
.isUseGps(true)
.rotate(data.heading.toFloat())
.setAnimResource(R.raw.yujingguangquan)
.setDisplayAnim(true)
.setAnimScale(getAnimScale(data.type))
.build()
CallerMapUIServiceManager.getOverlayManager()?.updateAnimPoint(opt)
//消息埋点
CallerFuncBizListenerManager.invokeAttrZombieAnalyticsEvent()
}
// }
return color
}
private fun getAnimScale(type:Int):Float{
return when (type) {
TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE.type -> {
2.6f
}
TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS.type, TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK.type -> {
4.0f
}
else -> {
0f
fun filterZombieMarker(data: TrackedObject){
if (data.addAttribute == MessagePad.AdditionalAttribute.ATTR_ZOMBIE) {
if (!cacheZombieMap.contains(data.uuid.toString())) {
val opt = updateBottomMarker(data)
cacheZombieMap[data.uuid.toString()] = opt
}else{
val opt = cacheZombieMap[data.uuid.toString()]
opt?.let {
val build = it.builder().latitude(data.latitude).longitude(data.longitude).rotate(data.heading.toFloat()).build()
cacheZombieMap[data.uuid.toString()] = build
CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(build)
}
}
}
}
private fun updateBottomMarker(data: TrackedObject) : Point.Options{
val scale = when (data.type) {
TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.type,
TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE.type ,
TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO.type -> 0.1f
TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE.type -> 0.16f
TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS.type,
TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK.type -> 0.19f
else -> 0.2f
}
val opt = Point.Options.Builder(TAG, Level.DEFAULT)
.setId("9999" + data.uuid.toString())
.latitude(data.latitude)
.longitude(data.longitude)
.isUseGps(true)
.rotate(data.heading.toFloat())
.icon3DRes(R.raw.yujingguangquan)
.scale(scale)
.set3DMode(true)
.build()
CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(opt)
return opt
}
fun removeBottomMarker(id: String){
CallerMapUIServiceManager.getOverlayManager()?.removePoint("9999$id")
cacheZombieMap.remove(id)
}
/**
* 过滤所有 工控感知数据 all match
*/

View File

@@ -42,8 +42,8 @@ class NDERoadCameraNetWorkModel private constructor() {
crossID,
loc.longitude,
loc.latitude,
// CallerMapUIServiceManager.getCityCode() ?: ""
"0734"
CallerMapUIServiceManager.getCityCode() ?: ""
// "0734" //todo emArrow test
)
}
}
@@ -75,8 +75,8 @@ class NDERoadCameraNetWorkModel private constructor() {
ip,
loc.longitude,
loc.latitude,
// CallerMapUIServiceManager.getCityCode() ?: ""
"0734"
CallerMapUIServiceManager.getCityCode() ?: ""
// "0734" //todo emArrow test
)
}
}

View File

@@ -2,10 +2,9 @@ package com.mogo.eagle.core.function.view
import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.util.AttributeSet
import android.util.Log
import androidx.lifecycle.LifecycleObserver
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
import com.mogo.eagle.core.function.api.map.roma.IMoGoAiCloudIdentifyDataListener
import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.aiCloudIdentifyDataManager
@@ -13,12 +12,15 @@ import com.mogo.eagle.core.function.business.identify.MapIdentifySubscriber
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapAiCloudDataManager
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider
import com.mogo.map.MogoMap.Companion.MAP_ROAM
import com.mogo.map.MogoMapView
import com.mogo.map.uicontroller.IMogoMapUIController
import com.mogo.map.uicontroller.VisualAngleMode
import com.zhjt.service.chain.ChainLog
import mogo.yycp.api.proto.SocketDownData
@@ -79,15 +81,16 @@ class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context
loc.latitude = latLng.first
loc.longitude = latLng.second
setExtraGPSData(loc)
val dis = CoordinateUtils.calculateLineDistance(curLat, curLng, latLng.first, latLng.second)
Log.i("emArrow", "$TAG 开始漫游 latLng:$latLng , curLat:$curLat , curLng:$curLng , dis:$dis")
val dis =
CoordinateUtils.calculateLineDistance(curLat, curLng, latLng.first, latLng.second)
// 开始漫游
trace(TAG, mapOf("startRoadRoam" to Pair("latLng" to latLng, "dis" to dis), "dis" to dis))
aiCloudIdentifyDataManager.trigger(true, 1, 300, latLng.first, latLng.second)
}
}
override fun response(requestStatus: Boolean, errorMsg: String?) {
Log.e("emArrow","road map response:$requestStatus , errorMsg:${errorMsg?:""}")
trace(TAG, mapOf("response" to requestStatus, "errorMsg" to (errorMsg?:"")))
}
override fun onAiIdentifyData(obj: SocketDownData.SocketDownDataProto?) {
@@ -114,4 +117,14 @@ class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context
getUI()?.setVisible(false)
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_STATUS,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ROAD_ROMA,
paramIndexes = [0, 1]
)
private fun trace(tag: String, obj: Any) {
CallerLogger.d("$M_MAP$tag", "$obj")
}
}

View File

@@ -5,7 +5,6 @@ import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.animation.LinearInterpolator
@@ -18,6 +17,8 @@ import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager
import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager
import com.mogo.eagle.core.function.map.R
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhidaoauto.map.data.road.StopLine
@@ -92,12 +93,11 @@ class RoadCrossRoamView @JvmOverloads constructor(
override fun onStopLineInfo(info: StopLine) {
super.onStopLineInfo(info)
if(info.distance == 0.0){
Log.i("emArrow", "showState return , distance is zero")
if(info.distance == 0.0 || info.distance > 200){
CallerLogger.d("$M_MAP$TAG", "showState return , distance is ${info.distance}")
return
}
showState = info.distance < 200 && info.distance > 100
// Log.i("emArrow", "showState $showState , distance:${info.distance}")
showState = info.distance <= 200 && info.distance > 100
}
private fun attachView() {