From 30e6e132d708db3926ee24c7c17789d42084e0bc Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 5 Mar 2026 15:38:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E5=90=AF=E5=8A=A8=E8=87=AA?= =?UTF-8?q?=E9=A9=BE=E5=8F=82=E6=95=B0=E4=BC=A0=E9=80=92=20=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/OchAutoPilotManager.kt | 21 +++--- .../och/bridge/autopilot/line/LineManager.kt | 69 ++++++++++++++----- .../com/mogo/och/unmanned/model/OrderModel.kt | 2 + .../CallerAutoPilotControlManager.kt | 26 ++++--- 4 files changed, 81 insertions(+), 37 deletions(-) diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/autopilot/OchAutoPilotManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/autopilot/OchAutoPilotManager.kt index 51af65b64a..4fc28a7efb 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/autopilot/OchAutoPilotManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/autopilot/OchAutoPilotManager.kt @@ -16,6 +16,7 @@ import com.mogo.och.bridge.autopilot.line.LineManager import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory +import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite import java.util.concurrent.atomic.AtomicReference object OchAutoPilotManager { @@ -117,15 +118,17 @@ object OchAutoPilotManager { return sessionId } - //TODO 任务管理继续 -// @JvmStatic -// fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory, parameters: AutopilotControlParameters): Long { -// val sessionId = CallerAutoPilotControlManager.unmannedAutoPilotContinue(taskId, traj, parameters) -// globalSessionId.set(SessionWithTime(sessionId, System.currentTimeMillis(), -1L)) -// OchAutoPilotStatusListenerManager.fsmBackSessionId.set(-1L) -// OchAutopilotAnalytics.triggerStartAutopilotParameters(traj, parameters, sessionId) -// return sessionId -// } + /** + * 继续启动自驾 + */ + @JvmStatic + fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory, vehicleSite : VehicleSite, parameters: AutopilotControlParameters): Long { + val sessionId = CallerAutoPilotControlManager.unmannedAutoPilotContinue(taskId, traj,vehicleSite, parameters) + globalSessionId.set(SessionWithTime(sessionId, System.currentTimeMillis(), -1L)) + OchAutoPilotStatusListenerManager.fsmBackSessionId.set(-1L) + OchAutopilotAnalytics.triggerStartAutopilotParameters(traj, parameters, sessionId) + return sessionId + } /** * 启动自驾失败切 FSM返回的Session和启动SessionId 不同 */ diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/line/LineManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/line/LineManager.kt index 6649b02e1c..df54af7041 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/line/LineManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/autopilot/line/LineManager.kt @@ -678,8 +678,9 @@ object LineManager : CallerBase() { _lineInfos?.let { i -> val wayPoints = ArrayList() val blackPoints = ArrayList() - i.siteInfos.forEach { site -> - wayPoints.add(VehicleSite.builder() + i.siteInfos.forEachIndexed { index, site -> + if(index==0){ + wayPoints.add(VehicleSite.builder() .coordinateType(AutopilotCoordinateTypeEnum.WGS84.code) .point(AutopilotPoint.builder().x(site.lon).y(site.lat).build()) .station(StationEnum.SITE.code) @@ -688,19 +689,20 @@ object LineManager : CallerBase() { .stationSeq(site.seq) .tag(site.tag) .build()) - site.passPoints?.forEach { p -> - wayPoints.add(VehicleSite.builder() + }else{ + site.passPoints?.forEach { p -> + wayPoints.add(VehicleSite.builder() .coordinateType(AutopilotCoordinateTypeEnum.WGS84.code) .point(AutopilotPoint.builder().x(p.lon).y(p.lat).build()) - .station(StationEnum.SITE.code) + .station(StationEnum.WAY.code) .stationId(p.siteId.toLong()) .stationName(p.name) .stationSeq(p.seq) .tag(p.tag) .build()) - } - site.blackPoints?.forEach { b -> - blackPoints.add(VehicleSite.builder() + } + site.blackPoints?.forEach { b -> + blackPoints.add(VehicleSite.builder() .coordinateType(AutopilotCoordinateTypeEnum.WGS84.code) .point(AutopilotPoint.builder().x(b.lon).y(b.lat).build()) .station(StationEnum.SITE.code) @@ -709,6 +711,16 @@ object LineManager : CallerBase() { .stationSeq(b.seq) .tag(b.tag) .build()) + } + wayPoints.add(VehicleSite.builder() + .coordinateType(AutopilotCoordinateTypeEnum.WGS84.code) + .point(AutopilotPoint.builder().x(site.lon).y(site.lat).build()) + .station(StationEnum.SITE.code) + .stationId(site.siteId.toLong()) + .stationName(site.name) + .stationSeq(site.seq) + .tag(site.tag) + .build()) } } val traj = Trajectory.builder() @@ -722,7 +734,7 @@ object LineManager : CallerBase() { .wayPoints(wayPoints) .blackPoints(blackPoints) .build() - val sessionId = unmannedStartAutoPilot(taskId, traj, parameters) + val sessionId = OchAutoPilotManager.unmannedStartAutoPilot(taskId, traj, parameters) OchAutopilotAnalytics.triggerUpdateStartAutoPilotSessionId(sessionId, true) d( TAG, @@ -785,18 +797,41 @@ object LineManager : CallerBase() { return } _lineInfos?.let { i -> - - //TODO 任务管理继续 -// val sessionId = unmannedAutoPilotContinue(taskId, traj, parameters) -// OchAutopilotAnalytics.triggerUpdateStartAutoPilotSessionId(sessionId, true) - d( + startStation?.let { start-> + val wayPoints = ArrayList() + val blackPoints = ArrayList() + val vehicleSite = VehicleSite.builder() + .coordinateType(AutopilotCoordinateTypeEnum.WGS84.code) + .point(AutopilotPoint.builder().x(start.lon).y(start.lat).build()) + .station(StationEnum.SITE.code) + .stationId(start.siteId.toLong()) + .stationName(start.name) + .stationSeq(start.seq) + .tag(start.tag) + .build() + wayPoints.add(vehicleSite) + val traj = Trajectory.builder() + .id(i.lineId) + .name(i.lineName) + .trajUrl(_contraiInfo!!.csvFileUrl) + .trajMd5(_contraiInfo!!.csvFileMd5) + .stopUrl(_contraiInfo!!.txtFileUrl) + .stopMd5(_contraiInfo!!.txtFileMd5) + .timestamp(_contraiInfo!!.contrailSaveTime) + .wayPoints(wayPoints) + .blackPoints(blackPoints) + .build() + val sessionId = OchAutoPilotManager.unmannedAutoPilotContinue(taskId, traj,vehicleSite, parameters) + OchAutopilotAnalytics.triggerUpdateStartAutoPilotSessionId(sessionId, true) + d( TAG, "无人化 行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName + "isRestart = " + isFirstStartAutopilot - ) - M_LISTENERS.forEach { - it.value.sendStartAutopilotSuccess() + ) + M_LISTENERS.forEach { + it.value.sendStartAutopilotSuccess() + } } } } diff --git a/OCH/shuttle/driver_unmanned/src/main/java/com/mogo/och/unmanned/model/OrderModel.kt b/OCH/shuttle/driver_unmanned/src/main/java/com/mogo/och/unmanned/model/OrderModel.kt index c7b3618978..f828bfd92a 100644 --- a/OCH/shuttle/driver_unmanned/src/main/java/com/mogo/och/unmanned/model/OrderModel.kt +++ b/OCH/shuttle/driver_unmanned/src/main/java/com/mogo/och/unmanned/model/OrderModel.kt @@ -247,6 +247,8 @@ object OrderModel { if (CallerAutoPilotStatusListenerManager.getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING ) { LineManager.unmannedStartAutopilot(taskId ?: 0L, true) + }else{ + LineManager.unmanneAutopilotContinue(taskId ?: 0L, false) } } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 38b8c5483e..49eb1fbd92 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -36,6 +36,7 @@ import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionResp import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory +import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite import com.zhjt.service.chain.ChainLog import com.zhjt.service_biz.BizConfig import kotlinx.coroutines.launch @@ -106,17 +107,20 @@ object CallerAutoPilotControlManager { CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters) return sessionId } - //TODO 任务管理继续 -// fun unmannedAutoPilotContinue(trackId: Long, taskId: Long, stationId: Long, stationName: String, stationSeq: Int, lon: Double, lat: Double): Long { -// if (traj == null) { -// //LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息") -// return -1L -// } -// val sessionId = providerApi?.sendTaskManagerAutopilotContinue(trackId, taskId, stationId, stationName, stationSeq, lon, lat) ?: -1L -// // 更新记录在全局的控制参数 -// CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters) -// return sessionId -// } + + /** + * 自驾成功后再次启动自驾时 + */ + fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory?, vehicleSite : VehicleSite, controlParameters: AutopilotControlParameters): Long { + if (traj == null) { + //LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息") + return -1L + } + val sessionId = providerApi?.sendTaskManagerAutopilotContinue(traj.id, taskId, vehicleSite.stationId, vehicleSite.stationName, vehicleSite.stationSeq, vehicleSite.point.x, vehicleSite.point.y) ?: -1L + // 更新记录在全局的控制参数 + CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters) + return sessionId + } /** * 启自驾前,是否要拦截 * @param isShowTip true: 展示Toast+语音提示; false:不展示Toast+语音提示