From 7b4a44ead4780a40b8f479db2fde5d0b2156c1b3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 19 Dec 2024 11:39:03 +0000 Subject: [PATCH] Deployed dfbdb5f to main with MkDocs 1.4.3 and mike 2.2.0.dev0 --- .../index.html | 2 +- main/search/search_index.json | 2 +- main/sitemap.xml | 100 +++++++++--------- main/sitemap.xml.gz | Bin 938 -> 936 bytes 4 files changed, 52 insertions(+), 52 deletions(-) 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 @@

tier4_string_viewer_rviz_plugin#

Purpose#

-

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.

Assumptions / Known limits#

TBD.

Usage#

diff --git a/main/search/search_index.json b/main/search/search_index.json index e81e67f3..d0fbdbd3 100644 --- a/main/search/search_index.json +++ b/main/search/search_index.json @@ -1 +1 @@ -{"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:

"},{"location":"CODE_OF_CONDUCT/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

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

  1. 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.

  2. The Autoware Foundation shall not be liable for any damage incurred by the User that are attributable to the Autoware Foundation for any reasons whatsoever. UNDER NO CIRCUMSTANCES SHALL THE AUTOWARE FOUNDATION BE LIABLE FOR INCIDENTAL, INDIRECT, SPECIAL OR FUTURE DAMAGES OR LOSS OF PROFITS.

  3. A User shall be entirely responsible for the content posted by the User and its use of any content of the Service or the Website. If the User is held responsible in a civil action such as a claim for damages or even in a criminal case, the Autoware Foundation and member companies, governments and academic & non-profit organizations and their directors, officers, employees and agents (collectively, the \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_.

"},{"location":"autoware_dependency_checker/#dependency-checking","title":"Dependency Checking","text":"

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:

from to description autoware_pkg_name autoware/pkg_name Usually this style should be used autoware_*_msgs autoware_*_msgs For messages autoware_other_pkg autoware_other_pkg E.g. autoware_lanelet2_extension"},{"location":"autoware_dependency_checker/#usage","title":"Usage","text":"
# 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:

"},{"location":"bag2lanelet/#example","title":"Example","text":"

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

"},{"location":"bag2lanelet/#generate-lanelet2-file","title":"generate lanelet2 file","text":"

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.

"},{"location":"common/autoware_debug_tools/","title":"Autoware Debug Tools","text":""},{"location":"common/autoware_debug_tools/#autoware-debug-tools","title":"Autoware Debug Tools","text":"

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.

"},{"location":"common/autoware_debug_tools/#usage","title":"Usage","text":"
  1. Run the following command to start the visualizer.

    ros2 run autoware_debug_tools processing_time_visualizer\n
  2. Select a topic to visualize.

  3. Then, the visualizer will show the processing time tree.

"},{"location":"common/autoware_debug_tools/#summarized-output","title":"summarized output","text":"

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.

"},{"location":"common/autoware_debug_tools/#usage_1","title":"Usage","text":"

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.

"},{"location":"common/autoware_debug_tools/#examples","title":"Examples","text":"
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.

"},{"location":"common/autoware_debug_tools/#usage_2","title":"Usage","text":"
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:

  1. Topic Connection Checker
  2. Topic Localizer

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:

  1. Identify key topics with unexpected output using diagnostic information and major final output topics.
  2. Track the publishing nodes of these blocked output topics.
  3. Investigate the subscribed inputs of these publishing nodes to find upstream blocked topics.
  4. Trace back to the source to identify key topics that are not being published.
  5. Locate the source of lost topics in the code or launching system.

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:

  1. Subscribes to /diagnostics for three seconds, focusing on hardware_id with topic_state_monitor.
  2. Subscribes to and traces stuck topics and all upstream topics.
  3. Performs multiple iterations to identify topics without publishers.
  4. Reports ERROR in the command line for problematic topics.

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.

"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#mechanism_1","title":"Mechanism","text":"

The Topic Localizer employs a two-step approach to find the source of problematic topics:

  1. Direct Search:

    • Scans all HPP/CPP and launch.py files for code snippets containing the exact names of the target topics.
  2. Launch System Analysis:

    • Starts with autoware_launch/launch/autoware.launch.xml using default arguments.
    • Statically traces all XML files in the launch system.
    • Identifies launch parameters or remapped topics matching the names of the target topics.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#best-practices","title":"Best Practices","text":"
  1. Always start with the Topic Connection Checker to identify problematic topics.
  2. Use the output from the Topic Connection Checker as input for the Topic Localizer.
  3. Pay attention to ERROR messages in the command line output.
  4. When using the Topic Localizer, ensure you're in the correct directory (autoware/pilot-auto).
  5. Keep track of the relationships between topics to understand the flow of data in your Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#troubleshooting","title":"Troubleshooting","text":"

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.

"},{"location":"common/mission_planner_rviz_plugin/#routeselectorpanel","title":"RouteSelectorPanel","text":"

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

  1. To display each content of RTC status.

  2. To switch each module of RTC auto mode.

  3. To change RTC cooperate commands by button.

"},{"location":"common/rtc_manager_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/rtc_manager_rviz_plugin/#input","title":"Input","text":"Name Type Description /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":"
  1. Start rviz and select panels/Add new panel.

  2. tier4_state_rviz_plugin/RTCManagerPanel and press OK.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/","title":"tier4_automatic_goal_rviz_plugin","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#tier4_automatic_goal_rviz_plugin","title":"tier4_automatic_goal_rviz_plugin","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#purpose","title":"Purpose","text":"
  1. Defining a GoalsList by adding goals using RvizTool (Pose on the map).

  2. Automatic execution of the created GoalsList from the selected goal - it can be stopped and restarted.

  3. Looping the current GoalsList.

  4. Saving achieved goals to a file.

  5. Plan the route to one (single) selected goal and starting that route - it can be stopped and restarted.

  6. Remove any goal from the list or clear the current route.

  7. Save the current GoalsList to a file and load the list from the file.

  8. The application enables/disables access to options depending on the current state.

  9. The saved GoalsList can be executed without using a plugin - using a node automatic_goal_sender.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#input","title":"Input","text":"Name Type Description /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":"
  1. Start rviz and select panels/Add new panel.

  2. Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalPanel and press OK.

  3. Select Add a new tool.

  4. Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalTool and press OK.

  5. Add goals visualization as markers to Displays.

  6. Append goals to the GoalsList to be achieved using 2D Append Goal - in such a way that routes can be planned.

  7. Start sequential planning and goal achievement by clicking Send goals automatically

  8. You can save GoalsList by clicking Save to file.

  9. After saving, you can run the GoalsList without using a plugin also:

    • example: 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 loaded
      • goals_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 it
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#hints","title":"Hints","text":"

If 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.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/#material-design-icons","title":"Material Design Icons","text":"

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":"
  1. Start rviz and select Panels.

  2. Select tier4_control_rviz_plugin/ManualController and press OK.

  3. Enter velocity in \"Set Cruise Velocity\" and Press the button to confirm. You can notice that GEAR shows D (DRIVE).

  4. Press \"Enable Manual Control\" and you can notice that \"GATE\" and \"Engage\" turn \"Ready\" and the vehicle starts!

"},{"location":"common/tier4_debug_rviz_plugin/","title":"tier4_debug_rviz_plugin","text":""},{"location":"common/tier4_debug_rviz_plugin/#tier4_debug_rviz_plugin","title":"tier4_debug_rviz_plugin","text":"

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.

"},{"location":"common/tier4_debug_tools/","title":"tier4_debug_tools","text":""},{"location":"common/tier4_debug_tools/#tier4_debug_tools","title":"tier4_debug_tools","text":"

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.

"},{"location":"common/tier4_screen_capture_rviz_plugin/","title":"tier4_screen_capture_rviz_plugin","text":""},{"location":"common/tier4_screen_capture_rviz_plugin/#tier4_screen_capture_rviz_plugin","title":"tier4_screen_capture_rviz_plugin","text":""},{"location":"common/tier4_screen_capture_rviz_plugin/#purpose","title":"Purpose","text":"

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.

"},{"location":"common/tier4_screen_capture_rviz_plugin/#usage","title":"Usage","text":"
  1. Start rviz and select panels/Add new panel.
"},{"location":"common/tier4_simulated_clock_rviz_plugin/","title":"tier4_simulated_clock_rviz_plugin","text":""},{"location":"common/tier4_simulated_clock_rviz_plugin/#tier4_simulated_clock_rviz_plugin","title":"tier4_simulated_clock_rviz_plugin","text":""},{"location":"common/tier4_simulated_clock_rviz_plugin/#purpose","title":"Purpose","text":"

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":"
  1. 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.

  2. Start rviz and select panels/Add new panel.

  3. Select tier4_clock_rviz_plugin/SimulatedClock and press OK.

  4. Use the added panel to control how the simulated clock is published.

    1. Pause button: pause/resume the clock.
    2. Speed: speed of the clock relative to the system clock.
    3. Rate: publishing rate of the clock.
    4. Step button: advance the clock by the specified time step.
    5. Time step: value used to advance the clock when pressing the step button d).
    6. Time unit: time unit associated with the value from e).

    Warning If you set the time step too large, your simulation will go haywire.

"},{"location":"common/tier4_string_viewer_rviz_plugin/","title":"tier4_string_viewer_rviz_plugin","text":""},{"location":"common/tier4_string_viewer_rviz_plugin/#tier4_string_viewer_rviz_plugin","title":"tier4_string_viewer_rviz_plugin","text":""},{"location":"common/tier4_string_viewer_rviz_plugin/#purpose","title":"Purpose","text":"

This plugin displays the ROS message whose topic type is tier4_debug_msgs::msg::StringStamped in rviz.

"},{"location":"common/tier4_string_viewer_rviz_plugin/#assumptions-known-limits","title":"Assumptions / Known limits","text":"

TBD.

"},{"location":"common/tier4_string_viewer_rviz_plugin/#usage","title":"Usage","text":"
  1. Start rviz and select panels/Add new panel.
  2. Select tier4_string_viewer_rviz_plugin/StringViewerPanel and press OK.
"},{"location":"common/tier4_target_object_type_rviz_plugin/","title":"tier4_target_object_type_rviz_plugin","text":""},{"location":"common/tier4_target_object_type_rviz_plugin/#tier4_target_object_type_rviz_plugin","title":"tier4_target_object_type_rviz_plugin","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.

"},{"location":"control/vehicle_cmd_analyzer/","title":"Vehicle Command Analyzer description","text":""},{"location":"control/vehicle_cmd_analyzer/#vehicle-command-analyzer-description","title":"Vehicle Command Analyzer description","text":""},{"location":"control/vehicle_cmd_analyzer/#overview","title":"Overview","text":"

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.

"},{"location":"control/vehicle_cmd_analyzer/#how-to-use","title":"How to use","text":"
  1. Launch the node.

    ros2 launch vehicle_cmd_analyzer vehicle_cmd_analyzer.launch.xml vehicle_model:=lexus\n
  2. Launch plotjuggler.

    ros2 run plotjuggler plotjuggler\n
  3. Load layout.xml from File->Layout.

  4. Press ok in the confirmation dialog.
  5. Select/vehicle_cmd_analyzer/debug_values.
"},{"location":"control_data_collecting_tool/","title":"Control data collecting tool","text":""},{"location":"control_data_collecting_tool/#control-data-collecting-tool","title":"Control data collecting tool","text":"

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":""},{"location":"control_data_collecting_tool/#how-to-use","title":"How to Use","text":"
  1. 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
  2. Set an initial pose, see here.

  3. Add the DataCollectingAreaSelectionTool and DataCollectingGoalPlugin RViz plugins by clicking the \"+\" icon at the top of the RViz window.

  4. 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.)

  5. Add visualization in rviz:

    - /data_collecting_area - Type: Polygon - /data_collecting_trajectory_marker_array - Type: MarkerArray - /data_collecting_lookahead_marker_array - Type: MarkerArray

  6. 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
  7. 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.

  8. 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.

  9. 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
"},{"location":"control_data_collecting_tool/#specify-data-collection-range","title":"Specify data collection range","text":"

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.

  1. Change the MASK_NAME parameter in config/common_param.yaml from its default value of default to any name you prefer.

  2. 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.

  3. 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.

"},{"location":"control_data_collecting_tool/#parameter","title":"Parameter","text":"

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):

Name Type Description Default value 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):

Name Type Description Default value 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.

Name Type Description Default value velocity_on_curve double Constant velocity on curve [m/s] 4.5 smoothing_window double Width of the window for trajectory smoothing 400 Name Type Description Default value velocity_on_curve double Constant velocity on curve [m/s] 4.5 Name Type Description Default value stopping_buffer_distance double The safety distance from end of the straight line [m] 10.0 Name Type Description Default value 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 Name Type Description Default value 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

\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.

"},{"location":"evaluation/tier4_metrics_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":"Name Type Description /planning/planning_evaluator/metrics diagnostic_msgs::msg::DiagnosticArray Subscribe planning_evaluator output"},{"location":"evaluation/tier4_metrics_rviz_plugin/#howtouse","title":"HowToUse","text":"
  1. Start rviz and select panels/Add new panel.
  2. Select MetricsVisualizePanel and press OK.
"},{"location":"localization/deviation_estimation_tools/ReadMe/","title":"deviation_estimation_tools","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#deviation_estimation_tools","title":"deviation_estimation_tools","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#1-quick-start","title":"1. Quick start","text":"

This repository consists of three main tools implemented on ROS 2.

  1. Deviation Estimator
  2. Deviation Evaluator
  3. Deviation Evaluation Visualizer
"},{"location":"localization/deviation_estimation_tools/ReadMe/#a-estimation-step","title":"A. Estimation step","text":"

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:

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:

  1. IMU parameters (default: $HOME/imu_corrector.param.yaml)
  2. Velocity parameters (default: $HOME/vehicle_velocity_converter.param.yaml)
  3. Logs (default: $HOME/output.txt)
sample input (rosbag)

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:

"},{"location":"localization/deviation_estimation_tools/ReadMe/#launch","title":"Launch","text":"

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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#input","title":"Input","text":"Name Type Description 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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#3-description-of-deviation-evaluator","title":"3. Description of Deviation Evaluator","text":"

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).

"},{"location":"localization/deviation_estimation_tools/ReadMe/#features","title":"Features","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#a-visualization-of-confidence-ellipse","title":"A. Visualization of confidence ellipse","text":"

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:

  1. localization_error_monitor would NOT diagnose the system as WARN nor ERROR as long as the NDT is available.
  2. 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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#architecture-of-deviation_evaluator","title":"Architecture of 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:

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":""},{"location":"map/autoware_lanelet2_map_utils/","title":"autoware_lanelet2_map_utils","text":""},{"location":"map/autoware_lanelet2_map_utils/#autoware_lanelet2_map_utils","title":"autoware_lanelet2_map_utils","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/#how-to-use","title":"How to use","text":"

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
"},{"location":"map/autoware_lanelet2_map_validator/#output-file","title":"Output file","text":"

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
"},{"location":"map/autoware_lanelet2_map_validator/#available-command-options","title":"Available command options","text":"option description -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.

"},{"location":"map/autoware_lanelet2_map_validator/#stop-line","title":"Stop Line","text":""},{"location":"map/autoware_lanelet2_map_validator/#traffic-light","title":"Traffic Light","text":""},{"location":"map/autoware_lanelet2_map_validator/#crosswalk","title":"Crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/#how-to-add-a-new-validator","title":"How to add a new validator","text":"

If you want to contribute to autoware_lanelet2_map_validator, please check out the how_to_contribute first.

"},{"location":"map/autoware_lanelet2_map_validator/#relationship-between-requirements-and-validators","title":"Relationship between requirements and validators","text":"

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 to autoware_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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#design-concept","title":"Design Concept","text":"

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

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#contribution-guide","title":"Contribution Guide","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#1-implement-your-validator","title":"1. Implement your validator","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-path-structure","title":"Restrictions for path structure","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-validator-class-implementation","title":"Restrictions for validator class implementation","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#2-write-a-test-code","title":"2. Write a test code","text":"

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":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-test-code-implementation","title":"Restrictions for test code implementation","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#3-test-the-entire-validator","title":"3. Test the entire validator","text":"

Please check that the autoware_lanelet2_map_validator works perfectly.

  1. Execute colcon test --packages-select autoware_lanelet2_map_validator --event-handlers console_cohesion+ and confirm that all tests pass.
  2. Execute the following command and confirm that no issues appear.
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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#5-submit-a-pull-request","title":"5. Submit a pull request","text":"

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 a crosswalk 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/","title":"regulatory_element_details_for_crosswalks","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#regulatory_element_details_for_crosswalks","title":"regulatory_element_details_for_crosswalks","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#validator-name","title":"Validator name","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 a crosswalk subtype regulatory element that has no referses. 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 referses. 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_lines 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_polygons. 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_polygons. 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/","title":"intersection_area_segment_type","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#intersection_area_segment_type","title":"intersection_area_segment_type","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#validator-name","title":"Validator name","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.

  1. Create a 2D bounding box that circumscribes the polygon.
  2. Collect road_border type linestrings within or intersecting the 2D bounding box.
  3. Collect starting/ending edges of lanelets within or intersecting the 2D bounding box.
  4. Examine each point that constitutes the polygon whether it belongs to the collection above.

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 The intersection_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().

"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#related-source-codes","title":"Related source codes","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/","title":"intersection_area_validity","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#intersection_area_validity","title":"intersection_area_validity","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#validator-name","title":"Validator name","text":"

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 The intersection_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/","title":"missing_regulator_elements_for_stop_lines","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#missing_regulator_elements_for_stop_lines","title":"missing_regulator_elements_for_stop_lines","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#validator-name","title":"Validator name","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 a stop_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/","title":"missing_referrers_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#missing_referrers_for_traffic_lights","title":"missing_referrers_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#validator-name","title":"Validator name","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.

Issue Code Message Severity Primitive Description Approach TrafficLight.MissingReferrers-001 Regulatory element of traffic light must be referred by at least one lanelet. Error Regulatory Element There is a 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/","title":"missing_regulator_elements_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#missing_regulator_elements_for_traffic_lights","title":"missing_regulator_elements_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#validator-name","title":"Validator name","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 a traffic_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/","title":"regulatory_element_details_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#regulatory_element_details_for_traffic_lights","title":"regulatory_element_details_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#validator-name","title":"Validator name","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 a traffic_light subtype regulatory element that has no ref_lines 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/","title":"traffic_light_facing","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#traffic_light_facing","title":"traffic_light_facing","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#validator-name","title":"Validator name","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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#feature","title":"Feature","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 A traffic_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":""},{"location":"map/autoware_pointcloud_divider/","title":"autoware_pointcloud_divider","text":""},{"location":"map/autoware_pointcloud_divider/#autoware_pointcloud_divider","title":"autoware_pointcloud_divider","text":"

This is a tool for processing pcd files, and it can perform the following functions:

"},{"location":"map/autoware_pointcloud_divider/#supported-data-format","title":"Supported Data Format","text":"

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.

"},{"location":"map/autoware_pointcloud_divider/#installation","title":"Installation","text":"
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":"

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.

"},{"location":"map/autoware_pointcloud_divider/#parameters","title":"Parameters","text":"Name Type Description Default Range use_large_grid boolean Pack small segments to larger folders false N/A leaf_size float Resolution in meter for downsampling the output segments. Setting to negative to get the raw output PCDs. 0.2 N/A grid_size_x float The x size in meter of the output segments 20 N/A grid_size_y float The y size in meter of the output segments 20 N/A input_pcd_or_dir string The path to the folder containing the input PCD files N/A output_pcd_dir string The path to the folder containing the output PCD files N/A prefix string The prefix for the name of the output PCD files N/A point_type string Type of the point when processing PCD files. Could be point_xyz or point_xyzi point_xyzi N/A

How the point cloud is processed.

How the PCD file is named

"},{"location":"map/autoware_pointcloud_divider/#parameter-example","title":"Parameter example","text":"
  1. 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
  2. Dividing and downsampling point clouds

    use_large_grid: false\nleaf_size: 0.2\ngrid_size_x: 20\ngrid_size_y: 20\n
"},{"location":"map/autoware_pointcloud_divider/#metadata-yaml-format","title":"Metadata YAML Format","text":"

The metadata file should be named metadata.yaml. It contains the following fields:

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:

"},{"location":"map/autoware_pointcloud_merger/#supported-data-format","title":"Supported Data Format","text":"

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.

"},{"location":"map/autoware_pointcloud_merger/#installation","title":"Installation","text":"
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":"

INPUT_DIR and OUTPUT_PCD should be specified as absolute paths.

"},{"location":"map/autoware_pointcloud_merger/#parameter","title":"Parameter","text":"Name Type Description Default Range leaf_size float Resolution in meter for downsampling the output PCD. Setting to negative to get the raw output PCD. -0.1 N/A input_pcd_dir string The path to the folder containing the input PCD files N/A output_pcd string The path to the merged PCD file N/A point_type string Type of the point when processing PCD files. Could be point_xyz or point_xyzi point_xyzi N/A"},{"location":"map/autoware_pointcloud_merger/#license","title":"LICENSE","text":"

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.

"},{"location":"planning/planning_debug_tools/#trajectory-analyzer","title":"Trajectory analyzer","text":"

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.

"},{"location":"planning/planning_debug_tools/#stop-reason-visualizer","title":"Stop reason visualizer","text":"

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.

"},{"location":"planning/planning_debug_tools/#requirements","title":"Requirements","text":"

The version of the plotJuggler must be > 3.5.0

"},{"location":"planning/planning_debug_tools/#closest-velocity-checker","title":"Closest velocity checker","text":"

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:

"},{"location":"planning/planning_debug_tools/#available-options","title":"Available Options","text":""},{"location":"planning/planning_debug_tools/#how-to-use_1","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 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:

  1. Extracts the initial and goal poses from the beginning and end of the rosbag file
  2. Initializes the localization system with the initial pose
  3. Generates and publishes a route to the goal pose

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.

"},{"location":"planning/planning_debug_tools/#processing-time-checker","title":"Processing time checker","text":"

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

  1. test_base provides shared methods for testing. Other test codes are created based on functions defined here.
  2. test_sim_common_manual_testing provides the most basic functions. Any simulator can be tested using codes here. However, to make these codes usable with any simulators, the codes do not include any features for test automation.
  3. test_morai_sim is an automated version of test_sim_common_manual_testing for MORAI SIM: Drive. Thus it includes 'MORAI SIM: Drive'-specific codes. Users of the other simulators may create similar version for their simulator of interest.
"},{"location":"simulator/simulator_compatibility_test/#test-procedures-for-test_sim_common_manual_testing","title":"Test Procedures for test_sim_common_manual_testing","text":""},{"location":"simulator/simulator_compatibility_test/#build-process-before-test","title":"Build process before test","text":"
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":"
  1. Run your simulator
  2. Load a map and an ego vehicle for the test
  3. Run the test using the following command

    python -m pytest test_01_control_mode_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle control mode is changed into Manual (If the simulator has a GUI for this one, it should display the ego is in Manual)
    • Ego vehicle control mode is changed into Auto (If the simulator has a GUI for this one, it should display the ego is in Auto)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-2","title":"Test Case #2","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_02_change_gear_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle gear mode is changed into \"P\" (If the simulator has a GUI for this one, it should display the gear mode is in \"P\")
    • Ego vehicle gear mode is changed into \"N\" (If the simulator has a GUI for this one, it should display the gear mode is in \"N\")
    • Ego vehicle gear mode is changed into \"R\" (If the simulator has a GUI for this one, it should display the gear mode is in \"R\")
    • Ego vehicle gear mode is changed into \"D\" (If the simulator has a GUI for this one, it should display the gear mode is in \"D\")
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-3","title":"Test Case #3","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_03_longitudinal_command_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle longitudinal velocity is greater than 10 kph (If the simulator has a GUI for this one, it should display the longitudinal velocity is greater than 10 kph)
    • Ego vehicle longitudinal velocity is going below 10 kph. This is an ego vehicle initialize process to ensure the following acceleration is made by longitudinal.acceleration value (If the simulator has a GUI for this one, it should display the longitudinal velocity is less than 10 kph)
    • Ego vehicle longitudinal velocity is greater than 10 kph (If the simulator has a GUI for this one, it should display the longitudinal velocity is greater than 10 kph)
    • Ego vehicle longitudinal velocity is going below 10 kph. This is an ego vehicle reset process to tear down this test case.
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-4","title":"Test Case #4","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_04_lateral_command_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle steering and/or tire value is greater than 0 degree (If the simulator has a GUI for this one, it should display the steering and/or tire is greater than 0 degree)
    • Ego vehicle steering and/or tire value is 0 degree. This is a reset process. (If the simulator has a GUI for this one, it should display the steering and/or tire is 0 degree)
    • Ego vehicle steering and/or tire value is less than 0 degree (If the simulator has a GUI for this one, it should display the steering and/or tire is less than 0 degree)
    • Ego vehicle steering and/or tire value is 0 degree. This is a reset process. (If the simulator has a GUI for this one, it should display the steering and/or tire is 0 degree)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-5","title":"Test Case #5","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_05_turn_indicators_cmd_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle left turn indicator is turned on (If the simulator has a GUI for this one, it should display the left turn indicator is turned on)
    • Ego vehicle right turn indicator is turned on (If the simulator has a GUI for this one, it should display the right turn indicator is turned on)
    • Ego vehicle both turn indicators are turned off. This is a reset process. (If the simulator has a GUI for this one, it should display both left and right turn indicators are turned off)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-6","title":"Test Case #6","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_06_hazard_lights_cmd_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle hazard lights are turned on (If the simulator has a GUI for this one, it should display the hazard lights are turned on or blinking)
    • Ego vehicle hazard lights are turned off. This is a reset process. (If the simulator has a GUI for this one, it should display the hazard lights are turned off)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-procedures-for-test_morai_sim","title":"Test Procedures for test_morai_sim","text":""},{"location":"simulator/simulator_compatibility_test/#build-process-before-test_1","title":"Build process before test","text":"
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.

"},{"location":"vehicle/calibration_adapter/#details","title":"Details","text":" "},{"location":"vehicle/calibration_adapter/#assumptions-known-limits","title":"Assumptions / Known limits","text":"

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.

"},{"location":"vehicle/parameter_estimator/#output","title":"output","text":"

The following topics are the output

For users, the EstimationResult.msg output contains the following items:

"},{"location":"vehicle/parameter_estimator/#these-values-can-be-confirmed-in-plot_juggler","title":"These values can be confirmed in plot_juggler","text":""},{"location":"vehicle/parameter_estimator/#how-to-run-parameter-estimator","title":"How to Run Parameter Estimator","text":"

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.

"},{"location":"vehicle/parameter_estimator/#estimation-results-confirmation","title":"Estimation results confirmation","text":"

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.

"},{"location":"vehicle/pitch_checker/","title":"pitch checker","text":""},{"location":"vehicle/pitch_checker/#pitch-checker","title":"pitch checker","text":"

The role of this node is to visualize pitch of driving route. The source of pitch is tf (map->base_link).

"},{"location":"vehicle/pitch_checker/#how-to-visualize","title":"How to visualize","text":""},{"location":"vehicle/pitch_checker/#collect-data","title":"Collect data","text":""},{"location":"vehicle/pitch_checker/#launch-data-collector-node","title":"launch data collector node","text":"
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)

"},{"location":"vehicle/pitch_checker/#visualize-data","title":"Visualize data","text":"
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.

"},{"location":"vehicle/time_delay_estimator/","title":"TimeDelayEstimation","text":""},{"location":"vehicle/time_delay_estimator/#timedelayestimation","title":"TimeDelayEstimation","text":"

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.

output.

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.

"},{"location":"vehicle/time_delay_estimator/#input-data-processing-results-examination","title":"Input data processing results examination","text":"

Check the input and output data. It is also used to adjust parameters of the estimation logic.

(*) 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.

"},{"location":"vehicle/time_delay_estimator/#estimation-results-confirmation","title":"Estimation results confirmation","text":"

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.

"},{"location":"vehicle/time_delay_estimator/#visualization-of-delay-estimation-results","title":"Visualization of delay estimation results","text":"

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:

"},{"location":"CODE_OF_CONDUCT/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

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

  1. 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.

  2. The Autoware Foundation shall not be liable for any damage incurred by the User that are attributable to the Autoware Foundation for any reasons whatsoever. UNDER NO CIRCUMSTANCES SHALL THE AUTOWARE FOUNDATION BE LIABLE FOR INCIDENTAL, INDIRECT, SPECIAL OR FUTURE DAMAGES OR LOSS OF PROFITS.

  3. A User shall be entirely responsible for the content posted by the User and its use of any content of the Service or the Website. If the User is held responsible in a civil action such as a claim for damages or even in a criminal case, the Autoware Foundation and member companies, governments and academic & non-profit organizations and their directors, officers, employees and agents (collectively, the \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_.

"},{"location":"autoware_dependency_checker/#dependency-checking","title":"Dependency Checking","text":"

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:

from to description autoware_pkg_name autoware/pkg_name Usually this style should be used autoware_*_msgs autoware_*_msgs For messages autoware_other_pkg autoware_other_pkg E.g. autoware_lanelet2_extension"},{"location":"autoware_dependency_checker/#usage","title":"Usage","text":"
# 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:

"},{"location":"bag2lanelet/#example","title":"Example","text":"

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

"},{"location":"bag2lanelet/#generate-lanelet2-file","title":"generate lanelet2 file","text":"

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.

"},{"location":"common/autoware_debug_tools/","title":"Autoware Debug Tools","text":""},{"location":"common/autoware_debug_tools/#autoware-debug-tools","title":"Autoware Debug Tools","text":"

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.

"},{"location":"common/autoware_debug_tools/#usage","title":"Usage","text":"
  1. Run the following command to start the visualizer.

    ros2 run autoware_debug_tools processing_time_visualizer\n
  2. Select a topic to visualize.

  3. Then, the visualizer will show the processing time tree.

"},{"location":"common/autoware_debug_tools/#summarized-output","title":"summarized output","text":"

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.

"},{"location":"common/autoware_debug_tools/#usage_1","title":"Usage","text":"

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.

"},{"location":"common/autoware_debug_tools/#examples","title":"Examples","text":"
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.

"},{"location":"common/autoware_debug_tools/#usage_2","title":"Usage","text":"
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:

  1. Topic Connection Checker
  2. Topic Localizer

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:

  1. Identify key topics with unexpected output using diagnostic information and major final output topics.
  2. Track the publishing nodes of these blocked output topics.
  3. Investigate the subscribed inputs of these publishing nodes to find upstream blocked topics.
  4. Trace back to the source to identify key topics that are not being published.
  5. Locate the source of lost topics in the code or launching system.

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:

  1. Subscribes to /diagnostics for three seconds, focusing on hardware_id with topic_state_monitor.
  2. Subscribes to and traces stuck topics and all upstream topics.
  3. Performs multiple iterations to identify topics without publishers.
  4. Reports ERROR in the command line for problematic topics.

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.

"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#mechanism_1","title":"Mechanism","text":"

The Topic Localizer employs a two-step approach to find the source of problematic topics:

  1. Direct Search:

    • Scans all HPP/CPP and launch.py files for code snippets containing the exact names of the target topics.
  2. Launch System Analysis:

    • Starts with autoware_launch/launch/autoware.launch.xml using default arguments.
    • Statically traces all XML files in the launch system.
    • Identifies launch parameters or remapped topics matching the names of the target topics.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#best-practices","title":"Best Practices","text":"
  1. Always start with the Topic Connection Checker to identify problematic topics.
  2. Use the output from the Topic Connection Checker as input for the Topic Localizer.
  3. Pay attention to ERROR messages in the command line output.
  4. When using the Topic Localizer, ensure you're in the correct directory (autoware/pilot-auto).
  5. Keep track of the relationships between topics to understand the flow of data in your Autoware system.
"},{"location":"common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/#troubleshooting","title":"Troubleshooting","text":"

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.

"},{"location":"common/mission_planner_rviz_plugin/#routeselectorpanel","title":"RouteSelectorPanel","text":"

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

  1. To display each content of RTC status.

  2. To switch each module of RTC auto mode.

  3. To change RTC cooperate commands by button.

"},{"location":"common/rtc_manager_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/rtc_manager_rviz_plugin/#input","title":"Input","text":"Name Type Description /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":"
  1. Start rviz and select panels/Add new panel.

  2. tier4_state_rviz_plugin/RTCManagerPanel and press OK.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/","title":"tier4_automatic_goal_rviz_plugin","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#tier4_automatic_goal_rviz_plugin","title":"tier4_automatic_goal_rviz_plugin","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#purpose","title":"Purpose","text":"
  1. Defining a GoalsList by adding goals using RvizTool (Pose on the map).

  2. Automatic execution of the created GoalsList from the selected goal - it can be stopped and restarted.

  3. Looping the current GoalsList.

  4. Saving achieved goals to a file.

  5. Plan the route to one (single) selected goal and starting that route - it can be stopped and restarted.

  6. Remove any goal from the list or clear the current route.

  7. Save the current GoalsList to a file and load the list from the file.

  8. The application enables/disables access to options depending on the current state.

  9. The saved GoalsList can be executed without using a plugin - using a node automatic_goal_sender.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"common/tier4_automatic_goal_rviz_plugin/#input","title":"Input","text":"Name Type Description /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":"
  1. Start rviz and select panels/Add new panel.

  2. Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalPanel and press OK.

  3. Select Add a new tool.

  4. Select tier4_automatic_goal_rviz_plugin/AutowareAutomaticGoalTool and press OK.

  5. Add goals visualization as markers to Displays.

  6. Append goals to the GoalsList to be achieved using 2D Append Goal - in such a way that routes can be planned.

  7. Start sequential planning and goal achievement by clicking Send goals automatically

  8. You can save GoalsList by clicking Save to file.

  9. After saving, you can run the GoalsList without using a plugin also:

    • example: 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 loaded
      • goals_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 it
"},{"location":"common/tier4_automatic_goal_rviz_plugin/#hints","title":"Hints","text":"

If 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.

"},{"location":"common/tier4_automatic_goal_rviz_plugin/#material-design-icons","title":"Material Design Icons","text":"

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":"
  1. Start rviz and select Panels.

  2. Select tier4_control_rviz_plugin/ManualController and press OK.

  3. Enter velocity in \"Set Cruise Velocity\" and Press the button to confirm. You can notice that GEAR shows D (DRIVE).

  4. Press \"Enable Manual Control\" and you can notice that \"GATE\" and \"Engage\" turn \"Ready\" and the vehicle starts!

"},{"location":"common/tier4_debug_rviz_plugin/","title":"tier4_debug_rviz_plugin","text":""},{"location":"common/tier4_debug_rviz_plugin/#tier4_debug_rviz_plugin","title":"tier4_debug_rviz_plugin","text":"

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.

"},{"location":"common/tier4_debug_tools/","title":"tier4_debug_tools","text":""},{"location":"common/tier4_debug_tools/#tier4_debug_tools","title":"tier4_debug_tools","text":"

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.

"},{"location":"common/tier4_screen_capture_rviz_plugin/","title":"tier4_screen_capture_rviz_plugin","text":""},{"location":"common/tier4_screen_capture_rviz_plugin/#tier4_screen_capture_rviz_plugin","title":"tier4_screen_capture_rviz_plugin","text":""},{"location":"common/tier4_screen_capture_rviz_plugin/#purpose","title":"Purpose","text":"

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.

"},{"location":"common/tier4_screen_capture_rviz_plugin/#usage","title":"Usage","text":"
  1. Start rviz and select panels/Add new panel.
"},{"location":"common/tier4_simulated_clock_rviz_plugin/","title":"tier4_simulated_clock_rviz_plugin","text":""},{"location":"common/tier4_simulated_clock_rviz_plugin/#tier4_simulated_clock_rviz_plugin","title":"tier4_simulated_clock_rviz_plugin","text":""},{"location":"common/tier4_simulated_clock_rviz_plugin/#purpose","title":"Purpose","text":"

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":"
  1. 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.

  2. Start rviz and select panels/Add new panel.

  3. Select tier4_clock_rviz_plugin/SimulatedClock and press OK.

  4. Use the added panel to control how the simulated clock is published.

    1. Pause button: pause/resume the clock.
    2. Speed: speed of the clock relative to the system clock.
    3. Rate: publishing rate of the clock.
    4. Step button: advance the clock by the specified time step.
    5. Time step: value used to advance the clock when pressing the step button d).
    6. Time unit: time unit associated with the value from e).

    Warning If you set the time step too large, your simulation will go haywire.

"},{"location":"common/tier4_string_viewer_rviz_plugin/","title":"tier4_string_viewer_rviz_plugin","text":""},{"location":"common/tier4_string_viewer_rviz_plugin/#tier4_string_viewer_rviz_plugin","title":"tier4_string_viewer_rviz_plugin","text":""},{"location":"common/tier4_string_viewer_rviz_plugin/#purpose","title":"Purpose","text":"

This plugin displays the ROS message whose topic type is autoware_internal_debug_msgs::msg::StringStamped in rviz.

"},{"location":"common/tier4_string_viewer_rviz_plugin/#assumptions-known-limits","title":"Assumptions / Known limits","text":"

TBD.

"},{"location":"common/tier4_string_viewer_rviz_plugin/#usage","title":"Usage","text":"
  1. Start rviz and select panels/Add new panel.
  2. Select tier4_string_viewer_rviz_plugin/StringViewerPanel and press OK.
"},{"location":"common/tier4_target_object_type_rviz_plugin/","title":"tier4_target_object_type_rviz_plugin","text":""},{"location":"common/tier4_target_object_type_rviz_plugin/#tier4_target_object_type_rviz_plugin","title":"tier4_target_object_type_rviz_plugin","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.

"},{"location":"control/vehicle_cmd_analyzer/","title":"Vehicle Command Analyzer description","text":""},{"location":"control/vehicle_cmd_analyzer/#vehicle-command-analyzer-description","title":"Vehicle Command Analyzer description","text":""},{"location":"control/vehicle_cmd_analyzer/#overview","title":"Overview","text":"

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.

"},{"location":"control/vehicle_cmd_analyzer/#how-to-use","title":"How to use","text":"
  1. Launch the node.

    ros2 launch vehicle_cmd_analyzer vehicle_cmd_analyzer.launch.xml vehicle_model:=lexus\n
  2. Launch plotjuggler.

    ros2 run plotjuggler plotjuggler\n
  3. Load layout.xml from File->Layout.

  4. Press ok in the confirmation dialog.
  5. Select/vehicle_cmd_analyzer/debug_values.
"},{"location":"control_data_collecting_tool/","title":"Control data collecting tool","text":""},{"location":"control_data_collecting_tool/#control-data-collecting-tool","title":"Control data collecting tool","text":"

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":""},{"location":"control_data_collecting_tool/#how-to-use","title":"How to Use","text":"
  1. 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
  2. Set an initial pose, see here.

  3. Add the DataCollectingAreaSelectionTool and DataCollectingGoalPlugin RViz plugins by clicking the \"+\" icon at the top of the RViz window.

  4. 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.)

  5. Add visualization in rviz:

    - /data_collecting_area - Type: Polygon - /data_collecting_trajectory_marker_array - Type: MarkerArray - /data_collecting_lookahead_marker_array - Type: MarkerArray

  6. 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
  7. 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.

  8. 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.

  9. 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
"},{"location":"control_data_collecting_tool/#specify-data-collection-range","title":"Specify data collection range","text":"

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.

  1. Change the MASK_NAME parameter in config/common_param.yaml from its default value of default to any name you prefer.

  2. 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.

  3. 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.

"},{"location":"control_data_collecting_tool/#parameter","title":"Parameter","text":"

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):

Name Type Description Default value 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):

Name Type Description Default value 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.

Name Type Description Default value velocity_on_curve double Constant velocity on curve [m/s] 4.5 smoothing_window double Width of the window for trajectory smoothing 400 Name Type Description Default value velocity_on_curve double Constant velocity on curve [m/s] 4.5 Name Type Description Default value stopping_buffer_distance double The safety distance from end of the straight line [m] 10.0 Name Type Description Default value 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 Name Type Description Default value 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

\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.

"},{"location":"evaluation/tier4_metrics_rviz_plugin/#inputs-outputs","title":"Inputs / Outputs","text":"Name Type Description /planning/planning_evaluator/metrics diagnostic_msgs::msg::DiagnosticArray Subscribe planning_evaluator output"},{"location":"evaluation/tier4_metrics_rviz_plugin/#howtouse","title":"HowToUse","text":"
  1. Start rviz and select panels/Add new panel.
  2. Select MetricsVisualizePanel and press OK.
"},{"location":"localization/deviation_estimation_tools/ReadMe/","title":"deviation_estimation_tools","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#deviation_estimation_tools","title":"deviation_estimation_tools","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#1-quick-start","title":"1. Quick start","text":"

This repository consists of three main tools implemented on ROS 2.

  1. Deviation Estimator
  2. Deviation Evaluator
  3. Deviation Evaluation Visualizer
"},{"location":"localization/deviation_estimation_tools/ReadMe/#a-estimation-step","title":"A. Estimation step","text":"

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:

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:

  1. IMU parameters (default: $HOME/imu_corrector.param.yaml)
  2. Velocity parameters (default: $HOME/vehicle_velocity_converter.param.yaml)
  3. Logs (default: $HOME/output.txt)
sample input (rosbag)

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:

"},{"location":"localization/deviation_estimation_tools/ReadMe/#launch","title":"Launch","text":"

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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#inputs-outputs","title":"Inputs / Outputs","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#input","title":"Input","text":"Name Type Description 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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#3-description-of-deviation-evaluator","title":"3. Description of Deviation Evaluator","text":"

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).

"},{"location":"localization/deviation_estimation_tools/ReadMe/#features","title":"Features","text":""},{"location":"localization/deviation_estimation_tools/ReadMe/#a-visualization-of-confidence-ellipse","title":"A. Visualization of confidence ellipse","text":"

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:

  1. localization_error_monitor would NOT diagnose the system as WARN nor ERROR as long as the NDT is available.
  2. 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.

"},{"location":"localization/deviation_estimation_tools/ReadMe/#architecture-of-deviation_evaluator","title":"Architecture of 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:

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":""},{"location":"map/autoware_lanelet2_map_utils/","title":"autoware_lanelet2_map_utils","text":""},{"location":"map/autoware_lanelet2_map_utils/#autoware_lanelet2_map_utils","title":"autoware_lanelet2_map_utils","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/#how-to-use","title":"How to use","text":"

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
"},{"location":"map/autoware_lanelet2_map_validator/#output-file","title":"Output file","text":"

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
"},{"location":"map/autoware_lanelet2_map_validator/#available-command-options","title":"Available command options","text":"option description -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.

"},{"location":"map/autoware_lanelet2_map_validator/#stop-line","title":"Stop Line","text":""},{"location":"map/autoware_lanelet2_map_validator/#traffic-light","title":"Traffic Light","text":""},{"location":"map/autoware_lanelet2_map_validator/#crosswalk","title":"Crosswalk","text":""},{"location":"map/autoware_lanelet2_map_validator/#how-to-add-a-new-validator","title":"How to add a new validator","text":"

If you want to contribute to autoware_lanelet2_map_validator, please check out the how_to_contribute first.

"},{"location":"map/autoware_lanelet2_map_validator/#relationship-between-requirements-and-validators","title":"Relationship between requirements and validators","text":"

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 to autoware_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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#design-concept","title":"Design Concept","text":"

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

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#contribution-guide","title":"Contribution Guide","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#1-implement-your-validator","title":"1. Implement your validator","text":"

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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-path-structure","title":"Restrictions for path structure","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-validator-class-implementation","title":"Restrictions for validator class implementation","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#2-write-a-test-code","title":"2. Write a test code","text":"

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":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#restrictions-for-test-code-implementation","title":"Restrictions for test code implementation","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#3-test-the-entire-validator","title":"3. Test the entire validator","text":"

Please check that the autoware_lanelet2_map_validator works perfectly.

  1. Execute colcon test --packages-select autoware_lanelet2_map_validator --event-handlers console_cohesion+ and confirm that all tests pass.
  2. Execute the following command and confirm that no issues appear.
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.

"},{"location":"map/autoware_lanelet2_map_validator/docs/how_to_contribute/#5-submit-a-pull-request","title":"5. Submit a pull request","text":"

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 a crosswalk 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/","title":"regulatory_element_details_for_crosswalks","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#regulatory_element_details_for_crosswalks","title":"regulatory_element_details_for_crosswalks","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/#validator-name","title":"Validator name","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 a crosswalk subtype regulatory element that has no referses. 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 referses. 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_lines 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_polygons. 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_polygons. 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/","title":"intersection_area_segment_type","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#intersection_area_segment_type","title":"intersection_area_segment_type","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#validator-name","title":"Validator name","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.

  1. Create a 2D bounding box that circumscribes the polygon.
  2. Collect road_border type linestrings within or intersecting the 2D bounding box.
  3. Collect starting/ending edges of lanelets within or intersecting the 2D bounding box.
  4. Examine each point that constitutes the polygon whether it belongs to the collection above.

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 The intersection_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().

"},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/#related-source-codes","title":"Related source codes","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/","title":"intersection_area_validity","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#intersection_area_validity","title":"intersection_area_validity","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/#validator-name","title":"Validator name","text":"

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 The intersection_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/","title":"missing_regulator_elements_for_stop_lines","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#missing_regulator_elements_for_stop_lines","title":"missing_regulator_elements_for_stop_lines","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/#validator-name","title":"Validator name","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 a stop_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/","title":"missing_referrers_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#missing_referrers_for_traffic_lights","title":"missing_referrers_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/#validator-name","title":"Validator name","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.

Issue Code Message Severity Primitive Description Approach TrafficLight.MissingReferrers-001 Regulatory element of traffic light must be referred by at least one lanelet. Error Regulatory Element There is a 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/","title":"missing_regulator_elements_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#missing_regulator_elements_for_traffic_lights","title":"missing_regulator_elements_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/#validator-name","title":"Validator name","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 a traffic_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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/","title":"regulatory_element_details_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#regulatory_element_details_for_traffic_lights","title":"regulatory_element_details_for_traffic_lights","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/#validator-name","title":"Validator name","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 a traffic_light subtype regulatory element that has no ref_lines 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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/","title":"traffic_light_facing","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#traffic_light_facing","title":"traffic_light_facing","text":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#validator-name","title":"Validator name","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":""},{"location":"map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/#feature","title":"Feature","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 A traffic_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":""},{"location":"map/autoware_pointcloud_divider/","title":"autoware_pointcloud_divider","text":""},{"location":"map/autoware_pointcloud_divider/#autoware_pointcloud_divider","title":"autoware_pointcloud_divider","text":"

This is a tool for processing pcd files, and it can perform the following functions:

"},{"location":"map/autoware_pointcloud_divider/#supported-data-format","title":"Supported Data Format","text":"

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.

"},{"location":"map/autoware_pointcloud_divider/#installation","title":"Installation","text":"
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":"

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.

"},{"location":"map/autoware_pointcloud_divider/#parameters","title":"Parameters","text":"Name Type Description Default Range use_large_grid boolean Pack small segments to larger folders false N/A leaf_size float Resolution in meter for downsampling the output segments. Setting to negative to get the raw output PCDs. 0.2 N/A grid_size_x float The x size in meter of the output segments 20 N/A grid_size_y float The y size in meter of the output segments 20 N/A input_pcd_or_dir string The path to the folder containing the input PCD files N/A output_pcd_dir string The path to the folder containing the output PCD files N/A prefix string The prefix for the name of the output PCD files N/A point_type string Type of the point when processing PCD files. Could be point_xyz or point_xyzi point_xyzi N/A

How the point cloud is processed.

How the PCD file is named

"},{"location":"map/autoware_pointcloud_divider/#parameter-example","title":"Parameter example","text":"
  1. 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
  2. Dividing and downsampling point clouds

    use_large_grid: false\nleaf_size: 0.2\ngrid_size_x: 20\ngrid_size_y: 20\n
"},{"location":"map/autoware_pointcloud_divider/#metadata-yaml-format","title":"Metadata YAML Format","text":"

The metadata file should be named metadata.yaml. It contains the following fields:

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:

"},{"location":"map/autoware_pointcloud_merger/#supported-data-format","title":"Supported Data Format","text":"

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.

"},{"location":"map/autoware_pointcloud_merger/#installation","title":"Installation","text":"
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":"

INPUT_DIR and OUTPUT_PCD should be specified as absolute paths.

"},{"location":"map/autoware_pointcloud_merger/#parameter","title":"Parameter","text":"Name Type Description Default Range leaf_size float Resolution in meter for downsampling the output PCD. Setting to negative to get the raw output PCD. -0.1 N/A input_pcd_dir string The path to the folder containing the input PCD files N/A output_pcd string The path to the merged PCD file N/A point_type string Type of the point when processing PCD files. Could be point_xyz or point_xyzi point_xyzi N/A"},{"location":"map/autoware_pointcloud_merger/#license","title":"LICENSE","text":"

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.

"},{"location":"planning/planning_debug_tools/#trajectory-analyzer","title":"Trajectory analyzer","text":"

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.

"},{"location":"planning/planning_debug_tools/#stop-reason-visualizer","title":"Stop reason visualizer","text":"

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.

"},{"location":"planning/planning_debug_tools/#requirements","title":"Requirements","text":"

The version of the plotJuggler must be > 3.5.0

"},{"location":"planning/planning_debug_tools/#closest-velocity-checker","title":"Closest velocity checker","text":"

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:

"},{"location":"planning/planning_debug_tools/#available-options","title":"Available Options","text":""},{"location":"planning/planning_debug_tools/#how-to-use_1","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 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:

  1. Extracts the initial and goal poses from the beginning and end of the rosbag file
  2. Initializes the localization system with the initial pose
  3. Generates and publishes a route to the goal pose

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.

"},{"location":"planning/planning_debug_tools/#processing-time-checker","title":"Processing time checker","text":"

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

  1. test_base provides shared methods for testing. Other test codes are created based on functions defined here.
  2. test_sim_common_manual_testing provides the most basic functions. Any simulator can be tested using codes here. However, to make these codes usable with any simulators, the codes do not include any features for test automation.
  3. test_morai_sim is an automated version of test_sim_common_manual_testing for MORAI SIM: Drive. Thus it includes 'MORAI SIM: Drive'-specific codes. Users of the other simulators may create similar version for their simulator of interest.
"},{"location":"simulator/simulator_compatibility_test/#test-procedures-for-test_sim_common_manual_testing","title":"Test Procedures for test_sim_common_manual_testing","text":""},{"location":"simulator/simulator_compatibility_test/#build-process-before-test","title":"Build process before test","text":"
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":"
  1. Run your simulator
  2. Load a map and an ego vehicle for the test
  3. Run the test using the following command

    python -m pytest test_01_control_mode_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle control mode is changed into Manual (If the simulator has a GUI for this one, it should display the ego is in Manual)
    • Ego vehicle control mode is changed into Auto (If the simulator has a GUI for this one, it should display the ego is in Auto)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-2","title":"Test Case #2","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_02_change_gear_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle gear mode is changed into \"P\" (If the simulator has a GUI for this one, it should display the gear mode is in \"P\")
    • Ego vehicle gear mode is changed into \"N\" (If the simulator has a GUI for this one, it should display the gear mode is in \"N\")
    • Ego vehicle gear mode is changed into \"R\" (If the simulator has a GUI for this one, it should display the gear mode is in \"R\")
    • Ego vehicle gear mode is changed into \"D\" (If the simulator has a GUI for this one, it should display the gear mode is in \"D\")
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-3","title":"Test Case #3","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_03_longitudinal_command_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle longitudinal velocity is greater than 10 kph (If the simulator has a GUI for this one, it should display the longitudinal velocity is greater than 10 kph)
    • Ego vehicle longitudinal velocity is going below 10 kph. This is an ego vehicle initialize process to ensure the following acceleration is made by longitudinal.acceleration value (If the simulator has a GUI for this one, it should display the longitudinal velocity is less than 10 kph)
    • Ego vehicle longitudinal velocity is greater than 10 kph (If the simulator has a GUI for this one, it should display the longitudinal velocity is greater than 10 kph)
    • Ego vehicle longitudinal velocity is going below 10 kph. This is an ego vehicle reset process to tear down this test case.
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-4","title":"Test Case #4","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_04_lateral_command_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle steering and/or tire value is greater than 0 degree (If the simulator has a GUI for this one, it should display the steering and/or tire is greater than 0 degree)
    • Ego vehicle steering and/or tire value is 0 degree. This is a reset process. (If the simulator has a GUI for this one, it should display the steering and/or tire is 0 degree)
    • Ego vehicle steering and/or tire value is less than 0 degree (If the simulator has a GUI for this one, it should display the steering and/or tire is less than 0 degree)
    • Ego vehicle steering and/or tire value is 0 degree. This is a reset process. (If the simulator has a GUI for this one, it should display the steering and/or tire is 0 degree)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-5","title":"Test Case #5","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_05_turn_indicators_cmd_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle left turn indicator is turned on (If the simulator has a GUI for this one, it should display the left turn indicator is turned on)
    • Ego vehicle right turn indicator is turned on (If the simulator has a GUI for this one, it should display the right turn indicator is turned on)
    • Ego vehicle both turn indicators are turned off. This is a reset process. (If the simulator has a GUI for this one, it should display both left and right turn indicators are turned off)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-case-6","title":"Test Case #6","text":"
  1. Run your simulator (If the simulator is already running, skip this part)
  2. Load a map and an ego vehicle for the test (If a map and an ego are loaded already, skip this part)
  3. Run the test using the following command

    python -m pytest test_06_hazard_lights_cmd_and_report.py\n
  4. Check if expected behavior is created within the simulator

    • Ego vehicle hazard lights are turned on (If the simulator has a GUI for this one, it should display the hazard lights are turned on or blinking)
    • Ego vehicle hazard lights are turned off. This is a reset process. (If the simulator has a GUI for this one, it should display the hazard lights are turned off)
  5. Check if pytest output is passed or failure
"},{"location":"simulator/simulator_compatibility_test/#test-procedures-for-test_morai_sim","title":"Test Procedures for test_morai_sim","text":""},{"location":"simulator/simulator_compatibility_test/#build-process-before-test_1","title":"Build process before test","text":"
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.

"},{"location":"vehicle/calibration_adapter/#details","title":"Details","text":" "},{"location":"vehicle/calibration_adapter/#assumptions-known-limits","title":"Assumptions / Known limits","text":"

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.

"},{"location":"vehicle/parameter_estimator/#output","title":"output","text":"

The following topics are the output

For users, the EstimationResult.msg output contains the following items:

"},{"location":"vehicle/parameter_estimator/#these-values-can-be-confirmed-in-plot_juggler","title":"These values can be confirmed in plot_juggler","text":""},{"location":"vehicle/parameter_estimator/#how-to-run-parameter-estimator","title":"How to Run Parameter Estimator","text":"

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.

"},{"location":"vehicle/parameter_estimator/#estimation-results-confirmation","title":"Estimation results confirmation","text":"

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.

"},{"location":"vehicle/pitch_checker/","title":"pitch checker","text":""},{"location":"vehicle/pitch_checker/#pitch-checker","title":"pitch checker","text":"

The role of this node is to visualize pitch of driving route. The source of pitch is tf (map->base_link).

"},{"location":"vehicle/pitch_checker/#how-to-visualize","title":"How to visualize","text":""},{"location":"vehicle/pitch_checker/#collect-data","title":"Collect data","text":""},{"location":"vehicle/pitch_checker/#launch-data-collector-node","title":"launch data collector node","text":"
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)

"},{"location":"vehicle/pitch_checker/#visualize-data","title":"Visualize data","text":"
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.

"},{"location":"vehicle/time_delay_estimator/","title":"TimeDelayEstimation","text":""},{"location":"vehicle/time_delay_estimator/#timedelayestimation","title":"TimeDelayEstimation","text":"

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.

output.

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.

"},{"location":"vehicle/time_delay_estimator/#input-data-processing-results-examination","title":"Input data processing results examination","text":"

Check the input and output data. It is also used to adjust parameters of the estimation logic.

(*) 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.

"},{"location":"vehicle/time_delay_estimator/#estimation-results-confirmation","title":"Estimation results confirmation","text":"

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.

"},{"location":"vehicle/time_delay_estimator/#visualization-of-delay-estimation-results","title":"Visualization of delay estimation results","text":"

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 @@ https://autowarefoundation.github.io/autoware-tools-documentation/main/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/CODE_OF_CONDUCT/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/CONTRIBUTING/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/DISCLAIMER/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/autoware_dependency_checker/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/bag2lanelet/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/autoware_debug_tools/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/autoware_debug_tools/autoware_debug_tools/topic_connection_checker/readme/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/mission_planner_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/rtc_manager_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_automatic_goal_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_control_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_debug_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_debug_tools/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_logging_level_configure_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_screen_capture_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_simulated_clock_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_string_viewer_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/common/tier4_target_object_type_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/control/stop_accel_evaluator/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/control/vehicle_cmd_analyzer/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/control_data_collecting_tool/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/driving_environment_analyzer/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/evaluation/tier4_metrics_rviz_plugin/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/localization/deviation_estimation_tools/ReadMe/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_utils/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/how_to_contribute/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/crosswalk/missing_regulatory_elements_for_crosswalk/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/crosswalk/regulatory_element_details_for_crosswalks/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_segment_type/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/intersection/intersection_area_validity/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/stop_line/missing_regulatory_elements_for_stop_lines/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/traffic_light/missing_referrers_for_traffic_lights/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/traffic_light/missing_regulatory_elements_for_traffic_lights/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/traffic_light/regulatory_element_details_for_traffic_lights/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_lanelet2_map_validator/docs/traffic_light/traffic_light_facing/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_pointcloud_divider/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/map/autoware_pointcloud_merger/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/planning/autoware_planning_data_analyzer/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/planning/autoware_route_client/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/planning/autoware_rtc_replayer/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/planning/planning_debug_tools/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/planning/planning_debug_tools/doc-stop-reason-visualizer/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/simulator/simulator_compatibility_test/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/system/rqt_diagnostic_graph_monitor/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/vehicle/calibration_adapter/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/vehicle/parameter_estimator/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/vehicle/pitch_checker/ - 2024-12-17 + 2024-12-19 daily https://autowarefoundation.github.io/autoware-tools-documentation/main/vehicle/time_delay_estimator/ - 2024-12-17 + 2024-12-19 daily \ No newline at end of file diff --git a/main/sitemap.xml.gz b/main/sitemap.xml.gz index 80dbd835d12f35ff279b9e82d1f8aa312dc189f0..389a0779137a4e81396a9cc90a27bc8821e91fda 100644 GIT binary patch literal 936 zcmV;Z16TYXiwFqU1!QLe|8r?{Wo=<_E_iKh0PR{!Z`(K!zV}xIzS~NS9<~d|MK@`S z0Br(flQTh+V`?^hsN_gq=hyF0QkYh~*~}6WIN79Gh^9)a=9^TF zoz?N|&1CuNh_5`s(CV*+4QiQZNj!~gDQskfb!feo#4j>4NOilKVc0#KQV2Fpbx^GX zPrX>>B>HMm<;kATEfcw*m-FNK>*>jSdh&)v#=a+Fs+QisI>MKwmT0$&>PgS=($(&* z|HJn`yE=a_u0DvftIPA-vzr3&T;5z?{Be78artrY!JJ?GdG_hu#pn0edk^J7LTG5f zYhLAB!RuAsLEL+6D{1Cddayuyk3|LN!ZUTPS|fV#qOpCqlR|?^sNg-QJk8ExBS`I_ z6ha)P?0`kXM(iPq*x^0jw59<6HbRV~gp*#HGT{+Id@ZuLV=HW*fx5f(bI*-Y1HTJ|Z$YBH$^z;01CR5ng@t(62?DE^DPf`L-Z2HYWR zO7@f_qX80O^%ngcl@!6T(eV0xNzg#ALwNJ=k_v^^X``aHyv>@*v-Ar$^+Hl6>DirFOT~6o78gxm*Q0D`wa}b*Yly|-a}Z4d@cQ%D zY=@5+$DW}cR7|bpTc9y;!X=bN7Az4SDRx@izb#37kJeexf!@#2@qlTLQKuZpr{Jd@ zrZ!i^3Q+5K#>MV(*AgnYhDBCrIbRV3Y5x~z+9m>5#V;Hcp)@|E{)34qn_9Twv4on} zcr;SwV(lspg;}X(Lr@O3Mn>s?5j|9&3({MIr0QZmk9Rzszd@ literal 938 zcmV;b16BMViwFoT>|tjD|8r?{Wo=<_E_iKh0PR}cZ`(EyfA3!r_}x}w6zDcMF4m+i z0;~y;CC>y+o~dj2p^_(g&R@Tyq&UgCu6t<#)6t75>PYMNyCd&|TD<+s*`p3(!r)IQ zC$r7FC|?>D)4r3wk*}p1+=+%%>-BSY+&bBBpBT4Xh)4S!#)PyQrS@3@=^n z-uef=|Jl{~dvWzaoLya>-=5tRfamh&`r_T~&Bf)%y$5rC@#onezh8WMf4%om9wdZ@ z2E67~z7@P))g8pW$F`DYZlwncwD(w4a4tMk*Qzz57cUyyzjjh+Pze>h2bHJUS!@KU z9h5?d!;~GcXxNB7L=ii@=bP3P;NM1wk(6-KOH(F1LWr+L7I*wm2@|9(7bh=BilJbD z!yZ&PyrO){0L%u%$}+-22R57O8coYSrC3cS6#>{S%7)6uiLSMhKnulxaaS-GiT(40vY*W({hSm@x zn@-QmGnp4|zF|EtEM=Cy