Merge branch 'dev_robotaxi-d_230912_6.1.0' into base_3.4.0-map-sdk
This commit is contained in:
@@ -894,13 +894,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
}
|
||||
|
||||
override fun onParallelDrivingAbility(
|
||||
isParallelDrivingAbility: Boolean,
|
||||
unableParallelDrivingReasons: java.util.ArrayList<UnableLaunchReason>?
|
||||
isParallelDrivingAbility: Boolean
|
||||
) {
|
||||
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(
|
||||
isParallelDrivingAbility,
|
||||
unableParallelDrivingReasons
|
||||
)
|
||||
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
|
||||
@@ -152,8 +152,7 @@ class ParallelDriveView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
override fun onParallelDrivingAbility(
|
||||
isParallelDrivingAbility: Boolean,
|
||||
unableParallelDrivingReasons: ArrayList<UnableLaunchReason>?
|
||||
isParallelDrivingAbility: Boolean
|
||||
) {
|
||||
if (!isParallelDrivingAbility) {
|
||||
Log.d(TAG, "onParallelDrivingAbility-UNAVAILABLE")
|
||||
|
||||
@@ -8,8 +8,5 @@ import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
|
||||
*/
|
||||
interface IMoGoAutopilotActionsListener {
|
||||
|
||||
/**
|
||||
* pnc actions 决策 驾驶的意图
|
||||
*/
|
||||
fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?)
|
||||
}
|
||||
@@ -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<UnableLaunchReason>?)
|
||||
fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean)
|
||||
}
|
||||
@@ -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<UnableLaunchReason>? = null
|
||||
|
||||
init {
|
||||
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
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取不能启动平行驾驶的原因
|
||||
* null:表示没有任何原因证,证明isParallelDrivingAbility为true
|
||||
*/
|
||||
fun getUnableParallelDrivingReasons(): ArrayList<UnableLaunchReason>? {
|
||||
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<UnableLaunchReason>?
|
||||
) {
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
@@ -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,//未连接
|
||||
|
||||
@@ -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<Chassis.GearPosition> unableLaunchAutopilotGear) {
|
||||
AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear);
|
||||
ParallelDrivingManager.getInstance().setUnableLaunchParallelDrivingGear(unableLaunchAutopilotGear);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -478,9 +478,8 @@ public interface OnAdasListener {
|
||||
* 是否有能力启动平行驾驶
|
||||
*
|
||||
* @param isParallelDrivingAbility 是否能启动平行驾驶
|
||||
* @param unableParallelDrivingReasons 不能启动平行驾驶原因
|
||||
*/
|
||||
void onParallelDrivingAbility(boolean isParallelDrivingAbility, @Nullable ArrayList<UnableLaunchReason> unableParallelDrivingReasons);
|
||||
void onParallelDrivingAbility(boolean isParallelDrivingAbility);
|
||||
|
||||
/**
|
||||
* 启动自动驾驶失败回调
|
||||
|
||||
@@ -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<Chassis.GearPosition> 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<Chassis.GearPosition> 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<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;
|
||||
public void setAutopilotState(int autopilotState) {
|
||||
this.autopilotState = autopilotState;
|
||||
}
|
||||
|
||||
private void onCallback() {
|
||||
boolean isParallelDrivingAbility = true;//是否能启动平行驾驶
|
||||
ArrayList<UnableLaunchReason> 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<UnableLaunchReason> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user