Merge branch 'dev_MogoAP_eagle-930_210926_8.0.12' into dev_MogoAP_eagle-1030_211020_8.0.14

# Conflicts:
#	core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/AutoPilotStatusView.kt
#	gradle.properties
#	modules/mogo-module-adas/build.gradle
#	modules/mogo-module-adas/src/main/java/com/mogo/module/adas/AdasEventManager.java
#	modules/mogo-module-adas/src/main/java/com/mogo/module/adas/IAdasDataListener.java
#	services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
#	services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
This commit is contained in:
董宏宇
2021-10-28 10:20:23 +08:00
11 changed files with 384 additions and 40 deletions

View File

@@ -34,8 +34,11 @@ import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.function.smp.utils.MapAssetStyleUtils;
import com.mogo.eagle.core.function.smp.view.ISmallMapDirectionView;
import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.utils.DrivingDirectionUtils;
import com.mogo.module.common.utils.LocationUtils;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
@@ -183,7 +186,7 @@ public class SmallMapDirectionView
public void onCarLocationChanged2(Location latLng) {
//Logger.d(MODULE_NAME, "onCarLocationChanged2 latLng:" + latLng);
LatLng currentLatLng = new LatLng(latLng.getLatitude(), latLng.getLongitude());
//更新车辆位置
if (mCarMarker != null) {
// mCarMarker.setRotateAngle(360 - latLng.getBearing());
mCarMarker.setPosition(currentLatLng);
@@ -191,54 +194,83 @@ public class SmallMapDirectionView
}
// if (mCoordinatesLatLng.size() > 1) {
if (mCoordinatesLatLng.size() > 1) {
// mCoordinatesLatLngCurrent.clear();
// for (LatLng lng : mCoordinatesLatLng) {
// MogoLatLng mogoLatLng = new MogoLatLng(lng.latitude, lng.longitude);
// mCoordinatesLatLngCurrent.add(mogoLatLng);
// }
//
// // 结束位置
// LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1);
// // 与结束位置进行 GeoHash 0-12
//// GeoHash endGeoHash = GeoHash.withCharacterPrecision(endLatLng.latitude, endLatLng.longitude, 7);
//// GeoHash currentGeoHash = GeoHash.withCharacterPrecision(currentLatLng.latitude, currentLatLng.longitude, 7);
//// Log.d(MODULE_NAME, "currentGeoHash=" + currentGeoHash);
//// Log.d(MODULE_NAME, "endGeoHash=" + endGeoHash);
//
// float calculateDistance = CoordinateUtils.calculateLineDistance(
// endLatLng.latitude, endLatLng.longitude,
// currentLatLng.latitude, currentLatLng.longitude
// );
//
// Log.d(MODULE_NAME, "calculateDistance=" + calculateDistance);
// if (calculateDistance <= 20) {
// clearPolyline();
// } else {
// drawablePolyline(mCoordinatesLatLngCurrent);
// }
// } else {
// //设置希望展示的地图缩放级别
// mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, zoomLevel));
// }
// removeLoction(latLng);
// 结束位置
LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1);
// 与结束位置进行 GeoHash 0-12
// GeoHash endGeoHash = GeoHash.withCharacterPrecision(endLatLng.latitude, endLatLng.longitude, 7);
// GeoHash currentGeoHash = GeoHash.withCharacterPrecision(currentLatLng.latitude, currentLatLng.longitude, 7);
// Log.d(MODULE_NAME, "currentGeoHash=" + currentGeoHash);
// Log.d(MODULE_NAME, "endGeoHash=" + endGeoHash);
float calculateDistance = CoordinateUtils.calculateLineDistance(
endLatLng.latitude, endLatLng.longitude,
currentLatLng.latitude, currentLatLng.longitude
);
Log.d(MODULE_NAME, "calculateDistance=" + calculateDistance);
if (calculateDistance <= 20) {
clearPolyline();
} else {
drawablePolyline();
}
} else {
//设置希望展示的地图缩放级别
mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, zoomLevel));
}
CameraPosition cameraPosition = new CameraPosition.Builder().target(mCarMarker.getPosition()).bearing(latLng.getBearing()).tilt(0).zoom(zoomLevel).build();
mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
private void removeLoction(Location latLng) {
for (LatLng l: mCoordinatesLatLng){
if (!isPointOnCarFront(latLng,l)){
mCoordinatesLatLng.remove(l);
}
}
}
public static boolean isPointOnCarFront(Location carLocal, LatLng pointLocal) {
double carLon = carLocal.getLongitude();
double carLat = carLocal.getLatitude();
double poiLon = pointLocal.longitude;
double poiLat = pointLocal.latitude;
float carAngle = carLocal.getBearing();
// 计算车辆与点之间的夹角
int diffAngle = DrivingDirectionUtils.getDegreeOfCar2Poi(
carLon, carLat, poiLon, poiLat, (int) carAngle);
if (diffAngle <= 90) {
Log.i("lianglihui", "目标点在车辆--前方");
return true;
} else {
Log.i("lianglihui", "目标点在车辆--后方");
return false;
}
}
@Override
public void onCarLocationChanged(MogoLatLng latLng) {
Logger.d(MODULE_NAME, "onCarLocationChanged latLng:" + latLng);
}
@Override
public void drawablePolyline(List<MogoLatLng> coordinates) {
public void drawablePolyline() {
clearPolyline();
// mCoordinatesLatLng.clear();
List<LatLng> latLngs = CoordinateConverterFrom84ForList(mContext,coordinates);
mCoordinatesLatLng.addAll(latLngs);
// List<LatLng> latLngs = CoordinateConverterFrom84ForList(mContext,coordinates);
// mCoordinatesLatLng.addAll(latLngs);
// for (LatLng coordinate : mCoordinatesLatLng) {
//// mCoordinatesLatLng.add(new LatLng(coordinate.getLat(), coordinate.getLon()));
//// Log.e("",coordinate.latitude+":"+coordinate.longitude);
// mCoordinatesLatLng.add(new LatLng(coordinate.getLat(), coordinate.getLon()));
// Log.e("",coordinate.latitude+":"+coordinate.longitude);
// }
if (mAMap != null) {
if (mCoordinatesLatLng.size() > 2) {
@@ -290,6 +322,19 @@ public class SmallMapDirectionView
}
@Override
public void clearPolyline() {
// mCoordinatesLatLng.clear();
if (mPolyline != null) {
mPolyline.remove();
}
if (mStartMarker != null) {
mStartMarker.setVisible(false);
}
if (mEndMarker != null) {
mEndMarker.setVisible(false);
}
}
public void resetPolyine(){
mCoordinatesLatLng.clear();
if (mPolyline != null) {
mPolyline.remove();
@@ -326,9 +371,9 @@ public class SmallMapDirectionView
}
}
public void setRouteList(List<MogoLatLng> coordinates) {
// mCoordinatesLatLng.clear();
// List<LatLng> latLngs = CoordinateConverterFrom84ForList(mContext,coordinates);
// mCoordinatesLatLng.addAll(latLngs);
public void convert(List<MogoLatLng> coordinates) {
mCoordinatesLatLng.clear();
List<LatLng> latLngs = CoordinateConverterFrom84ForList(mContext,coordinates);
mCoordinatesLatLng.addAll(latLngs);
}
}

View File

@@ -45,8 +45,8 @@ public class SmallMapFragment extends Fragment {
public void drawablePolyline(List<MogoLatLng> coordinates) {
if (mSmallMapDirectionView != null) {
mSmallMapDirectionView.setRouteList(coordinates);
mSmallMapDirectionView.drawablePolyline(coordinates);
mSmallMapDirectionView.convert(coordinates);
mSmallMapDirectionView.drawablePolyline();
}
}

View File

@@ -1,5 +1,6 @@
package com.mogo.eagle.core.function.smp.view;
import com.amap.api.maps.model.LatLng;
import com.mogo.eagle.core.data.map.MogoLatLng;
import java.util.List;
@@ -13,7 +14,7 @@ public interface ISmallMapDirectionView {
/**
* 绘制路径线
*/
void drawablePolyline(List<MogoLatLng> coordinates);
void drawablePolyline();
/**
* 清除路径线

View File

@@ -3,6 +3,8 @@ package com.mogo.module.adas;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.util.Log;
import com.google.gson.Gson;
import com.mogo.eagle.core.data.autopilot.AutopilotCarStateInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotGuardianStatusInfo;
@@ -22,6 +24,18 @@ import com.mogo.utils.network.utils.GsonUtil;
import com.zhidao.autopilotservice.model.AdasAIDLAutopilotStateModel;
import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasMsgConnectStatusListener;
import com.zhidao.support.adas.high.bean.AutopilotRoute;
import com.zhidao.support.adas.high.bean.AutopilotStatus;
import com.zhidao.support.adas.high.bean.AutopilotWayArrive;
import com.zhidao.support.adas.high.bean.CarLaneInfo;
import com.zhidao.support.adas.high.bean.CarStateInfo;
import com.zhidao.support.adas.high.bean.LightStatueInfo;
import com.zhidao.support.adas.high.bean.ObstaclesInfo;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.TrajectoryInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import com.zhidao.support.adas.high.bean.guardian.AutopilotGuardianInfo;
import com.zhidao.support.adas.high.common.MsgActionType;
import com.zhidao.support.obu.ami.AmiClientManager;
import java.util.ArrayList;
@@ -104,6 +118,18 @@ public class AdasEventManager implements
}
@Override
public void onAutopilotTrajectory(List<TrajectoryInfo> trajectoryList) {
// Log.e("lianglihui","adas onAutopilotTrajectory");
if(trajectoryList != null && trajectoryList.size() >0){
for (IAdasDataListener listener : iAdasEventListeners) {
if (listener != null) {
listener.onAutopilotTrajectory(trajectoryList);
}
}
}
}
@Override
public void onAutopilotSNRequest() {
if (providerBizListener != null) {
@@ -113,6 +139,11 @@ public class AdasEventManager implements
}
}
@Override
public void onAutopilotGuardian(AutopilotGuardianInfo guardianInfo) {
}
@Override
public void onWebSocketConnectSuccess() {
Logger.d(TAG, "webSocket 连接成功");

View File

@@ -4,6 +4,17 @@ import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotWarnMessage;
import com.mogo.module.adas.entity.WarnMessageModel;
import com.zhidao.autopilotservice.model.AdasAIDLAutopilotArriveModel;
import com.zhidao.autopilotservice.model.AdasAIDLOwnerCarRectModel;
import com.zhidao.autopilotservice.model.AdasAIDLOwnerCarStateModel;
import com.zhidao.support.adas.high.bean.AutopilotRoute;
import com.zhidao.support.adas.high.bean.AutopilotStatus;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.TrajectoryInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import java.util.List;
public interface IAdasDataListener {
@@ -50,4 +61,13 @@ public interface IAdasDataListener {
default void notifyAutopilotState(AutopilotStatusInfo autopilotStatus) {
}
/**
* 车前引导路径回调
* @param trajectory
*/
default void onAutopilotTrajectory(List<TrajectoryInfo> trajectory) {
}
}

View File

@@ -2,14 +2,17 @@ package com.mogo.module.service.routeoverlay;
import android.content.Context;
import android.location.Location;
import android.util.Log;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.drawer.MarkerDrawer;
import com.mogo.service.adas.IMogoAdasRouteCallBack;
import com.mogo.service.adas.IMogoAdasTrajectoryDataCallBack;
import com.mogo.service.adas.entity.ADASTrajectoryInfo;
import java.util.ArrayList;
import java.util.List;
public class MogoRouteOverlayManager implements IMogoCarLocationChangedListener2 {
@@ -29,10 +32,25 @@ public class MogoRouteOverlayManager implements IMogoCarLocationChangedListener2
@Override
public void routeResult(List<MogoLatLng> routeList) {
Log.e("lianglihui","routeResult:"+routeList.size());
RouteOverlayDrawer.getInstance(mContext).putRouteList(routeList);
}
});
MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasTrajectoryDataCallBack(new IMogoAdasTrajectoryDataCallBack() {
@Override
public void onAutopilotTrajectory(List<ADASTrajectoryInfo> trajectoryInfos) {
if (trajectoryInfos == null || trajectoryInfos.size() == 0){
return;
}
Log.e("lianglihui","trajectoryInfos:"+trajectoryInfos.size());
List<MogoLatLng> mogoLatLngs = new ArrayList<>();
for (ADASTrajectoryInfo a:trajectoryInfos) {
mogoLatLngs.add(new MogoLatLng(a.getLat(),a.getLon()));
}
RouteOverlayDrawer.getInstance(mContext).drawTrajectoryList(mogoLatLngs);
}
});
}
public static MogoRouteOverlayManager getInstance(Context context) {
@@ -49,7 +67,7 @@ public class MogoRouteOverlayManager implements IMogoCarLocationChangedListener2
@Override
public void onCarLocationChanged2(Location latLng) {
updateLocation(latLng);
// updateLocation(latLng);
}
@Override

View File

@@ -124,4 +124,21 @@ public class RouteOverlayDrawer {
public void putRouteList(List<MogoLatLng> routeList) {
this.mRouteList = routeList;
}
public void drawTrajectoryList(List<MogoLatLng> routeList) {
clearMogoRouteOverlay();
if (routeList != null) {
for (MogoLatLng latLng : routeList) {
mPolylinePointList.add(latLng);
}
mPolylineOptions.setGps(true);
mPolylineColors.addAll(ColorUtils.getGradientAlpha("#002965ED", "#FF2965ED", "#002965ED", mPolylinePointList.size()));
// 替换路径集合
mPolylineOptions.points(mPolylinePointList);
// 线条粗细,渐变,渐变色值
mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors);
// 绘制线
mMoGoPolyline = mogoOverlayManager.addPolyline(mPolylineOptions);
}
}
}

View File

@@ -4,6 +4,8 @@ import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
import com.mogo.eagle.core.data.traffic.TrafficData;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.service.adas.entity.ADASRecognizedResult;
import com.mogo.service.adas.entity.ADASTrajectoryInfo;
import java.util.List;
@@ -169,4 +171,15 @@ public interface IMogoADASController extends IProvider {
*/
void cancelAutopilot();
/**
* 添加车前引导线回调
* @param
*/
void addAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack);
/**
* 移除车前引导线回调
* @param
*/
void removeAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack);
}

View File

@@ -0,0 +1,9 @@
package com.mogo.service.adas;
import com.mogo.service.adas.entity.ADASTrajectoryInfo;
import java.util.List;
public interface IMogoAdasTrajectoryDataCallBack {
void onAutopilotTrajectory(List<ADASTrajectoryInfo> trajectoryInfo);
}

View File

@@ -0,0 +1,115 @@
package com.mogo.service.adas.entity;
/**
* @author song kenan
* @des
* @date 2021/10/21
*/
public class ADASTrajectoryInfo {
//经度
private Double lon;
//纬度
private Double lat;
//高度
private Double alt;
//时间 秒s
private Double time;
//速度 m/s
private Double velocity;
//加速度
private Double acceleration;
//速度方向
private Double theta;
//曲率
private Double kappa;
//从起点到目前的总距离
private Double accumulatedDis;
public void setLon(Double lon) {
this.lon = lon;
}
public void setLat(Double lat) {
this.lat = lat;
}
public void setAlt(Double alt) {
this.alt = alt;
}
public void setTime(Double time) {
this.time = time;
}
public void setVelocity(Double velocity) {
this.velocity = velocity;
}
public void setAcceleration(Double acceleration) {
this.acceleration = acceleration;
}
public void setTheta(Double theta) {
this.theta = theta;
}
public void setKappa(Double kappa) {
this.kappa = kappa;
}
public void setAccumulatedDis(Double accumulatedDis) {
this.accumulatedDis = accumulatedDis;
}
public Double getLon() {
return lon;
}
public Double getLat() {
return lat;
}
public Double getAlt() {
return alt;
}
public Double getTime() {
return time;
}
public Double getVelocity() {
return velocity;
}
public Double getAcceleration() {
return acceleration;
}
public Double getTheta() {
return theta;
}
public Double getKappa() {
return kappa;
}
public Double getAccumulatedDis() {
return accumulatedDis;
}
@Override
public String toString() {
return "TrajectoryModels{" +
"lon=" + lon +
", lat=" + lat +
", alt=" + alt +
", time='" + time + '\'' +
", velocity=" + velocity +
", acceleration=" + acceleration +
", theta=" + theta +
", kappa=" + kappa +
", accumulatedDis=" + accumulatedDis +
'}';
}
}

View File

@@ -3,6 +3,11 @@ package com.mogo.service.impl.adas;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
@@ -27,7 +32,16 @@ import com.mogo.service.adas.IMogoAdasCarDataCallback;
import com.mogo.service.adas.IMogoAdasDataCallback;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.adas.IMogoAdasRouteCallBack;
import com.mogo.service.adas.IMogoAdasTrajectoryDataCallBack;
import com.mogo.service.adas.IMogoAdasWarnMessageCallback;
import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters;
import com.mogo.service.adas.entity.ADASCarStateInfo;
import com.mogo.service.adas.entity.ADASRecognizedResult;
import com.mogo.service.adas.entity.ADASTrajectoryInfo;
import com.mogo.service.adas.entity.ADASWarnMessage;
import com.mogo.eagle.core.data.autopilot.AdasOCHData;
import com.mogo.service.adas.entity.CarModelListResponse;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.UiThreadHandler;
@@ -37,6 +51,13 @@ import com.zhidao.adasconfig.api.AdasConfigApiController;
import com.zhidao.adasconfig.common.config.EnumCarHeading;
import com.zhidao.adasconfig.common.config.EnumSkinStyle;
import com.zhidao.autopilot.support.api.AutopilotServiceManage;
import com.zhidao.autopilotservice.model.AdasAIDLAutopilotArriveModel;
import com.zhidao.autopilotservice.model.AdasAIDLOwnerCarRectModel;
import com.zhidao.support.adas.high.bean.AutopilotRoute;
import com.zhidao.support.adas.high.bean.AutopilotStatus;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.TrajectoryInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import org.json.JSONObject;
@@ -78,6 +99,11 @@ public class MogoADASController implements IMogoADASController {
*/
private final List<IMogoAdasRouteCallBack> mMogoAdasRouteCallBacks = new CopyOnWriteArrayList<>();
/**
* 车前引导线回调
*/
private final List<IMogoAdasTrajectoryDataCallBack> mMogoAdasTrajectoryDataCallBacks = new CopyOnWriteArrayList<>();
private IAdasDataListener mAdasDataListener;
private IMogoAdasCarDataCallback mMogoAdasCarDataCallback;
@@ -170,6 +196,7 @@ public class MogoADASController implements IMogoADASController {
});
}
@Override
public void autopilotArrive(AutopilotStationInfo autopilotArriveModel) {
if (autopilotArriveModel == null) {
@@ -187,6 +214,37 @@ public class MogoADASController implements IMogoADASController {
}
}
@Override
public void onAutopilotTrajectory(List<TrajectoryInfo> trajectorys) {
if(trajectorys != null && trajectorys.size() > 0){
List<ADASTrajectoryInfo> trajectoryInfoArrayList = new ArrayList<>();
// TrajectoryInfo t= trajectorys.get(0);
Log.e("lianglihui","time:"+ System.currentTimeMillis());
for (TrajectoryInfo trajectory : trajectorys){
ADASTrajectoryInfo adasTrajectoryInfo = new ADASTrajectoryInfo();
adasTrajectoryInfo.setLat(trajectory.getLat());
adasTrajectoryInfo.setLon(trajectory.getLon());
adasTrajectoryInfo.setAcceleration(trajectory.getAcceleration());
adasTrajectoryInfo.setAccumulatedDis(trajectory.getAccumulatedDis());
adasTrajectoryInfo.setTime(trajectory.getTime());
adasTrajectoryInfo.setVelocity(trajectory.getVelocity());
adasTrajectoryInfo.setAlt(trajectory.getAlt());
adasTrajectoryInfo.setKappa(trajectory.getKappa());
adasTrajectoryInfo.setTheta(trajectory.getTheta());
Log.e("lianglihui","trajectory:"+ trajectory.getLat()+"-"+trajectory.getLon());
trajectoryInfoArrayList.add(adasTrajectoryInfo);
}
for (IMogoAdasTrajectoryDataCallBack callBack: mMogoAdasTrajectoryDataCallBacks){
if (callBack != null){
callBack.onAutopilotTrajectory(trajectoryInfoArrayList);
}
}
}
}
@Override
public void autopilotRoute(AutopilotRouteInfo autopilotRoute) {
if (autopilotRoute.getModels() == null || autopilotRoute.getModels().size() == 0) {
@@ -501,6 +559,23 @@ public class MogoADASController implements IMogoADASController {
public void cancelAutopilot() {
adasProvider.cancelPilot();
}
@Override
public void addAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack) {
if (callBack == null) {
return;
}
if (!mMogoAdasTrajectoryDataCallBacks.contains(callBack)) {
mMogoAdasTrajectoryDataCallBacks.add(callBack);
}
}
@Override
public void removeAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack) {
if (callBack != null){
mMogoAdasTrajectoryDataCallBacks.remove(callBack);
}
}
}