Skip to content

Commit a282eb7

Browse files
plugins/cloud/ripples/RipplesUpdater: Fix to send plan for vehicles operating through sat comms.
1 parent ad14f5d commit a282eb7

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

plugins-dev/cloud/src/java/pt/lsts/ripples/RipplesUpdater.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import java.util.ArrayList;
4747
import java.util.Date;
4848
import java.util.LinkedHashMap;
49+
import java.util.List;
4950

5051
import javax.swing.ImageIcon;
5152
import javax.swing.JCheckBoxMenuItem;
@@ -75,6 +76,7 @@
7576
import pt.lsts.neptus.types.coord.LocationType;
7677
import pt.lsts.neptus.types.map.PlanUtil;
7778
import pt.lsts.neptus.types.mission.plan.PlanType;
79+
import pt.lsts.neptus.util.AngleUtils;
7880
import pt.lsts.neptus.util.ImageUtils;
7981
import pt.lsts.neptus.util.conf.DoubleMinMaxValidator;
8082
import pt.lsts.neptus.util.conf.GeneralPreferences;
@@ -212,6 +214,8 @@ public void on(PlanControlState pcs) {
212214
planStates.put(pcs.getSourceName(), pcs);
213215
}
214216
}
217+
218+
215219
}
216220

217221
@Subscribe
@@ -311,8 +315,40 @@ public void sendUpdatesToRipples() {
311315
if (lastSendTime != null && System.currentTimeMillis() - lastSendTime.getTime() < pollInterval.toMillis()) {
312316
return;
313317
}
318+
Date prevSentTime = lastSendTime;
314319
lastSendTime = new Date();
315320

321+
try {
322+
// Let us see if we have plan data to send but no position data
323+
List<String> missingSystemsPositions = new ArrayList<>();
324+
for (String sysName : planStates.keySet()) {
325+
PlanControlState pstate = planStates.get(sysName);
326+
if (pstate.getTimestampMillis() < prevSentTime.getTime())
327+
continue;
328+
if (!assetStates.containsKey(sysName)) {
329+
missingSystemsPositions.add(sysName);
330+
}
331+
}
332+
333+
// update asset states with the latest plan data
334+
assetStates.forEach((sysName, assetState) -> {
335+
RipplesAssetState newAssetState = fillAssetState(sysName, assetState);
336+
if (newAssetState == null)
337+
return;
338+
assetStates.replace(sysName, newAssetState);
339+
});
340+
341+
// Add the missing ones if planinfo later than the asset state
342+
for (String sysName : missingSystemsPositions) {
343+
RipplesAssetState newAssetState = fillAssetState(sysName, null);
344+
if (newAssetState != null) {
345+
assetStates.put(sysName, newAssetState);
346+
}
347+
}
348+
} catch (Exception e) {
349+
NeptusLog.pub().warn("Error checking for plan data: " + e.getMessage());
350+
}
351+
316352
try {
317353
System.out.println("Sending updates to Ripples");
318354
ArrayList<RipplesAsset> payload = new ArrayList<>();
@@ -351,6 +387,21 @@ public void sendUpdatesToRipples() {
351387
}
352388
}
353389

390+
private static RipplesAssetState fillAssetState(String sysName, RipplesAssetState assetState) {
391+
ImcSystem sys = ImcSystemsHolder.getSystemWithName(sysName);
392+
if (sys == null)
393+
return null;
394+
395+
LocationType loc = sys.getLocation().getNewAbsoluteLatLonDepth();
396+
long locTimeMillis = sys.getLocationTimeMillis();
397+
double headingDegress = sys.getYawDegrees();
398+
if (loc == null || assetState != null && assetState.getTimestamp() > locTimeMillis / 1000.0)
399+
return null;
400+
401+
return new RipplesAssetState((int) (locTimeMillis / 1000.0), loc.getLatitudeDegs(),
402+
loc.getLongitudeDegs(), AngleUtils.nomalizeAngleDegrees360(headingDegress), -1);
403+
}
404+
354405
private String sendPost(String data) throws Exception {
355406
if (this.connected) {
356407
String ripplesPostUrl = GeneralPreferences.ripplesUrl + "/assets";

0 commit comments

Comments
 (0)