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(
isParallelDrivingAbility: Boolean,
unableParallelDrivingReasons: java.util.ArrayList<UnableLaunchReason>?
isParallelDrivingAbility: Boolean
) {
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(
isParallelDrivingAbility,
unableParallelDrivingReasons
)
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility)
}
@ChainLog(

View File

@@ -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")

View File

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

View File

@@ -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)
}

View File

@@ -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
)
}
}

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) {
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
}

View File

@@ -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,//未连接

View File

@@ -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);
}
}

View File

@@ -478,9 +478,8 @@ public interface OnAdasListener {
* 是否有能力启动平行驾驶
*
* @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.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);
}
}

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.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();

View File

@@ -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)
}
}
}