From b96a6a080a31a252d080ed23cf8f1f2ff9b7d062 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 23 Oct 2019 16:36:22 +0200 Subject: [PATCH 01/30] Create osi_vehicle.proto --- osi_vehicle.proto | 692 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 692 insertions(+) create mode 100644 osi_vehicle.proto diff --git a/osi_vehicle.proto b/osi_vehicle.proto new file mode 100644 index 000000000..ade65928b --- /dev/null +++ b/osi_vehicle.proto @@ -0,0 +1,692 @@ +syntax = "proto2"; + +option optimize_for = SPEED; + +import "osi_version.proto"; +import "osi_common.proto"; +import "osi_object.proto"; + +package osi3; + +// +// \brief The vehicle-message is a deeper description of a vehicle. +// Consists of different messages categorizing the vehicle in: +// Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, +// Vehicle-Light-State, Vehicle-Automated-Driving-Functions. +// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, +// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. +// +message Vehicle +{ + // + // The interface version used by the sender (i.e. the simulation + // environment). + // + optional InterfaceVersion version = 1; + + // + // The data timestamp of the simulation environment. The zero time point is + // arbitrary but must be identical for all messages. + // Recommendation: Zero time point for start point of the simulation. + // + optional Timestamp timestamp = 2; + + // + // The base parameters of the vehicle. + // + optional VehicleBasics vehicle_basics = 3; + + // + // This is the interface, that describes how the vehicle is moving. + // All coordinates and orientations are relative to the global ground truth + // coordinate system. + // + optional VehicleKinematics vehicle_kinematics = 4; + + // + // Interface regarding the powertrain. + // + optional VehiclePowertrain vehicle_powertrain = 5; + + // + // Interface regarding the SteeringWheel. + // The focus here is on the steering wheel. + // + optional VehicleSteeringWheel vehicle_steering_wheel = 6; + + // + // Interface regarding the wheels. + // The focus here is on the physical description of a wheel. + // + optional VehicleWheels vehicle_wheels = 7; + + // + // Interface regarding the light. + // The focus here is on the states of the lights. + // + optional MovingObject.VehicleClassification.LightState vehicle_light_state = 8; + + // + // Interface regarding automated-driving functions. + // The focus here is on states and intentions of a function. + // + repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 9; + + // + // \brief The absolut base parameters of the vehicle. + // + message VehicleBasics + { + // The id of the car in the simulation. + // + optional Identifier id = 1; + + // The manufacturer of the car. + // + optional string manufacturer = 2; + + // The modelname of the car. + // + optional string modelname = 3; + + // The reference_string to the car (e.g. CAD-Modell). + // + optional string reference_string = 4; + + // The weight of the car. + // + optional double weight = 5; + + // The license plate of the car. + // + optional string license_plate = 6; + } + + // + // \brief So this is the interface, that describes how the vehicle is + // moving. + // All coordinates and orientations are relative to the global ground truth + // coordinate system. + // + message VehicleKinematics + { + // The base parameters of the vehicle. + // + // \note The bounding box does NOT include mirrors for vehicles. + // + optional BaseMoving base = 1; + } + + // + // \brief Interface to the vehicle-model. + // The focus here is on the powertrain. + // + message VehiclePowertrain + { + // The positions of the pedals. + // + optional Pedalry pedalry = 1; + + // Rounds per minute of the crankshaft. + // + // Unit: [1/min] + // + optional double engine_rpm = 2; + + // Torque in Nm. + // + // Unit: [N*m] + // + optional double engine_torque = 3; + + // Consumption in liters per 100 km. + // + // Unit: [l] + // + optional double fuel_consumption = 4; + + // Consumption of electrical or hybrid vehicle per 100 km + // + // Unit: [kWh] + // + optional double electrical_energy_consumption = 5; + + // The actual gear of the gear lever. + // + optional GearLeverState gear_lever_state = 6; + + // The actual gear of the transmission. + // E.g. gear_lever can be in "D" and transmission in "4", but not the + // other way around. + // + // The sign of this field is linked to the gear's mode as following: + // - zero: neutral position + // - positive: driving forward mode + // - negative: reverse mode (generally -1, but few vehicles have several + // reverse mode gears) + // + optional int32 gear_transmission = 7; + + // Position of the handbrake. + // A value of 0% means fully released and 100% means fully pressed + // + // Unit: [%] + // + optional double handbrake_position = 8; + + // Description how the powertrain is providing power to the wheels. + // + enum PowertrainMode powertrain_mode = 9; + + // Definition how the powertrain is providing power to the wheels. + // + enum PowertrainMode + { + // All-wheel drive (AWD). + // + POWERTRAIN_MODE_ALL_WHEEL_DRIVE = 0; + + // Front-wheel drive (FWD). + // + POWERTRAIN_MODE_FRONT_WHEEL_DRIVE = 1; + + // Rear-wheel drive (RWD). + // + POWERTRAIN_MODE_REAR_WHEEL_DRIVE = 2; + } + } + + // + // \brief Interface to the vehicle-model. + // The focus here is on the steering wheel. + // + message VehicleSteeringWheel + { + // Angle, angle-speed and torque. + // See osi_common_extension. + // + optional SteeringWheel steering_wheel = 1; + + // Spring-stiffness of the steering in Nm/deg. + // + // Unit: [N*m/deg] + // + optional double stw_springstiffness = 2; + + // Damping of the steering in Nm*s/deg. + // + // Unit: [N*m*s/deg] + // + optional double stw_damping = 3; + + // Friction of the steering in Nm. + // + // Unit: [N*m] + // + optional double stw_friction = 4; + + // Hands Off Detection. + // + optional bool are_hands_off = 5; + } + + // + // \brief Interface to the vehicle-model. + // The focus here is on the wheels. + // It is made usage of the wheel-message to shorten the code. + // + message VehicleWheels + { + // Contains the physical description of the front-left wheel. + // + optional Wheel wheel_front_left = 1; + + // Contains the physical description of the front-right wheel. + // + optional Wheel wheel_front_right = 2; + + // Contains the physical description of the rear-left wheel. + // + optional Wheel wheel_rear_left = 3; + + // Contains the physical description of the rear-right wheel. + // + optional Wheel wheel_rear_right = 4; + } + + // + // \brief Interface to the vehicle-model. + // The focus here is on the physical description of a wheel. + // + message Wheel + { + // Contains the friction-coefficient of each wheel. + // Dimensionless. + // + // Unit: [] + // + optional double friction_coefficient = 1; + + // Contains the x, y and z-coordinate of the contact point of + // the wheel, so that walking, torsion and deflation can be visualized. + // relative to the center of the wheel. + // + // Unit: [m] + // + optional Vector3d contact_point = 2; + + // Contains the rotational speed of each wheel per second. + // + // Unit: [rad/s] + // + optional double rotational_speed = 3; + + // Contains the steering angle of each wheel. + // + // Unit: [rad] + // + optional double steeringangle = 4; + + // Contains the camber of each wheel. + // + // Negative camber if the bottom of the wheel is farther out than the + // top. + // For more information: https://en.wikipedia.org/wiki/Camber_angle. + // + // Unit: [rad] + // + optional double camber = 5; + + // Contains the tirepressure of each tire. + // + // Unit: [Pa] + // + optional double tirepressure = 6; + + // Contains the springdeflection in z-direction for each wheel. + // + // Unit: [mm] + // + optional double springdeflection = 7; + + //Contains the relativ position of the wheel to the center of the car + // + //Unit: [m] + // + optional Vector3d position = 8; + + //Contains the relativ orientation of the wheel to the center of the car + //As the rotation of the wheel is also controlled by this value, + // + //Unit: [rad] + // + optional Orientation3d orientation = 9; + + //Contains the absolute (longitunal) slip of the tire + //0-100 percent + // + //Unit: [] + // + optional double slip = 10; + + //Contains the slip-angle of the tire + // + //Unit: [rad] + // + optional double slipangle = 11; + } + + // + // \brief Information about the automated driving system. + // Important is the differentiation between states and intentions. + // An automated-driving function itself does not have many states. It is more about Intentions, + // to change some vehicle states. E.g. a desired acceleration(-pedal-position), but effective is the one in + // the powertrain message. + // + message VehicleAutomatedDrivingFunction + { + // + // Here the name of the function can be chosen. + // E.g.: Hadpilot, longitudinal_control, lateral_control or emergency_brake_assistant. + // + optional string function_name = 1; + + // + // States of an ad-function. + // + optional States states = 2; + + // + // Intentions, requests or wishes from the function to change the vehicle-state. + // + optional Intentions intentions = 3; + + // + // \brief Internal states of an automated-driving function. + // + // + message States + { + // Activation state of the function. + // + optional bool is_activated = 1; + + // This is the speed the function targets. + // E.g.: At the point of activation, the actual speed could be 80 km/h, + // but the function tries to accelerate to 130 km/h. + // + // Unit: [km/h] + // + optional double targeted_speed = 2; + + // The timegap describes the minimumdistance to the next vehicle in front. + // + // Unit: [s] + // + optional double timegap = 3; + } + + // + // \brief Interface to describe the communication of an automated-driving function. + // + // Intentions, requests or wishes from the function to change the vehicle-state. + // + message Intentions + { + // All information about the trajectory the vehicle should follow. + // + // \note See osi_common_extension. + // + optional Trajectory trajectory = 1; + + // Angle, angle-speed and torque. + // + // \note See osi_common_extension. + // + optional SteeringWheel steering_wheel = 2; + + // Factor to scale the steeringtorque of the function output. + // + // \note 0 = no force of the function, 0.5 = half the force, 1 = 100% torque. + // + // Range: [0, 1] + // + optional double steering_override_factor = 3; + + // Acceleration-, brakepedal and clutch. + // + // \note See osi_common_extension. + // + optional Pedalry pedalry = 4; + + // Position of the handbrake. + // + // \note A value of 0.0 means fully released and 1.0 means fully pressed. + // + // Range: [0, 1] + // + optional double handbrake_position = 5; + + // The light state of the vehicle. + // + optional MovingObject.VehicleClassification.LightState light_state = 6; + + // Request that the driver has to take over. + // + // \note 0 = off; 1 = on. + // + optional bool driver_take_over_request = 7; + + // Request to an ADAS-Function for a lane change. + // + optional LaneChangeRequest lane_change_request = 8; + + // Request to an ADAS-Function for a lane change. + // + enum LaneChangeRequest + { + // Stay on the actual lane. + // + LANE_CHANGE_REQUEST_EGO_LANE = 0; + + // Change to the left. + // + LANE_CHANGE_REQUEST_LC_LEFT = 1; + + // Change to the right. + // + LANE_CHANGE_REQUEST_LC_RIGHT = 2; + } + } + } +} + + +// +// \brief A description for the steering wheel. +// +message SteeringWheel +{ + // Angle of the steering wheel. + // 0=Central (Straight); Left>0; 0>Right. + // + // Unit: [rad] + // + optional double angle = 1; + + // Angle-speed of the steering wheel. + // 0=Central (Straight); Left>0; 0>Right. + // + // Unit: [rad/s] + // + optional double angular_speed = 2; + + // Torque of the steering wheel to the hand. + // 0=Central (Straight); Left>0; 0>Right. + // + // Unit: [N*m] + // + optional double torque = 3; +} + +// +// \brief A description for the positions of the pedals. +// +// +message Pedalry +{ + // Position of the acceleration-pedal. + // Unit: [0-1] (Unpressed - fully pressed) + // + optional double pedal_position_acceleration = 1; + + // Position of the brake-pedal. + // Unit: [0-1] (Unpressed - fully pressed) + // + optional double pedal_position_brake = 2; + + // Position of the clutch-pedal. + // Unit: [0-1] (Unpressed - fully pressed) + // + optional double pedal_position_clutch = 3; +} + +// +// \brief This is a message to describe, which trajectory the vehicle should +// follow. +// +// +message Trajectory +{ + // Contains the timestamp where the trajectorypoint should be reached. + // + // Unit: [s] + // + optional Timestamp timestamp = 1; + + // Contains the X-Position the vehicle should be at the timestamp. + // + optional double targeted_pos_x = 2; + + // Contains the Y-Position the vehicle should be at the timestamp. + // + optional double targeted_pos_y = 3; + + // Direction of the vehicle at the timestamp. + // + // Unit: [rad] + // + optional double track_angle = 4; + + // Contains the curvature at the timestamp. + // + // Unit: [1/m] + // + optional double curvature = 5; + + // Contains the curvature change at the timestamp. + // + // Unit: [1/(m*s)] + // + optional double curvature_change = 6; + + // Contains the velocity of the vehicle at the timestamp. + // + // Unit: [m/s] + // + optional double velocity = 7; + + // Contains the acceleration of the vehicle at the timestamp. + // + // Unit: [m/s^2] + // + optional double acceleration = 8; + + // Contains the interpolation method. + // + optional InterpolationMethod interpolation_method = 9; + + // Contains the interpolation method. + // + enum InterpolationMethod + { + // The interpolation method is unknown (must not be used in ground + // truth). + // + INTERPOLATION_METHOD_UNKNOWN = 0; + + // Other (unspecified but known) interpolation method. + // + INTERPOLATION_METHOD_OTHER = 1; + + // Stay on the actual lane. + // + INTERPOLATION_METHOD_LINEAR = 2; + + // Change to the left. + // + INTERPOLATION_METHOD_CUBIC = 3; + } +} + +// +// \brief The actual gear of the car. +// +// +message GearLeverState +{ + // Current set gear of the gear lever. It is optional if none of these + // conditions is fulfilled: + // - the gear lever controls a manual transmission + // - the gear lever controls an automatic transmission with the manual + // override mode set. + // + // The sign of this field set the gear's mode as following: + // - zero: neutral position + // - positive: driving forward mode + // - negative: reverse mode (generally -1, but some vehicles have several + // reverse mode gears) + // + optional int32 gear = 1; + + // This Gear Lever controls an automatic transmission. + // + optional bool controls_automatic_transmission = 2; + + // Transmission mode of an automatic transmission. + // + // Optional if the transmission is manual. + // + optional AutomaticTransmissionMode automatic_transmission_mode = 3; + + // The request from the driver to shift gear if the transmission mode is + // MANUAL_OVERRIDE_MODE. + // + optional ManualOverrideRequest manual_override_request = 4; + + // The all-wheel drive (AWD) mode is engaged by the driver. + // + optional bool is_all_wheel_drive_engaged = 5; + + // Describe the possible mode of an automatic transmission. + // + enum AutomaticTransmissionMode + { + // The gear transmission mode is unknown (must not be + // used in ground truth). + // + AUTOMATIC_TRANSMISSION_MODE_UNKNOWN = 0; + + // Other (unspecified but known) transmisson mode. + // + AUTOMATIC_TRANSMISSION_MODE_OTHER = 1; + + // The gear lever is in automatic parking mode. + // + AUTOMATIC_TRANSMISSION_MODE_PARK = 2; + + // The gear lever is in reverse motion mode. + // + AUTOMATIC_TRANSMISSION_MODE_REVERSE = 3; + + // The gear lever is in automatic neutral mode. + // + AUTOMATIC_TRANSMISSION_MODE_NEUTRAL = 4; + + // The gear lever is in automatic driving mode. + // + AUTOMATIC_TRANSMISSION_MODE_DRIVE = 5; + + // The gear lever is in a manual override mode. + // + AUTOMATIC_TRANSMISSION_MODE_MANUAL_OVERRIDE = 6; + } + + // Describe a request for a gear change on automatic transmission vehicle + // with a gear shifter. + // + enum ManualOverrideRequest + { + // The manual override request is unknown (must not be + // used in ground truth). + // + MANUAL_OVERRIDE_REQUEST_UNKNOWN = 0; + + // Other (unspecified but known) manual override request. + // + MANUAL_OVERRIDE_REQUEST_OTHER = 1; + + // The driver shifts down on his own. + // + MANUAL_OVERRIDE_REQUEST_GEAR_DOWN = 2; + + // The automatic transmission is in manual override mode + // but the driver is not shifting the gear. + // + MANUAL_OVERRIDE_REQUEST_GEAR_MID = 3; + + // The driver shifts up on his own. + // + MANUAL_OVERRIDE_REQUEST_GEAR_UP = 4; + } +} From 246e206461e33730b10adf28ccbf4eea368f14c4 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 23 Oct 2019 17:17:54 +0200 Subject: [PATCH 02/30] Update osi_vehicle.proto --- osi_vehicle.proto | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index ade65928b..da3ea039d 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -84,20 +84,20 @@ message Vehicle // The manufacturer of the car. // optional string manufacturer = 2; - + // The modelname of the car. // optional string modelname = 3; - + // The reference_string to the car (e.g. CAD-Modell). // optional string reference_string = 4; - + // The weight of the car. // optional double weight = 5; - - // The license plate of the car. + + // The license plate of the car. // optional string license_plate = 6; } @@ -176,7 +176,7 @@ message Vehicle // Description how the powertrain is providing power to the wheels. // - enum PowertrainMode powertrain_mode = 9; + optional PowertrainMode powertrain_mode = 9; // Definition how the powertrain is providing power to the wheels. // From 1f3f1a80f9a3bc5088e55868679be38c1a9b3750 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 23 Oct 2019 17:42:50 +0200 Subject: [PATCH 03/30] Update osi_vehicle.proto --- osi_vehicle.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index da3ea039d..d1bc25b13 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -350,7 +350,7 @@ message Vehicle // E.g.: Hadpilot, longitudinal_control, lateral_control or emergency_brake_assistant. // optional string function_name = 1; - + // // States of an ad-function. // From 0208f9d21d421a12ef1fd6381813021a8d69166e Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 24 Oct 2019 17:15:01 +0200 Subject: [PATCH 04/30] Update osi_vehicle.proto --- osi_vehicle.proto | 55 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index d1bc25b13..02e384225 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -66,11 +66,16 @@ message Vehicle // optional MovingObject.VehicleClassification.LightState vehicle_light_state = 8; + // + // Interface regarding the navigation. + // + optional VehicleNavigation vehicle_navigation = 9; + // // Interface regarding automated-driving functions. // The focus here is on states and intentions of a function. // - repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 9; + repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 10; // // \brief The absolut base parameters of the vehicle. @@ -81,19 +86,27 @@ message Vehicle // optional Identifier id = 1; - // The manufacturer of the car. + // The brand of the car. // - optional string manufacturer = 2; + // \note It is implementation-specific how the string is filled. + // + optional string brand = 2; // The modelname of the car. // + // \note It is implementation-specific how the string is filled. + // optional string modelname = 3; // The reference_string to the car (e.g. CAD-Modell). // + // \note It is implementation-specific how the string is filled. + // optional string reference_string = 4; - // The weight of the car. + // The total mass of the vehicle (curb weight). + // + // Unit: [kg] // optional double weight = 5; @@ -141,13 +154,13 @@ message Vehicle // Consumption in liters per 100 km. // - // Unit: [l] + // Unit: [l/100km] // optional double fuel_consumption = 4; // Consumption of electrical or hybrid vehicle per 100 km // - // Unit: [kWh] + // Unit: [kW/100kmh] // optional double electrical_energy_consumption = 5; @@ -211,19 +224,19 @@ message Vehicle // // Unit: [N*m/deg] // - optional double stw_springstiffness = 2; + optional double steering_springstiffness = 2; // Damping of the steering in Nm*s/deg. // // Unit: [N*m*s/deg] // - optional double stw_damping = 3; + optional double steering_damping = 3; // Friction of the steering in Nm. // // Unit: [N*m] // - optional double stw_friction = 4; + optional double steering_friction = 4; // Hands Off Detection. // @@ -231,8 +244,7 @@ message Vehicle } // - // \brief Interface to the vehicle-model. - // The focus here is on the wheels. + // \brief The focus here is on the wheels. // It is made usage of the wheel-message to shorten the code. // message VehicleWheels @@ -255,8 +267,7 @@ message Vehicle } // - // \brief Interface to the vehicle-model. - // The focus here is on the physical description of a wheel. + // \brief The focus here is on the physical description of a wheel. // message Wheel { @@ -335,6 +346,24 @@ message Vehicle // optional double slipangle = 11; } + + // + // \brief This message contains all the necessary information for navigation. + // + message VehicleNavigation + { + // Georeferenced data. Longitude in decimal degrees. + // + // Unit: [°] + // + optional double longitude = 1; + + // Georeferenced data. Latitude in decimal degrees. + // + // Unit: [°] + // + optional double latitude = 2; + } // // \brief Information about the automated driving system. From a9b04d05872632baa92bed56116db8246f111dc4 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Fri, 25 Oct 2019 11:43:28 +0200 Subject: [PATCH 05/30] Update osi_vehicle.proto --- osi_vehicle.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 02e384225..79e7eb437 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -354,13 +354,13 @@ message Vehicle { // Georeferenced data. Longitude in decimal degrees. // - // Unit: [°] + // Unit: [degree] // optional double longitude = 1; // Georeferenced data. Latitude in decimal degrees. // - // Unit: [°] + // Unit: [degree] // optional double latitude = 2; } From 0f8bfa4559b7dca2d1d5c9cf631f99b65b4b97cb Mon Sep 17 00:00:00 2001 From: "Schloemicher, Thomas AVL,AT" Date: Sun, 3 Nov 2019 11:52:43 +0100 Subject: [PATCH 06/30] update localization message in osi_vehicle.proto move assigned_lane_id into Classification message in MovingObject message (same as for TrafficLights/TrafficSigns) add osi_vehicle.proto to setup.py --- osi_object.proto | 18 +++++++++--------- osi_vehicle.proto | 24 +++++++++++++++++++++--- setup.py | 3 ++- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/osi_object.proto b/osi_object.proto index 9959db670..4ff541085 100644 --- a/osi_object.proto +++ b/osi_object.proto @@ -291,15 +291,6 @@ message MovingObject // optional Type type = 3; - // The IDs of the lanes that this object is assigned to. - // - // \note Might be multiple if the object is switching lanes or moving from - // one lane into another following lane. - // - // \note OSI uses singular instead of plural for repeated field names. - // - repeated Identifier assigned_lane_id = 4; - // Specific information about the vehicle. // // \note This field is mandatory if the \c #type is @@ -440,6 +431,15 @@ message MovingObject // value for non valid id. // optional Identifier trailer_id = 4; + + // The IDs of the lanes that this object is assigned to. + // + // \note Might be multiple if the object is switching lanes or moving from + // one lane into another following lane. + // + // \note OSI uses singular instead of plural for repeated field names. + // + repeated Identifier assigned_lane_id = 5; // Definition of vehicle types. // diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 79e7eb437..582d54947 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -69,7 +69,7 @@ message Vehicle // // Interface regarding the navigation. // - optional VehicleNavigation vehicle_navigation = 9; + optional VehicleLocalization vehicle_localization = 9; // // Interface regarding automated-driving functions. @@ -348,9 +348,9 @@ message Vehicle } // - // \brief This message contains all the necessary information for navigation. + // \brief This message contains all the necessary information of the localization solution. // - message VehicleNavigation + message VehicleLocalization { // Georeferenced data. Longitude in decimal degrees. // @@ -363,6 +363,24 @@ message Vehicle // Unit: [degree] // optional double latitude = 2; + + // Georeferenced data. Altitude in meters. + // + // Unit: [m] + // + optional double altitude = 3; + + // Accuracy of localization measurement measured in percentage of the units + // + // Unit: [%] + // + optional double localization_accuracy = 4; + + // + // Number of satellites + // + // + optional int32 number_of_satellites = 5; } // diff --git a/setup.py b/setup.py index 03057e679..05dfc7497 100644 --- a/setup.py +++ b/setup.py @@ -67,7 +67,8 @@ def find_protoc(): 'osi_sensordata.proto', 'osi_sensorviewconfiguration.proto', 'osi_sensorspecific.proto', - 'osi_sensorview.proto') + 'osi_sensorview.proto', + 'osi_vehicle.proto') """ Generate Protobuf Messages """ From 7947d1f4de703214bb27435c51e81820e31d846c Mon Sep 17 00:00:00 2001 From: "Schloemicher, Thomas AVL,AT" Date: Sun, 3 Nov 2019 17:33:40 +0100 Subject: [PATCH 07/30] bugfix tab and add heading to VehicleLocalization message --- osi_object.proto | 8 ++++---- osi_vehicle.proto | 16 +++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/osi_object.proto b/osi_object.proto index 4ff541085..789af735d 100644 --- a/osi_object.proto +++ b/osi_object.proto @@ -296,7 +296,7 @@ message MovingObject // \note This field is mandatory if the \c #type is // #TYPE_VEHICLE . // - optional VehicleAttributes vehicle_attributes = 5; + optional VehicleAttributes vehicle_attributes = 4; // Specific information about the classification of the vehicle. // @@ -304,14 +304,14 @@ message MovingObject // \note This field is mandatory if the \c #type is // #TYPE_VEHICLE . // - optional VehicleClassification vehicle_classification = 6; + optional VehicleClassification vehicle_classification = 5; // Opaque reference of an associated 3D model of the moving object. // // \note It is implementation-specific how model_references are resolved to // 3d models. // - optional string model_reference = 7; + optional string model_reference = 6; // Definition of object types. // @@ -431,7 +431,7 @@ message MovingObject // value for non valid id. // optional Identifier trailer_id = 4; - + // The IDs of the lanes that this object is assigned to. // // \note Might be multiple if the object is switching lanes or moving from diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 582d54947..ec9804ce0 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -352,35 +352,41 @@ message Vehicle // message VehicleLocalization { - // Georeferenced data. Longitude in decimal degrees. + // Longitude in decimal degrees. // // Unit: [degree] // optional double longitude = 1; - // Georeferenced data. Latitude in decimal degrees. + // Latitude in decimal degrees. // // Unit: [degree] // optional double latitude = 2; - // Georeferenced data. Altitude in meters. + // Altitude in meters. // // Unit: [m] // optional double altitude = 3; + + // Heading in degrees. + // + // Unit: [degree] + // + optional double heading = 4; // Accuracy of localization measurement measured in percentage of the units // // Unit: [%] // - optional double localization_accuracy = 4; + optional double localization_accuracy = 5; // // Number of satellites // // - optional int32 number_of_satellites = 5; + optional int32 number_of_satellites = 6; } // From f07fbe9e1747d39c84a818009b388c0493ba0248 Mon Sep 17 00:00:00 2001 From: "Schloemicher, Thomas AVL,AT" Date: Sun, 3 Nov 2019 17:44:45 +0100 Subject: [PATCH 08/30] bugfix tabs osi_vehicle.proto --- osi_vehicle.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index ec9804ce0..0ddc0d6b7 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -357,7 +357,7 @@ message Vehicle // Unit: [degree] // optional double longitude = 1; - + // Latitude in decimal degrees. // // Unit: [degree] @@ -369,19 +369,19 @@ message Vehicle // Unit: [m] // optional double altitude = 3; - + // Heading in degrees. // // Unit: [degree] // optional double heading = 4; - + // Accuracy of localization measurement measured in percentage of the units // // Unit: [%] // optional double localization_accuracy = 5; - + // // Number of satellites // From 1e44521c6ba2c0efb96a86d1d8fb6a33349b0da9 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 6 Nov 2019 16:52:20 +0100 Subject: [PATCH 09/30] Update osi_vehicle.proto --- osi_vehicle.proto | 4 ---- 1 file changed, 4 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 0ddc0d6b7..0901bcf79 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -677,10 +677,6 @@ message GearLeverState // optional ManualOverrideRequest manual_override_request = 4; - // The all-wheel drive (AWD) mode is engaged by the driver. - // - optional bool is_all_wheel_drive_engaged = 5; - // Describe the possible mode of an automatic transmission. // enum AutomaticTransmissionMode From e8e41f07533a1919345a0d8ab96b547446b47b0a Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 7 Nov 2019 19:13:08 +0100 Subject: [PATCH 10/30] Using the occupant-definition for hands-on-detection --- osi_vehicle.proto | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 0901bcf79..fbdea4b9b 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -5,6 +5,7 @@ option optimize_for = SPEED; import "osi_version.proto"; import "osi_common.proto"; import "osi_object.proto"; +import "osi_occupant.proto"; package osi3; @@ -238,9 +239,10 @@ message Vehicle // optional double steering_friction = 4; - // Hands Off Detection. + // Describes the state of the passenger's hands related to the steering + // wheel (mostly driver). // - optional bool are_hands_off = 5; + optional Occupant.Classification.SteeringControl steering_control = 5; } // From fdde04838bee52c8c70780859bc00fe7b6502b48 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 7 Nov 2019 19:27:26 +0100 Subject: [PATCH 11/30] Update osi_vehicle.proto --- osi_vehicle.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index fbdea4b9b..5a35fb2ac 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -318,7 +318,7 @@ message Vehicle // Contains the springdeflection in z-direction for each wheel. // - // Unit: [mm] + // Unit: [m] // optional double springdeflection = 7; From fbf92ddb670999a5126e0e8adca6f7b4ec151fe0 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 12 Nov 2019 18:16:43 +0100 Subject: [PATCH 12/30] Update osi_vehicle.proto --- osi_vehicle.proto | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 5a35fb2ac..1ed8064d6 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -273,12 +273,15 @@ message Vehicle // message Wheel { - // Contains the friction-coefficient of each wheel. + // For surfaces in relative motion the kinetic or sliding friction coefficient is used. // Dimensionless. // // Unit: [] // - optional double friction_coefficient = 1; + // \par References: + // - https://en.wikipedia.org/wiki/Friction#Coefficient_of_friction + // + optional double kinetic_friction_coefficient = 1; // Contains the x, y and z-coordinate of the contact point of // the wheel, so that walking, torsion and deflation can be visualized. @@ -322,29 +325,29 @@ message Vehicle // optional double springdeflection = 7; - //Contains the relativ position of the wheel to the center of the car + // Contains the relativ position of the wheel to the center of the car // - //Unit: [m] + // Unit: [m] // optional Vector3d position = 8; - //Contains the relativ orientation of the wheel to the center of the car - //As the rotation of the wheel is also controlled by this value, + // Contains the relativ orientation of the wheel to the center of the car + // As the rotation of the wheel is also controlled by this value, // - //Unit: [rad] + // Unit: [rad] // optional Orientation3d orientation = 9; - //Contains the absolute (longitunal) slip of the tire - //0-100 percent + // Contains the absolute (longitunal) slip of the tire + // 0-100 percent // - //Unit: [] + // Unit: [] // optional double slip = 10; - //Contains the slip-angle of the tire + // Contains the slip-angle of the tire // - //Unit: [rad] + // Unit: [rad] // optional double slipangle = 11; } @@ -450,14 +453,10 @@ message Vehicle { // All information about the trajectory the vehicle should follow. // - // \note See osi_common_extension. - // optional Trajectory trajectory = 1; // Angle, angle-speed and torque. // - // \note See osi_common_extension. - // optional SteeringWheel steering_wheel = 2; // Factor to scale the steeringtorque of the function output. @@ -470,8 +469,6 @@ message Vehicle // Acceleration-, brakepedal and clutch. // - // \note See osi_common_extension. - // optional Pedalry pedalry = 4; // Position of the handbrake. From 53ac45ea121ef825c20fd2f0fc3bd96231b456c3 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 12 Nov 2019 18:26:33 +0100 Subject: [PATCH 13/30] Update osi_vehicle.proto --- osi_vehicle.proto | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 1ed8064d6..cf9cdae05 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -273,13 +273,15 @@ message Vehicle // message Wheel { - // For surfaces in relative motion the kinetic or sliding friction coefficient is used. + // Dry friction is a force that opposes the relative lateral motion of two solid surfaces in contact. + // It is subdivided into static friction between non-moving surfaces and kinetic friction between moving surfaces. + // So used here is the dry friction coefficient of the paired materials (see reference). // Dimensionless. // // Unit: [] // // \par References: - // - https://en.wikipedia.org/wiki/Friction#Coefficient_of_friction + // - http://adaptivemap.ma.psu.edu/websites/6_friction/dry_friction/dryfriction.html // optional double kinetic_friction_coefficient = 1; From 3b05371a4e9ab0d8da8c19eb043be7be1fb697e1 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 12 Nov 2019 19:22:23 +0100 Subject: [PATCH 14/30] Extension of ad-function-definitions --- osi_vehicle.proto | 99 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 6 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index cf9cdae05..be6de7002 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -412,9 +412,14 @@ message Vehicle optional string function_name = 1; // - // States of an ad-function. + // Internal states of the ad-function. // - optional States states = 2; + optional StateDefinition states = 2; + + // + // Targeted States of the ad-function from an external participant (e.g. driver pressed activation button). + // + optional StateDefinition external_state_requests = 2; // // Intentions, requests or wishes from the function to change the vehicle-state. @@ -422,14 +427,14 @@ message Vehicle optional Intentions intentions = 3; // - // \brief Internal states of an automated-driving function. + // \brief States of an automated-driving function. // // - message States + message StateDefinition { - // Activation state of the function. + // The (internal/targeted) state of the function. // - optional bool is_activated = 1; + optional FunctionState function_state = 1; // This is the speed the function targets. // E.g.: At the point of activation, the actual speed could be 80 km/h, @@ -444,6 +449,52 @@ message Vehicle // Unit: [s] // optional double timegap = 3; + + // Possibility to inform about an error, warning or just to give an information. + // + // \note It is implementation-specific which information should be sent. + // + optional Notification notification = 4; + + // Definition of possible function-states. + // + enum FunctionState + { + // The function is not working. + // + STATE_OFF = 0; + + // The function is initializing. + // Transition: STATE_OFF ==> STATE_UNAVAILABLE or STATE_AVAILABLE. + // + STATE_INITIALIZING = 1; + + // The function is initialized but not ready to start. + // + STATE_UNAVAILABLE = 2; + + // The function is initialized and ready to start. + // + STATE_AVAILABLE = 3; + + // The function is starting. + // Transition: STATE_AVAILABLE ==> STATE_RUNNING. + // + STATE_STARTING = 4; + + // The function is running. + // + STATE_RUNNING = 5; + + // The function is stopping. + // Transition: STATE_RUNNING ==> STATE_UNAVAILABLE or STATE_AVAILABLE. + // + STATE_STOPPING = 6; + + // An Error occured in the function. + // + STATE_FAILURE = 7; + } } // @@ -740,3 +791,39 @@ message GearLeverState MANUAL_OVERRIDE_REQUEST_GEAR_UP = 4; } } + +// +// \brief Possibility to send a notification. +// Can be used to send e.g. error-messages. +// +message Notification +{ + // The content of the notification. + // + optional string notification = 1; + + // Defines the type of the notification. + // + optional NotificationType notification_type = 2; + + // Definition of possible notification-types. + // + enum NotificationType + { + // An error occurred. + // + TYPE_ERROR = 0; + + // The notificiation is a warning. + // + TYPE_WARNING = 1; + + // The notificiation is just an information. + // + TYPE_INFORMATION = 2; + + // The notificiation is used for debugging. + // + TYPE_DEBUG = 3; + } +} From d9c0cd9780a233d99929a6b3a9a17047cd13cfea Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 12 Nov 2019 19:32:06 +0100 Subject: [PATCH 15/30] Update osi_vehicle.proto --- osi_vehicle.proto | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index be6de7002..cf6b59e44 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -462,38 +462,38 @@ message Vehicle { // The function is not working. // - STATE_OFF = 0; + FUNCTION_STATE_OFF = 0; // The function is initializing. // Transition: STATE_OFF ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - STATE_INITIALIZING = 1; + FUNCTION_STATE_INITIALIZING = 1; // The function is initialized but not ready to start. // - STATE_UNAVAILABLE = 2; + FUNCTION_STATE_UNAVAILABLE = 2; // The function is initialized and ready to start. // - STATE_AVAILABLE = 3; + FUNCTION_STATE_AVAILABLE = 3; // The function is starting. // Transition: STATE_AVAILABLE ==> STATE_RUNNING. // - STATE_STARTING = 4; + FUNCTION_STATE_STARTING = 4; // The function is running. // - STATE_RUNNING = 5; + FUNCTION_STATE_RUNNING = 5; // The function is stopping. // Transition: STATE_RUNNING ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - STATE_STOPPING = 6; + FUNCTION_STATE_STOPPING = 6; // An Error occured in the function. // - STATE_FAILURE = 7; + FUNCTION_STATE_FAILURE = 7; } } From 2a14fc5453e466a84dfd5190cf6f5b4f705c6887 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 13 Nov 2019 08:54:05 +0100 Subject: [PATCH 16/30] Update osi_vehicle.proto --- osi_vehicle.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index cf6b59e44..1a75ae898 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -419,12 +419,12 @@ message Vehicle // // Targeted States of the ad-function from an external participant (e.g. driver pressed activation button). // - optional StateDefinition external_state_requests = 2; + optional StateDefinition external_state_requests = 3; // // Intentions, requests or wishes from the function to change the vehicle-state. // - optional Intentions intentions = 3; + optional Intentions intentions = 4; // // \brief States of an automated-driving function. From 2939aa6977e0ef1edb6cbc3ceb161a66dfc64276 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 14 Nov 2019 09:53:34 +0100 Subject: [PATCH 17/30] Update osi_vehicle.proto --- osi_vehicle.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 1a75ae898..d4a6697b9 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -812,18 +812,18 @@ message Notification { // An error occurred. // - TYPE_ERROR = 0; + NOTIFICATION_TYPE_ERROR = 0; // The notificiation is a warning. // - TYPE_WARNING = 1; + NOTIFICATION_TYPE_WARNING = 1; // The notificiation is just an information. // - TYPE_INFORMATION = 2; + NOTIFICATION_TYPE_INFORMATION = 2; // The notificiation is used for debugging. // - TYPE_DEBUG = 3; + NOTIFICATION_TYPE_DEBUG = 3; } } From 330c29525c2d6aca0a4b17cfaaaa37825f06e436 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Fri, 15 Nov 2019 15:26:38 +0100 Subject: [PATCH 18/30] Update osi_vehicle.proto --- osi_vehicle.proto | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index d4a6697b9..48f2d92f6 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -460,40 +460,48 @@ message Vehicle // enum FunctionState { + // The function-state is unknown. + // + FUNCTION_STATE_UNKNOWN = 0; + + // The function has another state. + // + FUNCTION_STATE_OTHER = 1; + // The function is not working. // - FUNCTION_STATE_OFF = 0; + FUNCTION_STATE_OFF = 2; // The function is initializing. // Transition: STATE_OFF ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - FUNCTION_STATE_INITIALIZING = 1; + FUNCTION_STATE_INITIALIZING = 3; // The function is initialized but not ready to start. // - FUNCTION_STATE_UNAVAILABLE = 2; + FUNCTION_STATE_UNAVAILABLE = 4; // The function is initialized and ready to start. // - FUNCTION_STATE_AVAILABLE = 3; + FUNCTION_STATE_AVAILABLE = 5; // The function is starting. // Transition: STATE_AVAILABLE ==> STATE_RUNNING. // - FUNCTION_STATE_STARTING = 4; + FUNCTION_STATE_STARTING = 6; // The function is running. // - FUNCTION_STATE_RUNNING = 5; + FUNCTION_STATE_RUNNING = 7; // The function is stopping. // Transition: STATE_RUNNING ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - FUNCTION_STATE_STOPPING = 6; + FUNCTION_STATE_STOPPING = 8; // An Error occured in the function. // - FUNCTION_STATE_FAILURE = 7; + FUNCTION_STATE_FAILURE = 9; } } @@ -810,20 +818,28 @@ message Notification // enum NotificationType { + // The notification has no type. + // + NOTIFICATION_TYPE_UNKNOWN = 0; + + // The notification has another type. + // + NOTIFICATION_TYPE_OTHER = 1; + // An error occurred. // - NOTIFICATION_TYPE_ERROR = 0; + NOTIFICATION_TYPE_ERROR = 2; // The notificiation is a warning. // - NOTIFICATION_TYPE_WARNING = 1; + NOTIFICATION_TYPE_WARNING = 3; // The notificiation is just an information. // - NOTIFICATION_TYPE_INFORMATION = 2; + NOTIFICATION_TYPE_INFORMATION = 4; // The notificiation is used for debugging. // - NOTIFICATION_TYPE_DEBUG = 3; + NOTIFICATION_TYPE_DEBUG = 5; } } From 5f0e6a84caabbd37e4f924c98d4529d07e3ee1e4 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Mon, 18 Nov 2019 15:26:54 +0100 Subject: [PATCH 19/30] Added the Traffic-Message. --- osi_vehicle.proto | 92 +++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 48f2d92f6..6b4d9d1f5 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -9,74 +9,88 @@ import "osi_occupant.proto"; package osi3; -// -// \brief The vehicle-message is a deeper description of a vehicle. -// Consists of different messages categorizing the vehicle in: -// Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, -// Vehicle-Light-State, Vehicle-Automated-Driving-Functions. -// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, -// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. -// -message Vehicle +message Traffic { // - // The interface version used by the sender (i.e. the simulation - // environment). + // The interface version used by the sender (i.e. the simulation environment). // optional InterfaceVersion version = 1; - + // // The data timestamp of the simulation environment. The zero time point is // arbitrary but must be identical for all messages. // Recommendation: Zero time point for start point of the simulation. // optional Timestamp timestamp = 2; - + + // + // The ID of the host vehicle object. + // + optional Identifier host_vehicle_id = 3; + + // + // Deeper going description of one or more vehicle regarding these aspects: + // Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, + // Vehicle-Light-State, Vehicle-Localization, Vehicle-Automated-Driving-Functions. + // + repeated VehicleClass vehicle = 4; +} + +// +// \brief The vehicle-message is a deeper description of a vehicle. +// Consists of different messages categorizing the vehicle in: +// Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, +// Vehicle-Light-State, Vehicle-Localization, Vehicle-Automated-Driving-Functions. +// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, +// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. +// +message VehicleClass +{ // - // The base parameters of the vehicle. + // The basic parameters of the vehicle. // - optional VehicleBasics vehicle_basics = 3; + optional VehicleBasics vehicle_basics = 1; // // This is the interface, that describes how the vehicle is moving. // All coordinates and orientations are relative to the global ground truth // coordinate system. // - optional VehicleKinematics vehicle_kinematics = 4; + optional VehicleKinematics vehicle_kinematics = 2; // // Interface regarding the powertrain. // - optional VehiclePowertrain vehicle_powertrain = 5; + optional VehiclePowertrain vehicle_powertrain = 3; // // Interface regarding the SteeringWheel. // The focus here is on the steering wheel. // - optional VehicleSteeringWheel vehicle_steering_wheel = 6; + optional VehicleSteeringWheel vehicle_steering_wheel = 4; // // Interface regarding the wheels. // The focus here is on the physical description of a wheel. // - optional VehicleWheels vehicle_wheels = 7; + optional VehicleWheels vehicle_wheels = 5; // // Interface regarding the light. // The focus here is on the states of the lights. // - optional MovingObject.VehicleClassification.LightState vehicle_light_state = 8; + optional MovingObject.VehicleClassification.LightState vehicle_light_state = 6; // // Interface regarding the navigation. // - optional VehicleLocalization vehicle_localization = 9; + optional VehicleLocalization vehicle_localization = 7; // // Interface regarding automated-driving functions. // The focus here is on states and intentions of a function. // - repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 10; + repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 8; // // \brief The absolut base parameters of the vehicle. @@ -87,33 +101,19 @@ message Vehicle // optional Identifier id = 1; - // The brand of the car. - // - // \note It is implementation-specific how the string is filled. - // - optional string brand = 2; - - // The modelname of the car. - // - // \note It is implementation-specific how the string is filled. - // - optional string modelname = 3; - // The reference_string to the car (e.g. CAD-Modell). // // \note It is implementation-specific how the string is filled. // - optional string reference_string = 4; - - // The total mass of the vehicle (curb weight). - // - // Unit: [kg] - // - optional double weight = 5; + optional string reference_string = 2; - // The license plate of the car. + // The license plate of the car. + // There is no international standardization. + // Recommendation: Use the discription in DIN 74069:1996-07. + // If single-line: maximum of 8 Characters. + // two-line: 9-13 Characters. // - optional string license_plate = 6; + optional string license_plate = 3; } // @@ -129,6 +129,12 @@ message Vehicle // \note The bounding box does NOT include mirrors for vehicles. // optional BaseMoving base = 1; + + // The total mass of the vehicle (curb weight). + // + // Unit: [kg] + // + optional double weight = 2; } // From 764ab60f79bd0ff46203bc904e6a2e99bf6baf5f Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Mon, 18 Nov 2019 18:49:31 +0100 Subject: [PATCH 20/30] Updated function names --- osi_vehicle.proto | 83 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 4 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 6b4d9d1f5..336f35a28 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -202,17 +202,25 @@ message VehicleClass // enum PowertrainMode { + // The powertrain mode is unknown. + // + POWERTRAIN_MODE_UNKNOWN = 0; + + // It is another powertrain mode. + // + POWERTRAIN_MODE_OTHER = 1; + // All-wheel drive (AWD). // - POWERTRAIN_MODE_ALL_WHEEL_DRIVE = 0; + POWERTRAIN_MODE_ALL_WHEEL_DRIVE = 2; // Front-wheel drive (FWD). // - POWERTRAIN_MODE_FRONT_WHEEL_DRIVE = 1; + POWERTRAIN_MODE_FRONT_WHEEL_DRIVE = 3; // Rear-wheel drive (RWD). // - POWERTRAIN_MODE_REAR_WHEEL_DRIVE = 2; + POWERTRAIN_MODE_REAR_WHEEL_DRIVE = 4; } } @@ -415,7 +423,7 @@ message VehicleClass // Here the name of the function can be chosen. // E.g.: Hadpilot, longitudinal_control, lateral_control or emergency_brake_assistant. // - optional string function_name = 1; + optional FunctionName function_name = 1; // // Internal states of the ad-function. @@ -431,6 +439,73 @@ message VehicleClass // Intentions, requests or wishes from the function to change the vehicle-state. // optional Intentions intentions = 4; + + // The possible functions. + // References: + // - https://www.vda.de/en/topics/innovation-and-technology/automated-driving/automated-driving + // + enum FunctionName + { + // The function name is unknown. + // + FUNCTION_NAME_UNKNOWN = 0; + + // It is another function. + // + FUNCTION_NAME_OTHER = 1; + + // Autopilot in urban areas. + // + FUNCTION_NAME_LEVEL_4_URBAN_DRIVING = 2; + + // Driverless parking. + // + FUNCTION_NAME_LEVEL_4_VALET_PARKING = 3; + + // Autopilot on the highway. + // + FUNCTION_NAME_LEVEL_3_HIGHWAY_DRIVING = 4; + + // Autopilot for traffic jams. + // + FUNCTION_NAME_LEVEL_3_TRAFFIC_JAM_DRIVING = 5; + + // Parking done by function lateral and longitudinal. + // + FUNCTION_NAME_LEVEL_2_PARKING_ASSISTANT = 6; + + // Parking done by function lateral. + // + FUNCTION_NAME_LEVEL_1_PARKING_STEERING_ASSISTANT = 7; + + // Longitudinal control with distance keeping by function. + // + FUNCTION_NAME_LEVEL_1_ADAPTIVE_CRUISE_CONTROL = 8; + + // Lateral control by function to keep the lane. + // + FUNCTION_NAME_LEVEL_1_LANE_KEEP_ASSISTANT = 9; + + // Longitudinal control by function. + // + FUNCTION_NAME_LEVEL_1_CRUISE_CONTROL = 10; + + // The maximum speed is limited by a function. + // + FUNCTION_NAME_LEVEL_1_LIMIT = 11; + + // Warning when the vehicle drives over the lane border markings. + // + FUNCTION_NAME_LEVEL_0_LANE_DEPARTURE_WARNING = 12; + + // Monitoring of the blind spot. + // + FUNCTION_NAME_LEVEL_0_BLIND_SPOT_MONITORING = 13; + + // Warning by the danger of a collision. + // + FUNCTION_NAME_LEVEL_0_FORWARD_COLLISION_WARNING = 14; + } // // \brief States of an automated-driving function. From 53a23d6afa282dd7b8511e4a570164acaf194073 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 26 Nov 2019 19:46:12 +0100 Subject: [PATCH 21/30] under construction --- osi_vehicle.proto | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 336f35a28..7fcbe521f 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -9,6 +9,49 @@ import "osi_occupant.proto"; package osi3; +// +// \brief The first message describes a single vehicle in a deeper way than the well-known moving_object. +// That is why it suits perfectly to the in- and output of a vehicle/dynamic-model. +// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, +// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. +// It is based on the message VehicleClass, which is also defined in this proto. +// The vehicle can be the host but also another participant. +// +message Vehicle +{ + // + // The interface version used by the sender (i.e. the simulation environment). + // + optional InterfaceVersion version = 1; + + // + // The data timestamp of the simulation environment. The zero time point is + // arbitrary but must be identical for all messages. + // Recommendation: Zero time point for start point of the simulation. + // + optional Timestamp timestamp = 2; + + // + // True, if the following vehicle-object is the host. + // + optional bool is_host_vehicle = 3; + + // + // Deeper going description of one vehicle regarding these aspects: + // Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, + // Vehicle-Light-State, Vehicle-Localization, Vehicle-Automated-Driving-Functions. + // + optional VehicleClass vehicle = 4; +} + +// +// \brief The second message describes all the vehicle. +// That is why it suits perfectly to the in- and output of a vehicle/dynamic-model. +// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, +// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. +// It is based on the message VehicleClass, which is also defined in this proto. +// The vehicle can be the host but also another participant. +// message Traffic { // From 7a26b8b87e43d0ec854246d1a6587a856111a4f3 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 26 Nov 2019 22:27:54 +0100 Subject: [PATCH 22/30] Update osi_vehicle.proto --- osi_vehicle.proto | 48 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 7fcbe521f..edc214c5c 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -10,12 +10,11 @@ import "osi_occupant.proto"; package osi3; // -// \brief The first message describes a single vehicle in a deeper way than the well-known moving_object. -// That is why it suits perfectly to the in- and output of a vehicle/dynamic-model. -// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, -// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. -// It is based on the message VehicleClass, which is also defined in this proto. -// The vehicle can be the host but also another participant. +// \brief The first message describes a single vehicle in a deeper way than any other osi-class. +// As it is an description of the whole vehicle it can be used as interface for various reasons, +// e.g. to the vehicle/dynamic-model for kinematics calculation or even for measurements in real cars. +// It is based on the message VehicleClass, which is also defined later in this proto. +// The vehicle can be the host but also any other participant. // message Vehicle { @@ -45,12 +44,9 @@ message Vehicle } // -// \brief The second message describes all the vehicle. -// That is why it suits perfectly to the in- and output of a vehicle/dynamic-model. -// As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, -// e.g. to the vehicle-model for kinematics calculation or even for the visualisation in a graphic-engine. -// It is based on the message VehicleClass, which is also defined in this proto. -// The vehicle can be the host but also another participant. +// \brief The second message describes all vehicles on the map. +// The main-usage so far is the visualisation of traffic in a graphic-engine. +// It is based on the message VehicleClass, which is also defined next in this proto. // message Traffic { @@ -80,8 +76,8 @@ message Traffic } // -// \brief The vehicle-message is a deeper description of a vehicle. -// Consists of different messages categorizing the vehicle in: +// \brief The vehicle-class is a deeper description of a vehicle. +// It consists of different messages categorizing the vehicle in: // Vehicle-Basics, Vehicle-Kinematics, Vehicle-Powertrain, Vehicle-SteeringWheel, Vehicle-Wheels, // Vehicle-Light-State, Vehicle-Localization, Vehicle-Automated-Driving-Functions. // As it is an description of the whole vehicle (focus on cars) it can be used as interface for various reasons, @@ -349,18 +345,24 @@ message VehicleClass // Unit: [m] // optional Vector3d contact_point = 2; + + // Median radius of the wheels measured from a center of the wheel including the tire. + // + // Unit: [m] + // + optional double radius = 3; // Contains the rotational speed of each wheel per second. // // Unit: [rad/s] // - optional double rotational_speed = 3; + optional double rotational_speed = 4; // Contains the steering angle of each wheel. // // Unit: [rad] // - optional double steeringangle = 4; + optional double steeringangle = 5; // Contains the camber of each wheel. // @@ -370,45 +372,45 @@ message VehicleClass // // Unit: [rad] // - optional double camber = 5; + optional double camber = 6; // Contains the tirepressure of each tire. // // Unit: [Pa] // - optional double tirepressure = 6; + optional double tirepressure = 7; // Contains the springdeflection in z-direction for each wheel. // // Unit: [m] // - optional double springdeflection = 7; + optional double springdeflection = 8; // Contains the relativ position of the wheel to the center of the car // // Unit: [m] // - optional Vector3d position = 8; + optional Vector3d position = 9; // Contains the relativ orientation of the wheel to the center of the car // As the rotation of the wheel is also controlled by this value, // // Unit: [rad] // - optional Orientation3d orientation = 9; + optional Orientation3d orientation = 10; // Contains the absolute (longitunal) slip of the tire // 0-100 percent // // Unit: [] // - optional double slip = 10; + optional double slip = 11; // Contains the slip-angle of the tire // // Unit: [rad] // - optional double slipangle = 11; + optional double slipangle = 12; } // From 3895bc955908c3824086b87674c17c68a43d7996 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Mon, 9 Dec 2019 16:48:09 +0100 Subject: [PATCH 23/30] Update osi_vehicle.proto --- osi_vehicle.proto | 258 ++++++++++++++++++++++++++++------------------ 1 file changed, 158 insertions(+), 100 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index edc214c5c..3bd5d0a24 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -89,42 +89,42 @@ message VehicleClass // The basic parameters of the vehicle. // optional VehicleBasics vehicle_basics = 1; - + // // This is the interface, that describes how the vehicle is moving. // All coordinates and orientations are relative to the global ground truth // coordinate system. // optional VehicleKinematics vehicle_kinematics = 2; - + // // Interface regarding the powertrain. // optional VehiclePowertrain vehicle_powertrain = 3; - + // // Interface regarding the SteeringWheel. // The focus here is on the steering wheel. // optional VehicleSteeringWheel vehicle_steering_wheel = 4; - + // // Interface regarding the wheels. // The focus here is on the physical description of a wheel. // optional VehicleWheels vehicle_wheels = 5; - + // // Interface regarding the light. // The focus here is on the states of the lights. // optional MovingObject.VehicleClassification.LightState vehicle_light_state = 6; - + // // Interface regarding the navigation. // optional VehicleLocalization vehicle_localization = 7; - + // // Interface regarding automated-driving functions. // The focus here is on states and intentions of a function. @@ -168,7 +168,7 @@ message VehicleClass // \note The bounding box does NOT include mirrors for vehicles. // optional BaseMoving base = 1; - + // The total mass of the vehicle (curb weight). // // Unit: [kg] @@ -213,7 +213,7 @@ message VehicleClass // The actual gear of the gear lever. // optional GearLeverState gear_lever_state = 6; - + // The actual gear of the transmission. // E.g. gear_lever can be in "D" and transmission in "4", but not the // other way around. @@ -244,11 +244,11 @@ message VehicleClass // The powertrain mode is unknown. // POWERTRAIN_MODE_UNKNOWN = 0; - + // It is another powertrain mode. // POWERTRAIN_MODE_OTHER = 1; - + // All-wheel drive (AWD). // POWERTRAIN_MODE_ALL_WHEEL_DRIVE = 2; @@ -345,7 +345,7 @@ message VehicleClass // Unit: [m] // optional Vector3d contact_point = 2; - + // Median radius of the wheels measured from a center of the wheel including the tire. // // Unit: [m] @@ -391,7 +391,7 @@ message VehicleClass // Unit: [m] // optional Vector3d position = 9; - + // Contains the relativ orientation of the wheel to the center of the car // As the rotation of the wheel is also controlled by this value, // @@ -412,7 +412,7 @@ message VehicleClass // optional double slipangle = 12; } - + // // \brief This message contains all the necessary information of the localization solution. // @@ -429,7 +429,7 @@ message VehicleClass // Unit: [degree] // optional double latitude = 2; - + // Altitude in meters. // // Unit: [m] @@ -448,43 +448,43 @@ message VehicleClass // optional double localization_accuracy = 5; - // // Number of satellites // - // optional int32 number_of_satellites = 6; } // - // \brief Information about the automated driving system. - // Important is the differentiation between states and intentions. - // An automated-driving function itself does not have many states. It is more about Intentions, - // to change some vehicle states. E.g. a desired acceleration(-pedal-position), but effective is the one in - // the powertrain message. + // \brief Interface to an automated driving system. + // + // Important is the differentiation between internal states, intentions and external requests: + // Internal states: Description of absolute states of an ad-function (e.g. available/unavailable). + // Intentions: Description of how the function would like to control the vehicle. + // External requests: Description of requests to the function (e.g. driver wants the function to start). // message VehicleAutomatedDrivingFunction { // - // Here the name of the function can be chosen. - // E.g.: Hadpilot, longitudinal_control, lateral_control or emergency_brake_assistant. + // Here the name of the function can be chosen out of VDA-based enums. // optional FunctionName function_name = 1; // - // Internal states of the ad-function. + // Internal states of the ad-function (Output). // - optional StateDefinition states = 2; - + optional FunctionStates function_states = 2; + + // + // Intentions, requests or wishes from the function to change the vehicle-state (Output). // - // Targeted States of the ad-function from an external participant (e.g. driver pressed activation button). + optional FunctionIntentions function_intentions = 3; + // - optional StateDefinition external_state_requests = 3; - - // - // Intentions, requests or wishes from the function to change the vehicle-state. + // Requests from an external participant to change the internal states of the ad-function (Input). + // E.g. driver pressed activation button, but this is just a request. The function itself has to + // decide if this is possible. // - optional Intentions intentions = 4; - + optional FunctionExternalRequests function_external_requests = 4; + // The possible functions. // References: // - https://www.vda.de/en/topics/innovation-and-technology/automated-driving/automated-driving @@ -494,73 +494,72 @@ message VehicleClass // The function name is unknown. // FUNCTION_NAME_UNKNOWN = 0; - + // It is another function. // FUNCTION_NAME_OTHER = 1; - + // Autopilot in urban areas. // FUNCTION_NAME_LEVEL_4_URBAN_DRIVING = 2; - + // Driverless parking. // FUNCTION_NAME_LEVEL_4_VALET_PARKING = 3; - + // Autopilot on the highway. // FUNCTION_NAME_LEVEL_3_HIGHWAY_DRIVING = 4; - + // Autopilot for traffic jams. // FUNCTION_NAME_LEVEL_3_TRAFFIC_JAM_DRIVING = 5; - + // Parking done by function lateral and longitudinal. // FUNCTION_NAME_LEVEL_2_PARKING_ASSISTANT = 6; - + // Parking done by function lateral. // FUNCTION_NAME_LEVEL_1_PARKING_STEERING_ASSISTANT = 7; - + // Longitudinal control with distance keeping by function. // FUNCTION_NAME_LEVEL_1_ADAPTIVE_CRUISE_CONTROL = 8; - + // Lateral control by function to keep the lane. // FUNCTION_NAME_LEVEL_1_LANE_KEEP_ASSISTANT = 9; - + // Longitudinal control by function. // FUNCTION_NAME_LEVEL_1_CRUISE_CONTROL = 10; - + // The maximum speed is limited by a function. // FUNCTION_NAME_LEVEL_1_LIMIT = 11; - + // Warning when the vehicle drives over the lane border markings. // FUNCTION_NAME_LEVEL_0_LANE_DEPARTURE_WARNING = 12; - + // Monitoring of the blind spot. // FUNCTION_NAME_LEVEL_0_BLIND_SPOT_MONITORING = 13; - + // Warning by the danger of a collision. // FUNCTION_NAME_LEVEL_0_FORWARD_COLLISION_WARNING = 14; } // - // \brief States of an automated-driving function. - // + // \brief Internal states of an automated-driving function. // - message StateDefinition + message FunctionStates { - // The (internal/targeted) state of the function. + // The state of the function. // - optional FunctionState function_state = 1; + optional State state = 1; // This is the speed the function targets. // E.g.: At the point of activation, the actual speed could be 80 km/h, @@ -570,12 +569,12 @@ message VehicleClass // optional double targeted_speed = 2; - // The timegap describes the minimumdistance to the next vehicle in front. + // The timegap describes the targeted distance to the next vehicle in front. // // Unit: [s] // - optional double timegap = 3; - + optional double targeted_distance = 3; + // Possibility to inform about an error, warning or just to give an information. // // \note It is implementation-specific which information should be sent. @@ -584,65 +583,66 @@ message VehicleClass // Definition of possible function-states. // - enum FunctionState + enum State { // The function-state is unknown. // - FUNCTION_STATE_UNKNOWN = 0; + STATE_UNKNOWN = 0; // The function has another state. // - FUNCTION_STATE_OTHER = 1; + STATE_OTHER = 1; // The function is not working. // - FUNCTION_STATE_OFF = 2; + STATE_OFF = 2; // The function is initializing. // Transition: STATE_OFF ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - FUNCTION_STATE_INITIALIZING = 3; + STATE_INITIALIZING = 3; // The function is initialized but not ready to start. // - FUNCTION_STATE_UNAVAILABLE = 4; + STATE_UNAVAILABLE = 4; // The function is initialized and ready to start. // - FUNCTION_STATE_AVAILABLE = 5; + STATE_AVAILABLE = 5; // The function is starting. // Transition: STATE_AVAILABLE ==> STATE_RUNNING. // - FUNCTION_STATE_STARTING = 6; + STATE_STARTING = 6; // The function is running. // - FUNCTION_STATE_RUNNING = 7; + STATE_RUNNING = 7; // The function is stopping. // Transition: STATE_RUNNING ==> STATE_UNAVAILABLE or STATE_AVAILABLE. // - FUNCTION_STATE_STOPPING = 8; + STATE_STOPPING = 8; // An Error occured in the function. + // Recommendation: Send an error-description via notification. // - FUNCTION_STATE_FAILURE = 9; + STATE_FAILURE = 9; } } // - // \brief Interface to describe the communication of an automated-driving function. + // \brief Intentions of the an automated-driving function as output to control the vehicle. + // \note There are many ways to control a vehicle e.g. to steer by trajectory or curvature + // or (steering)wheel angle. This interface enables all of them until there is a common sense. // - // Intentions, requests or wishes from the function to change the vehicle-state. - // - message Intentions + message FunctionIntentions { // All information about the trajectory the vehicle should follow. // optional Trajectory trajectory = 1; - // Angle, angle-speed and torque. + // Desired angle, angle-speed and torque. // optional SteeringWheel steering_wheel = 2; @@ -654,47 +654,107 @@ message VehicleClass // optional double steering_override_factor = 3; - // Acceleration-, brakepedal and clutch. + // Desired acceleration-, brakepedal and clutch. // optional Pedalry pedalry = 4; - // Position of the handbrake. + // Intention to change the light state of the vehicle (e.g. indicators for a lane change). + // + optional MovingObject.VehicleClassification.LightState light_state = 5; + + // Request that the driver has to take over. // - // \note A value of 0.0 means fully released and 1.0 means fully pressed. + // \note 0 = off; 1 = on. // - // Range: [0, 1] + optional bool driver_take_over_request = 6; + } + + // + // \brief External Requests to an automated-driving function as input. + // E.g. Driver presses the function-activation-button a requested state can be send, + // the function itself can then decide if an activation can be done and change its internal state. + // + // + message FunctionExternalRequests + { + // External request to change the state of the function. // - optional double handbrake_position = 5; + optional StateCommand state_command = 1; - // The light state of the vehicle. + // By that signal the targeted speed (e.g. adaptive cruise control) can be reduced or risen. + // + // Unit: [km/h] // - optional MovingObject.VehicleClassification.LightState light_state = 6; + optional ChangeTargetedValue change_targeted_speed = 2; - // Request that the driver has to take over. + // By that signal the minimum timegap to the next vehicle can be reduced or risen. // - // \note 0 = off; 1 = on. + // Unit: [s] // - optional bool driver_take_over_request = 7; + optional ChangeTargetedValue change_targeted_distance = 3; - // Request to an ADAS-Function for a lane change. + // Possibility to inform about an error, warning or just to give an information. + // + // \note It is implementation-specific which information should be sent. // - optional LaneChangeRequest lane_change_request = 8; + optional Notification notification = 4; - // Request to an ADAS-Function for a lane change. + // Definition of possible inputs to change a targeted value of a function. // - enum LaneChangeRequest + enum ChangeTargetedValue { - // Stay on the actual lane. + // The command is unknown. + // + CHANGE_TARGETED_VALUE_UNKNOWN = 0; + + // The command is another one. // - LANE_CHANGE_REQUEST_EGO_LANE = 0; + CHANGE_TARGETED_VALUE_OTHER = 1; - // Change to the left. + // The targeted value should rise by a small step. // - LANE_CHANGE_REQUEST_LC_LEFT = 1; + CHANGE_TARGETED_VALUE_RISE_SMALL_STEP = 2; - // Change to the right. + // The targeted value should rise by a big step. // - LANE_CHANGE_REQUEST_LC_RIGHT = 2; + CHANGE_TARGETED_VALUE_RISE_BIG_STEP = 3; + + // The targeted value should be reduced by a small step. + // + CHANGE_TARGETED_VALUE_REDUCE_SMALL_STEP = 4; + + // The targeted value should be reduced by a big step. + // + CHANGE_TARGETED_VALUE_REDUCE_BIG_STEP = 5; + } + + // Definition of possible commands to change the state of a function. + // + enum StateCommand + { + // The command is unknown. + // + STATE_COMMAND_UNKNOWN = 0; + + // The command is another one. + // + STATE_COMMAND_OTHER = 1; + + // The function should initialize. + // + STATE_COMMAND_INITIALIZE = 2; + + // The function should reach STATE_RUNNING. + // + STATE_COMMAND_START = 3; + + // The function should change from STATE_RUNNING to another state. + // + STATE_COMMAND_STOP = 4; + + // The function should reset. + // + STATE_COMMAND_RESET = 5; } } } @@ -809,8 +869,7 @@ message Trajectory // enum InterpolationMethod { - // The interpolation method is unknown (must not be used in ground - // truth). + // The interpolation method is unknown. // INTERPOLATION_METHOD_UNKNOWN = 0; @@ -837,8 +896,7 @@ message GearLeverState // Current set gear of the gear lever. It is optional if none of these // conditions is fulfilled: // - the gear lever controls a manual transmission - // - the gear lever controls an automatic transmission with the manual - // override mode set. + // - the gear lever controls an automatic transmission with the manual override mode set. // // The sign of this field set the gear's mode as following: // - zero: neutral position @@ -875,7 +933,7 @@ message GearLeverState // Other (unspecified but known) transmisson mode. // AUTOMATIC_TRANSMISSION_MODE_OTHER = 1; - + // The gear lever is in automatic parking mode. // AUTOMATIC_TRANSMISSION_MODE_PARK = 2; @@ -926,7 +984,7 @@ message GearLeverState } } -// +// // \brief Possibility to send a notification. // Can be used to send e.g. error-messages. // @@ -947,11 +1005,11 @@ message Notification // The notification has no type. // NOTIFICATION_TYPE_UNKNOWN = 0; - + // The notification has another type. // NOTIFICATION_TYPE_OTHER = 1; - + // An error occurred. // NOTIFICATION_TYPE_ERROR = 2; From 7c35ba143e138b050fd8564784be29b5a56263d5 Mon Sep 17 00:00:00 2001 From: "Schloemicher, Thomas AVL,AT" Date: Tue, 14 Jan 2020 16:33:11 +0100 Subject: [PATCH 24/30] Revert osi_vehicle.proto changes. These changes go to a seperate pull request. --- osi_object.proto | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/osi_object.proto b/osi_object.proto index 789af735d..9959db670 100644 --- a/osi_object.proto +++ b/osi_object.proto @@ -291,12 +291,21 @@ message MovingObject // optional Type type = 3; + // The IDs of the lanes that this object is assigned to. + // + // \note Might be multiple if the object is switching lanes or moving from + // one lane into another following lane. + // + // \note OSI uses singular instead of plural for repeated field names. + // + repeated Identifier assigned_lane_id = 4; + // Specific information about the vehicle. // // \note This field is mandatory if the \c #type is // #TYPE_VEHICLE . // - optional VehicleAttributes vehicle_attributes = 4; + optional VehicleAttributes vehicle_attributes = 5; // Specific information about the classification of the vehicle. // @@ -304,14 +313,14 @@ message MovingObject // \note This field is mandatory if the \c #type is // #TYPE_VEHICLE . // - optional VehicleClassification vehicle_classification = 5; + optional VehicleClassification vehicle_classification = 6; // Opaque reference of an associated 3D model of the moving object. // // \note It is implementation-specific how model_references are resolved to // 3d models. // - optional string model_reference = 6; + optional string model_reference = 7; // Definition of object types. // @@ -432,15 +441,6 @@ message MovingObject // optional Identifier trailer_id = 4; - // The IDs of the lanes that this object is assigned to. - // - // \note Might be multiple if the object is switching lanes or moving from - // one lane into another following lane. - // - // \note OSI uses singular instead of plural for repeated field names. - // - repeated Identifier assigned_lane_id = 5; - // Definition of vehicle types. // enum Type From a06397ee1d89c94a025438239b9fc839714769b6 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 15 Jan 2020 10:55:43 +0100 Subject: [PATCH 25/30] Wheels are repeated now It is possible to describe a vehicle with more than 4 wheels. Should also be possible with less than 4, but not tested so far. --- osi_vehicle.proto | 198 +++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 101 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 3bd5d0a24..ad6c51971 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -44,7 +44,8 @@ message Vehicle } // -// \brief The second message describes all vehicles on the map. +// \brief The second message describes the traffic on the map (or an implementation-specific area). +// This can also include the host-vehicle. // The main-usage so far is the visualisation of traffic in a graphic-engine. // It is based on the message VehicleClass, which is also defined next in this proto. // @@ -299,118 +300,113 @@ message VehicleClass } // - // \brief The focus here is on the wheels. - // It is made usage of the wheel-message to shorten the code. + // \brief The focus here is on the physical description of the wheels. // message VehicleWheels { - // Contains the physical description of the front-left wheel. + // Contains the physical description of a wheel. // - optional Wheel wheel_front_left = 1; + repeated Wheel wheel = 1; - // Contains the physical description of the front-right wheel. + // The focus here is on the physical description of a wheel. // - optional Wheel wheel_front_right = 2; - - // Contains the physical description of the rear-left wheel. - // - optional Wheel wheel_rear_left = 3; - - // Contains the physical description of the rear-right wheel. - // - optional Wheel wheel_rear_right = 4; - } - - // - // \brief The focus here is on the physical description of a wheel. - // - message Wheel - { - // Dry friction is a force that opposes the relative lateral motion of two solid surfaces in contact. - // It is subdivided into static friction between non-moving surfaces and kinetic friction between moving surfaces. - // So used here is the dry friction coefficient of the paired materials (see reference). - // Dimensionless. - // - // Unit: [] - // - // \par References: - // - http://adaptivemap.ma.psu.edu/websites/6_friction/dry_friction/dryfriction.html - // - optional double kinetic_friction_coefficient = 1; - - // Contains the x, y and z-coordinate of the contact point of - // the wheel, so that walking, torsion and deflation can be visualized. - // relative to the center of the wheel. - // - // Unit: [m] - // - optional Vector3d contact_point = 2; + message Wheel + { + // Information about how the wheel is arranged. + // + optional Arrangement arrangement = 1; + + // Dry friction is a force that opposes the relative lateral motion of two solid surfaces + // in contact. It is subdivided into static friction between non-moving surfaces and kinetic + // friction between moving surfaces. + // Ued here is the dry friction coefficient of the paired materials (see reference). + // Dimensionless. + // + // Unit: [] + // + // \par References: + // - http://adaptivemap.ma.psu.edu/websites/6_friction/dry_friction/dryfriction.html + // + optional double kinetic_friction_coefficient = 2; - // Median radius of the wheels measured from a center of the wheel including the tire. - // - // Unit: [m] - // - optional double radius = 3; + // Contact point of the mid of the tire tread with the world. + // Absolute coordinates (x, y, z). + // + // Unit: [m] + // + optional Vector3d contact_point = 3; - // Contains the rotational speed of each wheel per second. - // - // Unit: [rad/s] - // - optional double rotational_speed = 4; + // Contains the rotational speed of each wheel per second. + // + // Unit: [rad/s] + // + optional double rotational_speed = 4; + + // Contains the steering angle of each wheel. + // Right < 0; 0 = straight; 0 < left. + // + // Unit: [rad] + // + optional double steeringangle = 5; + + // Contains the relativ position of the center of the wheel to the center of the bounding-box. + // Possibility to get the spring deflection and the camber (https://en.wikipedia.org/wiki/Camber_angle). + // + // Unit: [m] + // + optional MountingPosition mounting_position = 6; + + // Contains the tirepressure of the tire. + // + // Unit: [Pa] + // + optional double tirepressure = 7; - // Contains the steering angle of each wheel. - // - // Unit: [rad] - // - optional double steeringangle = 5; + // Contains the longitudinal slip of the tire. + // \par References: + // - https://www.kfz-tech.de/Biblio/Formelsammlung/Schlupf.htm + // + // Unit: [%] + // + optional double slip = 8; + + // Information about how the wheel is arranged. + // + enum Arrangement + { + // The description is about a wheel that has an unknown arrangement. + // + ARRANGEMENT_UNKNOWN = 0; - // Contains the camber of each wheel. - // - // Negative camber if the bottom of the wheel is farther out than the - // top. - // For more information: https://en.wikipedia.org/wiki/Camber_angle. - // - // Unit: [rad] - // - optional double camber = 6; + // The description is about a wheel that has another arrangement (e.g. more than six wheels). + // + ARRANGEMENT_OTHER = 1; - // Contains the tirepressure of each tire. - // - // Unit: [Pa] - // - optional double tirepressure = 7; + // The description is about the front-left wheel. + // + ARRANGEMENT_FRONT_LEFT = 2; - // Contains the springdeflection in z-direction for each wheel. - // - // Unit: [m] - // - optional double springdeflection = 8; + // The description is about the front-right wheel. + // + ARRANGEMENT_FRONT_RIGHT = 3; - // Contains the relativ position of the wheel to the center of the car - // - // Unit: [m] - // - optional Vector3d position = 9; + // The description is about the rear-left wheel. + // + ARRANGEMENT_REAR_LEFT = 4; - // Contains the relativ orientation of the wheel to the center of the car - // As the rotation of the wheel is also controlled by this value, - // - // Unit: [rad] - // - optional Orientation3d orientation = 10; + // The description is about the rear-right wheel. + // + ARRANGEMENT_REAR_RIGHT = 5; - // Contains the absolute (longitunal) slip of the tire - // 0-100 percent - // - // Unit: [] - // - optional double slip = 11; + // The description is about the mid-left wheel. + // + ARRANGEMENT_MID_LEFT = 6; - // Contains the slip-angle of the tire - // - // Unit: [rad] - // - optional double slipangle = 12; + // The description is about the mid-right wheel. + // + ARRANGEMENT_MID_RIGHT = 7; + } + } } // @@ -767,21 +763,21 @@ message VehicleClass message SteeringWheel { // Angle of the steering wheel. - // 0=Central (Straight); Left>0; 0>Right. + // Right < 0; 0 = straight; 0 < left. // // Unit: [rad] // optional double angle = 1; - // Angle-speed of the steering wheel. - // 0=Central (Straight); Left>0; 0>Right. + // Angular-speed of the steering wheel. + // Right < 0; 0 = straight; 0 < left. // // Unit: [rad/s] // optional double angular_speed = 2; // Torque of the steering wheel to the hand. - // 0=Central (Straight); Left>0; 0>Right. + // Right < 0; 0 = straight; 0 < left. // // Unit: [N*m] // From 9400dcad70a932ce296d7c69f6d00fea4adbfebd Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 15 Jan 2020 10:59:35 +0100 Subject: [PATCH 26/30] Update osi_vehicle.proto --- osi_vehicle.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index ad6c51971..6ed8d469b 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -354,7 +354,7 @@ message VehicleClass // // Unit: [m] // - optional MountingPosition mounting_position = 6; + optional MountingPosition position = 6; // Contains the tirepressure of the tire. // From 746a7d09e93084dc4c1b6d115eb0a3dfa3ab3038 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Wed, 15 Jan 2020 17:32:38 +0100 Subject: [PATCH 27/30] Update osi_vehicle.proto --- osi_vehicle.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 6ed8d469b..97d03f01f 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -308,7 +308,8 @@ message VehicleClass // repeated Wheel wheel = 1; - // The focus here is on the physical description of a wheel. + // + // \brief The focus here is on the physical description of a wheel. // message Wheel { From ec8e7530d8d7c1e4667e5bdfa3a89a0e281cb02a Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 16 Jan 2020 14:02:36 +0100 Subject: [PATCH 28/30] visible or not --- osi_vehicle.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 97d03f01f..7369b4314 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -154,6 +154,10 @@ message VehicleClass // two-line: 9-13 Characters. // optional string license_plate = 3; + + // Option, if the vehicle should be visible or not for visualisation reasons. + // + optional bool is_visible = 4; } // From 9f9d096bea946fbaa843a4434385be957eb5457c Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 16 Jan 2020 14:19:16 +0100 Subject: [PATCH 29/30] ID now is in the root-level of vehicleClass --- osi_vehicle.proto | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 7369b4314..8b37a972a 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -86,66 +86,66 @@ message Traffic // message VehicleClass { + // The identifier of the car in the simulation. + // + optional Identifier vehicle_id = 1; + // // The basic parameters of the vehicle. // - optional VehicleBasics vehicle_basics = 1; + optional VehicleBasics vehicle_basics = 2; // // This is the interface, that describes how the vehicle is moving. // All coordinates and orientations are relative to the global ground truth // coordinate system. // - optional VehicleKinematics vehicle_kinematics = 2; + optional VehicleKinematics vehicle_kinematics = 3; // // Interface regarding the powertrain. // - optional VehiclePowertrain vehicle_powertrain = 3; + optional VehiclePowertrain vehicle_powertrain = 4; // // Interface regarding the SteeringWheel. // The focus here is on the steering wheel. // - optional VehicleSteeringWheel vehicle_steering_wheel = 4; + optional VehicleSteeringWheel vehicle_steering_wheel = 5; // // Interface regarding the wheels. // The focus here is on the physical description of a wheel. // - optional VehicleWheels vehicle_wheels = 5; + optional VehicleWheels vehicle_wheels = 6; // // Interface regarding the light. // The focus here is on the states of the lights. // - optional MovingObject.VehicleClassification.LightState vehicle_light_state = 6; + optional MovingObject.VehicleClassification.LightState vehicle_light_state = 7; // // Interface regarding the navigation. // - optional VehicleLocalization vehicle_localization = 7; + optional VehicleLocalization vehicle_localization = 8; // // Interface regarding automated-driving functions. // The focus here is on states and intentions of a function. // - repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 8; + repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 9; // // \brief The absolut base parameters of the vehicle. // message VehicleBasics { - // The id of the car in the simulation. - // - optional Identifier id = 1; - // The reference_string to the car (e.g. CAD-Modell). // // \note It is implementation-specific how the string is filled. // - optional string reference_string = 2; + optional string reference_string = 1; // The license plate of the car. // There is no international standardization. @@ -153,11 +153,11 @@ message VehicleClass // If single-line: maximum of 8 Characters. // two-line: 9-13 Characters. // - optional string license_plate = 3; + optional string license_plate = 2; // Option, if the vehicle should be visible or not for visualisation reasons. // - optional bool is_visible = 4; + optional bool is_visible = 3; } // From 6bdcad16a7619415632e8adf587f160e5de07e3a Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 16 Jan 2020 14:21:34 +0100 Subject: [PATCH 30/30] Update osi_vehicle.proto --- osi_vehicle.proto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osi_vehicle.proto b/osi_vehicle.proto index 8b37a972a..19fdd99cf 100644 --- a/osi_vehicle.proto +++ b/osi_vehicle.proto @@ -12,7 +12,7 @@ package osi3; // // \brief The first message describes a single vehicle in a deeper way than any other osi-class. // As it is an description of the whole vehicle it can be used as interface for various reasons, -// e.g. to the vehicle/dynamic-model for kinematics calculation or even for measurements in real cars. +// e.g. to the vehicle/dynamic-model for kinematics calculation or even for measurements in real vehicles. // It is based on the message VehicleClass, which is also defined later in this proto. // The vehicle can be the host but also any other participant. // @@ -86,7 +86,7 @@ message Traffic // message VehicleClass { - // The identifier of the car in the simulation. + // The identifier of the vehicle in the simulation. // optional Identifier vehicle_id = 1; @@ -141,13 +141,13 @@ message VehicleClass // message VehicleBasics { - // The reference_string to the car (e.g. CAD-Modell). + // The reference_string to the vehicle (e.g. CAD-Modell). // // \note It is implementation-specific how the string is filled. // optional string reference_string = 1; - // The license plate of the car. + // The license plate of the vehicle. // There is no international standardization. // Recommendation: Use the discription in DIN 74069:1996-07. // If single-line: maximum of 8 Characters. @@ -889,7 +889,7 @@ message Trajectory } // -// \brief The actual gear of the car. +// \brief The actual gear of the vehicle. // // message GearLeverState