diff --git a/main/common/tier4_string_viewer_rviz_plugin/index.html b/main/common/tier4_string_viewer_rviz_plugin/index.html index b1b1a749..abef266e 100644 --- a/main/common/tier4_string_viewer_rviz_plugin/index.html +++ b/main/common/tier4_string_viewer_rviz_plugin/index.html @@ -3126,7 +3126,7 @@
This plugin displays the ROS message whose topic type is tier4_debug_msgs::msg::StringStamped
in rviz.
This plugin displays the ROS message whose topic type is autoware_internal_debug_msgs::msg::StringStamped
in rviz.
TBD.
This is a repository for keeping packages that are not needed at runtime, including packages for benchmarking, debugging, tuning, calibrating, etc.
"},{"location":"CODE_OF_CONDUCT/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#contributor-covenant-code-of-conduct","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#our-pledge","title":"Our Pledge","text":"We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
"},{"location":"CODE_OF_CONDUCT/#our-standards","title":"Our Standards","text":"Examples of behavior that contributes to a positive environment for our community include:
Examples of unacceptable behavior include:
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
"},{"location":"CODE_OF_CONDUCT/#scope","title":"Scope","text":"This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
"},{"location":"CODE_OF_CONDUCT/#enforcement","title":"Enforcement","text":"Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at conduct@autoware.org. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
"},{"location":"CODE_OF_CONDUCT/#enforcement-guidelines","title":"Enforcement Guidelines","text":"Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
"},{"location":"CODE_OF_CONDUCT/#1-correction","title":"1. Correction","text":"Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
"},{"location":"CODE_OF_CONDUCT/#2-warning","title":"2. Warning","text":"Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
"},{"location":"CODE_OF_CONDUCT/#3-temporary-ban","title":"3. Temporary Ban","text":"Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
"},{"location":"CODE_OF_CONDUCT/#4-permanent-ban","title":"4. Permanent Ban","text":"Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
"},{"location":"CODE_OF_CONDUCT/#attribution","title":"Attribution","text":"This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
"},{"location":"CONTRIBUTING/","title":"Contributing","text":""},{"location":"CONTRIBUTING/#contributing","title":"Contributing","text":"See https://autowarefoundation.github.io/autoware-documentation/main/contributing/.
"},{"location":"DISCLAIMER/","title":"DISCLAIMER","text":"DISCLAIMER
\u201cAutoware\u201d will be provided by The Autoware Foundation under the Apache License 2.0. This \u201cDISCLAIMER\u201d will be applied to all users of Autoware (a \u201cUser\u201d or \u201cUsers\u201d) with the Apache License 2.0 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
AUTOWARE FOUNDATION MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH RESPECT TO PROVIDING AUTOWARE (the \u201cService\u201d) 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.
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.
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 \u201cIndemnified Parties\u201d) 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.
"},{"location":"autoware_dependency_checker/","title":"autoware_dependency_checker","text":""},{"location":"autoware_dependency_checker/#autoware_dependency_checker","title":"autoware_dependency_checker","text":"This package provides a script for checking whether each package's dependencies listed in a package.xml are used or not. Currently, it mainly checks packages that start with autoware_
.
The script will try to match the dependencies and the headers by reading the dependencies listed in package.xml and the included headers in the source files.
Some dependency in package.xml
and the included header might differ. The following table shows the matching between dependency names and headers:
# build\n$ cd to/autoware_tools\n$ colcon build --symlink-install --cmake-args --packages-up-to autoware_dependency_checker\n$ source\n\n# run\n$ cd to/your/autoware\n$ ros2 run autoware_dependency_checker dependency_checker.sh\n\n# run in some package\n$ cd to/some/package\n$ ros2 run autoware_dependency_checker dependency_checker.sh\n
"},{"location":"bag2lanelet/","title":"bag2lanelet","text":""},{"location":"bag2lanelet/#bag2lanelet","title":"bag2lanelet","text":"This package generates a lanelet map necessary for Autoware's autonomous driving from rosbag data containing information about Localization (/tf
). This enables autonomous driving based on manual driving information.
The provided functionalities are as follows:
base_link
.As an example, the process of lanelet generation based on driving trajectories from the planning simulator is performed as follows. Typically, the expectation is to use rosbag data from manual driving, rather than from the planning simulator.
Firstly, you need to run the planning_simulator following the planning_simulator tutorial in Autoware Documentation. The process would be, install Autoware, download the maps, run the planning_simulator, and start autonomous driving. Make sure to save the rosbag during this driving session using the following command:
ros2 bag record /tf -o /tmp/bag2lanelet_sample.bag\n
After completing the drive, you can run the bag2lanelet.py
script. This requires specifying the output directory, lane width and MGRS coordinates:
./bag2lanelet.py /tmp/bag2lanelet_sample.bag /tmp/bag2lanelet_sample -l 3.0 -m 54SUE\n
The map will be saved in the specified directory, following the naming convention <date>-lanelet2_map.osm
. The map generated will appear like this. You can see the example result in ./example/lanelet2_map.osm.
When you relaunch the planning_simulator with the new lanelet2 map, you will see the following.
Please note that at this stage, although this map works with Autoware, the shape of the lanes will appear jagged. (Refer to the 'Limitations' section for more details.) While this is an issue that should be addressed in the future, it can currently be resolved by loading it in Vector Map Builder as follows.
Following the documentation of the Vector Map Builder, import the generated Lanelet2 map. You can see the refined lane on the application.
Then, Export the map. You can run the planning_simulator with the refined lanelet2 map and see how it goes on the Rviz.
"},{"location":"bag2lanelet/#requirements","title":"Requirements","text":"
sudo apt update\nsudo apt install ros-humble-tf-transformations ros-humble-tf-transformations\npip install -r requirements.txt\n
"},{"location":"bag2lanelet/#usage","title":"Usage","text":"Check ./bag2lanelet.py --help
For given lane width and MGRS coordinate.
./bag2lanelet.py /home/autoware/rosbag/sample . -l 3.0 -m 54SUE\n
"},{"location":"bag2lanelet/#generate-trajectory-file-for-vector-map-builder","title":"generate trajectory file for Vector Map Builder","text":"./bag2trajectory.py /home/autoware/rosbag/sample sample.csv\n
"},{"location":"bag2lanelet/#limitations","title":"Limitations","text":"Here is the limitations of this package. Contributions to further improvements are more than welcome.
This package provides tools for debugging Autoware.
"},{"location":"common/autoware_debug_tools/#processing-time-visualizer","title":"Processing Time Visualizer","text":"This tool visualizes tier4_debug_msgs/msg/ProcessingTimeTree
messages.
Run the following command to start the visualizer.
ros2 run autoware_debug_tools processing_time_visualizer\n
Select a topic to visualize.
Then, the visualizer will show the processing time tree.
Running with --summarize
, it will output the summarized information.
> ros2 run autoware_debug_tools processing_time_visualizer --summarize\n\nobjectsCallback: 17.99 [ms], run count: 1\n \u251c\u2500\u2500 removeStaleTrafficLightInfo: 0.00 [ms], run count: 1\n \u251c\u2500\u2500 updateObjectData: 0.03 [ms], run count: 13\n \u251c\u2500\u2500 getCurrentLanelets: 4.81 [ms], run count: 13\n \u2502 \u251c\u2500\u2500 checkCloseLaneletCondition: 2.43 [ms], run count: 130\n \u2502 \u251c\u2500\u2500 isDuplicated: 0.02 [ms], run count: 17\n \u2502 \u2514\u2500\u2500 calculateLocalLikelihood: 0.66 [ms], run count: 12\n \u251c\u2500\u2500 updateRoadUsersHistory: 0.30 [ms], run count: 13\n \u2514\u2500\u2500 getPredictedReferencePath: 5.47 [ms], run count: 5\n \u251c\u2500\u2500 predictObjectManeuver: 0.40 [ms], run count: 5\n \u2502 \u2514\u2500\u2500 predictObjectManeuverByLatDiffDistance: 0.34 [ms], run count: 5\n \u2502 \u2514\u2500\u2500 calcRightLateralOffset: 0.03 [ms], run count: 12\n \u251c\u2500\u2500 calculateManeuverProbability: 0.01 [ms], run count: 5\n \u2514\u2500\u2500 addReferencePaths: 4.66 [ms], run count: 15\n \u251c\u2500\u2500 updateFuturePossibleLanelets: 0.08 [ms], run count: 8\n \u2514\u2500\u2500 convertPathType: 4.29 [ms], run count: 8\n
"},{"location":"common/autoware_debug_tools/#system-usage-monitor","title":"System Usage Monitor","text":"The purpose of the System Usage Monitor is to monitor, visualize and publish the CPU usage and memory usage of the ROS processes. By providing a real-time terminal-based visualization, users can easily confirm the cpu and memory usage as in the picture below.
You can run the program by the following command.
ros2 run autoware_debug_tools system_usage_monitor\n
"},{"location":"common/autoware_debug_tools/#system-performance-plotter","title":"System Performance Plotter","text":"This script plots the following metrics by each Autoware's module.
Run the following commands according to your purpose.
# plot processing time\nros2 run autoware_debug_tools processing_time_plotter <bag-path>\n\n# plot CPU usage\nros2 run autoware_debug_tools cpu_usage_plotter <bag-path>\n\n# plot memory usage\nros2 run autoware_debug_tools memory_usage_plotter <bag-path>\n
There are several options.
-c
:all
, planning
, system
, etc).-n <number>
:<number>
critical modules.-g <text>
<text>
.-y <val>
<val>
.ros2 run autoware_debug_tools processing_time_plotter <bag-path> -c planning -g behavior_path -y 300\n
ros2 run autoware_debug_tools cpu_usage_plotter <bag-path> -n 20\n
"},{"location":"common/autoware_debug_tools/#rosout-log-reconstructor","title":"Rosout Log Reconstructor","text":"This script shows the log from the /rosout
topic on the terminal.
ros2 run autoware_debug_tools rosout_log_reconstructor\n
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/","title":"Topic Connection Checker","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-connection-checker","title":"Topic Connection Checker","text":"The Topic Connection Checker is an advanced diagnostic tool designed to simulate how an Autoware Engineer debugs an Autoware system in the field when certain topics are not functioning as expected. This tool is essential for identifying and resolving issues in the complex topic network of an Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#overview","title":"Overview","text":"The tool consists of two main components:
These components work together to provide a comprehensive debugging experience, following a systematic approach to identify and locate problematic topics in the Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#debugging-process","title":"Debugging Process","text":"The Topic Connection Checker follows a step-by-step process that mimics an experienced Autoware Engineer's debugging approach:
Steps 1-4 are handled by the Topic Connection Checker, while step 5 is addressed by the Topic Localizer.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-connection-checker_1","title":"Topic Connection Checker","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#usage","title":"Usage","text":"To run the Topic Connection Checker, use the following command:
ros2 run autoware_debug_tools topic_connection_checker\n
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#mechanism","title":"Mechanism","text":"The Topic Connection Checker operates as follows:
/diagnostics
for three seconds, focusing on hardware_id
with topic_state_monitor
.The identified problematic topics can then be used as input for the Topic Localizer.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-localizer","title":"Topic Localizer","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#usage_1","title":"Usage","text":"When launching from the autoware/pilot-auto
directory, use the following command:
ros2 run autoware_debug_tools topic_localizer . $TOPIC1,$TOPIC2\n\n## If we launch from a different directory\nros2 run autoware_debug_tools topic_localizer $AUTOWARE_DIRECTORY $TOPIC1,$TOPIC2\n
Replace $TOPIC1,$TOPIC2
with the actual topic names you want to localize, separated by commas.
The Topic Localizer employs a two-step approach to find the source of problematic topics:
Direct Search:
Launch System Analysis:
autoware_launch/launch/autoware.launch.xml
using default arguments.By using these tools effectively, Autoware Engineers can quickly identify and resolve topic-related issues, ensuring smooth operation of the Autoware system.
"},{"location":"common/mission_planner_rviz_plugin/","title":"mission_planner_rviz_plugin","text":""},{"location":"common/mission_planner_rviz_plugin/#mission_planner_rviz_plugin","title":"mission_planner_rviz_plugin","text":""},{"location":"common/mission_planner_rviz_plugin/#mrmgoaltool","title":"MrmGoalTool","text":"This is a copy of rviz_default_plugins::tools::GoalTool
. Used together with the RouteSelectorPanel to set the MRM route. After adding the tool, change the topic name to /rviz/route_selector/mrm/goal
from the topic property panel in rviz.
This panel shows the main and mrm route state in the route_selector and the route states in the mission_planner. Additionally, it provides clear and set functions for each main route and mrm route.
Trigger Action main route clear button call/planning/mission_planning/route_selector/main/clear_route
mrm route clear button call /planning/mission_planning/route_selector/mrm/clear_route
/rviz/route_selector/main/goal
topic call /planning/mission_planning/route_selector/main/set_waypoint_route
/rviz/route_selector/mrm/goal
topic call /planning/mission_planning/route_selector/mrm/set_waypoint_route
"},{"location":"common/rtc_manager_rviz_plugin/","title":"rtc_manager_rviz_plugin","text":""},{"location":"common/rtc_manager_rviz_plugin/#rtc_manager_rviz_plugin","title":"rtc_manager_rviz_plugin","text":""},{"location":"common/rtc_manager_rviz_plugin/#purpose","title":"Purpose","text":"The purpose of this Rviz plugin is
To display each content of RTC status.
To switch each module of RTC auto mode.
To change RTC cooperate commands by button.
/api/external/get/rtc_status
tier4_rtc_msgs::msg::CooperateStatusArray
The statuses of each Cooperate Commands"},{"location":"common/rtc_manager_rviz_plugin/#output","title":"Output","text":"Name Type Description /api/external/set/rtc_commands
tier4_rtc_msgs::src::CooperateCommands
The Cooperate Commands for each planning /planning/enable_auto_mode/*
tier4_rtc_msgs::src::AutoMode
The Cooperate Commands mode for each planning module"},{"location":"common/rtc_manager_rviz_plugin/#howtouse","title":"HowToUse","text":"Start rviz and select panels/Add new panel.
tier4_state_rviz_plugin/RTCManagerPanel and press OK.
Defining a GoalsList
by adding goals using RvizTool
(Pose on the map).
Automatic execution of the created GoalsList
from the selected goal - it can be stopped and restarted.
Looping the current GoalsList
.
Saving achieved goals to a file.
Plan the route to one (single) selected goal and starting that route - it can be stopped and restarted.
Remove any goal from the list or clear the current route.
Save the current GoalsList
to a file and load the list from the file.
The application enables/disables access to options depending on the current state.
The saved GoalsList
can be executed without using a plugin - using a node automatic_goal_sender
.
/api/operation_mode/state
autoware_adapi_v1_msgs::msg::OperationModeState
The topic represents the state of operation mode /api/routing/state
autoware_adapi_v1_msgs::msg::RouteState
The topic represents the state of route /rviz2/automatic_goal/goal
geometry_msgs::msgs::PoseStamped
The topic for adding goals to GoalsList"},{"location":"common/tier4_automatic_goal_rviz_plugin/#output","title":"Output","text":"Name Type Description /api/operation_mode/change_to_autonomous
autoware_adapi_v1_msgs::srv::ChangeOperationMode
The service to change operation mode to autonomous /api/operation_mode/change_to_stop
autoware_adapi_v1_msgs::srv::ChangeOperationMode
The service to change operation mode to stop /api/routing/set_route_points
autoware_adapi_v1_msgs::srv::SetRoutePoints
The service to set route /api/routing/clear_route
autoware_adapi_v1_msgs::srv::ClearRoute
The service to clear route state /rviz2/automatic_goal/markers
visualization_msgs::msg::MarkerArray
The topic to visualize goals as rviz markers"},{"location":"common/tier4_automatic_goal_rviz_plugin/#howtouse","title":"HowToUse","text":"Start rviz and select panels/Add new panel.
Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalPanel
and press OK.
Select Add a new tool.
Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalTool
and press OK.
Add goals visualization as markers to Displays
.
Append goals to the GoalsList
to be achieved using 2D Append Goal
- in such a way that routes can be planned.
Start sequential planning and goal achievement by clicking Send goals automatically
You can save GoalsList
by clicking Save to file
.
After saving, you can run the GoalsList
without using a plugin also:
ros2 launch tier4_automatic_goal_rviz_plugin automatic_goal_sender.launch.xml goals_list_file_path:=\"/tmp/goals_list.yaml\" goals_achieved_dir_path:=\"/tmp/\"
goals_list_file_path
- is the path to the saved GoalsList
file to be loadedgoals_achieved_dir_path
- is the path to the directory where the file goals_achieved.log
will be created and the achieved goals will be written to itIf the application (Engagement) goes into ERROR
mode (usually returns to EDITING
later), it means that one of the services returned a calling error (code!=0
). In this situation, check the terminal output for more information.
This project uses Material Design Icons by Google. These icons are used under the terms of the Apache License, Version 2.0.
Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products.
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#license","title":"License","text":"The Material Design Icons are licensed under the Apache License, Version 2.0. 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.
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#acknowledgments","title":"Acknowledgments","text":"We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects.
"},{"location":"common/tier4_control_rviz_plugin/","title":"tier4_control_rviz_plugin","text":""},{"location":"common/tier4_control_rviz_plugin/#tier4_control_rviz_plugin","title":"tier4_control_rviz_plugin","text":"This package is to mimic external control for simulation.
"},{"location":"common/tier4_control_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/tier4_control_rviz_plugin/#input","title":"Input","text":"Name Type Description/control/current_gate_mode
tier4_control_msgs::msg::GateMode
Current GATE mode /vehicle/status/velocity_status
autoware_vehicle_msgs::msg::VelocityReport
Current velocity status /api/autoware/get/engage
tier4_external_api_msgs::srv::Engage
Getting Engage /vehicle/status/gear_status
autoware_vehicle_msgs::msg::GearReport
The state of GEAR"},{"location":"common/tier4_control_rviz_plugin/#output","title":"Output","text":"Name Type Description /control/gate_mode_cmd
tier4_control_msgs::msg::GateMode
GATE mode /external/selected/control_cmd
autoware_control_msgs::msg::ControlCommand
Control command /external/selected/gear_cmd
autoware_vehicle_msgs::msg::GearCommand
GEAR"},{"location":"common/tier4_control_rviz_plugin/#usage","title":"Usage","text":"Start rviz and select Panels.
Select tier4_control_rviz_plugin/ManualController and press OK.
Enter velocity in \"Set Cruise Velocity\" and Press the button to confirm. You can notice that GEAR shows D (DRIVE).
Press \"Enable Manual Control\" and you can notice that \"GATE\" and \"Engage\" turn \"Ready\" and the vehicle starts!
This package is including jsk code. Note that jsk_overlay_utils.cpp and jsk_overlay_utils.hpp are BSD license.
"},{"location":"common/tier4_debug_rviz_plugin/#plugins","title":"Plugins","text":""},{"location":"common/tier4_debug_rviz_plugin/#float32multiarraystampedpiechart","title":"Float32MultiArrayStampedPieChart","text":"Pie chart from tier4_debug_msgs::msg::Float32MultiArrayStamped
.
This package provides useful features for debugging Autoware.
"},{"location":"common/tier4_debug_tools/#usage","title":"Usage","text":""},{"location":"common/tier4_debug_tools/#tf2pose","title":"tf2pose","text":"This tool converts any tf
to pose
topic. With this tool, for example, you can plot x
values of tf
in rqt_multiplot
.
ros2 run tier4_debug_tools tf2pose {tf_from} {tf_to} {hz}\n
Example:
$ ros2 run tier4_debug_tools tf2pose base_link ndt_base_link 100\n\n$ ros2 topic echo /tf2pose/pose -n1\nheader:\n seq: 13\nstamp:\n secs: 1605168366\nnsecs: 549174070\nframe_id: \"base_link\"\npose:\n position:\n x: 0.0387684271191\n y: -0.00320360406477\n z: 0.000276674520819\n orientation:\n x: 0.000335221893885\n y: 0.000122020672186\n z: -0.00539673212896\n w: 0.999985368502\n---\n
"},{"location":"common/tier4_debug_tools/#pose2tf","title":"pose2tf","text":"This tool converts any pose
topic to tf
.
ros2 run tier4_debug_tools pose2tf {pose_topic_name} {tf_name}\n
Example:
$ ros2 run tier4_debug_tools pose2tf /localization/pose_estimator/pose ndt_pose\n\n$ ros2 run tf tf_echo ndt_pose ndt_base_link 100\nAt time 1605168365.449\n- Translation: [0.000, 0.000, 0.000]\n- Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000]\nin RPY (radian) [0.000, -0.000, 0.000]\nin RPY (degree) [0.000, -0.000, 0.000]\n
"},{"location":"common/tier4_debug_tools/#stop_reason2pose","title":"stop_reason2pose","text":"This tool extracts pose
from stop_reasons
. Topics without numbers such as /stop_reason2pose/pose/detection_area
are the nearest stop_reasons, and topics with numbers are individual stop_reasons that are roughly matched with previous ones.
ros2 run tier4_debug_tools stop_reason2pose {stop_reason_topic_name}\n
Example:
$ ros2 run tier4_debug_tools stop_reason2pose /planning/scenario_planning/status/stop_reasons\n\n$ ros2 topic list | ag stop_reason2pose\n/stop_reason2pose/pose/detection_area\n/stop_reason2pose/pose/detection_area_1\n/stop_reason2pose/pose/obstacle_stop\n/stop_reason2pose/pose/obstacle_stop_1\n\n$ ros2 topic echo /stop_reason2pose/pose/detection_area -n1\nheader:\n seq: 1\nstamp:\n secs: 1605168355\nnsecs: 821713\nframe_id: \"map\"\npose:\n position:\n x: 60608.8433457\n y: 43886.2410876\n z: 44.9078212441\n orientation:\n x: 0.0\n y: 0.0\n z: -0.190261378408\n w: 0.981733470901\n---\n
"},{"location":"common/tier4_debug_tools/#stop_reason2tf","title":"stop_reason2tf","text":"This is an all-in-one script that uses tf2pose
, pose2tf
, and stop_reason2pose
. With this tool, you can view the relative position from base_link to the nearest stop_reason.
ros2 run tier4_debug_tools stop_reason2tf {stop_reason_name}\n
Example:
$ ros2 run tier4_debug_tools stop_reason2tf obstacle_stop\nAt time 1605168359.501\n- Translation: [0.291, -0.095, 0.266]\n- Rotation: in Quaternion [0.007, 0.011, -0.005, 1.000]\nin RPY (radian) [0.014, 0.023, -0.010]\nin RPY (degree) [0.825, 1.305, -0.573]\n
"},{"location":"common/tier4_debug_tools/#lateral_error_publisher","title":"lateral_error_publisher","text":"This node calculate the control error and localization error in the trajectory normal direction as shown in the figure below.
Set the reference trajectory, vehicle pose and ground truth pose in the launch file.
ros2 launch tier4_debug_tools lateral_error_publisher.launch.xml\n
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/","title":"tier4_logging_level_configure_rviz_plugin","text":""},{"location":"common/tier4_logging_level_configure_rviz_plugin/#tier4_logging_level_configure_rviz_plugin","title":"tier4_logging_level_configure_rviz_plugin","text":"This package provides an rviz_plugin that can easily change the logger level of each node.
This plugin dispatches services to the \"logger name\" associated with \"nodes\" specified in YAML, adjusting the logger level.
Warning
It is highly recommended to use this plugin when you're attempting to print any debug information. Furthermore, it is strongly advised to avoid using the logging level INFO, as it might flood the terminal with your information, potentially causing other useful information to be missed.
Note
To add your logger to the list, simply include the node_name
and logger_name
in the logger_config.yaml under the corresponding component or module. If the relevant component or module is not listed, you may add them yourself.
Note
As of November 2023, in ROS 2 Humble, users are required to initiate a service server in the node to use this feature. (This might be integrated into ROS standards in the future.) For easy service server generation, you can use the LoggerLevelConfigure utility.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#how-to-use-the-plugin","title":"How to use the plugin","text":"In RVIZ2, go to Panels and add LoggingLevelConfigureRVizPlugin. Then, search for the node you're interested in and select the corresponding logging level to print the logs.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#how-to-add-or-find-your-logger-name","title":"How to add or find your logger name","text":"Because there are no available ROS 2 CLI commands to list loggers, there isn't a straightforward way to check your logger name. Additionally, the following assumes that you already know which node you're working with.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#for-logger-as-a-class-member-variable","title":"For logger as a class member variable","text":"If your class doesn't have an rclcpp::Logger
member variable, you can start by including one yourself:
mutable rclcpp::Logger logger_;\n
If your node already has a logger, it should, under normal circumstances, be similar to the node's name.
For instance, if the node name is /some_component/some_node/node_child
, the logger_name
would be some_component.some_node.node_child
.
Should your log not print as expected, one approach is to initially set your logging level in the code to info, like so:
RCLCPP_INFO(logger_, \"Print something here.\");\n
This will result in something like the following being printed in the terminal:
[component_container_mt-36] [INFO 1711949149.735437551] [logger_name]: Print something here. (func() at /path/to/code:line_number)\n
Afterward, you can simply copy the logger_name
.
Warning
Remember to revert your code to the appropriate logging level after testing.
RCLCPP_DEBUG(logger_, \"Print something here.\");\n
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#for-libraries","title":"For libraries","text":"When dealing with libraries, such as utility functions, you may need to add the logger manually. Here's an example:
RCLCPP_WARN(\nrclcpp::get_logger(\"some_component\").get_child(\"some_child\").get_child(\"some_child2\"),\n\"Print something here.\");\n
In this scenario, the logger_name
would be some_component.some_child.some_child2
.
This plugin captures the screen of rviz.
"},{"location":"common/tier4_screen_capture_rviz_plugin/#interface","title":"Interface","text":"Name Type Description/debug/capture/video
std_srvs::srv::Trigger
Trigger to start screen capturing. /debug/capture/video_with_buffer
std_srvs::srv::Trigger
Trigger to start screen capturing with buffer. /debug/capture/screen_shot
std_srvs::srv::Trigger
Trigger to capture screen shot."},{"location":"common/tier4_screen_capture_rviz_plugin/#assumptions-known-limits","title":"Assumptions / Known limits","text":"This is only for debug or analyze. The capture screen
button is still beta version which can slow frame rate. set lower frame rate according to PC spec.
This plugin allows publishing and controlling the simulated ROS time.
"},{"location":"common/tier4_simulated_clock_rviz_plugin/#output","title":"Output","text":"Name Type Description/clock
rosgraph_msgs::msg::Clock
the current simulated time"},{"location":"common/tier4_simulated_clock_rviz_plugin/#how-to-use-the-plugin","title":"How to use the plugin","text":"Launch planning simulator with use_sim_time:=true
.
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit use_sim_time:=true\n
Warning If you launch the planning simulator without adding the tier4_simulated_clock_rviz_plugin
, your simulation will not be running. You'll not even be able to place the initial and the goal poses.
Start rviz and select panels/Add new panel.
Select tier4_clock_rviz_plugin/SimulatedClock and press OK.
Use the added panel to control how the simulated clock is published.
Warning If you set the time step too large, your simulation will go haywire.
This plugin displays the ROS message whose topic type is tier4_debug_msgs::msg::StringStamped
in rviz.
TBD.
"},{"location":"common/tier4_string_viewer_rviz_plugin/#usage","title":"Usage","text":"This plugin allows you to check which types of the dynamic object is being used by each planner.
"},{"location":"common/tier4_target_object_type_rviz_plugin/#limitations","title":"Limitations","text":"Currently, which parameters of which module to check are hardcoded. In the future, this will be parameterized using YAML.
"},{"location":"control/stop_accel_evaluator/","title":"Stop Accel Evaluator","text":""},{"location":"control/stop_accel_evaluator/#stop-accel-evaluator","title":"Stop Accel Evaluator","text":"The role of this node is to evaluate how smooth it is when a vehicle stops by calculating vehicle acceleration just before stopping.
"},{"location":"control/stop_accel_evaluator/#how-to-use","title":"How to use","text":"ros2 launch stop_accel_evaluator stop_accel_evaluator.launch.xml\n
Then you can see stop_accel_evaluator/stop_accel
topic. This topic is published only when a vehicle stops.
This is a visualization tool for vehicle commands. You need plotjuggler to plot.
The following time series data will be plotted on the left side.
The following data will be plotted on the right side.
Launch the node.
ros2 launch vehicle_cmd_analyzer vehicle_cmd_analyzer.launch.xml vehicle_model:=lexus\n
Launch plotjuggler.
ros2 run plotjuggler plotjuggler\n
Load layout.xml from File->Layout.
/vehicle_cmd_analyzer/debug_values
. This package provides tools for automatically collecting data using pure pursuit control within a specified rectangular area.
"},{"location":"control_data_collecting_tool/#overview","title":"Overview","text":"control_cmd
) and observation variables (i.e. kinematic_state
, steering_status
, etc).Data collecting approach is as follows:
Setting the trajectory from the following types of trajectories ( [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
, along_road
] ).
COURSE_NAME: eight_course
COURSE_NAME: u_shaped_return
COURSE_NAME: straight_line_positive
or COURSE_NAME: straight_line_negative
( Both \"straight_line_positive\" and \"straight_line_negative\" represent straight line courses, but the direction of travel of the course is reversed.)
COURSE_NAME: reversal_loop_circle
Drive within a circle while adding trajectories and collect data.
COURSE_NAME: along_road
Generate trajectories along the road. This is particularly useful when drawing long straight paths along the road.
In this course, data collection is conducted only on long straight trajectories, while constant velocity, velocity_on_curve
, is maintained when driving on sections that include curves.
The minimum length of these long straight trajectories can be specified using the parameter minimum_length_of_straight_line
(These two parameters velocity_on_curve
and minimum_length_of_straight_line
can be configured in ./config/course_param/along_road_param.yaml
).
Launch Autoware.
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit\n
Set an initial pose, see here.
Add the DataCollectingAreaSelectionTool and DataCollectingGoalPlugin RViz plugins by clicking the \"+\" icon at the top of the RViz window.
Launch control_data_collecting_tool.
ros2 launch control_data_collecting_tool control_data_collecting_tool.launch.py map_path:=$HOME/autoware_map/sample-map-planning\n
- If you use the along_road
course, please specify the same map for map_path
as the one used when launching Autoware. map_path
is not necessary when using courses other than along_road
.
- Control data collecting tool automatically records topics included in config/topics.yaml
when the above command is executed. Topics will be saved in rosbag2 format in the current directory.
- The data from /localization/kinematic_state
and /localization/acceleration
located in the directory (rosbag2 format) where the command is executed will be automatically loaded and reflected in the data count for these topics. (If LOAD_ROSBAG2_FILES
in config/param.yaml
is set to false
, the data is not loaded.)
Add visualization in rviz:
- /data_collecting_area
- Type: Polygon - /data_collecting_trajectory_marker_array
- Type: MarkerArray - /data_collecting_lookahead_marker_array
- Type: MarkerArray
The following actions differ depending on the selected course. If you select the trajectory from [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
], please proceed to 6.1. If you select the trajectory from [along_road
], please proceed to 6.2.
- 6.1 If you choose the trajectory from [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
], select DataCollectingAreaSelectionTool
plugin.
<img src=\"resource/DataCollectingAreaSelection.png\" width=\"480\">\n\nHighlight the data collecting area by dragging the mouse over it.\n\n<img src=\"resource/select_area.gif\" width=\"480\">\n\n> [!NOTE]\n> You cannot change the data collecting area while driving.\n
- 6.2 If you choose the trajectory from [along_road
], select DataCollectingGoalPose
plugin.
<img src=\"resource/DataCollectingGoalPose.png\" width=\"480\">\n\nBy setting the pose of the goal point, a trajectory is generated on the map.\n\n <img src=\"resource/set_trajectory_along_road.gif\" width=\"480\">\n\nAs soon as the trajectory is generated, the plot with the map and trajectory drawn on it will be created (please see the following picture).\nIn the sections labeled `velocity = const (velocity_on_curve)` in the legend, the vehicle travels at a constant velocity of `velocity_on_curve`. In the sections labeled `Data collection is conducted`, data collection is performed.\n\n <img src=\"resource/along_load_plot.png\" width=\"480\">\n\n> [!NOTE]\n> You cannot change the goal pose while driving.\n> In cases where course generation fails, which can happen under certain conditions, please reposition the vehicle or redraw the goal pose.\n
Click the LOCAL
button in AutowareStatePanel
.
Then, data collecting starts.
You can monitor the data collection status in real-time through the window that pops up when this node is launched. (From top to bottom: the speed-acceleration phase diagram, the speed-acceleration heatmap, the speed-steering angle heatmap, the speed-steer rate heatmap, and the speed-jerk heatmap.)
For the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap, the collection range can be specified by the masks located in the folder config/masks/MASK_NAME
where MASK_NAME
is a parameter specifying mask name (Please also see config/common_param.yaml
). The specified heatmap cells are designed to change from blue to green once a certain amount of data (VEL_ACC_THRESHOLD
, VEL_STEER_THRESHOLD
, VEL_ABS_STEER_RATE_THRESHOLD
) is collected. It is recommended to collect data until as many cells as possible turn green.
If you want to stop data collecting automatic driving, run the following command
ros2 topic pub /data_collecting_stop_request std_msgs/msg/Bool \"data: true\" --once\n
[!NOTE] When the car crosses the green boundary line, a similar stopping procedure will be automatically triggered.
If you want to restart data collecting automatic driving, run the following command
ros2 topic pub /data_collecting_stop_request std_msgs/msg/Bool \"data: false\" --once\n
You can create an original mask to specify the data collection range for the heatmap explained in step 7 of the \"How to Use\" section.
Change the MASK_NAME
parameter in config/common_param.yaml
from its default value of default
to any name you prefer.
Modify parameters such as VEL_ACC_THRESHOLD
, VEL_STEER_THRESHOLD
, and VEL_ABS_STEER_RATE_THRESHOLD
to determine the desired amount of data for each cell in the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap.
In the scripts/masks
directory, run
python3 mask_selector.py\n
then, matplotlib windows for selecting the collection range of the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap will be displayed, one for each.
In these windows, you can modify the heatmaps by clicking or dragging within them. Once you've made your changes, pressing Ctrl+C
in the terminal will automatically save the updated maps.
Afterward, rebuild the control_data_collecting_tool
using the following command
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=\"-w\" --symlink-install --continue-on-error --packages-up-to control_data_collecting_tool\n
and relaunch the control_data_collecting_tool with
ros2 launch control_data_collecting_tool control_data_collecting_tool.launch.py map_path:=$HOME/autoware_map/sample-map-planning\n
This will allow you to see the selected mask applied.
There are parameters that are common to all trajectories and parameters that are specific to each trajectory.
"},{"location":"control_data_collecting_tool/#common-parameters","title":"Common Parameters","text":"ROS 2 parameters which are common in all trajectories (/config/common_param.yaml
):
LOAD_ROSBAG2_FILES
bool
Flag that determines whether to load rosbag2 data or not true COURSE_NAME
string
Course name [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
, along_road
] reversal_loop_circle
NUM_BINS_V
int
Number of bins of velocity in heatmap 10 NUM_BINS_STEER
int
Number of bins of steer in heatmap 20 NUM_BINS_A
int
Number of bins of acceleration in heatmap 10 NUM_BINS_ABS_STEER_RATE
int
Number of bins of absolute value of steer rate in heatmap 5 NUM_BINS_JERK
int
Number of bins of jerk in heatmap 10 V_MIN
double
Minimum velocity in heatmap [m/s] 0.0 V_MAX
double
Maximum velocity in heatmap [m/s] 11.5 STEER_MIN
double
Minimum steer in heatmap [rad] -0.6 STEER_MAX
double
Maximum steer in heatmap [rad] 0.6 A_MIN
double
Minimum acceleration in heatmap [m/s^2] -1.0 A_MAX
double
Maximum acceleration in heatmap [m/s^2] 1.0 max_lateral_accel
double
Max lateral acceleration limit [m/s^2] 2.00 ABS_STEER_RATE_MIN
double
Minimum absolute value of steer rate in heatmap [rad/s] 0.0 ABS_STEER_RATE_MAX
double
Maximum absolute value of steer rate in heatmap [rad/s] 0.3 JERK_MIN
double
Minimum jerk in heatmap [m/s^3] -0.5 JERK_MAX
double
Maximum jerk in heatmap [m/s^3] 0.5 MASK_NAME
string
Directory name of masks for data collection default
VEL_ACC_THRESHOLD
int
Threshold of velocity-and-acc heatmap in data collection 40 VEL_STEER_THRESHOLD
int
Threshold of velocity-and-steer heatmap in data collection 20 VEL_ABS_STEER_RATE_THRESHOLD
int
Threshold of velocity-and-abs_steer_rate heatmap in data collection 20 max_lateral_accel
double
Max lateral acceleration limit [m/s^2] 2.00 lateral_error_threshold
double
Lateral error threshold where applying velocity limit [m] 1.50 yaw_error_threshold
double
Yaw error threshold where applying velocity limit [rad] 0.75 velocity_limit_by_tracking_error
double
Velocity limit applied when tracking error exceeds threshold [m/s] 1.0 mov_ave_window
int
Moving average smoothing window size 50 target_longitudinal_velocity
double
Target longitudinal velocity [m/s] 6.0 pure_pursuit_type
string
Pure pursuit type (naive
or linearized
steer control law ) linearized
wheel_base
double
Wheel base [m] 2.79 acc_kp
double
Accel command proportional gain 1.0 lookahead_time
double
Pure pursuit lookahead time [s] 2.0 min_lookahead
double
Pure pursuit minimum lookahead length [m] 2.0 linearized_pure_pursuit_steer_kp_param
double
Linearized pure pursuit steering P gain parameter 2.0 linearized_pure_pursuit_steer_kd_param
double
Linearized pure pursuit steering D gain parameter 2.0 stop_acc
double
Accel command for stopping data collecting driving [m/s^2] -2.0 stop_jerk_lim
double
Jerk limit for stopping data collecting driving [m/s^3] 5.0 lon_acc_lim
double
Longitudinal acceleration limit [m/s^2] 1.5 lon_jerk_lim
double
Longitudinal jerk limit [m/s^3] 0.5 steer_lim
double
Steering angle limit [rad] 0.6 steer_rate_lim
double
Steering angle rate limit [rad/s] 0.6 The following parameters are common to all trajectories but can be defined individually for each trajectory. (/config/course_param/COURSE_NAME_param.yaml
):
COLLECTING_DATA_V_MIN
double
Minimum velocity for data collection [m/s] 0.5 COLLECTING_DATA_V_MAX
double
Maximum velocity for data collection [m/s] 8.0 COLLECTING_DATA_A_MIN
double
Minimum velocity for data collection [m/s^2] 1.0 COLLECTING_DATA_A_MAX
double
Maximum velocity for data collection [m/s^2] -1.0 longitudinal_velocity_noise_amp
double
Target longitudinal velocity additional sine noise amplitude [m/s] 0.01 longitudinal_velocity_noise_min_period
double
Target longitudinal velocity additional sine noise minimum period [s] 5.0 longitudinal_velocity_noise_max_period
double
Target longitudinal velocity additional sine noise maximum period [s] 20.0 acc_noise_amp
double
Accel command additional sine noise amplitude [m/ss] 0.01 acc_noise_min_period
double
Accel command additional sine noise minimum period [s] 5.0 acc_noise_max_period
double
Accel command additional sine noise maximum period [s] 20.0 steer_noise_amp
double
Steer command additional sine noise amplitude [rad] 0.01 steer_noise_max_period
double
Steer command additional sine noise maximum period [s] 5.0 steer_noise_min_period
double
Steer command additional sine noise minimum period [s] 20.0"},{"location":"control_data_collecting_tool/#course-specific-parameters","title":"Course-Specific Parameters","text":"Each trajectory has specific ROS 2 parameters.
COURSE_NAME: eight_course
velocity_on_curve
double
Constant velocity on curve [m/s] 4.5 smoothing_window
double
Width of the window for trajectory smoothing 400 COURSE_NAME: u_shaped_return
velocity_on_curve
double
Constant velocity on curve [m/s] 4.5 COURSE_NAME: straight_line_positive
or COURSE_NAME: straight_line_negative
stopping_buffer_distance
double
The safety distance from end of the straight line [m] 10.0 COURSE_NAME: reversal_loop_circle
trajectory_radius
double
Radius of the circle where trajectories are generated [m] 35.0 enclosing_radius
double
Radius of the circle enclosing the generated trajectories [m] 40.0 look_ahead_distance
double
The distance referenced ahead of the vehicle for collecting steering angle data [m] 15.0 COURSE_NAME: along_road
velocity_on_curve
double
Constant velocity on curve [m/s] 3.5 stopping_buffer_distance
double
The safety distance from end of the straight line [m] 15.0 course_width
double
The width of the trajectory [m] 1.5 smoothing_window
double
Width of the window for trajectory smoothing 100 minimum_length_of_straight_line
double
The minimum length of straight line for data collection [m] 50.0 longitude
double
The longitude of the origin specified when loading the map [degree] 139.6503 latitude
double
The latitude of the origin specified when loading the map [degree] 35.6762"},{"location":"driving_environment_analyzer/","title":"Driving Environment Analyzer","text":""},{"location":"driving_environment_analyzer/#driving-environment-analyzer","title":"Driving Environment Analyzer","text":"\u3053\u306e\u30c4\u30fc\u30eb\u306fROSBAG\u306b\u542b\u307e\u308c\u308b\u8d70\u884c\u5c65\u6b74\u3092\u5143\u306b\u8d70\u884c\u74b0\u5883\u306eODD\u3092\u89e3\u6790\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3059\u3002
"},{"location":"driving_environment_analyzer/#rosbagodd","title":"ROSBAG\u306e\u7279\u5b9a\u6642\u523b\u306b\u304a\u3051\u308b\u5468\u56f2\u306eODD\u3092\u89e3\u6790\u3059\u308b\u5834\u5408","text":"\u3053\u306e\u5834\u5408\u306b\u306fRviz\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u3042\u308bdriving_environment_analyzer_rviz_panel
\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002
\u73fe\u5728\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u51fa\u529b\u53ef\u80fd\u3067\u3059\u3002
\u3053\u3061\u3089\u306e\u30c4\u30fc\u30eb\u306fautoware_launch\u306b\u542b\u307e\u308c\u308blogging_simulator
\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305a\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u304b\u3089\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
ros2 launch autoware_launch logging_simulator.launch.xml map_path:=<MAP> vehicle_model:=<VEHICLE_NAME> sensor_model:=<AIP_NAME> sensing:=false control:=false planning:=false perception:=false localization:=false system:=false
\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u8d77\u52d5\u6642\u306b\u5730\u56f3\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081ROSBAG\u306b\u5730\u56f3\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u304f\u3066\u3082ODD\u306e\u89e3\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002\uff08\u305f\u3060\u3057\u3001\u305d\u306e\u5834\u5408\u306b\u306fROSBAG\u53d6\u5f97\u306e\u969b\u306b\u4f7f\u7528\u3057\u305f\u5730\u56f3\u3092\u6307\u5b9a\u3057\u3066\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\uff09
\u6b21\u306b\u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u542b\u307e\u308c\u308b\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002Rviz\u753b\u9762\u5de6\u4e0a\u90e8\u306eAdd New Panel\u304b\u3089DrivingEnvironmentAnalyzerPanel\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067Rviz\u5de6\u4e0b\u306b\u65b0\u3057\u304f\u64cd\u4f5c\u30d1\u30cd\u30eb\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002
\u672c\u30c4\u30fc\u30eb\u306fROSBAG\u30d5\u30a1\u30a4\u30eb\u6307\u5b9a\u3057\u3066\u30ed\u30fc\u30c9\u3067\u304d\u308b\u4ed6\u3001\u8907\u6570\u306eROSBAG\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u305d\u306e\u5834\u5408\u306b\u306f\u4e8b\u524d\u306b\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067metadata.yaml
\u306e\u751f\u6210\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002
ros2 bag reindex <DIR_PATH> sqlite3
ROSBAG\u306e\u8aad\u307f\u8fbc\u307f\u304c\u5b8c\u4e86\u3057\u305f\u3089ODD\u3092\u89e3\u6790\u3057\u305f\u3044\u6642\u523b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u6642\u523b\u306e\u6307\u5b9a\u306b\u306fUnix time\u3092\u76f4\u63a5\u6307\u5b9a\u3059\u308b\u307b\u304b\u30b9\u30e9\u30a4\u30c9\u30d0\u30fc\u3082\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002\u5de6\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u65e5\u6642\u3092\u53c2\u8003\u306b\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002
\u307e\u305f\u3001\u3053\u306e\u3068\u304dViews\u306eTarget Flame\u3092base_link
\u306b\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u6307\u5b9a\u3057\u305f\u6642\u523b\u306eEGO\u306e\u4f4d\u7f6e\u3068\u5468\u56f2\u306e\u72b6\u6cc1\u3092Rviz\u3067\u53ef\u8996\u5316\u53ef\u80fd\u3067\u3059\u3002
\u6642\u523b\u306e\u6307\u5b9a\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001Set time stamp
\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3001\u6700\u5f8c\u306bAnalyze dynamic ODD factor
\u3092\u62bc\u3059\u3053\u3068\u3067\u89e3\u6790\u304c\u59cb\u307e\u308a\u307e\u3059\u3002
[rviz2-11] ***********************************************************\n[rviz2-11] ODD analysis result\n[rviz2-11] ***********************************************************\n[rviz2-11] Type: TIME SPECIFIED\n[rviz2-11] Time: 2024-04-22 14:48:05\n[rviz2-11]\n[rviz2-11]\n[rviz2-11] - EGO INFO\n[rviz2-11] [SPEED] : 0 [m/s]\n[rviz2-11] [ELEVATION ANGLE] : 0.00963597 [rad]\n[rviz2-11]\n[rviz2-11] - EGO BEHAIOVR\n[rviz2-11] [AVOIDANCE(R)] : NONE\n[rviz2-11] [AVOIDANCE(L)] : NONE\n[rviz2-11] [LANE_CHANGE(R)] : NONE\n[rviz2-11] [LANE_CHANGE(L)] : NONE\n[rviz2-11] [START_PLANNER] : SAFE: true COMMAND: deactivate\n[rviz2-11] [GOAL_PLANNER] : NONE\n[rviz2-11] [CROSSWALK] : NONE\n[rviz2-11] [INTERSECTION] : NONE\n[rviz2-11]\n[rviz2-11] - LANE INFO\n[rviz2-11] [ID] : 176126\n[rviz2-11] [WIDTH] : 4.24132 [m]\n[rviz2-11] [SHAPE] : STRAIGHT\n[rviz2-11] [RIGHT LANE NUM] : 0\n[rviz2-11] [LEFT LANE NUM] : 0\n[rviz2-11] [TOTAL LANE NUM] : 1\n[rviz2-11] [SAME DIRECTION LANE] : NONE\n[rviz2-11] [OPPOSITE DIRECTION LANE] : NONE\n[rviz2-11] [ROAD SHOULDER] : EXIST\n[rviz2-11]\n[rviz2-11] - SURROUND OBJECT NUM\n[rviz2-11] [UNKNOWN] : 0\n[rviz2-11] [CAR] : 6\n[rviz2-11] [TRUCK] : 0\n[rviz2-11] [BUS] : 3\n[rviz2-11] [TRAILER] : 2\n[rviz2-11] [MOTORCYCLE] : 0\n[rviz2-11] [BICYCLE] : 0\n[rviz2-11] [PEDESTRIAN] : 7\n[rviz2-11] ***********************************************************\n
"},{"location":"driving_environment_analyzer/#rosbagodd_1","title":"ROSBAG\u5168\u4f53\u306b\u5bfe\u3057\u3066\u7d4c\u8def\u6cbf\u3044\u306eODD\u3092\u89e3\u6790\u3059\u308b\u5834\u5408","text":"\u73fe\u5728\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u51fa\u529b\u53ef\u80fd\u3067\u3059\u3002
\u8d77\u52d5\u6642\u306bbag_path
\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u89e3\u6790\u3057\u305f\u3044ROSBAG\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u6307\u5b9a\u3082.db3\u30d5\u30a1\u30a4\u30eb\u306e\u76f4\u63a5\u6307\u5b9a\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\uff09
\u89e3\u6790\u306b\u5fc5\u8981\u306atopic\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\u3002\uff08\u4eca\u5f8c\u5897\u3048\u308b\u53ef\u80fd\u6027\u3082\u3042\u308a\u307e\u3059\u3002\uff09
/planning/mission_planning/route
/map/vector_map
\u4ee5\u4e0b\u306e\u3088\u3046\u306blaunch\u3059\u308b\u3053\u3068\u3067ODD\u306e\u89e3\u6790\u7d50\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002
ros2 launch driving_environment_analyzer driving_environment_analyzer.launch.xml use_map_in_bag:=true bag_path:=<ROSBAG>
[component_container-1] [INFO 1708999777.768870564] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.768922452] [driving_environment_analyzer]: data is ready. start ODD analysis...\n[component_container-1] [INFO 1708999777.768933574] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.768967412] [driving_environment_analyzer]: - Length of total lanes : 2357.50 [m]\n[component_container-1] [INFO 1708999777.769031174] [driving_environment_analyzer]: - Length of lane that has adjacent lane : 2080.43 [m]\n[component_container-1] [INFO 1708999777.769076141] [driving_environment_analyzer]: - Length of lane that has opposite lane : 0.00 [m]\n[component_container-1] [INFO 1708999777.769101793] [driving_environment_analyzer]: - Length of lane that has no adjacent lane : 277.07 [m]\n[component_container-1] [INFO 1708999777.769225729] [driving_environment_analyzer]: - Min lane width: 3.14 [m] Max lane width: 4.94 [m]\n[component_container-1] [INFO 1708999777.769278698] [driving_environment_analyzer]: - Max curvature: 0.007967 [1/m]\n[component_container-1] [INFO 1708999777.769293161] [driving_environment_analyzer]: - Min curve radius: 125.52 [m]\n[component_container-1] [INFO 1708999777.769336094] [driving_environment_analyzer]: - Min elevation angle: -0.033037 [rad] Max elevation angle: 0.026073 [rad]\n[component_container-1] [INFO 1708999777.769403870] [driving_environment_analyzer]: - Min speed limit: 13.89 [m/s] Max speed limit: 16.67 [m/s]\n[component_container-1] [INFO 1708999777.769424648] [driving_environment_analyzer]: - Exist traffic light: true\n[component_container-1] [INFO 1708999777.769435813] [driving_environment_analyzer]: - Exist intersection: true\n[component_container-1] [INFO 1708999777.769620035] [driving_environment_analyzer]: - Exist crosswalk: true\n[component_container-1] [INFO 1708999777.769634980] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.769642769] [driving_environment_analyzer]: complete ODD analysis. shutdown.\n[component_container-1] [INFO 1708999777.769650034] [driving_environment_analyzer]: ======================================\n
\u305f\u3060\u3057\u3001map/vector_map
\u306b\u95a2\u3057\u3066\u306fuse_map_in_bag
\u3092false
\u306b\u3059\u308b\u3053\u3068\u3067\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u5730\u56f3\u3092\u4f7f\u7528\u3057\u3066ODD\u89e3\u6790\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u305d\u306e\u5834\u5408\u3001map_path
\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u5730\u56f3\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
ros2 launch driving_environment_analyzer driving_environment_analyzer.launch.xml use_map_in_bag:=false map_path:=<MAP> bag_path:=<ROSBAG>
\u4ee5\u4e0a\u306e\u3088\u3046\u306b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067ROSBAG\u306b\u5730\u56f3\u60c5\u5831\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u306a\u304f\u3066\u3082ODD\u89e3\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002
"},{"location":"evaluation/tier4_metrics_rviz_plugin/","title":"tier4_metrics_rviz_plugin","text":""},{"location":"evaluation/tier4_metrics_rviz_plugin/#tier4_metrics_rviz_plugin","title":"tier4_metrics_rviz_plugin","text":""},{"location":"evaluation/tier4_metrics_rviz_plugin/#purpose","title":"Purpose","text":"This plugin panel to visualize planning_evaluator
output.
/planning/planning_evaluator/metrics
diagnostic_msgs::msg::DiagnosticArray
Subscribe planning_evaluator
output"},{"location":"evaluation/tier4_metrics_rviz_plugin/#howtouse","title":"HowToUse","text":"This repository consists of three main tools implemented on ROS 2.
Here you estimate the following parameters using deviation_estimator
.
Launch the node with the following command. Make sure you set the correct parameters (see Sec. 2).
ros2 launch deviation_estimator deviation_estimator.launch.xml\n
Then, you need to run either ROS bag or autoware_launch
to provide pose
and twist
to deviation_estimator
.
If you are using rosbag, it should contain the following topics:
/sensing/imu/tamagawa/imu_raw
)/vehicle/status/velocity_status
)/localization/pose_estimator/pose_with_covariance
/clock
/tf_static
(that contains transform from base_link
to imu_link
)NOTE that the pose and twist must be estimated with default parameters (see known issues
section for detail).
Play the rosbag in a different terminal:
ros2 bag play YOUR_BAG # You can also play in a faster rate, e.g. -r 5\n
You can check the results in the following three output files:
$HOME/imu_corrector.param.yaml
)$HOME/vehicle_velocity_converter.param.yaml
)$HOME/output.txt
)
Files: localized_sensors_0.db3\nBag size: 9.6 MiB\nStorage id: sqlite3\nDuration: 76.539s\nStart: Jul 8 2022 11:21:41.220 (1657246901.220)\nEnd: Jul 8 2022 11:22:57.759 (1657246977.759)\nMessages: 32855\nTopic information: Topic: /localization/pose_estimator/pose_with_covariance | Type: geometry_msgs/msg/PoseWithCovarianceStamped | Count: 2162 | Serialization Format: cdr\n Topic: /clock | Type: rosgraph_msgs/msg/Clock | Count: 57309 | Serialization Format: cdr\n Topic: /tf_static | Type: tf2_msgs/msg/TFMessage | Count: 2 | Serialization Format: cdr\n Topic: /sensing/imu/tamagawa/imu_raw | Type: sensor_msgs/msg/Imu | Count: 8076 | Serialization Format: cdr\n Topic: /vehicle/status/velocity_status | Type: autoware_vehicle_msgs/msg/VelocityReport | Count: 8275 | Serialization Format: cdr\n
sample output (output.txt)
# Validation results\n# value: [min, max]\n[OK] coef_vx: [0.99538, 0.99593]\n[OK] stddev_vx: [0.17192, 0.19161]\n[OK] angular_velocity_offset_x: [-0.00742, -0.00727]\n[OK] angular_velocity_offset_y: [-0.00119, -0.00115]\n[OK] angular_velocity_offset_z: [0.00635, 0.00641]\n[OK] angular_velocity_stddev_xx: [0.04151, 0.04258]\n[OK] angular_velocity_stddev_yy: [0.04151, 0.04258]\n[OK] angular_velocity_stddev_zz: [0.04151, 0.04258]\n
sample output (imu_corrector.param.yaml) # Estimated by deviation_estimator\n/**:\n ros__parameters:\n angular_velocity_stddev_xx: 0.01798\n angular_velocity_stddev_yy: 0.01798\n angular_velocity_stddev_zz: 0.01798\n angular_velocity_offset_x: -0.00952\n angular_velocity_offset_y: -0.00095\n angular_velocity_offset_z: 0.00607\n
sample output (vehicle_velocity_converter.param.yaml)
# Estimated by deviation_estimator\n/**:\n ros__parameters:\n speed_scale_factor: 0.99507\n velocity_stddev_xx: 0.16708\n velocity_stddev_xx: 0.1 # Default value\nframe_id: base_link # Default value\n
unit tool If you build normally, a binary will be generated under `install/deviation_estimator/lib/`.
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-up-to deviation_estimator\nsource ~/autoware/install/setup.bash\n~/autoware/install/deviation_estimator/lib/deviation_estimator/deviation_estimator_unit_tool <path_to_rosbag>\n
"},{"location":"localization/deviation_estimation_tools/ReadMe/#b-evaluation-step","title":"B. Evaluation step","text":"
Here, you can evaluate the estimated standard deviation and bias using a package deviation_evaluator
. Execute the following command:
ros2 launch deviation_evaluator deviation_evaluator.launch.xml map_path:=MAP_PATH rviz:=true in_imu:=YOUR_IMU_TOPIC_NAME in_wheel_odometry:=YOUR_VELOCITY_TOPIC_NAME\nros2 bag play YOUR_BAG\n
"},{"location":"localization/deviation_estimation_tools/ReadMe/#c-visualization-step","title":"C. Visualization step","text":"After the evaluation, run the following command to generate the final results in $HOME/deviation_evaluator_sample
.
pip3 install -r requirements.txt\nros2 launch deviation_evaluator deviation_evaluation_visualizer.launch.xml\n
Done!
"},{"location":"localization/deviation_estimation_tools/ReadMe/#2-description-of-deviation-estimator","title":"2. Description of Deviation Estimator","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#overview","title":"Overview","text":"The Deviation Estimator estimates the standard deviation and bias for velocity and yaw bias, by comparing the velocity and gyro observations with ground truth poses (e.g. from LiDAR-based localization).
Here are some assumptions made for input data:
The deviation_estimator
can be launched with the following command.
ros2 launch deviation_estimator deviation_estimator.launch.xml\nros2 bag play YOUR_BAG # You can also play in a faster rate, e.g. -r 5\n
The parameters and input topic names can be seen in the deviation_estimator.launch.xml
file. YOUR_BAG
should include all the required inputs written below.
in_pose_with_covariance |
geometry_msgs::msg::PoseWithCovarianceStamped` Input pose in_imu
sensor_msgs::msg::Imu
Input IMU data in_wheel_odometry
autoware_vehicle_msgs::msg::VelocityReport
Input wheel odometry"},{"location":"localization/deviation_estimation_tools/ReadMe/#output","title":"Output","text":"Name Type Description /estimated_stddev_vx
std_msgs::msg::Float64
estimated standard deviation of vx /estimated_stddev_angular_velocity
geometry_msgs/msg/Vector3
estimated standard deviation of angular velocity /estimated_coef_vx
std_msgs::msg::Float64
coef of vx /estimated_bias_angular_velocity
geometry_msgs/msg/Vector3
bias of angular velocity"},{"location":"localization/deviation_estimation_tools/ReadMe/#parameters-for-deviation-estimator","title":"Parameters for deviation estimator","text":"Name Type Description Default value show_debug_info bool Flag to display debug info true t_design double Maximum expected duration of dead-reckoning [s] 10.0 x_design double Maximum expected trajectory length of dead-reckoning [m] 30.0 time_window double Estimation period [s] 4.0 results_dir string Text path where the estimated results will be stored \"$(env HOME)\" gyro_estimation.only_use_straight bool Flag to use only straight sections for gyro estimation true gyro_estimation.only_use_moving bool Flag to use only moving sections for gyro estimation true gyro_estimation.only_use_constant_velocity bool Flag to use only constant velocity sections for gyro estimation true velocity_estimation.only_use_straight bool Flag to use only straight sections for velocity estimation true velocity_estimation.only_use_moving bool Flag to use only moving sections for velocity estimation true velocity_estimation.only_use_constant_velocity bool Flag to use only constant velocity sections for velocity estimation true"},{"location":"localization/deviation_estimation_tools/ReadMe/#functions","title":"Functions","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#bias-estimation","title":"Bias estimation","text":"By assuming that the pose information is a ground truth, the node estimates the bias of velocity and yaw rate.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#standard-deviation-estimation","title":"Standard deviation estimation","text":"The node also estimates the standard deviation of velocity and yaw rate. This can be used as a parameter in ekf_localizer
. Note that the final estimation takes into account the bias.
You can use deviation_evaluator
for evaluating the estimated standard deviation parameters. This can be run with the following command:
ros2 launch deviation_evaluator deviation_evaluator.launch.xml map_path:=MAP_PATH rviz:=true in_imu:=YOUR_IMU_TOPIC_NAME in_wheel_odometry:=YOUR_VELOCITY_TOPIC_NAME\nros2 bag play YOUR_BAG\n
All the ros2bag and config files will be stored in $HOME/deviation_evaluator_sample
(you can change this with save_dir
parameter in the launch file).
deviation_evaluator
supports rviz visualization. To use this feature, set rviz:=true
and map_path:=/path/to/map_folder
.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#b-check-the-compatibility-with-a-threshold-in-localization_error_monitor","title":"B. Check the compatibility with a threshold in
localization_error_monitor
","text":"The deviation_evaluator
also checks the compatibility of the estimated parameters and the threshold in localization_error_monitor
.
Concretely, it checks if the two following statement holds:
localization_error_monitor
would NOT diagnose the system as WARN
nor ERROR
as long as the NDT is available.localization_error_monitor
detects the anomaly with a recall over 0.99.Given the result of this validation, the users can verify that the estimated parameters in deviation_estimator
can be safely applied to Autoware.
Here, note that the localization_error_monitor
treat the system as an anomaly if either of error along long-axis of confidence ellipse or error along lateral direction is over threshold. Please refer to the package in autoware.universe for detail.
deviation_evaluator
","text":"The architecture of deviation_evaluator
is shown below. It launches two ekf_localizer
, one for ground truth estimation and one for (partially) dead reckoning estimation. Outputs of both ekf_localizer
will be recorded and analyzed with deviation_evaluation_visualizer
.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#inputs-outputs_1","title":"Inputs / Outputs","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#input_1","title":"Input","text":"Name Type Description
in_ndt_pose_with_covariance
geometry_msgs::msg::PoseWithCovarianceStamped
Input pose in_ekf_dr_odom
nav_msgs::msg::Odometry
dead-reckoning EKF outputs in_ekf_gt_odom
nav_msgs::msg::Odometry
ground-truth EKF outputs"},{"location":"localization/deviation_estimation_tools/ReadMe/#output_1","title":"Output","text":"Name Type Description out_pose_with_covariance_dr
geometry_msgs::msg::PoseWithCovarianceStamped
Output pose (for dead reckoning ekf_localizer
) out_pose_with_covariance_gt
geometry_msgs::msg::PoseWithCovarianceStamped
Output pose (for ground truth ekf_localizer
) out_initial_pose_with_covariance
geometry_msgs::msg::PoseWithCovarianceStamped
Output initial pose (for both ekf_localizer
)"},{"location":"localization/deviation_estimation_tools/ReadMe/#parameters-for-deviation-evaluator","title":"Parameters for deviation evaluator","text":"Name Type Description Default value rviz bool Show rviz if true false map_path string Path to the directory where map data (OpenStreetMap or .osm data) is saved \"\" save_dir string Output directory where figures, parameter files, and scores are saved \"$(env HOME)/deviation_evaluator_sample\" period double [s] Duration of cycle 10 (in config/deviation_evaluator.yaml
) cut double [s] Duration of ndt-cut-off 9 (in config/deviation_evaluator.yaml
)"},{"location":"localization/deviation_estimation_tools/ReadMe/#4-reflect-the-estimated-parameters-in-autoware","title":"4. Reflect the estimated parameters in Autoware","text":"The results of deviation_estimator
is stored in two scripts:
imu_corrector
param file (default: $HOME/imu_corrector.param.yaml
)vehicle_velocity_converter
param file (default: $HOME/vehicle_velocity_converter.param.yaml
)Please modify your Autoware configuration so that it will launch using the above two parameter files.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#5-known-issues","title":"5. Known issues","text":"deviation_evaluator.png
generated by deviation_evaluation_visualizer
may diverge, possibly due to the large covariance caused by a failure in localization.ekf_localizer
in deviation_evaluator
may not start properly. As for now, please launch deviation_evaluator
first and then run ros2 bag play
to provide pose and twist data.This package is for preprocessing the lanelet map.
"},{"location":"map/autoware_lanelet2_map_validator/","title":"autoware_lanelet2_map_validator","text":""},{"location":"map/autoware_lanelet2_map_validator/#autoware_lanelet2_map_validator","title":"autoware_lanelet2_map_validator","text":"autoware_lanelet2_map_validator
is a tool to validate Lanelet2 maps to ensure that Autoware can work properly with it.
This validation tool is an extension of lanelet2_validation so that Autoware specific rules can be applied. As you can see from the codes in the src/validators
directory, the group of validators belong to this tool inherits the lanelet::validation::MapValidator class from the original lanelet2_validation
. Therefore, we believe that reading the source code of the lanelet2_validation
will help you understand this tool better.
Note that this validator is still on construction that there are only a few rules and a template to define those rules.
The official Autoware requirements for lanelet2 maps are described in Vector Map creation requirement specifications (in Autoware Documentation).
"},{"location":"map/autoware_lanelet2_map_validator/#design-concept","title":"Design concept","text":"The autoware_lanelet2_map_validator
is designed to validate .osm
map files by using and extending the lanelet2_validation package for Autoware.
autoware_lanelet2_map_validator
takes the lanelet2 map (.osm file) and requirement set (JSON file, optional) as the input, and output validation results to the console.
If a requirement set is given, autoware_lanelet2_map_validator
also outputs validation results reflecting the input requirement set. See \"Run with a requirement set\" for further information, \"Input file\" to understand the input format, and \"Output file\" to understand the output format.
Basically, you can use the following command to execute autoware_lanelet2_map_validator
. However, note that autoware_lanelet2_map_validator
is a ROS/rclcpp free tool, so you can just run the built executable whatever way.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-all-validators","title":"Run ALL validators","text":"You can use autoware_lanelet2_map_validator
with the following command. This will run all validators including the default built-in validators in the lanelet2_validation.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-a-specific-validator","title":"Run a specific validator","text":"autoware_lanelet2_map_validator
consists of multiple small validators in order to realize complex requirements with a combination of them. If you want to call a few validators, you can select them with the --validator, -v
option.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs --validator mapping.traffic_light.missing_regulatory_elements\n
You can get a list of available validators with the --print
option. (-p
is for --projection
)
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --print\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-with-a-requirement-set","title":"Run with a requirement set","text":"autoware_lanelet2_map_validator
can manage to run a group of validators by a list of validator names. autoware_lanelet2_map_validator
will scan through the input JSON file given by the --input_requirements, -i
option, and output the validation results to the directory given by the --output_directory, -o
option. The output filename will be lanelet2_validation_results.json
.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs --input_requirements autoware_requirements_set.json --output_directory ./\n
(Short version)
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator -m path/to_your/lanelet2_map.osm -p mgrs -i autoware_requirements_set.json -o ./\n
"},{"location":"map/autoware_lanelet2_map_validator/#input-file","title":"Input file","text":"The JSON file input should follow the structure like this example.
{\n\"requirements\": [\n{\n\"id\": \"vm-02-02\",\n\"validators\": [\n{\n\"name\": \"mapping.stop_line.missing_regulatory_elements\"\n}\n]\n},\n{\n\"id\": \"vm-04-01\",\n\"validators\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n},\n{\n\"name\": \"mapping.crosswalk.regulatory_element_details\",\n\"prerequisites\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n}\n]\n}\n]\n},\n{\n\"id\": \"vm-05-01\",\n\"validators\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n},\n{\n\"name\": \"mapping.traffic_light.regulatory_element_details\",\n\"prerequisites\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n}\n]\n}\n]\n}\n]\n}\n
requirements
field.requirements
field MUST be a list of requirements. A requirement MUST haveid
: The id of the requirement. Its name is arbitrary.validators
: A list of validators that structures the requirement.name
field.--print
option.prerequisites
to each validator. Then, the validator will only be run when the prerequisites pass the validation.prerequisites
field, you can add forgive_warnings: true
in order to run the validator even if the prerequisites output warning issues. (Error issues from prerequisites will still skip the validation.). Note that NOT writing the forgive_warnings
field and writing forgive_warnings: false
means the same.version
) besides requirements
.When the input_requirements
is thrown to autoware_lanelet2_map_validator
, it will output a lanelet2_validation_results.json
file which looks like the following example.
{\n\"requirements\": [\n{\n\"id\": \"vm-02-02\",\n\"passed\": true,\n\"validators\": [\n{\n\"name\": \"mapping.stop_line.missing_regulatory_elements\",\n\"passed\": true\n}\n]\n},\n{\n\"id\": \"vm-04-01\",\n\"passed\": false,\n\"validators\": [\n{\n\"issues\": [\n{\n\"id\": 163,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 164,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 165,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 166,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\",\n\"passed\": false\n},\n{\n\"issues\": [\n{\n\"id\": 0,\n\"message\": \"Prerequisites didn't pass\",\n\"primitive\": \"primitive\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.crosswalk.regulatory_element_details\",\n\"passed\": false,\n\"prerequisites\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n}\n]\n}\n]\n},\n{\n\"id\": \"vm-05-01\",\n\"passed\": false,\n\"validators\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\",\n\"passed\": true\n},\n{\n\"issues\": [\n{\n\"id\": 9896,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9918,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9838,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9874,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.traffic_light.regulatory_element_details\",\n\"passed\": false,\n\"prerequisites\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n}\n]\n}\n]\n}\n]\n}\n
lanelet2_validation_results.json
inherits the JSON file of input_requirements
and add results to it.autoware_lanelet2_map_validator
adds a boolean passed
field to each requirement. If all validators of the requirement have been passed, the passed
field of the requirement will be true
(false
if not).passed
field is also given to each validator. If the validator found any issues the passed
field will turn to be false
(true
if not), and adds an issues
field which is a list of issues found. Each issue contains information of severity
, primitive
, id
, and message
.-h, --help
Explains about this tool and show a list of options --print
Print all available checker without running them -m, --map_file
Path to the map to be validated -i, --input_requirements
Path to the JSON file where the list of requirements and validations is written -o, --output_directory
Directory to save the list of validation results in a JSON format -v, --validator
Comma separated list of regexes to filter the applicable validators. Will run all validators by default. Example: mapping.*
to run all checks for the mapping -p, --projector
Projector used for loading lanelet map. Available projectors are: mgrs
, utm
, and transverse_mercator
. -l, --location
Location of the map (for instantiating the traffic rules), e.g. de for Germany --participants
Participants for which the routing graph will be instantiated (default: vehicle) --lat
latitude coordinate of map origin. This is required for the transverse mercator and utm projector. --lon
longitude coordinate of map origin. This is required for the transverse mercator and utm projector."},{"location":"map/autoware_lanelet2_map_validator/#available-validators","title":"Available validators","text":"Since there will be hundreds of validators in the future, the documents for each validator should categorized in the docs file. The directory structure should be the same to that of the src/validators
directory.
If you want to contribute to autoware_lanelet2_map_validator
, please check out the how_to_contribute first.
This is a table describing the correspondence between the validators that each requirement consists of. The \"Validators\" column will be blank if it hasn't be implemented.
ID Requirements Validators vm-01-01 Lanelet basics vm-01-02 Allowance for lane changes vm-01-03 Linestring sharing vm-01-04 Sharing of the centerline of lanes for opposing traffic vm-01-05 Lane geometry vm-01-06 Line position (1) vm-01-07 Line position (2) vm-01-08 Line position (3) vm-01-09 Speed limits vm-01-10 Centerline vm-01-11 Centerline connection (1) vm-01-12 Centerline connection (2) vm-01-13 Roads with no centerline (1) vm-01-14 Roads with no centerline (2) vm-01-15 Road shoulder vm-01-16 Road shoulder Linestring sharing vm-01-17 Side strip vm-01-18 Side strip Linestring sharing vm-01-19 Walkway vm-02-01 Stop line alignment (Not detectable) vm-02-02 Stop sign mapping.stop_line.missing_regulatory_elements vm-03-01 Intersection criteria vm-03-02 Lanelet's turn direction and virtual vm-03-03 Lanelet width in the intersection vm-03-04 Lanelet creation in the intersection vm-03-05 Lanelet division in the intersection vm-03-06 Guide lines in the intersection vm-03-07 Multiple lanelets in the intersection vm-03-08 Intersection Area range mapping.intersection.intersection_area_validity, mapping.intersection.intersection_area_segment_type vm-03-09 Range of Lanelet in the intersection vm-03-10 Right of way (with signal) vm-03-11 Right of way (without signal) vm-03-12 Right of way supplements vm-03-13 Merging from private area, sidewalk vm-03-14 Road marking vm-03-15 Exclusive bicycle lane vm-04-01 Traffic light basics mapping.traffic_light.missing_regulatory_elements, mapping.traffic_light.regulatory_element_details, mapping.traffic_light.missing_referrers vm-04-02 Traffic light position and size mapping.traffic_light.correct_facing (Undone) vm-04-03 Traffic light lamps vm-05-01 Crosswalks across the road mapping.crosswalk.missing_regulatory_elements, mapping.crosswalk.regulatory_element_details vm-05-02 Crosswalks with pedestrian signals vm-05-03 Deceleration for safety at crosswalks vm-05-04 Fences vm-06-01 Buffer Zone vm-06-02 No parking signs vm-06-03 No stopping signs vm-06-04 No stopping sections vm-06-05 Detection area vm-07-01 Vector Map creation range vm-07-02 Range of detecting pedestrians who enter the road vm-07-03 Guardrails, guard pipes, fences vm-07-04 Ellipsoidal height"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/","title":"How to contribute to `autoware_lanelet2_map_validator`","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#how-to-contribute-to-autoware_lanelet2_map_validator","title":"How to contribute toautoware_lanelet2_map_validator
","text":"Your contribution is welcome to achieve a broad view of validation for lanelet2 maps. This document gives you the instructions on how to add a validator to autoware_lanelet2_map_validator
. Please take a look at the Design Concept and follow the Contribution Guide.
The main goal of autoware_lanelet2_map_validator
is to validate whether the lanelet2 map matches the vector map requirements for Autoware. autoware_lanelet2_map_validator
achieves this by running a list of small validators. In other words, each vector map requirement will be validated by one or more validators. It is recommended to keep validators small and they don't have to be unique to a specific requirement so that we can broaden the expression of map requirements. (It doesn't mean that a validator should output only one kind of error!)
The list of small validators will be defined as a JSON file (see autoware_requirement_set.json
for an example), and the output will also be a JSON file that appends validation results to a copy of the input. See How to use autoware_lanelet2_map_validator
for further information about how the input and output are processed.
Please note that the validators are categorized according to the vector map requirements written in the Autoware Documentation. If there are any suggestions for new categories please let the pull request (PR) reviewers know. The available categories as of now are
This section is aimed at contributors who want to add their own validators. If you want to change the core process of autoware_lanelet2_map_validator
, please open a PR and discuss it with the maintainers.
autoware_lanelet2_map_validator
is based on the Lanelet2 library provided by fzi-forschungszentrum-informatik.
Contributors are encouraged to make their validators by following the class structure shown in validator_template.cpp
and validator_template.hpp
. Looking at other implementations may also be helpful.
.cpp
) must belong to src/validators/\\<CATEGORY\\>/
.hpp
) must belong to src/include/lanelet2_map_validator/validators/\\<CATEGORY\\>/
.hpp
file).aaa.bbb.ccc
aaa
) must be either mapping
, routing
or rule
bbb
) should be either general
, lane
, stop_line
, intersection
, traffic_light
, crosswalk
, area
, others
.Bbb.Ccc-001
)operator()
function that outputs an Issues (a.k.a vector\\<Issue>) object. Not all of the implementation has to be written in the operator; you can privately define and use functions in your validator class.autoware_lanelet2_map_validator
outputs issue codes, please add an issue code prefix with square brackets on top of your issue message.append_issue_code_prefix
function to generate the issue code prefix.001
to your issue code.Contributors must also provide test codes to ensure your validator is working properly and be able to be tested again when changes occur to the validator in the future.
"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-path-structure_1","title":"Restrictions for path structure","text":".cpp
) must belong to test/src/
.test_<ORIGINAL_SOURCE_NAME>.cpp
.osm
) for testing must belong to test/data/map/\\<CATEGORY\\>/
.json
) for testing must belong to test/data/json/
colcon test
. It is strongly recommended to use the gtest (googletest) format.MapValidationTester
class may be useful to inherit common map loading process.test/data/map/sample_map.osm
. If sample_map.osm
violates the validation or doesn't contain the primitive to validate, please fix or add the primitives to it.CMakeLists.txt
using the add_validation_test
function.Please check that the autoware_lanelet2_map_validator
works perfectly.
colcon test --packages-select autoware_lanelet2_map_validator --event-handlers console_cohesion+
and confirm that all tests pass.ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator -p mgrs -m <PATH_TO_sample_map.osm> -i <PATH_TO_autoware_requirement_set.json> -o ./\n
"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#4-write-a-document","title":"4. Write a document","text":"Contributors must provide documentation to explain what the validator can do. The document must explain the following.
In addition, add a link of the document to the table Relationship between requirements and validators in the main README.md
to let the users know which map requirement your validator relates with.
Submit a pull request to the autowarefoundation/autoware_tools repository.
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/","title":"missing_regulator_elements_for_crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#missing_regulator_elements_for_crosswalk","title":"missing_regulator_elements_for_crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#validator-name","title":"Validator name","text":"mapping.crosswalk.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#feature","title":"Feature","text":"This validator checks whether each crosswalk
subtype lanelet has a relevant regulatory element. Required information for a crosswalk is written in the Autoware documentation.
The output issue marks \"lanelet\" as the primitive, and the lanelet ID is written together as ID.
Issue Code Message Severity Description Approach Crosswalk.MissingRegulatoryElements-001 \"No regulatory element refers to this crosswalk.\" Error There is acrosswalk
subtype lanelet that hasn't been referred to any regulatory element. Create a crosswalk
subtype regulatory element and refer to the crosswalk lanelet."},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#related-source-codes","title":"Related source codes","text":"mapping.crosswalk.regulatory_element_details
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#feature","title":"Feature","text":"This validator checks whether the details in the crosswalk
subtype regulatory elements are valid. Required information for a crosswalk is written in the Autoware documentation. This validator checks eight types of issues.
The output issue marks \"lanelet\", \"linestring\" or \"regulatory_element\" as the primitive, and the regulatory element ID is written together as ID.
Issue Code Message Severity Primitive Description Approach Crosswalk.RegulatoryElementDetails-001 \"Regulatory element of crosswalk must have lanelet of crosswalk(refers).\" Error regulatory element There is acrosswalk
subtype regulatory element that has no refers
es. Write refers
referring to a crosswalk
subtype lanelet in the regulatory element Crosswalk.RegulatoryElementDetails-002 \"Regulatory element of crosswalk must have only one lanelet of crosswalk(refers).\" Error regulatory element There is a crosswalk
subtype regulatory element that has multiple refers
es. A crosswalk
subtype regulatory element can have only one refers
. Remove the refers
that is not a crosswalk lanelet. Crosswalk.RegulatoryElementDetails-003 \"Regulatory element of crosswalk does not have stop line(ref_line).\" Info regulatory element There is a crosswalk
subtype regulatory element that has no ref_line
s Generally, there should be a stop line for the crosswalk. Be sure that the stop line exists or doesn't. Crosswalk.RegulatoryElementDetails-004 \"Regulatory element of crosswalk is nice to have crosswalk_polygon.\" Warning regulatory element There is a crosswalk
subtype regulatory element that has no crosswalk_polygon
s. It is recommended to surround a crosswalk with a crosswalk_polygon
. Create one and add a crosswalk_polygon
role member to the regulatory element with the polygon ID. Crosswalk.RegulatoryElementDetails-005 \"Regulatory element of crosswalk must have only one crosswalk_polygon.\" Error regulatory element There is a crosswalk
subtype regulatory element that has multiple crosswalk_polygon
s. Only one crosswalk_polygon
is allowed per crosswalk. Remove the unnecessary ones. Crosswalk.RegulatoryElementDetails-006 \"Refers of crosswalk regulatory element must have type of crosswalk.\" Error lanelet There is a crosswalk
subtype regulatory element whose refers
is not a crosswalk
subtype lanelet. Check that the refers
is a crosswalk
subtype lanelet Crosswalk.RegulatoryElementDetails-007 \"ref_line of crosswalk regulatory element must have type of stopline.\" Error linestring There is a crosswalk
subtype regulatory element whose ref_line
is not a stop_line
type linestring. Check that the ref_line
is a stop_line
type linestring Crosswalk.RegulatoryElementDetails-008 \"Crosswalk polygon of crosswalk regulatory element must have type of crosswalk_polygon.\" Error polygon There is a crosswalk
subtype regulatory element whose crosswalk_polygon
is not a crosswalk_polygon
type polygon. Check that the crosswalk_polygon
mentioned in the regulatory element refers to a crosswalk_polygon
type area."},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#related-source-codes","title":"Related source codes","text":"mapping.intersection.intersection_area_segment_type
"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#feature","title":"Feature","text":"This validator check whether each intersection_area
type polygon is made from points that belong to road_border
type linestrings or the starting/ending edge of a lanelet.
This is achieved by the following procedure.
road_border
type linestrings within or intersecting the 2D bounding box.The validator outputs the following issue with the corresponding ID of the primitive.
Issue Code Message Severity Primitive Description Approach Intersection.IntersectionAreaSegmentType-001 \"This intersection area is not made by points from road_border linestrings or lanelet edges. (Point ID: \\<POINT ID LIST>)\" Error Polygon Theintersection_area
polygon has points that doesn't belong to road_border
type linestrings or lanelet edges. The violating points are listed up at \\<POINT ID LIST>. Ensure that the intersection_area
is formed ONLY by road_border
linestrings and lanelet edges."},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#supplementary-information","title":"Supplementary information","text":"Note that this validator only examines what type of linestring the points constituting the polygon belongs to, and doesn't examine they have a valid connection. Use the mapping.intersection.intersection_area_validity
to check whether the polygon is boost::geometry::is_valid()
.
mapping.intersection.intersection_area_validity
"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#feature","title":"Feature","text":"This validator check whether each intersection_area
type polygon satisfies boost::geometry::is_valid
.
The validator outputs the following issue with the corresponding ID of the primitive.
Issue Code Message Severity Primitive Description Approach Intersection.IntersectionAreaValidity-001 \"This intersection_area doesn't satisfy boost::geometry::is_valid (reason: \\<MESSAGE>) Error Polygon Theintersection_area
polygon didn't satisfy boost::geometry::is_valid
. There are several reasons expected and it is written in \"(reason: \\<MESSAGE>)\". The \\<MESSAGE> is a copy of the output message defined in the boost::geometry
library."},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#related-source-codes","title":"Related source codes","text":"mapping.stop_line.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#feature","title":"Feature","text":"This validator checks whether each stop_line
type linestring has a relevant regulatory element. Required information for a stop line is written in the Autoware documentation.
The output issue marks \"linestring\" as the primitive, and the linestring ID is written together as ID.
Issue Code Message Severity Description Approach StopLine.MissingRegulatoryElements-001 \"No regulatory element refers to this stop line.\" Error There is astop_line
type linestring that hasn't been referred to any regulatory element. Create a regulatory element that refers to this stop line."},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.missing_referrers
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether each traffic_light
type regulatory element has been referred by at least one lanelet.
traffic_light
type regulatory element that hasn't been referred by any lanelet. The lanelet that might be controlled by the traffic light must refer this regulatory element."},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether each traffic_light
type linestring has a relevant regulatory element. Required information for traffic lights is written in the Autoware documentation.
The output issue marks \"linestring\" as the primitive, and the linestring ID is written together as ID.
Issue Code Message Severity Description Approach TrafficLight.MissingRegulatoryElements-001 \"No regulatory element refers to this traffic light.\" Error There is atraffic_light
type linestring that hasn't been referred to any regulatory element. Create a traffic_light
subtype regulatory element that refers to this linestring"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.regulatory_element_details
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether the details in the traffic_light
subtype regulatory elements are valid. Required information for traffic lights is written in the Autoware documentation. This validator checks four types of issues.
The output issue marks \"linestring\" or \"regulatory element\" as the primitive, and the lanelet ID is written together as ID.
Issue Code Message Severity Primitive Description Approach TrafficLight.RegulatoryElementDetails-001 \"Regulatory element of traffic light must have a stop line(ref_line).\" Error regulatory element There is atraffic_light
subtype regulatory element that has no ref_line
s Add ref_line
to the regulatory element that refers to the id of the stop line linestring. TrafficLight.RegulatoryElementDetails-002 \"Refers of traffic light regulatory element must have type of traffic_light.\" Error linestring There is a traffic_light
subtype regulatory element whose refers
is not a traffic_light
type linestring. Check that the refers
in the regulatory element is a traffic_light
type linestring. TrafficLight.RegulatoryElementDetails-003 \"ref_line of traffic light regulatory element must have type of stop_line.\" Error linestring There is a traffic_light
subtype regulatory element whose ref_line
is not a stop_line
type linestring. Check that the ref_line
in the regulatory element is a stop_line
type linestring"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.correct_facing
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#recommended-prerequisite-validators","title":"Recommended prerequisite validators","text":"This validator checks whether each traffic_light
linestring is drawn with the correct direction, because the linestring direction describes the facing of the traffic_light. If the traffic light is facing to the viewer, the traffic light linestring must be drawn from the left point to the right point seen from the viewer. Note that this validator only check traffic lights whose subtype are red_yellow_green
. This validator checks five types of issues. The former three issues are related to prerequisites to perform correct validation rather than direct validation results of the traffic light facing. The latter two issues mention to the traffic light facing.
All output issues specify the traffic_light \"linestring\" or the traffic_light \"regulatory_element\" as the primitive, and the primitive ID will be specified as the ID.
Issue Code Message Severity Primitive Description Approach TrafficLight.CorrectFacing-001 \"Lanelets referring this traffic_light have several divergent starting lines\" Info Linestring Atraffic_light
subtype regulatory element may be referred by multiple lanelets. This warning appears when the starting line of those lanelets (which tends to be the same or similar) diverge too much. This hardly happens, but maybe the referring lanelet is completely wrong or the traffic light cannot be seen from the starting edge of the referring lanelet. TrafficLight.CorrectFacing-002 \"The linestring direction seems to be wrong.\" Error Linestring This traffic_light
type linestring is drawn with the wrong direction. Fix the traffic light linestring so that it is drawn from the left to the right seen from the stop line. TrafficLight.CorrectFacing-003 \"The linestring direction has been judged as both correct and wrong.\" Warning Linestring The validator cannot judge whether the direction of this traffic_light
type linestring is correct. (Mostly they are correct.) This occurs from special regulatory element definitions and technical issues written below. This occurs in the Difficult Case written below. This validator currently cannot determine that the traffic light facing is correct in this case, so please recheck it by yourself and please ignore it if it is correct."},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#procedure","title":"Procedure","text":"This flow chart shows the simplified procedure how the validation is done.
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#difficult-cases","title":"Difficult cases","text":"Currently, this validator assumes that all traffic lights in the same regulatory element has the same facing. However, there might be cases that this assumption doesn't hold, and this is only when traffic lights on the other side of the road is in the same regulatory element. It is hard to tell that this traffic light is for this road or the opposite road since the facing of the traffic light is unknown yet, so this validator keeps its ambiguity for now. This kind of traffic light will be judged as correct from the this side but not from the other side, and it will be misjudged oppositely if the traffic light linestring id drawn wrong. This validator will throws a warning for this case and tells the user to check it by their own.
We assume that this kind of traffic light could be found only a few, but if you feel this concerning you can remove the traffic light on the other road from the regulatory element. This workaround affects nothing if your planning module doesn't utilize the information that the traffic light on the other road has the same timing of lighting.
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#related-source-codes","title":"Related source codes","text":"This is a tool for processing pcd files, and it can perform the following functions:
Currently, only pcl::PointXYZ
and pcl::PointXYZI
are supported. Any PCD will be loaded as those two types.
This tool can be used with files that have data fields other than XYZI
(e.g., XYZRGB
) and files that only contain XYZ
.
XYZI
are ignored during loading.XYZ
-only data, the intensity
field is assigned 0.cd <PATH_TO_pilot-auto.*> # OR <PATH_TO_autoware>\ncd src/\ngit clone git@github.com:autowarefoundation/autoware_tools.git\ncd ..\ncolcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --catkin-skip-building-tests --symlink-install --packages-up-to autoware_pointcloud_divider\n
"},{"location":"map/autoware_pointcloud_divider/#usage","title":"Usage","text":"Select directory, process all files found with find $INPUT_DIR -name \"*.pcd\"
.
ros2 launch autoware_pointcloud_divider pointcloud_divider.launch.xml input_pcd_or_dir:=<INPUT_DIR> output_pcd_dir:=<OUTPUT_DIR> prefix:=<PREFIX>\n
Name Description INPUT_DIR Directory that contains all PCD files OUTPUT_DIR Output directory name PREFIX Prefix of output PCD file name INPUT_DIR
and OUTPUT_DIR
should be specified as absolute paths.
NOTE: The folder OUTPUT_DIR
is auto generated. If it already exists, all files within that folder will be deleted before the tool runs. Hence, users should backup the important files in that folder if necessary.
How the point cloud is processed.
How the PCD file is named
"},{"location":"map/autoware_pointcloud_divider/#parameter-example","title":"Parameter example","text":"Dividing point clouds without downsampling
use_large_grid: false\nleaf_size: -1.0 # any negative number\ngrid_size_x: 20\ngrid_size_y: 20\n
Dividing and downsampling point clouds
use_large_grid: false\nleaf_size: 0.2\ngrid_size_x: 20\ngrid_size_y: 20\n
The metadata file should be named metadata.yaml
. It contains the following fields:
x_resolution
: The resolution along the X-axis.y_resolution
: The resolution along the Y-axis.Additionally, the file contains entries for individual point cloud files (.pcd
files) and their corresponding grid coordinates. The key is the file name, and the value is a list containing the X and Y coordinates of the lower-left corner of the grid cell associated with that file. The grid cell's boundaries can be calculated using the x_resolution
and y_resolution
values.
For example:
x_resolution: 100.0\ny_resolution: 150.0\nA.pcd: [1200, 2500] # -> 1200 <= x <= 1300, 2500 <= y <= 2650\nB.pcd: [1300, 2500] # -> 1300 <= x <= 1400, 2500 <= y <= 2650\nC.pcd: [1200, 2650] # -> 1200 <= x <= 1300, 2650 <= y <= 2800\nD.pcd: [1400, 2650] # -> 1400 <= x <= 1500, 2650 <= y <= 2800\n
"},{"location":"map/autoware_pointcloud_divider/#license","title":"LICENSE","text":"Parts of files grid_info.hpp, pcd_divider.hpp, and pcd_divider.cpp are copied from MapIV's pointcloud_divider and are under BSD-3-Clauses license. The remaining code are under Apache License 2.0
"},{"location":"map/autoware_pointcloud_merger/","title":"autoware_pointcloud_merger","text":""},{"location":"map/autoware_pointcloud_merger/#autoware_pointcloud_merger","title":"autoware_pointcloud_merger","text":"This is a tool for processing pcd files, and it can perform the following functions:
Currently, only pcl::PointXYZ
and pcl::PointXYZI
are supported. Any PCD will be loaded as those two types .
This tool can be used with files that have data fields other than XYZI
(e.g., XYZRGB
) and files that only contain XYZ
.
XYZI
are ignored during loading.XYZ
-only data, the intensity
field is assigned 0.cd <PATH_TO_pilot-auto.*> # OR <PATH_TO_autoware>\ncd src/\ngit clone git@github.com:autowarefoundation/autoware_tools.git\ncd ..\ncolcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --catkin-skip-building-tests --symlink-install --packages-up-to autoware_pointcloud_merger\n
"},{"location":"map/autoware_pointcloud_merger/#usage","title":"Usage","text":"Merger all PCD files from the input directory into a single output PCD
ros2 launch autoware_pointcloud_merger pointcloud_merger.launch.xml input_pcd_dir:=<INPUT_DIR> output_pcd:=<OUTPUT_PCD>\n
Name Description INPUT_DIR Directory that contains all input PCD files OUTPUT_PCD Name of the output PCD file INPUT_DIR
and OUTPUT_PCD
should be specified as absolute paths.
Parts of files pcd_merger.hpp, and pcd_merger.cpp are copied from MapIV's pointcloud_divider and are under BSD-3-Clauses license. The remaining code are under Apache License 2.0
"},{"location":"planning/autoware_planning_data_analyzer/","title":"Planning Data Analyzer","text":""},{"location":"planning/autoware_planning_data_analyzer/#planning-data-analyzer","title":"Planning Data Analyzer","text":""},{"location":"planning/autoware_planning_data_analyzer/#usage","title":"Usage","text":"ros2 launch autoware_planning_data_analyzer behavior_analyzer.launch.xml bag_path:=<ROSBAG>\n
"},{"location":"planning/autoware_planning_data_analyzer/#output","title":"Output","text":"Name Type Description ~/output/manual_metrics
tier4_debug_msgs::msg::Float32MultiArrayStamped
Metrics calculated from the driver's driving trajectory. ~/output/system_metrics
tier4_debug_msgs::msg::Float32MultiArrayStamped
Metrics calculated from the autoware output. ~/output/manual_score
tier4_debug_msgs::msg::Float32MultiArrayStamped
Driving scores calculated from the driver's driving trajectory. ~/output/system_score
tier4_debug_msgs::msg::Float32MultiArrayStamped
Driving scores calculated from the autoware output."},{"location":"planning/autoware_route_client/","title":"Route Client","text":""},{"location":"planning/autoware_route_client/#route-client","title":"Route Client","text":"This package contains a tool to send request to set route.
"},{"location":"planning/autoware_route_client/#usage","title":"Usage","text":""},{"location":"planning/autoware_route_client/#prepare-a-route-file","title":"Prepare a route file","text":"Prepare a YAML file containing route information. The file format is like following:
goal:\nposition:\nx: 0.0\ny: 0.0\nz: 0.0\norientation:\nx: 0.0\ny: 0.0\nz: 0.0\nw: 0.0\nsegments:\n- preferred:\nid: 0\ntype: lane\nalternatives:\n- id: 1\ntype: lane\n- preferred:\nid: 2\ntype: lane\nalternatives: []\n- preferred:\nid: 3\ntype: lane\nalternatives:\n- id: 4\ntype: lane\n
"},{"location":"planning/autoware_route_client/#send-request-to-set-route","title":"Send request to set route","text":"Execute following command.
ros2 run autoware_route_client route_client.py <path_to_yaml_file>\n
"},{"location":"planning/autoware_rtc_replayer/","title":"rtc_replayer","text":""},{"location":"planning/autoware_rtc_replayer/#rtc_replayer","title":"rtc_replayer","text":""},{"location":"planning/autoware_rtc_replayer/#purpose","title":"Purpose","text":"The current issue for RTC commands is that service is not recorded to rosbag, so it's very hard to analyze what was happened exactly. So this package makes it possible to replay rtc commands service from rosbag rtc status topic to resolve that issue.
"},{"location":"planning/autoware_rtc_replayer/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"planning/autoware_rtc_replayer/#input","title":"Input","text":"Name Type Description/debug/rtc_status
tier4_rtc_msgs::msg::CooperateStatusArray CooperateStatusArray that is recorded in rosbag"},{"location":"planning/autoware_rtc_replayer/#output","title":"Output","text":"Name Type Description /api/external/set/rtc_commands
tier4_rtc_msgs::msg::CooperateCommands CooperateCommands that is replayed by this package"},{"location":"planning/autoware_rtc_replayer/#inner-workings-algorithms","title":"Inner-workings / Algorithms","text":""},{"location":"planning/autoware_rtc_replayer/#assumptions-known-limits","title":"Assumptions / Known limits","text":"This package can't replay CooperateCommands correctly if CooperateStatusArray is not stable. And this replay is always later one step than actual however it will not affect much for behavior.
"},{"location":"planning/autoware_rtc_replayer/#future-extensions-unimplemented-parts","title":"Future extensions / Unimplemented parts","text":"tbd.
"},{"location":"planning/planning_debug_tools/","title":"Planning Debug Tools","text":""},{"location":"planning/planning_debug_tools/#planning-debug-tools","title":"Planning Debug Tools","text":"This package contains several planning-related debug tools.
The trajectory_analyzer
visualizes the information (speed, curvature, yaw, etc) along the trajectory. This feature would be helpful for purposes such as \"investigating the reason why the vehicle decelerates here\". This feature employs the OSS PlotJuggler.
This is to visualize stop factor and reason. see the details
"},{"location":"planning/planning_debug_tools/#how-to-use","title":"How to use","text":"please launch the analyzer node
ros2 launch planning_debug_tools trajectory_analyzer.launch.xml\n
and visualize the analyzed data on the plot juggler following below.
"},{"location":"planning/planning_debug_tools/#setup-plotjuggler","title":"setup PlotJuggler","text":"For the first time, please add the following code to reactive script and save it as the picture below! (Looking for the way to automatically load the configuration file...)
You can customize what you plot by editing this code.
in Global code
behavior_path = '/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id/debug_info'\nbehavior_velocity = '/planning/scenario_planning/lane_driving/behavior_planning/path/debug_info'\nmotion_avoid = '/planning/scenario_planning/lane_driving/motion_planning/path_optimizer/trajectory/debug_info'\nmotion_smoother_latacc = '/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_lateral_acc_filtered/debug_info'\nmotion_smoother = '/planning/scenario_planning/trajectory/debug_info'\n
in function(tracker_time)
PlotCurvatureOverArclength('k_behavior_path', behavior_path, tracker_time)\nPlotCurvatureOverArclength('k_behavior_velocity', behavior_velocity, tracker_time)\nPlotCurvatureOverArclength('k_motion_avoid', motion_avoid, tracker_time)\nPlotCurvatureOverArclength('k_motion_smoother', motion_smoother, tracker_time)\n\nPlotVelocityOverArclength('v_behavior_path', behavior_path, tracker_time)\nPlotVelocityOverArclength('v_behavior_velocity', behavior_velocity, tracker_time)\nPlotVelocityOverArclength('v_motion_avoid', motion_avoid, tracker_time)\nPlotVelocityOverArclength('v_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotVelocityOverArclength('v_motion_smoother', motion_smoother, tracker_time)\n\nPlotAccelerationOverArclength('a_behavior_path', behavior_path, tracker_time)\nPlotAccelerationOverArclength('a_behavior_velocity', behavior_velocity, tracker_time)\nPlotAccelerationOverArclength('a_motion_avoid', motion_avoid, tracker_time)\nPlotAccelerationOverArclength('a_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotAccelerationOverArclength('a_motion_smoother', motion_smoother, tracker_time)\n\nPlotYawOverArclength('yaw_behavior_path', behavior_path, tracker_time)\nPlotYawOverArclength('yaw_behavior_velocity', behavior_velocity, tracker_time)\nPlotYawOverArclength('yaw_motion_avoid', motion_avoid, tracker_time)\nPlotYawOverArclength('yaw_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotYawOverArclength('yaw_motion_smoother', motion_smoother, tracker_time)\n\nPlotCurrentVelocity('localization_kinematic_state', '/localization/kinematic_state', tracker_time)\n
in Function Library
function PlotValue(name, path, timestamp, value)\n new_series = ScatterXY.new(name)\n index = 0\n while(true) do\n series_k = TimeseriesView.find( string.format( \"%s/\"..value..\"[%d]\", path, index) )\n series_s = TimeseriesView.find( string.format( \"%s/arclength[%d]\", path, index) )\n series_size = TimeseriesView.find( string.format( \"%s/size\", path) )\n\n if series_k == nil or series_s == nil then break end\n\n k = series_k:atTime(timestamp)\n s = series_s:atTime(timestamp)\n size = series_size:atTime(timestamp)\n\n if index >= size then break end\n\n new_series:push_back(s,k)\n index = index+1\n end\nend\n\nfunction PlotCurvatureOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"curvature\")\nend\n\nfunction PlotVelocityOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"velocity\")\nend\n\nfunction PlotAccelerationOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"acceleration\")\nend\n\nfunction PlotYawOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"yaw\")\nend\n\nfunction PlotCurrentVelocity(name, kinematics_name, timestamp)\n new_series = ScatterXY.new(name)\n series_v = TimeseriesView.find( string.format( \"%s/twist/twist/linear/x\", kinematics_name))\n if series_v == nil then\n print(\"error\")\n return\n end\n v = series_v:atTime(timestamp)\n new_series:push_back(0.0, v)\nend\n
Then, run the plot juggler.
"},{"location":"planning/planning_debug_tools/#how-to-customize-the-plot","title":"How to customize the plot","text":"Add Path/PathWithLaneIds/Trajectory topics you want to plot in the trajectory_analyzer.launch.xml
, then the analyzed topics for these messages will be published with TrajectoryDebugINfo.msg
type. You can then visualize these data by editing the reactive script on the PlotJuggler.
The version of the plotJuggler must be > 3.5.0
This node prints the velocity information indicated by planning/control modules on a terminal. For trajectories calculated by planning modules, the target velocity on the trajectory point which is closest to the ego vehicle is printed. For control commands calculated by control modules, the target velocity and acceleration is directly printed. This feature would be helpful for purposes such as \"investigating the reason why the vehicle does not move\".
You can launch by
ros2 run planning_debug_tools closest_velocity_checker.py\n
"},{"location":"planning/planning_debug_tools/#trajectory-visualizer","title":"Trajectory visualizer","text":"The old version of the trajectory analyzer. It is written in Python and more flexible, but very slow.
"},{"location":"planning/planning_debug_tools/#for-other-use-case-experimental","title":"For other use case (experimental)","text":"To see behavior velocity planner's internal plath with lane id add below example value to behavior velocity analyzer and set is_publish_debug_path: true
crosswalk ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/crosswalk/debug_info'\nintersection ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/intersection/debug_info'\ntraffic_light ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/traffic_light/debug_info'\nmerge_from_private ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/merge_from_private/debug_info'\nocclusion_spot ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/occlusion_spot/debug_info'\n
PlotVelocityOverArclength('v_crosswalk', crosswalk, tracker_time)\nPlotVelocityOverArclength('v_intersection', intersection, tracker_time)\nPlotVelocityOverArclength('v_merge_from_private', merge_from_private, tracker_time)\nPlotVelocityOverArclength('v_traffic_light', traffic_light, tracker_time)\nPlotVelocityOverArclength('v_occlusion', occlusion_spot, tracker_time)\n\nPlotYawOverArclength('yaw_crosswalk', crosswalk, tracker_time)\nPlotYawOverArclength('yaw_intersection', intersection, tracker_time)\nPlotYawOverArclength('yaw_merge_from_private', merge_from_private, tracker_time)\nPlotYawOverArclength('yaw_traffic_light', traffic_light, tracker_time)\nPlotYawOverArclength('yaw_occlusion', occlusion_spot, tracker_time)\n\nPlotCurrentVelocity('localization_kinematic_state', '/localization/kinematic_state', tracker_time)\n
"},{"location":"planning/planning_debug_tools/#perception-reproducer","title":"Perception reproducer","text":"This script can overlay the perception results from the rosbag on the planning simulator synchronized with the simulator's ego pose.
"},{"location":"planning/planning_debug_tools/#how-it-works","title":"How it works","text":"Whenever the ego's position changes, a chronological reproduce_sequence
queue is generated based on its position with a search radius (default to 2 m). If the queue is empty, the nearest odom message in the rosbag is added to the queue. When publishing perception messages, the first element in the reproduce_sequence
is popped and published.
This design results in the following behavior:
-b
, --bag
: Rosbag file path (required)-d
, --detected-object
: Publish detected objects-t
, --tracked-object
: Publish tracked objects-r
, --search-radius
: Set the search radius in meters (default: 1.5m). If set to 0, always publishes the nearest message-c
, --reproduce-cool-down
: Set the cool down time in seconds (default: 80.0s)-p
, --pub-route
: Initialize localization and publish a route based on poses from the rosbag-n
, --noise
: Apply perception noise to objects when publishing repeated messages (default: True)-f
, --rosbag-format
: Specify rosbag data format (default: \"db3\")-v
, --verbose
: Output debug dataFirst, launch the planning simulator, and put the ego pose. Then, run the script according to the following command.
By designating a rosbag, perception reproducer can be launched.
ros2 run planning_debug_tools perception_reproducer.py -b <bag-file>\n
You can designate multiple rosbags in the directory.
ros2 run planning_debug_tools perception_reproducer.py -b <dir-to-bag-files>\n
Instead of publishing predicted objects, you can publish detected/tracked objects by designating -d
or -t
, respectively.
The --pub-route
option enables automatic route generation based on the rosbag data. When enabled, the script:
Example usage with route publication:
ros2 run planning_debug_tools perception_reproducer.py -b <bag-file> -p\n
"},{"location":"planning/planning_debug_tools/#perception-replayer","title":"Perception replayer","text":"A part of the feature is under development.
This script can overlay the perception results from the rosbag on the planning simulator.
In detail, this script publishes the data at a certain timestamp from the rosbag. The timestamp will increase according to the real time without any operation. By using the GUI, you can modify the timestamp by pausing, changing the rate or going back into the past.
"},{"location":"planning/planning_debug_tools/#how-to-use_2","title":"How to use","text":"First, launch the planning simulator, and put the ego pose. Then, run the script according to the following command.
By designating a rosbag, perception replayer can be launched. The GUI is launched as well with which a timestamp of rosbag can be managed.
ros2 run planning_debug_tools perception_replayer.py -b <bag-file>\n
You can designate multiple rosbags in the directory.
ros2 run planning_debug_tools perception_replayer.py -b <dir-to-bag-files>\n
Instead of publishing predicted objects, you can publish detected/tracked objects by designating -d
or -t
, respectively.
The purpose of the Processing Time Subscriber is to monitor and visualize the processing times of various ROS 2 topics in a system. By providing a real-time terminal-based visualization, users can easily confirm the processing time performance as in the picture below.
You can run the program by the following command.
ros2 run planning_debug_tools processing_time_checker.py -f <update-hz> -m <max-bar-time>\n
This program subscribes to ROS 2 topics that have a suffix of processing_time_ms
.
The program allows users to customize two parameters via command-line arguments:
By adjusting these parameters, users can tailor the display to their specific monitoring needs.
"},{"location":"planning/planning_debug_tools/#logging-level-updater","title":"Logging Level Updater","text":"The purpose of the Logging Level Updater is to update the logging level of the planning modules via ROS 2 service. Users can easily update the logging level for debugging.
ros2 run planning_debug_tools update_logger_level.sh <module-name> <logger-level>\n
<logger-level>
will be DEBUG
, INFO
, WARN
, or ERROR
.
When you have a typo of the planning module, the script will show the available modules.
"},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/","title":"Doc stop reason visualizer","text":""},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/#stop_reason_visualizer","title":"stop_reason_visualizer","text":"This module is to visualize stop factor quickly without selecting correct debug markers. This is supposed to use with virtual wall marker like below.
"},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/#how-to-use","title":"How to use","text":"Run this node.
ros2 run planning_debug_tools stop_reason_visualizer_exe\n
Add stop reason debug marker from rviz.
Note: ros2 process can be sometimes deleted only from killall stop_reason_visualizer_exe
Reference
"},{"location":"simulator/simulator_compatibility_test/","title":"simulator_compatibility_test","text":""},{"location":"simulator/simulator_compatibility_test/#simulator_compatibility_test","title":"simulator_compatibility_test","text":""},{"location":"simulator/simulator_compatibility_test/#purpose","title":"Purpose","text":"Test procedures (e.g. test codes) to check whether a certain simulator is compatible with Autoware
"},{"location":"simulator/simulator_compatibility_test/#overview-of-the-test-codes","title":"Overview of the test codes","text":"File structure
source install/setup.bash\ncolcon build --packages-select simulator_compatibility_test\ncd src/universe/autoware.universe/tools/simulator_test/simulator_compatibility_test/test_sim_common_manual_testing\n
To run each test case manually
"},{"location":"simulator/simulator_compatibility_test/#test-case-1","title":"Test Case #1","text":"Run the test using the following command
python -m pytest test_01_control_mode_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_02_change_gear_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_03_longitudinal_command_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_04_lateral_command_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_05_turn_indicators_cmd_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_06_hazard_lights_cmd_and_report.py\n
Check if expected behavior is created within the simulator
source install/setup.bash\ncolcon build --packages-select simulator_compatibility_test\ncd src/universe/autoware.universe/tools/simulator_test/simulator_compatibility_test/test_morai_sim\n
Detailed process
(WIP)
"},{"location":"simulator/simulator_compatibility_test/#inner-workings-algorithms","title":"Inner-workings / Algorithms","text":""},{"location":"simulator/simulator_compatibility_test/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"simulator/simulator_compatibility_test/#input","title":"Input","text":"Name Type Description/vehicle/status/control_mode
autoware_vehicle_msgs::msg::ControlModeReport
for [Test Case #1] /vehicle/status/gear_status
autoware_vehicle_msgs::msg::GearReport
for [Test Case #2] /vehicle/status/velocity_status
autoware_vehicle_msgs::msg::VelocityReport
for [Test Case #3] /vehicle/status/steering_status
autoware_vehicle_msgs::msg::SteeringReport
for [Test Case #4] /vehicle/status/turn_indicators_status
autoware_vehicle_msgs::msg::TurnIndicatorsReport
for [Test Case #5] /vehicle/status/hazard_lights_status
autoware_vehicle_msgs::msg::HazardLightsReport
for [Test Case #6]"},{"location":"simulator/simulator_compatibility_test/#output","title":"Output","text":"Name Type Description /control/command/control_cmd
autoware_control_msgs/Control
for [Test Case #3, #4] /control/command/control_mode_cmd
autoware_vehicle_msgs/ControlModeCommand
for [Test Case #1] /control/command/gear_cmd
autoware_vehicle_msgs/GearCommand
for [Test Case #2] /vehicle/status/steering_status
autoware_vehicle_msgs/TurnIndicatorsCommand
for [Test Case #5] /control/command/turn_indicators_cmd
autoware_vehicle_msgs/HazardLightsCommand
for [Test Case #6]"},{"location":"simulator/simulator_compatibility_test/#parameters","title":"Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#node-parameters","title":"Node Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#core-parameters","title":"Core Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#assumptions-known-limits","title":"Assumptions / Known limits","text":"None.
"},{"location":"system/rqt_diagnostic_graph_monitor/","title":"System diagnostic monitor","text":""},{"location":"vehicle/calibration_adapter/","title":"calibration_adapter","text":""},{"location":"vehicle/calibration_adapter/#calibration_adapter","title":"calibration_adapter","text":""},{"location":"vehicle/calibration_adapter/#purpose","title":"Purpose","text":"This package relay topic to Float32Stamped
type of \"autoware_calibration_msgs\" to generalize calibration topics.
calibration_adapter_node_base
This node has general calibration topics for all vehicle interfacecalibration_adapter
This node has vehicle specific or temporary topics to calibrate and this node inherit calibration_adapter_node_base
.TBD.
"},{"location":"vehicle/parameter_estimator/","title":"ParameterEstimation","text":""},{"location":"vehicle/parameter_estimator/#parameterestimation","title":"ParameterEstimation","text":"This parameter estimation node estimates a default parameters from inputs for steer offset,wheel base and gear ratio.
"},{"location":"vehicle/parameter_estimator/#io","title":"I/O","text":""},{"location":"vehicle/parameter_estimator/#input","title":"input","text":"
The following topics are used to estimate the parameters.
/sensing/imu/imu_data
: used as vehicle angular velocity/vehicle/status/twist
: used as vehicle velocity/vehicle/status/steering
: used as vehicle steering angle (Only used in Steer Offset Estimator & Wheel Base Estimator)/calibration/vehicle/handle_status
: used as vehicle handle angle (Only used in Gear Estimator)/vehicle/engage
: used to check the driving operation statusThe following topics are the output
/vehicle/status/gear_ratio
/vehicle/status/steering_offset
/vehicle/status/wheel_base
For users, the EstimationResult.msg
output contains the following items:
Note: You need to build the Autoware beforehand.
The following command will start the parameter estimation node.
ros2 launch parameter_estimator parameter_estimator.launch.xml vehicle_model:=lexus\n
ros2 launch parameter_estimator parameter_estimator.launch.xml vehicle_model:=lexus select_steer_offset_estimator:=false select_wheel_base_estimator:=false\n
If you want to launch with Rviz, use the following launch file. Currently unavailable
# Launch parameter Estimator with the Autoware\n$ ros2 launch parameter_estimator parameter_estimator_with_simulation.launch.xml map_path:=.../kashiwanoha2/ vehicle_model:=jpntaxi sensor_model:=aip_xx1 rviz:=true\n
"},{"location":"vehicle/parameter_estimator/#how-to-check-the-estimated-parameters","title":"How to check the estimated parameters","text":"The necessary information is plotted in the plot_juggler, which displays the following information from top to bottom.
You need to adjust the value of (valid_min_)
or (valid_max_)
. according to the standard deviation to determine the validity of the data.
Check the estimation results.
It is preferable to use the _mean for the calibration results.
The parameters estimation starts when enough data is stored. The output value is zero until it is ready.
"},{"location":"vehicle/parameter_estimator/#error-for-parameters-estimation","title":"Error for parameters estimation","text":"Check the statistics of the errors in the input/output data after the parameter estimation.
If these values are large, the model needs to be reconsidered.
"},{"location":"vehicle/parameter_estimator/#data-preprocessing","title":"Data preprocessing","text":""},{"location":"vehicle/parameter_estimator/#examine-the-results-of-processing-the-input-data","title":"Examine the results of processing the input data","text":"Data that do not satisfy the following conditions are considered invalid and will not be used for estimation.
The role of this node is to visualize pitch of driving route. The source of pitch is tf (map->base_link
).
ros2 launch pitch_checker pitch_checker.launch.xml\n
"},{"location":"vehicle/pitch_checker/#save-file-to-data","title":"save file to data","text":"ros2 service call /pitch_checker/save_flag std_srvs/srv/Trigger {}\n
(The pitch data is saved at <YOUR WORKSPACE>/install/pitch_checker/share/pitch_checker/pitch.csv
)
ros2 launch pitch_checker view_pitch.launch.xml\n
The view_pitch.launch
loads the data stored in the default path and visualize it is as below. The pitch angle [rad] is shown on the left plot, the value of the z-coordinate [m] on the right plot.
This delay estimation node estimates a time delay from inputs to outputs for accel, brake, and steer.
"},{"location":"vehicle/time_delay_estimator/#input-response","title":"Input / Response","text":"
The following topics are used to estimate the delay.
/vehicle/raw_vehicle_cmd
: used as accel/brake target value/control/control_cmd
: used as steer target value/calibration/vehicle/accel_status
: used as accel observed value/calibration/vehicle/brake_status
: used as brake observed value/vehicle/status/steering
: used as steer observed value/calibration/vehicle/is_engage
: used to check the driving operation statusoutput.
For users, the TimeDelay.msg
output contains the following items:
In addition, the following items are output for developers.
These values can be confirmed in rqt_multiplot, described below.
"},{"location":"vehicle/time_delay_estimator/#how-to-run-time-delay-estimator","title":"How to Run Time Delay Estimator","text":"Note: You need to build the Autoware beforehand.
The following command will start the delay estimation node.
ros2 launch time_delay_estimator time_delay_estimator.launch.xml is_showing_debug_graph:=true\n
"},{"location":"vehicle/time_delay_estimator/#change-the-estimator-type","title":"Change the estimator type","text":"
You can decide the estimator_type with the following parameters
Note: Only \"cc\" Cross Correlation will display the debug graph
"},{"location":"vehicle/time_delay_estimator/#how-to-check-the-estimated-delay","title":"How to check the estimated delay","text":"The necessary information is plotted in the rqt_multiplot, which displays the following information from top to bottom.
Check the input and output data. It is also used to adjust parameters of the estimation logic.
*_min_stddev_threshold
).*_min_stddev_threshold
).(*) Smoothing, normalization, and resampling are applied as preprocessing.
You need to adjust the value of *_min_stddev_threshold
according to the standard deviation to determine the validity of the data.
Check the estimation results.
It is preferable to use the average for the calibration results.
The delay estimation starts when enough data is stored. The output value is zero until it is ready.
"},{"location":"vehicle/time_delay_estimator/#confidence-level-of-the-estimation-results","title":"Confidence level of the estimation results","text":"The reliability of the estimated time delay can be analyzed by the correlation coefficient.
"},{"location":"vehicle/time_delay_estimator/#inputoutput-error-after-delay-compensation","title":"Input/output error after delay compensation","text":"
Check the statistics of the errors in the input/output data after the time delay compensation.
If these values are large, the input/output model needs to be reconsidered.
"},{"location":"vehicle/time_delay_estimator/#data-preprocessing","title":"Data preprocessing","text":""},{"location":"vehicle/time_delay_estimator/#examine-the-results-of-processing-the-input-data","title":"Examine the results of processing the input data","text":"Data that do not satisfy the following conditions are considered invalid and will not be used for estimation.
Before running the node, you need to set the is_showing_debug_info
parameter in the yaml file to true for a visualization. Then the internal values of accel/brake/steer/test are plotted on the python visualization tool. If the superposition of input and response is good, we can say that we have a good estimation.
"},{"location":"vehicle/time_delay_estimator/#test-wip","title":"Test WIP","text":"
Execute the following command to perform an estimation on the sample data. This test should be used to see the characteristics when the parameters are changed.
roslaunch time_delay_estimator test_time_delay_estimator.launch\n
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"autoware_tools","text":""},{"location":"#autoware_tools","title":"autoware_tools","text":"This is a repository for keeping packages that are not needed at runtime, including packages for benchmarking, debugging, tuning, calibrating, etc.
"},{"location":"CODE_OF_CONDUCT/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#contributor-covenant-code-of-conduct","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#our-pledge","title":"Our Pledge","text":"We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
"},{"location":"CODE_OF_CONDUCT/#our-standards","title":"Our Standards","text":"Examples of behavior that contributes to a positive environment for our community include:
Examples of unacceptable behavior include:
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
"},{"location":"CODE_OF_CONDUCT/#scope","title":"Scope","text":"This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
"},{"location":"CODE_OF_CONDUCT/#enforcement","title":"Enforcement","text":"Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at conduct@autoware.org. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
"},{"location":"CODE_OF_CONDUCT/#enforcement-guidelines","title":"Enforcement Guidelines","text":"Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
"},{"location":"CODE_OF_CONDUCT/#1-correction","title":"1. Correction","text":"Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
"},{"location":"CODE_OF_CONDUCT/#2-warning","title":"2. Warning","text":"Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
"},{"location":"CODE_OF_CONDUCT/#3-temporary-ban","title":"3. Temporary Ban","text":"Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
"},{"location":"CODE_OF_CONDUCT/#4-permanent-ban","title":"4. Permanent Ban","text":"Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
"},{"location":"CODE_OF_CONDUCT/#attribution","title":"Attribution","text":"This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
"},{"location":"CONTRIBUTING/","title":"Contributing","text":""},{"location":"CONTRIBUTING/#contributing","title":"Contributing","text":"See https://autowarefoundation.github.io/autoware-documentation/main/contributing/.
"},{"location":"DISCLAIMER/","title":"DISCLAIMER","text":"DISCLAIMER
\u201cAutoware\u201d will be provided by The Autoware Foundation under the Apache License 2.0. This \u201cDISCLAIMER\u201d will be applied to all users of Autoware (a \u201cUser\u201d or \u201cUsers\u201d) with the Apache License 2.0 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
AUTOWARE FOUNDATION MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH RESPECT TO PROVIDING AUTOWARE (the \u201cService\u201d) 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.
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.
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 \u201cIndemnified Parties\u201d) 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.
"},{"location":"autoware_dependency_checker/","title":"autoware_dependency_checker","text":""},{"location":"autoware_dependency_checker/#autoware_dependency_checker","title":"autoware_dependency_checker","text":"This package provides a script for checking whether each package's dependencies listed in a package.xml are used or not. Currently, it mainly checks packages that start with autoware_
.
The script will try to match the dependencies and the headers by reading the dependencies listed in package.xml and the included headers in the source files.
Some dependency in package.xml
and the included header might differ. The following table shows the matching between dependency names and headers:
# build\n$ cd to/autoware_tools\n$ colcon build --symlink-install --cmake-args --packages-up-to autoware_dependency_checker\n$ source\n\n# run\n$ cd to/your/autoware\n$ ros2 run autoware_dependency_checker dependency_checker.sh\n\n# run in some package\n$ cd to/some/package\n$ ros2 run autoware_dependency_checker dependency_checker.sh\n
"},{"location":"bag2lanelet/","title":"bag2lanelet","text":""},{"location":"bag2lanelet/#bag2lanelet","title":"bag2lanelet","text":"This package generates a lanelet map necessary for Autoware's autonomous driving from rosbag data containing information about Localization (/tf
). This enables autonomous driving based on manual driving information.
The provided functionalities are as follows:
base_link
.As an example, the process of lanelet generation based on driving trajectories from the planning simulator is performed as follows. Typically, the expectation is to use rosbag data from manual driving, rather than from the planning simulator.
Firstly, you need to run the planning_simulator following the planning_simulator tutorial in Autoware Documentation. The process would be, install Autoware, download the maps, run the planning_simulator, and start autonomous driving. Make sure to save the rosbag during this driving session using the following command:
ros2 bag record /tf -o /tmp/bag2lanelet_sample.bag\n
After completing the drive, you can run the bag2lanelet.py
script. This requires specifying the output directory, lane width and MGRS coordinates:
./bag2lanelet.py /tmp/bag2lanelet_sample.bag /tmp/bag2lanelet_sample -l 3.0 -m 54SUE\n
The map will be saved in the specified directory, following the naming convention <date>-lanelet2_map.osm
. The map generated will appear like this. You can see the example result in ./example/lanelet2_map.osm.
When you relaunch the planning_simulator with the new lanelet2 map, you will see the following.
Please note that at this stage, although this map works with Autoware, the shape of the lanes will appear jagged. (Refer to the 'Limitations' section for more details.) While this is an issue that should be addressed in the future, it can currently be resolved by loading it in Vector Map Builder as follows.
Following the documentation of the Vector Map Builder, import the generated Lanelet2 map. You can see the refined lane on the application.
Then, Export the map. You can run the planning_simulator with the refined lanelet2 map and see how it goes on the Rviz.
"},{"location":"bag2lanelet/#requirements","title":"Requirements","text":"
sudo apt update\nsudo apt install ros-humble-tf-transformations ros-humble-tf-transformations\npip install -r requirements.txt\n
"},{"location":"bag2lanelet/#usage","title":"Usage","text":"Check ./bag2lanelet.py --help
For given lane width and MGRS coordinate.
./bag2lanelet.py /home/autoware/rosbag/sample . -l 3.0 -m 54SUE\n
"},{"location":"bag2lanelet/#generate-trajectory-file-for-vector-map-builder","title":"generate trajectory file for Vector Map Builder","text":"./bag2trajectory.py /home/autoware/rosbag/sample sample.csv\n
"},{"location":"bag2lanelet/#limitations","title":"Limitations","text":"Here is the limitations of this package. Contributions to further improvements are more than welcome.
This package provides tools for debugging Autoware.
"},{"location":"common/autoware_debug_tools/#processing-time-visualizer","title":"Processing Time Visualizer","text":"This tool visualizes tier4_debug_msgs/msg/ProcessingTimeTree
messages.
Run the following command to start the visualizer.
ros2 run autoware_debug_tools processing_time_visualizer\n
Select a topic to visualize.
Then, the visualizer will show the processing time tree.
Running with --summarize
, it will output the summarized information.
> ros2 run autoware_debug_tools processing_time_visualizer --summarize\n\nobjectsCallback: 17.99 [ms], run count: 1\n \u251c\u2500\u2500 removeStaleTrafficLightInfo: 0.00 [ms], run count: 1\n \u251c\u2500\u2500 updateObjectData: 0.03 [ms], run count: 13\n \u251c\u2500\u2500 getCurrentLanelets: 4.81 [ms], run count: 13\n \u2502 \u251c\u2500\u2500 checkCloseLaneletCondition: 2.43 [ms], run count: 130\n \u2502 \u251c\u2500\u2500 isDuplicated: 0.02 [ms], run count: 17\n \u2502 \u2514\u2500\u2500 calculateLocalLikelihood: 0.66 [ms], run count: 12\n \u251c\u2500\u2500 updateRoadUsersHistory: 0.30 [ms], run count: 13\n \u2514\u2500\u2500 getPredictedReferencePath: 5.47 [ms], run count: 5\n \u251c\u2500\u2500 predictObjectManeuver: 0.40 [ms], run count: 5\n \u2502 \u2514\u2500\u2500 predictObjectManeuverByLatDiffDistance: 0.34 [ms], run count: 5\n \u2502 \u2514\u2500\u2500 calcRightLateralOffset: 0.03 [ms], run count: 12\n \u251c\u2500\u2500 calculateManeuverProbability: 0.01 [ms], run count: 5\n \u2514\u2500\u2500 addReferencePaths: 4.66 [ms], run count: 15\n \u251c\u2500\u2500 updateFuturePossibleLanelets: 0.08 [ms], run count: 8\n \u2514\u2500\u2500 convertPathType: 4.29 [ms], run count: 8\n
"},{"location":"common/autoware_debug_tools/#system-usage-monitor","title":"System Usage Monitor","text":"The purpose of the System Usage Monitor is to monitor, visualize and publish the CPU usage and memory usage of the ROS processes. By providing a real-time terminal-based visualization, users can easily confirm the cpu and memory usage as in the picture below.
You can run the program by the following command.
ros2 run autoware_debug_tools system_usage_monitor\n
"},{"location":"common/autoware_debug_tools/#system-performance-plotter","title":"System Performance Plotter","text":"This script plots the following metrics by each Autoware's module.
Run the following commands according to your purpose.
# plot processing time\nros2 run autoware_debug_tools processing_time_plotter <bag-path>\n\n# plot CPU usage\nros2 run autoware_debug_tools cpu_usage_plotter <bag-path>\n\n# plot memory usage\nros2 run autoware_debug_tools memory_usage_plotter <bag-path>\n
There are several options.
-c
:all
, planning
, system
, etc).-n <number>
:<number>
critical modules.-g <text>
<text>
.-y <val>
<val>
.ros2 run autoware_debug_tools processing_time_plotter <bag-path> -c planning -g behavior_path -y 300\n
ros2 run autoware_debug_tools cpu_usage_plotter <bag-path> -n 20\n
"},{"location":"common/autoware_debug_tools/#rosout-log-reconstructor","title":"Rosout Log Reconstructor","text":"This script shows the log from the /rosout
topic on the terminal.
ros2 run autoware_debug_tools rosout_log_reconstructor\n
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/","title":"Topic Connection Checker","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-connection-checker","title":"Topic Connection Checker","text":"The Topic Connection Checker is an advanced diagnostic tool designed to simulate how an Autoware Engineer debugs an Autoware system in the field when certain topics are not functioning as expected. This tool is essential for identifying and resolving issues in the complex topic network of an Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#overview","title":"Overview","text":"The tool consists of two main components:
These components work together to provide a comprehensive debugging experience, following a systematic approach to identify and locate problematic topics in the Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#debugging-process","title":"Debugging Process","text":"The Topic Connection Checker follows a step-by-step process that mimics an experienced Autoware Engineer's debugging approach:
Steps 1-4 are handled by the Topic Connection Checker, while step 5 is addressed by the Topic Localizer.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-connection-checker_1","title":"Topic Connection Checker","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#usage","title":"Usage","text":"To run the Topic Connection Checker, use the following command:
ros2 run autoware_debug_tools topic_connection_checker\n
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#mechanism","title":"Mechanism","text":"The Topic Connection Checker operates as follows:
/diagnostics
for three seconds, focusing on hardware_id
with topic_state_monitor
.The identified problematic topics can then be used as input for the Topic Localizer.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#topic-localizer","title":"Topic Localizer","text":""},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#usage_1","title":"Usage","text":"When launching from the autoware/pilot-auto
directory, use the following command:
ros2 run autoware_debug_tools topic_localizer . $TOPIC1,$TOPIC2\n\n## If we launch from a different directory\nros2 run autoware_debug_tools topic_localizer $AUTOWARE_DIRECTORY $TOPIC1,$TOPIC2\n
Replace $TOPIC1,$TOPIC2
with the actual topic names you want to localize, separated by commas.
The Topic Localizer employs a two-step approach to find the source of problematic topics:
Direct Search:
Launch System Analysis:
autoware_launch/launch/autoware.launch.xml
using default arguments.By using these tools effectively, Autoware Engineers can quickly identify and resolve topic-related issues, ensuring smooth operation of the Autoware system.
"},{"location":"common/mission_planner_rviz_plugin/","title":"mission_planner_rviz_plugin","text":""},{"location":"common/mission_planner_rviz_plugin/#mission_planner_rviz_plugin","title":"mission_planner_rviz_plugin","text":""},{"location":"common/mission_planner_rviz_plugin/#mrmgoaltool","title":"MrmGoalTool","text":"This is a copy of rviz_default_plugins::tools::GoalTool
. Used together with the RouteSelectorPanel to set the MRM route. After adding the tool, change the topic name to /rviz/route_selector/mrm/goal
from the topic property panel in rviz.
This panel shows the main and mrm route state in the route_selector and the route states in the mission_planner. Additionally, it provides clear and set functions for each main route and mrm route.
Trigger Action main route clear button call/planning/mission_planning/route_selector/main/clear_route
mrm route clear button call /planning/mission_planning/route_selector/mrm/clear_route
/rviz/route_selector/main/goal
topic call /planning/mission_planning/route_selector/main/set_waypoint_route
/rviz/route_selector/mrm/goal
topic call /planning/mission_planning/route_selector/mrm/set_waypoint_route
"},{"location":"common/rtc_manager_rviz_plugin/","title":"rtc_manager_rviz_plugin","text":""},{"location":"common/rtc_manager_rviz_plugin/#rtc_manager_rviz_plugin","title":"rtc_manager_rviz_plugin","text":""},{"location":"common/rtc_manager_rviz_plugin/#purpose","title":"Purpose","text":"The purpose of this Rviz plugin is
To display each content of RTC status.
To switch each module of RTC auto mode.
To change RTC cooperate commands by button.
/api/external/get/rtc_status
tier4_rtc_msgs::msg::CooperateStatusArray
The statuses of each Cooperate Commands"},{"location":"common/rtc_manager_rviz_plugin/#output","title":"Output","text":"Name Type Description /api/external/set/rtc_commands
tier4_rtc_msgs::src::CooperateCommands
The Cooperate Commands for each planning /planning/enable_auto_mode/*
tier4_rtc_msgs::src::AutoMode
The Cooperate Commands mode for each planning module"},{"location":"common/rtc_manager_rviz_plugin/#howtouse","title":"HowToUse","text":"Start rviz and select panels/Add new panel.
tier4_state_rviz_plugin/RTCManagerPanel and press OK.
Defining a GoalsList
by adding goals using RvizTool
(Pose on the map).
Automatic execution of the created GoalsList
from the selected goal - it can be stopped and restarted.
Looping the current GoalsList
.
Saving achieved goals to a file.
Plan the route to one (single) selected goal and starting that route - it can be stopped and restarted.
Remove any goal from the list or clear the current route.
Save the current GoalsList
to a file and load the list from the file.
The application enables/disables access to options depending on the current state.
The saved GoalsList
can be executed without using a plugin - using a node automatic_goal_sender
.
/api/operation_mode/state
autoware_adapi_v1_msgs::msg::OperationModeState
The topic represents the state of operation mode /api/routing/state
autoware_adapi_v1_msgs::msg::RouteState
The topic represents the state of route /rviz2/automatic_goal/goal
geometry_msgs::msgs::PoseStamped
The topic for adding goals to GoalsList"},{"location":"common/tier4_automatic_goal_rviz_plugin/#output","title":"Output","text":"Name Type Description /api/operation_mode/change_to_autonomous
autoware_adapi_v1_msgs::srv::ChangeOperationMode
The service to change operation mode to autonomous /api/operation_mode/change_to_stop
autoware_adapi_v1_msgs::srv::ChangeOperationMode
The service to change operation mode to stop /api/routing/set_route_points
autoware_adapi_v1_msgs::srv::SetRoutePoints
The service to set route /api/routing/clear_route
autoware_adapi_v1_msgs::srv::ClearRoute
The service to clear route state /rviz2/automatic_goal/markers
visualization_msgs::msg::MarkerArray
The topic to visualize goals as rviz markers"},{"location":"common/tier4_automatic_goal_rviz_plugin/#howtouse","title":"HowToUse","text":"Start rviz and select panels/Add new panel.
Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalPanel
and press OK.
Select Add a new tool.
Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalTool
and press OK.
Add goals visualization as markers to Displays
.
Append goals to the GoalsList
to be achieved using 2D Append Goal
- in such a way that routes can be planned.
Start sequential planning and goal achievement by clicking Send goals automatically
You can save GoalsList
by clicking Save to file
.
After saving, you can run the GoalsList
without using a plugin also:
ros2 launch tier4_automatic_goal_rviz_plugin automatic_goal_sender.launch.xml goals_list_file_path:=\"/tmp/goals_list.yaml\" goals_achieved_dir_path:=\"/tmp/\"
goals_list_file_path
- is the path to the saved GoalsList
file to be loadedgoals_achieved_dir_path
- is the path to the directory where the file goals_achieved.log
will be created and the achieved goals will be written to itIf the application (Engagement) goes into ERROR
mode (usually returns to EDITING
later), it means that one of the services returned a calling error (code!=0
). In this situation, check the terminal output for more information.
This project uses Material Design Icons by Google. These icons are used under the terms of the Apache License, Version 2.0.
Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products.
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#license","title":"License","text":"The Material Design Icons are licensed under the Apache License, Version 2.0. 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.
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#acknowledgments","title":"Acknowledgments","text":"We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects.
"},{"location":"common/tier4_control_rviz_plugin/","title":"tier4_control_rviz_plugin","text":""},{"location":"common/tier4_control_rviz_plugin/#tier4_control_rviz_plugin","title":"tier4_control_rviz_plugin","text":"This package is to mimic external control for simulation.
"},{"location":"common/tier4_control_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/tier4_control_rviz_plugin/#input","title":"Input","text":"Name Type Description/control/current_gate_mode
tier4_control_msgs::msg::GateMode
Current GATE mode /vehicle/status/velocity_status
autoware_vehicle_msgs::msg::VelocityReport
Current velocity status /api/autoware/get/engage
tier4_external_api_msgs::srv::Engage
Getting Engage /vehicle/status/gear_status
autoware_vehicle_msgs::msg::GearReport
The state of GEAR"},{"location":"common/tier4_control_rviz_plugin/#output","title":"Output","text":"Name Type Description /control/gate_mode_cmd
tier4_control_msgs::msg::GateMode
GATE mode /external/selected/control_cmd
autoware_control_msgs::msg::ControlCommand
Control command /external/selected/gear_cmd
autoware_vehicle_msgs::msg::GearCommand
GEAR"},{"location":"common/tier4_control_rviz_plugin/#usage","title":"Usage","text":"Start rviz and select Panels.
Select tier4_control_rviz_plugin/ManualController and press OK.
Enter velocity in \"Set Cruise Velocity\" and Press the button to confirm. You can notice that GEAR shows D (DRIVE).
Press \"Enable Manual Control\" and you can notice that \"GATE\" and \"Engage\" turn \"Ready\" and the vehicle starts!
This package is including jsk code. Note that jsk_overlay_utils.cpp and jsk_overlay_utils.hpp are BSD license.
"},{"location":"common/tier4_debug_rviz_plugin/#plugins","title":"Plugins","text":""},{"location":"common/tier4_debug_rviz_plugin/#float32multiarraystampedpiechart","title":"Float32MultiArrayStampedPieChart","text":"Pie chart from tier4_debug_msgs::msg::Float32MultiArrayStamped
.
This package provides useful features for debugging Autoware.
"},{"location":"common/tier4_debug_tools/#usage","title":"Usage","text":""},{"location":"common/tier4_debug_tools/#tf2pose","title":"tf2pose","text":"This tool converts any tf
to pose
topic. With this tool, for example, you can plot x
values of tf
in rqt_multiplot
.
ros2 run tier4_debug_tools tf2pose {tf_from} {tf_to} {hz}\n
Example:
$ ros2 run tier4_debug_tools tf2pose base_link ndt_base_link 100\n\n$ ros2 topic echo /tf2pose/pose -n1\nheader:\n seq: 13\nstamp:\n secs: 1605168366\nnsecs: 549174070\nframe_id: \"base_link\"\npose:\n position:\n x: 0.0387684271191\n y: -0.00320360406477\n z: 0.000276674520819\n orientation:\n x: 0.000335221893885\n y: 0.000122020672186\n z: -0.00539673212896\n w: 0.999985368502\n---\n
"},{"location":"common/tier4_debug_tools/#pose2tf","title":"pose2tf","text":"This tool converts any pose
topic to tf
.
ros2 run tier4_debug_tools pose2tf {pose_topic_name} {tf_name}\n
Example:
$ ros2 run tier4_debug_tools pose2tf /localization/pose_estimator/pose ndt_pose\n\n$ ros2 run tf tf_echo ndt_pose ndt_base_link 100\nAt time 1605168365.449\n- Translation: [0.000, 0.000, 0.000]\n- Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000]\nin RPY (radian) [0.000, -0.000, 0.000]\nin RPY (degree) [0.000, -0.000, 0.000]\n
"},{"location":"common/tier4_debug_tools/#stop_reason2pose","title":"stop_reason2pose","text":"This tool extracts pose
from stop_reasons
. Topics without numbers such as /stop_reason2pose/pose/detection_area
are the nearest stop_reasons, and topics with numbers are individual stop_reasons that are roughly matched with previous ones.
ros2 run tier4_debug_tools stop_reason2pose {stop_reason_topic_name}\n
Example:
$ ros2 run tier4_debug_tools stop_reason2pose /planning/scenario_planning/status/stop_reasons\n\n$ ros2 topic list | ag stop_reason2pose\n/stop_reason2pose/pose/detection_area\n/stop_reason2pose/pose/detection_area_1\n/stop_reason2pose/pose/obstacle_stop\n/stop_reason2pose/pose/obstacle_stop_1\n\n$ ros2 topic echo /stop_reason2pose/pose/detection_area -n1\nheader:\n seq: 1\nstamp:\n secs: 1605168355\nnsecs: 821713\nframe_id: \"map\"\npose:\n position:\n x: 60608.8433457\n y: 43886.2410876\n z: 44.9078212441\n orientation:\n x: 0.0\n y: 0.0\n z: -0.190261378408\n w: 0.981733470901\n---\n
"},{"location":"common/tier4_debug_tools/#stop_reason2tf","title":"stop_reason2tf","text":"This is an all-in-one script that uses tf2pose
, pose2tf
, and stop_reason2pose
. With this tool, you can view the relative position from base_link to the nearest stop_reason.
ros2 run tier4_debug_tools stop_reason2tf {stop_reason_name}\n
Example:
$ ros2 run tier4_debug_tools stop_reason2tf obstacle_stop\nAt time 1605168359.501\n- Translation: [0.291, -0.095, 0.266]\n- Rotation: in Quaternion [0.007, 0.011, -0.005, 1.000]\nin RPY (radian) [0.014, 0.023, -0.010]\nin RPY (degree) [0.825, 1.305, -0.573]\n
"},{"location":"common/tier4_debug_tools/#lateral_error_publisher","title":"lateral_error_publisher","text":"This node calculate the control error and localization error in the trajectory normal direction as shown in the figure below.
Set the reference trajectory, vehicle pose and ground truth pose in the launch file.
ros2 launch tier4_debug_tools lateral_error_publisher.launch.xml\n
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/","title":"tier4_logging_level_configure_rviz_plugin","text":""},{"location":"common/tier4_logging_level_configure_rviz_plugin/#tier4_logging_level_configure_rviz_plugin","title":"tier4_logging_level_configure_rviz_plugin","text":"This package provides an rviz_plugin that can easily change the logger level of each node.
This plugin dispatches services to the \"logger name\" associated with \"nodes\" specified in YAML, adjusting the logger level.
Warning
It is highly recommended to use this plugin when you're attempting to print any debug information. Furthermore, it is strongly advised to avoid using the logging level INFO, as it might flood the terminal with your information, potentially causing other useful information to be missed.
Note
To add your logger to the list, simply include the node_name
and logger_name
in the logger_config.yaml under the corresponding component or module. If the relevant component or module is not listed, you may add them yourself.
Note
As of November 2023, in ROS 2 Humble, users are required to initiate a service server in the node to use this feature. (This might be integrated into ROS standards in the future.) For easy service server generation, you can use the LoggerLevelConfigure utility.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#how-to-use-the-plugin","title":"How to use the plugin","text":"In RVIZ2, go to Panels and add LoggingLevelConfigureRVizPlugin. Then, search for the node you're interested in and select the corresponding logging level to print the logs.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#how-to-add-or-find-your-logger-name","title":"How to add or find your logger name","text":"Because there are no available ROS 2 CLI commands to list loggers, there isn't a straightforward way to check your logger name. Additionally, the following assumes that you already know which node you're working with.
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#for-logger-as-a-class-member-variable","title":"For logger as a class member variable","text":"If your class doesn't have an rclcpp::Logger
member variable, you can start by including one yourself:
mutable rclcpp::Logger logger_;\n
If your node already has a logger, it should, under normal circumstances, be similar to the node's name.
For instance, if the node name is /some_component/some_node/node_child
, the logger_name
would be some_component.some_node.node_child
.
Should your log not print as expected, one approach is to initially set your logging level in the code to info, like so:
RCLCPP_INFO(logger_, \"Print something here.\");\n
This will result in something like the following being printed in the terminal:
[component_container_mt-36] [INFO 1711949149.735437551] [logger_name]: Print something here. (func() at /path/to/code:line_number)\n
Afterward, you can simply copy the logger_name
.
Warning
Remember to revert your code to the appropriate logging level after testing.
RCLCPP_DEBUG(logger_, \"Print something here.\");\n
"},{"location":"common/tier4_logging_level_configure_rviz_plugin/#for-libraries","title":"For libraries","text":"When dealing with libraries, such as utility functions, you may need to add the logger manually. Here's an example:
RCLCPP_WARN(\nrclcpp::get_logger(\"some_component\").get_child(\"some_child\").get_child(\"some_child2\"),\n\"Print something here.\");\n
In this scenario, the logger_name
would be some_component.some_child.some_child2
.
This plugin captures the screen of rviz.
"},{"location":"common/tier4_screen_capture_rviz_plugin/#interface","title":"Interface","text":"Name Type Description/debug/capture/video
std_srvs::srv::Trigger
Trigger to start screen capturing. /debug/capture/video_with_buffer
std_srvs::srv::Trigger
Trigger to start screen capturing with buffer. /debug/capture/screen_shot
std_srvs::srv::Trigger
Trigger to capture screen shot."},{"location":"common/tier4_screen_capture_rviz_plugin/#assumptions-known-limits","title":"Assumptions / Known limits","text":"This is only for debug or analyze. The capture screen
button is still beta version which can slow frame rate. set lower frame rate according to PC spec.
This plugin allows publishing and controlling the simulated ROS time.
"},{"location":"common/tier4_simulated_clock_rviz_plugin/#output","title":"Output","text":"Name Type Description/clock
rosgraph_msgs::msg::Clock
the current simulated time"},{"location":"common/tier4_simulated_clock_rviz_plugin/#how-to-use-the-plugin","title":"How to use the plugin","text":"Launch planning simulator with use_sim_time:=true
.
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit use_sim_time:=true\n
Warning If you launch the planning simulator without adding the tier4_simulated_clock_rviz_plugin
, your simulation will not be running. You'll not even be able to place the initial and the goal poses.
Start rviz and select panels/Add new panel.
Select tier4_clock_rviz_plugin/SimulatedClock and press OK.
Use the added panel to control how the simulated clock is published.
Warning If you set the time step too large, your simulation will go haywire.
This plugin displays the ROS message whose topic type is autoware_internal_debug_msgs::msg::StringStamped
in rviz.
TBD.
"},{"location":"common/tier4_string_viewer_rviz_plugin/#usage","title":"Usage","text":"This plugin allows you to check which types of the dynamic object is being used by each planner.
"},{"location":"common/tier4_target_object_type_rviz_plugin/#limitations","title":"Limitations","text":"Currently, which parameters of which module to check are hardcoded. In the future, this will be parameterized using YAML.
"},{"location":"control/stop_accel_evaluator/","title":"Stop Accel Evaluator","text":""},{"location":"control/stop_accel_evaluator/#stop-accel-evaluator","title":"Stop Accel Evaluator","text":"The role of this node is to evaluate how smooth it is when a vehicle stops by calculating vehicle acceleration just before stopping.
"},{"location":"control/stop_accel_evaluator/#how-to-use","title":"How to use","text":"ros2 launch stop_accel_evaluator stop_accel_evaluator.launch.xml\n
Then you can see stop_accel_evaluator/stop_accel
topic. This topic is published only when a vehicle stops.
This is a visualization tool for vehicle commands. You need plotjuggler to plot.
The following time series data will be plotted on the left side.
The following data will be plotted on the right side.
Launch the node.
ros2 launch vehicle_cmd_analyzer vehicle_cmd_analyzer.launch.xml vehicle_model:=lexus\n
Launch plotjuggler.
ros2 run plotjuggler plotjuggler\n
Load layout.xml from File->Layout.
/vehicle_cmd_analyzer/debug_values
. This package provides tools for automatically collecting data using pure pursuit control within a specified rectangular area.
"},{"location":"control_data_collecting_tool/#overview","title":"Overview","text":"control_cmd
) and observation variables (i.e. kinematic_state
, steering_status
, etc).Data collecting approach is as follows:
Setting the trajectory from the following types of trajectories ( [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
, along_road
] ).
COURSE_NAME: eight_course
COURSE_NAME: u_shaped_return
COURSE_NAME: straight_line_positive
or COURSE_NAME: straight_line_negative
( Both \"straight_line_positive\" and \"straight_line_negative\" represent straight line courses, but the direction of travel of the course is reversed.)
COURSE_NAME: reversal_loop_circle
Drive within a circle while adding trajectories and collect data.
COURSE_NAME: along_road
Generate trajectories along the road. This is particularly useful when drawing long straight paths along the road.
In this course, data collection is conducted only on long straight trajectories, while constant velocity, velocity_on_curve
, is maintained when driving on sections that include curves.
The minimum length of these long straight trajectories can be specified using the parameter minimum_length_of_straight_line
(These two parameters velocity_on_curve
and minimum_length_of_straight_line
can be configured in ./config/course_param/along_road_param.yaml
).
Launch Autoware.
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit\n
Set an initial pose, see here.
Add the DataCollectingAreaSelectionTool and DataCollectingGoalPlugin RViz plugins by clicking the \"+\" icon at the top of the RViz window.
Launch control_data_collecting_tool.
ros2 launch control_data_collecting_tool control_data_collecting_tool.launch.py map_path:=$HOME/autoware_map/sample-map-planning\n
- If you use the along_road
course, please specify the same map for map_path
as the one used when launching Autoware. map_path
is not necessary when using courses other than along_road
.
- Control data collecting tool automatically records topics included in config/topics.yaml
when the above command is executed. Topics will be saved in rosbag2 format in the current directory.
- The data from /localization/kinematic_state
and /localization/acceleration
located in the directory (rosbag2 format) where the command is executed will be automatically loaded and reflected in the data count for these topics. (If LOAD_ROSBAG2_FILES
in config/param.yaml
is set to false
, the data is not loaded.)
Add visualization in rviz:
- /data_collecting_area
- Type: Polygon - /data_collecting_trajectory_marker_array
- Type: MarkerArray - /data_collecting_lookahead_marker_array
- Type: MarkerArray
The following actions differ depending on the selected course. If you select the trajectory from [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
], please proceed to 6.1. If you select the trajectory from [along_road
], please proceed to 6.2.
- 6.1 If you choose the trajectory from [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
], select DataCollectingAreaSelectionTool
plugin.
<img src=\"resource/DataCollectingAreaSelection.png\" width=\"480\">\n\nHighlight the data collecting area by dragging the mouse over it.\n\n<img src=\"resource/select_area.gif\" width=\"480\">\n\n> [!NOTE]\n> You cannot change the data collecting area while driving.\n
- 6.2 If you choose the trajectory from [along_road
], select DataCollectingGoalPose
plugin.
<img src=\"resource/DataCollectingGoalPose.png\" width=\"480\">\n\nBy setting the pose of the goal point, a trajectory is generated on the map.\n\n <img src=\"resource/set_trajectory_along_road.gif\" width=\"480\">\n\nAs soon as the trajectory is generated, the plot with the map and trajectory drawn on it will be created (please see the following picture).\nIn the sections labeled `velocity = const (velocity_on_curve)` in the legend, the vehicle travels at a constant velocity of `velocity_on_curve`. In the sections labeled `Data collection is conducted`, data collection is performed.\n\n <img src=\"resource/along_load_plot.png\" width=\"480\">\n\n> [!NOTE]\n> You cannot change the goal pose while driving.\n> In cases where course generation fails, which can happen under certain conditions, please reposition the vehicle or redraw the goal pose.\n
Click the LOCAL
button in AutowareStatePanel
.
Then, data collecting starts.
You can monitor the data collection status in real-time through the window that pops up when this node is launched. (From top to bottom: the speed-acceleration phase diagram, the speed-acceleration heatmap, the speed-steering angle heatmap, the speed-steer rate heatmap, and the speed-jerk heatmap.)
For the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap, the collection range can be specified by the masks located in the folder config/masks/MASK_NAME
where MASK_NAME
is a parameter specifying mask name (Please also see config/common_param.yaml
). The specified heatmap cells are designed to change from blue to green once a certain amount of data (VEL_ACC_THRESHOLD
, VEL_STEER_THRESHOLD
, VEL_ABS_STEER_RATE_THRESHOLD
) is collected. It is recommended to collect data until as many cells as possible turn green.
If you want to stop data collecting automatic driving, run the following command
ros2 topic pub /data_collecting_stop_request std_msgs/msg/Bool \"data: true\" --once\n
[!NOTE] When the car crosses the green boundary line, a similar stopping procedure will be automatically triggered.
If you want to restart data collecting automatic driving, run the following command
ros2 topic pub /data_collecting_stop_request std_msgs/msg/Bool \"data: false\" --once\n
You can create an original mask to specify the data collection range for the heatmap explained in step 7 of the \"How to Use\" section.
Change the MASK_NAME
parameter in config/common_param.yaml
from its default value of default
to any name you prefer.
Modify parameters such as VEL_ACC_THRESHOLD
, VEL_STEER_THRESHOLD
, and VEL_ABS_STEER_RATE_THRESHOLD
to determine the desired amount of data for each cell in the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap.
In the scripts/masks
directory, run
python3 mask_selector.py\n
then, matplotlib windows for selecting the collection range of the speed-acceleration heatmap, speed-steering angle heatmap, and speed-steer rate heatmap will be displayed, one for each.
In these windows, you can modify the heatmaps by clicking or dragging within them. Once you've made your changes, pressing Ctrl+C
in the terminal will automatically save the updated maps.
Afterward, rebuild the control_data_collecting_tool
using the following command
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=\"-w\" --symlink-install --continue-on-error --packages-up-to control_data_collecting_tool\n
and relaunch the control_data_collecting_tool with
ros2 launch control_data_collecting_tool control_data_collecting_tool.launch.py map_path:=$HOME/autoware_map/sample-map-planning\n
This will allow you to see the selected mask applied.
There are parameters that are common to all trajectories and parameters that are specific to each trajectory.
"},{"location":"control_data_collecting_tool/#common-parameters","title":"Common Parameters","text":"ROS 2 parameters which are common in all trajectories (/config/common_param.yaml
):
LOAD_ROSBAG2_FILES
bool
Flag that determines whether to load rosbag2 data or not true COURSE_NAME
string
Course name [eight_course
, u_shaped_return
, straight_line_positive
, straight_line_negative
, reversal_loop_circle
, along_road
] reversal_loop_circle
NUM_BINS_V
int
Number of bins of velocity in heatmap 10 NUM_BINS_STEER
int
Number of bins of steer in heatmap 20 NUM_BINS_A
int
Number of bins of acceleration in heatmap 10 NUM_BINS_ABS_STEER_RATE
int
Number of bins of absolute value of steer rate in heatmap 5 NUM_BINS_JERK
int
Number of bins of jerk in heatmap 10 V_MIN
double
Minimum velocity in heatmap [m/s] 0.0 V_MAX
double
Maximum velocity in heatmap [m/s] 11.5 STEER_MIN
double
Minimum steer in heatmap [rad] -0.6 STEER_MAX
double
Maximum steer in heatmap [rad] 0.6 A_MIN
double
Minimum acceleration in heatmap [m/s^2] -1.0 A_MAX
double
Maximum acceleration in heatmap [m/s^2] 1.0 max_lateral_accel
double
Max lateral acceleration limit [m/s^2] 2.00 ABS_STEER_RATE_MIN
double
Minimum absolute value of steer rate in heatmap [rad/s] 0.0 ABS_STEER_RATE_MAX
double
Maximum absolute value of steer rate in heatmap [rad/s] 0.3 JERK_MIN
double
Minimum jerk in heatmap [m/s^3] -0.5 JERK_MAX
double
Maximum jerk in heatmap [m/s^3] 0.5 MASK_NAME
string
Directory name of masks for data collection default
VEL_ACC_THRESHOLD
int
Threshold of velocity-and-acc heatmap in data collection 40 VEL_STEER_THRESHOLD
int
Threshold of velocity-and-steer heatmap in data collection 20 VEL_ABS_STEER_RATE_THRESHOLD
int
Threshold of velocity-and-abs_steer_rate heatmap in data collection 20 max_lateral_accel
double
Max lateral acceleration limit [m/s^2] 2.00 lateral_error_threshold
double
Lateral error threshold where applying velocity limit [m] 1.50 yaw_error_threshold
double
Yaw error threshold where applying velocity limit [rad] 0.75 velocity_limit_by_tracking_error
double
Velocity limit applied when tracking error exceeds threshold [m/s] 1.0 mov_ave_window
int
Moving average smoothing window size 50 target_longitudinal_velocity
double
Target longitudinal velocity [m/s] 6.0 pure_pursuit_type
string
Pure pursuit type (naive
or linearized
steer control law ) linearized
wheel_base
double
Wheel base [m] 2.79 acc_kp
double
Accel command proportional gain 1.0 lookahead_time
double
Pure pursuit lookahead time [s] 2.0 min_lookahead
double
Pure pursuit minimum lookahead length [m] 2.0 linearized_pure_pursuit_steer_kp_param
double
Linearized pure pursuit steering P gain parameter 2.0 linearized_pure_pursuit_steer_kd_param
double
Linearized pure pursuit steering D gain parameter 2.0 stop_acc
double
Accel command for stopping data collecting driving [m/s^2] -2.0 stop_jerk_lim
double
Jerk limit for stopping data collecting driving [m/s^3] 5.0 lon_acc_lim
double
Longitudinal acceleration limit [m/s^2] 1.5 lon_jerk_lim
double
Longitudinal jerk limit [m/s^3] 0.5 steer_lim
double
Steering angle limit [rad] 0.6 steer_rate_lim
double
Steering angle rate limit [rad/s] 0.6 The following parameters are common to all trajectories but can be defined individually for each trajectory. (/config/course_param/COURSE_NAME_param.yaml
):
COLLECTING_DATA_V_MIN
double
Minimum velocity for data collection [m/s] 0.5 COLLECTING_DATA_V_MAX
double
Maximum velocity for data collection [m/s] 8.0 COLLECTING_DATA_A_MIN
double
Minimum velocity for data collection [m/s^2] 1.0 COLLECTING_DATA_A_MAX
double
Maximum velocity for data collection [m/s^2] -1.0 longitudinal_velocity_noise_amp
double
Target longitudinal velocity additional sine noise amplitude [m/s] 0.01 longitudinal_velocity_noise_min_period
double
Target longitudinal velocity additional sine noise minimum period [s] 5.0 longitudinal_velocity_noise_max_period
double
Target longitudinal velocity additional sine noise maximum period [s] 20.0 acc_noise_amp
double
Accel command additional sine noise amplitude [m/ss] 0.01 acc_noise_min_period
double
Accel command additional sine noise minimum period [s] 5.0 acc_noise_max_period
double
Accel command additional sine noise maximum period [s] 20.0 steer_noise_amp
double
Steer command additional sine noise amplitude [rad] 0.01 steer_noise_max_period
double
Steer command additional sine noise maximum period [s] 5.0 steer_noise_min_period
double
Steer command additional sine noise minimum period [s] 20.0"},{"location":"control_data_collecting_tool/#course-specific-parameters","title":"Course-Specific Parameters","text":"Each trajectory has specific ROS 2 parameters.
COURSE_NAME: eight_course
velocity_on_curve
double
Constant velocity on curve [m/s] 4.5 smoothing_window
double
Width of the window for trajectory smoothing 400 COURSE_NAME: u_shaped_return
velocity_on_curve
double
Constant velocity on curve [m/s] 4.5 COURSE_NAME: straight_line_positive
or COURSE_NAME: straight_line_negative
stopping_buffer_distance
double
The safety distance from end of the straight line [m] 10.0 COURSE_NAME: reversal_loop_circle
trajectory_radius
double
Radius of the circle where trajectories are generated [m] 35.0 enclosing_radius
double
Radius of the circle enclosing the generated trajectories [m] 40.0 look_ahead_distance
double
The distance referenced ahead of the vehicle for collecting steering angle data [m] 15.0 COURSE_NAME: along_road
velocity_on_curve
double
Constant velocity on curve [m/s] 3.5 stopping_buffer_distance
double
The safety distance from end of the straight line [m] 15.0 course_width
double
The width of the trajectory [m] 1.5 smoothing_window
double
Width of the window for trajectory smoothing 100 minimum_length_of_straight_line
double
The minimum length of straight line for data collection [m] 50.0 longitude
double
The longitude of the origin specified when loading the map [degree] 139.6503 latitude
double
The latitude of the origin specified when loading the map [degree] 35.6762"},{"location":"driving_environment_analyzer/","title":"Driving Environment Analyzer","text":""},{"location":"driving_environment_analyzer/#driving-environment-analyzer","title":"Driving Environment Analyzer","text":"\u3053\u306e\u30c4\u30fc\u30eb\u306fROSBAG\u306b\u542b\u307e\u308c\u308b\u8d70\u884c\u5c65\u6b74\u3092\u5143\u306b\u8d70\u884c\u74b0\u5883\u306eODD\u3092\u89e3\u6790\u3059\u308b\u30c4\u30fc\u30eb\u3067\u3059\u3002
"},{"location":"driving_environment_analyzer/#rosbagodd","title":"ROSBAG\u306e\u7279\u5b9a\u6642\u523b\u306b\u304a\u3051\u308b\u5468\u56f2\u306eODD\u3092\u89e3\u6790\u3059\u308b\u5834\u5408","text":"\u3053\u306e\u5834\u5408\u306b\u306fRviz\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u3042\u308bdriving_environment_analyzer_rviz_panel
\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002
\u73fe\u5728\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u51fa\u529b\u53ef\u80fd\u3067\u3059\u3002
\u3053\u3061\u3089\u306e\u30c4\u30fc\u30eb\u306fautoware_launch\u306b\u542b\u307e\u308c\u308blogging_simulator
\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305a\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u304b\u3089\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
ros2 launch autoware_launch logging_simulator.launch.xml map_path:=<MAP> vehicle_model:=<VEHICLE_NAME> sensor_model:=<AIP_NAME> sensing:=false control:=false planning:=false perception:=false localization:=false system:=false
\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u8d77\u52d5\u6642\u306b\u5730\u56f3\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081ROSBAG\u306b\u5730\u56f3\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u304f\u3066\u3082ODD\u306e\u89e3\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002\uff08\u305f\u3060\u3057\u3001\u305d\u306e\u5834\u5408\u306b\u306fROSBAG\u53d6\u5f97\u306e\u969b\u306b\u4f7f\u7528\u3057\u305f\u5730\u56f3\u3092\u6307\u5b9a\u3057\u3066\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\uff09
\u6b21\u306b\u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u542b\u307e\u308c\u308b\u89e3\u6790\u30c4\u30fc\u30eb\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002Rviz\u753b\u9762\u5de6\u4e0a\u90e8\u306eAdd New Panel\u304b\u3089DrivingEnvironmentAnalyzerPanel\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067Rviz\u5de6\u4e0b\u306b\u65b0\u3057\u304f\u64cd\u4f5c\u30d1\u30cd\u30eb\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002
\u672c\u30c4\u30fc\u30eb\u306fROSBAG\u30d5\u30a1\u30a4\u30eb\u6307\u5b9a\u3057\u3066\u30ed\u30fc\u30c9\u3067\u304d\u308b\u4ed6\u3001\u8907\u6570\u306eROSBAG\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u305d\u306e\u5834\u5408\u306b\u306f\u4e8b\u524d\u306b\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067metadata.yaml
\u306e\u751f\u6210\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002
ros2 bag reindex <DIR_PATH> sqlite3
ROSBAG\u306e\u8aad\u307f\u8fbc\u307f\u304c\u5b8c\u4e86\u3057\u305f\u3089ODD\u3092\u89e3\u6790\u3057\u305f\u3044\u6642\u523b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u6642\u523b\u306e\u6307\u5b9a\u306b\u306fUnix time\u3092\u76f4\u63a5\u6307\u5b9a\u3059\u308b\u307b\u304b\u30b9\u30e9\u30a4\u30c9\u30d0\u30fc\u3082\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002\u5de6\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u65e5\u6642\u3092\u53c2\u8003\u306b\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002
\u307e\u305f\u3001\u3053\u306e\u3068\u304dViews\u306eTarget Flame\u3092base_link
\u306b\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u6307\u5b9a\u3057\u305f\u6642\u523b\u306eEGO\u306e\u4f4d\u7f6e\u3068\u5468\u56f2\u306e\u72b6\u6cc1\u3092Rviz\u3067\u53ef\u8996\u5316\u53ef\u80fd\u3067\u3059\u3002
\u6642\u523b\u306e\u6307\u5b9a\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001Set time stamp
\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3001\u6700\u5f8c\u306bAnalyze dynamic ODD factor
\u3092\u62bc\u3059\u3053\u3068\u3067\u89e3\u6790\u304c\u59cb\u307e\u308a\u307e\u3059\u3002
[rviz2-11] ***********************************************************\n[rviz2-11] ODD analysis result\n[rviz2-11] ***********************************************************\n[rviz2-11] Type: TIME SPECIFIED\n[rviz2-11] Time: 2024-04-22 14:48:05\n[rviz2-11]\n[rviz2-11]\n[rviz2-11] - EGO INFO\n[rviz2-11] [SPEED] : 0 [m/s]\n[rviz2-11] [ELEVATION ANGLE] : 0.00963597 [rad]\n[rviz2-11]\n[rviz2-11] - EGO BEHAIOVR\n[rviz2-11] [AVOIDANCE(R)] : NONE\n[rviz2-11] [AVOIDANCE(L)] : NONE\n[rviz2-11] [LANE_CHANGE(R)] : NONE\n[rviz2-11] [LANE_CHANGE(L)] : NONE\n[rviz2-11] [START_PLANNER] : SAFE: true COMMAND: deactivate\n[rviz2-11] [GOAL_PLANNER] : NONE\n[rviz2-11] [CROSSWALK] : NONE\n[rviz2-11] [INTERSECTION] : NONE\n[rviz2-11]\n[rviz2-11] - LANE INFO\n[rviz2-11] [ID] : 176126\n[rviz2-11] [WIDTH] : 4.24132 [m]\n[rviz2-11] [SHAPE] : STRAIGHT\n[rviz2-11] [RIGHT LANE NUM] : 0\n[rviz2-11] [LEFT LANE NUM] : 0\n[rviz2-11] [TOTAL LANE NUM] : 1\n[rviz2-11] [SAME DIRECTION LANE] : NONE\n[rviz2-11] [OPPOSITE DIRECTION LANE] : NONE\n[rviz2-11] [ROAD SHOULDER] : EXIST\n[rviz2-11]\n[rviz2-11] - SURROUND OBJECT NUM\n[rviz2-11] [UNKNOWN] : 0\n[rviz2-11] [CAR] : 6\n[rviz2-11] [TRUCK] : 0\n[rviz2-11] [BUS] : 3\n[rviz2-11] [TRAILER] : 2\n[rviz2-11] [MOTORCYCLE] : 0\n[rviz2-11] [BICYCLE] : 0\n[rviz2-11] [PEDESTRIAN] : 7\n[rviz2-11] ***********************************************************\n
"},{"location":"driving_environment_analyzer/#rosbagodd_1","title":"ROSBAG\u5168\u4f53\u306b\u5bfe\u3057\u3066\u7d4c\u8def\u6cbf\u3044\u306eODD\u3092\u89e3\u6790\u3059\u308b\u5834\u5408","text":"\u73fe\u5728\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u51fa\u529b\u53ef\u80fd\u3067\u3059\u3002
\u8d77\u52d5\u6642\u306bbag_path
\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u89e3\u6790\u3057\u305f\u3044ROSBAG\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u6307\u5b9a\u3082.db3\u30d5\u30a1\u30a4\u30eb\u306e\u76f4\u63a5\u6307\u5b9a\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\uff09
\u89e3\u6790\u306b\u5fc5\u8981\u306atopic\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\u3002\uff08\u4eca\u5f8c\u5897\u3048\u308b\u53ef\u80fd\u6027\u3082\u3042\u308a\u307e\u3059\u3002\uff09
/planning/mission_planning/route
/map/vector_map
\u4ee5\u4e0b\u306e\u3088\u3046\u306blaunch\u3059\u308b\u3053\u3068\u3067ODD\u306e\u89e3\u6790\u7d50\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002
ros2 launch driving_environment_analyzer driving_environment_analyzer.launch.xml use_map_in_bag:=true bag_path:=<ROSBAG>
[component_container-1] [INFO 1708999777.768870564] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.768922452] [driving_environment_analyzer]: data is ready. start ODD analysis...\n[component_container-1] [INFO 1708999777.768933574] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.768967412] [driving_environment_analyzer]: - Length of total lanes : 2357.50 [m]\n[component_container-1] [INFO 1708999777.769031174] [driving_environment_analyzer]: - Length of lane that has adjacent lane : 2080.43 [m]\n[component_container-1] [INFO 1708999777.769076141] [driving_environment_analyzer]: - Length of lane that has opposite lane : 0.00 [m]\n[component_container-1] [INFO 1708999777.769101793] [driving_environment_analyzer]: - Length of lane that has no adjacent lane : 277.07 [m]\n[component_container-1] [INFO 1708999777.769225729] [driving_environment_analyzer]: - Min lane width: 3.14 [m] Max lane width: 4.94 [m]\n[component_container-1] [INFO 1708999777.769278698] [driving_environment_analyzer]: - Max curvature: 0.007967 [1/m]\n[component_container-1] [INFO 1708999777.769293161] [driving_environment_analyzer]: - Min curve radius: 125.52 [m]\n[component_container-1] [INFO 1708999777.769336094] [driving_environment_analyzer]: - Min elevation angle: -0.033037 [rad] Max elevation angle: 0.026073 [rad]\n[component_container-1] [INFO 1708999777.769403870] [driving_environment_analyzer]: - Min speed limit: 13.89 [m/s] Max speed limit: 16.67 [m/s]\n[component_container-1] [INFO 1708999777.769424648] [driving_environment_analyzer]: - Exist traffic light: true\n[component_container-1] [INFO 1708999777.769435813] [driving_environment_analyzer]: - Exist intersection: true\n[component_container-1] [INFO 1708999777.769620035] [driving_environment_analyzer]: - Exist crosswalk: true\n[component_container-1] [INFO 1708999777.769634980] [driving_environment_analyzer]: ======================================\n[component_container-1] [INFO 1708999777.769642769] [driving_environment_analyzer]: complete ODD analysis. shutdown.\n[component_container-1] [INFO 1708999777.769650034] [driving_environment_analyzer]: ======================================\n
\u305f\u3060\u3057\u3001map/vector_map
\u306b\u95a2\u3057\u3066\u306fuse_map_in_bag
\u3092false
\u306b\u3059\u308b\u3053\u3068\u3067\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u5730\u56f3\u3092\u4f7f\u7528\u3057\u3066ODD\u89e3\u6790\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u305d\u306e\u5834\u5408\u3001map_path
\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u5730\u56f3\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
ros2 launch driving_environment_analyzer driving_environment_analyzer.launch.xml use_map_in_bag:=false map_path:=<MAP> bag_path:=<ROSBAG>
\u4ee5\u4e0a\u306e\u3088\u3046\u306b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067ROSBAG\u306b\u5730\u56f3\u60c5\u5831\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u306a\u304f\u3066\u3082ODD\u89e3\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002
"},{"location":"evaluation/tier4_metrics_rviz_plugin/","title":"tier4_metrics_rviz_plugin","text":""},{"location":"evaluation/tier4_metrics_rviz_plugin/#tier4_metrics_rviz_plugin","title":"tier4_metrics_rviz_plugin","text":""},{"location":"evaluation/tier4_metrics_rviz_plugin/#purpose","title":"Purpose","text":"This plugin panel to visualize planning_evaluator
output.
/planning/planning_evaluator/metrics
diagnostic_msgs::msg::DiagnosticArray
Subscribe planning_evaluator
output"},{"location":"evaluation/tier4_metrics_rviz_plugin/#howtouse","title":"HowToUse","text":"This repository consists of three main tools implemented on ROS 2.
Here you estimate the following parameters using deviation_estimator
.
Launch the node with the following command. Make sure you set the correct parameters (see Sec. 2).
ros2 launch deviation_estimator deviation_estimator.launch.xml\n
Then, you need to run either ROS bag or autoware_launch
to provide pose
and twist
to deviation_estimator
.
If you are using rosbag, it should contain the following topics:
/sensing/imu/tamagawa/imu_raw
)/vehicle/status/velocity_status
)/localization/pose_estimator/pose_with_covariance
/clock
/tf_static
(that contains transform from base_link
to imu_link
)NOTE that the pose and twist must be estimated with default parameters (see known issues
section for detail).
Play the rosbag in a different terminal:
ros2 bag play YOUR_BAG # You can also play in a faster rate, e.g. -r 5\n
You can check the results in the following three output files:
$HOME/imu_corrector.param.yaml
)$HOME/vehicle_velocity_converter.param.yaml
)$HOME/output.txt
)
Files: localized_sensors_0.db3\nBag size: 9.6 MiB\nStorage id: sqlite3\nDuration: 76.539s\nStart: Jul 8 2022 11:21:41.220 (1657246901.220)\nEnd: Jul 8 2022 11:22:57.759 (1657246977.759)\nMessages: 32855\nTopic information: Topic: /localization/pose_estimator/pose_with_covariance | Type: geometry_msgs/msg/PoseWithCovarianceStamped | Count: 2162 | Serialization Format: cdr\n Topic: /clock | Type: rosgraph_msgs/msg/Clock | Count: 57309 | Serialization Format: cdr\n Topic: /tf_static | Type: tf2_msgs/msg/TFMessage | Count: 2 | Serialization Format: cdr\n Topic: /sensing/imu/tamagawa/imu_raw | Type: sensor_msgs/msg/Imu | Count: 8076 | Serialization Format: cdr\n Topic: /vehicle/status/velocity_status | Type: autoware_vehicle_msgs/msg/VelocityReport | Count: 8275 | Serialization Format: cdr\n
sample output (output.txt)
# Validation results\n# value: [min, max]\n[OK] coef_vx: [0.99538, 0.99593]\n[OK] stddev_vx: [0.17192, 0.19161]\n[OK] angular_velocity_offset_x: [-0.00742, -0.00727]\n[OK] angular_velocity_offset_y: [-0.00119, -0.00115]\n[OK] angular_velocity_offset_z: [0.00635, 0.00641]\n[OK] angular_velocity_stddev_xx: [0.04151, 0.04258]\n[OK] angular_velocity_stddev_yy: [0.04151, 0.04258]\n[OK] angular_velocity_stddev_zz: [0.04151, 0.04258]\n
sample output (imu_corrector.param.yaml) # Estimated by deviation_estimator\n/**:\n ros__parameters:\n angular_velocity_stddev_xx: 0.01798\n angular_velocity_stddev_yy: 0.01798\n angular_velocity_stddev_zz: 0.01798\n angular_velocity_offset_x: -0.00952\n angular_velocity_offset_y: -0.00095\n angular_velocity_offset_z: 0.00607\n
sample output (vehicle_velocity_converter.param.yaml)
# Estimated by deviation_estimator\n/**:\n ros__parameters:\n speed_scale_factor: 0.99507\n velocity_stddev_xx: 0.16708\n velocity_stddev_xx: 0.1 # Default value\nframe_id: base_link # Default value\n
unit tool If you build normally, a binary will be generated under `install/deviation_estimator/lib/`.
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-up-to deviation_estimator\nsource ~/autoware/install/setup.bash\n~/autoware/install/deviation_estimator/lib/deviation_estimator/deviation_estimator_unit_tool <path_to_rosbag>\n
"},{"location":"localization/deviation_estimation_tools/ReadMe/#b-evaluation-step","title":"B. Evaluation step","text":"
Here, you can evaluate the estimated standard deviation and bias using a package deviation_evaluator
. Execute the following command:
ros2 launch deviation_evaluator deviation_evaluator.launch.xml map_path:=MAP_PATH rviz:=true in_imu:=YOUR_IMU_TOPIC_NAME in_wheel_odometry:=YOUR_VELOCITY_TOPIC_NAME\nros2 bag play YOUR_BAG\n
"},{"location":"localization/deviation_estimation_tools/ReadMe/#c-visualization-step","title":"C. Visualization step","text":"After the evaluation, run the following command to generate the final results in $HOME/deviation_evaluator_sample
.
pip3 install -r requirements.txt\nros2 launch deviation_evaluator deviation_evaluation_visualizer.launch.xml\n
Done!
"},{"location":"localization/deviation_estimation_tools/ReadMe/#2-description-of-deviation-estimator","title":"2. Description of Deviation Estimator","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#overview","title":"Overview","text":"The Deviation Estimator estimates the standard deviation and bias for velocity and yaw bias, by comparing the velocity and gyro observations with ground truth poses (e.g. from LiDAR-based localization).
Here are some assumptions made for input data:
The deviation_estimator
can be launched with the following command.
ros2 launch deviation_estimator deviation_estimator.launch.xml\nros2 bag play YOUR_BAG # You can also play in a faster rate, e.g. -r 5\n
The parameters and input topic names can be seen in the deviation_estimator.launch.xml
file. YOUR_BAG
should include all the required inputs written below.
in_pose_with_covariance |
geometry_msgs::msg::PoseWithCovarianceStamped` Input pose in_imu
sensor_msgs::msg::Imu
Input IMU data in_wheel_odometry
autoware_vehicle_msgs::msg::VelocityReport
Input wheel odometry"},{"location":"localization/deviation_estimation_tools/ReadMe/#output","title":"Output","text":"Name Type Description /estimated_stddev_vx
std_msgs::msg::Float64
estimated standard deviation of vx /estimated_stddev_angular_velocity
geometry_msgs/msg/Vector3
estimated standard deviation of angular velocity /estimated_coef_vx
std_msgs::msg::Float64
coef of vx /estimated_bias_angular_velocity
geometry_msgs/msg/Vector3
bias of angular velocity"},{"location":"localization/deviation_estimation_tools/ReadMe/#parameters-for-deviation-estimator","title":"Parameters for deviation estimator","text":"Name Type Description Default value show_debug_info bool Flag to display debug info true t_design double Maximum expected duration of dead-reckoning [s] 10.0 x_design double Maximum expected trajectory length of dead-reckoning [m] 30.0 time_window double Estimation period [s] 4.0 results_dir string Text path where the estimated results will be stored \"$(env HOME)\" gyro_estimation.only_use_straight bool Flag to use only straight sections for gyro estimation true gyro_estimation.only_use_moving bool Flag to use only moving sections for gyro estimation true gyro_estimation.only_use_constant_velocity bool Flag to use only constant velocity sections for gyro estimation true velocity_estimation.only_use_straight bool Flag to use only straight sections for velocity estimation true velocity_estimation.only_use_moving bool Flag to use only moving sections for velocity estimation true velocity_estimation.only_use_constant_velocity bool Flag to use only constant velocity sections for velocity estimation true"},{"location":"localization/deviation_estimation_tools/ReadMe/#functions","title":"Functions","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#bias-estimation","title":"Bias estimation","text":"By assuming that the pose information is a ground truth, the node estimates the bias of velocity and yaw rate.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#standard-deviation-estimation","title":"Standard deviation estimation","text":"The node also estimates the standard deviation of velocity and yaw rate. This can be used as a parameter in ekf_localizer
. Note that the final estimation takes into account the bias.
You can use deviation_evaluator
for evaluating the estimated standard deviation parameters. This can be run with the following command:
ros2 launch deviation_evaluator deviation_evaluator.launch.xml map_path:=MAP_PATH rviz:=true in_imu:=YOUR_IMU_TOPIC_NAME in_wheel_odometry:=YOUR_VELOCITY_TOPIC_NAME\nros2 bag play YOUR_BAG\n
All the ros2bag and config files will be stored in $HOME/deviation_evaluator_sample
(you can change this with save_dir
parameter in the launch file).
deviation_evaluator
supports rviz visualization. To use this feature, set rviz:=true
and map_path:=/path/to/map_folder
.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#b-check-the-compatibility-with-a-threshold-in-localization_error_monitor","title":"B. Check the compatibility with a threshold in
localization_error_monitor
","text":"The deviation_evaluator
also checks the compatibility of the estimated parameters and the threshold in localization_error_monitor
.
Concretely, it checks if the two following statement holds:
localization_error_monitor
would NOT diagnose the system as WARN
nor ERROR
as long as the NDT is available.localization_error_monitor
detects the anomaly with a recall over 0.99.Given the result of this validation, the users can verify that the estimated parameters in deviation_estimator
can be safely applied to Autoware.
Here, note that the localization_error_monitor
treat the system as an anomaly if either of error along long-axis of confidence ellipse or error along lateral direction is over threshold. Please refer to the package in autoware.universe for detail.
deviation_evaluator
","text":"The architecture of deviation_evaluator
is shown below. It launches two ekf_localizer
, one for ground truth estimation and one for (partially) dead reckoning estimation. Outputs of both ekf_localizer
will be recorded and analyzed with deviation_evaluation_visualizer
.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#inputs-outputs_1","title":"Inputs / Outputs","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#input_1","title":"Input","text":"Name Type Description
in_ndt_pose_with_covariance
geometry_msgs::msg::PoseWithCovarianceStamped
Input pose in_ekf_dr_odom
nav_msgs::msg::Odometry
dead-reckoning EKF outputs in_ekf_gt_odom
nav_msgs::msg::Odometry
ground-truth EKF outputs"},{"location":"localization/deviation_estimation_tools/ReadMe/#output_1","title":"Output","text":"Name Type Description out_pose_with_covariance_dr
geometry_msgs::msg::PoseWithCovarianceStamped
Output pose (for dead reckoning ekf_localizer
) out_pose_with_covariance_gt
geometry_msgs::msg::PoseWithCovarianceStamped
Output pose (for ground truth ekf_localizer
) out_initial_pose_with_covariance
geometry_msgs::msg::PoseWithCovarianceStamped
Output initial pose (for both ekf_localizer
)"},{"location":"localization/deviation_estimation_tools/ReadMe/#parameters-for-deviation-evaluator","title":"Parameters for deviation evaluator","text":"Name Type Description Default value rviz bool Show rviz if true false map_path string Path to the directory where map data (OpenStreetMap or .osm data) is saved \"\" save_dir string Output directory where figures, parameter files, and scores are saved \"$(env HOME)/deviation_evaluator_sample\" period double [s] Duration of cycle 10 (in config/deviation_evaluator.yaml
) cut double [s] Duration of ndt-cut-off 9 (in config/deviation_evaluator.yaml
)"},{"location":"localization/deviation_estimation_tools/ReadMe/#4-reflect-the-estimated-parameters-in-autoware","title":"4. Reflect the estimated parameters in Autoware","text":"The results of deviation_estimator
is stored in two scripts:
imu_corrector
param file (default: $HOME/imu_corrector.param.yaml
)vehicle_velocity_converter
param file (default: $HOME/vehicle_velocity_converter.param.yaml
)Please modify your Autoware configuration so that it will launch using the above two parameter files.
"},{"location":"localization/deviation_estimation_tools/ReadMe/#5-known-issues","title":"5. Known issues","text":"deviation_evaluator.png
generated by deviation_evaluation_visualizer
may diverge, possibly due to the large covariance caused by a failure in localization.ekf_localizer
in deviation_evaluator
may not start properly. As for now, please launch deviation_evaluator
first and then run ros2 bag play
to provide pose and twist data.This package is for preprocessing the lanelet map.
"},{"location":"map/autoware_lanelet2_map_validator/","title":"autoware_lanelet2_map_validator","text":""},{"location":"map/autoware_lanelet2_map_validator/#autoware_lanelet2_map_validator","title":"autoware_lanelet2_map_validator","text":"autoware_lanelet2_map_validator
is a tool to validate Lanelet2 maps to ensure that Autoware can work properly with it.
This validation tool is an extension of lanelet2_validation so that Autoware specific rules can be applied. As you can see from the codes in the src/validators
directory, the group of validators belong to this tool inherits the lanelet::validation::MapValidator class from the original lanelet2_validation
. Therefore, we believe that reading the source code of the lanelet2_validation
will help you understand this tool better.
Note that this validator is still on construction that there are only a few rules and a template to define those rules.
The official Autoware requirements for lanelet2 maps are described in Vector Map creation requirement specifications (in Autoware Documentation).
"},{"location":"map/autoware_lanelet2_map_validator/#design-concept","title":"Design concept","text":"The autoware_lanelet2_map_validator
is designed to validate .osm
map files by using and extending the lanelet2_validation package for Autoware.
autoware_lanelet2_map_validator
takes the lanelet2 map (.osm file) and requirement set (JSON file, optional) as the input, and output validation results to the console.
If a requirement set is given, autoware_lanelet2_map_validator
also outputs validation results reflecting the input requirement set. See \"Run with a requirement set\" for further information, \"Input file\" to understand the input format, and \"Output file\" to understand the output format.
Basically, you can use the following command to execute autoware_lanelet2_map_validator
. However, note that autoware_lanelet2_map_validator
is a ROS/rclcpp free tool, so you can just run the built executable whatever way.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-all-validators","title":"Run ALL validators","text":"You can use autoware_lanelet2_map_validator
with the following command. This will run all validators including the default built-in validators in the lanelet2_validation.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-a-specific-validator","title":"Run a specific validator","text":"autoware_lanelet2_map_validator
consists of multiple small validators in order to realize complex requirements with a combination of them. If you want to call a few validators, you can select them with the --validator, -v
option.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs --validator mapping.traffic_light.missing_regulatory_elements\n
You can get a list of available validators with the --print
option. (-p
is for --projection
)
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --print\n
"},{"location":"map/autoware_lanelet2_map_validator/#run-with-a-requirement-set","title":"Run with a requirement set","text":"autoware_lanelet2_map_validator
can manage to run a group of validators by a list of validator names. autoware_lanelet2_map_validator
will scan through the input JSON file given by the --input_requirements, -i
option, and output the validation results to the directory given by the --output_directory, -o
option. The output filename will be lanelet2_validation_results.json
.
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator --map_file path/to_your/lanelet2_map.osm --projection mgrs --input_requirements autoware_requirements_set.json --output_directory ./\n
(Short version)
ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator -m path/to_your/lanelet2_map.osm -p mgrs -i autoware_requirements_set.json -o ./\n
"},{"location":"map/autoware_lanelet2_map_validator/#input-file","title":"Input file","text":"The JSON file input should follow the structure like this example.
{\n\"requirements\": [\n{\n\"id\": \"vm-02-02\",\n\"validators\": [\n{\n\"name\": \"mapping.stop_line.missing_regulatory_elements\"\n}\n]\n},\n{\n\"id\": \"vm-04-01\",\n\"validators\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n},\n{\n\"name\": \"mapping.crosswalk.regulatory_element_details\",\n\"prerequisites\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n}\n]\n}\n]\n},\n{\n\"id\": \"vm-05-01\",\n\"validators\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n},\n{\n\"name\": \"mapping.traffic_light.regulatory_element_details\",\n\"prerequisites\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n}\n]\n}\n]\n}\n]\n}\n
requirements
field.requirements
field MUST be a list of requirements. A requirement MUST haveid
: The id of the requirement. Its name is arbitrary.validators
: A list of validators that structures the requirement.name
field.--print
option.prerequisites
to each validator. Then, the validator will only be run when the prerequisites pass the validation.prerequisites
field, you can add forgive_warnings: true
in order to run the validator even if the prerequisites output warning issues. (Error issues from prerequisites will still skip the validation.). Note that NOT writing the forgive_warnings
field and writing forgive_warnings: false
means the same.version
) besides requirements
.When the input_requirements
is thrown to autoware_lanelet2_map_validator
, it will output a lanelet2_validation_results.json
file which looks like the following example.
{\n\"requirements\": [\n{\n\"id\": \"vm-02-02\",\n\"passed\": true,\n\"validators\": [\n{\n\"name\": \"mapping.stop_line.missing_regulatory_elements\",\n\"passed\": true\n}\n]\n},\n{\n\"id\": \"vm-04-01\",\n\"passed\": false,\n\"validators\": [\n{\n\"issues\": [\n{\n\"id\": 163,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 164,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 165,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 166,\n\"message\": \"No regulatory element refers to this crosswalk.\",\n\"primitive\": \"lanelet\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\",\n\"passed\": false\n},\n{\n\"issues\": [\n{\n\"id\": 0,\n\"message\": \"Prerequisites didn't pass\",\n\"primitive\": \"primitive\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.crosswalk.regulatory_element_details\",\n\"passed\": false,\n\"prerequisites\": [\n{\n\"name\": \"mapping.crosswalk.missing_regulatory_elements\"\n}\n]\n}\n]\n},\n{\n\"id\": \"vm-05-01\",\n\"passed\": false,\n\"validators\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\",\n\"passed\": true\n},\n{\n\"issues\": [\n{\n\"id\": 9896,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9918,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9838,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n},\n{\n\"id\": 9874,\n\"message\": \"Regulatory element of traffic light must have a stop line(ref_line).\",\n\"primitive\": \"regulatory element\",\n\"severity\": \"Error\"\n}\n],\n\"name\": \"mapping.traffic_light.regulatory_element_details\",\n\"passed\": false,\n\"prerequisites\": [\n{\n\"name\": \"mapping.traffic_light.missing_regulatory_elements\"\n}\n]\n}\n]\n}\n]\n}\n
lanelet2_validation_results.json
inherits the JSON file of input_requirements
and add results to it.autoware_lanelet2_map_validator
adds a boolean passed
field to each requirement. If all validators of the requirement have been passed, the passed
field of the requirement will be true
(false
if not).passed
field is also given to each validator. If the validator found any issues the passed
field will turn to be false
(true
if not), and adds an issues
field which is a list of issues found. Each issue contains information of severity
, primitive
, id
, and message
.-h, --help
Explains about this tool and show a list of options --print
Print all available checker without running them -m, --map_file
Path to the map to be validated -i, --input_requirements
Path to the JSON file where the list of requirements and validations is written -o, --output_directory
Directory to save the list of validation results in a JSON format -v, --validator
Comma separated list of regexes to filter the applicable validators. Will run all validators by default. Example: mapping.*
to run all checks for the mapping -p, --projector
Projector used for loading lanelet map. Available projectors are: mgrs
, utm
, and transverse_mercator
. -l, --location
Location of the map (for instantiating the traffic rules), e.g. de for Germany --participants
Participants for which the routing graph will be instantiated (default: vehicle) --lat
latitude coordinate of map origin. This is required for the transverse mercator and utm projector. --lon
longitude coordinate of map origin. This is required for the transverse mercator and utm projector."},{"location":"map/autoware_lanelet2_map_validator/#available-validators","title":"Available validators","text":"Since there will be hundreds of validators in the future, the documents for each validator should categorized in the docs file. The directory structure should be the same to that of the src/validators
directory.
If you want to contribute to autoware_lanelet2_map_validator
, please check out the how_to_contribute first.
This is a table describing the correspondence between the validators that each requirement consists of. The \"Validators\" column will be blank if it hasn't be implemented.
ID Requirements Validators vm-01-01 Lanelet basics vm-01-02 Allowance for lane changes vm-01-03 Linestring sharing vm-01-04 Sharing of the centerline of lanes for opposing traffic vm-01-05 Lane geometry vm-01-06 Line position (1) vm-01-07 Line position (2) vm-01-08 Line position (3) vm-01-09 Speed limits vm-01-10 Centerline vm-01-11 Centerline connection (1) vm-01-12 Centerline connection (2) vm-01-13 Roads with no centerline (1) vm-01-14 Roads with no centerline (2) vm-01-15 Road shoulder vm-01-16 Road shoulder Linestring sharing vm-01-17 Side strip vm-01-18 Side strip Linestring sharing vm-01-19 Walkway vm-02-01 Stop line alignment (Not detectable) vm-02-02 Stop sign mapping.stop_line.missing_regulatory_elements vm-03-01 Intersection criteria vm-03-02 Lanelet's turn direction and virtual vm-03-03 Lanelet width in the intersection vm-03-04 Lanelet creation in the intersection vm-03-05 Lanelet division in the intersection vm-03-06 Guide lines in the intersection vm-03-07 Multiple lanelets in the intersection vm-03-08 Intersection Area range mapping.intersection.intersection_area_validity, mapping.intersection.intersection_area_segment_type vm-03-09 Range of Lanelet in the intersection vm-03-10 Right of way (with signal) vm-03-11 Right of way (without signal) vm-03-12 Right of way supplements vm-03-13 Merging from private area, sidewalk vm-03-14 Road marking vm-03-15 Exclusive bicycle lane vm-04-01 Traffic light basics mapping.traffic_light.missing_regulatory_elements, mapping.traffic_light.regulatory_element_details, mapping.traffic_light.missing_referrers vm-04-02 Traffic light position and size mapping.traffic_light.correct_facing (Undone) vm-04-03 Traffic light lamps vm-05-01 Crosswalks across the road mapping.crosswalk.missing_regulatory_elements, mapping.crosswalk.regulatory_element_details vm-05-02 Crosswalks with pedestrian signals vm-05-03 Deceleration for safety at crosswalks vm-05-04 Fences vm-06-01 Buffer Zone vm-06-02 No parking signs vm-06-03 No stopping signs vm-06-04 No stopping sections vm-06-05 Detection area vm-07-01 Vector Map creation range vm-07-02 Range of detecting pedestrians who enter the road vm-07-03 Guardrails, guard pipes, fences vm-07-04 Ellipsoidal height"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/","title":"How to contribute to `autoware_lanelet2_map_validator`","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#how-to-contribute-to-autoware_lanelet2_map_validator","title":"How to contribute toautoware_lanelet2_map_validator
","text":"Your contribution is welcome to achieve a broad view of validation for lanelet2 maps. This document gives you the instructions on how to add a validator to autoware_lanelet2_map_validator
. Please take a look at the Design Concept and follow the Contribution Guide.
The main goal of autoware_lanelet2_map_validator
is to validate whether the lanelet2 map matches the vector map requirements for Autoware. autoware_lanelet2_map_validator
achieves this by running a list of small validators. In other words, each vector map requirement will be validated by one or more validators. It is recommended to keep validators small and they don't have to be unique to a specific requirement so that we can broaden the expression of map requirements. (It doesn't mean that a validator should output only one kind of error!)
The list of small validators will be defined as a JSON file (see autoware_requirement_set.json
for an example), and the output will also be a JSON file that appends validation results to a copy of the input. See How to use autoware_lanelet2_map_validator
for further information about how the input and output are processed.
Please note that the validators are categorized according to the vector map requirements written in the Autoware Documentation. If there are any suggestions for new categories please let the pull request (PR) reviewers know. The available categories as of now are
This section is aimed at contributors who want to add their own validators. If you want to change the core process of autoware_lanelet2_map_validator
, please open a PR and discuss it with the maintainers.
autoware_lanelet2_map_validator
is based on the Lanelet2 library provided by fzi-forschungszentrum-informatik.
Contributors are encouraged to make their validators by following the class structure shown in validator_template.cpp
and validator_template.hpp
. Looking at other implementations may also be helpful.
.cpp
) must belong to src/validators/\\<CATEGORY\\>/
.hpp
) must belong to src/include/lanelet2_map_validator/validators/\\<CATEGORY\\>/
.hpp
file).aaa.bbb.ccc
aaa
) must be either mapping
, routing
or rule
bbb
) should be either general
, lane
, stop_line
, intersection
, traffic_light
, crosswalk
, area
, others
.Bbb.Ccc-001
)operator()
function that outputs an Issues (a.k.a vector\\<Issue>) object. Not all of the implementation has to be written in the operator; you can privately define and use functions in your validator class.autoware_lanelet2_map_validator
outputs issue codes, please add an issue code prefix with square brackets on top of your issue message.append_issue_code_prefix
function to generate the issue code prefix.001
to your issue code.Contributors must also provide test codes to ensure your validator is working properly and be able to be tested again when changes occur to the validator in the future.
"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-path-structure_1","title":"Restrictions for path structure","text":".cpp
) must belong to test/src/
.test_<ORIGINAL_SOURCE_NAME>.cpp
.osm
) for testing must belong to test/data/map/\\<CATEGORY\\>/
.json
) for testing must belong to test/data/json/
colcon test
. It is strongly recommended to use the gtest (googletest) format.MapValidationTester
class may be useful to inherit common map loading process.test/data/map/sample_map.osm
. If sample_map.osm
violates the validation or doesn't contain the primitive to validate, please fix or add the primitives to it.CMakeLists.txt
using the add_validation_test
function.Please check that the autoware_lanelet2_map_validator
works perfectly.
colcon test --packages-select autoware_lanelet2_map_validator --event-handlers console_cohesion+
and confirm that all tests pass.ros2 run autoware_lanelet2_map_validator autoware_lanelet2_map_validator -p mgrs -m <PATH_TO_sample_map.osm> -i <PATH_TO_autoware_requirement_set.json> -o ./\n
"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#4-write-a-document","title":"4. Write a document","text":"Contributors must provide documentation to explain what the validator can do. The document must explain the following.
In addition, add a link of the document to the table Relationship between requirements and validators in the main README.md
to let the users know which map requirement your validator relates with.
Submit a pull request to the autowarefoundation/autoware_tools repository.
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/","title":"missing_regulator_elements_for_crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#missing_regulator_elements_for_crosswalk","title":"missing_regulator_elements_for_crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#validator-name","title":"Validator name","text":"mapping.crosswalk.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#feature","title":"Feature","text":"This validator checks whether each crosswalk
subtype lanelet has a relevant regulatory element. Required information for a crosswalk is written in the Autoware documentation.
The output issue marks \"lanelet\" as the primitive, and the lanelet ID is written together as ID.
Issue Code Message Severity Description Approach Crosswalk.MissingRegulatoryElements-001 \"No regulatory element refers to this crosswalk.\" Error There is acrosswalk
subtype lanelet that hasn't been referred to any regulatory element. Create a crosswalk
subtype regulatory element and refer to the crosswalk lanelet."},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/#related-source-codes","title":"Related source codes","text":"mapping.crosswalk.regulatory_element_details
"},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#feature","title":"Feature","text":"This validator checks whether the details in the crosswalk
subtype regulatory elements are valid. Required information for a crosswalk is written in the Autoware documentation. This validator checks eight types of issues.
The output issue marks \"lanelet\", \"linestring\" or \"regulatory_element\" as the primitive, and the regulatory element ID is written together as ID.
Issue Code Message Severity Primitive Description Approach Crosswalk.RegulatoryElementDetails-001 \"Regulatory element of crosswalk must have lanelet of crosswalk(refers).\" Error regulatory element There is acrosswalk
subtype regulatory element that has no refers
es. Write refers
referring to a crosswalk
subtype lanelet in the regulatory element Crosswalk.RegulatoryElementDetails-002 \"Regulatory element of crosswalk must have only one lanelet of crosswalk(refers).\" Error regulatory element There is a crosswalk
subtype regulatory element that has multiple refers
es. A crosswalk
subtype regulatory element can have only one refers
. Remove the refers
that is not a crosswalk lanelet. Crosswalk.RegulatoryElementDetails-003 \"Regulatory element of crosswalk does not have stop line(ref_line).\" Info regulatory element There is a crosswalk
subtype regulatory element that has no ref_line
s Generally, there should be a stop line for the crosswalk. Be sure that the stop line exists or doesn't. Crosswalk.RegulatoryElementDetails-004 \"Regulatory element of crosswalk is nice to have crosswalk_polygon.\" Warning regulatory element There is a crosswalk
subtype regulatory element that has no crosswalk_polygon
s. It is recommended to surround a crosswalk with a crosswalk_polygon
. Create one and add a crosswalk_polygon
role member to the regulatory element with the polygon ID. Crosswalk.RegulatoryElementDetails-005 \"Regulatory element of crosswalk must have only one crosswalk_polygon.\" Error regulatory element There is a crosswalk
subtype regulatory element that has multiple crosswalk_polygon
s. Only one crosswalk_polygon
is allowed per crosswalk. Remove the unnecessary ones. Crosswalk.RegulatoryElementDetails-006 \"Refers of crosswalk regulatory element must have type of crosswalk.\" Error lanelet There is a crosswalk
subtype regulatory element whose refers
is not a crosswalk
subtype lanelet. Check that the refers
is a crosswalk
subtype lanelet Crosswalk.RegulatoryElementDetails-007 \"ref_line of crosswalk regulatory element must have type of stopline.\" Error linestring There is a crosswalk
subtype regulatory element whose ref_line
is not a stop_line
type linestring. Check that the ref_line
is a stop_line
type linestring Crosswalk.RegulatoryElementDetails-008 \"Crosswalk polygon of crosswalk regulatory element must have type of crosswalk_polygon.\" Error polygon There is a crosswalk
subtype regulatory element whose crosswalk_polygon
is not a crosswalk_polygon
type polygon. Check that the crosswalk_polygon
mentioned in the regulatory element refers to a crosswalk_polygon
type area."},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#related-source-codes","title":"Related source codes","text":"mapping.intersection.intersection_area_segment_type
"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#feature","title":"Feature","text":"This validator check whether each intersection_area
type polygon is made from points that belong to road_border
type linestrings or the starting/ending edge of a lanelet.
This is achieved by the following procedure.
road_border
type linestrings within or intersecting the 2D bounding box.The validator outputs the following issue with the corresponding ID of the primitive.
Issue Code Message Severity Primitive Description Approach Intersection.IntersectionAreaSegmentType-001 \"This intersection area is not made by points from road_border linestrings or lanelet edges. (Point ID: \\<POINT ID LIST>)\" Error Polygon Theintersection_area
polygon has points that doesn't belong to road_border
type linestrings or lanelet edges. The violating points are listed up at \\<POINT ID LIST>. Ensure that the intersection_area
is formed ONLY by road_border
linestrings and lanelet edges."},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#supplementary-information","title":"Supplementary information","text":"Note that this validator only examines what type of linestring the points constituting the polygon belongs to, and doesn't examine they have a valid connection. Use the mapping.intersection.intersection_area_validity
to check whether the polygon is boost::geometry::is_valid()
.
mapping.intersection.intersection_area_validity
"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#feature","title":"Feature","text":"This validator check whether each intersection_area
type polygon satisfies boost::geometry::is_valid
.
The validator outputs the following issue with the corresponding ID of the primitive.
Issue Code Message Severity Primitive Description Approach Intersection.IntersectionAreaValidity-001 \"This intersection_area doesn't satisfy boost::geometry::is_valid (reason: \\<MESSAGE>) Error Polygon Theintersection_area
polygon didn't satisfy boost::geometry::is_valid
. There are several reasons expected and it is written in \"(reason: \\<MESSAGE>)\". The \\<MESSAGE> is a copy of the output message defined in the boost::geometry
library."},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#related-source-codes","title":"Related source codes","text":"mapping.stop_line.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#feature","title":"Feature","text":"This validator checks whether each stop_line
type linestring has a relevant regulatory element. Required information for a stop line is written in the Autoware documentation.
The output issue marks \"linestring\" as the primitive, and the linestring ID is written together as ID.
Issue Code Message Severity Description Approach StopLine.MissingRegulatoryElements-001 \"No regulatory element refers to this stop line.\" Error There is astop_line
type linestring that hasn't been referred to any regulatory element. Create a regulatory element that refers to this stop line."},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.missing_referrers
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether each traffic_light
type regulatory element has been referred by at least one lanelet.
traffic_light
type regulatory element that hasn't been referred by any lanelet. The lanelet that might be controlled by the traffic light must refer this regulatory element."},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.missing_regulatory_elements
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether each traffic_light
type linestring has a relevant regulatory element. Required information for traffic lights is written in the Autoware documentation.
The output issue marks \"linestring\" as the primitive, and the linestring ID is written together as ID.
Issue Code Message Severity Description Approach TrafficLight.MissingRegulatoryElements-001 \"No regulatory element refers to this traffic light.\" Error There is atraffic_light
type linestring that hasn't been referred to any regulatory element. Create a traffic_light
subtype regulatory element that refers to this linestring"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.regulatory_element_details
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#feature","title":"Feature","text":"This validator checks whether the details in the traffic_light
subtype regulatory elements are valid. Required information for traffic lights is written in the Autoware documentation. This validator checks four types of issues.
The output issue marks \"linestring\" or \"regulatory element\" as the primitive, and the lanelet ID is written together as ID.
Issue Code Message Severity Primitive Description Approach TrafficLight.RegulatoryElementDetails-001 \"Regulatory element of traffic light must have a stop line(ref_line).\" Error regulatory element There is atraffic_light
subtype regulatory element that has no ref_line
s Add ref_line
to the regulatory element that refers to the id of the stop line linestring. TrafficLight.RegulatoryElementDetails-002 \"Refers of traffic light regulatory element must have type of traffic_light.\" Error linestring There is a traffic_light
subtype regulatory element whose refers
is not a traffic_light
type linestring. Check that the refers
in the regulatory element is a traffic_light
type linestring. TrafficLight.RegulatoryElementDetails-003 \"ref_line of traffic light regulatory element must have type of stop_line.\" Error linestring There is a traffic_light
subtype regulatory element whose ref_line
is not a stop_line
type linestring. Check that the ref_line
in the regulatory element is a stop_line
type linestring"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#related-source-codes","title":"Related source codes","text":"mapping.traffic_light.correct_facing
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#recommended-prerequisite-validators","title":"Recommended prerequisite validators","text":"This validator checks whether each traffic_light
linestring is drawn with the correct direction, because the linestring direction describes the facing of the traffic_light. If the traffic light is facing to the viewer, the traffic light linestring must be drawn from the left point to the right point seen from the viewer. Note that this validator only check traffic lights whose subtype are red_yellow_green
. This validator checks five types of issues. The former three issues are related to prerequisites to perform correct validation rather than direct validation results of the traffic light facing. The latter two issues mention to the traffic light facing.
All output issues specify the traffic_light \"linestring\" or the traffic_light \"regulatory_element\" as the primitive, and the primitive ID will be specified as the ID.
Issue Code Message Severity Primitive Description Approach TrafficLight.CorrectFacing-001 \"Lanelets referring this traffic_light have several divergent starting lines\" Info Linestring Atraffic_light
subtype regulatory element may be referred by multiple lanelets. This warning appears when the starting line of those lanelets (which tends to be the same or similar) diverge too much. This hardly happens, but maybe the referring lanelet is completely wrong or the traffic light cannot be seen from the starting edge of the referring lanelet. TrafficLight.CorrectFacing-002 \"The linestring direction seems to be wrong.\" Error Linestring This traffic_light
type linestring is drawn with the wrong direction. Fix the traffic light linestring so that it is drawn from the left to the right seen from the stop line. TrafficLight.CorrectFacing-003 \"The linestring direction has been judged as both correct and wrong.\" Warning Linestring The validator cannot judge whether the direction of this traffic_light
type linestring is correct. (Mostly they are correct.) This occurs from special regulatory element definitions and technical issues written below. This occurs in the Difficult Case written below. This validator currently cannot determine that the traffic light facing is correct in this case, so please recheck it by yourself and please ignore it if it is correct."},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#procedure","title":"Procedure","text":"This flow chart shows the simplified procedure how the validation is done.
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#difficult-cases","title":"Difficult cases","text":"Currently, this validator assumes that all traffic lights in the same regulatory element has the same facing. However, there might be cases that this assumption doesn't hold, and this is only when traffic lights on the other side of the road is in the same regulatory element. It is hard to tell that this traffic light is for this road or the opposite road since the facing of the traffic light is unknown yet, so this validator keeps its ambiguity for now. This kind of traffic light will be judged as correct from the this side but not from the other side, and it will be misjudged oppositely if the traffic light linestring id drawn wrong. This validator will throws a warning for this case and tells the user to check it by their own.
We assume that this kind of traffic light could be found only a few, but if you feel this concerning you can remove the traffic light on the other road from the regulatory element. This workaround affects nothing if your planning module doesn't utilize the information that the traffic light on the other road has the same timing of lighting.
"},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#related-source-codes","title":"Related source codes","text":"This is a tool for processing pcd files, and it can perform the following functions:
Currently, only pcl::PointXYZ
and pcl::PointXYZI
are supported. Any PCD will be loaded as those two types.
This tool can be used with files that have data fields other than XYZI
(e.g., XYZRGB
) and files that only contain XYZ
.
XYZI
are ignored during loading.XYZ
-only data, the intensity
field is assigned 0.cd <PATH_TO_pilot-auto.*> # OR <PATH_TO_autoware>\ncd src/\ngit clone git@github.com:autowarefoundation/autoware_tools.git\ncd ..\ncolcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --catkin-skip-building-tests --symlink-install --packages-up-to autoware_pointcloud_divider\n
"},{"location":"map/autoware_pointcloud_divider/#usage","title":"Usage","text":"Select directory, process all files found with find $INPUT_DIR -name \"*.pcd\"
.
ros2 launch autoware_pointcloud_divider pointcloud_divider.launch.xml input_pcd_or_dir:=<INPUT_DIR> output_pcd_dir:=<OUTPUT_DIR> prefix:=<PREFIX>\n
Name Description INPUT_DIR Directory that contains all PCD files OUTPUT_DIR Output directory name PREFIX Prefix of output PCD file name INPUT_DIR
and OUTPUT_DIR
should be specified as absolute paths.
NOTE: The folder OUTPUT_DIR
is auto generated. If it already exists, all files within that folder will be deleted before the tool runs. Hence, users should backup the important files in that folder if necessary.
How the point cloud is processed.
How the PCD file is named
"},{"location":"map/autoware_pointcloud_divider/#parameter-example","title":"Parameter example","text":"Dividing point clouds without downsampling
use_large_grid: false\nleaf_size: -1.0 # any negative number\ngrid_size_x: 20\ngrid_size_y: 20\n
Dividing and downsampling point clouds
use_large_grid: false\nleaf_size: 0.2\ngrid_size_x: 20\ngrid_size_y: 20\n
The metadata file should be named metadata.yaml
. It contains the following fields:
x_resolution
: The resolution along the X-axis.y_resolution
: The resolution along the Y-axis.Additionally, the file contains entries for individual point cloud files (.pcd
files) and their corresponding grid coordinates. The key is the file name, and the value is a list containing the X and Y coordinates of the lower-left corner of the grid cell associated with that file. The grid cell's boundaries can be calculated using the x_resolution
and y_resolution
values.
For example:
x_resolution: 100.0\ny_resolution: 150.0\nA.pcd: [1200, 2500] # -> 1200 <= x <= 1300, 2500 <= y <= 2650\nB.pcd: [1300, 2500] # -> 1300 <= x <= 1400, 2500 <= y <= 2650\nC.pcd: [1200, 2650] # -> 1200 <= x <= 1300, 2650 <= y <= 2800\nD.pcd: [1400, 2650] # -> 1400 <= x <= 1500, 2650 <= y <= 2800\n
"},{"location":"map/autoware_pointcloud_divider/#license","title":"LICENSE","text":"Parts of files grid_info.hpp, pcd_divider.hpp, and pcd_divider.cpp are copied from MapIV's pointcloud_divider and are under BSD-3-Clauses license. The remaining code are under Apache License 2.0
"},{"location":"map/autoware_pointcloud_merger/","title":"autoware_pointcloud_merger","text":""},{"location":"map/autoware_pointcloud_merger/#autoware_pointcloud_merger","title":"autoware_pointcloud_merger","text":"This is a tool for processing pcd files, and it can perform the following functions:
Currently, only pcl::PointXYZ
and pcl::PointXYZI
are supported. Any PCD will be loaded as those two types .
This tool can be used with files that have data fields other than XYZI
(e.g., XYZRGB
) and files that only contain XYZ
.
XYZI
are ignored during loading.XYZ
-only data, the intensity
field is assigned 0.cd <PATH_TO_pilot-auto.*> # OR <PATH_TO_autoware>\ncd src/\ngit clone git@github.com:autowarefoundation/autoware_tools.git\ncd ..\ncolcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --catkin-skip-building-tests --symlink-install --packages-up-to autoware_pointcloud_merger\n
"},{"location":"map/autoware_pointcloud_merger/#usage","title":"Usage","text":"Merger all PCD files from the input directory into a single output PCD
ros2 launch autoware_pointcloud_merger pointcloud_merger.launch.xml input_pcd_dir:=<INPUT_DIR> output_pcd:=<OUTPUT_PCD>\n
Name Description INPUT_DIR Directory that contains all input PCD files OUTPUT_PCD Name of the output PCD file INPUT_DIR
and OUTPUT_PCD
should be specified as absolute paths.
Parts of files pcd_merger.hpp, and pcd_merger.cpp are copied from MapIV's pointcloud_divider and are under BSD-3-Clauses license. The remaining code are under Apache License 2.0
"},{"location":"planning/autoware_planning_data_analyzer/","title":"Planning Data Analyzer","text":""},{"location":"planning/autoware_planning_data_analyzer/#planning-data-analyzer","title":"Planning Data Analyzer","text":""},{"location":"planning/autoware_planning_data_analyzer/#usage","title":"Usage","text":"ros2 launch autoware_planning_data_analyzer behavior_analyzer.launch.xml bag_path:=<ROSBAG>\n
"},{"location":"planning/autoware_planning_data_analyzer/#output","title":"Output","text":"Name Type Description ~/output/manual_metrics
tier4_debug_msgs::msg::Float32MultiArrayStamped
Metrics calculated from the driver's driving trajectory. ~/output/system_metrics
tier4_debug_msgs::msg::Float32MultiArrayStamped
Metrics calculated from the autoware output. ~/output/manual_score
tier4_debug_msgs::msg::Float32MultiArrayStamped
Driving scores calculated from the driver's driving trajectory. ~/output/system_score
tier4_debug_msgs::msg::Float32MultiArrayStamped
Driving scores calculated from the autoware output."},{"location":"planning/autoware_route_client/","title":"Route Client","text":""},{"location":"planning/autoware_route_client/#route-client","title":"Route Client","text":"This package contains a tool to send request to set route.
"},{"location":"planning/autoware_route_client/#usage","title":"Usage","text":""},{"location":"planning/autoware_route_client/#prepare-a-route-file","title":"Prepare a route file","text":"Prepare a YAML file containing route information. The file format is like following:
goal:\nposition:\nx: 0.0\ny: 0.0\nz: 0.0\norientation:\nx: 0.0\ny: 0.0\nz: 0.0\nw: 0.0\nsegments:\n- preferred:\nid: 0\ntype: lane\nalternatives:\n- id: 1\ntype: lane\n- preferred:\nid: 2\ntype: lane\nalternatives: []\n- preferred:\nid: 3\ntype: lane\nalternatives:\n- id: 4\ntype: lane\n
"},{"location":"planning/autoware_route_client/#send-request-to-set-route","title":"Send request to set route","text":"Execute following command.
ros2 run autoware_route_client route_client.py <path_to_yaml_file>\n
"},{"location":"planning/autoware_rtc_replayer/","title":"rtc_replayer","text":""},{"location":"planning/autoware_rtc_replayer/#rtc_replayer","title":"rtc_replayer","text":""},{"location":"planning/autoware_rtc_replayer/#purpose","title":"Purpose","text":"The current issue for RTC commands is that service is not recorded to rosbag, so it's very hard to analyze what was happened exactly. So this package makes it possible to replay rtc commands service from rosbag rtc status topic to resolve that issue.
"},{"location":"planning/autoware_rtc_replayer/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"planning/autoware_rtc_replayer/#input","title":"Input","text":"Name Type Description/debug/rtc_status
tier4_rtc_msgs::msg::CooperateStatusArray CooperateStatusArray that is recorded in rosbag"},{"location":"planning/autoware_rtc_replayer/#output","title":"Output","text":"Name Type Description /api/external/set/rtc_commands
tier4_rtc_msgs::msg::CooperateCommands CooperateCommands that is replayed by this package"},{"location":"planning/autoware_rtc_replayer/#inner-workings-algorithms","title":"Inner-workings / Algorithms","text":""},{"location":"planning/autoware_rtc_replayer/#assumptions-known-limits","title":"Assumptions / Known limits","text":"This package can't replay CooperateCommands correctly if CooperateStatusArray is not stable. And this replay is always later one step than actual however it will not affect much for behavior.
"},{"location":"planning/autoware_rtc_replayer/#future-extensions-unimplemented-parts","title":"Future extensions / Unimplemented parts","text":"tbd.
"},{"location":"planning/planning_debug_tools/","title":"Planning Debug Tools","text":""},{"location":"planning/planning_debug_tools/#planning-debug-tools","title":"Planning Debug Tools","text":"This package contains several planning-related debug tools.
The trajectory_analyzer
visualizes the information (speed, curvature, yaw, etc) along the trajectory. This feature would be helpful for purposes such as \"investigating the reason why the vehicle decelerates here\". This feature employs the OSS PlotJuggler.
This is to visualize stop factor and reason. see the details
"},{"location":"planning/planning_debug_tools/#how-to-use","title":"How to use","text":"please launch the analyzer node
ros2 launch planning_debug_tools trajectory_analyzer.launch.xml\n
and visualize the analyzed data on the plot juggler following below.
"},{"location":"planning/planning_debug_tools/#setup-plotjuggler","title":"setup PlotJuggler","text":"For the first time, please add the following code to reactive script and save it as the picture below! (Looking for the way to automatically load the configuration file...)
You can customize what you plot by editing this code.
in Global code
behavior_path = '/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id/debug_info'\nbehavior_velocity = '/planning/scenario_planning/lane_driving/behavior_planning/path/debug_info'\nmotion_avoid = '/planning/scenario_planning/lane_driving/motion_planning/path_optimizer/trajectory/debug_info'\nmotion_smoother_latacc = '/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_lateral_acc_filtered/debug_info'\nmotion_smoother = '/planning/scenario_planning/trajectory/debug_info'\n
in function(tracker_time)
PlotCurvatureOverArclength('k_behavior_path', behavior_path, tracker_time)\nPlotCurvatureOverArclength('k_behavior_velocity', behavior_velocity, tracker_time)\nPlotCurvatureOverArclength('k_motion_avoid', motion_avoid, tracker_time)\nPlotCurvatureOverArclength('k_motion_smoother', motion_smoother, tracker_time)\n\nPlotVelocityOverArclength('v_behavior_path', behavior_path, tracker_time)\nPlotVelocityOverArclength('v_behavior_velocity', behavior_velocity, tracker_time)\nPlotVelocityOverArclength('v_motion_avoid', motion_avoid, tracker_time)\nPlotVelocityOverArclength('v_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotVelocityOverArclength('v_motion_smoother', motion_smoother, tracker_time)\n\nPlotAccelerationOverArclength('a_behavior_path', behavior_path, tracker_time)\nPlotAccelerationOverArclength('a_behavior_velocity', behavior_velocity, tracker_time)\nPlotAccelerationOverArclength('a_motion_avoid', motion_avoid, tracker_time)\nPlotAccelerationOverArclength('a_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotAccelerationOverArclength('a_motion_smoother', motion_smoother, tracker_time)\n\nPlotYawOverArclength('yaw_behavior_path', behavior_path, tracker_time)\nPlotYawOverArclength('yaw_behavior_velocity', behavior_velocity, tracker_time)\nPlotYawOverArclength('yaw_motion_avoid', motion_avoid, tracker_time)\nPlotYawOverArclength('yaw_motion_smoother_latacc', motion_smoother_latacc, tracker_time)\nPlotYawOverArclength('yaw_motion_smoother', motion_smoother, tracker_time)\n\nPlotCurrentVelocity('localization_kinematic_state', '/localization/kinematic_state', tracker_time)\n
in Function Library
function PlotValue(name, path, timestamp, value)\n new_series = ScatterXY.new(name)\n index = 0\n while(true) do\n series_k = TimeseriesView.find( string.format( \"%s/\"..value..\"[%d]\", path, index) )\n series_s = TimeseriesView.find( string.format( \"%s/arclength[%d]\", path, index) )\n series_size = TimeseriesView.find( string.format( \"%s/size\", path) )\n\n if series_k == nil or series_s == nil then break end\n\n k = series_k:atTime(timestamp)\n s = series_s:atTime(timestamp)\n size = series_size:atTime(timestamp)\n\n if index >= size then break end\n\n new_series:push_back(s,k)\n index = index+1\n end\nend\n\nfunction PlotCurvatureOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"curvature\")\nend\n\nfunction PlotVelocityOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"velocity\")\nend\n\nfunction PlotAccelerationOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"acceleration\")\nend\n\nfunction PlotYawOverArclength(name, path, timestamp)\n PlotValue(name, path, timestamp,\"yaw\")\nend\n\nfunction PlotCurrentVelocity(name, kinematics_name, timestamp)\n new_series = ScatterXY.new(name)\n series_v = TimeseriesView.find( string.format( \"%s/twist/twist/linear/x\", kinematics_name))\n if series_v == nil then\n print(\"error\")\n return\n end\n v = series_v:atTime(timestamp)\n new_series:push_back(0.0, v)\nend\n
Then, run the plot juggler.
"},{"location":"planning/planning_debug_tools/#how-to-customize-the-plot","title":"How to customize the plot","text":"Add Path/PathWithLaneIds/Trajectory topics you want to plot in the trajectory_analyzer.launch.xml
, then the analyzed topics for these messages will be published with TrajectoryDebugINfo.msg
type. You can then visualize these data by editing the reactive script on the PlotJuggler.
The version of the plotJuggler must be > 3.5.0
This node prints the velocity information indicated by planning/control modules on a terminal. For trajectories calculated by planning modules, the target velocity on the trajectory point which is closest to the ego vehicle is printed. For control commands calculated by control modules, the target velocity and acceleration is directly printed. This feature would be helpful for purposes such as \"investigating the reason why the vehicle does not move\".
You can launch by
ros2 run planning_debug_tools closest_velocity_checker.py\n
"},{"location":"planning/planning_debug_tools/#trajectory-visualizer","title":"Trajectory visualizer","text":"The old version of the trajectory analyzer. It is written in Python and more flexible, but very slow.
"},{"location":"planning/planning_debug_tools/#for-other-use-case-experimental","title":"For other use case (experimental)","text":"To see behavior velocity planner's internal plath with lane id add below example value to behavior velocity analyzer and set is_publish_debug_path: true
crosswalk ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/crosswalk/debug_info'\nintersection ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/intersection/debug_info'\ntraffic_light ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/traffic_light/debug_info'\nmerge_from_private ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/merge_from_private/debug_info'\nocclusion_spot ='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/path_with_lane_id/occlusion_spot/debug_info'\n
PlotVelocityOverArclength('v_crosswalk', crosswalk, tracker_time)\nPlotVelocityOverArclength('v_intersection', intersection, tracker_time)\nPlotVelocityOverArclength('v_merge_from_private', merge_from_private, tracker_time)\nPlotVelocityOverArclength('v_traffic_light', traffic_light, tracker_time)\nPlotVelocityOverArclength('v_occlusion', occlusion_spot, tracker_time)\n\nPlotYawOverArclength('yaw_crosswalk', crosswalk, tracker_time)\nPlotYawOverArclength('yaw_intersection', intersection, tracker_time)\nPlotYawOverArclength('yaw_merge_from_private', merge_from_private, tracker_time)\nPlotYawOverArclength('yaw_traffic_light', traffic_light, tracker_time)\nPlotYawOverArclength('yaw_occlusion', occlusion_spot, tracker_time)\n\nPlotCurrentVelocity('localization_kinematic_state', '/localization/kinematic_state', tracker_time)\n
"},{"location":"planning/planning_debug_tools/#perception-reproducer","title":"Perception reproducer","text":"This script can overlay the perception results from the rosbag on the planning simulator synchronized with the simulator's ego pose.
"},{"location":"planning/planning_debug_tools/#how-it-works","title":"How it works","text":"Whenever the ego's position changes, a chronological reproduce_sequence
queue is generated based on its position with a search radius (default to 2 m). If the queue is empty, the nearest odom message in the rosbag is added to the queue. When publishing perception messages, the first element in the reproduce_sequence
is popped and published.
This design results in the following behavior:
-b
, --bag
: Rosbag file path (required)-d
, --detected-object
: Publish detected objects-t
, --tracked-object
: Publish tracked objects-r
, --search-radius
: Set the search radius in meters (default: 1.5m). If set to 0, always publishes the nearest message-c
, --reproduce-cool-down
: Set the cool down time in seconds (default: 80.0s)-p
, --pub-route
: Initialize localization and publish a route based on poses from the rosbag-n
, --noise
: Apply perception noise to objects when publishing repeated messages (default: True)-f
, --rosbag-format
: Specify rosbag data format (default: \"db3\")-v
, --verbose
: Output debug dataFirst, launch the planning simulator, and put the ego pose. Then, run the script according to the following command.
By designating a rosbag, perception reproducer can be launched.
ros2 run planning_debug_tools perception_reproducer.py -b <bag-file>\n
You can designate multiple rosbags in the directory.
ros2 run planning_debug_tools perception_reproducer.py -b <dir-to-bag-files>\n
Instead of publishing predicted objects, you can publish detected/tracked objects by designating -d
or -t
, respectively.
The --pub-route
option enables automatic route generation based on the rosbag data. When enabled, the script:
Example usage with route publication:
ros2 run planning_debug_tools perception_reproducer.py -b <bag-file> -p\n
"},{"location":"planning/planning_debug_tools/#perception-replayer","title":"Perception replayer","text":"A part of the feature is under development.
This script can overlay the perception results from the rosbag on the planning simulator.
In detail, this script publishes the data at a certain timestamp from the rosbag. The timestamp will increase according to the real time without any operation. By using the GUI, you can modify the timestamp by pausing, changing the rate or going back into the past.
"},{"location":"planning/planning_debug_tools/#how-to-use_2","title":"How to use","text":"First, launch the planning simulator, and put the ego pose. Then, run the script according to the following command.
By designating a rosbag, perception replayer can be launched. The GUI is launched as well with which a timestamp of rosbag can be managed.
ros2 run planning_debug_tools perception_replayer.py -b <bag-file>\n
You can designate multiple rosbags in the directory.
ros2 run planning_debug_tools perception_replayer.py -b <dir-to-bag-files>\n
Instead of publishing predicted objects, you can publish detected/tracked objects by designating -d
or -t
, respectively.
The purpose of the Processing Time Subscriber is to monitor and visualize the processing times of various ROS 2 topics in a system. By providing a real-time terminal-based visualization, users can easily confirm the processing time performance as in the picture below.
You can run the program by the following command.
ros2 run planning_debug_tools processing_time_checker.py -f <update-hz> -m <max-bar-time>\n
This program subscribes to ROS 2 topics that have a suffix of processing_time_ms
.
The program allows users to customize two parameters via command-line arguments:
By adjusting these parameters, users can tailor the display to their specific monitoring needs.
"},{"location":"planning/planning_debug_tools/#logging-level-updater","title":"Logging Level Updater","text":"The purpose of the Logging Level Updater is to update the logging level of the planning modules via ROS 2 service. Users can easily update the logging level for debugging.
ros2 run planning_debug_tools update_logger_level.sh <module-name> <logger-level>\n
<logger-level>
will be DEBUG
, INFO
, WARN
, or ERROR
.
When you have a typo of the planning module, the script will show the available modules.
"},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/","title":"Doc stop reason visualizer","text":""},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/#stop_reason_visualizer","title":"stop_reason_visualizer","text":"This module is to visualize stop factor quickly without selecting correct debug markers. This is supposed to use with virtual wall marker like below.
"},{"location":"planning/planning_debug_tools/doc-stop-reason-visualizer/#how-to-use","title":"How to use","text":"Run this node.
ros2 run planning_debug_tools stop_reason_visualizer_exe\n
Add stop reason debug marker from rviz.
Note: ros2 process can be sometimes deleted only from killall stop_reason_visualizer_exe
Reference
"},{"location":"simulator/simulator_compatibility_test/","title":"simulator_compatibility_test","text":""},{"location":"simulator/simulator_compatibility_test/#simulator_compatibility_test","title":"simulator_compatibility_test","text":""},{"location":"simulator/simulator_compatibility_test/#purpose","title":"Purpose","text":"Test procedures (e.g. test codes) to check whether a certain simulator is compatible with Autoware
"},{"location":"simulator/simulator_compatibility_test/#overview-of-the-test-codes","title":"Overview of the test codes","text":"File structure
source install/setup.bash\ncolcon build --packages-select simulator_compatibility_test\ncd src/universe/autoware.universe/tools/simulator_test/simulator_compatibility_test/test_sim_common_manual_testing\n
To run each test case manually
"},{"location":"simulator/simulator_compatibility_test/#test-case-1","title":"Test Case #1","text":"Run the test using the following command
python -m pytest test_01_control_mode_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_02_change_gear_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_03_longitudinal_command_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_04_lateral_command_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_05_turn_indicators_cmd_and_report.py\n
Check if expected behavior is created within the simulator
Run the test using the following command
python -m pytest test_06_hazard_lights_cmd_and_report.py\n
Check if expected behavior is created within the simulator
source install/setup.bash\ncolcon build --packages-select simulator_compatibility_test\ncd src/universe/autoware.universe/tools/simulator_test/simulator_compatibility_test/test_morai_sim\n
Detailed process
(WIP)
"},{"location":"simulator/simulator_compatibility_test/#inner-workings-algorithms","title":"Inner-workings / Algorithms","text":""},{"location":"simulator/simulator_compatibility_test/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"simulator/simulator_compatibility_test/#input","title":"Input","text":"Name Type Description/vehicle/status/control_mode
autoware_vehicle_msgs::msg::ControlModeReport
for [Test Case #1] /vehicle/status/gear_status
autoware_vehicle_msgs::msg::GearReport
for [Test Case #2] /vehicle/status/velocity_status
autoware_vehicle_msgs::msg::VelocityReport
for [Test Case #3] /vehicle/status/steering_status
autoware_vehicle_msgs::msg::SteeringReport
for [Test Case #4] /vehicle/status/turn_indicators_status
autoware_vehicle_msgs::msg::TurnIndicatorsReport
for [Test Case #5] /vehicle/status/hazard_lights_status
autoware_vehicle_msgs::msg::HazardLightsReport
for [Test Case #6]"},{"location":"simulator/simulator_compatibility_test/#output","title":"Output","text":"Name Type Description /control/command/control_cmd
autoware_control_msgs/Control
for [Test Case #3, #4] /control/command/control_mode_cmd
autoware_vehicle_msgs/ControlModeCommand
for [Test Case #1] /control/command/gear_cmd
autoware_vehicle_msgs/GearCommand
for [Test Case #2] /vehicle/status/steering_status
autoware_vehicle_msgs/TurnIndicatorsCommand
for [Test Case #5] /control/command/turn_indicators_cmd
autoware_vehicle_msgs/HazardLightsCommand
for [Test Case #6]"},{"location":"simulator/simulator_compatibility_test/#parameters","title":"Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#node-parameters","title":"Node Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#core-parameters","title":"Core Parameters","text":"None.
"},{"location":"simulator/simulator_compatibility_test/#assumptions-known-limits","title":"Assumptions / Known limits","text":"None.
"},{"location":"system/rqt_diagnostic_graph_monitor/","title":"System diagnostic monitor","text":""},{"location":"vehicle/calibration_adapter/","title":"calibration_adapter","text":""},{"location":"vehicle/calibration_adapter/#calibration_adapter","title":"calibration_adapter","text":""},{"location":"vehicle/calibration_adapter/#purpose","title":"Purpose","text":"This package relay topic to Float32Stamped
type of \"autoware_calibration_msgs\" to generalize calibration topics.
calibration_adapter_node_base
This node has general calibration topics for all vehicle interfacecalibration_adapter
This node has vehicle specific or temporary topics to calibrate and this node inherit calibration_adapter_node_base
.TBD.
"},{"location":"vehicle/parameter_estimator/","title":"ParameterEstimation","text":""},{"location":"vehicle/parameter_estimator/#parameterestimation","title":"ParameterEstimation","text":"This parameter estimation node estimates a default parameters from inputs for steer offset,wheel base and gear ratio.
"},{"location":"vehicle/parameter_estimator/#io","title":"I/O","text":""},{"location":"vehicle/parameter_estimator/#input","title":"input","text":"
The following topics are used to estimate the parameters.
/sensing/imu/imu_data
: used as vehicle angular velocity/vehicle/status/twist
: used as vehicle velocity/vehicle/status/steering
: used as vehicle steering angle (Only used in Steer Offset Estimator & Wheel Base Estimator)/calibration/vehicle/handle_status
: used as vehicle handle angle (Only used in Gear Estimator)/vehicle/engage
: used to check the driving operation statusThe following topics are the output
/vehicle/status/gear_ratio
/vehicle/status/steering_offset
/vehicle/status/wheel_base
For users, the EstimationResult.msg
output contains the following items:
Note: You need to build the Autoware beforehand.
The following command will start the parameter estimation node.
ros2 launch parameter_estimator parameter_estimator.launch.xml vehicle_model:=lexus\n
ros2 launch parameter_estimator parameter_estimator.launch.xml vehicle_model:=lexus select_steer_offset_estimator:=false select_wheel_base_estimator:=false\n
If you want to launch with Rviz, use the following launch file. Currently unavailable
# Launch parameter Estimator with the Autoware\n$ ros2 launch parameter_estimator parameter_estimator_with_simulation.launch.xml map_path:=.../kashiwanoha2/ vehicle_model:=jpntaxi sensor_model:=aip_xx1 rviz:=true\n
"},{"location":"vehicle/parameter_estimator/#how-to-check-the-estimated-parameters","title":"How to check the estimated parameters","text":"The necessary information is plotted in the plot_juggler, which displays the following information from top to bottom.
You need to adjust the value of (valid_min_)
or (valid_max_)
. according to the standard deviation to determine the validity of the data.
Check the estimation results.
It is preferable to use the _mean for the calibration results.
The parameters estimation starts when enough data is stored. The output value is zero until it is ready.
"},{"location":"vehicle/parameter_estimator/#error-for-parameters-estimation","title":"Error for parameters estimation","text":"Check the statistics of the errors in the input/output data after the parameter estimation.
If these values are large, the model needs to be reconsidered.
"},{"location":"vehicle/parameter_estimator/#data-preprocessing","title":"Data preprocessing","text":""},{"location":"vehicle/parameter_estimator/#examine-the-results-of-processing-the-input-data","title":"Examine the results of processing the input data","text":"Data that do not satisfy the following conditions are considered invalid and will not be used for estimation.
The role of this node is to visualize pitch of driving route. The source of pitch is tf (map->base_link
).
ros2 launch pitch_checker pitch_checker.launch.xml\n
"},{"location":"vehicle/pitch_checker/#save-file-to-data","title":"save file to data","text":"ros2 service call /pitch_checker/save_flag std_srvs/srv/Trigger {}\n
(The pitch data is saved at <YOUR WORKSPACE>/install/pitch_checker/share/pitch_checker/pitch.csv
)
ros2 launch pitch_checker view_pitch.launch.xml\n
The view_pitch.launch
loads the data stored in the default path and visualize it is as below. The pitch angle [rad] is shown on the left plot, the value of the z-coordinate [m] on the right plot.
This delay estimation node estimates a time delay from inputs to outputs for accel, brake, and steer.
"},{"location":"vehicle/time_delay_estimator/#input-response","title":"Input / Response","text":"
The following topics are used to estimate the delay.
/vehicle/raw_vehicle_cmd
: used as accel/brake target value/control/control_cmd
: used as steer target value/calibration/vehicle/accel_status
: used as accel observed value/calibration/vehicle/brake_status
: used as brake observed value/vehicle/status/steering
: used as steer observed value/calibration/vehicle/is_engage
: used to check the driving operation statusoutput.
For users, the TimeDelay.msg
output contains the following items:
In addition, the following items are output for developers.
These values can be confirmed in rqt_multiplot, described below.
"},{"location":"vehicle/time_delay_estimator/#how-to-run-time-delay-estimator","title":"How to Run Time Delay Estimator","text":"Note: You need to build the Autoware beforehand.
The following command will start the delay estimation node.
ros2 launch time_delay_estimator time_delay_estimator.launch.xml is_showing_debug_graph:=true\n
"},{"location":"vehicle/time_delay_estimator/#change-the-estimator-type","title":"Change the estimator type","text":"
You can decide the estimator_type with the following parameters
Note: Only \"cc\" Cross Correlation will display the debug graph
"},{"location":"vehicle/time_delay_estimator/#how-to-check-the-estimated-delay","title":"How to check the estimated delay","text":"The necessary information is plotted in the rqt_multiplot, which displays the following information from top to bottom.
Check the input and output data. It is also used to adjust parameters of the estimation logic.
*_min_stddev_threshold
).*_min_stddev_threshold
).(*) Smoothing, normalization, and resampling are applied as preprocessing.
You need to adjust the value of *_min_stddev_threshold
according to the standard deviation to determine the validity of the data.
Check the estimation results.
It is preferable to use the average for the calibration results.
The delay estimation starts when enough data is stored. The output value is zero until it is ready.
"},{"location":"vehicle/time_delay_estimator/#confidence-level-of-the-estimation-results","title":"Confidence level of the estimation results","text":"The reliability of the estimated time delay can be analyzed by the correlation coefficient.
"},{"location":"vehicle/time_delay_estimator/#inputoutput-error-after-delay-compensation","title":"Input/output error after delay compensation","text":"
Check the statistics of the errors in the input/output data after the time delay compensation.
If these values are large, the input/output model needs to be reconsidered.
"},{"location":"vehicle/time_delay_estimator/#data-preprocessing","title":"Data preprocessing","text":""},{"location":"vehicle/time_delay_estimator/#examine-the-results-of-processing-the-input-data","title":"Examine the results of processing the input data","text":"Data that do not satisfy the following conditions are considered invalid and will not be used for estimation.
Before running the node, you need to set the is_showing_debug_info
parameter in the yaml file to true for a visualization. Then the internal values of accel/brake/steer/test are plotted on the python visualization tool. If the superposition of input and response is good, we can say that we have a good estimation.
"},{"location":"vehicle/time_delay_estimator/#test-wip","title":"Test WIP","text":"
Execute the following command to perform an estimation on the sample data. This test should be used to see the characteristics when the parameters are changed.
roslaunch time_delay_estimator test_time_delay_estimator.launch\n
"}]}
\ No newline at end of file
diff --git a/main/sitemap.xml b/main/sitemap.xml
index 0e0c9aeb..46c733f2 100644
--- a/main/sitemap.xml
+++ b/main/sitemap.xml
@@ -2,252 +2,252 @@