Skip to content

Commit 5610dd8

Browse files
Carsten KueblerCarsten Kuebler
authored andcommitted
Use vehicle axis system definition of DIN ISO 8855
Change OSI transformation between axis systems to ISO definition. World frame -> vehicle frame -> sensor frame ... Orientation is defined (world -> vehicle) rotate yaw -> rotate pitch -> rotate roll. Note this is the international standard and differs from national american standard. (OSI V2.xxx used national american standard)
1 parent c41913b commit 5610dd8

8 files changed

+84
-44
lines changed

osi_common.proto

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,24 @@ message Dimension3d
9797
//
9898
// The preferred angular range is (-pi, pi]. The coordinate system is defined as right-handed.
9999
//
100-
// The rotations are to be performed \b roll \b first, \b pitch \b second and \b yaw \b third to follow the definition according to [1].
100+
// The rotations are to be performed \b yaw \b first, \b pitch \b second and \b roll \b third to follow the definition according to [1].
101101
//
102102
// Rotations are defined in the reference coordinate frame around z-axis (=yaw), y-axis (=pitch) and x-axis (=roll),
103103
// not in the body frame of the object.
104-
// A positive angle corresponds to a counter-clockwise rotation around the respective axis.
104+
// A positive angle corresponds to a clockwise rotation around the respective axis.
105105
//
106106
// Roll/Pitch are 0 if the objects xy-plane is parallel to its parent's xy-plane.
107107
// Yaw is 0 if the object's local x-axis is parallel to its parent's x-axis.
108108
//
109+
// Rotation_yaw_pitch_roll = Rotation_roll*Rotation_pitch*Rotation_yaw
110+
//
111+
// vector_global_coord_system := Inverse_Rotation_yaw_pitch_roll(orientation)*(vector_local_coord_system) + local_origin.position
112+
113+
//
114+
// \note This definition changed in OSI version 3.0.0. Previous OSI versions (V2.xx) had an other definition.
115+
//
109116
// \par References:
110-
// [1] LAVALLE, Steven M. Planning algorithms. Cambridge university press, 2006. Chapter 3.2.3.
111-
// See http://planning.cs.uiuc.edu/node102.html for online version of this chapter.
117+
// [1] DIN ISO 8855:2013-11
112118
//
113119
message Orientation3d
114120
{
@@ -155,7 +161,7 @@ message MountingPosition
155161
optional Vector3d position = 1;
156162

157163
// Orientation offset relative to the specified reference coordinate system.
158-
//
164+
// Origin_sensor := Rotation_yaw_pitch_roll(MountingPosition.orientation)*(Origin_reference_coordinate_system - MountingPosition.position)
159165
optional Orientation3d orientation = 2;
160166
}
161167

@@ -167,7 +173,10 @@ message MountingPosition
167173
// Units are [m] for radial distance and [rad] for azimuth and elevation angles.
168174
// If azimuth and elevation are zero, the referenced point lies directly ahead
169175
// in the central viewing direction of the sensor, and the respective vector points directly in the latter.
176+
// A positive angle corresponds to a clockwise rotation around the respective axis, i.e.
177+
// z-axis (azimuth = yaw), y-axis (elevation = pitch).
170178
//
179+
// vector_cartesian := Rotation(elevation)*Rotation(azimuth)*Unit_vector_x*distance
171180
message Spherical3d
172181
{
173182
// The radial distance.
@@ -188,6 +197,9 @@ message Spherical3d
188197
//
189198
// This includes the StationaryObject, TrafficSign, TrafficLight, RoadMarking messages.
190199
//
200+
// All coordinates and orientations are relative to the global ground truth
201+
// coordinate system.
202+
//
191203
message BaseStationary
192204
{
193205
// The 3D dimensions of the stationary object (bounding box), e.g. a landmark:
@@ -199,7 +211,9 @@ message BaseStationary
199211
optional Vector3d position = 2;
200212

201213
// The relative orientation of the stationary object w.r.t. its parent frame.
202-
// There may be some constraints how to use orientation w.r.t. to some stationary object's or entity's definition.
214+
//
215+
// Origin_base_stationary_entity := Rotation_yaw_pitch_roll(BaseStationary.orientation)*(Origin_parent_coordinate_system - BaseStationary.position)
216+
// \note There may be some constraints how to align the orientation w.r.t. to some stationary object's or entity's definition.
203217
optional Orientation3d orientation = 3;
204218

205219
// Usage as ground truth:
@@ -225,6 +239,9 @@ message BaseStationary
225239
//
226240
// This includes the MovingObject messages.
227241
//
242+
// All coordinates and orientations are relative to the global ground truth
243+
// coordinate system.
244+
//
228245
message BaseMoving
229246
{
230247
// The 3D dimension of the moving object (its bounding box).
@@ -237,18 +254,27 @@ message BaseMoving
237254

238255
// The relative orientation of the moving object w.r.t. its parent frame.
239256
//
257+
// Origin_base_moving_entity := Rotation_yaw_pitch_roll(BaseMoving.orientation)*(Origin_parent_coordinate_system - BaseMoving.position)
258+
// \note There may be some constraints how to align the orientation w.r.t. to some stationary object's or entity's definition.
240259
optional Orientation3d orientation = 3;
241260

242261
// The relative velocity of the moving object w.r.t. its parent frame and parent velocity.
243262
// The velocity becomes global/absolute if the parent frame does not move.
263+
//
264+
// BaseMoving.position(t) := BaseMoving.position(t-dt)+velocity*dt
244265
optional Vector3d velocity = 4;
245266

246267
// The relative acceleration of the moving object w.r.t. its parent frame and parent acceleration.
247268
// The acceleration becomes global/absolute if the parent frame is not accelerating.
269+
//
270+
// BaseMoving.position(t) := BaseMoving.position(t-dt)+velocity*dt+acceleration/2*dt^2
271+
// BaseMoving.velocity(t) := BaseMoving.velocity(t-dt)+acceleration*dt
248272
optional Vector3d acceleration = 5;
249273

250-
// The relative orientation rate of the moving object w.r.t. its parent frame and parent orientation rate in the center point of the bounding box.
251-
// The orientation rate becomes global/absolute if the parent frame is not rotating.
274+
// The relative orientation rate of the moving object w.r.t. its parent frame and parent orientation rate in the center point of the bounding box (origin of the bounding box frame).
275+
//
276+
// Rotation_yaw_pitch_roll(BaseMoving.orientation(t)) := Rotation_yaw_pitch_roll(BaseMoving.orientation_rate*dt)*Rotation_yaw_pitch_roll(BaseMoving.orientation(t-dt))
277+
// \note BaseMoving.orientation(t) is \b not equal BaseMoving.orientation(t-dt)+BaseMoving.orientation_rate*dt
252278
optional Orientation3d orientation_rate = 6;
253279

254280
// Usage as ground truth:

osi_detectedobject.proto

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,20 @@ message DetectedObject
9393
// The estimated probabilities for the object to belong to a specific class.
9494
//
9595
optional ClassProbability class_probability = 17;
96-
97-
// The estimated pedestrian head pose.
96+
97+
// Pedestrian head pose for behaviour prediction. Describes the head
98+
// orientation w.r.t. the host vehicle orientation.
99+
// x-axis of head_pose is pedestrian's straight ahead viewing direction.
98100
//
99-
// \note Pedestrian specific value.
100-
optional Orientation3d pedestrian_head_pose = 18;
101+
// View_normal_base_coord_system = Inverse_Rotation(head_pose)*Unit_vector_x
102+
optional Orientation3d head_pose = 18;
101103

102-
// The estimated pedestrian upper body pose.
104+
// Pedestrian upper body pose for behaviour prediction. Describes the
105+
// upper body orientation w.r.t. the host vehicle orientation.
106+
// x-axis of upper_body_pose is pedestrian's upper body intended moving direction.
103107
//
104-
// \note Pedestrian specific value.
105-
optional Orientation3d pedestrian_upper_body_pose = 19;
108+
// View_normal_base_coord_system = Inverse_Rotation(upper_body_pose)*Unit_vector_x
109+
optional Orientation3d upper_body_pose = 19;
106110

107111
// Percentage side lane left.
108112
//

osi_featuredata.proto

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,18 @@ message DetectionHeader
5454
//
5555
// The origin of the detection coordinate system (= spherical polar
5656
// coordinates) is the sensor mounting pose in the host vehicle coordinate
57-
// system.
57+
// system w.r.t. orientation of the sensor mounting position.
5858
//
5959
// The host vehicle coordinate system is at the center of the rear axle
6060
// (from the top view as well as from the side view) in the static case.
6161
// The origin represents the current mounting pose to the best knowledge of
62-
// the sensor. It includes the estimated 6D pose estimation given by the
62+
// the sensor. It includes the estimated 6D pose estimation given by the
6363
// calibration. The uncertainty of this estimation is given with the
6464
// corresponding 6D root mean squared error. The estimation of the current
6565
// origin does not include effects due to short-time dynamics, such as pitch
6666
// angles from braking, but includes long-time calibration values, such as
6767
// pitch angles from luggage in the trunk.
68+
//
6869
optional MountingPosition mounting_position = 4;
6970

7071
// Uncertainty of the mounting pose calibration should be included in the

osi_landmark.proto

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ package osi;
99
//
1010
// \brief A traffic sign.
1111
//
12+
// All coordinates and orientations are relative to the global ground truth
13+
// coordinate system.
14+
//
1215
message TrafficSign
1316
{
1417
// The ID of the traffic sign.
@@ -935,6 +938,9 @@ message TrafficLight
935938
//
936939
// Lane Markings are excluded and defined as LaneBoundaries as part of the Lanes.
937940
//
941+
// All coordinates and orientations are relative to the global ground truth
942+
// coordinate system.
943+
//
938944
message RoadMarking
939945
{
940946
// The ID of the road marking.
@@ -988,11 +994,6 @@ message RoadMarking
988994
// Might be multiple if the road marking goes across multiple lanes.
989995
repeated Identifier assigned_lane = 9;
990996

991-
// Intersection orientation of the road marking.
992-
//
993-
// \note Defined for \c Lane::type = TYPE_INTERSECTION, otherwise zero vector
994-
optional Vector3d roadmarking_orientation = 10;
995-
996997
// Definition of road marking types.
997998
//
998999
enum Type

osi_object.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ package osi;
1515
// for the host vehicle (R rotates from vehicle to world frame, i.e. inverse
1616
// orientation of base.orientation).
1717
//
18-
// For all vehicles, including host vehicles, the position given in
18+
// For all vehicles, including host vehicles, the position given in
1919
// base.position points to the center of the vehicle's bounding box.
2020
//
21-
// The object coordinates are defined as x-axis is the direction from rear to
21+
// The vehicle object coordinates are defined as x-axis is the direction from rear to
2222
// front of the vehicle, y-axis corresponds to rear axle and z-axis points to
2323
// vehicle ceiling.
2424
//

osi_sensordata.proto

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,21 @@ message SensorData
7676
optional Identifier host_vehicle_id = 5;
7777

7878
// The mounting position of the sensor (origin and orientation of the sensor coordinate system)
79+
// given in vehicle coordinates [1].
7980
//
80-
// given in vehicle coordinates: origin is ( \c Vehicle::base.position + INV(\c Vehicle::base.orientation) * \c Vehicle::bbcenter_to_rear) the orientation is equal to the orientation of the vehicle \c Vehicle::base.orientation.
81+
// \arg \b x-direction of sensor coordinate system: sensor viewing direction
82+
// \arg \b z-direction of sensor coordinate system: sensor (up)
83+
// \arg \b y-direction of sensor coordinate system: perpendicular to x and z right hand system
8184
//
82-
// \arg \b x-direction: longitudinal direction & positive in driving direction
83-
// \arg \b y-direction: lateral direction & positive to the left when looking orientated as a driver
84-
// \arg \b z-direction: perpendicular to x and z right hand system (up)
85-
//
86-
// See https://en.wikipedia.org/wiki/Axes_conventions#/media/File:RPY_angles_of_cars.png
85+
// \par References:
86+
// [1] DIN ISO 8855:2013-11
8787
//
8888
// \note This field is usually static during the simulation.
89+
// \note The origin of vehicle's coordinate system in world frame is
90+
// ( \c Vehicle::base.position + Inverse_Rotation_yaw_pitch_roll(\c Vehicle::base.orientation) * \c Vehicle::bbcenter_to_rear) .
91+
// The orientation of the vehicle's coordinate system is equal to the orientation
92+
// of the vehicle's bounding box \c Vehicle::base.orientation.
93+
//
8994
optional MountingPosition mounting_position = 6;
9095

9196
// The root mean squared error of the mounting position.

osi_sensorinputconfiguration.proto

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,31 @@ package osi;
6464
message SensorInputConfiguration
6565
{
6666
// The mounting position of the sensor (origin and orientation of the sensor coordinate system)
67+
// given in vehicle coordinates [1].
6768
//
68-
// given in vehicle coordinates: origin is \c Vehicle::reference_point; the orientation is equal to the orientation of the vehicle.
69+
// \arg \b x-direction of sensor coordinate system: sensor viewing direction
70+
// \arg \b z-direction of sensor coordinate system: sensor (up)
71+
// \arg \b y-direction of sensor coordinate system: perpendicular to x and z right hand system
6972
//
70-
// \arg \b x-direction: longitudinal direction & positive in driving direction
71-
// \arg \b y-direction: lateral direction & positive to the left when looking orientated as a driver
72-
// \arg \b z-direction: perpendicular to x and z right hand system (up)
73+
// \par References:
74+
// [1] DIN ISO 8855:2013-11
7375
//
74-
// See https://en.wikipedia.org/wiki/Axes_conventions#/media/File:RPY_angles_of_cars.png
76+
// \note The origin of vehicle's coordinate system in world frame is
77+
// ( \c Vehicle::base.position + Inverse_Rotation_yaw_pitch_roll(\c Vehicle::base.orientation) * \c Vehicle::bbcenter_to_rear) .
78+
// The orientation of the vehicle's coordinate system is equal to the orientation
79+
// of the vehicle's bounding box \c Vehicle::base.orientation.
7580
// \note A default position can be provided by the sensor model (e.g. to indicate the position the model was validated for),
7681
// but this is optional; the environment simulation must provide a valid mounting position (based on the vehicle configuration)
7782
// when setting the input configuration.
83+
//
7884
optional MountingPosition mounting_position = 1;
7985

8086
// Field of View in horizontal orientation of the sensor
8187
//
8288
// This determines the limit of the cone of interest of ground truth
8389
// that the simulation environment has to provide.
90+
// Viewing range: [-field_of_view_horizontal/2, field_of_view_horizontal]
91+
// in sensor coordinate system.
8492
//
8593
// Unit: [rad]
8694
optional double field_of_view_horizontal = 2;
@@ -89,6 +97,8 @@ message SensorInputConfiguration
8997
//
9098
// This determines the limit of the cone of interest of ground truth
9199
// that the simulation environment has to provide.
100+
// Viewing range: [-field_of_view_vertical/2, field_of_view_vertical]
101+
// in sensor coordinate system.
92102
//
93103
// Unit: [rad]
94104
optional double field_of_view_vertical = 3;
@@ -199,6 +209,7 @@ message RadarSensorInputConfiguration
199209
//
200210
// \brief The radar antenna diagram.
201211
//
212+
// \note Rotation is defined analog OSI:Spherical3d
202213
message AntennaDiagramEntry {
203214
// Horizontal deflection (azimuth) of entry in sensor/antenna
204215
// coordinates

osi_sensorspecific.proto

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,7 @@ message LidarSpecificObjectData
2929
//
3030
message CameraSpecificObjectData
3131
{
32-
// Pedestrian head pose for behaviour prediction. Describes the head
33-
// orientation w.r.t. the host vehicle orientation.
34-
//
35-
optional Orientation3d head_pose = 1;
36-
37-
// Pedestrian upper body pose for behaviour prediction. Describes the
38-
// upper body orientation w.r.t. the host vehicle orientation.
39-
//
40-
optional Orientation3d upper_body_pose = 2;
32+
// currently no fields.
4133
}
4234

4335
//

0 commit comments

Comments
 (0)