Skip to content

Add automated driving function state to host vehicle data #589

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions osi_common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -885,3 +885,20 @@ message GeodeticPosition
//
optional double altitude = 3;
}

//
// \brief Generic key-value pair structure
//
// A generic key-value pair structure which can be used to capture information
// which is opaque to the general OSI interface.
//
message KeyValuePair
{
// A generic string key.
//
optional string key = 1;

// A generic string value.
//
optional string value = 2;
}
257 changes: 251 additions & 6 deletions osi_hostvehicledata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,20 @@ message HostVehicleData
//
optional VehicleLocalization vehicle_localization = 8;

// State of any automated driving functions.
//
// \brief The absolute base parameters of the vehicle.
// This can include:
// - information presented to the driver, for example, parking sensors
// - warnings raised by the vehicle, for example, forward collision warning
// - corrective action taken by the vehicle, for example, auto emergency braking
// - full level 4 self driving systems
//
// \note OSI uses singular instead of plural for repeated field names.
//
repeated VehicleAutomatedDrivingFunction vehicle_automated_driving_function = 12;

//
// \brief The absolute base parameters of the vehicle.
//
message VehicleBasics
{
Expand Down Expand Up @@ -170,7 +182,7 @@ message HostVehicleData
}

//
// \brief The focus here is on the description of the brake system.
// \brief The focus here is on the description of the brake system.
//
message VehicleBrakeSystem
{
Expand All @@ -181,7 +193,7 @@ message HostVehicleData
}

//
// \brief The focus here is on the description of the steering train.
// \brief The focus here is on the description of the steering train.
//
message VehicleSteering
{
Expand Down Expand Up @@ -223,7 +235,7 @@ message HostVehicleData

// Rotation rate of the wheel based on the processed output of the hall sensor measurements at the wheel.
// The rotation rate around the y-axis with respect to the wheel's coordinate system.
//
//
// Unit: rad/s.
//
// The sign convention is defined using the right-hand rule.
Expand All @@ -237,7 +249,7 @@ message HostVehicleData

// Contains the longitudinal, measured slip of the tire.
// \par References:
// - https://www.kfz-tech.de/Biblio/Formelsammlung/Schlupf.htm
// [1] kfz-tech.de, Schlupf, Retrieved June 30, 2021, from https://www.kfz-tech.de/Biblio/Formelsammlung/Schlupf.htm
//
// Unit: %
//
Expand Down Expand Up @@ -270,9 +282,242 @@ message HostVehicleData
// in context to the global coordinate system.
//
optional Orientation3d orientation = 2;

// Most accurate geodetic information of the vehicle available in the on-board network.
//
optional GeodeticPosition geodetic_position = 3;
}

//
// \brief State of one automated driving function on the host vehicle.
//
message VehicleAutomatedDrivingFunction
{
// The particular driving function being reported about.
//
optional Name name = 1;

// Custom driving function name.
//
// Only used if name is set to NAME_OTHER.
//
optional string custom_name = 2;

// The state of the function.
//
// This is whether the function has actually been triggered, for
// example, a warning has been raised, or additional braking is
// in effect.
//
optional State state = 3;

// Custom state.
//
// Only used if the state is set to STATE_OTHER.
//
optional string custom_state = 4;

// Whether, and how, the driver has overridden this function.
//
optional DriverOverride driver_override = 5;

// Custom detail.
//
// An opaque set of key-value pairs which capture any user specific
// details that may be relevant. This could include details about
// how a warning was raised (dashboard, audible, etc.) or it could
// be about settings which would influence evaluation, such as
// sensitivity settings.
//
repeated KeyValuePair custom_detail = 6;

// A list of possible automated driving features.
//
// \note This can span (in theory) from Level 0 all the way to Level 5.
//
// \par References:
// [1] CLEARING THE CONFUSION: Recommended Common Naming for Advanced Driver Assistance Technologies, SAE International, Retrieved October 22, 2021, from https://www.sae.org/binaries/content/assets/cm/content/miscellaneous/adas-nomenclature.pdf
// [2] Automated Driving, German Association of the Automotive Industry (VDA), Retrieved October 22, 2021, from https://www.vda.de/en/topics/innovation-and-technology/automated-driving/automated-driving
//
enum Name
{
// Unknown feature, should not be used.
//
NAME_UNKNOWN = 0;

// Custom feature, see custom_name.
//
NAME_OTHER = 1;

// Blind spot warning.
//
NAME_BLIND_SPOT_WARNING = 2;

// Forward collision warning.
//
NAME_FORWARD_COLLISION_WARNING = 3;

// Lane departure warning.
//
NAME_LANE_DEPARTURE_WARNING = 4;

// Parking collision warning.
//
NAME_PARKING_COLLISION_WARNING = 5;

// Rear cross-traffic warning
//
NAME_REAR_CROSS_TRAFFIC_WARNING = 6;

// Automatic emergency braking
//
NAME_AUTOMATIC_EMERGENCY_BRAKING = 7;

// Emergency steering
//
NAME_AUTOMATIC_EMERGENCY_STEERING = 8;

// Reverse automatic emergency braking
//
NAME_REVERSE_AUTOMATIC_EMERGENCY_BRAKING = 9;

// Adaptive cruise control
//
NAME_ADAPTIVE_CRUISE_CONTROL = 10;

// Lane keeping assist
//
NAME_LANE_KEEPING_ASSIST = 11;

// Active driving assistance
//
NAME_ACTIVE_DRIVING_ASSISTANCE = 12;

// Backup camera
//
NAME_BACKUP_CAMERA = 13;

// Surround view camera
//
NAME_SURROUND_VIEW_CAMERA = 14;

// Active parking assistance
//
NAME_ACTIVE_PARKING_ASSISTANCE = 15;

// Remote parking assistance
//
NAME_REMOTE_PARKING_ASSISTANCE = 16;

// Trailer assistance
//
NAME_TRAILER_ASSISTANCE = 17;

// Automatic high beams
//
NAME_AUTOMATIC_HIGH_BEAMS = 18;

// Driver monitoring
//
NAME_DRIVER_MONITORING = 19;

// Head up display
//
NAME_HEAD_UP_DISPLAY = 20;

// Night vision
//
NAME_NIGHT_VISION = 21;

// Urban driving
//
NAME_URBAN_DRIVING = 22;

// Highway autopilot.
//
NAME_HIGHWAY_AUTOPILOT = 23;

// Cruise control.
//
NAME_CRUISE_CONTROL = 24;

// Speed limit control
//
NAME_SPEED_LIMIT_CONTROL = 25;
}

// The state that the feature is in.
//
// \note Not all of these will be applicable for all vehicles
// and features.
//
enum State
{
// An unknown state, this should not be used.
//
STATE_UNKNOWN = 0;

// Used for custom states not covered by the definitions below.
//
// A string state can be specified in custom_state.
//
STATE_OTHER = 1;

// The function has errored in some way that renders it ineffective.
//
STATE_ERRORED = 2;

// The function cannot be used due to unfulfilled preconditions,
// for example it is a highway only feature and the vehicle is in
// an urban environment.
//
STATE_UNAVAILABLE = 3;

// The function can be used as all preconditions are satisfied, but
// it hasn't been enabled.
//
STATE_AVAILABLE = 4;

// The function is available but conditions have not caused it to be
// triggered, for example, no vehicles in front to trigger a FCW.
//
STATE_STANDBY = 5;

// The function is currently active, for example, a warning is being
// shown to the driver, or emergency braking is being applied/
//
STATE_ACTIVE = 6;
}

//
// \brief Driver override information
//
// Information about whether and how and driver may have overridden
// an automated driving function.
//
message DriverOverride
{
// The feature has been overridden by a driver action.
//
// \note If false, the rest of this message should be ignored.
optional bool active = 1;

// What driver inputs have caused the override.
//
repeated Reason override_reason = 2;

// Ways in which a driver could override a driving function.
//
enum Reason
{
// The driver has applied sufficient input via the break pedal.
//
REASON_BRAKE_PEDAL = 0;

// The driver has applied sufficient steering input.
//
REASON_STEERING_INPUT = 1;
}
}
}
}
16 changes: 16 additions & 0 deletions osi_trafficupdate.proto
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ option optimize_for = SPEED;
import "osi_version.proto";
import "osi_common.proto";
import "osi_object.proto";
import "osi_hostvehicledata.proto";

package osi3;

Expand Down Expand Up @@ -52,4 +53,19 @@ message TrafficUpdate
// MovingObject::VehicleClassification::trailer_id.
//
repeated MovingObject update = 3;

// Internal state for each vehicle.
//
// This is an optional field as internal state may not be known or relevant,
// for example, a trailer might not have any internal state.
// It is also allowed to only specify internal_state for a subset of the
// objects referenced in the update.
//
// \note This covers any information which cannot be externally perceived
// and therefore cannot be included in messages available in ground truth.
//
// \note The id field from this should match the id in the update field
// above where the same vehicle is being referenced.
//
repeated HostVehicleData internal_state = 4;
}