Skip to content

Commit

Permalink
Add support for VDA5050 v2.0
Browse files Browse the repository at this point in the history
* Rename OrderInformation to OrderState
* Add Factsheet, Error and SafetyState message definitions
* Add enums for action scopes
* Fix lowercase constants and several datatypes

issue: ipa320#28

Co-authored-by: Alejandro Duarte <[email protected]>                                                                                                                                                Co-authored-by: Florencia Grosso <[email protected]>
  • Loading branch information
guillaumeautran and FlorGrosso committed Sep 28, 2022
1 parent 2024e06 commit 644c0f5
Show file tree
Hide file tree
Showing 35 changed files with 307 additions and 66 deletions.
25 changes: 22 additions & 3 deletions vda5050_msgs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,37 +16,56 @@ find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)

set(msg_files
"msg/AGVPosition.msg"
"msg/Action.msg"
"msg/ActionParameter.msg"
"msg/ActionParameterDefinition.msg"
"msg/AGVAction.msg"
"msg/AGVGeometry.msg"
"msg/AGVPosition.msg"
"msg/BatteryState.msg"
"msg/BoundingBoxReference.msg"
"msg/Connection.msg"
"msg/ControlPoint.msg"
"msg/CurrentAction.msg"
"msg/Edge.msg"
"msg/EdgeState.msg"
"msg/Envelope2D.msg"
"msg/Envelope3D.msg"
"msg/Error.msg"
"msg/ErrorReference.msg"
"msg/Factsheet.msg"
"msg/Info.msg"
"msg/InfoReference.msg"
"msg/Header.msg"
"msg/InstantActions.msg"
"msg/Load.msg"
"msg/LoadDimensions.msg"
"msg/LoadSet.msg"
"msg/LoadSpecification.msg"
"msg/MaxArrayLens.msg"
"msg/MaxStringLens.msg"
"msg/Node.msg"
"msg/NodePosition.msg"
"msg/NodeState.msg"
"msg/OptionalParameter.msg"
"msg/Order.msg"
"msg/OrderInformation.msg"
"msg/OrderState.msg"
"msg/PhysicalParameters.msg"
"msg/PolygonPoint.msg"
"msg/Position.msg"
"msg/ProtocolFeatures.msg"
"msg/ProtocolLimits.msg"
"msg/SafetyState.msg"
"msg/Timing.msg"
"msg/Trajectory.msg"
"msg/TypeSpecification.msg"
"msg/Velocity.msg"
"msg/Visualization.msg"
"msg/WheelDefinition.msg"
)
rosidl_generate_interfaces(${PROJECT_NAME}
${msg_files}
DEPENDENCIES
DEPENDENCIES
std_msgs
builtin_interfaces
)
Expand Down
10 changes: 10 additions & 0 deletions vda5050_msgs/msg/AGVAction.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
string action_type # Unique actionType corresponding to action.actionType
string action_description
string[] action_scopes # Allowed scopes for using this action-type
ActionParameterDefinition[] action_parameters # List of parameters defined for the action
string result_description

# Enums for action scopes
string INSTANT = "INSTANT"
string NODE = "NODE"
string EDGE = "EDGE"
3 changes: 3 additions & 0 deletions vda5050_msgs/msg/AGVGeometry.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
WheelDefinition[] wheel_definitions # List of wheels, containing wheel-arrangement and geometry
Envelope2D[] envelopes2d
Envelope3D[] envelopes3d # List of AGV-envelope curves in 3D
4 changes: 2 additions & 2 deletions vda5050_msgs/msg/AGVPosition.msg
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ float64 y # [m] Y-position on the map in reference to the ma

float64 theta # [rad] Range: [-Pi … Pi] Orientation of the AGV.

string map_id # Unique identification of the map in which the position is referenced. Each map has the
string map_id # Unique identification of the map in which the position is referenced. Each map has the
# same origin of coordinates. When an AGV uses an elevator, e. g. leading from a departure
# floor to a target floor, it will disappear off the map of the departure floor and spawn
# in the related lift node on the map of the target floor.

string map_description # Additional information on the map.
string map_description # Additional information on the map.
13 changes: 13 additions & 0 deletions vda5050_msgs/msg/ActionParameterDefinition.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
string key
string value_data_type
string description
bool is_optional

# Enums for valueDataType
string BOOL = "BOOL"
string NUMBER = "NUMBER"
string INTEGER = "INTEGER"
string FLOAT = "FLOAT"
string STRING = "STRING"
string OBJECT = "OBJECT"
string ARRAY = "ARRAY"
2 changes: 1 addition & 1 deletion vda5050_msgs/msg/Connection.msg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# HEADER
int32 header_id # header ID of the message. The headerId is defined per topic and incremented by 1 with each sent
uint32 header_id # header ID of the message. The headerId is defined per topic and incremented by 1 with each sent
# (but not necessarily received) message.

string timestamp # Timestamp after ISO8601 in the format YYYY-MM-DDTHH:mm:ss.ssZ (e.g.“2017-04-15T11:40:03.12Z”)
Expand Down
2 changes: 1 addition & 1 deletion vda5050_msgs/msg/Edge.msg
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

string edge_id # Unique edge identification

int32 sequence_id # Id to track the sequence of nodes and edges in an order and to simplify order
uint32 sequence_id # Id to track the sequence of nodes and edges in an order and to simplify order
# updates. The variable sequence_id runs across all nodes and edges of the same order
# and is reset when a new order_id is issued.

Expand Down
2 changes: 1 addition & 1 deletion vda5050_msgs/msg/EdgeState.msg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
string edge_id # Unique edge identification

int32 sequence_id # sequenceId to differentiate between multiple edges with
uint32 sequence_id # sequenceId to differentiate between multiple edges with

string edge_description # Additional information on the edge

Expand Down
3 changes: 3 additions & 0 deletions vda5050_msgs/msg/Envelope2D.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
string set # Name of the envelope curve set
PolygonPoint[] polygon_points # Envelope curve as a x/y-polygon
string description
5 changes: 5 additions & 0 deletions vda5050_msgs/msg/Envelope3D.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
string set # Name of the envelope curve set
string format
string data
string url # Protocol and url-definition for downloading the 3D-envelope curve data
string description
4 changes: 2 additions & 2 deletions vda5050_msgs/msg/Error.msg
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ string error_level # Enum {warning, fatal} warning:
# intervention required (e.g. laser scanner is contaminated)

# Enums for error_level
string WARNING="warning"
string FATAL="fatal"
string WARNING="WARNING"
string FATAL="FATAL"
26 changes: 26 additions & 0 deletions vda5050_msgs/msg/Factsheet.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# HEADER
uint32 header_id # header ID of the message. The headerId is defined per topic and incremented by 1 with each sent
# (but not necessarily received) message.

string timestamp # Timestamp after ISO8601 in the format YYYY-MM-DDTHH:mm:ss.ssZ (e.g.“2017-04-15T11:40:03.12Z”)

string version # Version of the protocol [Major].[Minor].[Patch] (e.g. 1.3.2)

string manufacturer # Manufacturer of the AGV

string serial_number # Serial Number of the AGV

# CONTENTS
TypeSpecification type_specification # Class and capabilities of the AGV

PhysicalParameters physical_parameters # Physical properties of the AGV

ProtocolLimits protocol_limits # Protocol limitations of the AGV

ProtocolFeatures protocol_features # Supported and/or required optional parameters

AGVGeometry agv_geometry # Detailed definition of AGV geometry

LoadSpecification load_specification # Load positions / load handling devices

int32 localization_parameters # Detailed specification of localization
4 changes: 2 additions & 2 deletions vda5050_msgs/msg/InstantActions.msg
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
int32 header_id # header ID of the message. The headerId is defined per topic and incremented by 1 with each sent
uint32 header_id # header ID of the message. The headerId is defined per topic and incremented by 1 with each sent
# (but not necessarily received) message.

string timestamp # Timestamp after ISO8601 in the format YYYY-MM-DDTHH:mm:ss.ssZ (e.g.“2017-04-15T11:40:03.12Z”)
Expand All @@ -9,4 +9,4 @@ string manufacturer # Manufacturer of the AGV

string serial_number # Serial Number of the AGV

Action[] instant_actions # List of actions to execute
Action[] actions # List of actions to execute
2 changes: 1 addition & 1 deletion vda5050_msgs/msg/Load.msg
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ vda5050_msgs/BoundingBoxReference bounding_box_reference # Point of reference f

vda5050_msgs/LoadDimensions load_dimensions # Dimensions of the load’s bounding box in meters.

uint32 weight # Absolute weight of the load measured in kg.
float64 weight # Absolute weight of the load measured in kg.
35 changes: 35 additions & 0 deletions vda5050_msgs/msg/LoadSet.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
string set_name

string load_type

string[] load_positions # List of load positions / load handling devices

BoundingBoxReference bounding_box_reference # Bounding box reference as defined in parameter loads[] in state-message

LoadDimensions load_dimensions

float64 max_weight # Maximum weight of load type [kg]

float64 min_loadhandling_height # Minimum allowed height for handling of this load-type and weight [m]

float64 max_loadhandling_height # Maximum allowed height for handling of this load-type and weight [m]

float64 min_loadhandling_depth # Minimum allowed depth for this load-type and weight [m]

float64 max_loadhandling_depth # Maximum allowed depth for this load-type and weight [m]

float64 min_loadhandling_tilt # Minimum allowed tilt for this load-type and weight [rad]

float64 max_loadhandling_tilt # Maximum allowed tilt for this load-type and weight [rad]

float64 agv_speed_limit # Maximum allowed speed for this load-type and weight [m/s^2]

float64 agv_acceleration_limit # Maximum allowed acceleration for this load-type and weight [m/s^2]

float64 agv_deceleration_limit # Maximum allowed deceleration for this load-type and weight [m/s^2]

float64 pick_time # Approx. time for picking up the load [s]

float64 drop_time # Approx. time for dropping the load [s]

string description # Free description of the load handling set
2 changes: 2 additions & 0 deletions vda5050_msgs/msg/LoadSpecification.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
string[] load_positions # List of load positions / load handling devices
LoadSet[] load_sets # List of load-sets that can be handled by the AGV
31 changes: 31 additions & 0 deletions vda5050_msgs/msg/MaxArrayLens.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
uint32 order_nodes # Maximum number of nodes per order processable by the AGV

uint32 order_edges # Maximum number of edges per order processable by the AGV

uint32 node_actions # Maximum number of action per node processable by the AGV

uint32 edge_actions # Maximum number of action per edge processable by the AGV

uint32 actions_parameters # Maximum number of parameters per action processable by the AGV

uint32 instant_actions # Maximum number of instant actions per message processable by the AGV

uint32 trajectory_knot_vector # Maximum number of knots per trajectory processable by the AGV

uint32 trajectory_control_points # Maximum number of control points per trajectory processable by the AGV

uint32 state_node_states # Maximum number of nodeStates sent by the AGV, maximum number of nodes in base of AGV

uint32 state_edge_states # Maximum number of edgeStates sent by the AGV, maximum number of edges in base of AGV

uint32 state_loads # Maximum number of load-objects sent by the AGV

uint32 state_action_states # Maximum number of actionStates sent by the AGV

uint32 state_errors # Maximum number of errors sent by the AGV in one state-message

uint32 state_information # Maximum number of information objects sent by the AGV in one state-message

uint32 error_references # Maximum number of error references sent by the AGV for each error

uint32 info_references # Maximum number of info references sent by the AGV for each information
13 changes: 13 additions & 0 deletions vda5050_msgs/msg/MaxStringLens.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
uint32 msg_len # Maximum MQTT Message length

uint32 topic_serial_len # Maximum length of serial-number part in MQTT-topics

uint32 topic_elem_len # Maximum length of all other parts in MQTT-topics (timestamp, versions, manufacturer)

uint32 id_len # Maximum length of ID-Strings

bool id_numerical_only # If true ID-strings need to contain numerical values only

uint32 enum_len # Maximum length of ENUM- and Key-Strings

uint32 load_id_len # Maximum length of loadId Strings
6 changes: 3 additions & 3 deletions vda5050_msgs/msg/Node.msg
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

string node_id # Unique node identification.

int32 sequence_id # Id to track the sequence of nodes and edges in an order and to
uint32 sequence_id # Id to track the sequence of nodes and edges in an order and to
# simplify order updates. The variable sequence_id runs across all
# nodes and edges of the same order and is reset when a new order_id is
# issued.

string node_description # Additional information on the node
string node_description # Additional information on the node

bool released # True indicates that the node is part of the base. False indicates
# that the node is part of the horizon.

vda5050_msgs/NodePosition node_position # Node position
vda5050_msgs/NodePosition node_position # Node position


vda5050_msgs/Action[] actions # Array of actions to be executed in node. Empty array if no actions
Expand Down
13 changes: 7 additions & 6 deletions vda5050_msgs/msg/NodePosition.msg
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@ float64 y # [m] Y-position on the map in

float64 theta # [rad] The angular dimension

string map_id # Unique identification of the map in which the position is referenced. Each map has the same
# origin of coordinates. When an AGV uses an elevator, e. g. leading from a departure floor to a
# target floor, it will disappear off the map of the departure floor and spawn in the related
# lift node on the map of the target floor.

string map_description # Additional information on the map

float32 allowed_deviation_x_y # Indicates how exact an AGV has to drive over a node in order for it
# to count as traversed.
Expand All @@ -26,3 +20,10 @@ float32 allowed_deviation_theta # Range: [0 ... Pi]
# Indicates how big the deviation of theta angle can be.
# The lowest acceptable angle is theta -allowedDevaitionTheta and
# the highest acceptable angle is theta + allowedDeviationTheta

string map_id # Unique identification of the map in which the position is referenced. Each map has the same
# origin of coordinates. When an AGV uses an elevator, e. g. leading from a departure floor to a
# target floor, it will disappear off the map of the departure floor and spawn in the related
# lift node on the map of the target floor.

string map_description # Additional information on the map
2 changes: 1 addition & 1 deletion vda5050_msgs/msg/NodeState.msg
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Array of nodes to be traversed for fulfilling the order

string node_id # Unique node identification
int32 sequence_id # sequenceId to discern multiple nodes with same nodeId.
uint32 sequence_id # sequenceId to discern multiple nodes with same nodeId.
string node_description # Additional information on the node
vda5050_msgs/NodePosition position # Node position (see Topic: Order)
bool released # true indicates that the node is part of the base.
Expand Down
7 changes: 7 additions & 0 deletions vda5050_msgs/msg/OptionalParameter.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
string parameter # Full name of optional parameter
string support # Type of support for the optional parameter
string description # Description of optional parameter

# Enums for support
string SUPPORTED = "SUPPORTED"
string REQUIRED = "REQUIRED"
12 changes: 4 additions & 8 deletions vda5050_msgs/msg/Order.msg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# HEADER
int32 header_id # header ID of the message. The header_id is defined per topic and incremented by 1 with each sent
uint32 header_id # header ID of the message. The header_id is defined per topic and incremented by 1 with each sent
# (but not necessarily received) message.

string timestamp # Timestamp after ISO8601 in the format YYYY-MM-DDTHH:mm:ss.ssZ (e.g.“2017-04-15T11:40:03.12Z”)
Expand All @@ -16,16 +16,12 @@ string order_id # Unique order identification

uint32 order_update_id # order_update identification. Is unique per order_id. If an order update is
# rejected, this field is to be passed in the rejection message

bool replace # Indicates that previously released base nodes should be replaced by the
# base of this updated order. If this is not possible, the AGV returns an
# error code (see errors in topic “state”). The new base has to start at the
# following node from the current position which has not been traversed yet.

string zone_set_id # Unique identifier of the zone set that the AGV has to use for navigation or that was used by master controlfor planning
# Optional: Some master controlsystems do not use zones. Some AGVs do not understand zones. Do not add to message if no zones are used

vda5050_msgs/Node[] nodes # Array of nodes to be traversed for fulfilling the order. The nodes come
# in the sequence of the fulfilling.

vda5050_msgs/Edge[] edges # Array of edges to be traversed for fulfilling the order

string zone_set_id # Unique identifier of the zone set that the AGV has to use for navigation or that was used by master controlfor planning
# Optional: Some master controlsystems do not use zones. Some AGVs do not understand zones. Do not add to message if no zones are used
Loading

0 comments on commit 644c0f5

Please sign in to comment.