Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion java/iot3/examples/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ plugins {
}

group = 'com.orange'
version = '0.2.0'
version = '0.2.1'

repositories {
mavenCentral()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,9 @@ static CpmEnvelope121 createTestCpmEnvelope(
.objectAge(1500)
.distance(bicycleX, bicycleY)
.speed(0, 0)
.planarObjectDimension(20, 20)
.planarObjectDimension(20, 10)
.verticalObjectDimension(15)
.yawAngle(120)
.classification(List.of(new ObjectClassification(
new ObjectClass(null,
new ObjectClassVru(null, 1, null, null),
Expand Down
27 changes: 12 additions & 15 deletions java/iot3/examples/src/main/java/com/orange/CpmV211Factory.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,10 @@
import com.orange.iot3mobility.messages.EtsiConverter;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmEnvelope211;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmMessage211;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Altitude;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianCoordinateWithConfidence;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianPosition3d;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianPosition3dWithConfidence;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Circular;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.MapReference;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.PositionConfidenceEllipse;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.ReferencePosition;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.RoadSegment;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Shape;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.*;
import com.orange.iot3mobility.messages.cpm.v211.model.managementcontainer.ManagementContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.originatingrsucontainer.OriginatingRsuContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClass;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClassVru;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClassification;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.PerceivedObject;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.PerceivedObjectContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.*;
import com.orange.iot3mobility.messages.cpm.v211.model.sensorinformationcontainer.SensorInformation;
import com.orange.iot3mobility.messages.cpm.v211.model.sensorinformationcontainer.SensorInformationContainer;
import com.orange.iot3mobility.quadkey.LatLng;
Expand Down Expand Up @@ -56,6 +43,9 @@ static CpmEnvelope211 createTestCpmEnvelope(
.classification(List.of(new ObjectClassification(
ObjectClass.vru(ObjectClassVru.pedestrian(1)),
100)))
.objectDimensionX(new ObjectDimension(10, 1))
.objectDimensionY(new ObjectDimension(10, 1))
.objectDimensionZ(new ObjectDimension(20, 1))
.sensorIdList(List.of(SENSOR_ID))
.build();

Expand All @@ -70,6 +60,13 @@ static CpmEnvelope211 createTestCpmEnvelope(
.classification(List.of(new ObjectClassification(
ObjectClass.vru(ObjectClassVru.bicyclistAndLightVruVehicle(1)),
100)))
.objectDimensionX(new ObjectDimension(20, 1))
.objectDimensionY(new ObjectDimension(10, 1))
.objectDimensionZ(new ObjectDimension(15, 1))
.angles(new EulerAngles(
new Angle(120, 1),
new Angle(0, 1),
new Angle(0, 1)))
.sensorIdList(List.of(SENSOR_ID))
.build();

Expand Down
2 changes: 1 addition & 1 deletion java/iot3/mobility/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ plugins {
}

group 'com.orange.iot3mobility'
version '0.2.1-dev'
version '0.2.1'

repositories {
// Use Maven Central for resolving dependencies.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.orange.iot3mobility.messages.cpm.core.CpmCodec;
import com.orange.iot3mobility.messages.cpm.core.CpmVersion;
import com.orange.iot3mobility.messages.cpm.v121.model.CpmEnvelope121;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClass;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClassification;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.PerceivedObject;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmEnvelope211;
Expand Down Expand Up @@ -100,8 +101,18 @@ public void updateSensorObjects() {
double objectHeading = EtsiConverter.cpmDerivedHeadingDegrees(
perceivedObject.xSpeed(),
perceivedObject.ySpeed());
int infoQuality = 3;

Double objectLength = null, objectWidth = null, objectOrientation = null;
if(perceivedObject.planarObjectDimension1() != null
&& perceivedObject.planarObjectDimension2() != null) {
objectLength = EtsiConverter.cpmObjectDimensionMeters(perceivedObject.planarObjectDimension1());
objectWidth = EtsiConverter.cpmObjectDimensionMeters(perceivedObject.planarObjectDimension2());
}
if(perceivedObject.yawAngle() != null) {
objectOrientation = EtsiConverter.cpmAngleDegrees(perceivedObject.yawAngle());
}

int infoQuality = 3;
if(perceivedObject.classification() != null
&& !perceivedObject.classification().isEmpty()) {
infoQuality = perceivedObject.classification().get(0).confidence();
Expand All @@ -117,14 +128,17 @@ public void updateSensorObjects() {
sensorObject.setPosition(objectPosition);
sensorObject.setType(objectType);
sensorObject.setSpeed(objectSpeed);
sensorObject.setHeading(objectHeading);
sensorObject.setBearing(objectHeading);
sensorObject.setInfoQuality(infoQuality);
sensorObject.setDimensions(objectLength, objectWidth);
sensorObject.setOrientation(objectOrientation);
ioT3RoadSensorCallback.sensorObjectUpdate(sensorObject);
}
}
} else {
// create new SensorObject
sensorObject = new SensorObject(objectId, objectType, objectPosition, objectSpeed, objectHeading, infoQuality);
sensorObject = new SensorObject(objectId, objectType, objectPosition, objectSpeed,
objectHeading, infoQuality, objectLength, objectWidth, objectOrientation);
synchronized (sensorObjects) {
sensorObjects.add(sensorObject);
}
Expand Down Expand Up @@ -206,6 +220,15 @@ public void updateSensorObjects() {
}
}

Double objectLength = null, objectWidth = null, objectOrientation = null;
if(perceivedObject.objectDimensionX() != null && perceivedObject.objectDimensionY() != null) {
objectLength = EtsiConverter.cpmObjectDimensionMeters(perceivedObject.objectDimensionX().value());
objectWidth = EtsiConverter.cpmObjectDimensionMeters(perceivedObject.objectDimensionY().value());
}
if(perceivedObject.angles() != null && perceivedObject.angles().zAngle() != null) {
objectOrientation = EtsiConverter.cpmAngleDegrees(perceivedObject.angles().zAngle().value());
}

int infoQuality = 3;
if(perceivedObject.classification() != null
&& !perceivedObject.classification().isEmpty()) {
Expand All @@ -222,14 +245,17 @@ public void updateSensorObjects() {
sensorObject.setPosition(objectPosition);
sensorObject.setType(objectType);
sensorObject.setSpeed(objectSpeed);
sensorObject.setHeading(objectHeading);
sensorObject.setBearing(objectHeading);
sensorObject.setInfoQuality(infoQuality);
sensorObject.setDimensions(objectLength, objectWidth);
sensorObject.setOrientation(objectOrientation);
ioT3RoadSensorCallback.sensorObjectUpdate(sensorObject);
}
}
} else {
// create new SensorObject
sensorObject = new SensorObject(objectId, objectType, objectPosition, objectSpeed, objectHeading, infoQuality);
sensorObject = new SensorObject(objectId, objectType, objectPosition, objectSpeed,
objectHeading, infoQuality, objectLength, objectWidth, objectOrientation);
synchronized (sensorObjects) {
sensorObjects.add(sensorObject);
}
Expand Down Expand Up @@ -309,7 +335,7 @@ public boolean stillLiving() {
/* --------------------------------------------------------------------- */

private SensorObjectType cpm121ObjectTypeFromObjectClass(
com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClass objectClass) {
ObjectClass objectClass) {
if(objectClass.vehicle() != null) {
return switch (objectClass.vehicle()) {
case 1 -> SensorObjectType.PASSENGER_CAR;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
*/
package com.orange.iot3mobility.roadobjects;

import com.orange.iot3mobility.Utils;
import com.orange.iot3mobility.quadkey.LatLng;

import java.util.List;

public class SensorObject {

private static final int LIFETIME = 1500; // 1.5 seconds
Expand All @@ -17,17 +20,31 @@ public class SensorObject {
private SensorObjectType type;
private LatLng position;
private double speed; // m/s
private double heading; // degree
private double bearing; // degree
private int infoQuality;
private Double length; // meter
private Double width; // meter
private Double orientation; // degree
private List<LatLng> footprint;
private long timestamp;

public SensorObject(String uuid, SensorObjectType type, LatLng position, double speed, double heading, int infoQuality) {
public SensorObject(String uuid, SensorObjectType type, LatLng position, double speed, double bearing,
int infoQuality) {
this(uuid, type, position, speed, bearing, infoQuality, null, null, null);
}

public SensorObject(String uuid, SensorObjectType type, LatLng position, double speed, double bearing,
int infoQuality, Double length, Double width, Double orientation) {
this.uuid = uuid;
this.type = type;
this.position = position;
this.speed = speed;
this.heading = heading;
this.bearing = bearing;
this.infoQuality = infoQuality;
this.length = length;
this.width = width;
this.orientation = orientation;
computeFootprint();
updateTimestamp();
}

Expand Down Expand Up @@ -63,12 +80,12 @@ public void setSpeed(double speed) {
this.speed = speed;
}

public double getHeading() {
return heading;
public double getBearing() {
return bearing;
}

public void setHeading(double heading) {
this.heading = heading;
public void setBearing(double bearing) {
this.bearing = bearing;
}

public int getInfoQuality() {
Expand All @@ -79,6 +96,44 @@ public void setInfoQuality(int infoQuality) {
this.infoQuality = infoQuality;
}

public void setDimensions(Double length, Double width) {
this.length = length;
this.width = width;
computeFootprint();
}

public Double getLength() {
return length;
}

public Double getWidth() {
return width;
}

public Double getOrientation() {
return orientation;
}

public void setOrientation(Double orientation) {
this.orientation = orientation;
}

private void computeFootprint() {
if(length != null && width != null && orientation != null) {
LatLng frontCenter = Utils.pointFromPosition(position, orientation, length / 2);
LatLng frontLeft = Utils.pointFromPosition(frontCenter, (orientation - 90 + 360) % 360, width / 2);
LatLng frontRight = Utils.pointFromPosition(frontCenter, (orientation + 90 + 360) % 360, width / 2);
LatLng rearCenter = Utils.pointFromPosition(position, (orientation + 180 + 360) % 360, length / 2);
LatLng rearLeft = Utils.pointFromPosition(rearCenter, (orientation - 90 + 360) % 360, width / 2);
LatLng rearRight = Utils.pointFromPosition(rearCenter, (orientation + 90 + 360) % 360, width / 2);
footprint = List.of(frontLeft, frontRight, rearRight, rearLeft);
}
}

public List<LatLng> getFootprint() {
return footprint;
}

public long getTimestamp() {
return timestamp;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void getSpeedReturnsConstructedValue() {

@Test
void getHeadingReturnsConstructedValue() {
assertEquals(90.0, makeSensorObject().getHeading(), 1e-9);
assertEquals(90.0, makeSensorObject().getBearing(), 1e-9);
}

@Test
Expand Down Expand Up @@ -100,8 +100,8 @@ void setSpeedUpdatesValue() {
@Test
void setHeadingUpdatesValue() {
SensorObject obj = makeSensorObject();
obj.setHeading(270.0);
assertEquals(270.0, obj.getHeading(), 1e-9);
obj.setBearing(270.0);
assertEquals(270.0, obj.getBearing(), 1e-9);
}

@Test
Expand Down
Loading