Merge branch 'dev_robotaxi-d_230912_6.1.0' into base_3.4.0-map-sdk

This commit is contained in:
zhongchao
2023-09-25 16:58:29 +08:00
12 changed files with 65 additions and 132 deletions

View File

@@ -894,13 +894,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
} }
override fun onParallelDrivingAbility( override fun onParallelDrivingAbility(
isParallelDrivingAbility: Boolean, isParallelDrivingAbility: Boolean
unableParallelDrivingReasons: java.util.ArrayList<UnableLaunchReason>?
) { ) {
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility( CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility)
isParallelDrivingAbility,
unableParallelDrivingReasons
)
} }
@ChainLog( @ChainLog(

View File

@@ -152,8 +152,7 @@ class ParallelDriveView @JvmOverloads constructor(
} }
override fun onParallelDrivingAbility( override fun onParallelDrivingAbility(
isParallelDrivingAbility: Boolean, isParallelDrivingAbility: Boolean
unableParallelDrivingReasons: ArrayList<UnableLaunchReason>?
) { ) {
if (!isParallelDrivingAbility) { if (!isParallelDrivingAbility) {
Log.d(TAG, "onParallelDrivingAbility-UNAVAILABLE") Log.d(TAG, "onParallelDrivingAbility-UNAVAILABLE")

View File

@@ -8,8 +8,5 @@ import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
*/ */
interface IMoGoAutopilotActionsListener { interface IMoGoAutopilotActionsListener {
/**
* pnc actions 决策 驾驶的意图
*/
fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?) fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?)
} }

View File

@@ -1,13 +1,10 @@
package com.mogo.eagle.core.function.api.autopilot package com.mogo.eagle.core.function.api.autopilot
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/** /**
* 平行驾驶能力 能否启动平行驾驶 * 平行驾驶能力 能否启动平行驾驶
*/ */
interface IMoGoParallelDrivingActionsListener { interface IMoGoParallelDrivingActionsListener {
fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean)
fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean, unableParallelDrivingReasons: ArrayList<UnableLaunchReason>?)
} }

View File

@@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.call.autopilot
import android.util.Log import android.util.Log
import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingActionsListener import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingActionsListener
import com.mogo.eagle.core.function.call.base.CallerBase import com.mogo.eagle.core.function.call.base.CallerBase
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/** /**
@@ -14,23 +13,9 @@ object CallerParallelDrivingActionsListenerManager :
@Volatile @Volatile
private var isConnected = false private var isConnected = false
private var isParallelDrivingAbility: Boolean = false private var isParallelDrivingAbility: Boolean = false
private var unableParallelDrivingReasons: ArrayList<UnableLaunchReason>? = null
init { init {
isParallelDrivingAbility = false isParallelDrivingAbility = false
unableParallelDrivingReasons = disconnectedReason()
}
private fun disconnectedReason(): ArrayList<UnableLaunchReason> {
val list = ArrayList<UnableLaunchReason>()
list.add(
UnableLaunchReason(
UnableLaunchReason.SourceType.LIB,
UnableLaunchReason.UnableType.DISCONNECTED,
"未连接自动驾驶系统"
)
)
return list
} }
/** /**
@@ -40,44 +25,19 @@ object CallerParallelDrivingActionsListenerManager :
return isParallelDrivingAbility return isParallelDrivingAbility
} }
/**
* 获取不能启动平行驾驶的原因
* null表示没有任何原因证证明isParallelDrivingAbility为true
*/
fun getUnableParallelDrivingReasons(): ArrayList<UnableLaunchReason>? {
return unableParallelDrivingReasons
}
fun setConnected(isConnected: Boolean) { fun setConnected(isConnected: Boolean) {
if (this.isConnected != isConnected) { if (this.isConnected != isConnected) {
this.isConnected = isConnected this.isConnected = isConnected
this.isParallelDrivingAbility = isConnected this.isParallelDrivingAbility = isConnected
unableParallelDrivingReasons = if (isConnected) null else disconnectedReason()
notification() notification()
} }
} }
@Synchronized @Synchronized
fun invokeParallelDrivingAbility( fun invokeParallelDrivingAbility(isAutopilotAbility: Boolean) {
isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
if (isConnected) { if (isConnected) {
var isEquals: Boolean = true if (this.isParallelDrivingAbility != isAutopilotAbility) {
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) {
this.isParallelDrivingAbility = isAutopilotAbility this.isParallelDrivingAbility = isAutopilotAbility
this.unableParallelDrivingReasons = unableAutopilotReasons
notification() notification()
} }
} }
@@ -86,13 +46,12 @@ object CallerParallelDrivingActionsListenerManager :
private fun notification() { private fun notification() {
Log.i( Log.i(
"xfk", "xfk",
"是否可以启动平行驾驶=" + isParallelDrivingAbility + if (unableParallelDrivingReasons == null) "" else unableParallelDrivingReasons.toString() "是否可以启动平行驾驶=$isParallelDrivingAbility"
) )
M_LISTENERS.forEach { M_LISTENERS.forEach {
val listener = it.value val listener = it.value
listener.onParallelDrivingAbility( listener.onParallelDrivingAbility(
isParallelDrivingAbility, isParallelDrivingAbility
unableParallelDrivingReasons
) )
} }
} }

View File

@@ -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) { if (oldValue != newValue) {
CallerLogger.d("$M_MAP onRoadChange", newValue) CallerLogger.d("$M_MAP onRoadChange", newValue)
listeners.forEach { entry -> 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, nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_ROAD_CROSS,
paramIndexes = [0, 1] paramIndexes = [0, 1]
) )
fun invokeRoadChange(cross: Boolean, roadCross: RoadCross) { fun invokeRoadChange(cross: Int, roadCross: RoadCross) {
mCross = cross mCross = cross
} }

View File

@@ -5,7 +5,7 @@ import android.text.TextUtils;
import java.util.Objects; import java.util.Objects;
/** /**
* 不能启动自动驾驶或不能启动平行驾驶的原因 * 不能启动自动驾驶的原因
*/ */
public class UnableLaunchReason { public class UnableLaunchReason {
@@ -17,7 +17,7 @@ public class UnableLaunchReason {
} }
/** /**
* 影响启动自驾或启动平行驾驶的具体类型 * 影响启动自驾的具体类型
*/ */
public enum UnableType { public enum UnableType {
DISCONNECTED,//未连接 DISCONNECTED,//未连接

View File

@@ -1,6 +1,5 @@
package com.zhidao.support.adas.high; 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.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions;
@@ -203,6 +202,5 @@ public class AdasOptions {
public void setUnableLaunchAutopilotGear(Set<Chassis.GearPosition> unableLaunchAutopilotGear) { public void setUnableLaunchAutopilotGear(Set<Chassis.GearPosition> unableLaunchAutopilotGear) {
AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear);
ParallelDrivingManager.getInstance().setUnableLaunchParallelDrivingGear(unableLaunchAutopilotGear);
} }
} }

View File

@@ -478,9 +478,8 @@ public interface OnAdasListener {
* 是否有能力启动平行驾驶 * 是否有能力启动平行驾驶
* *
* @param isParallelDrivingAbility 是否能启动平行驾驶 * @param isParallelDrivingAbility 是否能启动平行驾驶
* @param unableParallelDrivingReasons 不能启动平行驾驶原因
*/ */
void onParallelDrivingAbility(boolean isParallelDrivingAbility, @Nullable ArrayList<UnableLaunchReason> unableParallelDrivingReasons); void onParallelDrivingAbility(boolean isParallelDrivingAbility);
/** /**
* 启动自动驾驶失败回调 * 启动自动驾驶失败回调

View File

@@ -3,11 +3,7 @@ package com.zhidao.support.adas.high.common;
import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasListener; 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.Timer;
import java.util.TimerTask; import java.util.TimerTask;
@@ -28,10 +24,10 @@ public class ParallelDrivingManager {
private OnAdasListener listener; private OnAdasListener listener;
private ChassisStatesOuterClass.ChassisStates chassisStates; private ChassisStatesOuterClass.ChassisStates chassisStates;
private VehicleStateOuterClass.VehicleState vehicleState; private VehicleStateOuterClass.VehicleState vehicleState;
private int autopilotState;
/** /**
* 不能启动平行驾驶的档位 * 不能启动平行驾驶的档位
*/ */
private Set<Chassis.GearPosition> unableLaunchParallelDrivingGear;
private int mapVersion = -1;//工控机版本 private int mapVersion = -1;//工控机版本
private boolean isHQ = false;//是否是HQ private boolean isHQ = false;//是否是HQ
private boolean isDF = false;//是否是DF private boolean isDF = false;//是否是DF
@@ -73,80 +69,60 @@ public class ParallelDrivingManager {
this.vehicleState = vehicleState; this.vehicleState = vehicleState;
} }
public void setUnableLaunchParallelDrivingGear(Set<Chassis.GearPosition> unableLaunchParallelDrivingGear) {
if (unableLaunchParallelDrivingGear != null) {
this.unableLaunchParallelDrivingGear = new HashSet<>(unableLaunchParallelDrivingGear);
}
}
/** /**
* 获取当前档位是否能启动自动驾驶 如果不传递默认可以启动 * 只使用老的自动驾驶状态接口原因新的状态接口FunctionStatesMessage同时会上线FSM自有的检测更能所以不需要在鹰眼中检测
* 不能启动自驾档位规则app/README.md/不能启动自动驾驶的档位
* *
* @param currentGear 当前档位 * @param autopilotState
* @return 是否能启动自驾
*/ */
private boolean isLaunchAutopilot(Chassis.GearPosition currentGear) { public void setAutopilotState(int autopilotState) {
if (unableLaunchParallelDrivingGear != null && !unableLaunchParallelDrivingGear.isEmpty()) { this.autopilotState = autopilotState;
return !unableLaunchParallelDrivingGear.contains(currentGear);
}
return true;
}
/**
* 添加不能启动平行驾驶的原因
*
* @param unableParallelDrivingReasons 原因列表
* @param source 来源
* @param unableParallelDrivingReason 云隐
* @return 原因列表
*/
public static ArrayList<UnableLaunchReason> addUnableParallelDrivingReason(ArrayList<UnableLaunchReason> unableParallelDrivingReasons, UnableLaunchReason.SourceType source, UnableLaunchReason.UnableType unableType, String unableParallelDrivingReason) {
if (unableParallelDrivingReasons == null) {
unableParallelDrivingReasons = new ArrayList<>();
}
unableParallelDrivingReasons.add(new UnableLaunchReason(source, unableType, unableParallelDrivingReason));
return unableParallelDrivingReasons;
} }
private void onCallback() { private void onCallback() {
boolean isParallelDrivingAbility = true;//是否能启动平行驾驶 float brake = 0;
ArrayList<UnableLaunchReason> unableParallelDrivingReasons = null;//不能启动平行驾驶原因 Chassis.GearPosition gear = null;
float throttle = 0;
boolean isBrake = false;
//检测底盘相关 //检测底盘相关
if (chassisStates != null) { if (chassisStates != null) {
if (chassisStates.hasBrakeSystemStates()) { if (chassisStates.hasBrakeSystemStates()) {
float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition(); brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
if (brake > 0) { CupidLogUtils.i(TAG, "刹车=" + brake);
isParallelDrivingAbility = false; } else {
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.BRAKE, "制动踏板被踩下"); CupidLogUtils.i(TAG, "刹车=未赋值");
}
} }
if (chassisStates.hasGearSystemStates()) { if (chassisStates.hasGearSystemStates()) {
Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); gear = chassisStates.getGearSystemStates().getGearPosition();
if (!isLaunchAutopilot(gear)) { CupidLogUtils.i(TAG, "档位=" + gear);
isParallelDrivingAbility = false; } else {
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.GEAR, "档位异常"); CupidLogUtils.i(TAG, "档位=未赋值");
} }
if (chassisStates.hasDrivingSystemStates()) {
throttle = chassisStates.getDrivingSystemStates().getThrottleResponsePosition();
CupidLogUtils.i(TAG, "油门=" + throttle);
} else {
CupidLogUtils.i(TAG, "油门=未赋值");
} }
} }
if (vehicleState != null) { if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知 //TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统 //电子驻车制动系统
if (vehicleState.hasParkingBrake()) { if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake(); isBrake = vehicleState.getParkingBrake();
if (isBrake) { CupidLogUtils.i(TAG, " 手刹=" + isBrake);
isParallelDrivingAbility = false; } else {
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, UnableLaunchReason.UnableType.PARKING_BRAKE, "施加驻车"); 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<UnableLaunchReason> unableParallelDrivingReasons) { private void callListener(boolean isParallelDrivingAbility) {
if (listener != null) { if (listener != null) {
listener.onParallelDrivingAbility(isParallelDrivingAbility, unableParallelDrivingReasons); listener.onParallelDrivingAbility(isParallelDrivingAbility);
} }
} }
@@ -166,7 +142,8 @@ public class ParallelDrivingManager {
}, 2000L, 1000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步 }, 2000L, 1000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步
} }
} else { } else {
callListener(false, addUnableParallelDrivingReason(null, UnableLaunchReason.SourceType.LIB, UnableLaunchReason.UnableType.INCOMPATIBLE, "当前域控版本无法通过鹰眼启动平行驾驶")); CupidLogUtils.e(TAG, "当前域控版本无法通过鹰眼启动平行驾驶 MAP版本=" + mapVersion);
callListener(false);
} }
} }

View File

@@ -8,6 +8,7 @@ import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.AutopilotReview;
import com.zhidao.support.adas.high.common.CupidLogUtils; 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 com.zhidao.support.adas.high.protocol.RawData;
import mogo.telematics.pad.MessagePad; 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())) { 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()); MessagePad.AutopilotState autopilotState = MessagePad.AutopilotState.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("自动驾驶状态", raw.receiveTime); AdasChannel.calculateTimeConsumingOnDispatchRaw("自动驾驶状态", raw.receiveTime);
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState.getState());
long nowTime = 0; long nowTime = 0;
if (CupidLogUtils.isEnableLog()) if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime(); nowTime = SystemClock.elapsedRealtime();

View File

@@ -211,14 +211,20 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
oldValue?.let { oldValue?.let {
//对驶入驶出路口做二次过滤,防止多次回调 //对驶入驶出路口做二次过滤,防止多次回调
if (it.status == 0 && newValue!!.status == 1) { if (it.status == 0 && newValue!!.status == 1) {
//进入路口 //径直进入路口
i("$M_MAP$TAG", "进入路口 :${newValue.cross_id}") 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}") 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)
} }
} }
} }