Cherry pick

Signed-off-by: 董宏宇 <martindhy@gmail.com>
This commit is contained in:
donghongyu
2021-09-06 18:22:58 +08:00
committed by 董宏宇
parent d3845f2b4f
commit 5716dc1f4b
13 changed files with 284 additions and 62 deletions

View File

@@ -9,6 +9,7 @@ import android.location.Location;
import android.os.Handler;
import android.os.Message;
import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.map.MogoLatLng;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
@@ -16,16 +17,21 @@ import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.service.dispatch.bean.DispatchAdasAutoPilotLocReceiverBean;
import com.mogo.module.service.dispatch.model.DispatchServiceModel;
import com.mogo.module.service.dispatch.model.IDispatch;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.service.cloud.socket.IMogoOnMessageListener;
import com.mogo.service.connection.IMogoOnMessageListener;
import com.mogo.service.entrance.IMogoEntranceAutopilotStatusClickListener;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
import java.util.List;
//负责监听自动驾驶状态并进行状态上报,自动驾驶路线上报,接收调度指令展示指令弹窗
public class DispatchAutoPilotManager implements IMogoOnMessageListener<DispatchAdasAutoPilotLocReceiverBean>
, IDispatchRemindClickListener
, IMogoCarLocationChangedListener2, IMogoAdasOCHCallback {
, IMogoCarLocationChangedListener2, IMogoAdasOCHCallback, IMogoEntranceAutopilotStatusClickListener {
private static final String TAG = "DispatchAutoPilotManager";
private static volatile DispatchAutoPilotManager instance;
@@ -40,6 +46,10 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
private DispatchAdasAutoPilotLocReceiverBean receiverBean;
private int autoPilotStatus = 0;
private String reason = null;
private boolean isDispatch = false;
private boolean isArriveEnd = false;
private IMogoServiceApis mApis;
private DispatchAutoPilotManager() {
@@ -65,6 +75,8 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
Logger.d(TAG, "此时已经有调度,又收到调度信息");
return;
}
isDispatch = true;
isArriveEnd = false;
DispatchAdasAutoPilotLocReceiverBean msgData = (DispatchAdasAutoPilotLocReceiverBean) msg.obj;
dispatchDialogManager.showDialog(msgData);
} else if (msg.what == MSG_TYPE_UPLOAD_AUTOPILOT_STATUS) {
@@ -76,12 +88,14 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
public void initSocket(Context context) {
mContext = context;
MogoApisHandler.getInstance().getApis()
.getSocketManagerApi(context).registerOnMessageListener(MSG_SOCKET_TYPE, this);
MogoApisHandler.getInstance().getApis().getRegisterCenterApi()
mApis = MogoApisHandler.getInstance().getApis();
mApis.getSocketManagerApi(context).registerOnMessageListener(MSG_SOCKET_TYPE, this);
mApis.getRegisterCenterApi()
.registerCarLocationChangedListener(TAG, this);
MogoApisHandler.getInstance().getApis().getAdasControllerApi()
mApis.getAdasControllerApi()
.addAdasOCHCallback(this);
mApis.getEntranceButtonController().addEntranceAutopilotStatusClickListener(this);
dispatchDialogManager = DispatchDialogManager.getInstance(context);
dispatchDialogManager.addIDispatchRemindListener(this);
handler.sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L);
@@ -111,13 +125,7 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
DispatchServiceModel.getInstance().dispatchResultUpload(DISPATCH_RESULT_AFFIRM, new IDispatch() {
@Override
public void onSuccess() {
RemoteControlAutoPilotParameters currentAutopilot = new RemoteControlAutoPilotParameters();
currentAutopilot.isSpeakVoice = false;
currentAutopilot.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(receiverBean.getStartLat(), receiverBean.getStartLon());
currentAutopilot.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(receiverBean.getEndLat(), receiverBean.getEndLon());
currentAutopilot.vehicleType = 10;
Logger.d(TAG, "开启自动驾驶====" + currentAutopilot);
MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(currentAutopilot);
startAutoPilot();
}
@Override
@@ -127,6 +135,21 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
});
}
private void startAutoPilot() {
RemoteControlAutoPilotParameters currentAutopilot = new RemoteControlAutoPilotParameters();
currentAutopilot.isSpeakVoice = false;
List<RemoteControlAutoPilotParameters.AutoPilotLonLat> wayLatLon = new ArrayList<>();
for (MogoLatLng mogoLatLng : receiverBean.getStopsList()) {
wayLatLon.add(new RemoteControlAutoPilotParameters.AutoPilotLonLat(mogoLatLng.lat, mogoLatLng.lon));
}
currentAutopilot.wayLatLons = wayLatLon;
currentAutopilot.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(receiverBean.getStartLat(), receiverBean.getStartLon());
currentAutopilot.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(receiverBean.getEndLat(), receiverBean.getEndLon());
currentAutopilot.vehicleType = 10;
Logger.d(TAG, "开启自动驾驶====" + currentAutopilot);
mApis.getAdasControllerApi().aiCloudToAdasData(currentAutopilot);
}
@Override
public void cancel(boolean manualTrigger) {
dispatchDialogManager.releaseDialog();
@@ -164,6 +187,40 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
}
@Override
public void onArriveAt(AdasOCHData data) {
double endLat = data.lat;
double endLon = data.lon;
// 计算是不是到了终点
float distanceFromSelf = CoordinateUtils.calculateLineDistance(receiverBean.getEndLon(), receiverBean.getEndLat()
, endLon, endLat);
Logger.d(TAG, "onArriveAt cal distance : " + distanceFromSelf);
if (distanceFromSelf < 10) {
Logger.d(TAG, "onArriveAt end location");
isDispatch = false;
isArriveEnd = true;
}
}
@Override
public void onStateChanged(int state, String reason) {
autoPilotStatus = state;
this.reason = reason;
}
@Override
public void click() {
// 确保到达终点后,再次点击,不会有回馈,并且在下次调开始时,才会重置
if (isArriveEnd) {
return;
}
//todo 确认是否要根据停靠时自动驾驶状态,再次开启自动驾驶
// 确保处于调度中并且返回的自动驾驶状态为1才开启自动驾驶
if (isDispatch ) {
startAutoPilot();
}
}
public void testAutopilotStatus() {
autoPilotStatus = 2;
}
@@ -174,7 +231,7 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START, "1",
26.825571122, 112.5762410415, "起点---5号跑道",
26.825571122, 112.5762410415, "终点---鄂州机场",
"5分钟", "AR453航班", "你车需执行编号ca1098次航班的引导任务从A区A1到B区B1", System.currentTimeMillis());
"5分钟", "AR453航班", "你车需执行编号ca1098次航班的引导任务从A区A1到B区B1", System.currentTimeMillis(), new ArrayList<>());
this.receiverBean = adasAutoPilotLocReceiverBean;
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
}
@@ -185,7 +242,7 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_EZHOU, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_STOP, "1",
0.0, 0.0, "",
0.0, 0.0, "",
"", "", "", System.currentTimeMillis());
"", "", "", System.currentTimeMillis(), new ArrayList<>());
this.receiverBean = adasAutoPilotLocReceiverBean;
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
}
@@ -196,7 +253,7 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
DispatchAdasAutoPilotLocReceiverBean.DISPATCH_SOURCE_HENGYANG, DispatchAdasAutoPilotLocReceiverBean.DISPATCH_TYPE_START, "2",
26.825571122, 112.5762410415, "衡阳科学城",
26.825571122, 112.5762410415, "衡阳首钢集团",
"", "", "", System.currentTimeMillis());
"", "", "", System.currentTimeMillis(), new ArrayList<>());
this.receiverBean = adasAutoPilotLocReceiverBean;
DispatchDialogManager.getInstance(mContext).showDialog(adasAutoPilotLocReceiverBean);
}
@@ -214,15 +271,4 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener<Dispatch
}
});
}
@Override
public void onArriveAt(AdasOCHData data) {
}
@Override
public void onStateChanged(int state, String reason) {
autoPilotStatus = state;
this.reason = reason;
}
}

View File

@@ -1,5 +1,9 @@
package com.mogo.module.service.dispatch.bean;
import com.mogo.map.MogoLatLng;
import java.util.List;
public class DispatchAdasAutoPilotLocReceiverBean {
public static final int DISPATCH_SOURCE_HENGYANG = 1;
@@ -23,8 +27,9 @@ public class DispatchAdasAutoPilotLocReceiverBean {
private String flightInfo;
private String taskInfo;
private long systemTime;
private List<MogoLatLng> stopsList;
public DispatchAdasAutoPilotLocReceiverBean(int source, int type, String poiId, double startLat, double startLon, String startLocAddress, double endLat, double endLon, String endLocAddress, String taskTime, String flightInfo, String taskInfo, long systemTime) {
public DispatchAdasAutoPilotLocReceiverBean(int source, int type, String poiId, double startLat, double startLon, String startLocAddress, double endLat, double endLon, String endLocAddress, String taskTime, String flightInfo, String taskInfo, long systemTime, List<MogoLatLng> stopsList) {
this.source = source;
this.type = type;
this.poiId = poiId;
@@ -38,6 +43,7 @@ public class DispatchAdasAutoPilotLocReceiverBean {
this.flightInfo = flightInfo;
this.taskInfo = taskInfo;
this.systemTime = systemTime;
this.stopsList = stopsList;
}
public int getSource() {
@@ -144,6 +150,14 @@ public class DispatchAdasAutoPilotLocReceiverBean {
this.systemTime = systemTime;
}
public List<MogoLatLng> getStopsList() {
return stopsList;
}
public void setStopsList(List<MogoLatLng> stopsList) {
this.stopsList = stopsList;
}
@Override
public String toString() {
return "DispatchAdasAutoPilotLocReceiverBean{" +
@@ -160,6 +174,7 @@ public class DispatchAdasAutoPilotLocReceiverBean {
", flightInfo='" + flightInfo + '\'' +
", taskInfo='" + taskInfo + '\'' +
", systemTime=" + systemTime +
", stopsList=" + stopsList +
'}';
}
}