feat: add lms-nav2-gazebo-vehicle module

This commit is contained in:
2026-07-28 10:35:32 +09:00
commit 27bdee4a7a
214 changed files with 6977 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
build/
install/
log/
.colcon/
*.log
Executable
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -euo pipefail
MODULE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
RUNTIME_ROOT="${AUTONOMY_STUDIO_RUNTIME_ROOT:-$HOME/autonomy-studio/runtime/nav2}"
exec bash "$RUNTIME_ROOT/docker/docker_build_nav2.sh" "$(dirname "$MODULE_PATH")" "$(basename "$MODULE_PATH")" "${NAV2_DOCKER_IMAGE:-future-nav2-gazebo:humble}" "${ROS_DOMAIN_ID:-0}"
Executable
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
MODULE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
RUNTIME_ROOT="${AUTONOMY_STUDIO_RUNTIME_ROOT:-$HOME/autonomy-studio/runtime/nav2}"
FOLDER_NAME="$(basename "$MODULE_PATH")"
CONTAINER_NAME="${FOLDER_NAME#\[}"; CONTAINER_NAME="${CONTAINER_NAME/\]/-}"
exec bash "$RUNTIME_ROOT/docker/docker_run_nav2.sh" "$CONTAINER_NAME" "$(dirname "$MODULE_PATH")" "$FOLDER_NAME" "${NAV2_DOCKER_IMAGE:-future-nav2-gazebo:humble}" "${ROS_DOMAIN_ID:-0}" sim_mode:=true platform:=turtlebot3 level:=2d "$@"
View File
+50
View File
@@ -0,0 +1,50 @@
DISCLAIMER
The open-source software for self-driving vehicles, Autoware.AI, Autoware.IO,
Autoware.Auto. (collectively, referred to as “Autoware”) will be provided by
The Autoware Foundation under the Apache 2.0 License. This “DISCLAIMER” will be
applied to all users of Autoware (a “User” or “Users”) with the Apache 2.0
License and Users shall hereby approve and acknowledge all the contents
specified in this disclaimer below and will be deemed to consent to this
disclaimer without any objection upon utilizing or downloading Autoware.
Disclaimer and Waiver of Warranties
1. AUTOWARE FOUNDATION MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, WITH RESPECT TO PROVIDING AUTOWARE (the “Service”)
including but not limited to any representation or warranty (i) of fitness or
suitability for a particular purpose contemplated by the Users, (ii) of the
expected functions, commercial value, accuracy, or usefulness of the Service,
(iii) that the use by the Users of the Service complies with the laws and
regulations applicable to the Users or any internal rules established by
industrial organizations, (iv) that the Service will be free of interruption or
defects, (v) of the non-infringement of any third party's right and (vi) the
accuracy of the content of the Services and the software itself.
2. The Autoware Foundation shall not be liable for any damage incurred by the
User that are attributable to the Autoware Foundation for any reasons
whatsoever. UNDER NO CIRCUMSTANCES SHALL THE AUTOWARE FOUNDATION BE LIABLE FOR
INCIDENTAL, INDIRECT, SPECIAL OR FUTURE DAMAGES OR LOSS OF PROFITS.
3. A User shall be entirely responsible for the content posted by the User and
its use of any content of the Service or the Website. If the User is held
responsible in a civil action such as a claim for damages or even in a criminal
case, the Autoware Foundation and member companies, governments and academic &
non-profit organizations and their directors, officers, employees and agents
(collectively, the “Indemnified Parties”) shall be completely discharged from
any rights or assertions the User may have against the Indemnified Parties, or
from any legal action, litigation or similar procedures.
Indemnity
A User shall indemnify and hold the Indemnified Parties harmless from any of
their damages, losses, liabilities, costs or expenses (including attorneys'
fees or criminal compensation), or any claims or demands made against the
Indemnified Parties by any third party, due to or arising out of, or in
connection with utilizing Autoware (including the representations and
warranties), the violation of applicable Product Liability Law of each country
(including criminal case) or violation of any applicable laws by the Users, or
the content posted by the User or its use of any content of the Service or the
Website.
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2018 ApexAI
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+77
View File
@@ -0,0 +1,77 @@
This is a Tier4 forked version of [autoware_auto_msgs](https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs)
# autoware_auto_msgs
Interfaces between core Autoware.Auto components.
## Conventions
### Comments
Add a comment to describe the meaning of the field.
### Default Value
Prefer a meaningful default value. Otherwise, the field is uninitialized.
### Optional parameters
There is nothing like `std::optional` in IDL, unfortunately. To accomodate the common use case of a
fixed message where some variables are not always filled, add an additional boolean variable with a
prefix `has_` and a default value of `FALSE`.
### Units
If a quantity described by a field has an associated unit of measurement, the following rules apply to determine the field name:
1. If the unit is as base or [derived SI unit](https://en.wikipedia.org/wiki/International_System_of_Units#Derived_units), do not add a suffix and assume the default from [REP-103](https://www.ros.org/reps/rep-0103.html).
1. If the unit is a multiple of a base or derived SI unit, apply a suffix according to the table below.
1. If the unit is composed of non-SI units, apply a suffix according to the table below.
Only deviate from the SI units when absolutely necessary and with justification.
| Quantity | Unit | Suffix | Notes |
|-----------------|-----------------------------|---------|---------------------------------------------------------|
| distance | meters | None | |
| | micrometers | `_um` | |
| | millimeters | `_mm` | |
| | kilometers | `_km` | |
| speed, velocity | meters / second | None | Use speed for scalar and velocity for vector quantities |
| | kilometers / hour | `_kmph` | |
| acceleration | meters / second<sup>2</sup> | None | |
| radial velocity | radians / second | None | |
| time | second | None | |
| | microsecond | `_us` | |
| | nanosecond | `_ns` | |
#### Examples
The first alternative is recommended, the second discouraged:
1. `float elapsed_time` vs `float_elapsed_time_s`
1. `float distance_travelled` vs `float distance_travelled_m`
1. `int32 time_step_ms` vs `int32 time_step`
1. `float speed_mps` vs `float speed`
### Minimal Example
```idl
struct Foo {
@verbatim (language="comment", text=
" A multiline" "\n"
" comment")
@default (value=0.0)
float bar_speed;
@verbatim (language="comment", text=
" Another multiline" "\n"
" comment")
@default (value=FALSE)
boolean has_bar_speed;
@verbatim (language="comment", text=
" Describe the time stamp")
@default (value=0)
int32 timestamp_ns;
};
```
@@ -0,0 +1,26 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_control_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/AckermannControlCommand.idl"
"msg/AckermannLateralCommand.idl"
"msg/HighLevelControlCommand.idl"
"msg/LongitudinalCommand.idl"
DEPENDENCIES
"builtin_interfaces"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,16 @@
#include "autoware_auto_control_msgs/msg/AckermannLateralCommand.idl"
#include "autoware_auto_control_msgs/msg/LongitudinalCommand.idl"
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_control_msgs {
module msg {
@verbatim (language="comment", text=
" Lateral and longitudinal control message for Ackermann-style platforms")
struct AckermannControlCommand {
builtin_interfaces::msg::Time stamp;
autoware_auto_control_msgs::msg::AckermannLateralCommand lateral;
autoware_auto_control_msgs::msg::LongitudinalCommand longitudinal;
};
};
};
@@ -0,0 +1,25 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_control_msgs {
module msg {
@verbatim (language="comment", text=
" Lateral control message for Ackermann-style platforms" "\n"
" Note regarding tires: If the platform has multiple steering tires, the commands"
" given here are for a virtual tire at the average lateral position of the steering tires.")
struct AckermannLateralCommand {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Desired angle of the steering tire in radians left (positive)"
" or right (negative) of center (0.0)")
@default (value=0.0)
float steering_tire_angle;
@verbatim (language="comment", text=
" Desired rate of change of the steering tire angle in radians per second")
@default (value=0.0)
float steering_tire_rotation_rate;
};
};
};
@@ -0,0 +1,18 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_control_msgs {
module msg {
struct HighLevelControlCommand {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" should be negative when reversed")
@default (value=0.0)
float velocity_mps;
@verbatim (language="comment", text=
" units of inverse meters")
float curvature;
};
};
};
@@ -0,0 +1,30 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_control_msgs {
module msg {
@verbatim (language="comment", text=
" Longitudinal control message for all vehicle types")
struct LongitudinalCommand {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Desired platform speed in meters per second."
" A positive value indicates movement in the positive X direction of the vehicle "
" while a negative value indicates movement in the negative X direction of the vehicle.")
@default (value=0.0)
float speed;
@verbatim (language="comment", text=
" Desired platform acceleration in meters per second squared."
" A positive value indicates acceleration while a negative value indicates deceleration.")
@default (value=0.0)
float acceleration;
@verbatim (language="comment", text=
" Desired platform jerk in meters per second cubed")
@default (value=0.0)
float jerk;
};
};
};
@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_control_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto control components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>builtin_interfaces</depend>
<depend>std_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,26 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_geometry_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Complex32.idl"
"msg/Quaternion32.idl"
"msg/RelativePositionWithCovarianceStamped.idl"
DEPENDENCIES
"geometry_msgs"
"std_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,20 @@
module autoware_auto_geometry_msgs {
module msg {
@verbatim (language="comment", text=
" Complex32.msg" "\n"
" Can be used to represent yaw angle for trajectories" "\n"
" To convert back to a yaw angle, see" "\n"
" https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles")
struct Complex32 {
@verbatim (language="comment", text=
" cos(yaw / 2)")
@default (value=1.0)
float real;
@verbatim (language="comment", text=
" sin(yaw / 2)")
@default (value=0.0)
float imag;
};
};
};
@@ -0,0 +1,19 @@
module autoware_auto_geometry_msgs {
module msg {
@verbatim (language="comment", text=
" Represents rotation, but with less precision than the message in common_interfaces")
struct Quaternion32 {
@default (value=0.0)
float x;
@default (value=0.0)
float y;
@default (value=0.0)
float z;
@default (value=1.0)
float w;
};
};
};
@@ -0,0 +1,16 @@
#include "geometry_msgs/msg/Point.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_geometry_msgs {
module msg {
@verbatim (language="comment", text=
" This message is a generalized representation of a 3D pose without"
" orientation of the origin of one frame within a child frame.")
struct RelativePositionWithCovarianceStamped {
std_msgs::msg::Header header;
string child_frame_id;
geometry_msgs::msg::Point position;
double covariance[9];
};
};
};
@@ -0,0 +1,28 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_geometry_msgs</name>
<version>1.0.0</version>
<description>Geometry related message definitions in Autoware.Auto</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>geometry_msgs</depend>
<depend>std_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,26 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_mapping_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/HADMapBin.idl"
"msg/HADMapSegment.idl"
"msg/MapPrimitive.idl"
"srv/HADMapService.idl"
DEPENDENCIES
"std_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,32 @@
#include "std_msgs/msg/Header.idl"
module autoware_auto_mapping_msgs {
module msg {
module HADMapBin_Constants {
const uint8 MAP_FORMAT_LANELET2 = 0;
};
@verbatim(language = "comment", text =
"HADMap contents in binary blob format")
struct HADMapBin
{
std_msgs::msg::Header header;
@verbatim(language = "comment", text =
"HADMap format identifier, allows supporting multiple map formats")
uint8 map_format;
@verbatim(language = "comment", text =
"Version of map format. Keep as empty string if unnecssary")
@default(value = "")
string format_version;
@verbatim(language = "comment", text =
"Version of map. Keep as empty empty if unnecessary")
@default(value = "")
string map_version;
@verbatim(language = "comment", text =
"Binary map data")
sequence < uint8 > data;
};
};
};
@@ -0,0 +1,12 @@
#include "autoware_auto_mapping_msgs/msg/MapPrimitive.idl"
module autoware_auto_mapping_msgs {
module msg {
@verbatim (language="comment", text=
" A segment of an HADMap which contains one or more MapPrimitives.")
struct HADMapSegment {
sequence<autoware_auto_mapping_msgs::msg::MapPrimitive> primitives;
int64 preferred_primitive_id;
};
};
};
@@ -0,0 +1,17 @@
#include "std_msgs/msg/Header.idl"
module autoware_auto_mapping_msgs {
module msg {
@verbatim(language = "comment", text =
"Map primitive information")
struct MapPrimitive
{
int64 id;
@verbatim(language = "comment", text =
"Type of primitive, such as lane, polygon, line.")
@default(value = "")
string primitive_type;
};
};
};
@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_mapping_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto mapping components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>std_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,39 @@
#include "autoware_auto_mapping_msgs/msg/HADMapBin.idl"
module autoware_auto_mapping_msgs {
module srv {
// enum type not working yet on ROS2 implementation of idl
// enum HADPrimitive
// {
// FullMap,
// AllPrimitives,
// DriveableGeometry,
// RegulatoryElements,
// StaticObjects
// };
module HADMapService_Request_Constants {
const uint8 FULL_MAP = 0;
const uint8 ALL_PRIMITIVES = 1;
const uint8 DRIVEABLE_GEOMETRY = 2;
const uint8 REGULATORY_ELEMENTS = 3;
const uint8 STATIC_OBJECTS = 4;
};
struct HADMapService_Request
{
sequence < uint8 > requested_primitives;
@verbatim(language = "comment", text =
"Geometric upper bound of map data requested")
sequence < double, 3 > geom_upper_bound;
@verbatim(language = "comment", text =
"Geometric upper bound of map data requested")
sequence < double, 3 > geom_lower_bound;
};
struct HADMapService_Response
{
autoware_auto_mapping_msgs::msg::HADMapBin map;
int32 answer;
};
};
};
+57
View File
@@ -0,0 +1,57 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package autoware_auto_msgs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.0.0 (2021-01-05)
------------------
* Merge branch 'BoundingBoxArray-design' into 'master'
Add design doc for bounding-box message
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!12 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/12>`_
* Working around https://github.com/ros-tooling/libstatistics_collector/issues/51.
* Fixing constants in AutonomyModeChange.
* Making AutonomyModeChange return empty.
* Merge branch '657-autonomy-service' into 'master'
Adding AutonomyModeChange service definition.
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!11 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/11>`_
* Adding velocity_mps to VehicleControlCommand.
* Merge branch '474-add-modify-trajectory-service' into 'master'
Adding ModifyTrajectory service definition.
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!10 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/10>`_
* Merge branch 'modify-plan-trajectory-action' into 'master'
modify PlanTrajectory Action to return trajectory in Result
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!9 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/9>`_
* Merge branch 'fix/plan_trajectory_action' into 'master'
fix include file and namespace of constants
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!8 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/8>`_
* Merge branch 'add-actions-dependency' into 'master'
Cleaning up package.xml and adding action_msgs dependency.
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!7 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/7>`_
* Merge branch 'add-plan-trajectory-action' into 'master'
add PlanTrajectory action
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!6 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/6>`_
* Contributors: Frederik Beaujean, Joshua Whitley, mitsudome-r
0.1.0 (2020-08-07)
------------------
* Merge branch 'add-hadmap-msgs' into 'master'
had map msgs - respect idl constant naming conventions
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!5 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/5>`_
* Merge branch 'add-hadmap-msgs' into 'master'
Add hadmap msgs
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!4 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/4>`_
* Add hadmap msgs
* Merge branch '3-convert-messages-from-rosmsg-to-idl' into 'master'
Resolve "Convert messages from ROSmsg to IDL"
Closes `#3 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/issues/3>`_
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!2 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/2>`_
* Resolve "Convert messages from ROSmsg to IDL"
* Contributors: Esteve Fernandez, Joshua Whitley, simon-t4
0.0.2 (2020-03-02)
------------------
* Merge branch '1-import-autoware_auto_msgs-from-autoware-auto' into 'master'
Resolve "Import autoware_auto_msgs from Autoware.Auto"
Closes `#1 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/issues/1>`_
See merge request `autowarefoundation/autoware.auto/autoware_auto_msgs!1 <https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/1>`_
* Initial import
* Contributors: Esteve Fernandez, Geoffrey Biggs
+16
View File
@@ -0,0 +1,16 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,67 @@
autoware_auto_msgs internal message design
=========================
[TOC]
This document is intended to track the design and rationale of messages internal to individual
components/stacks.
# Perception
This supersection tracks messages relating to the perception components of the autonomous driving
stack.
## Object Detection
This section tracks internal messages needed for the implementation of object detection stacks
that result in the emission of the `BoundingBoxArray` type as a common object list representation.
### Classical 3d object detection
This section covers the internal messages needed by a classical 3d object detection stack,
consisting of ground filtering, downsampling, clustering, and finally hull formation.
#### PointClusters
```
sensor_msgs/PointCloud2[] clusters
```
This message represents a set of point clusters as a result of object detection or clustering.
`PointCloud2` was used as a cluster can be conceived as a subset of a point cloud, and
`PointCloud2` is the standard representation for point clouds.
## Tracking
This section tracks messages internal to specific implementation of tracking stacks.
# Localization
This supersection tracks messages relating to the implementation of localization/mapping
components in the autonomous driving stack.
# Planning
This supersection tracks messages relating to the implementation of planning components in the
autonomous driving stack.
## Global Planning
This section tracks internal messages needed for the implementation of specific global planning
stacks.
## Behavior Planning
This section tracks internal messages needed for the implementation of specific behavior planning
stacks.
## Motion Planning
This section tracks internal messages needed for the implementation of specific motion planning
stacks.
## Control
This section tracks internal messages needed for the implementation of specific controller
stacks.
@@ -0,0 +1,513 @@
autoware_auto_msgs
==================
[TOC]
This document contains the intended sources, recipients and rationale for each of the custom
message types.
# Helper Types
The following are helper types that are composed into messages that software components use.
## Complex32
```
float32 real
float32 imag
```
## BoundingBox
```
geometry_msgs/Point32 centroid
geometry_msgs/Point32 size
geometry_msgs/Quaternion orientation
geometry_msgs/Point32[4] corners
float32 value
uint32 label
```
See the [design document](bounding-box-design.md) for further details.
## BoundingBoxArray
```
std_msgs/Header header
BoundingBox[256] boxes
uint32 size
uint32 CAPACITY=256
```
<!-- # TODO refactor and add rationale -->
## DiagnosticHeader
```
string name
builtin_interfaces/Time data_stamp
builtin_interfaces/Time computation_start
builtin_interfaces/Duration runtime
uint32 iterations
```
## TrajectoryPoint
```
builtin_interfaces/Duration time_from_start
float32 x
float32 y
Complex32 heading
float32 longitudinal_velocity_mps 0.0
float32 lateral_velocity_mps 0.0
float32 acceleration_mps2
float32 heading_rate_rps
float32 front_wheel_angle_rad 0.0
float32 rear_wheel_angle_rad 0.0
```
> `acceleration_mps2` increases/decreases based on absolute vehicle motion and does not consider vehicle direction (forward/backward)
And the heading field has the following form:
A zero heading corresponds to the positive x direction in the given coordinate frame.
**Default Values**: All trajectory point and trajectory fields should default to 0
**Default Values**: All complex numbers should default to the pair (1, 0), which corresponds to a
zero heading.
**Extensions**: In the future, this message may include higher derivative information.
**Rationale**: Trajectory points mirror, but are not the same as a standard JointTrajectory message.
This is because the standard message allows room for ambiguities whereas this message does not.
**Rationale**: Higher derivative information (e.g. acceleration, heading rate) is available to
provide a more expressive language for controllers and trajectory planners. If the information
is not needed, a value of zero is provided, which is semantically consistent for controllers and
motion planners
**Rationale**: Complex numbers are used to represent heading rather than an angle because it reduces
ambiguities between angles, and angle distances. In addition, it conveniently represents a
precomputed sine and cosine values, obviating the need for additional computations.
For more details, see [Controller design](@ref controller-design)
# Interface Messages
## Control Diagnostic
```
DiagnosticHeader diag_header
bool new_trajectory
string trajectory_source
string pose_source
float32 lateral_error_m
float32 longitudinal_error_m
float32 velocity_error_mps
float32 acceleration_error_mps2
float32 yaw_error_rad
float32 yaw_rate_error_rps
```
**Source**: Controller
**Recipient(s)**:
**Rationale**: Diagnostic information is helpful to detect if a fault occurred, or some incorrect
behavior leading up to a fault. It can also be used for infotainment applications.
For more details, see [Controller design](@ref controller-design)
## Trajectory
```
std_msgs/Header header
TrajectoryPoint[<=100] points
```
**Source**: Motion planner
**Recipient(s)**: Controller
**Rationale**: A bounded number of points is provided since a new trajectory should be provided
at a regular rate. Bounded data structures also imply more deterministic communication times
due to having a bounded size.
For more details, see [Controller design](@ref controller-design)
### RawControlCommand
This message type is defined as follows:
```
builtin_interfaces/Time stamp
uint32 throttle
uint32 brake
int32 front_steer
int32 rear_steer
```
This type is intended to be used when direct control of the vehicle hardware is required. As such,
no assumptions about units are made. It is the responsibility of the system integrator to ensure
that the values used are appropriate for the vehicle platform.
**Source**: Controller
**Recipient(s)**: Vehicle Interface
**Default Values**: The default value for all fields is 0
**Rationale**: A time stamp field is provided because a control command should be generated in
response to the input of a vehicle kinematic state. Retaining the time of the triggering data
should aid with diagnostics and traceability.
**Rationale**: The rear wheel angle is also provided to enable support for rear drive vehicles,
such as forklifts.
**Rationale**: A frame is not provided since it is implied that it is fixed to the vehicle frame.
**Rationale**: Throttle and brake are separated as they are fundamentally controlled by two
different actuators
**Rationale**: This is intended to be compatible with using the triggers of a gamepad as a first
pass for vehicle platform validation.
**Rationale**: Integer values are used to be more compatible with discrete, or byte-level
representation that is more common with CAN interfaces.
**Rationale**: Units are not provided since byte-level representations are generally platform-
specific.
For more details see [vehicle interface design]().
### HighLevelControlCommand
This message type is defined as follows:
```
builtin_interfaces/Time stamp
# should be negative when reversed
float32 velocity_mps 0.0
float32 curvature
```
This type is intended to be used as an interface when only simple control is required, and thus
abstracts away more direct control of the vehicle.
**Source**: Controller
**Recipient(s)**: Vehicle Interface
**Default Values**: The default value for all fields is 0
**Rationale**: A time stamp field is provided because a control command should be generated in
response to the input of a vehicle kinematic state. Retaining the time of the triggering data
should aid with diagnostics and traceability.
**Rationale**: A frame is not provided since it is implied that it is fixed to the vehicle frame.
**Rationale**: Curvature is used as a control target as it does not require any vehicle-specific
information. This is inspired by the AutonomousStuff Low Level Controller
**Rationale**: Velocity is used as a longitudinal control target to allow the vehicle to minimally
follow a geometric reference path.
For more details see [vehicle interface design]().
## Vehicle Control Command
```
builtin_interfaces/Time stamp
float32 long_accel_mps2
float32 front_wheel_angle_rad
float32 rear_wheel_angle_rad
```
This message type is intended to provide a proxy for a foot on the accelerator and brake pedal,
and a pair of hands on the steering wheel, while also providing a convenient representation
for controller developers.
These wheel angles are counter-clockwise positive, where 0 corresponds to a neutral, or
forward-facing orientation.
**Source**: Controller
**Recipient(s)**: Vehicle Interface
**Default Values**: The default value for all fields is 0
**Rationale**: A time stamp field is provided because a control command should be generated in
response to the input of a vehicle kinematic state. Retaining the time of the triggering data
should aid with diagnostics and traceability.
**Rationale**: A single acceleration field is provided because controllers typically plan a
longitudinal acceleration and turning angle for the rigid body. Braking is baked into this single
command for simplicity of controller development, and because it is generally not expected for both
the brake to be depressed and the accelerator at the same time.
**Rationale**: Wheel steering angles are provided since it allows the controller to only require a
simplified view of the vehicle platform, such as knowing the wheelbase length. Depending on the
implementation of a drive-by-wire interface, producing a given wheel angle may require knowledge
of the mapping between steering wheel angle to wheel angle.
**Rationale**: The rear wheel angle is also provided to enable support for rear drive vehicles,
such as forklifts.
**Rational**: A frame is not provided since it is implied that it is fixed to the vehicle frame.
For more details, see [Controller design](@ref controller-design)
## Vehicle Kinematic State
**Source**: Vehicle interface
**Recipient(s)**: Behavior Planner
```
std_msgs/Header header
TrajectoryPoint state
geometry_msgs/Transform delta
```
The `TrajectoryPoint::time_from_start` field should also be filled with the time difference between
the current state and the previous state message.
The position fields of the `TrajectoryPoint` member should contain the position of the ego vehicle
with respect to a fixed frame, if available. If the frame is a dynamic frame (e.g. `base_link`),
then this position field should be taken as unavailable or invalid. The further kinematics of this
member should always be available, and populated according to the appropriate coordinate frame,
making the additional assumption that the coordinate frame is static.
The delta member is the transform of the message should represent the positional update of the
ego vehicle's coordinate frame relative to it's last position and orientation.
**Source**: Vehicle State Estimator
**Recipient(s)**: Planning stack (Route planner, Behavior Planner, Motion Planner, Controller),
Tracker
**Default Values**: The trajectory point should be appropriately default initialized
**Default Values**: The delta transform field should have zero translation and the unit quaternion
by default.
**Extensions**: State and transform uncertainty may be added as variances or covariance matrices.
This may be necessary for probabilistic algorithms (e.g. robust MPC)
**Rationale**: An underlying trajectory point is used because kinematic information may be needed
by controllers. Further, representing the vehicle state in a manner that mirrors the trajectory
fits with the semantic purpose of a controller: matching the current state to a state sequence
**Rationale**: A transform relative to the previous position and orientation of the ego vehicle is
provided because while absolute position may not always be available with accuracy, this relative
transform should be available with some degree of accuracy (e.g. via IMU information, odometry
information, etc.). The availability of this information allows for planning and tracking within a
local coordinate frame. For example, in a level 3 highway driving use case, a trajectory may be
rooted at the ego vehicle's position at some time stamp. The accumulation of these relative
transforms would allow for a controller to properly follow the trajectory.
**Rationale**: The kinematics are populated with a fixed frame assumption to simplify the updates
and usage of this field.
For more details, see [Controller design](@ref controller-design)
## Vehicle Odometry
```
builtin_interfaces/Time stamp
float32 velocity_mps
float32 front_wheel_angle_rad
float32 rear_wheel_angle_rad
```
This message reports the kinematic state of the vehicle as the vehicle itself reports. The intended
use case for this message could be in motion planning for initial conditions, or dead reckoning.
**Source**: Vehicle interface
**Recipient(s)**: Vehicle State Estimator
**Default Values**: The default value for this message should be 0 in all fields.
**Rationale**: This message is separate from the vehicle state report since they are typically for
distinct use cases (e.g. behavior planning vs dead reckoning)
**Rationale**: A vehicle is expected to have encoders which provide velocity, and steering angle.
Acceleration and other fields may not be available on all vehicle platforms.
**Rationale**: A stamp is expected here because this is timely information. In this sense, the
vehicle interface is acting as a sensor driver.
**Rationale**: A frame id is not provided because these are assumed to be fixed to the vehicle
frame, and heading information is not available.
## Vehicle State Command
```
builtin_interfaces/Time stamp
uint8 blinker
uint8 headlight
uint8 wiper
uint8 gear
uint8 mode
bool hand_brake
bool horn
bool autonomous
### Definitions
# Blinker
uint8 BLINKER_NO_COMMAND = 0;
uint8 BLINKER_OFF = 1;
uint8 BLINKER_LEFT = 2;
uint8 BLINKER_RIGHT = 3;
uint8 BLINKER_HAZARD = 4;
# Headlight
uint8 HEADLIGHT_NO_COMMAND = 0;
uint8 HEADLIGHT_OFF = 1;
uint8 HEADLIGHT_ON = 2;
uint8 HEADLIGHT_HIGH = 3;
# Wiper
uint8 WIPER_NO_COMMAND = 0;
uint8 WIPER_OFF = 1;
uint8 WIPER_LOW = 2;
uint8 WIPER_HIGH = 3;
uint8 WIPER_CLEAN = 4;
# Gear
uint8 GEAR_NO_COMMAND = 0
uint8 GEAR_DRIVE = 1
uint8 GEAR_REVERSE = 2
uint8 GEAR_PARK = 3
uint8 GEAR_LOW = 4
uint8 GEAR_NEUTRAL = 5
# Mode
uint8 MODE_NO_COMMAND = 0;
uint8 MODE_AUTONOMOUS = 1;
uint8 MODE_MANUAL = 2;
```
This message is intended to control the remainder of the vehicle state, e.g. those not required for
minimal collision-free driving.
**Source**: Behavior Planner
**Recipient(s)**: Vehicle interface
**Default Values**: The default value for all fields should be zero.
**Rationale**: Hazard lights superseded a left/right signal, and as such are an exclusive state
**Rationale**: Cleaning might be necessary to ensure adequate operation of sensors mounted behind
the wind shield
**Rationale**: A horn might be required to signal to other drivers
**Rationale**: Autonomous is a flag because this is a command message: true requests a transition
to autonomous, false requests a disengagement to manual.
**Rationale**: While additional states are possible for other fields (e.g. headlights, wipers,
gears, etc.), this message only prescribes the minimal set of states that most or all vehicles
can satisfy.
**Rationale**: Since commands here represent a state transition, a command of NONE denotion "no
state transition" is also valid
## Vehicle State Report
```
builtin_interfaces/Time stamp
uint8 fuel # 0 to 100
uint8 blinker
uint8 headlight
uint8 wiper
uint8 gear
uint8 mode
bool hand_brake
bool horn
### Definitions
# Blinker
uint8 BLINKER_OFF = 1
uint8 BLINKER_LEFT = 2
uint8 BLINKER_RIGHT = 3
uint8 BLINKER_HAZARD = 4
# Headlight
uint8 HEADLIGHT_OFF = 1
uint8 HEADLIGHT_ON = 2
uint8 HEADLIGHT_HIGH = 3
# Wiper
uint8 WIPER_OFF = 1
uint8 WIPER_LOW = 2
uint8 WIPER_HIGH = 3
uint8 WIPER_CLEAN = 4
# Gear
uint8 GEAR_DRIVE = 1
uint8 GEAR_REVERSE = 2
uint8 GEAR_PARK = 3
uint8 GEAR_LOW = 4
uint8 GEAR_NEUTRAL = 5
# Autonomous
uint8 MODE_AUTONOMOUS = 1
uint8 MODE_MANUAL = 2
uint8 MODE_DISENGAGED = 3
uint8 MODE_NOT_READY = 4
```
**Source**: Vehicle interface
**Recipient(s)**: Behavior Planner
**Default Value**: N/A. All fields should be populatable by the vehicle interface.
**Rationale**: A discrete fuel range is provided as finer granularity is likely unnecessary.
**Rationale**: A simple state machine is provided to ensure that disambiguate between intentionally
manual, and two modes of unintentionally being in manual mode: due to preconditions not being met,
or due to some failure of the autonomous driving stack.
**Rationale**: Constants are kept the same as VehicleStateCommand to prevent subtle bugs from being
introduced. The constant 0 is reserved for NO_COMMAND in VehicleStateCommand.
# References
- AutowareAuto#62
## Related Message Types
### ROS
- [JointTrajectory.msg](https://github.com/ros2/common_interfaces/blob/master/trajectory_msgs/msg/JointTrajectoryPoint.msg)
- [PointStamped](http://docs.ros.org/lunar/api/geometry_msgs/html/msg/PointStamped.html)
- [PoseStamped](http://docs.ros.org/lunar/api/geometry_msgs/html/msg/PoseStamped.html)
- [TransformStamped](http://docs.ros.org/melodic/api/geometry_msgs/html/msg/TransformStamped.html)
- [NavSatFix](http://docs.ros.org/melodic/api/sensor_msgs/html/msg/NavSatFix.html)
### Autoware.AI
- [AccelCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/AccelCmd.msg)
- [BrakeCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/BrakeCmd.msg)
- [ControlCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/ControlCommand.msg)
- [IndicatorCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/IndicatorCmd.msg)
- [LampCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/LampCmd.msg)
- [RemoteCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/RemoteCmd.msg)
- [SteerCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/SteerCmd.msg)
- [VehicleCmd](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/VehicleCmd.msg)
- [VehicleStatus](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/VehicleStatus.msg)
- [Waypoint](https://github.com/CPFL/Autoware/blob/master/ros/src/msgs/autoware_msgs/msg/Waypoint.msg)
### Apollo
Controller/Interface Messages
- [VehicleSignal](https://github.com/ApolloAuto/apollo/blob/fb12723bd6dcba88ecccb6123ea850da1e050171/modules/common/proto/vehicle_signal.proto)
- [Lexus](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/canbus/proto/lexus.proto)
- [DriveState](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/common/proto/drive_state.proto)
- [VehicleState](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/common/vehicle_state/proto/vehicle_state.proto)
- [ControlCmd](https://github.com/ApolloAuto/apollo/blob/3d6f86e21a3c3ac43cf08423d4c3f92bc63ecac9/modules/control/proto/control_cmd.proto)
Configuration Messages
- [LonControllerConf](https://github.com/ApolloAuto/apollo/blob/3d6f86e21a3c3ac43cf08423d4c3f92bc63ecac9/modules/control/proto/lon_controller_conf.proto)
- [LatControllerConf](https://github.com/ApolloAuto/apollo/blob/e9156ced04a8f0e372c781d803fd43428ab6c497/modules/control/proto/lat_controller_conf.proto)
- [ControlConf](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/control/proto/control_conf.proto)
- [MPCControllerConf](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/control/proto/mpc_controller_conf.proto)
Algorithm Status Messages
- [PlanningStatus](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/planning/proto/planning_status.proto)
- [LocalizationStatus](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/localization/proto/localization_status.proto)
- [PlanningStats](https://github.com/ApolloAuto/apollo/blob/51651b9105e55c14e65cc2bd349b479e55fffa36/modules/planning/proto/planning_stats.proto)
@@ -0,0 +1,224 @@
BoundingBox message design {#bounding-box-design}
==========================
# Motivation
In order to ensure a modular system, it's assumed that object detectors are architecturally
delineated. In other words, software components which can produce instantaneous observations of
objects are delineated from other components in the autonomous driving stack.
This assumption or decomposition allows us to interchangeably use various forms of object detectors
with various forms of multi-object tracking (by assignment) algorithms. If a tighter coupling
between object detection and tracking is required, specialized combined stacks can be developed.
In order to facilitate the isolation of object detectors as a module, common messages types are
defined as an interface or output of the object detectors to other components.
# Use cases
The instantaneous detection of objects primarily has three use cases:
1. Collision detection (as a part of planning)
2. Tracking (which may eventually be an input to planning)
3. Region of Interest identification (as a preprocessing step to localization/mapping)
In addition, there is the implied use case that this message representation is used on a safety-
critical system.
# Requirements
## Safety-critical systems
Safety-critical systems require real-time and static memory applications. As such, this implies
that the representation of the message must be upper bounded in size.
For the purpose of performance, an optional requirement is added to message definitions such that
the maximum size is no more than `64kB`, which is also the maximum size of a single UDP packet. This
requirement ensures that latency is kept to a minimum if interprocess communication is necessary at
the interface of the object detection algorithms.
## Collision detection
In order to detect collisions, the representation must have:
1. A position at least in 2-space (with the assumption that the object is on the same plane as the
ego)
2. A bounding volume representation which fully contains the detected object
3. A way to ensure the object representation is in a consistent coordinate frame with respect to the
ego
4. Optionally uncertainty representation of the above parameters
## Tracking
The purpose of tracking is to maintain a consistent identity of a detected object over time.
In addition, tracking may also produce state estimates over time, such as kinematic estimates,
shape estimates, or label estimates.
To satisfy the fundamental requirement of tracking, the message representation must provide features
that can be used for assignment, or association of current observations with previous observations.
Features that can satisfy this requirement include:
1. Position information
2. Shape information (e.g. convex hull, bounding ellipse/box, shape features, etc.)
3. Object information (e.g. color/intensity distribution, classification label, etc.)
4. Other sensor information (e.g. velocity, heading, turn rate (via FMCW sensors))
5. Optionally uncertainty information for the above parameters
Classically, position information is the most important association feature, assuming a continuous
world and a relatively high sampling frequency.
The other features can be used to motivate various state estimates in the tracking stack.
## Region of interest detection
An object detector can also be used to identify regions of interest for various other stacks, such
as feature-based localization/mapping, or scene understanding (sign/scenario detection).
The localization/mapping use case is largely similar to the tracking use case insofar as it requires
assignment or association of features. In contrast, scene understanding requires an identification
of the relevant objects and their position in a space that is compatible with the ego frame.
As such, the features needed to satisfy this use case are similar to that of the tracking use case:
1. Position information
2. Shape/object information
3. Optionally uncertainty information
# Message definition
Based on the requirements laid out, some assumptions and simplifications can be made, and a message
type can be defined.
If any of the assumptions and simplifications must be broken for the proper operation of the
algorithm, then the choice of algorithm should be reconsidered, or a parallel construct which
encapsulates multiple software components should be made.
In the case when a stack cannot populate certain fields of the interface, the field should be in
an identifiably non-normal state, such as zero or NaN.
## Safety critical requirements
To satisfy the minimal latency requirement, the representation must be bounded in size to `64kB`.
If it's additionally assumed that `1kB` is used for secondary representation and there are
piggy-backed submessages in the communication sublayer, the maximum representation size is
`63kB`.
Next, it's assumed that some maximum number of objects that are detected instantaneously. Based on
current observations of Apex.AI urban driving use cases, typically 50-70 objects are observed per
scene. Applying a healthy safety factor gives a maximum object bound of 256 objects per frame.
These two assumptions combined lead us to have a maximum representation size of `250B`.
## Position requirements
Minimally, a 3D position is used to satisfy the position requirement inherent in all use cases. A 3D
position is used to be more general, and apply to other stacks, such as a vision/camera-based stack.
To satisfy the compatibility of representational spaces, it's assumed that all observations are made
in a common frame. This frame can then be represented by a string in the aggregate object type.
It is assumed that it is the responsibility of the consuming algorithm to have and transform the
position space into the correct coordinate frame given this information.
## Shape requirements
Next, the shape of the object is represented as a bounding box in 3 interdependent ways:
- A quaternion for orientation
- A 3D size parameter
- Four 3D positions for the corners of the bounding box
A bounding box representation was used because many objects in the autonomous driving use case
are approximately box-shaped. In addition, many efficient algorithms exist in both the 2D and 3D
case to compute bounding boxes. Finally, bounding boxes are convenient, close-formed representations
of objects, as opposed to a convex hull which can be potentially unbounded in representation size.
A quaternion is used to represent orientation. An oriented bounding box is used as opposed to
axis-aligned bounding boxes because it can better represent and fit to objects. A quaternion
is used to represent orientation in the SO(3) space because it is continuously varying without
singularities. In addition, it can be used to efficiently calculate sine and cosine values.
Finally, the size and corners of the bounding box is represented. While the two
together represent redundant information, both parameters are byproducts of the bounding box
computation process, and communicating both forms of information downstream can reduce the
computational burden and repeated work of algorithms downstream.
For example, size can be used as a coarse collision-checking step, whereas the corners are used
for fine-grained collision detection. Similarly, the size of the bounding may be treated as direct
extent observations in the tracking case, whereas the corners may be treated as proxy observations
of the centroid.
## Object/Other requirements
Of all the object features proposed, only a classification label is bounded in representation size
(assuming a finite set of classes). While the other features could be bounded, they would be
severely limited in their representational capabilities due to the size limitations.
As such, only a classification label is provided with the current form:
`vehicle_label` is an 8-bit integer depicting the classification label of the bounding box. It
can take any of the following default values:
```
NO_LABEL=0
CAR=1
PEDESTRIAN=2
CYCLIST=3
MOTORCYCLE=4
```
The `signal_label` field contains the back signal state of the car and can take any of the following
default values:
```
NO_SIGNAL=0
LEFT_SIGNAL=1
RIGHT_SIGNAL=2
BRAKE=3
```
Next, additional kinematic fields can potentially be populated at minimal size cost. These include
velocity, heading, and heading rate, assuming a FMCW/doppler-effect sensor is available. The
inclusion of such fields can greatly improve the performance of tracking, or in some cases remove
the necessity of tracking (i.e. predictive collision detection).
## Uncertainty requirements
While uncertainty representation is not a strict requirement, the usage of uncertainty can greatly
improve the performance of downstream algorithms, both from the perspective of accuracy, and safety.
Representing the full probabilistic state of the object is difficult due to size constraints,
as representing an 8-state covariance matrix would overrun the capacity, and
similarly representing the full classification distribution is potentially unbounded in size.
As a compromise, several modeling simplifications and assumptions can be made for the bonus
representation of uncertainty.
First, it can be assumed that the uncertainty of state variables are uncorrelated, implying all
off-diagonal elements of the full covariance matrix are zero, and thus need not be represented.
Second, the coarse modeling assumption of a uniformly distributed class assignment residual can
be used. As a result, class uncertainty can be represented with a single value.
# Future extensions
The currently proposed representation for bounding boxes takes up approximately `150B` of the total
size budget of `230B`. This leaves room for up to 18 floating point values. These could be used to
cover the other optional requirements as a vector of floating points, with an optional ID denoting
the intended interpretation.
# Related issues
- #3540: Update bounding box, add use cases
- #4069: Revise new articles for the 0.12.0 release
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<exec_depend>autoware_auto_control_msgs</exec_depend>
<exec_depend>autoware_auto_geometry_msgs</exec_depend>
<exec_depend>autoware_auto_mapping_msgs</exec_depend>
<exec_depend>autoware_auto_perception_msgs</exec_depend>
<exec_depend>autoware_auto_planning_msgs</exec_depend>
<exec_depend>autoware_auto_system_msgs</exec_depend>
<exec_depend>autoware_auto_vehicle_msgs</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,52 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_perception_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/BoundingBox.idl"
"msg/BoundingBoxArray.idl"
"msg/ClassifiedRoi.idl"
"msg/ClassifiedRoiArray.idl"
"msg/DetectedObject.idl"
"msg/DetectedObjectKinematics.idl"
"msg/DetectedObjects.idl"
"msg/LookingTrafficSignal.idl"
"msg/ObjectClassification.idl"
"msg/PointClusters.idl"
"msg/PointXYZIF.idl"
"msg/PredictedObject.idl"
"msg/PredictedObjectKinematics.idl"
"msg/PredictedObjects.idl"
"msg/PredictedPath.idl"
"msg/Shape.idl"
"msg/TrackedObject.idl"
"msg/TrackedObjectKinematics.idl"
"msg/TrackedObjects.idl"
"msg/TrafficLight.idl"
"msg/TrafficLightRoi.idl"
"msg/TrafficLightRoiArray.idl"
"msg/TrafficSignal.idl"
"msg/TrafficSignalArray.idl"
"msg/TrafficSignalStamped.idl"
"msg/TrafficSignalWithJudge.idl"
DEPENDENCIES
"autoware_auto_geometry_msgs"
"geometry_msgs"
"sensor_msgs"
"std_msgs"
"unique_identifier_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,71 @@
#include "autoware_auto_geometry_msgs/msg/Quaternion32.idl"
#include "geometry_msgs/msg/Point32.idl"
module autoware_auto_perception_msgs {
module msg {
typedef geometry_msgs::msg::Point32 geometry_msgs__msg__Point32;
typedef geometry_msgs__msg__Point32 geometry_msgs__msg__Point32__4[4];
typedef float float__8[8];
module BoundingBox_Constants {
const uint8 NO_LABEL = 0;
const uint8 CAR = 1;
const uint8 PEDESTRIAN = 2;
const uint8 CYCLIST = 3;
const uint8 MOTORCYCLE = 4;
const uint8 NO_SIGNAL = 0;
const uint8 LEFT_SIGNAL = 1;
const uint8 RIGHT_SIGNAL = 2;
const uint8 BRAKE = 3;
const uint32 POSE_X = 0;
const uint32 POSE_Y = 1;
const uint32 VELOCITY = 2;
const uint32 HEADING = 3;
const uint32 TURN_RATE = 4;
const uint32 SIZE_X = 5;
const uint32 SIZE_Y = 6;
const uint32 ACCELERATION = 7;
};
@verbatim (language="comment", text=
" Oriented bounding box representation")
struct BoundingBox {
geometry_msgs::msg::Point32 centroid;
geometry_msgs::msg::Point32 size;
autoware_auto_geometry_msgs::msg::Quaternion32 orientation;
@default (value=0.0)
float velocity;
@default (value=0.0)
float heading;
@default (value=0.0)
float heading_rate;
geometry_msgs__msg__Point32__4 corners;
float__8 variance;
@verbatim (language="comment", text=
" can hold arbitrary value, e.g. likelihood, area, perimeter")
float value;
@verbatim (language="comment", text=
" can hold one of the vehicle constants defined below" "\n"
" NO_LABEL as default value")
@default (value=0)
uint8 vehicle_label;
@verbatim (language="comment", text=
" can hold one of the signal constants defined below" "\n"
" NO_SIGNAL as default value")
@default (value=0)
uint8 signal_label;
@verbatim (language="comment", text=
" Likelihood of vehicle label")
float class_likelihood;
};
};
};
@@ -0,0 +1,17 @@
#include "autoware_auto_perception_msgs/msg/BoundingBox.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
module BoundingBoxArray_Constants {
const uint32 CAPACITY = 256;
};
@verbatim (language="comment", text=
" Message for a full set of bounding boxes")
struct BoundingBoxArray {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::BoundingBox, 256> boxes;
};
};
};
@@ -0,0 +1,15 @@
#include "geometry_msgs/msg/Polygon.idl"
#include "autoware_auto_perception_msgs/msg/ObjectClassification.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text="A region of interest in an image with class information.")
struct ClassifiedRoi {
@verbatim (language="comment", text="A vector of possible classifications of this object.")
sequence<autoware_auto_perception_msgs::msg::ObjectClassification> classifications;
@verbatim (language="comment", text="A 2D polygon describing the outline of an object in image coordinates.")
geometry_msgs::msg::Polygon polygon;
};
};
};
@@ -0,0 +1,14 @@
#include "autoware_auto_perception_msgs/msg/ClassifiedRoi.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" Message for a full set of classified ROIs")
struct ClassifiedRoiArray {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::ClassifiedRoi> rois;
};
};
};
@@ -0,0 +1,16 @@
#include "autoware_auto_perception_msgs/msg/DetectedObjectKinematics.idl"
#include "autoware_auto_perception_msgs/msg/ObjectClassification.idl"
#include "autoware_auto_perception_msgs/msg/Shape.idl"
module autoware_auto_perception_msgs {
module msg {
struct DetectedObject {
@range (min=0.0, max=1.0)
float existence_probability;
sequence<autoware_auto_perception_msgs::msg::ObjectClassification> classification;
autoware_auto_perception_msgs::msg::DetectedObjectKinematics kinematics;
autoware_auto_perception_msgs::msg::Shape shape;
};
};
};
@@ -0,0 +1,42 @@
#include "geometry_msgs/msg/Point.idl"
#include "geometry_msgs/msg/PoseWithCovariance.idl"
#include "geometry_msgs/msg/Quaternion.idl"
#include "geometry_msgs/msg/TwistWithCovariance.idl"
module autoware_auto_perception_msgs {
module msg {
module DetectedObjectKinematics_Constants {
/**
* Only position is available, orientation is empty. Note that the shape can be an oriented
* bounding box but the direction the object is facing is unknown, in which case
* orientation should be empty.
*/
const uint8 UNAVAILABLE = 0;
/**
* The orientation is determined only up to a sign flip. For instance, assume that cars are
* longer than they are wide, and the perception pipeline can accurately estimate the
* dimensions of a car. It should set the orientation to coincide with the major axis, with
* the sign chosen arbitrarily, and use this tag to signify that the orientation could
* point to the front or the back.
*/
const uint8 SIGN_UNKNOWN = 1;
/**
* The full orientation is available. Use e.g. for machine-learning models that can
* differentiate between the front and back of a vehicle.
*/
const uint8 AVAILABLE = 2;
};
struct DetectedObjectKinematics {
geometry_msgs::msg::PoseWithCovariance pose_with_covariance;
boolean has_position_covariance;
uint8 orientation_availability;
geometry_msgs::msg::TwistWithCovariance twist_with_covariance;
boolean has_twist;
boolean has_twist_covariance;
};
};
};
@@ -0,0 +1,13 @@
#include "autoware_auto_perception_msgs/msg/DetectedObject.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" This is the output of object detection and the input to tracking.")
struct DetectedObjects {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::DetectedObject> objects;
};
};
};
@@ -0,0 +1,14 @@
#include "autoware_auto_perception_msgs/msg/TrafficSignalWithJudge.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
struct LookingTrafficSignal {
std_msgs::msg::Header header;
boolean is_module_running;
autoware_auto_perception_msgs::msg::TrafficSignalWithJudge perception;
autoware_auto_perception_msgs::msg::TrafficSignalWithJudge external;
autoware_auto_perception_msgs::msg::TrafficSignalWithJudge result;
};
};
};
@@ -0,0 +1,24 @@
module autoware_auto_perception_msgs {
module msg {
module ObjectClassification_Constants {
const uint8 UNKNOWN = 0;
const uint8 CAR = 1;
const uint8 TRUCK = 2;
const uint8 BUS = 3;
const uint8 TRAILER = 4;
const uint8 MOTORCYCLE = 5;
const uint8 BICYCLE = 6;
const uint8 PEDESTRIAN = 7;
};
struct ObjectClassification {
@verbatim (language="comment", text=
" Valid values for the label field are provided in"
" ObjectClassification_Constants.")
uint8 label;
@range (min=0.0, max=1.0)
float probability;
};
};
};
@@ -0,0 +1,18 @@
#include "autoware_auto_perception_msgs/msg/PointXYZIF.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" Represent the clusters" "\n"
" The cluster 0 is from point 0 to point cluster_boundary[0] - 1." "\n"
" Cluster i would be from point cluster_boundary[i - 1] to cluster_boundary[i] - 1, and so on")
struct PointClusters {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::PointXYZIF> points;
sequence<uint32> cluster_boundary;
};
};
};
@@ -0,0 +1,20 @@
module autoware_auto_perception_msgs {
module msg {
module PointXYZIF_Constants {
const uint16 END_OF_SCAN_ID = 65535;
};
@verbatim (language="comment", text=
" This message is meant to mirror autoware::common::types::PointXYZIF")
struct PointXYZIF {
float x;
float y;
float z;
float intensity;
uint16 id;
};
};
};
@@ -0,0 +1,20 @@
#include "autoware_auto_perception_msgs/msg/ObjectClassification.idl"
#include "autoware_auto_perception_msgs/msg/Shape.idl"
#include "autoware_auto_perception_msgs/msg/PredictedObjectKinematics.idl"
#include "unique_identifier_msgs/msg/UUID.idl"
module autoware_auto_perception_msgs {
module msg {
struct PredictedObject {
unique_identifier_msgs::msg::UUID object_id;
@range (min=0.0, max=1.0)
float existence_probability;
sequence<autoware_auto_perception_msgs::msg::ObjectClassification> classification;
autoware_auto_perception_msgs::msg::PredictedObjectKinematics kinematics;
autoware_auto_perception_msgs::msg::Shape shape;
};
};
};
@@ -0,0 +1,18 @@
#include "autoware_auto_perception_msgs/msg/PredictedPath.idl"
#include "geometry_msgs/msg/AccelWithCovariance.idl"
#include "geometry_msgs/msg/PoseWithCovariance.idl"
#include "geometry_msgs/msg/TwistWithCovariance.idl"
module autoware_auto_perception_msgs {
module msg {
struct PredictedObjectKinematics {
geometry_msgs::msg::PoseWithCovariance initial_pose_with_covariance;
geometry_msgs::msg::TwistWithCovariance initial_twist_with_covariance;
geometry_msgs::msg::AccelWithCovariance initial_acceleration_with_covariance;
sequence<autoware_auto_perception_msgs::msg::PredictedPath, 100> predicted_paths;
};
};
};
@@ -0,0 +1,13 @@
#include "autoware_auto_perception_msgs/msg/PredictedObject.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" This is the output of object prediction.")
struct PredictedObjects {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::PredictedObject> objects;
};
};
};
@@ -0,0 +1,15 @@
#include "builtin_interfaces/msg/Duration.idl"
#include "geometry_msgs/msg/Pose.idl"
module autoware_auto_perception_msgs {
module msg {
struct PredictedPath {
sequence<geometry_msgs::msg::Pose, 100> path;
@verbatim (language="comment", text=
" The time_step field defines the interval between consecutive pose predictions in the path array.")
builtin_interfaces::msg::Duration time_step;
float confidence;
};
};
};
@@ -0,0 +1,27 @@
#include "geometry_msgs/msg/Polygon.idl"
module autoware_auto_perception_msgs {
module msg {
module Shape_Constants {
const uint8 BOUNDING_BOX=0;
const uint8 CYLINDER=1;
const uint8 POLYGON=2;
};
struct Shape {
@verbatim (language="comment", text=
" Type of the shape")
uint8 type;
@verbatim (language="comment", text=
" The contour of the shape (POLYGON)")
geometry_msgs::msg::Polygon footprint;
@verbatim (language="comment", text=
" x: the length of the object (BOUNDING_BOX) or diameter (CYLINDER)"
" y: the width of the object (BOUNDING_BOX)"
" z: the overall height of the object")
geometry_msgs::msg::Vector3 dimensions;
};
};
};
@@ -0,0 +1,20 @@
#include "autoware_auto_perception_msgs/msg/ObjectClassification.idl"
#include "autoware_auto_perception_msgs/msg/Shape.idl"
#include "autoware_auto_perception_msgs/msg/TrackedObjectKinematics.idl"
#include "unique_identifier_msgs/msg/UUID.idl"
module autoware_auto_perception_msgs {
module msg {
struct TrackedObject {
unique_identifier_msgs::msg::UUID object_id;
@range (min=0.0, max=1.0)
float existence_probability;
sequence<autoware_auto_perception_msgs::msg::ObjectClassification> classification;
autoware_auto_perception_msgs::msg::TrackedObjectKinematics kinematics;
autoware_auto_perception_msgs::msg::Shape shape;
};
};
};
@@ -0,0 +1,46 @@
#include "geometry_msgs/msg/AccelWithCovariance.idl"
#include "geometry_msgs/msg/Point.idl"
#include "geometry_msgs/msg/PoseWithCovariance.idl"
#include "geometry_msgs/msg/Quaternion.idl"
#include "geometry_msgs/msg/TwistWithCovariance.idl"
module autoware_auto_perception_msgs {
module msg {
module TrackedObjectKinematics_Constants {
/**
* Only position is available, orientation is empty. Note that the shape can be an oriented
* bounding box but the direction the object is facing is unknown, in which case
* orientation should be empty.
*/
const uint8 UNAVAILABLE = 0;
/**
* The orientation is determined only up to a sign flip. For instance, assume that cars are
* longer than they are wide, and the perception pipeline can accurately estimate the
* dimensions of a car. It should set the orientation to coincide with the major axis, with
* the sign chosen arbitrarily, and use this tag to signify that the orientation could
* point to the front or the back.
*/
const uint8 SIGN_UNKNOWN = 1;
/**
* The full orientation is available. Use e.g. for machine-learning models that can
* differentiate between the front and back of a vehicle.
*/
const uint8 AVAILABLE = 2;
};
struct TrackedObjectKinematics {
@verbatim (language="comment", text=
" Pose covariance is always provided by tracking.")
geometry_msgs::msg::PoseWithCovariance pose_with_covariance;
uint8 orientation_availability;
geometry_msgs::msg::TwistWithCovariance twist_with_covariance;
geometry_msgs::msg::AccelWithCovariance acceleration_with_covariance;
@value (default=False)
boolean is_stationary;
};
};
};
@@ -0,0 +1,13 @@
#include "autoware_auto_perception_msgs/msg/TrackedObject.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" This is the output of object tracking and the input to prediction.")
struct TrackedObjects {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::TrackedObject> objects;
};
};
};
@@ -0,0 +1,44 @@
module autoware_auto_perception_msgs {
module msg {
module TrafficLight_Constants {
// constants for color
const uint8 RED = 1;
const uint8 AMBER = 2;
const uint8 GREEN = 3;
const uint8 WHITE = 4;
// constants for shape
const uint8 CIRCLE = 5;
const uint8 LEFT_ARROW = 6;
const uint8 RIGHT_ARROW = 7;
const uint8 UP_ARROW = 8;
const uint8 UP_LEFT_ARROW = 9;
const uint8 UP_RIGHT_ARROW = 10;
const uint8 DOWN_ARROW = 11;
const uint8 DOWN_LEFT_ARROW = 12;
const uint8 DOWN_RIGHT_ARROW = 13;
const uint8 CROSS = 14;
// constants for status
const uint8 SOLID_OFF = 15;
const uint8 SOLID_ON = 16;
const uint8 FLASHING = 17;
// constants for common use
const uint8 UNKNOWN = 18;
};
struct TrafficLight {
@default (value=0)
uint8 color;
@default (value=0)
uint8 shape;
@default (value=0)
uint8 status;
@default (value=0.0)
float confidence;
};
};
};
@@ -0,0 +1,10 @@
#include "sensor_msgs/msg/RegionOfInterest.idl"
module autoware_auto_perception_msgs {
module msg {
struct TrafficLightRoi {
sensor_msgs::msg::RegionOfInterest roi;
int32 id;
};
};
};
@@ -0,0 +1,11 @@
#include "autoware_auto_perception_msgs/msg/TrafficLightRoi.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
struct TrafficLightRoiArray {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::TrafficLightRoi> rois;
};
};
};
@@ -0,0 +1,19 @@
#include "autoware_auto_perception_msgs/msg/TrafficLight.idl"
module autoware_auto_perception_msgs {
module msg {
@verbatim (language="comment", text=
" A TrafficSignal is defined here as a group of multiple TrafficLights" "\n"
" which each represent a single light, indicator, or bulb.")
struct TrafficSignal {
@verbatim (language="comment", text=
" A value of 0 indicates an invalid map_primitive_id. Signals which are not"
" associated with map primitives should not be used in planning because this"
" indicates that the required signal-to-lane mapping is not available.")
@default (value=0)
int32 map_primitive_id;
sequence<autoware_auto_perception_msgs::msg::TrafficLight, 10> lights;
};
};
};
@@ -0,0 +1,11 @@
#include "autoware_auto_perception_msgs/msg/TrafficSignal.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
struct TrafficSignalArray {
std_msgs::msg::Header header;
sequence<autoware_auto_perception_msgs::msg::TrafficSignal> signals;
};
};
};
@@ -0,0 +1,11 @@
#include "autoware_auto_perception_msgs/msg/TrafficSignal.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_perception_msgs {
module msg {
struct TrafficSignalStamped {
std_msgs::msg::Header header;
autoware_auto_perception_msgs::msg::TrafficSignal signal;
};
};
};
@@ -0,0 +1,17 @@
#include "autoware_auto_perception_msgs/msg/TrafficSignal.idl"
module autoware_auto_perception_msgs {
module msg {
module TrafficSignalWithJudge_Constants {
const uint8 JUDGE = 1;
const uint8 NONE = 2;
const uint8 STOP = 3;
const uint8 GO = 4;
};
struct TrafficSignalWithJudge {
uint8 judge;
boolean has_state;
autoware_auto_perception_msgs::msg::TrafficSignal signal;
};
};
};
@@ -0,0 +1,31 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_perception_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto perception components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>autoware_auto_geometry_msgs</depend>
<depend>geometry_msgs</depend>
<depend>sensor_msgs</depend>
<depend>std_msgs</depend>
<depend>unique_identifier_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,42 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_planning_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"action/PlannerCostmap.idl"
"action/PlanTrajectory.idl"
"action/RecordTrajectory.idl"
"action/ReplayTrajectory.idl"
"msg/HADMapRoute.idl"
"msg/OrderMovement.idl"
"msg/Route.idl"
"msg/Trajectory.idl"
"msg/TrajectoryPoint.idl"
"msg/Path.idl"
"msg/PathPoint.idl"
"msg/PathWithLaneId.idl"
"msg/PathPointWithLaneId.idl"
"srv/ModifyTrajectory.idl"
DEPENDENCIES
"autoware_auto_geometry_msgs"
"autoware_auto_mapping_msgs"
"builtin_interfaces"
"action_msgs"
"geometry_msgs"
"nav_msgs"
"std_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,27 @@
#include "autoware_auto_planning_msgs/msg/HADMapRoute.idl"
#include "autoware_auto_planning_msgs/msg/Trajectory.idl"
module autoware_auto_planning_msgs {
module action {
module PlanTrajectory_Result_Constants {
const uint8 SUCCESS = 0;
const uint8 FAIL = 1;
};
struct PlanTrajectory_Goal {
autoware_auto_planning_msgs::msg::HADMapRoute sub_route;
};
struct PlanTrajectory_Result {
@verbatim(language = "comment", text =
"Report of end condition. Value should be one of PlanTrajectory_Constants")
uint8 result;
autoware_auto_planning_msgs::msg::Trajectory trajectory;
};
struct PlanTrajectory_Feedback {
@verbatim(language = "comment", text =
"Currently we don't need feedback, but we need some variable to compile")
uint8 unused_variable;
};
};
};
@@ -0,0 +1,26 @@
#include "autoware_auto_planning_msgs/msg/HADMapRoute.idl"
#include "nav_msgs/msg/OccupancyGrid.idl"
#include "std_msgs/msg/Empty.idl"
module autoware_auto_planning_msgs {
module action {
struct PlannerCostmap_Goal
{
@verbatim(language = "comment", text =
"Route defined by start and goal point and map primitives"
"between given points.")
autoware_auto_planning_msgs::msg::HADMapRoute route;
};
struct PlannerCostmap_Result
{
@verbatim(language = "comment", text =
"Costmap with obstacles and lanelets position applied")
nav_msgs::msg::OccupancyGrid costmap;
};
struct PlannerCostmap_Feedback {
@verbatim(language = "comment", text =
"Currently there is no feedback, but variable is needed to compile")
std_msgs::msg::Empty unused_variable;
};
};
};
@@ -0,0 +1,19 @@
module autoware_auto_planning_msgs {
module action {
struct RecordTrajectory_Goal {
@verbatim(language = "comment", text =
"A path to the CSV file which will be created to save the recorded trajectory.")
string record_path;
};
struct RecordTrajectory_Result {
@verbatim(language = "comment", text =
"This action has no result but we must provide something here.")
boolean unused_flag;
};
struct RecordTrajectory_Feedback {
int32 current_length;
};
};
};
@@ -0,0 +1,19 @@
module autoware_auto_planning_msgs {
module action {
struct ReplayTrajectory_Goal {
@verbatim(language = "comment", text =
"A path to the CSV file which contains the recorded trajectory.")
string replay_path;
};
struct ReplayTrajectory_Result {
@verbatim(language = "comment", text =
"This action has no result but we must provide something here.")
boolean unused_flag;
};
struct ReplayTrajectory_Feedback {
int32 remaining_length;
};
};
};
@@ -0,0 +1,27 @@
#include "autoware_auto_mapping_msgs/msg/HADMapSegment.idl"
#include "geometry_msgs/msg/Pose.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language="comment", text=
" A route within a high-definition map defined by"
" the start and goal points and map primitives"
" describing the route between the two.")
struct HADMapRoute {
std_msgs::msg::Header header;
@verbatim (language="comment", text=
" The start_pose must exist within the bounds of the primitives in the first"
" segment defined in the route_segments array.")
geometry_msgs::msg::Pose start_pose;
@verbatim (language="comment", text=
" The goal_pose must exist within the bounds of the primitives in the last"
" segment defined in the route_semgents array.")
geometry_msgs::msg::Pose goal_pose;
sequence<autoware_auto_mapping_msgs::msg::HADMapSegment> segments;
};
};
};
@@ -0,0 +1,21 @@
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
module OrderMovement_Constants {
const uint8 NOTSET = 0;
const uint8 STOP = 1;
const uint8 GO = 2;
const uint8 SLOWDOWN = 3;
};
@verbatim (language="comment", text=
"Movement order for planner to follow")
struct OrderMovement {
std_msgs::msg::Header header;
@default (value=0)
uint8 order_movement;
};
};
};
@@ -0,0 +1,16 @@
#include "autoware_auto_planning_msgs/msg/PathPoint.idl"
#include "nav_msgs/msg/OccupancyGrid.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language = "comment", text=
"Contains a PathPoint path and left and right bound.")
struct Path {
std_msgs::msg::Header header;
sequence<autoware_auto_planning_msgs::msg::PathPoint> points;
sequence<geometry_msgs::msg::Point> left_bound;
sequence<geometry_msgs::msg::Point> right_bound;
};
};
};
@@ -0,0 +1,26 @@
#include "geometry_msgs/msg/Pose.idl"
#include "geometry_msgs/msg/Twist.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language = "comment", text=
"Represents a pose from a lanelet map, contains twist information.")
struct PathPoint {
geometry_msgs::msg::Pose pose;
@default (value=0.0)
float longitudinal_velocity_mps;
@default (value=0.0)
float lateral_velocity_mps;
@default (value=0.0)
float heading_rate_rps;
@verbatim(language = "comment", text =
"Denotes that the point is final, doesn't need further updates.")
@default (value = FALSE)
boolean is_final;
};
};
};
@@ -0,0 +1,15 @@
#include "autoware_auto_planning_msgs/msg/PathPoint.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language = "comment", text=
"Contains a PathPoint and lanelet lane_id information.")
struct PathPointWithLaneId {
autoware_auto_planning_msgs::msg::PathPoint point;
@verbatim(language = "comment", text =
"Lanelet lane_id information.")
sequence<int64> lane_ids;
};
};
};
@@ -0,0 +1,16 @@
#include "autoware_auto_planning_msgs/msg/PathPointWithLaneId.idl"
#include "nav_msgs/msg/OccupancyGrid.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language = "comment", text=
"Contains a PathPointWithLaneId path and left and right bound.")
struct PathWithLaneId {
std_msgs::msg::Header header;
sequence<autoware_auto_planning_msgs::msg::PathPointWithLaneId> points;
sequence<geometry_msgs::msg::Point> left_bound;
sequence<geometry_msgs::msg::Point> right_bound;
};
};
};
@@ -0,0 +1,22 @@
#include "autoware_auto_mapping_msgs/msg/MapPrimitive.idl"
#include "autoware_auto_planning_msgs/msg/TrajectoryPoint.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
module Route_Constants {
const uint32 CAPACITY = 100;
};
@verbatim (language="comment", text=
"Global route information for the planner")
struct Route {
std_msgs::msg::Header header;
autoware_auto_planning_msgs::msg::TrajectoryPoint start_point;
autoware_auto_planning_msgs::msg::TrajectoryPoint goal_point;
sequence<autoware_auto_mapping_msgs::msg::MapPrimitive, 100> primitives;
};
};
};
@@ -0,0 +1,17 @@
#include "autoware_auto_planning_msgs/msg/TrajectoryPoint.idl"
#include "std_msgs/msg/Header.idl"
module autoware_auto_planning_msgs {
module msg {
module Trajectory_Constants {
const uint32 CAPACITY = 10000;
};
@verbatim (language="comment", text=
" A set of trajectory points for the controller")
struct Trajectory {
std_msgs::msg::Header header;
sequence<autoware_auto_planning_msgs::msg::TrajectoryPoint, 10000> points;
};
};
};
@@ -0,0 +1,33 @@
#include "builtin_interfaces/msg/Duration.idl"
#include "geometry_msgs/msg/Pose.idl"
module autoware_auto_planning_msgs {
module msg {
@verbatim (language="comment", text=
" Representation of a trajectory point for the controller")
struct TrajectoryPoint {
builtin_interfaces::msg::Duration time_from_start;
geometry_msgs::msg::Pose pose;
@default (value=0.0)
float longitudinal_velocity_mps;
@default (value=0.0)
float lateral_velocity_mps;
@default (value=0.0)
// acceleration_mps2 increases/decreases based on absolute vehicle motion and does not consider vehicle direction (forward/backward)
float acceleration_mps2;
@default (value=0.0)
float heading_rate_rps;
@default (value=0.0)
float front_wheel_angle_rad;
@default (value=0.0)
float rear_wheel_angle_rad;
};
};
};
@@ -0,0 +1,33 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_planning_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto planning components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>autoware_auto_geometry_msgs</depend>
<depend>autoware_auto_mapping_msgs</depend>
<depend>builtin_interfaces</depend>
<depend>action_msgs</depend>
<depend>geometry_msgs</depend>
<depend>nav_msgs</depend>
<depend>std_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,18 @@
#include "autoware_auto_planning_msgs/msg/Trajectory.idl"
module autoware_auto_planning_msgs {
module srv {
struct ModifyTrajectory_Request
{
@verbatim(language = "comment", text =
"Trajectory to be modified")
autoware_auto_planning_msgs::msg::Trajectory original_trajectory;
};
struct ModifyTrajectory_Response
{
@verbatim(language = "comment", text =
"Trajectory after modification")
autoware_auto_planning_msgs::msg::Trajectory modified_trajectory;
};
};
};
@@ -0,0 +1,31 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_system_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/AutowareState.idl"
"msg/ControlDiagnostic.idl"
"msg/DiagnosticHeader.idl"
"msg/DrivingCapability.idl"
"msg/EmergencyState.idl"
"msg/HazardStatus.idl"
"msg/HazardStatusStamped.idl"
DEPENDENCIES
"builtin_interfaces"
"diagnostic_msgs"
"std_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,26 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_system_msgs {
module msg {
module AutowareState_Constants {
const uint8 INITIALIZING = 1;
const uint8 WAITING_FOR_ROUTE = 2;
const uint8 PLANNING = 3;
const uint8 WAITING_FOR_ENGAGE = 4;
const uint8 DRIVING = 5;
const uint8 ARRIVED_GOAL = 6;
const uint8 FINALIZING = 7;
};
@verbatim (language="comment", text=
" A message for reporting the Autoware system status.")
struct AutowareState {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Current state of the Autoware system.")
uint8 state;
};
};
};
@@ -0,0 +1,33 @@
#include "autoware_auto_system_msgs/msg/DiagnosticHeader.idl"
module autoware_auto_system_msgs {
module msg {
@verbatim (language="comment", text=
" Diagnostic information for the controller")
struct ControlDiagnostic {
autoware_auto_system_msgs::msg::DiagnosticHeader diag_header;
@verbatim (language="comment", text=
" Controller specific information")
boolean new_trajectory;
string<256> trajectory_source;
string<256> pose_source;
@verbatim (language="comment", text=
" the error between the current vehicle and the nearest neighbor point")
float lateral_error_m;
float longitudinal_error_m;
float velocity_error_mps;
float acceleration_error_mps2;
float yaw_error_rad;
float yaw_rate_error_rps;
};
};
};
@@ -0,0 +1,20 @@
#include "builtin_interfaces/msg/Duration.idl"
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_system_msgs {
module msg {
@verbatim (language="comment", text=
" Base information that all diagnostic messages should have")
struct DiagnosticHeader {
string<256> name;
builtin_interfaces::msg::Time data_stamp;
builtin_interfaces::msg::Time computation_start;
builtin_interfaces::msg::Duration runtime;
uint32 iterations;
};
};
};
@@ -0,0 +1,22 @@
#include "builtin_interfaces/msg/Time.idl"
#include "autoware_auto_system_msgs/msg/HazardStatus.idl"
module autoware_auto_system_msgs {
module msg {
@verbatim (language="comment", text=
" A status message for reporting the vehicle driving capabilities.")
struct DrivingCapability {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Status for the autonomous driving mode.")
autoware_auto_system_msgs::msg::HazardStatus autonomous_driving;
@verbatim (language="comment", text=
" Status for the remote control mode.")
autoware_auto_system_msgs::msg::HazardStatus remote_control;
};
};
};
@@ -0,0 +1,30 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_system_msgs {
module msg {
module EmergencyState_Constants {
const uint8 NORMAL = 1;
const uint8 OVERRIDE_REQUESTING = 2;
const uint8 MRM_OPERATING = 3;
const uint8 MRM_SUCCEEDED = 4;
const uint8 MRM_FAILED = 5;
};
@verbatim (language="comment", text=
" Message for reporting the emergency state.")
struct EmergencyState {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Current emergency state fo the system. Possible states are as follows."
" - NORMAL - the system is not in emergency mode."
" - OVERRIDE_REQUESTING - the override is requesting."
" - MRM_OPERATING - during the minimal risk maneuver (MRM)"
" - MRM_SUCCEEDED - MRM operation succeeded."
" - MRM_FAILED - MRM operation failed.")
uint8 state;
};
};
};
@@ -0,0 +1,49 @@
#include "diagnostic_msgs/msg/DiagnosticStatus.idl"
module autoware_auto_system_msgs {
module msg {
module HazardStatus_Constants {
const uint8 NO_FAULT = 0;
const uint8 SAFE_FAULT = 1;
const uint8 LATENT_FAULT = 2;
const uint8 SINGLE_POINT_FAULT = 3;
};
@verbatim (language="comment", text=
" A message for reporting the hazard status.")
struct HazardStatus {
@verbatim (language="comment", text=
" Determines the hazard level.")
@default (value=0)
uint8 level;
@verbatim (language="comment", text=
" Determines whether the vehicle is in the emergency state.")
@default (value=FALSE)
boolean emergency;
@verbatim (language="comment", text=
" Determines whether the vehicle emergency state should be held.")
@default (value=FALSE)
boolean emergency_holding;
@verbatim (language="comment", text=
" Diagnostics categorized as no fault.")
sequence<diagnostic_msgs::msg::DiagnosticStatus> diag_no_fault;
@verbatim (language="comment", text=
" Diagnostics categorized as safe fault.")
sequence<diagnostic_msgs::msg::DiagnosticStatus> diag_safe_fault;
@verbatim (language="comment", text=
" Diagnostics categorized as latent fault.")
sequence<diagnostic_msgs::msg::DiagnosticStatus> diag_latent_fault;
@verbatim (language="comment", text=
" Diagnostics categorized as single point fault.")
sequence<diagnostic_msgs::msg::DiagnosticStatus> diag_single_point_fault;
};
};
};
@@ -0,0 +1,18 @@
#include "builtin_interfaces/msg/Time.idl"
#include "autoware_auto_system_msgs/msg/HazardStatus.idl"
module autoware_auto_system_msgs {
module msg {
@verbatim (language="comment", text=
" A message for reporting the hazard status with timestamp.")
struct HazardStatusStamped {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Contains the hazard status with diagnostics information.")
autoware_auto_system_msgs::msg::HazardStatus status;
};
};
};
@@ -0,0 +1,29 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>autoware_auto_system_msgs</name>
<version>1.0.0</version>
<description>Interfaces between core Autoware.Auto system components</description>
<maintainer email="opensource@apex.ai">Apex.AI, Inc.</maintainer>
<license>Apache 2</license>
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>
<depend>builtin_interfaces</depend>
<depend>diagnostic_msgs</depend>
<depend>std_msgs</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
@@ -0,0 +1,53 @@
# All rights reserved.
cmake_minimum_required(VERSION 3.5)
### Export headers
project(autoware_auto_vehicle_msgs)
# Generate messages
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/ControlModeCommand.idl"
"msg/ControlModeReport.idl"
"msg/Engage.idl"
"msg/GearCommand.idl"
"msg/GearReport.idl"
"msg/HandBrakeCommand.idl"
"msg/HandBrakeReport.idl"
"msg/HazardLightsCommand.idl"
"msg/HazardLightsReport.idl"
"msg/HeadlightsCommand.idl"
"msg/HeadlightsReport.idl"
"msg/HornCommand.idl"
"msg/HornReport.idl"
"msg/RawControlCommand.idl"
"msg/StationaryLockingCommand.idl"
"msg/SteeringReport.idl"
"msg/TurnIndicatorsCommand.idl"
"msg/TurnIndicatorsReport.idl"
"msg/VehicleControlCommand.idl"
"msg/VehicleKinematicState.idl"
"msg/VehicleOdometry.idl"
"msg/VehicleStateCommand.idl"
"msg/VehicleStateReport.idl"
"msg/VelocityReport.idl"
"msg/WheelEncoder.idl"
"msg/WipersCommand.idl"
"msg/WipersReport.idl"
"srv/AutonomyModeChange.idl"
"srv/ControlModeCommand.srv"
DEPENDENCIES
"autoware_auto_planning_msgs"
"builtin_interfaces"
"std_msgs"
ADD_LINTER_TESTS
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
@@ -0,0 +1,19 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module ControlModeCommand_Constants {
const uint8 NO_COMMAND = 0;
const uint8 AUTONOMOUS = 1;
const uint8 MANUAL = 2;
};
@verbatim (language="comment", text=
" ControlModeCommand.msg")
struct ControlModeCommand {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 mode;
};
};
};
@@ -0,0 +1,24 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module ControlModeReport_Constants {
const uint8 NO_COMMAND = 0;
const uint8 AUTONOMOUS = 1;
const uint8 AUTONOMOUS_STEER_ONLY = 2;
const uint8 AUTONOMOUS_VELOCITY_ONLY = 3;
const uint8 MANUAL = 4;
const uint8 DISENGAGED = 5;
const uint8 NOT_READY = 6;
};
@verbatim (language="comment", text=
" ControlModeReport.msg")
struct ControlModeReport {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 mode;
};
};
};
@@ -0,0 +1,18 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
@verbatim (language="comment", text=
" Command for controlling the engagement state of the vehicle.")
struct Engage {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Determines if a vehicle should be engaged.")
@default (value=FALSE)
boolean engage;
};
};
};
@@ -0,0 +1,40 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module GearCommand_Constants {
const uint8 NONE = 0;
const uint8 NEUTRAL = 1;
const uint8 DRIVE = 2;
const uint8 DRIVE_2 = 3;
const uint8 DRIVE_3 = 4;
const uint8 DRIVE_4 = 5;
const uint8 DRIVE_5 = 6;
const uint8 DRIVE_6 = 7;
const uint8 DRIVE_7 = 8;
const uint8 DRIVE_8 = 9;
const uint8 DRIVE_9 = 10;
const uint8 DRIVE_10 = 11;
const uint8 DRIVE_11 = 12;
const uint8 DRIVE_12 = 13;
const uint8 DRIVE_13 = 14;
const uint8 DRIVE_14 = 15;
const uint8 DRIVE_15 = 16;
const uint8 DRIVE_16 = 17;
const uint8 DRIVE_17 = 18;
const uint8 DRIVE_18 = 19;
const uint8 REVERSE = 20;
const uint8 REVERSE_2 = 21;
const uint8 PARK = 22;
const uint8 LOW = 23;
const uint8 LOW_2 = 24;
};
struct GearCommand {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 command;
};
};
};
@@ -0,0 +1,40 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module GearReport_Constants {
const uint8 NONE = 0;
const uint8 NEUTRAL = 1;
const uint8 DRIVE = 2;
const uint8 DRIVE_2 = 3;
const uint8 DRIVE_3 = 4;
const uint8 DRIVE_4 = 5;
const uint8 DRIVE_5 = 6;
const uint8 DRIVE_6 = 7;
const uint8 DRIVE_7 = 8;
const uint8 DRIVE_8 = 9;
const uint8 DRIVE_9 = 10;
const uint8 DRIVE_10 = 11;
const uint8 DRIVE_11 = 12;
const uint8 DRIVE_12 = 13;
const uint8 DRIVE_13 = 14;
const uint8 DRIVE_14 = 15;
const uint8 DRIVE_15 = 16;
const uint8 DRIVE_16 = 17;
const uint8 DRIVE_17 = 18;
const uint8 DRIVE_18 = 19;
const uint8 REVERSE = 20;
const uint8 REVERSE_2 = 21;
const uint8 PARK = 22;
const uint8 LOW = 23;
const uint8 LOW_2 = 24;
};
struct GearReport {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 report;
};
};
};
@@ -0,0 +1,16 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
@verbatim (language="comment", text=
" Command for controlling an electronic hand brake.")
struct HandBrakeCommand {
builtin_interfaces::msg::Time stamp;
@default (value=FALSE)
boolean active;
};
};
};
@@ -0,0 +1,13 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
struct HandBrakeReport {
builtin_interfaces::msg::Time stamp;
@default (value=FALSE)
boolean report;
};
};
};
@@ -0,0 +1,22 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module HazardLightsCommand_Constants {
const uint8 NO_COMMAND = 0;
const uint8 DISABLE = 1;
const uint8 ENABLE = 2;
};
@verbatim (language="comment", text=
" Command for controlling a vehicle's hazard lights.")
struct HazardLightsCommand {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 command;
};
};
};
@@ -0,0 +1,18 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module HazardLightsReport_Constants {
const uint8 DISABLE = 1;
const uint8 ENABLE = 2;
};
struct HazardLightsReport {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 report;
};
};
};
@@ -0,0 +1,23 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module HeadlightsCommand_Constants {
const uint8 NO_COMMAND = 0;
const uint8 DISABLE = 1;
const uint8 ENABLE_LOW = 2;
const uint8 ENABLE_HIGH = 3;
};
@verbatim (language="comment", text=
" Command for controlling headlights.")
struct HeadlightsCommand {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 command;
};
};
};
@@ -0,0 +1,18 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
module HeadlightsReport_Constants {
const uint8 DISABLE = 1;
const uint8 ENABLE_LOW = 2;
const uint8 ENABLE_HIGH = 3;
};
struct HeadlightsReport {
builtin_interfaces::msg::Time stamp;
@default (value=0)
uint8 report;
};
};
};
@@ -0,0 +1,16 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
@verbatim (language="comment", text=
" Command for controlling a horn.")
struct HornCommand {
builtin_interfaces::msg::Time stamp;
@default (value=FALSE)
boolean active;
};
};
};
@@ -0,0 +1,13 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
struct HornReport {
builtin_interfaces::msg::Time stamp;
@default (value=FALSE)
boolean report;
};
};
};
@@ -0,0 +1,21 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
struct RawControlCommand {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Units for all below fields are not defined. The exact semantics for each field is defined by each" "\n"
" vehicle interface implementation. It is the system integrator's responsibility to ensure these are" "\n"
" consistent when using this interface")
uint32 throttle;
uint32 brake;
int32 front_steer;
int32 rear_steer;
};
};
};
@@ -0,0 +1,20 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
@verbatim (language="comment", text=
" Command to avoid stationary locking \(Park gear, Parking Brake, etc.\)."
" This command assumes that the VehicleInterface or lower levels are controlling"
" the mechanism by which a vehicle is prevented from moving \(\"stationary locking\"\)"
" and will automatically attempt to apply stationary locking if a 0-velocity command"
" is applied for an arbitrary period of time. Setting the avoid_stationary_locking"
" field to TRUE tells the VehicleInterface or lower levels to avoid making this transition.")
struct StationaryLockingCommand {
builtin_interfaces::msg::Time stamp;
@default (value=FALSE)
boolean avoid_stationary_locking;
};
};
};
@@ -0,0 +1,17 @@
#include "builtin_interfaces/msg/Time.idl"
module autoware_auto_vehicle_msgs {
module msg {
@verbatim (language="comment", text=
" SteeringReport.msg")
struct SteeringReport {
builtin_interfaces::msg::Time stamp;
@verbatim (language="comment", text=
" Desired angle of the steering tire in radians left (positive)"
" or right (negative) of center (0.0)")
@default (value=0.0)
float steering_tire_angle;
};
};
};

Some files were not shown because too many files have changed in this diff Show More