diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index c16aab2ac0..1ab3d1e540 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -894,13 +894,9 @@ class MoGoAdasListenerImpl : OnAdasListener { } override fun onParallelDrivingAbility( - isParallelDrivingAbility: Boolean, - unableParallelDrivingReasons: java.util.ArrayList? + isParallelDrivingAbility: Boolean ) { - CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility( - isParallelDrivingAbility, - unableParallelDrivingReasons - ) + CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility) } @ChainLog( diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ParallelDriveView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ParallelDriveView.kt index 03738ab157..28272c135c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ParallelDriveView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ParallelDriveView.kt @@ -152,8 +152,7 @@ class ParallelDriveView @JvmOverloads constructor( } override fun onParallelDrivingAbility( - isParallelDrivingAbility: Boolean, - unableParallelDrivingReasons: ArrayList? + isParallelDrivingAbility: Boolean ) { if (!isParallelDrivingAbility) { Log.d(TAG, "onParallelDrivingAbility-UNAVAILABLE") diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt index 5ad8621442..096dae25fb 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt @@ -8,8 +8,5 @@ import com.zhjt.mogo.adas.data.bean.UnableLaunchReason */ interface IMoGoAutopilotActionsListener { - /** - * pnc actions 决策 驾驶的意图 - */ fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList?) } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingActionsListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingActionsListener.kt index ac48a786ea..7e20271ca2 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingActionsListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoParallelDrivingActionsListener.kt @@ -1,13 +1,10 @@ package com.mogo.eagle.core.function.api.autopilot -import com.zhjt.mogo.adas.data.bean.UnableLaunchReason - /** * 平行驾驶能力 能否启动平行驾驶 */ interface IMoGoParallelDrivingActionsListener { - - fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean, unableParallelDrivingReasons: ArrayList?) + fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingActionsListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingActionsListenerManager.kt index 4040f6c9f3..1302ca1d20 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingActionsListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerParallelDrivingActionsListenerManager.kt @@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.call.autopilot import android.util.Log import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingActionsListener import com.mogo.eagle.core.function.call.base.CallerBase -import com.zhjt.mogo.adas.data.bean.UnableLaunchReason /** @@ -14,23 +13,9 @@ object CallerParallelDrivingActionsListenerManager : @Volatile private var isConnected = false private var isParallelDrivingAbility: Boolean = false - private var unableParallelDrivingReasons: ArrayList? = null init { isParallelDrivingAbility = false - unableParallelDrivingReasons = disconnectedReason() - } - - private fun disconnectedReason(): ArrayList { - val list = ArrayList() - list.add( - UnableLaunchReason( - UnableLaunchReason.SourceType.LIB, - UnableLaunchReason.UnableType.DISCONNECTED, - "未连接自动驾驶系统" - ) - ) - return list } /** @@ -40,44 +25,19 @@ object CallerParallelDrivingActionsListenerManager : return isParallelDrivingAbility } - /** - * 获取不能启动平行驾驶的原因 - * null:表示没有任何原因证,证明isParallelDrivingAbility为true - */ - fun getUnableParallelDrivingReasons(): ArrayList? { - return unableParallelDrivingReasons - } - fun setConnected(isConnected: Boolean) { if (this.isConnected != isConnected) { this.isConnected = isConnected this.isParallelDrivingAbility = isConnected - unableParallelDrivingReasons = if (isConnected) null else disconnectedReason() notification() } } @Synchronized - fun invokeParallelDrivingAbility( - isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList? - ) { + fun invokeParallelDrivingAbility(isAutopilotAbility: Boolean) { if (isConnected) { - var isEquals: Boolean = true - if (unableAutopilotReasons != null && this.unableParallelDrivingReasons != null) { - unableAutopilotReasons.let { onw -> - onw.sortWith(compareBy(UnableLaunchReason::hashCode)); - this.unableParallelDrivingReasons?.let { old -> - old.sortWith(compareBy(UnableLaunchReason::hashCode)); - isEquals = onw.toTypedArray() contentEquals old.toTypedArray() - - } - } - } else isEquals = - !(unableAutopilotReasons != null || this.unableParallelDrivingReasons != null) - - if (this.isParallelDrivingAbility != isAutopilotAbility || !isEquals) { + if (this.isParallelDrivingAbility != isAutopilotAbility) { this.isParallelDrivingAbility = isAutopilotAbility - this.unableParallelDrivingReasons = unableAutopilotReasons notification() } } @@ -86,13 +46,12 @@ object CallerParallelDrivingActionsListenerManager : private fun notification() { Log.i( "xfk", - "是否可以启动平行驾驶=" + isParallelDrivingAbility + if (unableParallelDrivingReasons == null) "" else unableParallelDrivingReasons.toString() + "是否可以启动平行驾驶=$isParallelDrivingAbility" ) M_LISTENERS.forEach { val listener = it.value listener.onParallelDrivingAbility( - isParallelDrivingAbility, - unableParallelDrivingReasons + isParallelDrivingAbility ) } } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt index b5821f9260..7c59e9d809 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt @@ -51,11 +51,14 @@ object CallerMapRoadListenerManager { } } - private var mCross: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + private var mCross: Int by Delegates.observable(-1) { _, oldValue, newValue -> if (oldValue != newValue) { CallerLogger.d("$M_MAP onRoadChange", newValue) listeners.forEach { entry -> - entry.value.onRoadChange(newValue) + when(newValue){ + 1,2 -> entry.value.onRoadChange(false) + else -> entry.value.onRoadChange(true) + } } } } @@ -66,7 +69,7 @@ object CallerMapRoadListenerManager { nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_ROAD_CROSS, paramIndexes = [0, 1] ) - fun invokeRoadChange(cross: Boolean, roadCross: RoadCross) { + fun invokeRoadChange(cross: Int, roadCross: RoadCross) { mCross = cross } diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/UnableLaunchReason.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/UnableLaunchReason.java index 40a59f1bd6..ca88b375fb 100644 --- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/UnableLaunchReason.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/UnableLaunchReason.java @@ -5,7 +5,7 @@ import android.text.TextUtils; import java.util.Objects; /** - * 不能启动自动驾驶或不能启动平行驾驶的原因 + * 不能启动自动驾驶的原因 */ public class UnableLaunchReason { @@ -17,7 +17,7 @@ public class UnableLaunchReason { } /** - * 影响启动自驾或启动平行驾驶的具体类型 + * 影响启动自驾的具体类型 */ public enum UnableType { DISCONNECTED,//未连接 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java index 0f22deb4fd..dcdc047c72 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java @@ -1,6 +1,5 @@ package com.zhidao.support.adas.high; -import com.zhidao.support.adas.high.common.ParallelDrivingManager; import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; @@ -203,6 +202,5 @@ public class AdasOptions { public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); - ParallelDrivingManager.getInstance().setUnableLaunchParallelDrivingGear(unableLaunchAutopilotGear); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 46092f950e..4fe125cf46 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -478,9 +478,8 @@ public interface OnAdasListener { * 是否有能力启动平行驾驶 * * @param isParallelDrivingAbility 是否能启动平行驾驶 - * @param unableParallelDrivingReasons 不能启动平行驾驶原因 */ - void onParallelDrivingAbility(boolean isParallelDrivingAbility, @Nullable ArrayList unableParallelDrivingReasons); + void onParallelDrivingAbility(boolean isParallelDrivingAbility); /** * 启动自动驾驶失败回调 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ParallelDrivingManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ParallelDrivingManager.java index 0cb6ea2ced..9c0e640129 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ParallelDrivingManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ParallelDrivingManager.java @@ -3,11 +3,7 @@ package com.zhidao.support.adas.high.common; import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhjt.mogo.adas.data.bean.UnableLaunchReason; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; import java.util.Timer; import java.util.TimerTask; @@ -28,10 +24,10 @@ public class ParallelDrivingManager { private OnAdasListener listener; private ChassisStatesOuterClass.ChassisStates chassisStates; private VehicleStateOuterClass.VehicleState vehicleState; + private int autopilotState; /** * 不能启动平行驾驶的档位 */ - private Set unableLaunchParallelDrivingGear; private int mapVersion = -1;//工控机版本 private boolean isHQ = false;//是否是HQ private boolean isDF = false;//是否是DF @@ -73,80 +69,60 @@ public class ParallelDrivingManager { this.vehicleState = vehicleState; } - public void setUnableLaunchParallelDrivingGear(Set unableLaunchParallelDrivingGear) { - if (unableLaunchParallelDrivingGear != null) { - this.unableLaunchParallelDrivingGear = new HashSet<>(unableLaunchParallelDrivingGear); - } - } - /** - * 获取当前档位是否能启动自动驾驶 如果不传递默认可以启动 - * 不能启动自驾档位规则:app/README.md/不能启动自动驾驶的档位 + * 只使用老的自动驾驶状态接口原因:新的状态接口(FunctionStatesMessage)同时会上线FSM自有的检测更能,所以不需要在鹰眼中检测 * - * @param currentGear 当前档位 - * @return 是否能启动自驾 + * @param autopilotState */ - private boolean isLaunchAutopilot(Chassis.GearPosition currentGear) { - if (unableLaunchParallelDrivingGear != null && !unableLaunchParallelDrivingGear.isEmpty()) { - return !unableLaunchParallelDrivingGear.contains(currentGear); - } - return true; - } - - /** - * 添加不能启动平行驾驶的原因 - * - * @param unableParallelDrivingReasons 原因列表 - * @param source 来源 - * @param unableParallelDrivingReason 云隐 - * @return 原因列表 - */ - public static ArrayList addUnableParallelDrivingReason(ArrayList unableParallelDrivingReasons, UnableLaunchReason.SourceType source, UnableLaunchReason.UnableType unableType, String unableParallelDrivingReason) { - if (unableParallelDrivingReasons == null) { - unableParallelDrivingReasons = new ArrayList<>(); - } - unableParallelDrivingReasons.add(new UnableLaunchReason(source, unableType, unableParallelDrivingReason)); - return unableParallelDrivingReasons; + public void setAutopilotState(int autopilotState) { + this.autopilotState = autopilotState; } private void onCallback() { - boolean isParallelDrivingAbility = true;//是否能启动平行驾驶 - ArrayList unableParallelDrivingReasons = null;//不能启动平行驾驶原因 + float brake = 0; + Chassis.GearPosition gear = null; + float throttle = 0; + boolean isBrake = false; //检测底盘相关 if (chassisStates != null) { if (chassisStates.hasBrakeSystemStates()) { - float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition(); - if (brake > 0) { - isParallelDrivingAbility = false; - unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.BRAKE, "制动踏板被踩下"); - } + brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition(); + CupidLogUtils.i(TAG, "刹车=" + brake); + } else { + CupidLogUtils.i(TAG, "刹车=未赋值"); } if (chassisStates.hasGearSystemStates()) { - Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); - if (!isLaunchAutopilot(gear)) { - isParallelDrivingAbility = false; - unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.GEAR, "档位异常"); - } + gear = chassisStates.getGearSystemStates().getGearPosition(); + CupidLogUtils.i(TAG, "档位=" + gear); + } else { + CupidLogUtils.i(TAG, "档位=未赋值"); + } + if (chassisStates.hasDrivingSystemStates()) { + throttle = chassisStates.getDrivingSystemStates().getThrottleResponsePosition(); + CupidLogUtils.i(TAG, "油门=" + throttle); + } else { + CupidLogUtils.i(TAG, "油门=未赋值"); } } if (vehicleState != null) { //TODO 关于手刹:目前只有老底盘中存在这个字段,df360开始,其他车型未知 //电子驻车制动系统 if (vehicleState.hasParkingBrake()) { - boolean isBrake = vehicleState.getParkingBrake(); - if (isBrake) { - isParallelDrivingAbility = false; - unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.PARKING_BRAKE, "施加驻车"); - } + isBrake = vehicleState.getParkingBrake(); + CupidLogUtils.i(TAG, " 手刹=" + isBrake); + } else { + CupidLogUtils.i(TAG, " 手刹=未赋值"); } } - callListener(isParallelDrivingAbility, unableParallelDrivingReasons); + CupidLogUtils.i(TAG, "自动驾驶状态=" + autopilotState + " 刹车=" + brake + " 档位=" + gear + " 油门=" + throttle + " 手刹=" + isBrake); + //是否能启动平行驾驶 满足p档驻车+松开油门刹车或满足n档+电子手刹+松开油门刹车或非人工驾驶状态 + boolean isParallelDrivingAbility = autopilotState > 1 || (gear == Chassis.GearPosition.GEAR_P && brake <= 5 && throttle <= 5) || (gear == Chassis.GearPosition.GEAR_N && isBrake && brake <= 5 && throttle <= 5); + callListener(isParallelDrivingAbility); } - private void callListener(boolean isParallelDrivingAbility, ArrayList unableParallelDrivingReasons) { - + private void callListener(boolean isParallelDrivingAbility) { if (listener != null) { - listener.onParallelDrivingAbility(isParallelDrivingAbility, unableParallelDrivingReasons); + listener.onParallelDrivingAbility(isParallelDrivingAbility); } } @@ -166,7 +142,8 @@ public class ParallelDrivingManager { }, 2000L, 1000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步 } } else { - callListener(false, addUnableParallelDrivingReason(null, UnableLaunchReason.SourceType.LIB, UnableLaunchReason.UnableType.INCOMPATIBLE, "当前域控版本无法通过鹰眼启动平行驾驶")); + CupidLogUtils.e(TAG, "当前域控版本无法通过鹰眼启动平行驾驶 MAP版本=" + mapVersion); + callListener(false); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java index a1b5876195..116832d07d 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java @@ -8,6 +8,7 @@ import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.CupidLogUtils; +import com.zhidao.support.adas.high.common.ParallelDrivingManager; import com.zhidao.support.adas.high.protocol.RawData; import mogo.telematics.pad.MessagePad; @@ -28,6 +29,7 @@ public class AutopilotStateMessage extends MyAbstractMessageHandler { if (AdasManager.getInstance().getCarConfig() == null || !(AdasManager.getInstance().getCarConfig().getMapVersion() >= 330 && AdasManager.getInstance().getCarConfig().getIsFutianSweeper())) { MessagePad.AutopilotState autopilotState = MessagePad.AutopilotState.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); AdasChannel.calculateTimeConsumingOnDispatchRaw("自动驾驶状态", raw.receiveTime); + ParallelDrivingManager.getInstance().setAutopilotState(autopilotState.getState()); long nowTime = 0; if (CupidLogUtils.isEnableLog()) nowTime = SystemClock.elapsedRealtime(); diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt index 2a4710d8bb..f064eea7ed 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt @@ -211,14 +211,20 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle oldValue?.let { //对驶入驶出路口做二次过滤,防止多次回调 if (it.status == 0 && newValue!!.status == 1) { - //进入路口 + //径直进入路口 i("$M_MAP$TAG", "进入路口 :${newValue.cross_id}") - invokeRoadChange(true, newValue) + invokeRoadChange(0, newValue) } - if ((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)) { - //驶出路口 + if ((it.status == 1 && newValue!!.status == 0)) { + //径直驶出路口 i("$M_MAP$TAG", "驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}") - invokeRoadChange(false, newValue) + invokeRoadChange(1, newValue) + return@let + } + if((newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)){ + //路口发生变化 + i("$M_MAP$TAG", "路段发生变化 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}") + invokeRoadChange(2, newValue) } } }