增加未知类型绘制开关按钮
增加未知类型计数

Signed-off-by: donghongyu <donghongyu@zhidaoauto.com>
This commit is contained in:
donghongyu
2022-03-01 18:46:47 +08:00
parent 193f7f4c4b
commit e447fb1a3e
6 changed files with 107 additions and 83 deletions

View File

@@ -27,7 +27,7 @@ project.android.productFlavors {
buildConfigField 'int', 'GPS_PROVIDER', "1" buildConfigField 'int', 'GPS_PROVIDER', "1"
// 构建的应用身份类型,司机|乘客 // 构建的应用身份类型,司机|乘客
buildConfigField 'int', 'APP_IDENTITY_MODE', "0x02" buildConfigField 'int', 'APP_IDENTITY_MODE', "0x00"
// 连接的工控机IP地址 // 连接的工控机IP地址
buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.104\"" buildConfigField 'String', 'ADAS_CONNECT_IP', "\"192.168.1.104\""
// 构建的是否是演示(美化)模式 // 构建的是否是演示(美化)模式

View File

@@ -4,7 +4,6 @@ import android.Manifest.permission
import android.content.Context import android.content.Context
import androidx.annotation.RequiresPermission import androidx.annotation.RequiresPermission
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.autopilot.AutopilotControlCmdParameter import com.mogo.eagle.core.data.autopilot.AutopilotControlCmdParameter
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -17,6 +16,7 @@ import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasMsgConnectStatusLi
import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager
import com.mogo.eagle.core.function.autopilot.server.AsyncDataToAutopilotServer import com.mogo.eagle.core.function.autopilot.server.AsyncDataToAutopilotServer
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.GsonUtils
@@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit
*/ */
@Route(path = MogoServicePaths.PATH_AUTO_PILOT) @Route(path = MogoServicePaths.PATH_AUTO_PILOT)
class MoGoAutopilotProvider : class MoGoAutopilotProvider :
IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener { IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener {
private val TAG = "MoGoAutoPilotProvider" private val TAG = "MoGoAutoPilotProvider"
private var mContext: Context? = null private var mContext: Context? = null
@@ -51,19 +51,17 @@ class MoGoAutopilotProvider :
CupidLogUtils.setEnableLog(false) CupidLogUtils.setEnableLog(false)
CupidLogUtils.setIsWriteLog(false) CupidLogUtils.setIsWriteLog(false)
// TODO 临时方案根据不同的身份标识连接不同的工控机IP // TODO 临时方案根据不同的身份标识连接不同的工控机IP
when (FunctionBuildConfig.appIdentityMode) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机
0x00 -> // 司机 // 注册地图采集功能
{ CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this)
// 注册地图采集功能 // "192.168.1.102"
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this) val options = AdasOptions.Builder()
// "192.168.1.102" .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN)
val options = AdasOptions.Builder() .setIpcAssignIP(FunctionBuildConfig.adasConnectIP)
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION)
.setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext))
.setClient(false) .setClient(false)
.build() .build()
AdasManager.getInstance().create(context, options) AdasManager.getInstance().create(context, options)
// NSDNettyManager.getInstance().startNSDNettyServer(context, object : NettyServerListener<MogoProtocolMsg> { // NSDNettyManager.getInstance().startNSDNettyServer(context, object : NettyServerListener<MogoProtocolMsg> {
// override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { // override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
// Logger.d(TAG, "Receive client data is:${msg?.toString()}") // Logger.d(TAG, "Receive client data is:${msg?.toString()}")
@@ -89,18 +87,17 @@ class MoGoAutopilotProvider :
// Logger.d(TAG, "onChannelDisConnect") // Logger.d(TAG, "onChannelDisConnect")
// } // }
// }) // })
} } else {// 乘客
0x01 -> // 乘客 // 乘客端默认接收绘制全局路径+引导线
{ //FunctionBuildConfig.isDemoMode = true
// 乘客端默认接收绘制全局路径+引导线 //FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true
//FunctionBuildConfig.isDemoMode = true // "192.168.1.103"
//FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true val options = AdasOptions.Builder()
// "192.168.1.102" .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN)
val options = AdasOptions .setIpcAssignIP(FunctionBuildConfig.adasConnectIP)
.Builder()
.setClient(true) .setClient(true)
.build() .build()
AdasManager.getInstance().create(context, options) AdasManager.getInstance().create(context, options)
// NSDNettyManager.getInstance().searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object : NettyClientListener<MogoProtocolMsg> { // NSDNettyManager.getInstance().searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object : NettyClientListener<MogoProtocolMsg> {
// override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) { // override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) {
// Logger.d(TAG, "收到司机端的数据!") // Logger.d(TAG, "收到司机端的数据!")
@@ -121,22 +118,11 @@ class MoGoAutopilotProvider :
// } // }
// } // }
// }) // })
}
//
else -> // 默认采用UDP寻址方式
{
val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION)
.setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext))
.setClient(false)
.build()
AdasManager.getInstance().create(context, options)
}
} }
//////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// //////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听/////////////////////////////////////////////
// 监听 adas 连接状态 // 监听 adas 连接状态
AdasManager.getInstance() AdasManager.getInstance()
.setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl()) .setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl())
// 监听ADAS-SDK获取到的工控机数据(乘客也需注册) // 监听ADAS-SDK获取到的工控机数据(乘客也需注册)
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
// // 司机端监听 // // 司机端监听
@@ -240,7 +226,7 @@ class MoGoAutopilotProvider :
override fun recordPackage(): Boolean { override fun recordPackage(): Boolean {
return AdasManager.getInstance() return AdasManager.getInstance()
.recordPackage(1, (System.currentTimeMillis() / 1000).toInt()) .recordPackage(1, (System.currentTimeMillis() / 1000).toInt())
} }
override fun recordPackage(type: Int, id: Int): Boolean { override fun recordPackage(type: Int, id: Int): Boolean {

View File

@@ -14,6 +14,7 @@ import com.mogo.eagle.core.data.autopilot.*
import com.mogo.eagle.core.data.chain.ChainConstant import com.mogo.eagle.core.data.chain.ChainConstant
import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.constants.MoGoConfig
import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.obu.ObuStatusInfo import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.data.traffic.TrafficData import com.mogo.eagle.core.data.traffic.TrafficData
@@ -44,12 +45,7 @@ import com.mogo.eagle.core.utilcode.mogo.toast.TipToast
import com.mogo.eagle.core.utilcode.util.* import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.MogoMap import com.mogo.map.MogoMap
import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_300 import com.mogo.map.uicontroller.VisualAngleMode.*
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP
import com.mogo.map.uicontroller.VisualAngleMode.MODE_CLOSE_SIGHT
import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT
import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT
import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.MogoApisHandler
import kotlinx.android.synthetic.main.view_debug_setting.view.* import kotlinx.android.synthetic.main.view_debug_setting.view.*
import java.util.* import java.util.*
@@ -61,13 +57,13 @@ import java.util.*
* 展示 本机、网络、工控机、OBU等状态信息支持设置IP等参数进行调试 * 展示 本机、网络、工控机、OBU等状态信息支持设置IP等参数进行调试
*/ */
class DebugSettingView @JvmOverloads constructor( class DebugSettingView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener, ) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener,
IMoGoAutopilotStatusListener, IMoGoAutopilotCarStateListener, IMoGoAutopilotStatusListener, IMoGoAutopilotCarStateListener,
IMoGoMapLocationListener, IMoGoAutopilotIdentifyListener, IMoGoMapLocationListener, IMoGoAutopilotIdentifyListener,
IMoGoAutopilotPlanningListener { IMoGoAutopilotPlanningListener {
private val TAG = "DebugSettingView" private val TAG = "DebugSettingView"
@@ -77,9 +73,12 @@ class DebugSettingView @JvmOverloads constructor(
private var mAutoPilotStatusInfo: AutopilotStatusInfo? = null private var mAutoPilotStatusInfo: AutopilotStatusInfo? = null
private var mAutoPilotCarStateInfo: AutopilotCarStateInfo? = null private var mAutoPilotCarStateInfo: AutopilotCarStateInfo? = null
// 感知识别数据个数 // 感知识别「已知类型」数据个数
private var mIdentifyDataSize = 0 private var mIdentifyDataSize = 0
// 感知识别「未知类型」数据个数
private var mUnknownIdentifyDataSize = 0
// 引导线点个数 // 引导线点个数
private var mTrajectoryInfoSize = 0 private var mTrajectoryInfoSize = 0
@@ -247,14 +246,14 @@ class DebugSettingView @JvmOverloads constructor(
tvObuInfo.text = CallerObuListenerManager.getObuStatusInfoJsonString() tvObuInfo.text = CallerObuListenerManager.getObuStatusInfoJsonString()
tvAutopilotInfo.text = tvAutopilotInfo.text =
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfoJsonString() CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfoJsonString()
// 绘制应用基本信息 // 绘制应用基本信息
drawAppInfo() drawAppInfo()
// 初始化OBU IP信息 // 初始化OBU IP信息
val ipAddress = val ipAddress =
SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, "192.168.1.199") SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, "192.168.1.199")
etObuIP.setText(ipAddress) etObuIP.setText(ipAddress)
etObuIP.text?.let { etObuIP.setSelection(it.length) } etObuIP.text?.let { etObuIP.setSelection(it.length) }
@@ -270,8 +269,8 @@ class DebugSettingView @JvmOverloads constructor(
// 初始化工控机 IP信息 // 初始化工控机 IP信息
val autoPilotIpAddress = val autoPilotIpAddress =
SharedPrefsMgr.getInstance(context) SharedPrefsMgr.getInstance(context)
.getString(MoGoConfig.AUTOPILOT_IP, FunctionBuildConfig.adasConnectIP) .getString(MoGoConfig.AUTOPILOT_IP, FunctionBuildConfig.adasConnectIP)
etAutopilotIP.setText(autoPilotIpAddress) etAutopilotIP.setText(autoPilotIpAddress)
etAutopilotIP.text?.let { etAutopilotIP.setSelection(it.length) } etAutopilotIP.text?.let { etAutopilotIP.setSelection(it.length) }
@@ -292,18 +291,18 @@ class DebugSettingView @JvmOverloads constructor(
// 初始化 GSP数据源 数据 // 初始化 GSP数据源 数据
rgGpsProvider.check( rgGpsProvider.check(
when (FunctionBuildConfig.gpsProvider) { when (FunctionBuildConfig.gpsProvider) {
0 -> { 0 -> {
R.id.rbGpsProviderAndroid R.id.rbGpsProviderAndroid
}
1 -> {
R.id.rbGpsProviderRTK
}
2 -> {
R.id.rbGpsProviderOBU
}
else -> R.id.rbGpsProviderAndroid
} }
1 -> {
R.id.rbGpsProviderRTK
}
2 -> {
R.id.rbGpsProviderOBU
}
else -> R.id.rbGpsProviderAndroid
}
) )
rgGpsProvider.setOnCheckedChangeListener { group, checkedId -> rgGpsProvider.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) { when (checkedId) {
@@ -325,6 +324,12 @@ class DebugSettingView @JvmOverloads constructor(
FunctionBuildConfig.isDrawIdentifyData = isChecked FunctionBuildConfig.isDrawIdentifyData = isChecked
} }
// 初始化 ADAS感知数据是否绘制 选择情况
tbIsDrawUnknownIdentifyData.isChecked = FunctionBuildConfig.isDrawUnknownIdentifyData
tbIsDrawUnknownIdentifyData.setOnCheckedChangeListener { buttonView, isChecked ->
FunctionBuildConfig.isDrawUnknownIdentifyData = isChecked
}
// 初始化 OBU感知数据是否绘制 选择情况 // 初始化 OBU感知数据是否绘制 选择情况
tbIsDrawOBUIdentifyData.isChecked = FunctionBuildConfig.isDrawObuIdentifyData tbIsDrawOBUIdentifyData.isChecked = FunctionBuildConfig.isDrawObuIdentifyData
tbIsDrawOBUIdentifyData.setOnCheckedChangeListener { buttonView, isChecked -> tbIsDrawOBUIdentifyData.setOnCheckedChangeListener { buttonView, isChecked ->
@@ -385,7 +390,7 @@ class DebugSettingView @JvmOverloads constructor(
} }
tbLogCatch.isChecked = tbLogCatch.isChecked =
SharedPrefsMgr.getInstance(context).getBoolean(MoGoConfig.CATCH_LOG, false) SharedPrefsMgr.getInstance(context).getBoolean(MoGoConfig.CATCH_LOG, false)
tbLogCatch.setOnCheckedChangeListener { _, isChecked -> tbLogCatch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
val logCatchTime = etLogCatch.text.toString().toInt() val logCatchTime = etLogCatch.text.toString().toInt()
@@ -400,20 +405,20 @@ class DebugSettingView @JvmOverloads constructor(
} }
} }
CallerDevaToolsListenerManager.registerDevaToolsLogCatchListener(TAG, CallerDevaToolsListenerManager.registerDevaToolsLogCatchListener(TAG,
object : IMoGoDevaToolsListener { object : IMoGoDevaToolsListener {
override fun onLogCatchClose() { override fun onLogCatchClose() {
super.onLogCatchClose() super.onLogCatchClose()
tbLogCatch.isChecked = false tbLogCatch.isChecked = false
} }
override fun onLogCatch(lineLog: String) { override fun onLogCatch(lineLog: String) {
logInfoView?.let { logInfoView?.let {
if (logViewAttach) { if (logViewAttach) {
it.onLogCatch(lineLog) it.onLogCatch(lineLog)
}
} }
} }
} })
})
tbLogDebugView.setOnCheckedChangeListener { _, isChecked -> tbLogDebugView.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
logInfoView = LogInfoView() logInfoView = LogInfoView()
@@ -476,18 +481,20 @@ class DebugSettingView @JvmOverloads constructor(
tvAutopilotInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo) tvAutopilotInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo)
tvCarInfo.text = tvCarInfo.text =
"GPS时间${mAutoPilotCarStateInfo?.values?.satelliteTime}\n" + "GPS时间${mAutoPilotCarStateInfo?.values?.satelliteTime}\n" +
"自车经纬度:\n${mAutoPilotCarStateInfo?.values?.lon}\n${mAutoPilotCarStateInfo?.values?.lat}\n" "自车经纬度:\n${mAutoPilotCarStateInfo?.values?.lon}\n${mAutoPilotCarStateInfo?.values?.lat}\n"
tvIdentifyInfo.text = tvIdentifyInfo.text =
"感知数据个数:${mIdentifyDataSize}" "「有效类型」感知数据个数:${mIdentifyDataSize}\n" +
"「未知类型」感知数据个数:${mUnknownIdentifyDataSize}\n"
tvTrajectoryInfoSize.text = tvTrajectoryInfoSize.text =
"引导线点个数:${mTrajectoryInfoSize}" "引导线点个数:${mTrajectoryInfoSize}"
tvRouteInfoSize.text = tvRouteInfoSize.text =
"全局路径规划点个数:${mRouteInfoSize}" "全局路径规划点个数:${mRouteInfoSize}"
// 用完之后重制为0防止节点回掉突然没数据导致页面显示还是之前的数据情况 // 用完之后重制为0防止节点回掉突然没数据导致页面显示还是之前的数据情况
mIdentifyDataSize = 0 mIdentifyDataSize = 0
mUnknownIdentifyDataSize = 0
mTrajectoryInfoSize = 0 mTrajectoryInfoSize = 0
mRouteInfoSize = 0 mRouteInfoSize = 0
} }
@@ -534,7 +541,17 @@ class DebugSettingView @JvmOverloads constructor(
} }
override fun onAutopilotIdentifyDataUpdate(trafficData: ArrayList<TrafficData>?) { override fun onAutopilotIdentifyDataUpdate(trafficData: ArrayList<TrafficData>?) {
mIdentifyDataSize = trafficData?.size ?: 0 // 重制数据
mIdentifyDataSize = 0
mUnknownIdentifyDataSize = 0
// 遍历计数
trafficData?.forEach {
if (it.type == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI) {
mUnknownIdentifyDataSize++
} else {
mIdentifyDataSize++
}
}
} }
override fun onAutopilotWarnMessage(autopilotWarnMessage: AutopilotWarnMessage?) { override fun onAutopilotWarnMessage(autopilotWarnMessage: AutopilotWarnMessage?) {

View File

@@ -274,6 +274,16 @@
android:textOn="关闭鹰眼感知" android:textOn="关闭鹰眼感知"
android:textSize="@dimen/dp_24" /> android:textSize="@dimen/dp_24" />
<ToggleButton
android:id="@+id/tbIsDrawUnknownIdentifyData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:gravity="center"
android:textOff="显示「未知类型」感知"
android:textOn="关闭「未知类型」感知"
android:textSize="@dimen/dp_24" />
<ToggleButton <ToggleButton
android:id="@+id/tbIsDrawOBUIdentifyData" android:id="@+id/tbIsDrawOBUIdentifyData"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -59,6 +59,15 @@ object FunctionBuildConfig {
@JvmField @JvmField
var isDrawIdentifyData = true var isDrawIdentifyData = true
/**
* 地图是否绘制Adas识别回调的「未知类型」Marker
* true - 绘制
* false - 不绘制
*/
@Volatile
@JvmField
var isDrawUnknownIdentifyData = false
/** /**
* 地图是否绘制 OBU 识别回调的Marker * 地图是否绘制 OBU 识别回调的Marker
* true - 绘制 * true - 绘制

View File

@@ -3,6 +3,7 @@ package com.mogo.module.common.drawer;
import android.content.Context; import android.content.Context;
import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.data.enums.TrafficTypeEnum; import com.mogo.eagle.core.data.enums.TrafficTypeEnum;
import com.mogo.eagle.core.data.traffic.TrafficData; import com.mogo.eagle.core.data.traffic.TrafficData;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
@@ -83,7 +84,8 @@ public class IdentifyDataDrawer {
for (TrafficData trafficData : resultList) { for (TrafficData trafficData : resultList) {
// 过滤掉未知感知数据 // 过滤掉未知感知数据
if (trafficData.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI) { if (!FunctionBuildConfig.isDrawUnknownIdentifyData &&
trafficData.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI) {
//Logger.w(TAG, "未知感知类型数据,丢弃,不渲染"); //Logger.w(TAG, "未知感知类型数据,丢弃,不渲染");
continue; continue;
} }