This commit is contained in:
zhongchao
2021-11-12 13:13:37 +08:00
parent 2afebb9525
commit b6165fbb2d
9 changed files with 48 additions and 39 deletions

View File

@@ -32,19 +32,27 @@ class TrafficLightHMIManager {
CallerHmiManager.showWarningTrafficLight(3)
if (trafficLightStatus.remain != 99999) {
CallerHmiManager.changeCountdownGreen(trafficLightStatus.remain)
CallerHmiManager.changeCountdownRed(-1)
CallerHmiManager.changeCountdownYellow(-1)
}
}
trafficLightStatus.isFlashGreen() -> {
CallerHmiManager.showWarningTrafficLight(3)
CallerHmiManager.changeCountdownGreen(trafficLightStatus.remain)
CallerHmiManager.changeCountdownRed(-1)
CallerHmiManager.changeCountdownYellow(-1)
}
trafficLightStatus.isYellow() -> {
CallerHmiManager.showWarningTrafficLight(2)
CallerHmiManager.changeCountdownYellow(trafficLightStatus.remain)
CallerHmiManager.changeCountdownGreen(-1)
CallerHmiManager.changeCountdownRed(-1)
}
trafficLightStatus.isRed() -> {
CallerHmiManager.showWarningTrafficLight(1)
CallerHmiManager.changeCountdownRed(trafficLightStatus.remain)
CallerHmiManager.changeCountdownGreen(-1)
CallerHmiManager.changeCountdownYellow(-1)
}
}
}

View File

@@ -38,7 +38,7 @@ class TrafficLightProvider : ITrafficLightProvider {
}
override fun onDestroy() {
//todo MogoTrafficLightManager onDestroy
MogoTrafficLightManager.INSTANCE.onDestroy()
}
}

View File

@@ -40,28 +40,18 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
fun initServer(context: Context) {
mContext = context
MogoApisHandler.getInstance().apis.registerCenterApi.registerCarLocationChangedListener(
TAG,
this
)
Logger.d(TAG, "ready to start mThreadHandler")
MogoApisHandler.getInstance().apis
.registerCenterApi.registerCarLocationChangedListener(TAG, this)
mThreadHandler =
TrafficLightThreadHandler(WorkThreadHandler.newInstance("TrafficLight").looper,
{
Logger.d(TAG, "loop search roadID , mLocation : $mLocation")
mLocation?.let { it ->
val tileId =
MogoApisHandler.getInstance().apis.mapServiceApi.mapUIController.getTileId(
it.longitude,
it.latitude
)
val tileId = MogoApisHandler.getInstance().apis
.mapServiceApi.mapUIController.getTileId(it.longitude, it.latitude)
trafficLightNetWorkModel.requestRoadID(
tileId,
it.latitude,
it.longitude,
it.bearing.toDouble(),
{
mThreadHandler!!.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_CROSS_ROAD)
tileId, it.latitude, it.longitude, it.bearing.toDouble(), {
mThreadHandler?.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_CROSS_ROAD)
roadId = it
},
{
@@ -72,12 +62,13 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
//stop loop search road id
trafficLightNetWorkModel.cancelRequestRoadID()
//开始请求红绿灯
mThreadHandler!!.sendEmptyMessage(MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT)
mThreadHandler?.sendEmptyMessage(MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT)
}, {
//start loop traffic light
mLocation?.let {
val road = if (roadId.isNullOrBlank()) "" else roadId!!
trafficLightNetWorkModel.requestTrafficLight(
it.latitude, it.longitude, it.bearing.toDouble(), roadId!!, { result ->
it.latitude, it.longitude, it.bearing.toDouble(), road, { result ->
trafficLightResult = result
TrafficLightHMIManager.INSTANCE.updateTrafficLight(result)
CallTrafficLightListenerManager.invokeTrafficLightStatus(result)
@@ -90,12 +81,9 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
//stop loop traffic light
trafficLightNetWorkModel.cancelRequestTrafficLight()
//刚经过红绿灯加入3秒延时请求路口ID
mThreadHandler!!.sendEmptyMessageDelayed(
MSG_WHAT_LOOP_SEARCH_CROSS_ROAD,
3_000L
)
mThreadHandler?.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 3_000L)
})
mThreadHandler!!.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 5_000L)
mThreadHandler?.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 5_000L)
}
fun getTrafficLightCurrentState(): TrafficLightDetail? {
@@ -126,18 +114,24 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
// 检测是否开过路口,开过路口则停止读灯。并重置 trafficLightResult 值为 null
if (trafficLightResult != null
&& (CoordinateUtils.calculateLineDistance(
it.longitude,
it.latitude,
trafficLightResult!!.lon,
trafficLightResult!!.lat
it.longitude, it.latitude,
trafficLightResult!!.lon, trafficLightResult!!.lat
) < 5)
) {
trafficLightResult = null
TrafficLightHMIManager.INSTANCE.hideTrafficLight()
CallTrafficLightListenerManager.resetTrafficLightData()
mThreadHandler!!.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT)
mThreadHandler?.sendEmptyMessage(MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT)
}
}
}
fun onDestroy() {
mThreadHandler = null
mContext = null
mLocation = null
roadId = null
trafficLightResult = null
}
}

View File

@@ -50,7 +50,7 @@ class TrafficLightThreadHandler : Handler {
}
MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT -> {
loopSearchTrafficLight?.invoke()
sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT,500L)
sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT,600L)
}
MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT -> {
if(hasMessages(MSG_WHAT_LOOP_SEARCH_TRAFFIC_LIGHT)){

View File

@@ -16,7 +16,7 @@ interface TrafficLightApiService {
//获取前方红绿灯状态
@FormUrlEncoded
@POST("mec-etl-server/light//bgd/channel/realTime")
@POST("mec-etl-server/light/bgd/channel/realTime")
suspend fun getTrafficLight(@FieldMap status: Map<String, String>): BaseResponse<TrafficLightResult>
//变灯

View File

@@ -6,6 +6,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.BaseResponse
import com.mogo.eagle.core.data.trafficlight.*
import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightConst
import com.mogo.utils.logger.Logger
import com.mogo.utils.network.apiCall
import com.mogo.utils.network.cancel
import com.mogo.utils.network.request
@@ -39,7 +40,7 @@ class TrafficLightNetWorkModel {
}
onSuccess {
if (it.result != null) {
onSuccess.invoke(it.result.rSCrossId)
onSuccess.invoke(it.result.rsCrossId)
} else {
onError.invoke("requestRoadID result is null : ${it.result}")
}

View File

@@ -32,7 +32,8 @@ class VipCarManager : IMogoOnMessageListener<VipMessage>, IMoGoTrafficLightListe
}
private var mContext: Context? = null
private var mLocation: Location? = null
private var mLocation:Location? = null
private var turnLightFirst = false
private var turnLightEnd = true
private var result: TrafficLightResult? = null
@@ -80,7 +81,11 @@ class VipCarManager : IMogoOnMessageListener<VipMessage>, IMoGoTrafficLightListe
}
override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) {
turnLight()
if (!turnLightFirst) {
// 首次判断,变灯
turnLightFirst = true
turnLight()
}
this.result = trafficLightResult
//如果上次结果和本次灯态结果变化比较大则已变灯控制HMI展示弹窗
if ((result!!.laneList.mid.remain - trafficLightResult.laneList.mid.remain) > 3) {

View File

@@ -11,10 +11,11 @@ class RoadArrow {
private const val TURN_LEFT = 205 //左转
private const val TURN_LEFT_OR_U_TURN = 206 //左转或转向
private const val TURN_RIGHT = 206 //右转
private const val TURN_LEFT_OR_RIGHT = 210 //左右转向
const val U_TURN = 211 //转向
fun isLeft(arrowId: Int): Boolean {
return arrowId == STRAIGHT_OR_LEFT || arrowId == TURN_LEFT || arrowId == TURN_LEFT_OR_U_TURN
return arrowId == STRAIGHT_OR_LEFT || arrowId == TURN_LEFT || arrowId == TURN_LEFT_OR_U_TURN || arrowId == TURN_LEFT_OR_RIGHT
}
fun isStraight(arrowId: Int): Boolean {
@@ -22,7 +23,7 @@ class RoadArrow {
}
fun isRight(arrowId: Int): Boolean {
return arrowId == TURN_RIGHT || arrowId == STRAIGHT_OR_RIGHT
return arrowId == TURN_RIGHT || arrowId == STRAIGHT_OR_RIGHT || arrowId == TURN_LEFT_OR_RIGHT
}
}

View File

@@ -7,10 +7,10 @@ package com.mogo.eagle.core.data.trafficlight
* distance 当前车道需驶入到距离终点距离
* baseLaneInfoList 驶入路口需要经过路段
*/
class RoadIDResult(
val rSCrossId: String,
data class RoadIDResult(
val rsCrossId: String,
val crossId: String,
val distance: Double,
val baseLaneInfoList: BaseLaneInfoList
val baseLaneInfoList: List<BaseLaneInfoList>
) {
}