This commit is contained in:
zhongchao
2022-03-14 14:11:29 +08:00
parent 3ffcb4bd27
commit d35700cb08
32 changed files with 332 additions and 1874 deletions

View File

@@ -5,17 +5,21 @@ import android.content.Context
import androidx.annotation.RequiresPermission
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.AutopilotControlParameters
import com.mogo.eagle.core.data.autopilot.toRouteInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.constants.MoGoConfig
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.deva.scene.SceneConstant.Companion.M_ADAS_IMPL
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.data.trafficlight.toTrafficLightDetail
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotProvider
import com.mogo.eagle.core.function.api.map.collect.IMoGoMapDataCollectProvider
import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasListenerImpl
import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl
import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager
import com.mogo.eagle.core.function.autopilot.server.AsyncDataToAutopilotServer
import com.mogo.eagle.core.function.call.logger.CallerLogger
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
@@ -52,8 +56,8 @@ class MoGoAutopilotProvider :
get() = TAG
override fun init(context: Context) {
MoGoHandAdasMsgManager.getInstance();
Logger.d(TAG, "初始化工控机连接……")
MoGoHandAdasMsgManager.getInstance()
CallerLogger.i("$M_ADAS_IMPL$TAG", "初始化工控机连接……")
mContext = context
// 初始化ADAS 域控制器
CupidLogUtils.setEnableLog(false)
@@ -72,26 +76,24 @@ class MoGoAutopilotProvider :
NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
NettyServerListener<MogoProtocolMsg> {
override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
Logger.d(TAG, "Receive client data is:${msg?.toString()}")
CallerLogger.d("$M_ADAS_IMPL$TAG", "Receive client data is:${msg?.toString()}")
}
override fun onStartServer() {
ToastUtils.showShort("司机端服务启动成功!")
Logger.d(TAG, "onStartServer")
}
override fun onStopServer() {
ToastUtils.showLong("司机端服务停止!")
Logger.d(TAG, "onStopServer")
}
override fun onChannelConnect(channel: Channel?) {
val socketAddress = channel?.remoteAddress().toString()
Logger.d(TAG, "Client ip is:${socketAddress}")
CallerLogger.d("$M_ADAS_IMPL$TAG", "Client ip is:${socketAddress}")
}
override fun onChannelDisConnect(channel: Channel?) {
Logger.d(TAG, "onChannelDisConnect")
CallerLogger.d("$M_ADAS_IMPL$TAG", "onChannelDisConnect")
}
}, MoGoAiCloudClientConfig.getInstance().sn)
} else {
@@ -108,22 +110,23 @@ class MoGoAutopilotProvider :
.searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object :
NettyClientListener<MogoProtocolMsg> {
override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) {
Logger.d(TAG, "收到司机端的数据!")
// 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
msg?.let {
AdasManager.getInstance().parseIPCData(it.body)
Logger.d(TAG, "解析司机端数据完毕!")
}
}
override fun onClientStatusConnectChanged(statusCode: Int, sign: String?) {
when (statusCode) {
ConnectState.STATUS_CONNECT_SUCCESS -> {
Logger.d(TAG, "乘客端连接司机端服务成功! sign is:${sign}")
CallerLogger.d("$M_ADAS_IMPL$TAG", "乘客端连接司机端服务成功! sign is:${sign}")
}
else -> {
ToastUtils.showLong("和司机端连接异常!")
Logger.d(TAG, "client statusCode is:${statusCode}")
CallerLogger.d(
"$M_ADAS_IMPL$TAG",
"client statusCode is:${statusCode}"
)
}
}
}
@@ -138,17 +141,15 @@ class MoGoAutopilotProvider :
AdasManager.getInstance().setOnMultiDeviceListener { bytes ->
// 发送数据给乘客端
if (NSDNettyManager.getInstance().isServerStart) {
Logger.d(
TAG,
"司机端透传数据给乘客端!"
)
NSDNettyManager.getInstance()
.sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes))
} else {
Logger.d(TAG, "司机端Server未启动")
CallerLogger.d("$M_ADAS_IMPL$TAG", "司机端Server未启动")
}
}
}
CallerLogger.i("$M_ADAS_IMPL$TAG", "initServer……")
// 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer()
// 同步是否开启美化模式
@@ -188,32 +189,45 @@ class MoGoAutopilotProvider :
override fun onMapCollectStart(cmdId: Int, cmdTime: Long) {
val result = recordPackage(2, cmdId)
Logger.d(TAG, "开始记录包: [$cmdId, $result]")
CallerLogger.d("$M_ADAS_IMPL$TAG", "开始记录包: [$cmdId, $result]")
}
override fun onMapCollectEnd(cmdId: Int, cmdTime: Long) {
val result = stopRecord(2, cmdId)
Logger.d(TAG, "结束记录包: [$cmdId, $result]")
CallerLogger.d("$M_ADAS_IMPL$TAG", "结束记录包: [$cmdId, $result]")
}
override fun startAutoPilot(result: AutopilotControlParameters) {
override fun startAutoPilot(controlParameters: AutopilotControlParameters) {
if (AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
val parameter = AutopilotControlCmdParameter("aiCloudToStartAutopilot", result)
// AdasManager.getInstance().aiCloudToAdasData(GsonUtils.toJson(parameter)) //todo pb : 需要指定来源
AdasManager.getInstance().sendAutoPilotModeReq(1, 1, controlParameters.toRouteInfo())
} else {
Logger.e(TAG, "车机与工控机链接失败,无法开启自动驾驶")
CallerLogger.e("$M_ADAS_IMPL$TAG", "车机与工控机链接失败,无法开启自动驾驶")
}
}
override fun sendTrafficLightData(trafficLightResult: TrafficLightResult) {
AdasManager.getInstance().sendTrafficLightData(
trafficLightResult.crossId,
trafficLightResult.lat,
trafficLightResult.lon,
trafficLightResult.heading,
trafficLightResult.direction,
trafficLightResult.lightId,
trafficLightResult.laneNo,
trafficLightResult.arrowNo,
trafficLightResult.flashYellow,
trafficLightResult.toTrafficLightDetail()
)
}
override fun sendMessageToAutopilot(jsonString: String) {
// AdasManager.getInstance().sendMessage(jsonString) //todo pb : 红绿灯
}
override fun cancelAutoPilot() {
if (AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
// AdasManager.getInstance().controlAutopilotCarHead() //todo pb : 需要指定来源
AdasManager.getInstance().sendAutoPilotModeReq(0, 1, null)
} else {
Logger.e(TAG, "车机与工控机链接失败,无法断开自动驾驶")
CallerLogger.e("$M_ADAS_IMPL$TAG", "车机与工控机链接失败,无法断开自动驾驶")
}
}
@@ -295,9 +309,23 @@ class MoGoAutopilotProvider :
*/
override fun setControlAutopilotCarAuto(isEnable: Boolean) {
if (isEnable) {
// AdasManager.getInstance().sendAutoPilotModeReq() //todo pb : 需要指定来源
AdasManager.getInstance().sendAutoPilotModeReq(1, 0, null)
} else {
// AdasManager.getInstance().sendAutoPilotModeReq() //todo pb : 需要指定来源
AdasManager.getInstance().sendAutoPilotModeReq(0, 0, null)
}
}
/**
* 请求工控机基础配置信息
*/
override fun getCarConfig() {
AdasManager.getInstance().sendCarConfigReq()
}
/**
* 获取全局路径
*/
override fun getGlobalPath() {
AdasManager.getInstance().sendGlobalPathReq()
}
}

View File

@@ -15,6 +15,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_C
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_DATA
import com.mogo.eagle.core.data.deva.scene.SceneConstant.Companion.M_ADAS
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus
@@ -28,10 +29,9 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListen
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager.invokeAutopilotRotting
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager.invokeAutopilotTrajectory
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showAdUpgradeStatus
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showDockerRebootResult
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.function.call.logger.CallerLogger
import com.mogo.module.common.MogoApisHandler
import com.mogo.module.common.datacenter.SnapshotLocationDataCenter
import com.mogo.module.service.MarkerServiceHandler
@@ -49,7 +49,7 @@ import record_cache.RecordPanelOuterClass
import java.util.*
/**
* @author emarrow
* @author emArrow
* @since 2022/3/11
*
*
@@ -172,8 +172,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
autopilotStatusInfo.connectIP = AdasManager.getInstance().ipcConnectedIp
}
if (autopilotStatusInfo.dockVersion == null) {
// autopilotStatusInfo.dockVersion =
// AdasManager.getInstance() //todo pb : get docker
AdasManager.getInstance().carConfig?.let {
autopilotStatusInfo.dockVersion = it.dockVersion
}
}
invokeAutoPilotStatus()
}
@@ -278,8 +279,8 @@ class MoGoAdasListenerImpl : OnAdasListener {
override fun onUpgradeStateInfo(info: IPCUpgradeStateInfo) {
if (info != null) {
Logger.d(
TAG, "onUpgradeStateInfo " +
CallerLogger.d(
"$M_ADAS$TAG", "onUpgradeStateInfo " +
" upgrade mode=" + info.upgradeMode +
" download status=" + info.downloadStatus +
" download progress current=" + info.progress.current +
@@ -292,7 +293,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
info.progress.total, info.images, info.upgradeStatus
)
} else {
Logger.d(TAG, "onUpgradeStateInfo : upgrade state info is null")
CallerLogger.w("$M_ADAS$TAG", "onUpgradeStateInfo : upgrade state info is null")
}
}
@@ -300,7 +301,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
if (info != null && "docker restart autocar_default_1" == info.cmd) {
showDockerRebootResult(info.code, info.msg)
} else {
Logger.d(TAG, "onSSHResult : result info is null")
CallerLogger.w("$M_ADAS$TAG", "onSSHResult : result info is null")
}
}

View File

@@ -3,10 +3,11 @@ package com.mogo.eagle.core.function.autopilot.adapter
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.debug.DebugConfig
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.deva.scene.SceneConstant.Companion.M_ADAS_IMPL
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.autopilot.network.AdasServiceModel
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.function.call.logger.CallerLogger
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.OnAdasConnectStatusListener
import com.zhidao.support.adas.high.common.Constants
@@ -18,12 +19,10 @@ import java.util.concurrent.TimeUnit
/**
* ADAS-SDK与工控机连接状态回调
*
* @author donghongyu
*/
class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
IMoGoAutopilotStatusListener {
private val TAG = "MoGoAdasMsgConnectStatusListenerImpl"
private val TAG = "ConnectStatus"
//自动驾驶状态
private var mCurrentAutopilotStatus = -1
@@ -34,7 +33,7 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) {
if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
Logger.d(TAG, "webSocket 连接成功")
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 连接成功")
// 初始化自动驾驶状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AdasManager.getInstance().ipcConnectedIp
@@ -47,17 +46,17 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
// 开启轮训上传自动驾驶状态
updateDriveStatusTask()
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.DISCONNECTED) {
Logger.d(TAG, "webSocket 连接失败 reason:$reason")
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 连接失败 reason:$reason")
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AdasManager.getInstance().ipcConnectedIp
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false
CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus()
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTING) {
Logger.d(TAG, "webSocket 正在连接")
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 正在连接")
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS) {
Logger.d(TAG, "webSocket 正在搜索工控机IP")
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 正在搜索工控机IP")
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS) {
Logger.d(TAG, "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用")
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用")
}
}
@@ -88,7 +87,7 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
* 同步SN信息给工控机
*/
private fun syncBasicInfoToAutopilot() {
Logger.d(TAG, "同步PAD的SN给工控机……")
CallerLogger.d("$M_ADAS_IMPL$TAG", "同步PAD的SN给工控机……")
// 设置PAD-SN给工控,网络环境
AdasManager.getInstance()
.sendBasicInfoResp(MoGoAiCloudClientConfig.getInstance().sn, DebugConfig.getNetMode())
@@ -98,7 +97,7 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
* 上传自动驾驶状态任务
*/
private fun updateDriveStatusTask() {
Logger.d(TAG, "updateDriveStatusTask")
CallerLogger.d("$M_ADAS_IMPL$TAG", "updateDriveStatusTask")
Flowable.interval(0, 5, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.autopilot.entity;
/**
* Created by XuYong on 2021/5/28 16:12
* Created by SuYong on 2021/5/28 16:12
*/
public class AutonomousDriveStatusBean {

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.autopilot.entity;
/**
* Created by XuYong on 2021/5/31 16:24
* Created by SuYong on 2021/5/31 16:24
*/
public class ReportSiteBean {
private String sn;

View File

@@ -8,7 +8,6 @@ import com.mogo.eagle.core.function.autopilot.entity.ReportSiteBean;
import com.mogo.eagle.core.network.RequestOptions;
import com.mogo.eagle.core.network.SubscribeImpl;
import com.mogo.eagle.core.network.utils.GsonUtil;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.constants.HostConst;
@@ -89,7 +88,6 @@ public class AdasServiceModel {
@Override
public void onSuccess(BaseData o) {
super.onSuccess(o);
Logger.d(TAG, "autopilotArrive success");
}
});
}

View File

@@ -1,12 +1,9 @@
package com.mogo.eagle.core.function.autopilot.server
import com.mogo.eagle.core.data.autopilot.AutopilotControlCmdParameter
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.GsonUtils
/**
* @author xiaoyuzhou
@@ -25,12 +22,10 @@ class AsyncDataToAutopilotServer private constructor() : IMoGoTrafficLightListen
}
fun initServer() {
Logger.d(TAG, "initServer……")
CallTrafficLightListenerManager.registerTrafficLightListener(TAG, this)
}
override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) {
val autopilotControlCmdParameter = AutopilotControlCmdParameter("light", trafficLightResult)
CallerAutoPilotManager.sendDataToAutopilot(GsonUtils.toJson(autopilotControlCmdParameter))
CallerAutoPilotManager.sendTrafficLightData(trafficLightResult)
}
}