diff --git a/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java index b47f042072..3510b0f2b6 100644 --- a/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java +++ b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java @@ -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; @@ -184,7 +187,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); @@ -193,11 +196,12 @@ public class SmallMapDirectionView if (mCoordinatesLatLng.size() > 1) { - mCoordinatesLatLngCurrent.clear(); - for (LatLng lng : mCoordinatesLatLng) { - MogoLatLng mogoLatLng = new MogoLatLng(lng.latitude, lng.longitude); - mCoordinatesLatLngCurrent.add(mogoLatLng); - } +// mCoordinatesLatLngCurrent.clear(); +// for (LatLng lng : mCoordinatesLatLng) { +// MogoLatLng mogoLatLng = new MogoLatLng(lng.latitude, lng.longitude); +// mCoordinatesLatLngCurrent.add(mogoLatLng); +// } + removeLoction(latLng); // 结束位置 LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); @@ -211,7 +215,7 @@ public class SmallMapDirectionView endLatLng.latitude, endLatLng.longitude, currentLatLng.latitude, currentLatLng.longitude ); - + Log.d(MODULE_NAME, "calculateDistance=" + calculateDistance); if (calculateDistance <= 20) { clearPolyline(); @@ -226,6 +230,34 @@ public class SmallMapDirectionView 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); diff --git a/modules/mogo-module-adas/build.gradle b/modules/mogo-module-adas/build.gradle index 76cf2bad2d..950dd3274d 100644 --- a/modules/mogo-module-adas/build.gradle +++ b/modules/mogo-module-adas/build.gradle @@ -45,8 +45,9 @@ dependencies { // 现有的ADAS的通讯SDK,需要将里面的东西融合到我们项目中 compileOnly rootProject.ext.dependencies.adasapi - api "com.zhidao.support.adas:high:1.2.0.2" + api "com.zhidao.support.adas:high:1.2.0.8" implementation rootProject.ext.dependencies.mogoami +// implementation "com.zhidao.support.adas:high:1.2.0.7" annotationProcessor rootProject.ext.dependencies.aroutercompiler if (Boolean.valueOf(RELEASE)) { diff --git a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/AdasEventManager.java b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/AdasEventManager.java index 78aae2545c..1817260c66 100644 --- a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/AdasEventManager.java +++ b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/AdasEventManager.java @@ -1,5 +1,7 @@ package com.mogo.module.adas; +import android.util.Log; + import com.google.gson.Gson; import com.mogo.module.adas.entity.WarnMessageModel; import com.mogo.module.adas.model.AdasServiceModel; @@ -19,11 +21,14 @@ 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; +import java.util.List; import java.util.concurrent.TimeUnit; import io.reactivex.Flowable; @@ -240,6 +245,18 @@ public class AdasEventManager implements OnAdasListener, OnAdasMsgConnectStatusL } } + @Override + public void onAutopilotTrajectory(List 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) { @@ -249,6 +266,11 @@ public class AdasEventManager implements OnAdasListener, OnAdasMsgConnectStatusL } } + @Override + public void onAutopilotGuardian(AutopilotGuardianInfo guardianInfo) { + + } + @Override public void onWebSocketConnectSuccess() { Logger.d(TAG, "webSocket 连接成功"); @@ -259,8 +281,8 @@ public class AdasEventManager implements OnAdasListener, OnAdasMsgConnectStatusL } @Override - public void onWebSocketConnectFailed() { - Logger.d(TAG, "webSocket 连接失败"); + public void onWebSocketConnectFailed(String t) { + Logger.d(TAG, "webSocket 连接失败:"+t); for (IAdasStatusListener listener : iAdasStatusListeners) { listener.onServiceDisconnected(); } diff --git a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/IAdasDataListener.java b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/IAdasDataListener.java index ab674557dd..d365d672e8 100644 --- a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/IAdasDataListener.java +++ b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/IAdasDataListener.java @@ -7,6 +7,7 @@ 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; @@ -72,4 +73,13 @@ public interface IAdasDataListener { default void notifyAutopilotState(AutopilotStatus autopilotStatus) { } + /** + * 车前引导路径回调 + * @param trajectory + */ + + default void onAutopilotTrajectory(List trajectory) { + + } + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java index cad4a1f3e5..f0c4ac03ac 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java @@ -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 { @@ -32,7 +35,22 @@ public class MogoRouteOverlayManager implements IMogoCarLocationChangedListener2 RouteOverlayDrawer.getInstance(mContext).putRouteList(routeList); } }); + MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasTrajectoryDataCallBack(new IMogoAdasTrajectoryDataCallBack() { + @Override + public void onAutopilotTrajectory(List trajectoryInfos) { +// Log.e("lianglihui","onAutopilotTrajectory"); + if (trajectoryInfos == null || trajectoryInfos.size() == 0){ + return; + } +// Log.e("lianglihui","trajectoryInfos:"+trajectoryInfos.size()); + List 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 diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java index 02ca549744..64c05f8749 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java @@ -124,4 +124,21 @@ public class RouteOverlayDrawer { public void putRouteList(List routeList) { this.mRouteList = routeList; } + + public void drawTrajectoryList(List 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); + } + } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java index f513af0775..e1c56396a7 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -4,6 +4,7 @@ import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.service.adas.entity.ADASRecognizedResult; +import com.mogo.service.adas.entity.ADASTrajectoryInfo; import java.util.List; @@ -205,4 +206,15 @@ public interface IMogoADASController extends IProvider { void mockAdasRecognized(List recognizedResults); + /** + * 添加车前引导线回调 + * @param + */ + void addAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack); + /** + * 移除车前引导线回调 + * @param + */ + void removeAdasTrajectoryDataCallBack(IMogoAdasTrajectoryDataCallBack callBack); + } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasTrajectoryDataCallBack.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasTrajectoryDataCallBack.java new file mode 100644 index 0000000000..9a1c36fb0a --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasTrajectoryDataCallBack.java @@ -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 trajectoryInfo); +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASTrajectoryInfo.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASTrajectoryInfo.java new file mode 100644 index 0000000000..57fe187bd4 --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASTrajectoryInfo.java @@ -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 + + '}'; + } +} diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index 70ec2efc43..e45e4470f7 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -5,6 +5,7 @@ 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; @@ -26,10 +27,12 @@ import com.mogo.service.adas.IMogoAdasDataCallback; import com.mogo.service.adas.IMogoAdasOCHCallback; import com.mogo.service.adas.IMogoAdasRecognizedDataCallback; 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; @@ -53,6 +56,7 @@ 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; @@ -107,6 +111,11 @@ public class MogoADASController implements IMogoADASController { */ private final List mMogoAdasRouteCallBacks = new CopyOnWriteArrayList<>(); + /** + * 车前引导线回调 + */ + private final List mMogoAdasTrajectoryDataCallBacks = new CopyOnWriteArrayList<>(); + private IAdasDataListener mAdasDataListener; private IMogoAdasCarDataCallback mMogoAdasCarDataCallback; @@ -309,6 +318,7 @@ public class MogoADASController implements IMogoADASController { }); } + @Override public void selectCarModelUrl(String carStyleUrl) { Logger.d(TAG, "selectCarModelUrl: " + carStyleUrl); @@ -367,6 +377,36 @@ public class MogoADASController implements IMogoADASController { } } + @Override + public void onAutopilotTrajectory(List trajectorys) { + if(trajectorys != null && trajectorys.size() > 0){ + List trajectoryInfoArrayList = new ArrayList<>(); + TrajectoryInfo t= trajectorys.get(0); + Log.e("lianglihui","trajectorys:"+ t.getLat()+"-"+t.getLon()+"-"+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()); + trajectoryInfoArrayList.add(adasTrajectoryInfo); + } + + for (IMogoAdasTrajectoryDataCallBack callBack: mMogoAdasTrajectoryDataCallBacks){ + if (callBack != null){ + callBack.onAutopilotTrajectory(trajectoryInfoArrayList); + } + } + + } + } + + @Override public void autopilotRoute(AutopilotRoute autopilotRoute) { if (autopilotRoute.getModels() == null || autopilotRoute.getModels().size() == 0) { @@ -770,6 +810,22 @@ public class MogoADASController implements IMogoADASController { } } + @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); + } + } } diff --git a/test/crashreport-upgrade/src/main/AndroidManifest.xml b/test/crashreport-upgrade/src/main/AndroidManifest.xml index 765c64126e..9f5b88a7f2 100644 --- a/test/crashreport-upgrade/src/main/AndroidManifest.xml +++ b/test/crashreport-upgrade/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ @@ -6,6 +7,7 @@ android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileProvider" android:exported="false" + tools:replace="android:authorities" android:grantUriPermissions="true">