dataflow-analysis/trace-analysis.ipynb
2022-06-28 10:06:42 +02:00

1493 lines
255 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import sys\n",
"import numpy as np\n",
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"\n",
"from IPython.display import display, clear_output\n",
"\n",
"sys.path.append(\"../ros2_tracing/tracetools_read\")\n",
"sys.path.append(\"../tracetools_analysis/tracetools_analysis\")\n",
"#from tracetools_read.trace import *\n",
"from tracetools_analysis.loading import load_file\n",
"from tracetools_analysis.processor.ros2 import Ros2Handler\n",
"from tracetools_analysis.utils.ros2 import Ros2DataModelUtil\n",
"\n",
"from dataclasses import dataclass\n",
"from typing import List, Dict, Set, Union, Tuple\n",
"from functools import cached_property\n",
"import pickle\n",
"import re\n",
"\n",
"from utils import ProgressPrinter"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def pkl_filename_from_file_timestamp(file_path):\n",
" if os.path.exists(file_path):\n",
" timestamp = os.path.getmtime(file_path)\n",
" pkl_filename = f\"ros_objects_{hash(timestamp)}.pkl\"\n",
" return pkl_filename, os.path.exists(pkl_filename)\n",
" return None, False\n",
"\n",
"path = os.path.expanduser(\"./\")\n",
"path_converted = os.path.join(path, 'converted')\n",
"pkl_filename, pkl_exists = pkl_filename_from_file_timestamp(path_converted)\n",
"\n",
"if not pkl_exists:\n",
" file = load_file(path)\n",
" handler = Ros2Handler.process(file)\n",
" util = Ros2DataModelUtil(handler)\n",
" pkl_filename, pkl_exists = pkl_filename_from_file_timestamp(path_converted)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"if False:\n",
" n=3\n",
" self = handler.data\n",
" print('====================ROS 2 DATA MODEL===================')\n",
" print('██ Contexts: ██')\n",
" print(self.contexts[:n].to_string())\n",
" print('██ Nodes: ██')\n",
" print(self.nodes[:n].to_string())\n",
" print('██ Publishers (rmw): ██')\n",
" print(self.rmw_publishers[:n].to_string())\n",
" print('██ Publishers (rcl): ██')\n",
" print(self.rcl_publishers[:n].to_string())\n",
" print('██ Subscriptions (rmw): ██')\n",
" print(self.rmw_subscriptions[:n].to_string())\n",
" print('██ Subscriptions (rcl): ██')\n",
" print(self.rcl_subscriptions[:n].to_string())\n",
" print('██ Subscription objects: ██')\n",
" print(self.subscription_objects[:n].to_string())\n",
" print('██ Services: ██')\n",
" print(self.services[:n].to_string())\n",
" print('██ Clients: ██')\n",
" print(self.clients[:n].to_string())\n",
" print('██ Timers: ██')\n",
" print(self.timers[:n].to_string())\n",
" print('██ Timer-node links: ██')\n",
" print(self.timer_node_links[:n].to_string())\n",
" print('██ Callback objects: ██')\n",
" print(self.callback_objects[:n].to_string())\n",
" print('██ Callback symbols: ██')\n",
" print(self.callback_symbols[:n].to_string())\n",
" print('██ Callback instances: ██')\n",
" print(self.callback_instances[:n].to_string())\n",
" print('██ Publish instances (rclcpp): ██')\n",
" print(self.rclcpp_publish_instances[:n].to_string())\n",
" print('██ Publish instances (rcl): ██')\n",
" print(self.rcl_publish_instances[:n].to_string())\n",
" print('██ Publish instances (rmw): ██')\n",
" print(self.rmw_publish_instances[:n].to_string())\n",
" print('██ Take instances (rmw): ██')\n",
" print(self.rmw_take_instances[:n].to_string())\n",
" print('██ Take instances (rcl): ██')\n",
" print(self.rcl_take_instances[:n].to_string())\n",
" print('██ Take instances (rclcpp): ██')\n",
" print(self.rclcpp_take_instances[:n].to_string())\n",
" print('██ Lifecycle state machines: ██')\n",
" print(self.lifecycle_state_machines[:n].to_string())\n",
" print('██ Lifecycle transitions: ██')\n",
" print(self.lifecycle_transitions[:n].to_string())\n",
" print('==================================================')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Structures"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def str_to_cls(classname):\n",
" return getattr(sys.modules[__name__], classname)\n",
"\n",
"def row_to_type(row, type, has_idx):\n",
" return type(id=row.name, **row) if has_idx else type(**row)\n",
"\n",
"def df_to_type_list(df, type):\n",
" if isinstance(type, str):\n",
" type = str_to_cls(type)\n",
" \n",
" has_idx = not isinstance(df.index, pd.RangeIndex)\n",
" return [row_to_type(row, type, has_idx) for _, row in df.iterrows()]\n",
"\n",
"def by_index(df, index, type):\n",
" return df_to_type_list(df.loc[index], type)\n",
"\n",
"def by_column(df, column_name, column_val, type):\n",
" return df_to_type_list(df[df[column_name] == column_val], type)\n",
"\n",
"def list_to_dict(ls, key='id'):\n",
" return {getattr(item, key): item for item in ls}\n",
"\n",
"#################################\n",
"# Predefined (from ROS2DataModel)\n",
"#################################\n",
"\n",
"@dataclass\n",
"class Node:\n",
" id: int\n",
" timestamp: int\n",
" tid: int\n",
" rmw_handle: int\n",
" name: str\n",
" namespace: str\n",
"\n",
" @cached_property\n",
" def path(self) -> str:\n",
" return '/'.join((self.namespace, self.name))\n",
"\n",
" @cached_property\n",
" def publishers(self) -> List['Publisher']:\n",
" return list(filter(lambda pub: pub.node_handle == self.id, publishers.values()))\n",
"\n",
" @cached_property\n",
" def subscriptions(self) -> List['Subscription']:\n",
" return list(filter(lambda sub: sub.node_handle == self.id, subscriptions.values()))\n",
" \n",
" @cached_property\n",
" def timers(self) -> List['Timer']:\n",
" links = [link.id for link in timer_node_links.values() if link.node_handle == self.id]\n",
" return list(filter(lambda timer: timer.id in links, timers.values()))\n",
"\n",
" def __hash__(self):\n",
" return hash(self.id)\n",
"\n",
"@dataclass\n",
"class Publisher:\n",
" id: int\n",
" timestamp: int\n",
" node_handle: int\n",
" rmw_handle: int\n",
" topic_name: str\n",
" depth: int\n",
"\n",
" @property\n",
" def node(self) -> 'Node':\n",
" return nodes[self.node_handle]\n",
"\n",
" @cached_property\n",
" def subscriptions(self) -> List['Subscription']:\n",
" return list(filter(lambda sub: sub.topic_name == self.topic_name, subscriptions.values()))\n",
"\n",
" @cached_property\n",
" def instances(self) -> List['PublishInstance']:\n",
" return list(filter(lambda inst: inst.publisher_handle == self.id, publish_instances))\n",
" \n",
" @property\n",
" def topic(self) -> 'Topic':\n",
" return topics[self.topic_name]\n",
"\n",
" def __hash__(self):\n",
" return hash(self.id)\n",
"\n",
"\n",
"@dataclass\n",
"class Subscription:\n",
" id: int\n",
" timestamp: int\n",
" node_handle: int\n",
" rmw_handle: int\n",
" topic_name: str\n",
" depth: int\n",
"\n",
" @property\n",
" def node(self) -> 'Node':\n",
" return nodes[self.node_handle]\n",
"\n",
" @cached_property\n",
" def publishers(self) -> List['Publisher']:\n",
" return list(filter(lambda pub: pub.topic_name == self.topic_name, publishers.values()))\n",
" \n",
" @cached_property\n",
" def subscription_object(self) -> 'SubscriptionObject':\n",
" sub_objs = list(filter(lambda sub_obj: sub_obj.subscription_handle == self.id, subscription_objects.values()))\n",
" assert len(sub_objs) <= 1\n",
" return sub_objs[0] if sub_objs else None\n",
"\n",
" @property\n",
" def topic(self) -> 'Topic':\n",
" return topics[self.topic_name]\n",
"\n",
" def __hash__(self):\n",
" return hash(self.id)\n",
" \n",
"@dataclass\n",
"class Timer:\n",
" id: int\n",
" timestamp: int\n",
" period: int\n",
" tid: int\n",
"\n",
" @cached_property\n",
" def nodes(self) -> List['Node']:\n",
" links = [link.node_handle for link in timer_node_links.values() if link.id == self.id]\n",
" return list(filter(lambda node: node.id in links, nodes.values()))\n",
" \n",
" @property\n",
" def callback_object(self) -> 'CallbackObject':\n",
" return callback_objects[self.id]\n",
"\n",
" def __hash__(self):\n",
" return hash(self.id)\n",
"\n",
"@dataclass\n",
"class TimerNodeLink:\n",
" id: int\n",
" timestamp: int\n",
" node_handle: int\n",
"\n",
"@dataclass\n",
"class SubscriptionObject:\n",
" id: int # subscription\n",
" timestamp: int\n",
" subscription_handle: int\n",
"\n",
" @property\n",
" def subscription(self) -> 'Subscription':\n",
" return subscriptions[self.subscription_handle]\n",
"\n",
" @property\n",
" def callback_object(self) -> 'CallbackObject':\n",
" return callback_objects[self.id]\n",
"\n",
" def __hash__(self):\n",
" return hash((self.id, self.timestamp, self.subscription_handle))\n",
"\n",
"@dataclass\n",
"class CallbackObject:\n",
" id: int # (reference) = subscription_object.id | timer.id | ....\n",
" timestamp: int\n",
" callback_object: int\n",
"\n",
" @cached_property\n",
" def callback_instances(self) -> List['CallbackInstance']:\n",
" return list(filter(lambda inst: inst.callback_object == self.callback_object, callback_instances))\n",
"\n",
" @cached_property\n",
" def owner(self):\n",
" if self.id in timers:\n",
" return timers[self.id]\n",
" if self.id in publishers:\n",
" return publishers[self.id]\n",
" if self.id in subscription_objects:\n",
" return subscription_objects[self.id]\n",
" if self.id in handler.data.services.index:\n",
" return 'Service'\n",
" if self.id in handler.data.clients.index:\n",
" return 'Client'\n",
" return None\n",
"\n",
" @cached_property\n",
" def owner_info(self):\n",
" info = util.get_callback_owner_info(self.callback_object)\n",
" if info is None:\n",
" return None, None\n",
" \n",
" type_name, dict_str = info.split(\" -- \")\n",
" kv_strs = dict_str.split(\", \")\n",
" info_dict = {k: v for k, v in map(lambda kv_str: kv_str.split(\": \", maxsplit=1), kv_strs)}\n",
" return type_name, info_dict\n",
"\n",
" def __hash__(self):\n",
" return hash((self.id, self.timestamp, self.callback_object))\n",
"\n",
"@dataclass\n",
"class PublishInstance:\n",
" publisher_handle: int\n",
" timestamp: int\n",
" message: int\n",
"\n",
" @property\n",
" def publisher(self) -> 'Publisher':\n",
" return publishers[self.publisher_handle]\n",
"\n",
" def __hash__(self):\n",
" return hash((self.publisher_handle, self.timestamp, self.message))\n",
"\n",
"@dataclass\n",
"class CallbackInstance:\n",
" callback_object: int\n",
" timestamp: pd.Timestamp\n",
" duration: pd.Timedelta\n",
" intra_process: bool\n",
"\n",
" @property\n",
" def callback_obj(self) -> 'CallbackObject':\n",
" return callback_objects[self.callback_object]\n",
"\n",
" def __hash__(self):\n",
" return hash((self.callback_object, self.timestamp, self.duration))\n",
"\n",
"@dataclass\n",
"class CallbackSymbol:\n",
" id: int # callback_object\n",
" timestamp: int\n",
" symbol: str\n",
"\n",
" @cached_property\n",
" def callback_obj(self) -> 'CallbackObject':\n",
" cb_objs = list(filter(lambda cb_obj: cb_obj.callback_object == self.id, callback_objects.values()))\n",
" assert len(cb_objs) <= 1\n",
" return cb_objs[0] if cb_objs else None\n",
"\n",
" def __hash__(self):\n",
" return hash((self.id, self.timestamp, self.symbol))\n",
"\n",
"\n",
"#######################################\n",
"# Self-defined (not from ROS2DataModel)\n",
"#######################################\n",
"\n",
"@dataclass\n",
"class Topic:\n",
" name: str\n",
"\n",
" @cached_property\n",
" def publishers(self) -> List['Publisher']:\n",
" return list(filter(lambda pub: pub.topic_name == self.name, publishers.values()))\n",
" \n",
" @cached_property\n",
" def subscriptions(self) -> List['Subscription']:\n",
" return list(filter(lambda sub: sub.topic_name == self.name, subscriptions.values()))\n",
"\n",
" def __hash__(self):\n",
" return hash(self.name)\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found pickled ROS objects from previous session, restoring...\n",
"Done.\n"
]
}
],
"source": [
"\n",
"if not pkl_exists:\n",
" print(\"Did not find pickled ROS objects, extracting...\")\n",
" #######################################\n",
" # Instantiate collections\n",
" #######################################\n",
"\n",
" nodes: Dict[int, 'Node'] = list_to_dict(df_to_type_list(handler.data.nodes, 'Node')); print(f\"Processed {len(nodes):<8d} nodes\")\n",
" publishers: Dict[int, 'Publisher'] = list_to_dict(df_to_type_list(handler.data.rcl_publishers, 'Publisher')); print(f\"Processed {len(publishers):<8d} publishers\")\n",
" subscriptions: Dict[int, 'Subscription'] = list_to_dict(df_to_type_list(handler.data.rcl_subscriptions, 'Subscription')); print(f\"Processed {len(subscriptions):<8d} subscriptions\")\n",
" timers: Dict[int, 'Timer'] = list_to_dict(df_to_type_list(handler.data.timers, 'Timer')); print(f\"Processed {len(timers):<8d} timers\")\n",
" timer_node_links: Dict[int, 'TimerNodeLink'] = list_to_dict(df_to_type_list(handler.data.timer_node_links, 'TimerNodeLink')); print(f\"Processed {len(timer_node_links):<8d} timer-node links\")\n",
" subscription_objects: Dict[int, 'SubscriptionObject'] = list_to_dict(df_to_type_list(handler.data.subscription_objects, 'SubscriptionObject')); print(f\"Processed {len(subscription_objects):<8d} subscription objects\")\n",
" callback_objects: Dict[int, 'CallbackObject'] = list_to_dict(df_to_type_list(handler.data.callback_objects, 'CallbackObject')); print(f\"Processed {len(callback_objects):<8d} callback objects\")\n",
" callback_symbols: Dict[int, 'CallbackSymbol'] = list_to_dict(df_to_type_list(handler.data.callback_symbols, 'CallbackSymbol')); print(f\"Processed {len(callback_symbols):<8d} callback symbols\")\n",
" publish_instances: List['PublishInstance'] = df_to_type_list(handler.data.rcl_publish_instances, 'PublishInstance'); print(f\"Processed {len(publish_instances):<8d} publish instances\")\n",
" callback_instances: List['CallbackInstance'] = df_to_type_list(handler.data.callback_instances, 'CallbackInstance'); print(f\"Processed {len(callback_instances):<8d} callback instances\")\n",
"\n",
" _unique_topic_names = {*(pub.topic_name for pub in publishers.values()), *(sub.topic_name for sub in subscriptions.values())}\n",
" topics: Dict[str, 'Topic'] = list_to_dict(map(Topic, _unique_topic_names), key=\"name\"); print(f\"Processed {len(topics):<8d} topics\")\n",
"\n",
" print(\"Caching dynamic properties...\")\n",
"\n",
" [(o.path, o.publishers, o.subscriptions, o.timers) for o in nodes.values()] ; print(\"Cached node properties\")\n",
" [(o.instances, o.subscriptions) for o in publishers.values()] ; print(\"Cached publisher properties\")\n",
" [(o.publishers, o.subscription_object) for o in subscriptions.values()] ; print(\"Cached subscription properties\")\n",
" [(o.nodes) for o in timers.values()] ; print(\"Cached timer properties\")\n",
" [(o.callback_instances, o.owner, o.owner_info) for o in callback_objects.values()] ; print(\"Cached callback object properties\")\n",
" [(o.callback_obj) for o in callback_symbols.values()] ; print(\"Cached callback symbol properties\")\n",
" [(o.publishers, o.subscriptions) for o in topics.values()] ; print(\"Cached topic properties\")\n",
"\n",
" fields_to_pickle = [\n",
" \"nodes\",\n",
" \"publishers\",\n",
" \"subscriptions\",\n",
" \"timers\",\n",
" \"timer_node_links\",\n",
" \"subscription_objects\",\n",
" \"callback_objects\",\n",
" \"callback_symbols\",\n",
" \"publish_instances\",\n",
" \"callback_instances\",\n",
" \"topics\"\n",
" ]\n",
"\n",
" pkl_dict = {key: globals()[key] for key in fields_to_pickle}\n",
"\n",
" print(\"Pickling...\")\n",
" with open(pkl_filename, \"wb\") as f:\n",
" pickle.dump(pkl_dict, f)\n",
"else:\n",
" print(\"Found pickled ROS objects from previous session, restoring...\")\n",
" with open(pkl_filename, \"rb\") as f:\n",
" pkl_dict = pickle.load(f)\n",
" for k, v in pkl_dict.items():\n",
" globals()[k] = v\n",
"\n",
"print(\"Done.\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Callback-Sub & Callback-Timer Links"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import re\n",
"\n",
"sym_table = []\n",
"\n",
"for sym in callback_symbols.values():\n",
" try:\n",
" cbo = list(filter(lambda val: val.callback_object==sym.id, callback_objects.values()))\n",
" assert len(cbo) == 1\n",
" cbo = cbo[0]\n",
" except:\n",
" print(len(cbo))\n",
" continue\n",
" owner_info = cbo.owner_info\n",
"\n",
" if None in owner_info: continue\n",
" type, info = owner_info\n",
" sym_table.append((sym, type, info))\n",
"\n",
"sym_table.sort(key=lambda tup: tup[1])\n",
"\n",
"def trim(string, length):\n",
" if len(string) > length:\n",
" return f\"{string[:length-3]}...\"\n",
" return string\n",
"\n",
"for sym, type, info in sym_table:\n",
" sym: CallbackSymbol\n",
" pretty_sym = Ros2DataModelUtil._prettify(None, sym.symbol)\n",
" pretty_sym = re.sub(r\"std::shared_ptr<(.*?) *(const)?>\", r\"\\1*\", pretty_sym)\n",
" try:\n",
" i = len(sym.callback_obj.callback_instances)\n",
" except KeyError:\n",
" i = -1\n",
" print(f\"{trim(pretty_sym, 100):100s}: i={i:>4d} {type:12s} n={info['node']:40s}\", end=' ') \n",
" if type == 'Timer':\n",
" print(f\"p={info['period']:7s}\")\n",
" elif type == 'Subscription':\n",
" print(f\"t={info['topic']:30s}\")\n",
" else:\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Topic-Node Mapping"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Aggregate topics that have the same pubs and subs\n",
"topic_cohorts = {}\n",
"for topic in topics.values():\n",
" key = (frozenset({*(pub.node_handle for pub in topic.publishers)}), frozenset({*(sub.node_handle for sub in topic.subscriptions)}))\n",
" if key not in topic_cohorts:\n",
" topic_cohorts[key] = []\n",
" topic_cohorts[key].append(topic)\n",
"\n",
"print(f\"{len(topics)} topics were aggregated into {len(topic_cohorts)} cohorts\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Timer-Node Mapping"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"unknowns = {}\n",
"\n",
"print_node_timer = lambda node_path, period: print(f\"{node_path:<90s}: {1/(period*1e-9):8.2f}Hz\")\n",
"\n",
"for timer in timers.values():\n",
" timer_nodes = timer.nodes\n",
" if not timer_nodes:\n",
" if timer.period not in unknowns:\n",
" unknowns[timer.period] = 0\n",
" unknowns[timer.period] += 1\n",
"\n",
" for node in timer_nodes: print_node_timer(node.path, timer.period)\n",
" \n",
"for period, count in unknowns.items():\n",
" print_node_timer(f\"UNKNOWN (x{count})\", period)\n",
"\n",
"n_unknown = sum(unknowns.values()) # Values are counts per period\n",
"print(f\"Found {len(timers) - n_unknown} timers with a recorded node, {n_unknown} without.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Measure Frequency Deviations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Get Publisher frequencies\n",
"df_publications = handler.data.rcl_publish_instances\n",
"pub_stats = {}\n",
"unknown = 0\n",
"for pi in publish_instances:\n",
" try:\n",
" pub = pi.publisher\n",
" except KeyError:\n",
" unknown += 1\n",
" continue\n",
" if pub.id not in pub_stats:\n",
" pub_stats[pub.id] = {'times': []}\n",
" pub_stats[pub.id]['times'].append(pi.timestamp*1e-9) # Nanoseconds to seconds float\n",
"\n",
"print(f\"{unknown} unknown publisher handles ({len(pub_stats)} known ones)\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plot Frequency Deviations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"fig_dirname = \"fig_frequency\"\n",
"os.makedirs(fig_dirname, exist_ok=True)\n",
"for i, (k, v) in enumerate(sorted(pub_stats.items(), key=lambda kv: len(kv[1]['times']), reverse=True)):\n",
" pub_time_diff = np.diff(np.array(v['times']))\n",
" v['period'] = pub_time_diff.mean()\n",
" v['period_std'] = pub_time_diff.std()\n",
" v['frequency'] = 1 / v['period']\n",
" v['frequency_std'] = (1/pub_time_diff).std()\n",
"\n",
" try:\n",
" publisher = publishers[k]\n",
" publisher_node = publisher.node\n",
" topic_name = publisher.topic_name\n",
" node_path = publisher_node.path\n",
" except Exception:\n",
" topic_name=\"UNKNOWN\"\n",
" node_path=\"UNKNOWN\"\n",
" \n",
" fig = plt.figure(figsize=(15,5))\n",
" ax = fig.add_subplot()\n",
" ax.hist(1/pub_time_diff)\n",
" ax.set_xlabel(\"Publication Frequency [Hz]\")\n",
" ax.set_ylabel(\"#Publications\")\n",
" ax.set_title(f\"{node_path} =({v['frequency']:.2f}Hz)=> {topic_name}\")\n",
" plt.savefig('/'.join((fig_dirname, f\"{i:06}{node_path}__{topic_name}\".replace('/','-'))))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Flow Graph"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"node_filters = [\"transform_listener_impl\", \"_monitor\"]\n",
"topic_filters = [\"/rosout\", \"/parameter_events\", \"/diagnostics\"]\n",
"\n",
"from pyvis.network import Network\n",
"net = Network(notebook=True, height='750px', width='100%', bgcolor='#ffffff', font_color='#000000')\n",
"\n",
"net.add_node(\"INPUT\", label=\"Input\", size=100, color=\"green\", physics=False, x=0, y=0)\n",
"net.add_node(\"OUTPUT\", label=\"Output\", size=100, color=\"red\", physics=False, x=6000, y=0)\n",
"\n",
"\n",
"for node in nodes.values():\n",
" if any(f in node.path for f in node_filters): \n",
" continue\n",
" net.add_node(node.id, label=node.name, title=node.path, size=20, color=\"#333\")\n",
"\n",
"for cohort_key, cohort_topics in topic_cohorts.items():\n",
" cohort_topic_names = [topic.name for topic in cohort_topics if not any(f in topic.name for f in topic_filters)]\n",
" if not cohort_topic_names: \n",
" continue\n",
" cohort_id=\"\\n\".join(cohort_topic_names)\n",
" cohort_weight=len(cohort_topic_names)\n",
" net.add_node(cohort_id, label=\" \", title=cohort_id, size=5, color=\"#333\")\n",
" \n",
" pubs = cohort_key[0]\n",
" subs = cohort_key[1]\n",
" n_pubs = len(pubs)\n",
" n_subs = len(subs)\n",
" \n",
" try:\n",
" if not n_pubs:\n",
" net.add_edge(\"INPUT\", cohort_id, arrows=\"to\", color=\"green\", weight=cohort_weight)\n",
" if not n_subs:\n",
" net.add_edge(cohort_id, \"OUTPUT\", arrows=\"to\", color=\"red\", weight=cohort_weight)\n",
"\n",
" for pub in pubs:\n",
" net.add_edge(pub, cohort_id, arrows=\"to\", color=\"green\", weight=cohort_weight)\n",
" for sub in subs:\n",
" net.add_edge(cohort_id, sub, arrows=\"to\", color=\"red\", weight=cohort_weight)\n",
" except:\n",
" continue\n",
"\n",
"net.toggle_physics(True)\n",
"net.show_buttons()\n",
"net.show(\"graph.html\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pub-Use Latencies\n",
"Compute for each node and its data dependencies the list of pub-use delays (per-topic-per-node list of pub-use delays)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def filter_none(ls):\n",
" return filter(lambda x: x is not None, ls)\n",
"\n",
"def safe_map(func, ls):\n",
" def safe_func(arg):\n",
" try:\n",
" return func(arg)\n",
" except:\n",
" return None\n",
" \n",
" return map(safe_func, ls)\n",
"\n",
"pub_use_delays = {node.id: {\n",
" 'pubs': {}, \n",
" 'invocations': {}, \n",
" 'n_unknown_invocations': 0, \n",
" 'n_pub_timestamps': 0\n",
" } for node in nodes.values()}\n",
"\n",
"for node in nodes.values():\n",
" node_pub_use_dict = pub_use_delays[node.id]\n",
" timestamp_min = np.inf; timestamp_max = 0\n",
"\n",
" n_pub_timestamps = 0\n",
" for sub in node.subscriptions:\n",
" node_pub_use_dict['pubs'][sub.topic_name] = {}\n",
" for pub in sub.publishers:\n",
" pub_timestamps = [inst.timestamp for inst in pub.instances]\n",
"\n",
" try:\n",
" pub_t_min = min(pub_timestamps); pub_t_max = max(pub_timestamps)\n",
" except ValueError:\n",
" pub_t_min = np.inf; pub_t_max = 0\n",
" \n",
" if pub_t_min < timestamp_min: timestamp_min = pub_t_min\n",
" if pub_t_max > timestamp_max: timestamp_max = pub_t_max\n",
"\n",
" node_pub_use_dict['pubs'][sub.topic_name][pub.node.path] = pub_timestamps\n",
" node_pub_use_dict['n_pub_timestamps'] += len(pub_timestamps)\n",
"\n",
" timer_cb_objs = list(filter_none(safe_map(lambda timer: timer.callback_object, node.timers)))\n",
" subsc_cb_objs = list(filter_none(safe_map(lambda subsc: subsc.subscription_object.callback_object, node.subscriptions)))\n",
"\n",
" print(f\"{node.path:95s} has {len(timer_cb_objs):1d} timer callbacks, {len(subsc_cb_objs):2d} subscription callbacks, {len(node_pub_use_dict['pubs']):2d} subscribed topics.\")\n",
"\n",
" node_invocations = node_pub_use_dict['invocations']\n",
"\n",
" for cb_obj in timer_cb_objs + subsc_cb_objs:\n",
" cb_invocations = []\n",
" for inst in cb_obj.callback_instances:\n",
" cb_invocations.append((inst.timestamp, inst.duration))\n",
"\n",
" node_invocations[cb_obj.id] = cb_invocations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import cm\n",
"\n",
"fig_dirname = \"fig_pub_use\"\n",
"os.makedirs(fig_dirname, exist_ok=True)\n",
"plt.close('all')\n",
"\n",
"node_filters=[]#\"transform_listener_impl\",]\n",
"\n",
"nodes_filtered = [node for node in nodes.values() if not any(f in node.path for f in node_filters)]\n",
"print(f\"Ignoring {len(nodes.values()) - len(nodes_filtered)} nodes due to filters.\")\n",
"\n",
"common_offset = min(map(lambda cb_inst: cb_inst.timestamp.timestamp(), callback_instances))\n",
"\n",
"zero_color = cm.get_cmap('viridis')(0.0)\n",
"\n",
"for node_i, (node, node_path, node_pub_use_dict) in enumerate(map(lambda node: (node, node.path, pub_use_delays[node.id]), nodes_filtered)):\n",
"\n",
" if not node_pub_use_dict['invocations']:\n",
" print(f\"{node_path:95s} has no invocations, skipping.\")\n",
" continue\n",
"\n",
" if len(node_pub_use_dict['pubs']) == 0:\n",
" print(f\"Skipping {node_path}, no publications\")\n",
" continue\n",
"\n",
" fig = plt.figure(figsize=(15,5))\n",
" ax: plt.Axes = fig.add_subplot()\n",
"\n",
" max_pubs_per_topic = max(len(pubs) for pubs in node_pub_use_dict['pubs'].values())\n",
" topic_names, topic_pubs = (zip(*node_pub_use_dict['pubs'].items()))\n",
"\n",
" vmin = 0; vmax = max_pubs_per_topic\n",
"\n",
" y_labels = []\n",
" current_y = 0\n",
"\n",
" for invoc_i, (cb_obj_id, cb_invocations) in enumerate(node_pub_use_dict['invocations'].items()):\n",
" try:\n",
" cb_obj = callback_objects[cb_obj_id]\n",
" sym = callback_symbols[cb_obj.callback_object].symbol\n",
" sym = Ros2DataModelUtil._prettify(None, sym)\n",
" sym = re.sub(r\"std::shared_ptr<(.*?)>\", r\"\\1*\", sym)\n",
"\n",
" cb_owner = cb_obj.owner\n",
" if isinstance(cb_owner, Timer):\n",
" cb_type = \"T\"\n",
" elif isinstance(cb_owner, SubscriptionObject):\n",
" cb_type = \"S\"\n",
" except KeyError or AttributeError:\n",
" sym = \"UNKNOWN\"\n",
" cb_type = \"U\"\n",
" \n",
" y_labels.append(f\"{sym} {cb_type}\")\n",
" n_markers = len(cb_invocations)\n",
"\n",
" points_x = []; points_y = []\n",
" for time, dur in cb_invocations:\n",
" time = time.timestamp() - common_offset; dur = dur.total_seconds()\n",
" points_x += [time, time+dur, None]\n",
" points_y += [current_y, current_y, 0.0]\n",
" \n",
" ax.plot(points_x,points_y, marker='.', c=zero_color)\n",
" current_y += 1\n",
"\n",
" n_cbs = current_y\n",
"\n",
" for topic_i, (topic_name, pubs) in enumerate(zip(topic_names, topic_pubs)):\n",
" for pub_i, (pub_name, timestamps) in enumerate(pubs.items()):\n",
" n_markers = len(timestamps)\n",
" ax.scatter(np.array(timestamps)*1e-9 - common_offset, (current_y,) * n_markers, marker='.', c=(pub_i,) * n_markers, vmin=vmin, vmax=vmax)\n",
" \n",
" y_labels.append(topic_name)\n",
" current_y += 1\n",
" \n",
" trigger_strs = []\n",
" t = node.timers\n",
" if t:\n",
" n_timers = len(t)\n",
" freqs = map(lambda timer: 1 / (timer.period*1e-9), t)\n",
" trigger_strs.append(f\"{n_timers} timer{'s' if n_timers != 1 else ''}, {'Hz, '.join((f'{freq:.0f}' for freq in freqs))}Hz\")\n",
" if node.subscriptions:\n",
" n_subs = len(node.subscriptions)\n",
" trigger_strs.append(f\"{n_subs} subscription{'s' if n_subs != 1 else ''}\")\n",
"\n",
" ax.set_xlabel(\"Publication / Invocation Timestamp [s]\")\n",
" ax.set_ylabel(\"Topic\")\n",
" ax.set_yticks(range(current_y))\n",
" ax.set_yticklabels(y_labels)\n",
" ax.set_ylim(0 - .1, current_y - 1 + .1)\n",
" ax.set_title(f\"{node_path} ({'; '.join(trigger_strs)})\")\n",
" ax.set_xlim(50, 50.25)\n",
"\n",
" ax.hlines(n_cbs - 0.5, *ax.get_xlim(), linestyles='dashed')\n",
" plt.savefig(os.path.join(fig_dirname, f\"{node_i:06}{node_path}\".replace('/','-')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# E2E Latency Calculation"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(483/483) Processing done. \n"
]
}
],
"source": [
"#################################################\n",
"# Data structures & helpers\n",
"#################################################\n",
"\n",
"LatencyStats = pd.Series\n",
"\n",
"@dataclass\n",
"class LatencyGraph:\n",
" verts: Set[CallbackObject]\n",
" edges: Dict[Tuple[CallbackObject, CallbackObject], Tuple[Topic, LatencyStats]]\n",
" starts: Dict[CallbackObject, Topic]\n",
" ends: Dict[CallbackObject, Topic]\n",
"\n",
"def pub_use_latencies(cb_instances: List[CallbackInstance], pub_instances: List[PublishInstance]):\n",
" cb_times = sorted([inst.timestamp.timestamp() for inst in cb_instances])\n",
"\n",
" if not pub_instances:\n",
" return pd.Series(np.full(len(cb_instances), np.nan), index=cb_times)\n",
"\n",
" pub_times = np.array(sorted([pub.timestamp * 1e-9 for pub in pub_instances]))\n",
"\n",
" pub_use_lats = np.array([cb_time - np.max(pub_times[pub_times < cb_time], initial=-np.inf) for cb_time in cb_times])\n",
" pub_use_lats[np.isposinf(pub_use_lats)] = np.nan\n",
" ret_series = pd.Series(pub_use_lats, index=cb_times)\n",
" return ret_series\n",
"\n",
"def inst_runtime_interval(cb_inst):\n",
" inst_t_min = cb_inst.timestamp.timestamp()\n",
" inst_t_max = inst_t_min + cb_inst.duration.total_seconds()\n",
" return (inst_t_min, inst_t_max)\n",
"\n",
"def count_pub_insts_in_intervals(cb_intervals: List[Tuple[float, float]], pub_insts: List[PublishInstance]):\n",
" \"\"\"\n",
" Counts number of publication instancess that lie within one of the cb_intervals.\n",
" \"\"\"\n",
" pub_timestamps = [inst.timestamp * 1e-9 for inst in pub_insts]\n",
" \n",
" # Algorithm: Two-pointer method\n",
" # With both the pub_timestamps and cb_intervals sorted ascending,\n",
" # we can cut down the O(m*n) comparisons to O(m+n).\n",
" pub_timestamps.sort()\n",
" cb_intervals.sort(key=lambda tup: tup[0])\n",
"\n",
" n_overlaps = 0\n",
" cb_iter = iter(cb_intervals)\n",
" pub_iter = iter(pub_timestamps)\n",
" (t_min, t_max) = next(cb_iter, (None, None))\n",
" t_pub = next(pub_iter, None)\n",
"\n",
" while t_pub is not None and t_min is not None:\n",
" if t_min <= t_pub <= t_max: # If publication in interval, increase counter, go to next pub (multiple pubs can be within one interval)\n",
" n_overlaps += 1\n",
" t_pub = next(pub_iter, None)\n",
" elif t_pub < t_min: # If publication before interval, increase pub\n",
" t_pub = next(pub_iter, None)\n",
" else: # If interval before publication, increase interval\n",
" (t_min, t_max) = next(cb_iter, (None, None))\n",
"\n",
" return n_overlaps\n",
"\n",
"#################################################\n",
"# Identify input and output topics\n",
"#################################################\n",
"\n",
"in_topics = [t for t in topics.values() if not t.publishers]\n",
"out_topics = [t for t in topics.values() if not t.subscriptions]\n",
"\n",
"#################################################\n",
"# For each node, work out dependencies and\n",
"# publications of each callback\n",
"#################################################\n",
"\n",
"cb_to_scored_pub: Dict[CallbackObject, Set[Tuple[Publisher, float]]] = {}\n",
"topic_to_dep_cb: Dict[Topic, Set[CallbackObject]] = {}\n",
"pub_cb_to_lat_stats: Dict[Tuple[Publisher, CallbackObject], LatencyStats] = {}\n",
"\n",
"with ProgressPrinter(\"Processing\", len(callback_objects)) as p:\n",
" for cb in callback_objects.values():\n",
" p.step(Ros2DataModelUtil._prettify(None, callback_symbols[cb.callback_object].symbol) if cb.callback_object in callback_symbols else str(cb.id))\n",
" # Find topics the callback EXPLICITLY depends on\n",
" # - Timer callbacks: no EXPLICIT dependencies\n",
" # - Subscription callbacks: callback depends on the subscribed topic. Possibly also has other IMPLICIT dependencies\n",
"\n",
" if type(cb.owner).__name__ == SubscriptionObject.__name__:\n",
" owner_node = cb.owner.subscription.node\n",
" dep_topics = [cb.owner.subscription.topic,]\n",
" elif type(cb.owner).__name__ == Timer.__name__:\n",
" owner_nodes = cb.owner.nodes\n",
" if len(owner_nodes) != 1:\n",
" raise(ValueError(\"Timer has more than one owner!\"))\n",
" dep_topics = []\n",
" elif cb.owner is None:\n",
" dep_topics = []\n",
" continue\n",
" else:\n",
" raise RuntimeError(f\"Callback owners other than timers/subscriptions cannot be handled: {cb.owner} {cb.owner_info}\")\n",
"\n",
" for topic in dep_topics: \n",
" if topic not in topic_to_dep_cb:\n",
" topic_to_dep_cb[topic] = set()\n",
" topic_to_dep_cb[topic].add(cb)\n",
"\n",
" for pub in topic.publishers:\n",
" pub_cb_to_lat_stats[(pub, cb)] = pub_use_latencies(cb.callback_instances, pub.instances)\n",
"\n",
" # Find topics the callback publishes to (HEURISTICALLY!)\n",
" # For topics published to during the runtime of the callback's instances, \n",
" # assume that they are published by the callback\n",
"\n",
" cb_runtime_intervals = [inst_runtime_interval(inst) for inst in cb.callback_instances]\n",
" cb_pub_overlap_counts = [count_pub_insts_in_intervals(cb_runtime_intervals, pub.instances) for pub in owner_node.publishers]\n",
"\n",
" for pub, olap_count in zip(owner_node.publishers, cb_pub_overlap_counts):\n",
" if olap_count == 0 or not pub.instances:\n",
" continue\n",
" score = olap_count / len(pub.instances)\n",
"\n",
" if cb not in cb_to_scored_pub: \n",
" cb_to_scored_pub[cb] = set()\n",
" cb_to_scored_pub[cb].add((pub, score))\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/diagnostics:\n",
" 0.069979% void (AutowareStateMonitorNode::?)(autoware_auto_vehicle_msgs::msg::ControlModeReport*),\n",
" 0.069979% void (AutowareStateMonitorNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/scenario_selector/trajectory:\n",
" 97.216700% void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectory*),\n",
" 2.783300% void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)\n",
"/diagnostics:\n",
" 9.008380% void (diagnostic_updater::Updater::?)(),\n",
" 90.712291% void (planning_diagnostics::PlanningErrorMonitorNode::?)()\n",
"/control/trajectory_follower/control_cmd:\n",
" 50.000000% void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control_msgs::msg::AckermannLateralCommand*),\n",
" 50.000000% void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control_msgs::msg::LongitudinalCommand*)\n",
"/planning/scenario_planning/status/stop_reason:\n",
" 0.306748% void (motion_planning::ObstacleStopPlannerNode::?)(sensor_msgs::msg::PointCloud2*),\n",
" 100.000000% void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)\n",
"/planning/scenario_planning/lane_driving/trajectory:\n",
" 0.306748% void (motion_planning::ObstacleStopPlannerNode::?)(sensor_msgs::msg::PointCloud2*),\n",
" 100.000000% void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)\n",
"/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/debug/marker:\n",
" 0.204499% void (motion_planning::ObstacleStopPlannerNode::?)(sensor_msgs::msg::PointCloud2*),\n",
" 100.000000% void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)\n",
"/diagnostics:\n",
" 9.047619% void (diagnostic_updater::Updater::?)(),\n",
" 90.793651% void (VehicleCmdGate::?)()\n",
"/control/command/emergency_cmd:\n",
" 100.000000% void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*),\n",
" 7.980703% void (behavior_path_planner::BehaviorPathPlannerNode::?)()\n",
"/control/command/control_cmd:\n",
" 100.000000% void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*),\n",
" 7.953136% void (behavior_path_planner::BehaviorPathPlannerNode::?)()\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.204082% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/stop_line:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/status/infrastructure_commands:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.204082% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/virtual_traffic_light:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::OccupancyGrid*)\n",
"/planning/scenario_planning/status/infrastructure_commands:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.204082% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/merge_from_private:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/status/stop_reasons:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.306122% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2*)\n",
"/planning/scenario_planning/status/infrastructure_commands:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.204082% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/occlusion_spot:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2*),\n",
" 0.102041% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)\n",
"/planning/scenario_planning/lane_driving/behavior_planning/path:\n",
" 100.000000% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*),\n",
" 0.408163% void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2*)\n"
]
}
],
"source": [
"pub_to_scored_cb = {}\n",
"\n",
"verts = set(callback_objects.values())\n",
"edges = {}\n",
"for send_cb, scored_pubs in cb_to_scored_pub.items():\n",
" for pub, score in scored_pubs:\n",
" if score == 0.0:\n",
" continue\n",
" if pub not in pub_to_scored_cb:\n",
" pub_to_scored_cb[pub] = []\n",
" pub_to_scored_cb[pub].append((send_cb, score))\n",
" receiver_cbs = [sub.subscription_object.callback_object for sub in pub.subscriptions if sub.subscription_object is not None]\n",
" for recv_cb in receiver_cbs:\n",
" edges[(send_cb, recv_cb)] = (pub.topic, pub_cb_to_lat_stats[(pub, recv_cb)])\n",
"\n",
"for pub, scored_cbs in pub_to_scored_cb.items():\n",
" if len(scored_cbs) > 1:\n",
" def _mapfun(tup):\n",
" cb, score = tup\n",
" pretty_sym = Ros2DataModelUtil._prettify(None, callback_symbols[cb.callback_object].symbol)\n",
" pretty_sym = re.sub(r\"std::shared_ptr<(.*?) *(const)?>\", r\"\\1*\", pretty_sym)\n",
" return f'{score*100:>10.6f}% {pretty_sym}'\n",
" cbstr = ',\\n '.join(map(_mapfun, scored_cbs))\n",
" print(f\"{pub.topic_name}:\\n {cbstr}\")\n",
"\n",
"inputs = {}\n",
"outputs = {}\n",
"for topic in out_topics:\n",
" outputs.update({cb: topic for pub in topic.publishers if pub in pub_to_scored_cb for cb, score in pub_to_scored_cb[pub]})\n",
"for topic in in_topics:\n",
" inputs.update({sub.subscription_object.callback_object: topic for sub in topic.subscriptions if sub.subscription_object is not None})\n",
"\n",
"\n",
"#################################################\n",
"# Filter callback objects and topics\n",
"#################################################\n",
"\n",
"callback_symbol_filters = [\n",
" \"rcl_interfaces::msg::ParameterEvent\", \"diagnostic_updater::Updater\", \n",
" \"rclcpp::ParameterService::ParameterService\", \"tf2_ros::TransformListener\",\n",
" \"rclcpp_components::ComponentManager\", \"diagnostic_aggregator::Aggregator\"\n",
" ]\n",
"\n",
"verts = set(filter(lambda vert: not any(f in callback_symbols[vert.callback_object].symbol for f in callback_symbol_filters), verts))\n",
"edges = {(cb1, cb2): val for (cb1, cb2), val in edges.items() if cb1 in verts and cb2 in verts}\n",
"outputs = {cb: topic for cb, topic in outputs.items() if cb in verts}\n",
"inputs = {cb: topic for cb, topic in inputs.items() if cb in verts}\n",
"\n",
"latency_graph = LatencyGraph(verts, edges, inputs, outputs)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Node(id=281471218807408, timestamp=1652795532762216423, tid=10104, rmw_handle=281471218875664, name='behavior_path_planner', namespace='/planning/scenario_planning/lane_driving/behavior_planning')\n",
" CallbackObject -> CallbackObject CallbackObject CallbackObject CallbackObject CallbackObject CallbackObject\n",
" CallbackObject -> CallbackObject CallbackObject CallbackObject\n"
]
}
],
"source": [
"#################################################\n",
"# Get intra-node dependencies from settings\n",
"#################################################\n",
"\n",
"def _find_node(path):\n",
" return next(filter(lambda n: n.path == path, nodes.values()))\n",
"\n",
"from ruamel.yaml import YAML\n",
"\n",
"yaml = YAML()\n",
"with open(\"settings/intra-node-data-deps.yaml\", \"r\") as f:\n",
" node_internal_deps = yaml.load(f)\n",
" # Convert node path to node instance\n",
" node_internal_deps = {_find_node(path): {\n",
" callback_objects[cb_id]: [callback_objects[dep_id] for dep_id in dep_ids]\n",
" for cb_id, dep_ids \n",
" in deps.items()\n",
" } for path, deps in node_internal_deps.items()}\n",
"\n",
"for node, cb_mappings in node_internal_deps.items():\n",
" print(node)\n",
" for cb, deps in cb_mappings.items():\n",
" print(\" \", type(cb).__name__, \"->\", ' '.join(map(lambda x: type(x).__name__, deps)))"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n",
"[WARN] CB has no owners\n"
]
},
{
"data": {
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.43.0 (0)\n -->\n<!-- Title: G Pages: 1 -->\n<svg width=\"3884pt\" height=\"3107pt\"\n viewBox=\"0.00 0.00 3884.00 3107.48\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 3103.48)\">\n<title>G</title>\n<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-3103.48 3880,-3103.48 3880,4 -4,4\"/>\n<g id=\"clust1\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"211,-1752.48 211,-2165.48 1120,-2165.48 1120,-1752.48 211,-1752.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2150.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner</text>\n</g>\n<g id=\"clust2\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"89,-2173.48 89,-2416.48 1988,-2416.48 1988,-2173.48 89,-2173.48\"/>\n<text text-anchor=\"middle\" x=\"1038.5\" y=\"-2401.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner</text>\n</g>\n<g id=\"clust3\" class=\"cluster\">\n<title>cluster_/control/external_cmd_selector</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"339,-2424.48 339,-2735.48 992,-2735.48 992,-2424.48 339,-2424.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2720.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/external_cmd_selector</text>\n</g>\n<g id=\"clust4\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/scenario_selector</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"1322.5,-1343.48 1322.5,-1552.48 1943.5,-1552.48 1943.5,-1343.48 1322.5,-1343.48\"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1537.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/scenario_selector</text>\n</g>\n<g id=\"clust5\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/external_velocity_limit_selector</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"295,-1637.48 295,-1744.48 1036,-1744.48 1036,-1637.48 295,-1637.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1729.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/external_velocity_limit_selector</text>\n</g>\n<g id=\"clust6\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/parking/freespace_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"3003,-1465.48 3003,-1640.48 3771,-1640.48 3771,-1465.48 3003,-1465.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1625.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/parking/freespace_planner</text>\n</g>\n<g id=\"clust7\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/parking/costmap_generator</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2128.5,-1587.48 2128.5,-1762.48 2757.5,-1762.48 2757.5,-1587.48 2128.5,-1587.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1747.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/parking/costmap_generator</text>\n</g>\n<g id=\"clust8\" class=\"cluster\">\n<title>cluster_/control/trajectory_follower/longitudinal_controller_node_exe</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2898,-1010.48 2898,-1117.48 3876,-1117.48 3876,-1010.48 2898,-1010.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1102.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/trajectory_follower/longitudinal_controller_node_exe</text>\n</g>\n<g id=\"clust9\" class=\"cluster\">\n<title>cluster_/planning/planning_diagnostics/planning_error_monitor</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2050.5,-1391.48 2050.5,-1464.48 2835.5,-1464.48 2835.5,-1391.48 2050.5,-1391.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1449.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/planning_diagnostics/planning_error_monitor</text>\n</g>\n<g id=\"clust10\" class=\"cluster\">\n<title>cluster_/control/vehicle_cmd_gate</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2109.5,-235.48 2109.5,-818.48 2776.5,-818.48 2776.5,-235.48 2109.5,-235.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-803.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/vehicle_cmd_gate</text>\n</g>\n<g id=\"clust11\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"1291.5,-1560.48 1291.5,-1701.48 1974.5,-1701.48 1974.5,-1560.48 1291.5,-1560.48\"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1686.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner</text>\n</g>\n<g id=\"clust12\" class=\"cluster\">\n<title>cluster_/system/ad_service_state_monitor</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"3044,-395.48 3044,-570.48 3730,-570.48 3730,-395.48 3044,-395.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-555.28\" font-family=\"Times,serif\" font-size=\"14.00\">/system/ad_service_state_monitor</text>\n</g>\n<g id=\"clust13\" class=\"cluster\">\n<title>cluster_/control/trajectory_follower/lateral_controller_node_exe</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2905,-842.48 2905,-983.48 3869,-983.48 3869,-842.48 2905,-842.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-968.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/trajectory_follower/lateral_controller_node_exe</text>\n</g>\n<g id=\"clust14\" class=\"cluster\">\n<title>cluster_/control/external_cmd_converter</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2945,-83.48 2945,-292.48 3829,-292.48 3829,-83.48 2945,-83.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-277.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/external_cmd_converter</text>\n</g>\n<g id=\"clust15\" class=\"cluster\">\n<title>cluster_/system/emergency_handler</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"1289,-473.48 1289,-682.48 1977,-682.48 1977,-473.48 1289,-473.48\"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-667.28\" font-family=\"Times,serif\" font-size=\"14.00\">/system/emergency_handler</text>\n</g>\n<g id=\"clust16\" class=\"cluster\">\n<title>cluster_/control/trajectory_follower/latlon_muxer_node_exe</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"151,-332.48 151,-405.48 1180,-405.48 1180,-332.48 151,-332.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-390.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/trajectory_follower/latlon_muxer_node_exe</text>\n</g>\n<g id=\"clust18\" class=\"cluster\">\n<title>cluster_/planning/mission_planning/mission_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"294,-1119.48 294,-1226.48 1037,-1226.48 1037,-1119.48 294,-1119.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1211.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/mission_planning/mission_planner</text>\n</g>\n<g id=\"clust19\" class=\"cluster\">\n<title>cluster_/system/system_error_monitor</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"340.5,-643.48 340.5,-818.48 990.5,-818.48 990.5,-643.48 340.5,-643.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-803.28\" font-family=\"Times,serif\" font-size=\"14.00\">/system/system_error_monitor</text>\n</g>\n<g id=\"clust20\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"205,-970.48 205,-1111.48 1126,-1111.48 1126,-970.48 205,-970.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1096.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker</text>\n</g>\n<g id=\"clust21\" class=\"cluster\">\n<title>cluster_/control/trajectory_follower/lane_departure_checker_node</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2964.5,-625.48 2964.5,-834.48 3809.5,-834.48 3809.5,-625.48 2964.5,-625.48\"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-819.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/trajectory_follower/lane_departure_checker_node</text>\n</g>\n<g id=\"clust22\" class=\"cluster\">\n<title>cluster_/map/lanelet2_map_visualization</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2109.5,-1267.48 2109.5,-1306.48 2776.5,-1306.48 2776.5,-1267.48 2109.5,-1267.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1291.28\" font-family=\"Times,serif\" font-size=\"14.00\">/map/lanelet2_map_visualization</text>\n</g>\n<g id=\"clust23\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"261,-1234.48 261,-1409.48 1070,-1409.48 1070,-1234.48 261,-1234.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1394.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner</text>\n</g>\n<g id=\"clust24\" class=\"cluster\">\n<title>cluster_/control/shift_decider</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"1313.5,-349.48 1313.5,-422.48 1952.5,-422.48 1952.5,-349.48 1313.5,-349.48\"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-407.28\" font-family=\"Times,serif\" font-size=\"14.00\">/control/shift_decider</text>\n</g>\n<g id=\"clust25\" class=\"cluster\">\n<title>cluster_/planning/scenario_planning/motion_velocity_smoother</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2024,-1046.48 2024,-1153.48 2862,-1153.48 2862,-1046.48 2024,-1046.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1138.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/scenario_planning/motion_velocity_smoother</text>\n</g>\n<g id=\"clust26\" class=\"cluster\">\n<title>cluster_/robot_state_publisher</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"359,-2773.48 359,-2812.48 972,-2812.48 972,-2773.48 359,-2773.48\"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2797.28\" font-family=\"Times,serif\" font-size=\"14.00\">/robot_state_publisher</text>\n</g>\n<g id=\"clust27\" class=\"cluster\">\n<title>cluster_/planning/mission_planning/goal_pose_visualizer</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2081.5,-1314.48 2081.5,-1353.48 2804.5,-1353.48 2804.5,-1314.48 2081.5,-1314.48\"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1338.28\" font-family=\"Times,serif\" font-size=\"14.00\">/planning/mission_planning/goal_pose_visualizer</text>\n</g>\n<g id=\"clust17\" class=\"cluster\">\n<title>cluster_/map/map_tf_generator</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2992,-3060.48 2992,-3099.48 3468,-3099.48 3468,-3060.48 2992,-3060.48\"/>\n<text text-anchor=\"middle\" x=\"3230\" y=\"-3084.28\" font-family=\"Times,serif\" font-size=\"14.00\">/map/map_tf_generator</text>\n</g>\n<g id=\"clust28\" class=\"cluster\">\n<title>cluster_/system/system_monitor/hdd_monitor</title>\n<polygon fill=\"lightgray\" stroke=\"black\" points=\"2367,-3060.48 2367,-3099.48 2652,-3099.48 2652,-3060.48 2367,-3060.48\"/>\n<text text-anchor=\"middle\" x=\"2509.5\" y=\"-3084.28\" font-family=\"Times,serif\" font-size=\"14.00\">/system/system_monitor/hdd_monitor</text>\n</g>\n<!-- INPUT -->\n<g id=\"node1\" class=\"node\">\n<title>INPUT</title>\n<polygon fill=\"none\" stroke=\"black\" points=\"0,-1563.98 0,-1578.98 53,-1578.98 53,-1563.98 0,-1563.98\"/>\n<text text-anchor=\"middle\" x=\"24\" y=\"-1567.78\" font-family=\"Times,serif\" font-size=\"14.00\">INPUT</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"48,-1563.98 48,-1578.98 \"/>\n<text text-anchor=\"middle\" x=\"50.5\" y=\"-1567.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</g>\n<!-- 281471292354688 -->\n<g id=\"node3\" class=\"node\">\n<title>281471292354688</title>\n<g id=\"a_node3\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"211,-1956.98 211,-1971.98 1120,-1971.98 1120,-1956.98 211,-1956.98\"/>\n<text text-anchor=\"middle\" x=\"213.5\" y=\"-1960.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"216,-1956.98 216,-1971.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1960.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::msg::TrafficSignalArray*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1115,-1956.98 1115,-1971.98 \"/>\n<text text-anchor=\"middle\" x=\"1117.5\" y=\"-1960.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292354688 -->\n<g id=\"edge78\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292354688:in</title>\n<g id=\"a_edge78\"><a xlink:title=\"/perception/traffic_light_recognition/traffic_signals\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1621.48 59.43,-1919.08 89,-1947.48 97.28,-1955.44 177.23,-1946.2 204.46,-1950.66\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"203.03,-1953.86 213.5,-1955.48 206.33,-1947.69 203.03,-1953.86\"/>\n</a>\n</g>\n</g>\n<!-- 281471292723984 -->\n<g id=\"node5\" class=\"node\">\n<title>281471292723984</title>\n<g id=\"a_node5\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"211,-1922.98 211,-1937.98 1120,-1937.98 1120,-1922.98 211,-1922.98\"/>\n<text text-anchor=\"middle\" x=\"213.5\" y=\"-1926.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"216,-1922.98 216,-1937.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1926.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::msg::TrafficSignalArray*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1115,-1922.98 1115,-1937.98 \"/>\n<text text-anchor=\"middle\" x=\"1117.5\" y=\"-1926.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292723984 -->\n<g id=\"edge42\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292723984:in</title>\n<g id=\"a_edge42\"><a xlink:title=\"/external/traffic_light_recognition/traffic_signals\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1617.73 62,-1887.83 89,-1913.48 97.32,-1921.39 177.24,-1912.18 204.47,-1916.65\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"203.03,-1919.86 213.5,-1921.48 206.33,-1913.68 203.03,-1919.86\"/>\n</a>\n</g>\n</g>\n<!-- 281471292197968 -->\n<g id=\"node6\" class=\"node\">\n<title>281471292197968</title>\n<g id=\"a_node6\"><a xlink:title=\"4µs, 23µs, 44159µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"322.5,-2024.98 322.5,-2039.98 1008.5,-2039.98 1008.5,-2024.98 322.5,-2024.98\"/>\n<text text-anchor=\"middle\" x=\"325\" y=\"-2028.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"327.5,-2024.98 327.5,-2039.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2028.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1003.5,-2024.98 1003.5,-2039.98 \"/>\n<text text-anchor=\"middle\" x=\"1006\" y=\"-2028.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292197968 -->\n<g id=\"edge56\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292197968:in</title>\n<g id=\"a_edge56\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1629.01 53.77,-1982.12 89,-2015.48 97.34,-2023.38 272.16,-2013.51 315.06,-2019.79\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"313.91,-2023.1 324.5,-2023.48 316.46,-2016.58 313.91,-2023.1\"/>\n</a>\n</g>\n</g>\n<!-- 281471292814832 -->\n<g id=\"node7\" class=\"node\">\n<title>281471292814832</title>\n<g id=\"a_node7\"><a xlink:title=\"2µs, 5µs, 44µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"303.5,-1888.98 303.5,-1903.98 1027.5,-1903.98 1027.5,-1888.98 303.5,-1888.98\"/>\n<text text-anchor=\"middle\" x=\"306\" y=\"-1892.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"308.5,-1888.98 308.5,-1903.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1892.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::OccupancyGrid*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1022.5,-1888.98 1022.5,-1903.98 \"/>\n<text text-anchor=\"middle\" x=\"1025\" y=\"-1892.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292814832 -->\n<g id=\"edge90\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292814832:in</title>\n<g id=\"a_edge90\"><a xlink:title=\"/perception/occupancy_grid_map/map\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1613.98 64.26,-1856.9 89,-1879.48 96.74,-1886.55 255.28,-1878.24 296.02,-1883.94\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"294.91,-1887.26 305.5,-1887.48 297.36,-1880.7 294.91,-1887.26\"/>\n</a>\n</g>\n</g>\n<!-- 281471292758736 -->\n<g id=\"node8\" class=\"node\">\n<title>281471292758736</title>\n<g id=\"a_node8\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"232,-1820.98 232,-1835.98 1099,-1835.98 1099,-1820.98 232,-1820.98\"/>\n<text text-anchor=\"middle\" x=\"234.5\" y=\"-1824.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"237,-1820.98 237,-1835.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1824.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_v2x_msgs::msg::VirtualTrafficLightStateArray*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1094,-1820.98 1094,-1835.98 \"/>\n<text text-anchor=\"middle\" x=\"1096.5\" y=\"-1824.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292758736 -->\n<g id=\"edge65\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292758736:in</title>\n<g id=\"a_edge65\"><a xlink:title=\"/awapi/tmp/virtual_traffic_light_states\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1606.5 69.62,-1794.13 89,-1811.48 99.18,-1820.6 195.76,-1808.5 225.7,-1814.22\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"224.12,-1817.36 234.5,-1819.48 227.71,-1811.35 224.12,-1817.36\"/>\n</a>\n</g>\n</g>\n<!-- 281471292694880 -->\n<g id=\"node9\" class=\"node\">\n<title>281471292694880</title>\n<g id=\"a_node9\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"272,-1786.98 272,-1801.98 1059,-1801.98 1059,-1786.98 272,-1786.98\"/>\n<text text-anchor=\"middle\" x=\"274.5\" y=\"-1790.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"277,-1786.98 277,-1801.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1790.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_planning_msgs::msg::VelocityLimit*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1054,-1786.98 1054,-1801.98 \"/>\n<text text-anchor=\"middle\" x=\"1056.5\" y=\"-1790.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292694880 -->\n<g id=\"edge91\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292694880:in</title>\n<g id=\"a_edge91\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_velocity_limit_mps\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1625.09 55.19,-1748.39 89,-1777.48 95.72,-1783.26 227.89,-1777.4 264.93,-1782.18\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"263.91,-1785.53 274.5,-1785.48 266.19,-1778.92 263.91,-1785.53\"/>\n</a>\n</g>\n</g>\n<!-- 281471292187680 -->\n<g id=\"node10\" class=\"node\">\n<title>281471292187680</title>\n<g id=\"a_node10\"><a xlink:title=\"2µs, 5µs, 136µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"215,-2092.98 215,-2107.98 1116,-2107.98 1116,-2092.98 215,-2092.98\"/>\n<text text-anchor=\"middle\" x=\"217.5\" y=\"-2096.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"220,-2092.98 220,-2107.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2096.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1111,-2092.98 1111,-2107.98 \"/>\n<text text-anchor=\"middle\" x=\"1113.5\" y=\"-2096.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292187680 -->\n<g id=\"edge76\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292187680:in</title>\n<g id=\"a_edge76\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1608.51 69.04,-2063.81 89,-2083.48 97.48,-2091.84 180.8,-2081.93 208.56,-2086.6\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"207.05,-2089.76 217.5,-2091.48 210.4,-2083.62 207.05,-2089.76\"/>\n</a>\n</g>\n</g>\n<!-- 281471292439776 -->\n<g id=\"node11\" class=\"node\">\n<title>281471292439776</title>\n<g id=\"a_node11\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"279,-2058.98 279,-2073.98 1052,-2073.98 1052,-2058.98 279,-2058.98\"/>\n<text text-anchor=\"middle\" x=\"281.5\" y=\"-2062.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"284,-2058.98 284,-2073.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2062.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_api_msgs::msg::CrosswalkStatus*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1047,-2058.98 1047,-2073.98 \"/>\n<text text-anchor=\"middle\" x=\"1049.5\" y=\"-2062.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292439776 -->\n<g id=\"edge60\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292439776:in</title>\n<g id=\"a_edge60\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_crosswalk_states\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1632.77 51.29,-2013.27 89,-2049.48 95.66,-2055.88 234.28,-2049.22 272.06,-2054.16\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"270.91,-2057.47 281.5,-2057.48 273.23,-2050.86 270.91,-2057.47\"/>\n</a>\n</g>\n</g>\n<!-- 281471292201536 -->\n<g id=\"node12\" class=\"node\">\n<title>281471292201536</title>\n<g id=\"a_node12\"><a xlink:title=\"21µs, 37µs, 1085µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"303.5,-1854.98 303.5,-1869.98 1027.5,-1869.98 1027.5,-1854.98 303.5,-1854.98\"/>\n<text text-anchor=\"middle\" x=\"306\" y=\"-1858.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"308.5,-1854.98 308.5,-1869.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1858.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1022.5,-1854.98 1022.5,-1869.98 \"/>\n<text text-anchor=\"middle\" x=\"1025\" y=\"-1858.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292201536 -->\n<g id=\"edge85\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292201536:in</title>\n<g id=\"a_edge85\"><a xlink:title=\"/perception/obstacle_segmentation/pointcloud\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1610.24 66.86,-1825.6 89,-1845.48 96.8,-1852.49 255.29,-1844.23 296.02,-1849.94\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"294.91,-1853.26 305.5,-1853.48 297.36,-1846.7 294.91,-1853.26\"/>\n</a>\n</g>\n</g>\n<!-- 281471292458032 -->\n<g id=\"node13\" class=\"node\">\n<title>281471292458032</title>\n<g id=\"a_node13\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"273,-1990.98 273,-2005.98 1058,-2005.98 1058,-1990.98 273,-1990.98\"/>\n<text text-anchor=\"middle\" x=\"275.5\" y=\"-1994.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"278,-1990.98 278,-2005.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1994.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_api_msgs::msg::IntersectionStatus*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1053,-1990.98 1053,-2005.98 \"/>\n<text text-anchor=\"middle\" x=\"1055.5\" y=\"-1994.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471292458032 -->\n<g id=\"edge69\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471292458032:in</title>\n<g id=\"a_edge69\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_intersection_states\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1625.24 56.52,-1950.68 89,-1981.48 95.47,-1987.62 228.55,-1981.46 265.86,-1986.19\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"264.91,-1989.56 275.5,-1989.48 267.17,-1982.94 264.91,-1989.56\"/>\n</a>\n</g>\n</g>\n<!-- 281471220381760 -->\n<g id=\"node15\" class=\"node\">\n<title>281471220381760</title>\n<g id=\"a_node15\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"273,-2241.98 273,-2256.98 1058,-2256.98 1058,-2241.98 273,-2241.98\"/>\n<text text-anchor=\"middle\" x=\"275.5\" y=\"-2245.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"278,-2241.98 278,-2256.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2245.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(tier4_planning_msgs::msg::PathChangeModule*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1053,-2241.98 1053,-2256.98 \"/>\n<text text-anchor=\"middle\" x=\"1055.5\" y=\"-2245.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471220381760 -->\n<g id=\"edge77\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471220381760:in</title>\n<g id=\"a_edge77\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/path_change_force\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1616.77 63.14,-2207.03 89,-2232.48 95.35,-2238.73 228.52,-2232.49 265.85,-2237.19\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"264.91,-2240.57 275.5,-2240.48 267.16,-2233.94 264.91,-2240.57\"/>\n</a>\n</g>\n</g>\n<!-- 281471220598896 -->\n<g id=\"node16\" class=\"node\">\n<title>281471220598896</title>\n<g id=\"a_node16\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"330,-2275.98 330,-2290.98 1001,-2290.98 1001,-2275.98 330,-2275.98\"/>\n<text text-anchor=\"middle\" x=\"332.5\" y=\"-2279.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"335,-2275.98 335,-2290.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2279.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::SideShiftModule::?)(tier4_planning_msgs::msg::LateralOffset*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"996,-2275.98 996,-2290.98 \"/>\n<text text-anchor=\"middle\" x=\"998.5\" y=\"-2279.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471220598896 -->\n<g id=\"edge87\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471220598896:in</title>\n<g id=\"a_edge87\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/input/lateral_offset\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1618.65 61.7,-2239.81 89,-2266.48 97.51,-2274.8 279.16,-2264.22 323.03,-2270.73\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"321.91,-2274.05 332.5,-2274.48 324.49,-2267.54 321.91,-2274.05\"/>\n</a>\n</g>\n</g>\n<!-- 281471220195376 -->\n<g id=\"node18\" class=\"node\">\n<title>281471220195376</title>\n<g id=\"a_node18\"><a xlink:title=\"2µs, 7µs, 317µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"346,-2377.98 346,-2392.98 985,-2392.98 985,-2377.98 346,-2377.98\"/>\n<text text-anchor=\"middle\" x=\"348.5\" y=\"-2381.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"351,-2377.98 351,-2392.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2381.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"980,-2377.98 980,-2392.98 \"/>\n<text text-anchor=\"middle\" x=\"982.5\" y=\"-2381.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471220195376 -->\n<g id=\"edge50\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471220195376:in</title>\n<g id=\"a_edge50\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1624.31 57.73,-2337.77 89,-2368.48 98.08,-2377.41 293.37,-2365.57 339.02,-2372.6\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"337.92,-2375.93 348.5,-2376.48 340.58,-2369.45 337.92,-2375.93\"/>\n</a>\n</g>\n</g>\n<!-- 281471220214336 -->\n<g id=\"node19\" class=\"node\">\n<title>281471220214336</title>\n<g id=\"a_node19\"><a xlink:title=\"2µs, 6µs, 36µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"238.5,-2343.98 238.5,-2358.98 1092.5,-2358.98 1092.5,-2343.98 238.5,-2343.98\"/>\n<text text-anchor=\"middle\" x=\"241\" y=\"-2347.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"243.5,-2343.98 243.5,-2358.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2347.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1087.5,-2343.98 1087.5,-2358.98 \"/>\n<text text-anchor=\"middle\" x=\"1090\" y=\"-2347.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471220214336 -->\n<g id=\"edge72\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471220214336:in</title>\n<g id=\"a_edge72\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1622.43 59.37,-2304.8 89,-2334.48 99.09,-2344.6 200.93,-2331.2 231.73,-2337.15\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"230.14,-2340.28 240.5,-2342.48 233.77,-2334.3 230.14,-2340.28\"/>\n</a>\n</g>\n</g>\n<!-- 187651236011408 -->\n<g id=\"node24\" class=\"node\">\n<title>187651236011408</title>\n<g id=\"a_node24\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"362,-2594.98 362,-2609.98 969,-2609.98 969,-2594.98 362,-2594.98\"/>\n<text text-anchor=\"middle\" x=\"364.5\" y=\"-2598.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"367,-2594.98 367,-2609.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2598.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::TurnSignalStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"964,-2594.98 964,-2609.98 \"/>\n<text text-anchor=\"middle\" x=\"966.5\" y=\"-2598.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236011408 -->\n<g id=\"edge63\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236011408:in</title>\n<g id=\"a_edge63\"><a xlink:title=\"/api/external/set/command/local/turn_signal\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1608.42 69.15,-2565.82 89,-2585.48 98.65,-2595.04 307.8,-2581.9 355.07,-2589.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"353.93,-2592.79 364.5,-2593.48 356.67,-2586.35 353.93,-2592.79\"/>\n</a>\n</g>\n</g>\n<!-- 187651236017424 -->\n<g id=\"node25\" class=\"node\">\n<title>187651236017424</title>\n<g id=\"a_node25\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"397,-2560.98 397,-2575.98 934,-2575.98 934,-2560.98 397,-2560.98\"/>\n<text text-anchor=\"middle\" x=\"399.5\" y=\"-2564.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"402,-2560.98 402,-2575.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2564.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::Heartbeat*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"929,-2560.98 929,-2575.98 \"/>\n<text text-anchor=\"middle\" x=\"931.5\" y=\"-2564.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236017424 -->\n<g id=\"edge58\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236017424:in</title>\n<g id=\"a_edge58\"><a xlink:title=\"/api/external/set/command/local/heartbeat\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1634.47 50.56,-2513.57 89,-2551.48 99.99,-2562.32 339.78,-2546.36 390.23,-2555.23\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"388.95,-2558.49 399.5,-2559.48 391.87,-2552.13 388.95,-2558.49\"/>\n</a>\n</g>\n</g>\n<!-- 187651235894224 -->\n<g id=\"node27\" class=\"node\">\n<title>187651235894224</title>\n<g id=\"a_node27\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"339,-2526.98 339,-2541.98 992,-2541.98 992,-2526.98 339,-2526.98\"/>\n<text text-anchor=\"middle\" x=\"341.5\" y=\"-2530.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"344,-2526.98 344,-2541.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2530.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::ControlCommandStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"987,-2526.98 987,-2541.98 \"/>\n<text text-anchor=\"middle\" x=\"989.5\" y=\"-2530.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651235894224 -->\n<g id=\"edge70\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651235894224:in</title>\n<g id=\"a_edge70\"><a xlink:title=\"/api/external/set/command/local/control\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1632.58 51.99,-2480.82 89,-2517.48 97.78,-2526.18 287.01,-2514.87 331.98,-2521.65\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"330.92,-2524.99 341.5,-2525.48 333.53,-2518.5 330.92,-2524.99\"/>\n</a>\n</g>\n</g>\n<!-- 187651236076832 -->\n<g id=\"node28\" class=\"node\">\n<title>187651236076832</title>\n<g id=\"a_node28\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"362,-2492.98 362,-2507.98 969,-2507.98 969,-2492.98 362,-2492.98\"/>\n<text text-anchor=\"middle\" x=\"364.5\" y=\"-2496.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"367,-2492.98 367,-2507.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2496.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::TurnSignalStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"964,-2492.98 964,-2507.98 \"/>\n<text text-anchor=\"middle\" x=\"966.5\" y=\"-2496.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236076832 -->\n<g id=\"edge64\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236076832:in</title>\n<g id=\"a_edge64\"><a xlink:title=\"/api/external/set/command/remote/turn_signal\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1630.7 53.25,-2448.22 89,-2483.48 98.67,-2493.02 307.81,-2479.89 355.07,-2487.47\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"353.93,-2490.79 364.5,-2491.48 356.67,-2484.35 353.93,-2490.79\"/>\n</a>\n</g>\n</g>\n<!-- 187651236049552 -->\n<g id=\"node29\" class=\"node\">\n<title>187651236049552</title>\n<g id=\"a_node29\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"339,-2458.98 339,-2473.98 992,-2473.98 992,-2458.98 339,-2458.98\"/>\n<text text-anchor=\"middle\" x=\"341.5\" y=\"-2462.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"344,-2458.98 344,-2473.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2462.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::ControlCommandStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"987,-2458.98 987,-2473.98 \"/>\n<text text-anchor=\"middle\" x=\"989.5\" y=\"-2462.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236049552 -->\n<g id=\"edge79\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236049552:in</title>\n<g id=\"a_edge79\"><a xlink:title=\"/api/external/set/command/remote/control\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1628.81 54.61,-2415.53 89,-2449.48 97.8,-2458.17 287.01,-2446.87 331.98,-2453.65\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"330.92,-2456.99 341.5,-2457.48 333.53,-2450.5 330.92,-2456.99\"/>\n</a>\n</g>\n</g>\n<!-- 187651236075584 -->\n<g id=\"node30\" class=\"node\">\n<title>187651236075584</title>\n<g id=\"a_node30\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"367,-2424.98 367,-2439.98 964,-2439.98 964,-2424.98 367,-2424.98\"/>\n<text text-anchor=\"middle\" x=\"369.5\" y=\"-2428.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"372,-2424.98 372,-2439.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2428.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::GearShiftStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"959,-2424.98 959,-2439.98 \"/>\n<text text-anchor=\"middle\" x=\"961.5\" y=\"-2428.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236075584 -->\n<g id=\"edge81\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236075584:in</title>\n<g id=\"a_edge81\"><a xlink:title=\"/api/external/set/command/remote/shift\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1627.2 55.39,-2388.04 89,-2420.48 91.48,-2422.88 309.15,-2420.33 359.28,-2422.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"359.19,-2425.92 369.5,-2423.48 359.92,-2418.96 359.19,-2425.92\"/>\n</a>\n</g>\n</g>\n<!-- 187651236009840 -->\n<g id=\"node31\" class=\"node\">\n<title>187651236009840</title>\n<g id=\"a_node31\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"367,-2696.98 367,-2711.98 964,-2711.98 964,-2696.98 367,-2696.98\"/>\n<text text-anchor=\"middle\" x=\"369.5\" y=\"-2700.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"372,-2696.98 372,-2711.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2700.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::GearShiftStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"959,-2696.98 959,-2711.98 \"/>\n<text text-anchor=\"middle\" x=\"961.5\" y=\"-2700.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236009840 -->\n<g id=\"edge61\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236009840:in</title>\n<g id=\"a_edge61\"><a xlink:title=\"/api/external/set/command/local/shift\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1611.25 67.18,-2665.79 89,-2687.48 98.83,-2697.25 312.71,-2683.66 360.21,-2691.46\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"358.93,-2694.72 369.5,-2695.48 361.72,-2688.3 358.93,-2694.72\"/>\n</a>\n</g>\n</g>\n<!-- 187651236084304 -->\n<g id=\"node32\" class=\"node\">\n<title>187651236084304</title>\n<g id=\"a_node32\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"397,-2662.98 397,-2677.98 934,-2677.98 934,-2662.98 397,-2662.98\"/>\n<text text-anchor=\"middle\" x=\"399.5\" y=\"-2666.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"402,-2662.98 402,-2677.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2666.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::Heartbeat*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"929,-2662.98 929,-2677.98 \"/>\n<text text-anchor=\"middle\" x=\"931.5\" y=\"-2666.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236084304 -->\n<g id=\"edge86\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236084304:in</title>\n<g id=\"a_edge86\"><a xlink:title=\"/api/external/set/command/remote/heartbeat\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1610.31 67.8,-2632.5 89,-2653.48 99.97,-2664.34 339.77,-2648.37 390.23,-2657.23\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"388.95,-2660.49 399.5,-2661.48 391.87,-2654.13 388.95,-2660.49\"/>\n</a>\n</g>\n</g>\n<!-- 187650725684000 -->\n<g id=\"node35\" class=\"node\">\n<title>187650725684000</title>\n<g id=\"a_node35\"><a xlink:title=\"1µs, 9µs, 567µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1414.5,-1445.98 1414.5,-1460.98 1851.5,-1460.98 1851.5,-1445.98 1414.5,-1445.98\"/>\n<text text-anchor=\"middle\" x=\"1417\" y=\"-1449.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1419.5,-1445.98 1419.5,-1460.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1449.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ScenarioSelectorNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1846.5,-1445.98 1846.5,-1460.98 \"/>\n<text text-anchor=\"middle\" x=\"1849\" y=\"-1449.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650725684000 -->\n<g id=\"edge45\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650725684000:in</title>\n<g id=\"a_edge45\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C109.11,-1571.48 44.02,-1484.03 89,-1450.48 204.51,-1364.34 1222.85,-1449.83 1402.81,-1453.37\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1402.96,-1456.87 1413,-1453.48 1403.04,-1449.87 1402.96,-1456.87\"/>\n</a>\n</g>\n</g>\n<!-- 187651290507760 -->\n<g id=\"node39\" class=\"node\">\n<title>187651290507760</title>\n<g id=\"a_node39\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"350,-1705.98 350,-1720.98 981,-1720.98 981,-1705.98 350,-1705.98\"/>\n<text text-anchor=\"middle\" x=\"352.5\" y=\"-1709.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"355,-1705.98 355,-1720.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1709.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimit*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"976,-1705.98 976,-1720.98 \"/>\n<text text-anchor=\"middle\" x=\"978.5\" y=\"-1709.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651290507760 -->\n<g id=\"edge40\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651290507760:in</title>\n<g id=\"a_edge40\"><a xlink:title=\"/planning/scenario_planning/max_velocity_default\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C110.81,-1571.48 43.34,-1661.02 89,-1696.48 99.23,-1704.43 297.63,-1693.11 343.22,-1700.54\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"341.93,-1703.8 352.5,-1704.48 344.66,-1697.35 341.93,-1703.8\"/>\n</a>\n</g>\n</g>\n<!-- 187651235284384 -->\n<g id=\"node43\" class=\"node\">\n<title>187651235284384</title>\n<g id=\"a_node43\"><a xlink:title=\"1µs, 8µs, 499µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3095,-1601.98 3095,-1616.98 3679,-1616.98 3679,-1601.98 3095,-1601.98\"/>\n<text text-anchor=\"middle\" x=\"3097.5\" y=\"-1605.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3100,-1601.98 3100,-1616.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1605.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (freespace_planner::FreespacePlannerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3674,-1601.98 3674,-1616.98 \"/>\n<text text-anchor=\"middle\" x=\"3676.5\" y=\"-1605.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651235284384 -->\n<g id=\"edge55\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651235284384:in</title>\n<g id=\"a_edge55\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1612.47 66,-2709.24 89,-2731.48 135.04,-2776.01 1178.15,-2736.63 1242,-2731.48 1576.8,-2704.51 1657.99,-2673.07 1988,-2610.48 2378.56,-2536.41 2571.12,-2691.42 2862,-2420.48 2995.51,-2296.13 3093.5,-1821.3 3096.91,-1628.56\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3100.41,-1628.51 3097,-1618.48 3093.41,-1628.45 3100.41,-1628.51\"/>\n</a>\n</g>\n</g>\n<!-- 187651234414432 -->\n<g id=\"node47\" class=\"node\">\n<title>187651234414432</title>\n<g id=\"a_node47\"><a xlink:title=\"2µs, 5µs, 163µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2128.5,-1689.98 2128.5,-1704.98 2757.5,-1704.98 2757.5,-1689.98 2128.5,-1689.98\"/>\n<text text-anchor=\"middle\" x=\"2131\" y=\"-1693.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2133.5,-1689.98 2133.5,-1704.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1693.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (CostmapGenerator::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2752.5,-1689.98 2752.5,-1704.98 \"/>\n<text text-anchor=\"middle\" x=\"2755\" y=\"-1693.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651234414432 -->\n<g id=\"edge75\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651234414432:in</title>\n<g id=\"a_edge75\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C185.14,-1571.48 1134.91,-1518.08 1242,-1595.48 1280.96,-1623.64 1238.76,-1669.72 1278,-1697.48 1352.68,-1750.32 1992.19,-1700.68 2116.86,-1697.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2117.05,-1701.13 2127,-1697.48 2116.95,-1694.13 2117.05,-1701.13\"/>\n</a>\n</g>\n</g>\n<!-- 187651234424704 -->\n<g id=\"node49\" class=\"node\">\n<title>187651234424704</title>\n<g id=\"a_node49\"><a xlink:title=\"1µs, 7µs, 551µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2217,-1723.98 2217,-1738.98 2669,-1738.98 2669,-1723.98 2217,-1723.98\"/>\n<text text-anchor=\"middle\" x=\"2219.5\" y=\"-1727.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2222,-1723.98 2222,-1738.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1727.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (CostmapGenerator::?)(sensor_msgs::msg::PointCloud2*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2664,-1723.98 2664,-1738.98 \"/>\n<text text-anchor=\"middle\" x=\"2666.5\" y=\"-1727.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651234424704 -->\n<g id=\"edge84\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651234424704:in</title>\n<g id=\"a_edge84\"><a xlink:title=\"/perception/obstacle_segmentation/pointcloud\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C70.69,-1571.48 71.81,-1584.28 89,-1588.48 213.53,-1618.97 1137.26,-1559.55 1242,-1633.48 1277.2,-1658.33 1242.43,-1699.18 1278,-1723.48 1447.42,-1839.25 1990.22,-1734.85 2205.98,-1731.56\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2206.03,-1735.06 2216,-1731.48 2205.97,-1728.06 2206.03,-1735.06\"/>\n</a>\n</g>\n</g>\n<!-- 187651235237984 -->\n<g id=\"node52\" class=\"node\">\n<title>187651235237984</title>\n<g id=\"a_node52\"><a xlink:title=\"2µs, 4µs, 351µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2973.5,-1010.98 2973.5,-1025.98 3800.5,-1025.98 3800.5,-1010.98 2973.5,-1010.98\"/>\n<text text-anchor=\"middle\" x=\"2976\" y=\"-1014.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2978.5,-1010.98 2978.5,-1025.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1014.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3795.5,-1010.98 3795.5,-1025.98 \"/>\n<text text-anchor=\"middle\" x=\"3798\" y=\"-1014.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651235237984 -->\n<g id=\"edge49\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651235237984:in</title>\n<g id=\"a_edge49\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1526.81 63.03,-945.94 89,-921.48 182.26,-833.65 1113.9,-919.85 1242,-921.48 1573.64,-925.71 1656.79,-923.15 1988,-940.48 2422.68,-963.23 2531.6,-1017.62 2961.78,-1018.47\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2962,-1021.97 2972,-1018.48 2962,-1014.97 2962,-1021.97\"/>\n</a>\n</g>\n</g>\n<!-- 187651239922832 -->\n<g id=\"node68\" class=\"node\">\n<title>187651239922832</title>\n<g id=\"a_node68\"><a xlink:title=\"1µs, 2µs, 235µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2157,-269.98 2157,-284.98 2729,-284.98 2729,-269.98 2157,-269.98\"/>\n<text text-anchor=\"middle\" x=\"2159.5\" y=\"-273.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2162,-269.98 2162,-284.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-273.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::SteeringReport*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2724,-269.98 2724,-284.98 \"/>\n<text text-anchor=\"middle\" x=\"2726.5\" y=\"-273.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651239922832 -->\n<g id=\"edge89\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651239922832:in</title>\n<g id=\"a_edge89\"><a xlink:title=\"/vehicle/status/steering_status\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1528.19 64.67,-352.65 89,-328.48 168.7,-249.3 1959.79,-276.22 2145.92,-277.44\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2145.99,-280.94 2156,-277.48 2146.01,-273.94 2145.99,-280.94\"/>\n</a>\n</g>\n</g>\n<!-- 187651239912896 -->\n<g id=\"node72\" class=\"node\">\n<title>187651239912896</title>\n<g id=\"a_node72\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2211,-235.98 2211,-250.98 2675,-250.98 2675,-235.98 2211,-235.98\"/>\n<text text-anchor=\"middle\" x=\"2213.5\" y=\"-239.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2216,-235.98 2216,-250.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-239.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(tier4_control_msgs::msg::GateMode*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2670,-235.98 2670,-250.98 \"/>\n<text text-anchor=\"middle\" x=\"2672.5\" y=\"-239.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651239912896 -->\n<g id=\"edge59\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651239912896:in</title>\n<g id=\"a_edge59\"><a xlink:title=\"/control/gate_mode_cmd\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1526.52 63.34,-293.68 89,-268.48 171.27,-187.68 2010.54,-241.07 2199.95,-243.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2199.97,-246.91 2210,-243.48 2200.03,-239.91 2199.97,-246.91\"/>\n</a>\n</g>\n</g>\n<!-- 187651170628208 -->\n<g id=\"node75\" class=\"node\">\n<title>187651170628208</title>\n<g id=\"a_node75\"><a xlink:title=\"2µs, 7µs, 371µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1399,-1560.98 1399,-1575.98 1867,-1575.98 1867,-1560.98 1399,-1560.98\"/>\n<text text-anchor=\"middle\" x=\"1401.5\" y=\"-1564.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1404,-1560.98 1404,-1575.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1564.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ObstacleAvoidancePlanner::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1862,-1560.98 1862,-1575.98 \"/>\n<text text-anchor=\"middle\" x=\"1864.5\" y=\"-1564.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651170628208 -->\n<g id=\"edge47\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651170628208:in</title>\n<g id=\"a_edge47\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C96.08,-1571.48 53.33,-1505.64 89,-1481.48 142.04,-1445.57 1187.78,-1447.37 1242,-1481.48 1273.29,-1501.17 1247.73,-1535.26 1278,-1556.48 1318.97,-1585.21 1341.32,-1570.76 1387.72,-1568.71\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1388.08,-1572.2 1398,-1568.48 1387.92,-1565.21 1388.08,-1572.2\"/>\n</a>\n</g>\n</g>\n<!-- 187651170706592 -->\n<g id=\"node76\" class=\"node\">\n<title>187651170706592</title>\n<g id=\"a_node76\"><a xlink:title=\"1µs, 6µs, 52µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1291.5,-1628.98 1291.5,-1643.98 1974.5,-1643.98 1974.5,-1628.98 1291.5,-1628.98\"/>\n<text text-anchor=\"middle\" x=\"1294\" y=\"-1632.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1296.5,-1628.98 1296.5,-1643.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1632.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ObstacleAvoidancePlanner::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1969.5,-1628.98 1969.5,-1643.98 \"/>\n<text text-anchor=\"middle\" x=\"1972\" y=\"-1632.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651170706592 -->\n<g id=\"edge71\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651170706592:in</title>\n<g id=\"a_edge71\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C70.17,-1571.48 72.13,-1560.65 89,-1557.48 214.91,-1533.86 1130.97,-1493.56 1242,-1557.48 1274.13,-1575.98 1253.91,-1625.42 1279.84,-1634.9\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1279.58,-1638.4 1290,-1636.48 1280.66,-1631.49 1279.58,-1638.4\"/>\n</a>\n</g>\n</g>\n<!-- 187651170795920 -->\n<g id=\"node77\" class=\"node\">\n<title>187651170795920</title>\n<g id=\"a_node77\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1335,-1594.98 1335,-1609.98 1931,-1609.98 1931,-1594.98 1335,-1594.98\"/>\n<text text-anchor=\"middle\" x=\"1337.5\" y=\"-1598.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1340,-1594.98 1340,-1609.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1598.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ObstacleAvoidancePlanner::?)(tier4_planning_msgs::msg::EnableAvoidance*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1926,-1594.98 1926,-1609.98 \"/>\n<text text-anchor=\"middle\" x=\"1928.5\" y=\"-1598.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651170795920 -->\n<g id=\"edge62\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651170795920:in</title>\n<g id=\"a_edge62\"><a xlink:title=\"/planning/scenario_planning/lane_driving/obstacle_avoidance_approval\">\n<path fill=\"none\" stroke=\"black\" d=\"M53,-1571.48C81.11,-1571.48 64.1,-1532.53 89,-1519.48 145.74,-1489.75 1186.92,-1486.79 1242,-1519.48 1270.73,-1536.54 1252.08,-1564.39 1278,-1585.48 1295.34,-1599.59 1305.02,-1602.01 1323.91,-1602.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1323.97,-1605.91 1334,-1602.48 1324.03,-1598.91 1323.97,-1605.91\"/>\n</a>\n</g>\n</g>\n<!-- 187650227061536 -->\n<g id=\"node81\" class=\"node\">\n<title>187650227061536</title>\n<g id=\"a_node81\"><a xlink:title=\"1µs, 5µs, 350µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3044,-429.98 3044,-444.98 3730,-444.98 3730,-429.98 3044,-429.98\"/>\n<text text-anchor=\"middle\" x=\"3046.5\" y=\"-433.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3049,-429.98 3049,-444.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-433.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareStateMonitorNode::?)(autoware_auto_vehicle_msgs::msg::ControlModeReport*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3725,-429.98 3725,-444.98 \"/>\n<text text-anchor=\"middle\" x=\"3727.5\" y=\"-433.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650227061536 -->\n<g id=\"edge68\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650227061536:in</title>\n<g id=\"a_edge68\"><a xlink:title=\"/vehicle/status/control_mode\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1524.16 61.53,-210.2 89,-183.48 144.22,-129.78 2803.65,-138.2 2862,-188.48 2941.04,-256.6 2820.62,-350.48 2898,-420.48 2908.35,-429.85 3007.5,-417.25 3037.46,-423.23\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3035.65,-426.22 3046,-428.48 3039.32,-420.26 3035.65,-426.22\"/>\n</a>\n</g>\n</g>\n<!-- 187650227086464 -->\n<g id=\"node82\" class=\"node\">\n<title>187650227086464</title>\n<g id=\"a_node82\"><a xlink:title=\"2µs, 7µs, 485µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3147.5,-395.98 3147.5,-410.98 3626.5,-410.98 3626.5,-395.98 3147.5,-395.98\"/>\n<text text-anchor=\"middle\" x=\"3150\" y=\"-399.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3152.5,-395.98 3152.5,-410.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-399.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareStateMonitorNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3621.5,-395.98 3621.5,-410.98 \"/>\n<text text-anchor=\"middle\" x=\"3624\" y=\"-399.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650227086464 -->\n<g id=\"edge44\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650227086464:in</title>\n<g id=\"a_edge44\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1523.11 60.78,-172.95 89,-145.48 144.2,-91.76 2801.53,-99.77 2862,-147.48 2915.48,-189.68 2853.16,-245.2 2898,-296.48 2974.71,-384.21 3139.62,-280.95 3149.53,-384.2\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3146.05,-384.65 3150,-394.48 3153.04,-384.33 3146.05,-384.65\"/>\n</a>\n</g>\n</g>\n<!-- 187651234295632 -->\n<g id=\"node83\" class=\"node\">\n<title>187651234295632</title>\n<g id=\"a_node83\"><a xlink:title=\"1µs, 3µs, 263µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2905,-876.98 2905,-891.98 3869,-891.98 3869,-876.98 2905,-876.98\"/>\n<text text-anchor=\"middle\" x=\"2907.5\" y=\"-880.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2910,-876.98 2910,-891.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-880.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(autoware_auto_vehicle_msgs::msg::SteeringReport*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3864,-876.98 3864,-891.98 \"/>\n<text text-anchor=\"middle\" x=\"3866.5\" y=\"-880.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651234295632 -->\n<g id=\"edge88\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651234295632:in</title>\n<g id=\"a_edge88\"><a xlink:title=\"/vehicle/status/steering_status\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1524.53 61.42,-906.55 89,-880.48 135.55,-836.48 1177.94,-880.41 1242,-880.48 1977.24,-881.37 2163.61,-884.45 2893.76,-884.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2894,-887.98 2904,-884.48 2894,-880.98 2894,-887.98\"/>\n</a>\n</g>\n</g>\n<!-- 187651234414560 -->\n<g id=\"node86\" class=\"node\">\n<title>187651234414560</title>\n<g id=\"a_node86\"><a xlink:title=\"1µs, 4µs, 317µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2993,-842.98 2993,-857.98 3781,-857.98 3781,-842.98 2993,-842.98\"/>\n<text text-anchor=\"middle\" x=\"2995.5\" y=\"-846.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2998,-842.98 2998,-857.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-846.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3776,-842.98 3776,-857.98 \"/>\n<text text-anchor=\"middle\" x=\"3778.5\" y=\"-846.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651234414560 -->\n<g id=\"edge48\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651234414560:in</title>\n<g id=\"a_edge48\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1523.2 60.51,-883.52 89,-856.48 146.12,-802.28 2783.29,-848.22 2981.98,-850.4\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2981.97,-853.9 2992,-850.48 2982.03,-846.9 2981.97,-853.9\"/>\n</a>\n</g>\n</g>\n<!-- 187651236518192 -->\n<g id=\"node89\" class=\"node\">\n<title>187651236518192</title>\n<g id=\"a_node89\"><a xlink:title=\"1µs, 3µs, 637µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3055.5,-151.98 3055.5,-166.98 3718.5,-166.98 3718.5,-151.98 3055.5,-151.98\"/>\n<text text-anchor=\"middle\" x=\"3058\" y=\"-155.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3060.5,-151.98 3060.5,-166.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-155.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (external_cmd_converter::ExternalCmdConverterNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3713.5,-151.98 3713.5,-166.98 \"/>\n<text text-anchor=\"middle\" x=\"3716\" y=\"-155.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651236518192 -->\n<g id=\"edge51\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651236518192:in</title>\n<g id=\"a_edge51\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1522.05 60.04,-135.69 89,-107.48 199.37,0 2718.88,-51.49 2862,-108.48 2882.45,-116.63 2878.02,-133.26 2898,-142.48 2958.1,-170.24 2981.82,-160.62 3043.73,-159.57\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3044.03,-163.07 3054,-159.48 3043.97,-156.07 3044.03,-163.07\"/>\n</a>\n</g>\n</g>\n<!-- 187650829931008 -->\n<g id=\"node97\" class=\"node\">\n<title>187650829931008</title>\n<g id=\"a_node97\"><a xlink:title=\"2µs, 7µs, 421µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1424.5,-507.98 1424.5,-522.98 1841.5,-522.98 1841.5,-507.98 1424.5,-507.98\"/>\n<text text-anchor=\"middle\" x=\"1427\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1429.5,-507.98 1429.5,-522.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (EmergencyHandler::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1836.5,-507.98 1836.5,-522.98 \"/>\n<text text-anchor=\"middle\" x=\"1839\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650829931008 -->\n<g id=\"edge43\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650829931008:in</title>\n<g id=\"a_edge43\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1511.16 53.65,-676.69 89,-639.48 138.67,-587.21 1274.18,-519.85 1412.77,-515.69\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1413.07,-519.18 1423,-515.48 1412.93,-512.18 1413.07,-519.18\"/>\n</a>\n</g>\n</g>\n<!-- 187650830008528 -->\n<g id=\"node98\" class=\"node\">\n<title>187650830008528</title>\n<g id=\"a_node98\"><a xlink:title=\"1µs, 4µs, 519µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1321,-473.98 1321,-488.98 1945,-488.98 1945,-473.98 1321,-473.98\"/>\n<text text-anchor=\"middle\" x=\"1323.5\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1326,-473.98 1326,-488.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (EmergencyHandler::?)(autoware_auto_vehicle_msgs::msg::ControlModeReport*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1940,-473.98 1940,-488.98 \"/>\n<text text-anchor=\"middle\" x=\"1942.5\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650830008528 -->\n<g id=\"edge67\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650830008528:in</title>\n<g id=\"a_edge67\"><a xlink:title=\"/vehicle/status/control_mode\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1533.52 68.47,-540.91 89,-520.48 280.67,-329.82 1027.76,-477.77 1309.76,-481.42\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1309.98,-484.92 1320,-481.48 1310.02,-477.92 1309.98,-484.92\"/>\n</a>\n</g>\n</g>\n<!-- 187651612752912 -->\n<g id=\"node102\" class=\"node\">\n<title>187651612752912</title>\n<g id=\"a_node102\"><a xlink:title=\"4233µs, 4233µs, 4233µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"374,-1187.98 374,-1202.98 957,-1202.98 957,-1187.98 374,-1187.98\"/>\n<text text-anchor=\"middle\" x=\"376.5\" y=\"-1191.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"379,-1187.98 379,-1202.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1191.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (mission_planner::MissionPlanner::?)(geometry_msgs::msg::PoseStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"952,-1187.98 952,-1202.98 \"/>\n<text text-anchor=\"middle\" x=\"954.5\" y=\"-1191.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651612752912 -->\n<g id=\"edge80\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651612752912:in</title>\n<g id=\"a_edge80\"><a xlink:title=\"/planning/mission_planning/goal\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1525.35 62.41,-1256.41 89,-1230.48 132.24,-1188.32 348.86,-1259.35 374.1,-1214.3\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"377.52,-1215.03 376.5,-1204.48 370.73,-1213.37 377.52,-1215.03\"/>\n</a>\n</g>\n</g>\n<!-- 187651612765392 -->\n<g id=\"node104\" class=\"node\">\n<title>187651612765392</title>\n<g id=\"a_node104\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"374,-1119.98 374,-1134.98 957,-1134.98 957,-1119.98 374,-1119.98\"/>\n<text text-anchor=\"middle\" x=\"376.5\" y=\"-1123.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"379,-1119.98 379,-1134.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1123.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (mission_planner::MissionPlanner::?)(geometry_msgs::msg::PoseStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"952,-1119.98 952,-1134.98 \"/>\n<text text-anchor=\"middle\" x=\"954.5\" y=\"-1123.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651612765392 -->\n<g id=\"edge57\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651612765392:in</title>\n<g id=\"a_edge57\"><a xlink:title=\"/planning/mission_planning/checkpoint\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1515.84 54.98,-1176.39 89,-1144.48 99.38,-1134.75 319.32,-1148.68 367.31,-1140.56\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"368.78,-1143.74 376.5,-1136.48 365.94,-1137.34 368.78,-1143.74\"/>\n</a>\n</g>\n</g>\n<!-- 187650864479216 -->\n<g id=\"node108\" class=\"node\">\n<title>187650864479216</title>\n<g id=\"a_node108\"><a xlink:title=\"2µs, 7µs, 383µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"340.5,-677.98 340.5,-692.98 990.5,-692.98 990.5,-677.98 340.5,-677.98\"/>\n<text text-anchor=\"middle\" x=\"343\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"345.5,-677.98 345.5,-692.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareErrorMonitor::?)(autoware_auto_vehicle_msgs::msg::ControlModeReport*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"985.5,-677.98 985.5,-692.98 \"/>\n<text text-anchor=\"middle\" x=\"988\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187650864479216 -->\n<g id=\"edge66\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187650864479216:in</title>\n<g id=\"a_edge66\"><a xlink:title=\"/vehicle/status/control_mode\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1514.66 54.96,-736.08 89,-702.48 97.85,-693.75 288.64,-705.18 333.24,-698.29\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"334.58,-701.52 342.5,-694.48 331.92,-695.05 334.58,-701.52\"/>\n</a>\n</g>\n</g>\n<!-- 281472225979632 -->\n<g id=\"node110\" class=\"node\">\n<title>281472225979632</title>\n<g id=\"a_node110\"><a xlink:title=\"2µs, 5µs, 263µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"312,-970.98 312,-985.98 1019,-985.98 1019,-970.98 312,-970.98\"/>\n<text text-anchor=\"middle\" x=\"314.5\" y=\"-974.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"317,-970.98 317,-985.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-974.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1014,-970.98 1014,-985.98 \"/>\n<text text-anchor=\"middle\" x=\"1016.5\" y=\"-974.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281472225979632 -->\n<g id=\"edge53\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281472225979632:in</title>\n<g id=\"a_edge53\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1530.91 66.32,-1017.44 89,-995.48 96.86,-987.87 262.87,-997.01 304.9,-991.11\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"306.38,-994.29 314.5,-987.48 303.91,-987.74 306.38,-994.29\"/>\n</a>\n</g>\n</g>\n<!-- 281472225878608 -->\n<g id=\"node111\" class=\"node\">\n<title>281472225878608</title>\n<g id=\"a_node111\"><a xlink:title=\"3µs, 6µs, 197µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"293.5,-1072.98 293.5,-1087.98 1037.5,-1087.98 1037.5,-1072.98 293.5,-1072.98\"/>\n<text text-anchor=\"middle\" x=\"296\" y=\"-1076.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"298.5,-1072.98 298.5,-1087.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1076.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(sensor_msgs::msg::PointCloud2*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1032.5,-1072.98 1032.5,-1087.98 \"/>\n<text text-anchor=\"middle\" x=\"1035\" y=\"-1076.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281472225878608 -->\n<g id=\"edge82\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281472225878608:in</title>\n<g id=\"a_edge82\"><a xlink:title=\"/perception/obstacle_segmentation/pointcloud\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1512.63 54.45,-1151.42 89,-1115.48 118.43,-1084.88 267.84,-1127.53 292.15,-1098.95\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"295.47,-1100.08 295.5,-1089.48 288.87,-1097.75 295.47,-1100.08\"/>\n</a>\n</g>\n</g>\n<!-- 281472225914304 -->\n<g id=\"node113\" class=\"node\">\n<title>281472225914304</title>\n<g id=\"a_node113\"><a xlink:title=\"2µs, 5µs, 26µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"205,-1038.98 205,-1053.98 1126,-1053.98 1126,-1038.98 205,-1038.98\"/>\n<text text-anchor=\"middle\" x=\"207.5\" y=\"-1042.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"210,-1038.98 210,-1053.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1042.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1121,-1038.98 1121,-1053.98 \"/>\n<text text-anchor=\"middle\" x=\"1123.5\" y=\"-1042.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281472225914304 -->\n<g id=\"edge73\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281472225914304:in</title>\n<g id=\"a_edge73\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1534.68 69.25,-1083.05 89,-1063.48 96.73,-1055.83 172.22,-1064.32 198.52,-1060.16\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"200.24,-1063.2 207.5,-1055.48 197.01,-1056.99 200.24,-1063.2\"/>\n</a>\n</g>\n</g>\n<!-- 187651237827456 -->\n<g id=\"node115\" class=\"node\">\n<title>187651237827456</title>\n<g id=\"a_node115\"><a xlink:title=\"1µs, 6µs, 308µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3056,-659.98 3056,-674.98 3718,-674.98 3718,-659.98 3056,-659.98\"/>\n<text text-anchor=\"middle\" x=\"3058.5\" y=\"-663.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3061,-659.98 3061,-674.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-663.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (lane_departure_checker::LaneDepartureCheckerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3713,-659.98 3713,-674.98 \"/>\n<text text-anchor=\"middle\" x=\"3715.5\" y=\"-663.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651237827456 -->\n<g id=\"edge52\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651237827456:in</title>\n<g id=\"a_edge52\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1525.22 62.27,-247.45 89,-221.48 144.24,-167.8 2805.49,-179.14 2862,-231.48 2930.56,-294.99 2830.75,-585.59 2898,-650.48 2908.91,-661.01 3017.26,-646.5 3049.19,-652.95\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3047.67,-656.13 3058,-658.48 3051.39,-650.2 3047.67,-656.13\"/>\n</a>\n</g>\n</g>\n<!-- 281471555072288 -->\n<g id=\"node121\" class=\"node\">\n<title>281471555072288</title>\n<g id=\"a_node121\"><a xlink:title=\"18µs, 31µs, 1114µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"349.5,-1302.98 349.5,-1317.98 981.5,-1317.98 981.5,-1302.98 349.5,-1302.98\"/>\n<text text-anchor=\"middle\" x=\"352\" y=\"-1306.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"354.5,-1302.98 354.5,-1317.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1306.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_planning::ObstacleStopPlannerNode::?)(sensor_msgs::msg::PointCloud2*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"976.5,-1302.98 976.5,-1317.98 \"/>\n<text text-anchor=\"middle\" x=\"979\" y=\"-1306.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471555072288 -->\n<g id=\"edge83\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471555072288:in</title>\n<g id=\"a_edge83\"><a xlink:title=\"/perception/obstacle_segmentation/pointcloud\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1536.02 69.1,-1344.92 89,-1327.48 98.71,-1318.98 296.73,-1330.68 342.23,-1323.39\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"343.64,-1326.59 351.5,-1319.48 340.93,-1320.14 343.64,-1326.59\"/>\n</a>\n</g>\n</g>\n<!-- 281471555215120 -->\n<g id=\"node122\" class=\"node\">\n<title>281471555215120</title>\n<g id=\"a_node122\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"299,-1234.98 299,-1249.98 1032,-1249.98 1032,-1234.98 299,-1234.98\"/>\n<text text-anchor=\"middle\" x=\"301.5\" y=\"-1238.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"304,-1234.98 304,-1249.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1238.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_planning::ObstacleStopPlannerNode::?)(tier4_planning_msgs::msg::ExpandStopRange*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1027,-1234.98 1027,-1249.98 \"/>\n<text text-anchor=\"middle\" x=\"1029.5\" y=\"-1238.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471555215120 -->\n<g id=\"edge41\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471555215120:in</title>\n<g id=\"a_edge41\"><a xlink:title=\"/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/input/expand_stop_range\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1528.55 63.96,-1282.39 89,-1259.48 96.58,-1252.55 251.51,-1260.55 291.92,-1255.01\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"293.32,-1258.22 301.5,-1251.48 290.91,-1251.65 293.32,-1258.22\"/>\n</a>\n</g>\n</g>\n<!-- 281471555234272 -->\n<g id=\"node123\" class=\"node\">\n<title>281471555234272</title>\n<g id=\"a_node123\"><a xlink:title=\"3µs, 8µs, 359µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"368.5,-1336.98 368.5,-1351.98 962.5,-1351.98 962.5,-1336.98 368.5,-1336.98\"/>\n<text text-anchor=\"middle\" x=\"371\" y=\"-1340.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"373.5,-1336.98 373.5,-1351.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1340.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_planning::ObstacleStopPlannerNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"957.5,-1336.98 957.5,-1351.98 \"/>\n<text text-anchor=\"middle\" x=\"960\" y=\"-1340.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471555234272 -->\n<g id=\"edge54\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471555234272:in</title>\n<g id=\"a_edge54\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1517 54.36,-1390.95 89,-1361.48 99.59,-1352.47 313.67,-1365.52 361.2,-1357.55\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"362.74,-1360.7 370.5,-1353.48 359.94,-1354.28 362.74,-1360.7\"/>\n</a>\n</g>\n</g>\n<!-- 281471555182320 -->\n<g id=\"node124\" class=\"node\">\n<title>281471555182320</title>\n<g id=\"a_node124\"><a xlink:title=\"2µs, 6µs, 146µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"261,-1268.98 261,-1283.98 1070,-1283.98 1070,-1268.98 261,-1268.98\"/>\n<text text-anchor=\"middle\" x=\"263.5\" y=\"-1272.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"266,-1268.98 266,-1283.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1272.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_perception_msgs::msg::PredictedObjects*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1065,-1268.98 1065,-1283.98 \"/>\n<text text-anchor=\"middle\" x=\"1067.5\" y=\"-1272.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;281471555182320 -->\n<g id=\"edge74\" class=\"edge\">\n<title>INPUT:out&#45;&gt;281471555182320:in</title>\n<g id=\"a_edge74\"><a xlink:title=\"/perception/object_recognition/objects\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1532.29 66.65,-1313.78 89,-1293.48 101.35,-1282.27 221.35,-1298.76 254.85,-1291.3\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"257.15,-1293.97 263.5,-1285.48 253.25,-1288.16 257.15,-1293.97\"/>\n</a>\n</g>\n</g>\n<!-- 187651165425504 -->\n<g id=\"node129\" class=\"node\">\n<title>187651165425504</title>\n<g id=\"a_node129\"><a xlink:title=\"1µs, 7µs, 538µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2099.5,-1080.98 2099.5,-1095.98 2786.5,-1095.98 2786.5,-1080.98 2099.5,-1080.98\"/>\n<text text-anchor=\"middle\" x=\"2102\" y=\"-1084.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2104.5,-1080.98 2104.5,-1095.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1084.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(nav_msgs::msg::Odometry*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2781.5,-1080.98 2781.5,-1095.98 \"/>\n<text text-anchor=\"middle\" x=\"2784\" y=\"-1084.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651165425504 -->\n<g id=\"edge46\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651165425504:in</title>\n<g id=\"a_edge46\"><a xlink:title=\"/localization/kinematic_state\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1562.48C50.5,-1529.3 64.79,-989.18 89,-966.48 182.46,-878.86 1114,-961.09 1242,-966.48 1574.44,-980.5 1691.83,-877.84 1988,-1029.48 2009.88,-1040.69 2002.22,-1060.08 2024,-1071.48 2029.97,-1074.61 2073.37,-1072.47 2092.72,-1075.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2091.44,-1078.64 2102,-1079.48 2094.27,-1072.24 2091.44,-1078.64\"/>\n</a>\n</g>\n</g>\n<!-- 187651122540608 -->\n<g id=\"node131\" class=\"node\">\n<title>187651122540608</title>\n<g id=\"a_node131\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"359,-2773.98 359,-2788.98 972,-2788.98 972,-2773.98 359,-2773.98\"/>\n<text text-anchor=\"middle\" x=\"361.5\" y=\"-2777.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"364,-2773.98 364,-2788.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2777.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (robot_state_publisher::RobotStatePublisher::?)(sensor_msgs::msg::JointState*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"967,-2773.98 967,-2788.98 \"/>\n<text text-anchor=\"middle\" x=\"969.5\" y=\"-2777.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- INPUT&#45;&gt;187651122540608 -->\n<g id=\"edge92\" class=\"edge\">\n<title>INPUT:out&#45;&gt;187651122540608:in</title>\n<g id=\"a_edge92\"><a xlink:title=\"/joint_states\">\n<path fill=\"none\" stroke=\"black\" d=\"M50.5,-1580.48C50.5,-1613.25 66,-2736.14 89,-2759.48 108.11,-2778.88 312.84,-2749.45 354.23,-2765.25\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"351.94,-2767.91 361.5,-2772.48 356.88,-2762.95 351.94,-2767.91\"/>\n</a>\n</g>\n</g>\n<!-- OUTPUT -->\n<g id=\"node2\" class=\"node\">\n<title>OUTPUT</title>\n<polygon fill=\"none\" stroke=\"black\" points=\"3353,-1403.98 3353,-1418.98 3421,-1418.98 3421,-1403.98 3353,-1403.98\"/>\n<text text-anchor=\"middle\" x=\"3355.5\" y=\"-1407.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3358,-1403.98 3358,-1418.98 \"/>\n<text text-anchor=\"middle\" x=\"3389.5\" y=\"-1407.78\" font-family=\"Times,serif\" font-size=\"14.00\">OUTPUT</text>\n</g>\n<!-- 281471292182224 -->\n<g id=\"node4\" class=\"node\">\n<title>281471292182224</title>\n<g id=\"a_node4\"><a xlink:title=\"47µs, 17818µs, 40636µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"226.5,-2126.98 226.5,-2141.98 1104.5,-2141.98 1104.5,-2126.98 226.5,-2126.98\"/>\n<text text-anchor=\"middle\" x=\"229\" y=\"-2130.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"231.5,-2126.98 231.5,-2141.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2130.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg::PathWithLaneId*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1099.5,-2126.98 1099.5,-2141.98 \"/>\n<text text-anchor=\"middle\" x=\"1102\" y=\"-2130.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471292182224&#45;&gt;OUTPUT -->\n<g id=\"edge95\" class=\"edge\">\n<title>281471292182224:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge95\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/output/stop_reason\">\n<path fill=\"none\" stroke=\"black\" d=\"M1105.5,-2134.48C1203.59,-2134.48 2793.65,-2025.83 2862,-1955.48 2938.7,-1876.54 2820.82,-1539.96 2898,-1461.48 2966.91,-1391.41 3327.55,-1513.06 3353.52,-1430.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.02,-1430.88 3355,-1420.48 3350.1,-1429.88 3357.02,-1430.88\"/>\n</a>\n</g>\n</g>\n<!-- 187651170508848 -->\n<g id=\"node74\" class=\"node\">\n<title>187651170508848</title>\n<g id=\"a_node74\"><a xlink:title=\"320µs, 9659µs, 198049µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1344,-1662.98 1344,-1677.98 1922,-1677.98 1922,-1662.98 1344,-1662.98\"/>\n<text text-anchor=\"middle\" x=\"1346.5\" y=\"-1666.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1349,-1662.98 1349,-1677.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1666.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ObstacleAvoidancePlanner::?)(autoware_auto_planning_msgs::msg::Path*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1917,-1662.98 1917,-1677.98 \"/>\n<text text-anchor=\"middle\" x=\"1919.5\" y=\"-1666.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471292182224&#45;&gt;187651170508848 -->\n<g id=\"edge38\" class=\"edge\">\n<title>281471292182224:out&#45;&gt;187651170508848:in</title>\n<g id=\"a_edge38\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/path (2.76ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1102.5,-2125.48C1102.5,-2109.96 1230.1,-2127.46 1242,-2117.48 1278.32,-2087.05 1339.15,-1766.13 1345.47,-1689.86\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1348.98,-1689.65 1346,-1679.48 1341.99,-1689.29 1348.98,-1689.65\"/>\n</a>\n</g>\n</g>\n<!-- 281471292197968&#45;&gt;OUTPUT -->\n<g id=\"edge96\" class=\"edge\">\n<title>281471292197968:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge96\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/merge_from_private\">\n<path fill=\"none\" stroke=\"black\" d=\"M1009.5,-2032.48C1339.37,-2032.48 2699.08,-2035.51 2862,-1872.48 2926.81,-1807.63 2833.24,-1526.38 2898,-1461.48 2967.42,-1391.92 3327.59,-1513.09 3353.53,-1430.64\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.03,-1430.88 3355,-1420.48 3350.1,-1429.88 3357.03,-1430.88\"/>\n</a>\n</g>\n</g>\n<!-- 281471292814832&#45;&gt;OUTPUT -->\n<g id=\"edge108\" class=\"edge\">\n<title>281471292814832:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge108\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/virtual_traffic_light\">\n<path fill=\"none\" stroke=\"black\" d=\"M1028.5,-1896.48C1232.44,-1896.48 2713.8,-1951.58 2862,-1811.48 2918.82,-1757.77 2842.35,-1516.41 2898,-1461.48 2968.02,-1392.37 3328.36,-1513.38 3353.6,-1430.39\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.07,-1430.87 3355,-1420.48 3350.14,-1429.9 3357.07,-1430.87\"/>\n</a>\n</g>\n</g>\n<!-- 281471292201536&#45;&gt;OUTPUT -->\n<g id=\"edge97\" class=\"edge\">\n<title>281471292201536:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge97\"><a xlink:title=\"/planning/scenario_planning/status/stop_reasons\">\n<path fill=\"none\" stroke=\"black\" d=\"M1028.5,-1862.48C1139.59,-1862.48 1167.08,-1853.65 1278,-1847.48 1365.98,-1842.59 2797.66,-1826.69 2862,-1766.48 2961.67,-1673.22 2801.11,-1557.62 2898,-1461.48 3039.71,-1320.88 3145.44,-1408.46 3341.97,-1411.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.97,-1414.91 3352,-1411.48 3342.03,-1407.91 3341.97,-1414.91\"/>\n</a>\n</g>\n</g>\n<!-- 281471292201536&#45;&gt;187651170508848 -->\n<g id=\"edge39\" class=\"edge\">\n<title>281471292201536:out&#45;&gt;187651170508848:in</title>\n<g id=\"a_edge39\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/path (2.76ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1028.5,-1862.48C1123.69,-1862.48 1161.52,-1896.32 1242,-1845.48 1277,-1823.38 1295.14,-1693.3 1332.94,-1673.12\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1334.21,-1676.4 1343,-1670.48 1332.44,-1669.63 1334.21,-1676.4\"/>\n</a>\n</g>\n</g>\n<!-- 281471292318288 -->\n<g id=\"node14\" class=\"node\">\n<title>281471292318288</title>\n<g id=\"a_node14\"><a xlink:title=\"51720µs, 51720µs, 51720µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"239.5,-1752.98 239.5,-1767.98 1091.5,-1767.98 1091.5,-1752.98 239.5,-1752.98\"/>\n<text text-anchor=\"middle\" x=\"242\" y=\"-1756.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"244.5,-1752.98 244.5,-1767.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1756.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1086.5,-1752.98 1086.5,-1767.98 \"/>\n<text text-anchor=\"middle\" x=\"1089\" y=\"-1756.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220283472 -->\n<g id=\"node20\" class=\"node\">\n<title>281471220283472</title>\n<g id=\"a_node20\"><a xlink:title=\"2µs, 7µs, 571µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1278,-2173.98 1278,-2188.98 1988,-2188.98 1988,-2173.98 1278,-2173.98\"/>\n<text text-anchor=\"middle\" x=\"1280.5\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1283,-2173.98 1283,-2188.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(tier4_planning_msgs::msg::Approval*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1983,-2173.98 1983,-2188.98 \"/>\n<text text-anchor=\"middle\" x=\"1985.5\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220381760&#45;&gt;281471220283472 -->\n<g id=\"edge119\" class=\"edge\">\n<title>281471220381760:out&#45;&gt;281471220283472:in</title>\n<g id=\"a_edge119\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1059.5,-2249.48C1140.96,-2249.48 1171.49,-2273.28 1242,-2232.48 1262.45,-2220.65 1254.06,-2191.99 1268.25,-2183.74\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1269.05,-2187.15 1278,-2181.48 1267.47,-2180.33 1269.05,-2187.15\"/>\n</a>\n</g>\n</g>\n<!-- 281471221778768 -->\n<g id=\"node21\" class=\"node\">\n<title>281471221778768</title>\n<g id=\"a_node21\"><a xlink:title=\"10µs, 7327µs, 13565µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1411.5,-2258.98 1411.5,-2273.98 1854.5,-2273.98 1854.5,-2258.98 1411.5,-2258.98\"/>\n<text text-anchor=\"middle\" x=\"1414\" y=\"-2262.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1416.5,-2258.98 1416.5,-2273.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-2262.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (behavior_path_planner::BehaviorPathPlannerNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1849.5,-2258.98 1849.5,-2273.98 \"/>\n<text text-anchor=\"middle\" x=\"1852\" y=\"-2262.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220381760&#45;&gt;281471221778768 -->\n<g id=\"edge113\" class=\"edge\">\n<title>281471220381760:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge113\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1059.5,-2249.48C1211.96,-2249.48 1252.25,-2265.73 1399.67,-2266.46\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1399.99,-2269.96 1410,-2266.48 1400.01,-2262.96 1399.99,-2269.96\"/>\n</a>\n</g>\n</g>\n<!-- 281471220598896&#45;&gt;281471220283472 -->\n<g id=\"edge120\" class=\"edge\">\n<title>281471220598896:out&#45;&gt;281471220283472:in</title>\n<g id=\"a_edge120\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1002.5,-2283.48C1109.21,-2283.48 1155.18,-2328.53 1242,-2266.48 1272.12,-2244.96 1243.79,-2193.07 1268.11,-2183.14\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1268.72,-2186.59 1278,-2181.48 1267.56,-2179.69 1268.72,-2186.59\"/>\n</a>\n</g>\n</g>\n<!-- 281471220598896&#45;&gt;281471221778768 -->\n<g id=\"edge114\" class=\"edge\">\n<title>281471220598896:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge114\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1002.5,-2283.48C1180.32,-2283.48 1226.97,-2267.12 1399.79,-2266.5\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1400.01,-2270 1410,-2266.48 1399.99,-2263 1400.01,-2270\"/>\n</a>\n</g>\n</g>\n<!-- 281471220449136 -->\n<g id=\"node17\" class=\"node\">\n<title>281471220449136</title>\n<g id=\"a_node17\"><a xlink:title=\"48µs, 48µs, 48µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"254,-2309.98 254,-2324.98 1077,-2324.98 1077,-2309.98 254,-2309.98\"/>\n<text text-anchor=\"middle\" x=\"256.5\" y=\"-2313.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"259,-2309.98 259,-2324.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2313.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1072,-2309.98 1072,-2324.98 \"/>\n<text text-anchor=\"middle\" x=\"1074.5\" y=\"-2313.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220449136&#45;&gt;281471220283472 -->\n<g id=\"edge121\" class=\"edge\">\n<title>281471220449136:out&#45;&gt;281471220283472:in</title>\n<g id=\"a_edge121\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1078.5,-2317.48C1151.56,-2317.48 1185.67,-2347.01 1242,-2300.48 1281.61,-2267.77 1230.93,-2193.03 1268,-2182.68\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1268.49,-2186.15 1278,-2181.48 1267.65,-2179.2 1268.49,-2186.15\"/>\n</a>\n</g>\n</g>\n<!-- 281471220449136&#45;&gt;281471221778768 -->\n<g id=\"edge115\" class=\"edge\">\n<title>281471220449136:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge115\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1078.5,-2317.48C1151.56,-2317.48 1169.78,-2311.52 1242,-2300.48 1313.78,-2289.51 1332.14,-2268.57 1399.67,-2266.63\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1400.05,-2270.12 1410,-2266.48 1399.95,-2263.12 1400.05,-2270.12\"/>\n</a>\n</g>\n</g>\n<!-- 281471220195376&#45;&gt;281471221778768 -->\n<g id=\"edge116\" class=\"edge\">\n<title>281471220195376:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge116\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M986.5,-2385.48C1100.31,-2385.48 1133.48,-2402.77 1242,-2368.48 1321.88,-2343.24 1322.72,-2272.61 1399.69,-2266.86\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1400.13,-2270.34 1410,-2266.48 1399.88,-2263.35 1400.13,-2270.34\"/>\n</a>\n</g>\n</g>\n<!-- 281471220214336&#45;&gt;281471221778768 -->\n<g id=\"edge117\" class=\"edge\">\n<title>281471220214336:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge117\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1093.5,-2351.48C1159.93,-2351.48 1177.62,-2350.87 1242,-2334.48 1316.71,-2315.46 1328.52,-2270.57 1400,-2266.74\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1400.09,-2270.24 1410,-2266.48 1399.91,-2263.25 1400.09,-2270.24\"/>\n</a>\n</g>\n</g>\n<!-- 281471220283472&#45;&gt;OUTPUT -->\n<g id=\"edge106\" class=\"edge\">\n<title>281471220283472:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge106\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array\">\n<path fill=\"none\" stroke=\"black\" d=\"M1988,-2181.48C2183.44,-2181.48 2727.57,-2225.35 2862,-2083.48 2957.23,-1982.98 2801.66,-1560.92 2898,-1461.48 2966.39,-1390.9 3327.51,-1513.02 3353.52,-1430.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.02,-1430.88 3355,-1420.48 3350.09,-1429.87 3357.02,-1430.88\"/>\n</a>\n</g>\n</g>\n<!-- 281471220283472&#45;&gt;281471292182224 -->\n<g id=\"edge23\" class=\"edge\">\n<title>281471220283472:out&#45;&gt;281471292182224:in</title>\n<g id=\"a_edge23\"><a xlink:title=\"/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id (0.52ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1986,-2172.48C1986,-2125.66 369.71,-2186.88 237.13,-2148.91\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"238.83,-2145.85 228.5,-2143.48 235.1,-2151.77 238.83,-2145.85\"/>\n</a>\n</g>\n</g>\n<!-- 187651239969968 -->\n<g id=\"node65\" class=\"node\">\n<title>187651239969968</title>\n<g id=\"a_node65\"><a xlink:title=\"1µs, 2µs, 49µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2128,-711.98 2128,-726.98 2758,-726.98 2758,-711.98 2128,-711.98\"/>\n<text text-anchor=\"middle\" x=\"2130.5\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2133,-711.98 2133,-726.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2753,-711.98 2753,-726.98 \"/>\n<text text-anchor=\"middle\" x=\"2755.5\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220283472&#45;&gt;187651239969968 -->\n<g id=\"edge24\" class=\"edge\">\n<title>281471220283472:out&#45;&gt;187651239969968:in</title>\n<g id=\"a_edge24\"><a xlink:title=\"/planning/hazard_lights_cmd (0.69ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1986,-2172.48C1986,-2132.58 1996.48,-765.38 2024,-736.48 2030.62,-729.53 2096.46,-736.39 2120.92,-732.87\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2122.52,-735.99 2130,-728.48 2119.47,-729.68 2122.52,-735.99\"/>\n</a>\n</g>\n</g>\n<!-- 187651239936720 -->\n<g id=\"node71\" class=\"node\">\n<title>187651239936720</title>\n<g id=\"a_node71\"><a xlink:title=\"2µs, 5µs, 531µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2123.5,-745.98 2123.5,-760.98 2762.5,-760.98 2762.5,-745.98 2123.5,-745.98\"/>\n<text text-anchor=\"middle\" x=\"2126\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2128.5,-745.98 2128.5,-760.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::TurnIndicatorsCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2757.5,-745.98 2757.5,-760.98 \"/>\n<text text-anchor=\"middle\" x=\"2760\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220283472&#45;&gt;187651239936720 -->\n<g id=\"edge22\" class=\"edge\">\n<title>281471220283472:out&#45;&gt;187651239936720:in</title>\n<g id=\"a_edge22\"><a xlink:title=\"/planning/turn_indicators_cmd (0.66ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1986,-2172.48C1986,-2133.52 1997.17,-798.73 2024,-770.48 2030.33,-763.82 2093.11,-770.13 2116.92,-766.79\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2118.46,-769.93 2126,-762.48 2115.46,-763.6 2118.46,-769.93\"/>\n</a>\n</g>\n</g>\n<!-- 281471221778768&#45;&gt;OUTPUT -->\n<g id=\"edge105\" class=\"edge\">\n<title>281471221778768:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge105\"><a xlink:title=\"/control/command/emergency_cmd\">\n<path fill=\"none\" stroke=\"black\" d=\"M1856,-2266.48C2306.12,-2266.48 2553.98,-2477.71 2862,-2149.48 2966.77,-2037.84 2791.78,-1571.73 2898,-1461.48 2966.19,-1390.71 3327.5,-1513.01 3353.52,-1430.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.02,-1430.88 3355,-1420.48 3350.09,-1429.87 3357.02,-1430.88\"/>\n</a>\n</g>\n</g>\n<!-- 187650829824912 -->\n<g id=\"node95\" class=\"node\">\n<title>187650829824912</title>\n<g id=\"a_node95\"><a xlink:title=\"1µs, 5µs, 209µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1289,-575.98 1289,-590.98 1977,-590.98 1977,-575.98 1289,-575.98\"/>\n<text text-anchor=\"middle\" x=\"1291.5\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1294,-575.98 1294,-590.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (EmergencyHandler::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1972,-575.98 1972,-590.98 \"/>\n<text text-anchor=\"middle\" x=\"1974.5\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471221778768&#45;&gt;187650829824912 -->\n<g id=\"edge37\" class=\"edge\">\n<title>281471221778768:out&#45;&gt;187650829824912:in</title>\n<g id=\"a_edge37\"><a xlink:title=\"/control/command/control_cmd (0.21ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1852,-2257.48C1852,-2125.06 1329.62,-2302.13 1260,-2189.48 1236.93,-2152.15 1237.64,-647.25 1260,-609.48 1261.3,-607.29 1273.95,-602.45 1282.68,-598.24\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1284.77,-601.05 1291,-592.48 1280.78,-595.29 1284.77,-601.05\"/>\n</a>\n</g>\n</g>\n<!-- 281471220400576 -->\n<g id=\"node22\" class=\"node\">\n<title>281471220400576</title>\n<g id=\"a_node22\"><a xlink:title=\"51209µs, 51209µs, 51209µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"263,-2207.98 263,-2222.98 1068,-2222.98 1068,-2207.98 263,-2207.98\"/>\n<text text-anchor=\"middle\" x=\"265.5\" y=\"-2211.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"268,-2207.98 268,-2222.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2211.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1063,-2207.98 1063,-2222.98 \"/>\n<text text-anchor=\"middle\" x=\"1065.5\" y=\"-2211.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220223648 -->\n<g id=\"node23\" class=\"node\">\n<title>281471220223648</title>\n<g id=\"a_node23\"><a xlink:title=\"4µs, 7µs, 126µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"89,-2173.98 89,-2188.98 1242,-2188.98 1242,-2173.98 89,-2173.98\"/>\n<text text-anchor=\"middle\" x=\"91.5\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"94,-2173.98 94,-2188.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\">behavior_path_planner::BehaviorPathPlannerNode::BehaviorPathPlannerNode(rclcpp::NodeOptionsconst&amp;)::{lambda(tier4_planning_msgs::msg::Scenario*)#1}</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1237,-2173.98 1237,-2188.98 \"/>\n<text text-anchor=\"middle\" x=\"1239.5\" y=\"-2177.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 281471220223648&#45;&gt;281471221778768 -->\n<g id=\"edge118\" class=\"edge\">\n<title>281471220223648:out&#45;&gt;281471221778768:in</title>\n<g id=\"a_edge118\"><a xlink:title=\"node&#45;internal data dependency\">\n<path fill=\"none\" stroke=\"red\" d=\"M1242,-2181.48C1246.54,-2181.48 1365.61,-2245.4 1400.57,-2262.38\"/>\n<polygon fill=\"red\" stroke=\"red\" points=\"1399.43,-2265.71 1410,-2266.48 1402.22,-2259.29 1399.43,-2265.71\"/>\n</a>\n</g>\n</g>\n<!-- 187651236095968 -->\n<g id=\"node26\" class=\"node\">\n<title>187651236095968</title>\n<g id=\"a_node26\"><a xlink:title=\"33µs, 80µs, 384µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"547.5,-2628.98 547.5,-2643.98 783.5,-2643.98 783.5,-2628.98 547.5,-2628.98\"/>\n<text text-anchor=\"middle\" x=\"550\" y=\"-2632.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"552.5,-2628.98 552.5,-2643.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-2632.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (ExternalCmdSelector::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"778.5,-2628.98 778.5,-2643.98 \"/>\n<text text-anchor=\"middle\" x=\"781\" y=\"-2632.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651236095968&#45;&gt;OUTPUT -->\n<g id=\"edge107\" class=\"edge\">\n<title>187651236095968:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge107\"><a xlink:title=\"/control/external_cmd_selector/current_selector_mode\">\n<path fill=\"none\" stroke=\"black\" d=\"M784.5,-2636.48C1253.91,-2636.48 2560.58,-2614.33 2862,-2254.48 2918.64,-2186.87 2837.02,-1525.21 2898,-1461.48 2965.94,-1390.47 3327.48,-1512.99 3353.52,-1430.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3357.02,-1430.88 3355,-1420.48 3350.09,-1429.87 3357.02,-1430.88\"/>\n</a>\n</g>\n</g>\n<!-- 187650725588976 -->\n<g id=\"node33\" class=\"node\">\n<title>187650725588976</title>\n<g id=\"a_node33\"><a xlink:title=\"5µs, 5µs, 5µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1322.5,-1343.98 1322.5,-1358.98 1943.5,-1358.98 1943.5,-1343.98 1322.5,-1343.98\"/>\n<text text-anchor=\"middle\" x=\"1325\" y=\"-1347.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1327.5,-1343.98 1327.5,-1358.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1347.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1938.5,-1343.98 1938.5,-1358.98 \"/>\n<text text-anchor=\"middle\" x=\"1941\" y=\"-1347.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725574912 -->\n<g id=\"node34\" class=\"node\">\n<title>187650725574912</title>\n<g id=\"a_node34\"><a xlink:title=\"29599µs, 29599µs, 29599µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1331.5,-1479.98 1331.5,-1494.98 1934.5,-1494.98 1934.5,-1479.98 1331.5,-1479.98\"/>\n<text text-anchor=\"middle\" x=\"1334\" y=\"-1483.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1336.5,-1479.98 1336.5,-1494.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1483.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ScenarioSelectorNode::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1929.5,-1479.98 1929.5,-1494.98 \"/>\n<text text-anchor=\"middle\" x=\"1932\" y=\"-1483.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725848512 -->\n<g id=\"node36\" class=\"node\">\n<title>187650725848512</title>\n<g id=\"a_node36\"><a xlink:title=\"8µs, 167µs, 676µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1512,-1513.98 1512,-1528.98 1754,-1528.98 1754,-1513.98 1512,-1513.98\"/>\n<text text-anchor=\"middle\" x=\"1514.5\" y=\"-1517.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1517,-1513.98 1517,-1528.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1517.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (ScenarioSelectorNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1749,-1513.98 1749,-1528.98 \"/>\n<text text-anchor=\"middle\" x=\"1751.5\" y=\"-1517.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725848512&#45;&gt;281471220223648 -->\n<g id=\"edge8\" class=\"edge\">\n<title>187650725848512:out&#45;&gt;281471220223648:in</title>\n<g id=\"a_edge8\"><a xlink:title=\"/planning/scenario_planning/scenario (0.30ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1752,-1530.48C1752,-1583.23 1315.37,-1519.26 1278,-1556.48 1181.32,-1652.79 1341.16,-2075.74 1242,-2169.48 1239.26,-2172.08 215.71,-2168.88 101.77,-2171.89\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"101.28,-2168.41 91.5,-2172.48 101.69,-2175.4 101.28,-2168.41\"/>\n</a>\n</g>\n</g>\n<!-- 187651235281808 -->\n<g id=\"node42\" class=\"node\">\n<title>187651235281808</title>\n<g id=\"a_node42\"><a xlink:title=\"1µs, 4µs, 334µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3060.5,-1533.98 3060.5,-1548.98 3713.5,-1548.98 3713.5,-1533.98 3060.5,-1533.98\"/>\n<text text-anchor=\"middle\" x=\"3063\" y=\"-1537.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3065.5,-1533.98 3065.5,-1548.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1537.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (freespace_planner::FreespacePlannerNode::?)(tier4_planning_msgs::msg::Scenario*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3708.5,-1533.98 3708.5,-1548.98 \"/>\n<text text-anchor=\"middle\" x=\"3711\" y=\"-1537.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725848512&#45;&gt;187651235281808 -->\n<g id=\"edge10\" class=\"edge\">\n<title>187650725848512:out&#45;&gt;187651235281808:in</title>\n<g id=\"a_edge10\"><a xlink:title=\"/planning/scenario_planning/scenario (0.99ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1755,-1521.48C2331.23,-1521.48 2477.67,-1541.25 3048.86,-1541.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3049,-1544.98 3059,-1541.48 3049,-1537.98 3049,-1544.98\"/>\n</a>\n</g>\n</g>\n<!-- 187651234516960 -->\n<g id=\"node48\" class=\"node\">\n<title>187651234516960</title>\n<g id=\"a_node48\"><a xlink:title=\"1µs, 5µs, 89µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2201.5,-1655.98 2201.5,-1670.98 2684.5,-1670.98 2684.5,-1655.98 2201.5,-1655.98\"/>\n<text text-anchor=\"middle\" x=\"2204\" y=\"-1659.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2206.5,-1655.98 2206.5,-1670.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1659.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (CostmapGenerator::?)(tier4_planning_msgs::msg::Scenario*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2679.5,-1655.98 2679.5,-1670.98 \"/>\n<text text-anchor=\"middle\" x=\"2682\" y=\"-1659.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725848512&#45;&gt;187651234516960 -->\n<g id=\"edge9\" class=\"edge\">\n<title>187650725848512:out&#45;&gt;187651234516960:in</title>\n<g id=\"a_edge9\"><a xlink:title=\"/planning/scenario_planning/scenario (0.96ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1755,-1521.48C1859.72,-1521.48 1905.9,-1491.48 1988,-1556.48 2021.78,-1583.23 1989.53,-1620.64 2024,-1646.48 2084.05,-1691.5 2118.25,-1666.04 2189.67,-1663.66\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2190.06,-1667.15 2200,-1663.48 2189.94,-1660.15 2190.06,-1667.15\"/>\n</a>\n</g>\n</g>\n<!-- 187650725538176 -->\n<g id=\"node37\" class=\"node\">\n<title>187650725538176</title>\n<g id=\"a_node37\"><a xlink:title=\"104µs, 135µs, 252µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1339,-1377.98 1339,-1392.98 1927,-1392.98 1927,-1377.98 1339,-1377.98\"/>\n<text text-anchor=\"middle\" x=\"1341.5\" y=\"-1381.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1344,-1377.98 1344,-1392.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1381.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1922,-1377.98 1922,-1392.98 \"/>\n<text text-anchor=\"middle\" x=\"1924.5\" y=\"-1381.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651165396336 -->\n<g id=\"node128\" class=\"node\">\n<title>187651165396336</title>\n<g id=\"a_node128\"><a xlink:title=\"113µs, 17407µs, 52440µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2024,-1114.98 2024,-1129.98 2862,-1129.98 2862,-1114.98 2024,-1114.98\"/>\n<text text-anchor=\"middle\" x=\"2026.5\" y=\"-1118.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2029,-1114.98 2029,-1129.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1118.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2857,-1114.98 2857,-1129.98 \"/>\n<text text-anchor=\"middle\" x=\"2859.5\" y=\"-1118.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725538176&#45;&gt;187651165396336 -->\n<g id=\"edge7\" class=\"edge\">\n<title>187650725538176:out&#45;&gt;187651165396336:in</title>\n<g id=\"a_edge7\"><a xlink:title=\"/planning/scenario_planning/scenario_selector/trajectory (1.10ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1925,-1376.48C1925,-1362.37 1977.86,-1378.3 1988,-1368.48 2005.55,-1351.49 2022.83,-1189.14 2025.61,-1141.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2029.11,-1141.61 2026,-1131.48 2022.12,-1141.34 2029.11,-1141.61\"/>\n</a>\n</g>\n</g>\n<!-- 187650725528480 -->\n<g id=\"node38\" class=\"node\">\n<title>187650725528480</title>\n<g id=\"a_node38\"><a xlink:title=\"86µs, 295µs, 1598µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1339,-1411.98 1339,-1426.98 1927,-1426.98 1927,-1411.98 1339,-1411.98\"/>\n<text text-anchor=\"middle\" x=\"1341.5\" y=\"-1415.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1344,-1411.98 1344,-1426.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-1415.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1922,-1411.98 1922,-1426.98 \"/>\n<text text-anchor=\"middle\" x=\"1924.5\" y=\"-1415.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650725528480&#45;&gt;187651165396336 -->\n<g id=\"edge6\" class=\"edge\">\n<title>187650725528480:out&#45;&gt;187651165396336:in</title>\n<g id=\"a_edge6\"><a xlink:title=\"/planning/scenario_planning/scenario_selector/trajectory (1.10ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1925,-1410.48C1925,-1396.37 1977.96,-1412.4 1988,-1402.48 2007.99,-1382.75 2023.48,-1194.14 2025.72,-1141.55\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2029.22,-1141.58 2026,-1131.48 2022.22,-1141.38 2029.22,-1141.58\"/>\n</a>\n</g>\n</g>\n<!-- 187651290535728 -->\n<g id=\"node40\" class=\"node\">\n<title>187651290535728</title>\n<g id=\"a_node40\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"350,-1671.98 350,-1686.98 981,-1686.98 981,-1671.98 350,-1671.98\"/>\n<text text-anchor=\"middle\" x=\"352.5\" y=\"-1675.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"355,-1671.98 355,-1686.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1675.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimit*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"976,-1671.98 976,-1686.98 \"/>\n<text text-anchor=\"middle\" x=\"978.5\" y=\"-1675.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651290617280 -->\n<g id=\"node41\" class=\"node\">\n<title>187651290617280</title>\n<g id=\"a_node41\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"295,-1637.98 295,-1652.98 1036,-1652.98 1036,-1637.98 295,-1637.98\"/>\n<text text-anchor=\"middle\" x=\"297.5\" y=\"-1641.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"300,-1637.98 300,-1652.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1641.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimitClearCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1031,-1637.98 1031,-1652.98 \"/>\n<text text-anchor=\"middle\" x=\"1033.5\" y=\"-1641.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651235210912 -->\n<g id=\"node44\" class=\"node\">\n<title>187651235210912</title>\n<g id=\"a_node44\"><a xlink:title=\"2µs, 3µs, 4µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3076,-1567.98 3076,-1582.98 3698,-1582.98 3698,-1567.98 3076,-1567.98\"/>\n<text text-anchor=\"middle\" x=\"3078.5\" y=\"-1571.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3081,-1567.98 3081,-1582.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1571.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (freespace_planner::FreespacePlannerNode::?)(nav_msgs::msg::OccupancyGrid*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3693,-1567.98 3693,-1582.98 \"/>\n<text text-anchor=\"middle\" x=\"3695.5\" y=\"-1571.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651235257712 -->\n<g id=\"node45\" class=\"node\">\n<title>187651235257712</title>\n<g id=\"a_node45\"><a xlink:title=\"385µs, 385µs, 385µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3003,-1499.98 3003,-1514.98 3771,-1514.98 3771,-1499.98 3003,-1499.98\"/>\n<text text-anchor=\"middle\" x=\"3005.5\" y=\"-1503.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3008,-1499.98 3008,-1514.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1503.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (freespace_planner::FreespacePlannerNode::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3766,-1499.98 3766,-1514.98 \"/>\n<text text-anchor=\"middle\" x=\"3768.5\" y=\"-1503.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651234961136 -->\n<g id=\"node46\" class=\"node\">\n<title>187651234961136</title>\n<g id=\"a_node46\"><a xlink:title=\"1µs, 7781µs, 635604µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3192.5,-1465.98 3192.5,-1480.98 3581.5,-1480.98 3581.5,-1465.98 3192.5,-1465.98\"/>\n<text text-anchor=\"middle\" x=\"3195\" y=\"-1469.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3197.5,-1465.98 3197.5,-1480.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1469.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (freespace_planner::FreespacePlannerNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3576.5,-1465.98 3576.5,-1480.98 \"/>\n<text text-anchor=\"middle\" x=\"3579\" y=\"-1469.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651234515584 -->\n<g id=\"node50\" class=\"node\">\n<title>187651234515584</title>\n<g id=\"a_node50\"><a xlink:title=\"6651µs, 6651µs, 6651µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2153,-1621.98 2153,-1636.98 2733,-1636.98 2733,-1621.98 2153,-1621.98\"/>\n<text text-anchor=\"middle\" x=\"2155.5\" y=\"-1625.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2158,-1621.98 2158,-1636.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1625.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (CostmapGenerator::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2728,-1621.98 2728,-1636.98 \"/>\n<text text-anchor=\"middle\" x=\"2730.5\" y=\"-1625.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651234424656 -->\n<g id=\"node51\" class=\"node\">\n<title>187651234424656</title>\n<g id=\"a_node51\"><a xlink:title=\"2µs, 2516µs, 100339µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2334,-1587.98 2334,-1602.98 2552,-1602.98 2552,-1587.98 2334,-1587.98\"/>\n<text text-anchor=\"middle\" x=\"2336.5\" y=\"-1591.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2339,-1587.98 2339,-1602.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1591.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (CostmapGenerator::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2547,-1587.98 2547,-1602.98 \"/>\n<text text-anchor=\"middle\" x=\"2549.5\" y=\"-1591.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651234424656&#45;&gt;OUTPUT -->\n<g id=\"edge101\" class=\"edge\">\n<title>187651234424656:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge101\"><a xlink:title=\"/planning/scenario_planning/parking/costmap_generator/grid_map\">\n<path fill=\"none\" stroke=\"black\" d=\"M2553,-1595.48C2621.84,-1595.48 2807.85,-1615.99 2862,-1573.48 2903.13,-1541.2 2857.5,-1494.55 2898,-1461.48 3052.63,-1335.22 3145.87,-1408.94 3341.98,-1411.42\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.98,-1414.92 3352,-1411.48 3342.02,-1407.92 3341.98,-1414.92\"/>\n</a>\n</g>\n</g>\n<!-- 187651234424656&#45;&gt;187651235210912 -->\n<g id=\"edge31\" class=\"edge\">\n<title>187651234424656:out&#45;&gt;187651235210912:in</title>\n<g id=\"a_edge31\"><a xlink:title=\"/planning/scenario_planning/parking/costmap_generator/occupancy_grid (297.11ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2553,-1595.48C2781.77,-1595.48 2841.1,-1576.07 3064.91,-1575.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3065,-1579 3075,-1575.48 3065,-1572 3065,-1579\"/>\n</a>\n</g>\n</g>\n<!-- 187651235237936 -->\n<g id=\"node53\" class=\"node\">\n<title>187651235237936</title>\n<g id=\"a_node53\"><a xlink:title=\"1µs, 116µs, 955µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3071,-1044.98 3071,-1059.98 3703,-1059.98 3703,-1044.98 3071,-1044.98\"/>\n<text text-anchor=\"middle\" x=\"3073.5\" y=\"-1048.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3076,-1044.98 3076,-1059.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1048.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3698,-1044.98 3698,-1059.98 \"/>\n<text text-anchor=\"middle\" x=\"3700.5\" y=\"-1048.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651235242032 -->\n<g id=\"node54\" class=\"node\">\n<title>187651235242032</title>\n<g id=\"a_node54\"><a xlink:title=\"4µs, 7µs, 58µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2898,-1078.98 2898,-1093.98 3876,-1093.98 3876,-1078.98 2898,-1078.98\"/>\n<text text-anchor=\"middle\" x=\"2900.5\" y=\"-1082.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2903,-1078.98 2903,-1093.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-1082.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3871,-1078.98 3871,-1093.98 \"/>\n<text text-anchor=\"middle\" x=\"3873.5\" y=\"-1082.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650857875248 -->\n<g id=\"node55\" class=\"node\">\n<title>187650857875248</title>\n<g id=\"a_node55\"><a xlink:title=\"2µs, 5µs, 172µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2050.5,-1391.98 2050.5,-1406.98 2835.5,-1406.98 2835.5,-1391.98 2050.5,-1391.98\"/>\n<text text-anchor=\"middle\" x=\"2053\" y=\"-1395.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2055.5,-1391.98 2055.5,-1406.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1395.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (planning_diagnostics::PlanningErrorMonitorNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2830.5,-1391.98 2830.5,-1406.98 \"/>\n<text text-anchor=\"middle\" x=\"2833\" y=\"-1395.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650857760512 -->\n<g id=\"node56\" class=\"node\">\n<title>187650857760512</title>\n<g id=\"a_node56\"><a xlink:title=\"95µs, 326µs, 1830µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2224,-1425.98 2224,-1440.98 2662,-1440.98 2662,-1425.98 2224,-1425.98\"/>\n<text text-anchor=\"middle\" x=\"2226.5\" y=\"-1429.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2229,-1425.98 2229,-1440.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1429.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (planning_diagnostics::PlanningErrorMonitorNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2657,-1425.98 2657,-1440.98 \"/>\n<text text-anchor=\"middle\" x=\"2659.5\" y=\"-1429.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650857760512&#45;&gt;OUTPUT -->\n<g id=\"edge112\" class=\"edge\">\n<title>187650857760512:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge112\"><a xlink:title=\"/planning/planning_diagnostics/planning_error_monitor/debug/marker\">\n<path fill=\"none\" stroke=\"black\" d=\"M2663,-1433.48C2965.94,-1433.48 3043.88,-1411.97 3341.76,-1411.49\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3342,-1414.99 3352,-1411.48 3342,-1407.99 3342,-1414.99\"/>\n</a>\n</g>\n</g>\n<!-- 187651239920720 -->\n<g id=\"node57\" class=\"node\">\n<title>187651239920720</title>\n<g id=\"a_node57\"><a xlink:title=\"4µs, 4µs, 4µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2185.5,-779.98 2185.5,-794.98 2700.5,-794.98 2700.5,-779.98 2185.5,-779.98\"/>\n<text text-anchor=\"middle\" x=\"2188\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2190.5,-779.98 2190.5,-794.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::Engage*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2695.5,-779.98 2695.5,-794.98 \"/>\n<text text-anchor=\"middle\" x=\"2698\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240076560 -->\n<g id=\"node58\" class=\"node\">\n<title>187651240076560</title>\n<g id=\"a_node58\"><a xlink:title=\"1µs, 2µs, 47µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2128,-507.98 2128,-522.98 2758,-522.98 2758,-507.98 2128,-507.98\"/>\n<text text-anchor=\"middle\" x=\"2130.5\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2133,-507.98 2133,-522.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2753,-507.98 2753,-522.98 \"/>\n<text text-anchor=\"middle\" x=\"2755.5\" y=\"-511.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239621024 -->\n<g id=\"node59\" class=\"node\">\n<title>187651239621024</title>\n<g id=\"a_node59\"><a xlink:title=\"3µs, 5µs, 188µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2152.5,-405.98 2152.5,-420.98 2733.5,-420.98 2733.5,-405.98 2152.5,-405.98\"/>\n<text text-anchor=\"middle\" x=\"2155\" y=\"-409.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2157.5,-405.98 2157.5,-420.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-409.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_system_msgs::msg::EmergencyState*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2728.5,-405.98 2728.5,-420.98 \"/>\n<text text-anchor=\"middle\" x=\"2731\" y=\"-409.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239995456 -->\n<g id=\"node60\" class=\"node\">\n<title>187651239995456</title>\n<g id=\"a_node60\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2123.5,-677.98 2123.5,-692.98 2762.5,-692.98 2762.5,-677.98 2123.5,-677.98\"/>\n<text text-anchor=\"middle\" x=\"2126\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2128.5,-677.98 2128.5,-692.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::TurnIndicatorsCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2757.5,-677.98 2757.5,-692.98 \"/>\n<text text-anchor=\"middle\" x=\"2760\" y=\"-681.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239979264 -->\n<g id=\"node61\" class=\"node\">\n<title>187651239979264</title>\n<g id=\"a_node61\"><a xlink:title=\"1µs, 2µs, 6µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2159,-303.98 2159,-318.98 2727,-318.98 2727,-303.98 2159,-303.98\"/>\n<text text-anchor=\"middle\" x=\"2161.5\" y=\"-307.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2164,-303.98 2164,-318.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-307.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2722,-303.98 2722,-318.98 \"/>\n<text text-anchor=\"middle\" x=\"2724.5\" y=\"-307.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240214128 -->\n<g id=\"node62\" class=\"node\">\n<title>187651240214128</title>\n<g id=\"a_node62\"><a xlink:title=\"311µs, 423µs, 1034µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2343,-643.98 2343,-658.98 2543,-658.98 2543,-643.98 2343,-643.98\"/>\n<text text-anchor=\"middle\" x=\"2345.5\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2348,-643.98 2348,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (VehicleCmdGate::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2538,-643.98 2538,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"2540.5\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240214128&#45;&gt;OUTPUT -->\n<g id=\"edge98\" class=\"edge\">\n<title>187651240214128:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge98\"><a xlink:title=\"/api/autoware/get/emergency\">\n<path fill=\"none\" stroke=\"black\" d=\"M2541,-660.48C2541,-678.32 2849.05,-656.22 2862,-668.48 2935.32,-737.92 2845.27,-1035.36 2898,-1121.48 3020.68,-1321.85 3345.3,-1168.68 3354.79,-1392.26\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3351.29,-1392.56 3355,-1402.48 3358.29,-1392.41 3351.29,-1392.56\"/>\n</a>\n</g>\n</g>\n<!-- 187650226567200 -->\n<g id=\"node79\" class=\"node\">\n<title>187650226567200</title>\n<g id=\"a_node79\"><a xlink:title=\"2µs, 5µs, 133µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3087.5,-463.98 3087.5,-478.98 3686.5,-478.98 3686.5,-463.98 3087.5,-463.98\"/>\n<text text-anchor=\"middle\" x=\"3090\" y=\"-467.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3092.5,-463.98 3092.5,-478.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-467.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareStateMonitorNode::?)(autoware_auto_vehicle_msgs::msg::Engage*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3681.5,-463.98 3681.5,-478.98 \"/>\n<text text-anchor=\"middle\" x=\"3684\" y=\"-467.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240214128&#45;&gt;187650226567200 -->\n<g id=\"edge34\" class=\"edge\">\n<title>187651240214128:out&#45;&gt;187650226567200:in</title>\n<g id=\"a_edge34\"><a xlink:title=\"/api/autoware/get/engage (0.18ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2544,-651.48C2614.77,-651.48 2807.48,-679.6 2862,-634.48 2913.49,-591.88 2847.3,-532.03 2898,-488.48 2959.03,-436.06 2998.75,-468.55 3075.89,-471.3\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3075.94,-474.8 3086,-471.48 3076.06,-467.8 3075.94,-474.8\"/>\n</a>\n</g>\n</g>\n<!-- 187651236612256 -->\n<g id=\"node90\" class=\"node\">\n<title>187651236612256</title>\n<g id=\"a_node90\"><a xlink:title=\"2µs, 4µs, 92µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3021.5,-185.98 3021.5,-200.98 3752.5,-200.98 3752.5,-185.98 3021.5,-185.98\"/>\n<text text-anchor=\"middle\" x=\"3024\" y=\"-189.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3026.5,-185.98 3026.5,-200.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-189.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_control_msgs::msg::GateMode*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3747.5,-185.98 3747.5,-200.98 \"/>\n<text text-anchor=\"middle\" x=\"3750\" y=\"-189.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240214128&#45;&gt;187651236612256 -->\n<g id=\"edge36\" class=\"edge\">\n<title>187651240214128:out&#45;&gt;187651236612256:in</title>\n<g id=\"a_edge36\"><a xlink:title=\"/control/current_gate_mode (1.24ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2541,-642.48C2541,-624.64 2849.01,-646.71 2862,-634.48 2930.83,-569.65 2830.43,-276.63 2898,-210.48 2906.3,-202.36 2987.26,-211.82 3014.85,-207.35\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3016.82,-210.27 3024,-202.48 3013.53,-204.09 3016.82,-210.27\"/>\n</a>\n</g>\n</g>\n<!-- 187650864449376 -->\n<g id=\"node109\" class=\"node\">\n<title>187650864449376</title>\n<g id=\"a_node109\"><a xlink:title=\"3µs, 5µs, 90µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"410,-711.98 410,-726.98 921,-726.98 921,-711.98 410,-711.98\"/>\n<text text-anchor=\"middle\" x=\"412.5\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"415,-711.98 415,-726.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareErrorMonitor::?)(tier4_control_msgs::msg::GateMode*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"916,-711.98 916,-726.98 \"/>\n<text text-anchor=\"middle\" x=\"918.5\" y=\"-715.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240214128&#45;&gt;187650864449376 -->\n<g id=\"edge35\" class=\"edge\">\n<title>187651240214128:out&#45;&gt;187650864449376:in</title>\n<g id=\"a_edge35\"><a xlink:title=\"/control/current_gate_mode (0.18ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2541,-660.48C2541,-667.66 2030.98,-666.78 2024,-668.48 2006.62,-672.73 2005.36,-682.19 1988,-686.48 1666.08,-766.13 1573.59,-697.33 1242,-702.48 1236.62,-702.57 516.79,-704.45 422.62,-709.4\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"422.07,-705.94 412.5,-710.48 422.82,-712.9 422.07,-705.94\"/>\n</a>\n</g>\n</g>\n<!-- 187651240027632 -->\n<g id=\"node63\" class=\"node\">\n<title>187651240027632</title>\n<g id=\"a_node63\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2128,-575.98 2128,-590.98 2758,-590.98 2758,-575.98 2128,-575.98\"/>\n<text text-anchor=\"middle\" x=\"2130.5\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2133,-575.98 2133,-590.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2753,-575.98 2753,-590.98 \"/>\n<text text-anchor=\"middle\" x=\"2755.5\" y=\"-579.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240036592 -->\n<g id=\"node64\" class=\"node\">\n<title>187651240036592</title>\n<g id=\"a_node64\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2159,-541.98 2159,-556.98 2727,-556.98 2727,-541.98 2159,-541.98\"/>\n<text text-anchor=\"middle\" x=\"2161.5\" y=\"-545.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2164,-541.98 2164,-556.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-545.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2722,-541.98 2722,-556.98 \"/>\n<text text-anchor=\"middle\" x=\"2724.5\" y=\"-545.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240083056 -->\n<g id=\"node66\" class=\"node\">\n<title>187651240083056</title>\n<g id=\"a_node66\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2159,-473.98 2159,-488.98 2727,-488.98 2727,-473.98 2159,-473.98\"/>\n<text text-anchor=\"middle\" x=\"2161.5\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2164,-473.98 2164,-488.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2722,-473.98 2722,-488.98 \"/>\n<text text-anchor=\"middle\" x=\"2724.5\" y=\"-477.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239991632 -->\n<g id=\"node67\" class=\"node\">\n<title>187651239991632</title>\n<g id=\"a_node67\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2109.5,-439.98 2109.5,-454.98 2776.5,-454.98 2776.5,-439.98 2109.5,-439.98\"/>\n<text text-anchor=\"middle\" x=\"2112\" y=\"-443.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2114.5,-439.98 2114.5,-454.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-443.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2771.5,-439.98 2771.5,-454.98 \"/>\n<text text-anchor=\"middle\" x=\"2774\" y=\"-443.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239927824 -->\n<g id=\"node69\" class=\"node\">\n<title>187651239927824</title>\n<g id=\"a_node69\"><a xlink:title=\"87µs, 141µs, 830µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2109.5,-371.98 2109.5,-386.98 2776.5,-386.98 2776.5,-371.98 2109.5,-371.98\"/>\n<text text-anchor=\"middle\" x=\"2112\" y=\"-375.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2114.5,-371.98 2114.5,-386.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-375.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2771.5,-371.98 2771.5,-386.98 \"/>\n<text text-anchor=\"middle\" x=\"2774\" y=\"-375.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651239927824&#45;&gt;OUTPUT -->\n<g id=\"edge104\" class=\"edge\">\n<title>187651239927824:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge104\"><a xlink:title=\"/control/command/emergency_cmd\">\n<path fill=\"none\" stroke=\"black\" d=\"M2774,-388.48C2774,-408.12 2848.4,-382.32 2862,-396.48 2917.85,-454.67 2856.91,-1052.08 2898,-1121.48 3017.69,-1323.65 3345.22,-1168.73 3354.79,-1392.26\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3351.29,-1392.56 3355,-1402.48 3358.29,-1392.41 3351.29,-1392.56\"/>\n</a>\n</g>\n</g>\n<!-- 187651239927824&#45;&gt;187650829824912 -->\n<g id=\"edge33\" class=\"edge\">\n<title>187651239927824:out&#45;&gt;187650829824912:in</title>\n<g id=\"a_edge33\"><a xlink:title=\"/control/command/control_cmd (0.21ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2774,-388.48C2774,-398.9 2032.06,-389.88 2024,-396.48 1964.26,-445.43 2047.72,-517.51 1988,-566.48 1974.08,-577.9 1383.61,-558.27 1300.65,-571.01\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1299.22,-567.8 1291,-574.48 1301.59,-574.39 1299.22,-567.8\"/>\n</a>\n</g>\n</g>\n<!-- 187651239890784 -->\n<g id=\"node70\" class=\"node\">\n<title>187651239890784</title>\n<g id=\"a_node70\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2192.5,-337.98 2192.5,-352.98 2693.5,-352.98 2693.5,-337.98 2192.5,-337.98\"/>\n<text text-anchor=\"middle\" x=\"2195\" y=\"-341.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2197.5,-337.98 2197.5,-352.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-341.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(tier4_external_api_msgs::msg::Heartbeat*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2688.5,-337.98 2688.5,-352.98 \"/>\n<text text-anchor=\"middle\" x=\"2691\" y=\"-341.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651240046928 -->\n<g id=\"node73\" class=\"node\">\n<title>187651240046928</title>\n<g id=\"a_node73\"><a xlink:title=\"1µs, 3µs, 322µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2109.5,-609.98 2109.5,-624.98 2776.5,-624.98 2776.5,-609.98 2109.5,-609.98\"/>\n<text text-anchor=\"middle\" x=\"2112\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2114.5,-609.98 2114.5,-624.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2771.5,-609.98 2771.5,-624.98 \"/>\n<text text-anchor=\"middle\" x=\"2774\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651170508848&#45;&gt;OUTPUT -->\n<g id=\"edge93\" class=\"edge\">\n<title>187651170508848:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge93\"><a xlink:title=\"/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/mpt_ref_traj\">\n<path fill=\"none\" stroke=\"black\" d=\"M1923,-1670.48C1952.86,-1670.48 1964.7,-1672.16 1988,-1653.48 2015.3,-1631.6 1995.45,-1603.7 2024,-1583.48 2177.41,-1474.87 2676.56,-1499.21 2862,-1468.48 2878.08,-1465.82 2881.89,-1463.93 2898,-1461.48 3095.26,-1431.49 3147.24,-1412.15 3341.72,-1411.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3342.01,-1415 3352,-1411.48 3341.99,-1408 3342.01,-1415\"/>\n</a>\n</g>\n</g>\n<!-- 281471555210208 -->\n<g id=\"node125\" class=\"node\">\n<title>281471555210208</title>\n<g id=\"a_node125\"><a xlink:title=\"379µs, 16326µs, 42004µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"293,-1370.98 293,-1385.98 1038,-1385.98 1038,-1370.98 293,-1370.98\"/>\n<text text-anchor=\"middle\" x=\"295.5\" y=\"-1374.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"298,-1370.98 298,-1385.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1374.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1033,-1370.98 1033,-1385.98 \"/>\n<text text-anchor=\"middle\" x=\"1035.5\" y=\"-1374.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651170508848&#45;&gt;281471555210208 -->\n<g id=\"edge15\" class=\"edge\">\n<title>187651170508848:out&#45;&gt;281471555210208:in</title>\n<g id=\"a_edge15\"><a xlink:title=\"/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/trajectory (0.62ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1920,-1661.48C1920,-1643.65 1292.6,-1663.73 1278,-1653.48 1240.71,-1627.3 1277,-1586.66 1242,-1557.48 1080.49,-1422.86 320.55,-1595.45 296.1,-1397.51\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"299.59,-1397.25 295.5,-1387.48 292.61,-1397.68 299.59,-1397.25\"/>\n</a>\n</g>\n</g>\n<!-- 187650227078416 -->\n<g id=\"node78\" class=\"node\">\n<title>187650227078416</title>\n<g id=\"a_node78\"><a xlink:title=\"338µs, 477µs, 980µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3245,-531.98 3245,-546.98 3529,-546.98 3529,-531.98 3245,-531.98\"/>\n<text text-anchor=\"middle\" x=\"3247.5\" y=\"-535.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3250,-531.98 3250,-546.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-535.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (AutowareStateMonitorNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3524,-531.98 3524,-546.98 \"/>\n<text text-anchor=\"middle\" x=\"3526.5\" y=\"-535.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650227078464 -->\n<g id=\"node80\" class=\"node\">\n<title>187650227078464</title>\n<g id=\"a_node80\"><a xlink:title=\"4µs, 4µs, 4µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3055.5,-497.98 3055.5,-512.98 3718.5,-512.98 3718.5,-497.98 3055.5,-497.98\"/>\n<text text-anchor=\"middle\" x=\"3058\" y=\"-501.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3060.5,-497.98 3060.5,-512.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-501.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareStateMonitorNode::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3713.5,-497.98 3713.5,-512.98 \"/>\n<text text-anchor=\"middle\" x=\"3716\" y=\"-501.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651233978848 -->\n<g id=\"node84\" class=\"node\">\n<title>187651233978848</title>\n<g id=\"a_node84\"><a xlink:title=\"3µs, 2205µs, 4702µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3090.5,-910.98 3090.5,-925.98 3683.5,-925.98 3683.5,-910.98 3090.5,-910.98\"/>\n<text text-anchor=\"middle\" x=\"3093\" y=\"-914.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3095.5,-910.98 3095.5,-925.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-914.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3678.5,-910.98 3678.5,-925.98 \"/>\n<text text-anchor=\"middle\" x=\"3681\" y=\"-914.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651234294336 -->\n<g id=\"node85\" class=\"node\">\n<title>187651234294336</title>\n<g id=\"a_node85\"><a xlink:title=\"90µs, 329µs, 1074µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2917.5,-944.98 2917.5,-959.98 3856.5,-959.98 3856.5,-944.98 2917.5,-944.98\"/>\n<text text-anchor=\"middle\" x=\"2920\" y=\"-948.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2922.5,-944.98 2922.5,-959.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-948.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3851.5,-944.98 3851.5,-959.98 \"/>\n<text text-anchor=\"middle\" x=\"3854\" y=\"-948.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651236629808 -->\n<g id=\"node87\" class=\"node\">\n<title>187651236629808</title>\n<g id=\"a_node87\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3003,-253.98 3003,-268.98 3771,-268.98 3771,-253.98 3003,-253.98\"/>\n<text text-anchor=\"middle\" x=\"3005.5\" y=\"-257.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3008,-253.98 3008,-268.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-257.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_external_api_msgs::msg::Heartbeat*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3766,-253.98 3766,-268.98 \"/>\n<text text-anchor=\"middle\" x=\"3768.5\" y=\"-257.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651236539712 -->\n<g id=\"node88\" class=\"node\">\n<title>187651236539712</title>\n<g id=\"a_node88\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2945,-219.98 2945,-234.98 3829,-234.98 3829,-219.98 2945,-219.98\"/>\n<text text-anchor=\"middle\" x=\"2947.5\" y=\"-223.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2950,-219.98 2950,-234.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-223.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_external_api_msgs::msg::ControlCommandStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3824,-219.98 3824,-234.98 \"/>\n<text text-anchor=\"middle\" x=\"3826.5\" y=\"-223.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651236521888 -->\n<g id=\"node91\" class=\"node\">\n<title>187651236521888</title>\n<g id=\"a_node91\"><a xlink:title=\"36µs, 110µs, 380µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3153.5,-117.98 3153.5,-132.98 3620.5,-132.98 3620.5,-117.98 3153.5,-117.98\"/>\n<text text-anchor=\"middle\" x=\"3156\" y=\"-121.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3158.5,-117.98 3158.5,-132.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-121.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (external_cmd_converter::ExternalCmdConverterNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3615.5,-117.98 3615.5,-132.98 \"/>\n<text text-anchor=\"middle\" x=\"3618\" y=\"-121.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651236535728 -->\n<g id=\"node92\" class=\"node\">\n<title>187651236535728</title>\n<g id=\"a_node92\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2969.5,-83.98 2969.5,-98.98 3804.5,-98.98 3804.5,-83.98 2969.5,-83.98\"/>\n<text text-anchor=\"middle\" x=\"2972\" y=\"-87.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2974.5,-83.98 2974.5,-98.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-87.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (external_cmd_converter::ExternalCmdConverterNode::?)(autoware_auto_vehicle_msgs::msg::GearCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3799.5,-83.98 3799.5,-98.98 \"/>\n<text text-anchor=\"middle\" x=\"3802\" y=\"-87.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650829768384 -->\n<g id=\"node93\" class=\"node\">\n<title>187650829768384</title>\n<g id=\"a_node93\"><a xlink:title=\"5µs, 14µs, 91µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1310.5,-643.98 1310.5,-658.98 1955.5,-658.98 1955.5,-643.98 1310.5,-643.98\"/>\n<text text-anchor=\"middle\" x=\"1313\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1315.5,-643.98 1315.5,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (EmergencyHandler::?)(autoware_auto_system_msgs::msg::HazardStatusStamped*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1950.5,-643.98 1950.5,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"1953\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650830150352 -->\n<g id=\"node94\" class=\"node\">\n<title>187650830150352</title>\n<g id=\"a_node94\"><a xlink:title=\"3µs, 306µs, 1100µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1522.5,-609.98 1522.5,-624.98 1743.5,-624.98 1743.5,-609.98 1522.5,-609.98\"/>\n<text text-anchor=\"middle\" x=\"1525\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1527.5,-609.98 1527.5,-624.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (EmergencyHandler::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1738.5,-609.98 1738.5,-624.98 \"/>\n<text text-anchor=\"middle\" x=\"1741\" y=\"-613.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650830150352&#45;&gt;187651240076560 -->\n<g id=\"edge4\" class=\"edge\">\n<title>187650830150352:out&#45;&gt;187651240076560:in</title>\n<g id=\"a_edge4\"><a xlink:title=\"/system/emergency/hazard_lights_cmd (0.87ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1745,-617.48C1853.26,-617.48 1897.26,-659.53 1988,-600.48 2016.66,-581.83 1996.24,-552.46 2024,-532.48 2058.79,-507.45 2077.61,-514.16 2116.86,-515.33\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2116.95,-518.83 2127,-515.48 2117.05,-511.83 2116.95,-518.83\"/>\n</a>\n</g>\n</g>\n<!-- 187650830150352&#45;&gt;187651239621024 -->\n<g id=\"edge3\" class=\"edge\">\n<title>187650830150352:out&#45;&gt;187651239621024:in</title>\n<g id=\"a_edge3\"><a xlink:title=\"/system/emergency/emergency_state (0.83ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1741,-608.48C1741,-594.75 1977.47,-609.3 1988,-600.48 2047.21,-550.89 1965.51,-480.92 2024,-430.48 2033.19,-422.56 2117.78,-432.38 2145.93,-427.5\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2147.94,-430.39 2155,-422.48 2144.56,-424.26 2147.94,-430.39\"/>\n</a>\n</g>\n</g>\n<!-- 187650830150352&#45;&gt;187651240046928 -->\n<g id=\"edge5\" class=\"edge\">\n<title>187650830150352:out&#45;&gt;187651240046928:in</title>\n<g id=\"a_edge5\"><a xlink:title=\"/system/emergency/control_cmd (0.92ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1745,-617.48C1902.87,-617.48 1944.88,-617.48 2097.77,-617.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2098,-620.98 2108,-617.48 2098,-613.98 2098,-620.98\"/>\n</a>\n</g>\n</g>\n<!-- 187650830033680 -->\n<g id=\"node96\" class=\"node\">\n<title>187650830033680</title>\n<g id=\"a_node96\"><a xlink:title=\"1µs, 3µs, 322µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1628,-541.98 1628,-556.98 1638,-556.98 1638,-541.98 1628,-541.98\"/>\n<text text-anchor=\"middle\" x=\"1630.5\" y=\"-545.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1633,-541.98 1633,-556.98 \"/>\n<polyline fill=\"none\" stroke=\"black\" points=\"1633,-541.98 1633,-556.98 \"/>\n<text text-anchor=\"middle\" x=\"1635.5\" y=\"-545.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651237083504 -->\n<g id=\"node99\" class=\"node\">\n<title>187651237083504</title>\n<g id=\"a_node99\"><a xlink:title=\"41µs, 77µs, 744µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"151,-366.98 151,-381.98 1180,-381.98 1180,-366.98 151,-366.98\"/>\n<text text-anchor=\"middle\" x=\"153.5\" y=\"-370.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"156,-366.98 156,-381.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-370.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control_msgs::msg::AckermannLateralCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1175,-366.98 1175,-381.98 \"/>\n<text text-anchor=\"middle\" x=\"1177.5\" y=\"-370.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651237083504&#45;&gt;187651239927824 -->\n<g id=\"edge26\" class=\"edge\">\n<title>187651237083504:out&#45;&gt;187651239927824:in</title>\n<g id=\"a_edge26\"><a xlink:title=\"/control/trajectory_follower/control_cmd (0.26ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1181.5,-374.48C1228.64,-374.48 1231.94,-408.48 1278,-418.48 1432.18,-451.98 1836.12,-461.22 1988,-418.48 2006.05,-413.4 2006.55,-403.34 2024,-396.48 2056.13,-383.87 2067.73,-380.16 2097.97,-379.57\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2098.03,-383.07 2108,-379.48 2097.97,-376.07 2098.03,-383.07\"/>\n</a>\n</g>\n</g>\n<!-- 187651238636368 -->\n<g id=\"node127\" class=\"node\">\n<title>187651238636368</title>\n<g id=\"a_node127\"><a xlink:title=\"1µs, 3µs, 134µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1313.5,-349.98 1313.5,-364.98 1952.5,-364.98 1952.5,-349.98 1313.5,-349.98\"/>\n<text text-anchor=\"middle\" x=\"1316\" y=\"-353.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1318.5,-349.98 1318.5,-364.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-353.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (ShiftDecider::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1947.5,-349.98 1947.5,-364.98 \"/>\n<text text-anchor=\"middle\" x=\"1950\" y=\"-353.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651237083504&#45;&gt;187651238636368 -->\n<g id=\"edge25\" class=\"edge\">\n<title>187651237083504:out&#45;&gt;187651238636368:in</title>\n<g id=\"a_edge25\"><a xlink:title=\"/control/trajectory_follower/control_cmd (0.43ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1181.5,-374.48C1236.45,-374.48 1251.71,-359.48 1301.85,-357.66\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1302.06,-361.16 1312,-357.48 1301.94,-354.16 1302.06,-361.16\"/>\n</a>\n</g>\n</g>\n<!-- 187651237165200 -->\n<g id=\"node100\" class=\"node\">\n<title>187651237165200</title>\n<g id=\"a_node100\"><a xlink:title=\"32µs, 83µs, 654µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"171.5,-332.98 171.5,-347.98 1159.5,-347.98 1159.5,-332.98 171.5,-332.98\"/>\n<text text-anchor=\"middle\" x=\"174\" y=\"-336.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"176.5,-332.98 176.5,-347.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-336.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control_msgs::msg::LongitudinalCommand*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1154.5,-332.98 1154.5,-347.98 \"/>\n<text text-anchor=\"middle\" x=\"1157\" y=\"-336.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651237165200&#45;&gt;187651239927824 -->\n<g id=\"edge28\" class=\"edge\">\n<title>187651237165200:out&#45;&gt;187651239927824:in</title>\n<g id=\"a_edge28\"><a xlink:title=\"/control/trajectory_follower/control_cmd (0.26ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1160.5,-340.48C1528.28,-340.48 1629.37,-263.93 1988,-345.48 2005.25,-349.41 2007.21,-356.91 2024,-362.48 2056.76,-373.36 2067.85,-378.48 2097.99,-379.35\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2097.95,-382.85 2108,-379.48 2098.05,-375.85 2097.95,-382.85\"/>\n</a>\n</g>\n</g>\n<!-- 187651237165200&#45;&gt;187651238636368 -->\n<g id=\"edge27\" class=\"edge\">\n<title>187651237165200:out&#45;&gt;187651238636368:in</title>\n<g id=\"a_edge27\"><a xlink:title=\"/control/trajectory_follower/control_cmd (0.43ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1160.5,-340.48C1224.68,-340.48 1242.41,-355.74 1301.7,-357.35\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1301.95,-360.85 1312,-357.48 1302.05,-353.85 1301.95,-360.85\"/>\n</a>\n</g>\n</g>\n<!-- 187650883819920 -->\n<g id=\"node101\" class=\"node\">\n<title>187650883819920</title>\n<g id=\"a_node101\"><a xlink:title=\"85370µs, 85370µs, 85370µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2992,-3060.98 2992,-3075.98 3468,-3075.98 3468,-3060.98 2992,-3060.98\"/>\n<text text-anchor=\"middle\" x=\"2994.5\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2997,-3060.98 2997,-3075.98 \"/>\n<text text-anchor=\"middle\" x=\"3230\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (MapTFGeneratorNode::?)(sensor_msgs::msg::PointCloud2*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3463,-3060.98 3463,-3075.98 \"/>\n<text text-anchor=\"middle\" x=\"3465.5\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;OUTPUT -->\n<g id=\"edge110\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge110\"><a xlink:title=\"/planning/mission_planning/route_marker\">\n<path fill=\"none\" stroke=\"black\" d=\"M958.5,-1195.48C1100.6,-1195.48 1135.92,-1186.15 1278,-1183.48 1630.1,-1176.87 2517.1,-1160.33 2862,-1231.48 3085.89,-1277.67 3119.05,-1407.6 3341.93,-1411.4\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.97,-1414.9 3352,-1411.48 3342.03,-1407.9 3341.97,-1414.9\"/>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;281471220449136 -->\n<g id=\"edge19\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;281471220449136:in</title>\n<g id=\"a_edge19\"><a xlink:title=\"/planning/mission_planning/route (2.77ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M954.5,-1204.48C954.5,-1228.54 112.32,-1224.61 89,-1230.48 80.33,-1232.67 75.7,-1231.87 71,-1239.48 55.64,-1264.34 55.64,-2266.63 71,-2291.48 75.7,-2299.09 80.35,-2298.22 89,-2300.48 96.68,-2302.49 212.74,-2300.12 247.03,-2305.13\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"245.91,-2308.45 256.5,-2308.48 248.24,-2301.85 245.91,-2308.45\"/>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;187650725588976 -->\n<g id=\"edge17\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;187650725588976:in</title>\n<g id=\"a_edge17\"><a xlink:title=\"/planning/mission_planning/route (0.46ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M958.5,-1195.48C1085.46,-1195.48 1135.82,-1160.88 1242,-1230.48 1292.57,-1263.63 1261.02,-1341.6 1310.73,-1350.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1310.74,-1354.14 1321,-1351.48 1311.33,-1347.16 1310.74,-1354.14\"/>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;187651235257712 -->\n<g id=\"edge21\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;187651235257712:in</title>\n<g id=\"a_edge21\"><a xlink:title=\"/planning/mission_planning/route (0.57ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M958.5,-1195.48C1085.46,-1195.48 1117.18,-1207.27 1242,-1230.48 1258.21,-1233.5 1261.81,-1236.33 1278,-1239.48 1434.39,-1269.96 1867.25,-1235.53 1988,-1339.48 2030.52,-1376.09 1979.84,-1425.87 2024,-1460.48 2107.28,-1525.76 2850.88,-1508.52 2991.59,-1507.53\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2992.01,-1511.02 3002,-1507.48 2991.99,-1504.02 2992.01,-1511.02\"/>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;187650227078464 -->\n<g id=\"edge16\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;187650227078464:in</title>\n<g id=\"a_edge16\"><a xlink:title=\"/planning/mission_planning/route (0.39ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M954.5,-1186.48C954.5,-1170.5 1229.46,-1188.38 1242,-1178.48 1290.41,-1140.28 1232.37,-1085.97 1278,-1044.48 1526.8,-818.29 1691.07,-965.64 2024,-918.48 2209.59,-892.2 2729.1,-954.67 2862,-822.48 2957.21,-727.78 2799.8,-614.09 2898,-522.48 2909.08,-512.14 3017.32,-526.52 3049.2,-520.02\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3051.4,-522.77 3058,-514.48 3047.67,-516.85 3051.4,-522.77\"/>\n</a>\n</g>\n</g>\n<!-- 187651237930272 -->\n<g id=\"node117\" class=\"node\">\n<title>187651237930272</title>\n<g id=\"a_node117\"><a xlink:title=\"4µs, 4µs, 4µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2964.5,-693.98 2964.5,-708.98 3809.5,-708.98 3809.5,-693.98 2964.5,-693.98\"/>\n<text text-anchor=\"middle\" x=\"2967\" y=\"-697.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2969.5,-693.98 2969.5,-708.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-697.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3804.5,-693.98 3804.5,-708.98 \"/>\n<text text-anchor=\"middle\" x=\"3807\" y=\"-697.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;187651237930272 -->\n<g id=\"edge20\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;187651237930272:in</title>\n<g id=\"a_edge20\"><a xlink:title=\"/planning/mission_planning/route (0.37ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M958.5,-1195.48C1084.73,-1195.48 1116.62,-1193.1 1242,-1178.48 1252.95,-1177.21 2013.12,-1044.23 2024,-1042.48 2209.86,-1012.58 2726.83,-1049.5 2862,-918.48 2926.85,-855.62 2832.17,-780.32 2898,-718.48 2906.61,-710.39 2942.48,-719.05 2958.83,-716.62\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2961.11,-719.29 2967,-710.48 2956.9,-713.69 2961.11,-719.29\"/>\n</a>\n</g>\n</g>\n<!-- 187651613335744 -->\n<g id=\"node132\" class=\"node\">\n<title>187651613335744</title>\n<g id=\"a_node132\"><a xlink:title=\"70µs, 70µs, 70µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2081.5,-1314.98 2081.5,-1329.98 2804.5,-1329.98 2804.5,-1314.98 2081.5,-1314.98\"/>\n<text text-anchor=\"middle\" x=\"2084\" y=\"-1318.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2086.5,-1314.98 2086.5,-1329.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1318.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (mission_planner::GoalPoseVisualizer::?)(autoware_auto_planning_msgs::msg::HADMapRoute*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2799.5,-1314.98 2799.5,-1329.98 \"/>\n<text text-anchor=\"middle\" x=\"2802\" y=\"-1318.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651612752912&#45;&gt;187651613335744 -->\n<g id=\"edge18\" class=\"edge\">\n<title>187651612752912:out&#45;&gt;187651613335744:in</title>\n<g id=\"a_edge18\"><a xlink:title=\"/planning/mission_planning/route (1.25ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M958.5,-1195.48C1187.78,-1195.48 1785.87,-1155.26 1988,-1263.48 2011.2,-1275.9 2001.76,-1296.41 2024,-1310.48 2042.32,-1322.07 2051.59,-1322.63 2069.66,-1322.53\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2070.02,-1326.03 2080,-1322.48 2069.98,-1319.03 2070.02,-1326.03\"/>\n</a>\n</g>\n</g>\n<!-- 187651612976832 -->\n<g id=\"node103\" class=\"node\">\n<title>187651612976832</title>\n<g id=\"a_node103\"><a xlink:title=\"93393µs, 93393µs, 93393µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"294,-1153.98 294,-1168.98 1037,-1168.98 1037,-1153.98 294,-1153.98\"/>\n<text text-anchor=\"middle\" x=\"296.5\" y=\"-1157.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"299,-1153.98 299,-1168.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1157.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (mission_planner::MissionPlannerLanelet2::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1032,-1153.98 1032,-1168.98 \"/>\n<text text-anchor=\"middle\" x=\"1034.5\" y=\"-1157.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650864460272 -->\n<g id=\"node105\" class=\"node\">\n<title>187650864460272</title>\n<g id=\"a_node105\"><a xlink:title=\"2µs, 5µs, 254µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"358,-779.98 358,-794.98 973,-794.98 973,-779.98 358,-779.98\"/>\n<text text-anchor=\"middle\" x=\"360.5\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"363,-779.98 363,-794.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareErrorMonitor::?)(autoware_auto_system_msgs::msg::AutowareState*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"968,-779.98 968,-794.98 \"/>\n<text text-anchor=\"middle\" x=\"970.5\" y=\"-783.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650864330336 -->\n<g id=\"node106\" class=\"node\">\n<title>187650864330336</title>\n<g id=\"a_node106\"><a xlink:title=\"130µs, 355µs, 1087µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"398,-745.98 398,-760.98 933,-760.98 933,-745.98 398,-745.98\"/>\n<text text-anchor=\"middle\" x=\"400.5\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"403,-745.98 403,-760.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (AutowareErrorMonitor::?)(diagnostic_msgs::msg::DiagnosticArray*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"928,-745.98 928,-760.98 \"/>\n<text text-anchor=\"middle\" x=\"930.5\" y=\"-749.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650864529200 -->\n<g id=\"node107\" class=\"node\">\n<title>187650864529200</title>\n<g id=\"a_node107\"><a xlink:title=\"5µs, 3917µs, 6594µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"542,-643.98 542,-658.98 789,-658.98 789,-643.98 542,-643.98\"/>\n<text text-anchor=\"middle\" x=\"544.5\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"547,-643.98 547,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (AutowareErrorMonitor::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"784,-643.98 784,-658.98 \"/>\n<text text-anchor=\"middle\" x=\"786.5\" y=\"-647.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650864529200&#45;&gt;OUTPUT -->\n<g id=\"edge99\" class=\"edge\">\n<title>187650864529200:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge99\"><a xlink:title=\"/diagnostics_err\">\n<path fill=\"none\" stroke=\"black\" d=\"M790.5,-651.48C991.31,-651.48 1047.47,-618.68 1242,-668.48 1259.33,-672.92 1261.15,-680.48 1278,-686.48 1447.92,-747.04 2721.98,-928.75 2862,-1042.48 2891.95,-1066.81 2872.7,-1092.35 2898,-1121.48 3052.75,-1299.72 3110.92,-1408.38 3341.94,-1411.42\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.98,-1414.92 3352,-1411.48 3342.02,-1407.92 3341.98,-1414.92\"/>\n</a>\n</g>\n</g>\n<!-- 187650864529200&#45;&gt;187650829768384 -->\n<g id=\"edge1\" class=\"edge\">\n<title>187650864529200:out&#45;&gt;187650829768384:in</title>\n<g id=\"a_edge1\"><a xlink:title=\"/system/emergency/hazard_status (0.50ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M790.5,-651.48C1017.57,-651.48 1076.83,-651.48 1298.98,-651.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1299,-654.98 1309,-651.48 1299,-647.98 1299,-654.98\"/>\n</a>\n</g>\n</g>\n<!-- 187650864529200&#45;&gt;187650830033680 -->\n<g id=\"edge2\" class=\"edge\">\n<title>187650864529200:out&#45;&gt;187650830033680:in</title>\n<g id=\"a_edge2\"><a xlink:title=\"/system/emergency/hazard_status (0.56ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M790.5,-651.48C993.56,-651.48 1046.53,-636.49 1242,-581.48 1258.69,-576.79 1261.09,-570.3 1278,-566.48 1426.09,-533.1 1469.75,-548.74 1616.7,-549.46\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1616.99,-552.96 1627,-549.48 1617.01,-545.96 1616.99,-552.96\"/>\n</a>\n</g>\n</g>\n<!-- 281472225931680 -->\n<g id=\"node112\" class=\"node\">\n<title>281472225931680</title>\n<g id=\"a_node112\"><a xlink:title=\"160µs, 225µs, 621µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"410,-1004.98 410,-1019.98 921,-1019.98 921,-1004.98 410,-1004.98\"/>\n<text text-anchor=\"middle\" x=\"412.5\" y=\"-1008.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"415,-1004.98 415,-1019.98 \"/>\n<text text-anchor=\"middle\" x=\"665.5\" y=\"-1008.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"916,-1004.98 916,-1019.98 \"/>\n<text text-anchor=\"middle\" x=\"918.5\" y=\"-1008.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 281472225931680&#45;&gt;OUTPUT -->\n<g id=\"edge94\" class=\"edge\">\n<title>281472225931680:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge94\"><a xlink:title=\"/planning/scenario_planning/status/no_start_reason\">\n<path fill=\"none\" stroke=\"black\" d=\"M922.5,-1012.48C1064.7,-1012.48 1100.55,-1014.9 1242,-1029.48 1591.77,-1065.54 1673.89,-1116.89 2024,-1149.48 2209.52,-1166.76 2680.99,-1133.29 2862,-1177.48 3093.13,-1233.91 3110.22,-1406.5 3341.88,-1411.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.96,-1414.88 3352,-1411.48 3342.04,-1407.88 3341.96,-1414.88\"/>\n</a>\n</g>\n</g>\n<!-- 187651237948160 -->\n<g id=\"node114\" class=\"node\">\n<title>187651237948160</title>\n<g id=\"a_node114\"><a xlink:title=\"1µs, 4µs, 90µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2981,-795.98 2981,-810.98 3793,-810.98 3793,-795.98 2981,-795.98\"/>\n<text text-anchor=\"middle\" x=\"2983.5\" y=\"-799.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2986,-795.98 2986,-810.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-799.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3788,-795.98 3788,-810.98 \"/>\n<text text-anchor=\"middle\" x=\"3790.5\" y=\"-799.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651235161760 -->\n<g id=\"node116\" class=\"node\">\n<title>187651235161760</title>\n<g id=\"a_node116\"><a xlink:title=\"22µs, 765µs, 5981µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"3154,-727.98 3154,-742.98 3620,-742.98 3620,-727.98 3154,-727.98\"/>\n<text text-anchor=\"middle\" x=\"3156.5\" y=\"-731.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3159,-727.98 3159,-742.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-731.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (lane_departure_checker::LaneDepartureCheckerNode::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3615,-727.98 3615,-742.98 \"/>\n<text text-anchor=\"middle\" x=\"3617.5\" y=\"-731.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651238195664 -->\n<g id=\"node118\" class=\"node\">\n<title>187651238195664</title>\n<g id=\"a_node118\"><a xlink:title=\"2µs, 4µs, 85µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2981,-761.98 2981,-776.98 3793,-776.98 3793,-761.98 2981,-761.98\"/>\n<text text-anchor=\"middle\" x=\"2983.5\" y=\"-765.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2986,-761.98 2986,-776.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-765.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::Trajectory*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3788,-761.98 3788,-776.98 \"/>\n<text text-anchor=\"middle\" x=\"3790.5\" y=\"-765.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651237831536 -->\n<g id=\"node119\" class=\"node\">\n<title>187651237831536</title>\n<g id=\"a_node119\"><a xlink:title=\"26800µs, 26800µs, 26800µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2973.5,-625.98 2973.5,-640.98 3800.5,-640.98 3800.5,-625.98 2973.5,-625.98\"/>\n<text text-anchor=\"middle\" x=\"2976\" y=\"-629.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2978.5,-625.98 2978.5,-640.98 \"/>\n<text text-anchor=\"middle\" x=\"3387\" y=\"-629.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"3795.5,-625.98 3795.5,-640.98 \"/>\n<text text-anchor=\"middle\" x=\"3798\" y=\"-629.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650884621760 -->\n<g id=\"node120\" class=\"node\">\n<title>187650884621760</title>\n<g id=\"a_node120\"><a xlink:title=\"14734µs, 14734µs, 14734µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2109.5,-1267.98 2109.5,-1282.98 2776.5,-1282.98 2776.5,-1267.98 2109.5,-1267.98\"/>\n<text text-anchor=\"middle\" x=\"2112\" y=\"-1271.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2114.5,-1267.98 2114.5,-1282.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1271.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (Lanelet2MapVisualizationNode::?)(autoware_auto_mapping_msgs::msg::HADMapBin*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2771.5,-1267.98 2771.5,-1282.98 \"/>\n<text text-anchor=\"middle\" x=\"2774\" y=\"-1271.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187650884621760&#45;&gt;OUTPUT -->\n<g id=\"edge102\" class=\"edge\">\n<title>187650884621760:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge102\"><a xlink:title=\"/map/vector_map_marker\">\n<path fill=\"none\" stroke=\"black\" d=\"M2778,-1275.48C3036.72,-1275.48 3088.48,-1407.92 3341.74,-1411.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.98,-1414.91 3352,-1411.48 3342.02,-1407.91 3341.98,-1414.91\"/>\n</a>\n</g>\n</g>\n<!-- 281471555072288&#45;&gt;OUTPUT -->\n<g id=\"edge109\" class=\"edge\">\n<title>281471555072288:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge109\"><a xlink:title=\"/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/debug/marker\">\n<path fill=\"none\" stroke=\"black\" d=\"M982.5,-1310.48C1098.08,-1310.48 1127.58,-1309.85 1242,-1293.48 1258.23,-1291.16 1261.74,-1287.51 1278,-1285.48 1627.33,-1241.92 2513.75,-1212.04 2862,-1263.48 3083.65,-1296.23 3123.33,-1408.03 3341.8,-1411.41\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.97,-1414.91 3352,-1411.48 3342.03,-1407.91 3341.97,-1414.91\"/>\n</a>\n</g>\n</g>\n<!-- 281471555072288&#45;&gt;187650725528480 -->\n<g id=\"edge29\" class=\"edge\">\n<title>281471555072288:out&#45;&gt;187650725528480:in</title>\n<g id=\"a_edge29\"><a xlink:title=\"/planning/scenario_planning/lane_driving/trajectory (0.92ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M982.5,-1310.48C1098.08,-1310.48 1146.24,-1262.76 1242,-1327.48 1272.63,-1348.19 1249.71,-1378.67 1278,-1402.48 1296.39,-1417.96 1307.16,-1419.38 1327.77,-1419.48\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1328,-1422.98 1338,-1419.48 1328,-1415.98 1328,-1422.98\"/>\n</a>\n</g>\n</g>\n<!-- 281471555210208&#45;&gt;OUTPUT -->\n<g id=\"edge103\" class=\"edge\">\n<title>281471555210208:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge103\"><a xlink:title=\"/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/debug/marker\">\n<path fill=\"none\" stroke=\"black\" d=\"M1039.5,-1378.48C1129.82,-1378.48 1156.16,-1389.56 1242,-1361.48 1259.82,-1355.65 1259.95,-1344.56 1278,-1339.48 1581.76,-1254.02 1675.34,-1296.86 1988,-1339.48 2004.45,-1341.73 2007.6,-1346.87 2024,-1349.48 2392.18,-1408.19 2489.59,-1369.92 2862,-1387.48 3076.39,-1397.59 3132.23,-1411.06 3341.9,-1411.47\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3342,-1414.97 3352,-1411.48 3342,-1407.97 3342,-1414.97\"/>\n</a>\n</g>\n</g>\n<!-- 281471555210208&#45;&gt;187650725528480 -->\n<g id=\"edge30\" class=\"edge\">\n<title>281471555210208:out&#45;&gt;187650725528480:in</title>\n<g id=\"a_edge30\"><a xlink:title=\"/planning/scenario_planning/lane_driving/trajectory (0.92ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1039.5,-1378.48C1130.3,-1378.48 1152.08,-1392.93 1242,-1405.48 1281.03,-1410.93 1292.89,-1418.12 1327.57,-1419.31\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"1327.94,-1422.82 1338,-1419.48 1328.06,-1415.82 1327.94,-1422.82\"/>\n</a>\n</g>\n</g>\n<!-- 187651238636192 -->\n<g id=\"node126\" class=\"node\">\n<title>187651238636192</title>\n<g id=\"a_node126\"><a xlink:title=\"1µs, 40µs, 643µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"1546.5,-383.98 1546.5,-398.98 1719.5,-398.98 1719.5,-383.98 1546.5,-383.98\"/>\n<text text-anchor=\"middle\" x=\"1549\" y=\"-387.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1551.5,-383.98 1551.5,-398.98 \"/>\n<text text-anchor=\"middle\" x=\"1633\" y=\"-387.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (ShiftDecider::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"1714.5,-383.98 1714.5,-398.98 \"/>\n<text text-anchor=\"middle\" x=\"1717\" y=\"-387.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651238636192&#45;&gt;187651239979264 -->\n<g id=\"edge32\" class=\"edge\">\n<title>187651238636192:out&#45;&gt;187651239979264:in</title>\n<g id=\"a_edge32\"><a xlink:title=\"/control/shift_decider/gear_cmd (0.83ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M1721,-391.48C1839.91,-391.48 1882.82,-429.94 1988,-374.48 2010.97,-362.38 2001.43,-341.3 2024,-328.48 2073.14,-300.58 2095.31,-310.15 2147.83,-311.36\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2147.96,-314.87 2158,-311.48 2148.04,-307.87 2147.96,-314.87\"/>\n</a>\n</g>\n</g>\n<!-- 187651165396336&#45;&gt;OUTPUT -->\n<g id=\"edge100\" class=\"edge\">\n<title>187651165396336:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge100\"><a xlink:title=\"/planning/scenario_planning/motion_velocity_smoother/stop_speed_exceeded\">\n<path fill=\"none\" stroke=\"black\" d=\"M2860,-1131.48C2860,-1254.09 3207.84,-1403.67 3341.96,-1411.19\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.9,-1414.69 3352,-1411.48 3342.11,-1407.69 3341.9,-1414.69\"/>\n</a>\n</g>\n</g>\n<!-- 187651165396336&#45;&gt;187651235242032 -->\n<g id=\"edge13\" class=\"edge\">\n<title>187651165396336:out&#45;&gt;187651235242032:in</title>\n<g id=\"a_edge13\"><a xlink:title=\"/planning/scenario_planning/trajectory (1.06ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2862,-1122.48C2880.38,-1122.48 2877.72,-1098.72 2888.21,-1089.81\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2889.66,-1093.01 2898,-1086.48 2887.41,-1086.38 2889.66,-1093.01\"/>\n</a>\n</g>\n</g>\n<!-- 187651165396336&#45;&gt;187650857875248 -->\n<g id=\"edge11\" class=\"edge\">\n<title>187651165396336:out&#45;&gt;187650857875248:in</title>\n<g id=\"a_edge11\"><a xlink:title=\"/planning/scenario_planning/trajectory (0.35ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2860,-1131.48C2860,-1323.83 2107.12,-1108.86 2006,-1272.48 1983.57,-1308.78 1983.57,-1332.19 2006,-1368.48 2015.66,-1384.12 2039.77,-1374.16 2049.17,-1381.14\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2045.97,-1382.56 2053,-1390.48 2052.44,-1379.9 2045.97,-1382.56\"/>\n</a>\n</g>\n</g>\n<!-- 187651165396336&#45;&gt;187651234294336 -->\n<g id=\"edge12\" class=\"edge\">\n<title>187651165396336:out&#45;&gt;187651234294336:in</title>\n<g id=\"a_edge12\"><a xlink:title=\"/planning/scenario_planning/trajectory (0.64ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2862,-1122.48C2915.98,-1122.48 2878.09,-1056.66 2898,-1006.48 2904.74,-989.51 2915.23,-985.08 2918.78,-971.75\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2922.29,-971.83 2920,-961.48 2915.34,-971 2922.29,-971.83\"/>\n</a>\n</g>\n</g>\n<!-- 187651165396336&#45;&gt;187651238195664 -->\n<g id=\"edge14\" class=\"edge\">\n<title>187651165396336:out&#45;&gt;187651238195664:in</title>\n<g id=\"a_edge14\"><a xlink:title=\"/planning/scenario_planning/trajectory (0.58ms)\">\n<path fill=\"none\" stroke=\"black\" d=\"M2860,-1113.48C2860,-1109.82 2861.35,-1109.09 2862,-1105.48 2874.68,-1035.28 2847.09,-836.46 2898,-786.48 2908.84,-775.84 2956.83,-789.28 2975.51,-785.31\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"2977.97,-787.81 2983,-778.48 2973.25,-782.64 2977.97,-787.81\"/>\n</a>\n</g>\n</g>\n<!-- 187651165497712 -->\n<g id=\"node130\" class=\"node\">\n<title>187651165497712</title>\n<g id=\"a_node130\"><a xlink:title=\"0µs, 0µs, 0µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2049,-1046.98 2049,-1061.98 2837,-1061.98 2837,-1046.98 2049,-1046.98\"/>\n<text text-anchor=\"middle\" x=\"2051.5\" y=\"-1050.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2054,-1046.98 2054,-1061.98 \"/>\n<text text-anchor=\"middle\" x=\"2443\" y=\"-1050.78\" font-family=\"Times,serif\" font-size=\"14.00\">void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(tier4_planning_msgs::msg::VelocityLimit*)</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2832,-1046.98 2832,-1061.98 \"/>\n<text text-anchor=\"middle\" x=\"2834.5\" y=\"-1050.78\" font-family=\"Times,serif\" font-size=\"14.00\"> </text>\n</a>\n</g>\n</g>\n<!-- 187651613335744&#45;&gt;OUTPUT -->\n<g id=\"edge111\" class=\"edge\">\n<title>187651613335744:out&#45;&gt;OUTPUT:in</title>\n<g id=\"a_edge111\"><a xlink:title=\"/planning/mission_planning/echo_back_goal_pose\">\n<path fill=\"none\" stroke=\"black\" d=\"M2806,-1322.48C3048.39,-1322.48 3104.56,-1408.98 3341.67,-1411.43\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"3341.98,-1414.93 3352,-1411.48 3342.02,-1407.93 3341.98,-1414.93\"/>\n</a>\n</g>\n</g>\n<!-- 281470279497792 -->\n<g id=\"node133\" class=\"node\">\n<title>281470279497792</title>\n<g id=\"a_node133\"><a xlink:title=\"146µs, 182µs, 437µs\">\n<polygon fill=\"none\" stroke=\"black\" points=\"2422,-3060.98 2422,-3075.98 2596,-3075.98 2596,-3060.98 2422,-3060.98\"/>\n<text text-anchor=\"middle\" x=\"2424.5\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2427,-3060.98 2427,-3075.98 \"/>\n<text text-anchor=\"middle\" x=\"2509\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\">void (HDDMonitor::?)()</text>\n<polyline fill=\"none\" stroke=\"black\" points=\"2591,-3060.98 2591,-3075.98 \"/>\n<text text-anchor=\"middle\" x=\"2593.5\" y=\"-3064.78\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"red\"> </text>\n</a>\n</g>\n</g>\n</g>\n</svg>\n",
"text/plain": [
"<graphviz.graphs.Digraph at 0x7ff7a78b04f0>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"#################################################\n",
"# Plot DFG\n",
"#################################################\n",
"\n",
"import graphviz as gv\n",
"\n",
"g = gv.Digraph('G', filename=\"latency_graph.gv\", node_attr={'shape': 'record', 'margin': '0.00001', 'width': '0.00001', 'height': '0.001'}, graph_attr={'pack': '1'})\n",
"g.graph_attr['rankdir'] = 'LR'\n",
"\n",
"g.node(\"INPUT\", gv.nohtml(\"{INPUT |<out>}\"))\n",
"g.node(\"OUTPUT\", gv.nohtml(\"{<in> |OUTPUT}\"))\n",
"\n",
"nodes_to_cbs = {}\n",
"export_dict = {}\n",
"\n",
"for vert in latency_graph.verts:\n",
" vert: CallbackObject\n",
"\n",
" if isinstance(vert.owner, Timer):\n",
" owner_nodes = vert.owner.nodes\n",
" elif isinstance(vert.owner, SubscriptionObject):\n",
" owner_nodes = [vert.owner.subscription.node]\n",
" else:\n",
" owner_nodes = []\n",
"\n",
" if len(owner_nodes) > 1:\n",
" raise RuntimeError(f\"CB has owners {', '.join(map(lambda n: n.path, owner_nodes))}\")\n",
" elif not owner_nodes:\n",
" print(\"[WARN] CB has no owners\")\n",
" continue\n",
"\n",
" owner = owner_nodes[0]\n",
" if not owner in nodes_to_cbs: nodes_to_cbs[owner] = []\n",
" nodes_to_cbs[owner].append(vert)\n",
" if not owner.path in export_dict: export_dict[owner.path] = []\n",
"\n",
"for node, cbs in nodes_to_cbs.items():\n",
" with g.subgraph(name=f\"cluster_{node.path}\") as c:\n",
" c.attr(label=node.path)\n",
" c.attr(margin='0.0')\n",
" c.attr(bgcolor='lightgray')\n",
"\n",
" for cb in cbs:\n",
" cb: CallbackObject\n",
" pretty_sym = Ros2DataModelUtil._prettify(None, callback_symbols[cb.callback_object].symbol)\n",
" pretty_sym = re.sub(r\"std::shared_ptr<(.*?) *(const)?>\", r\"\\1*\", pretty_sym)\n",
" pretty_sym = pretty_sym.replace('{', '\\\\{').replace('}', '\\\\}')\n",
"\n",
" export_dict[node.path].append({cb.id: {\n",
" 'symbol': pretty_sym, \n",
" 'ins': sum(map(lambda k: k[1].id == cb.id, latency_graph.edges.keys())) + sum(map(lambda k: k.id == cb.id, latency_graph.starts.keys())), \n",
" 'outs': sum(map(lambda k: k[0].id == cb.id, latency_graph.edges.keys())) + sum(map(lambda k: k.id == cb.id, latency_graph.ends.keys()))\n",
" }})\n",
"\n",
" cb_durations = np.array(list(map(lambda inst: inst.duration.total_seconds(), cb.callback_instances)))\n",
" if len(cb_durations) == 0:\n",
" cb_durations = np.zeros(1)\n",
" cb_dur_stats = (cb_durations.min(), cb_durations.mean(), cb_durations.max())\n",
" c.node(str(cb.id), gv.nohtml(f\"{{<in> |{pretty_sym} |<out>}}\"), tooltip=f\"{cb_dur_stats[0]*1e6:.0f}µs, {cb_dur_stats[1]*1e6:.0f}µs, {cb_dur_stats[2]*1e6:.0f}µs\", fontcolor=('red' if isinstance(cb.owner, Timer) else 'black'))\n",
"\n",
"\n",
"for (c1, c2), (topic, lat_stats) in latency_graph.edges.items():\n",
" g.edge(f\"{c1.id}:out\", f\"{c2.id}:in\", tooltip=f\"{topic.name} ({lat_stats.mean()*1000:.2f}ms)\")\n",
"\n",
"for c, t in latency_graph.starts.items():\n",
" g.edge(\"INPUT:out\", f\"{c.id}:in\", tooltip=t.name)\n",
"\n",
"for c, t in latency_graph.ends.items():\n",
" g.edge(f\"{c.id}:out\", \"OUTPUT:in\", tooltip=t.name)\n",
"\n",
"for n, deps in node_internal_deps.items():\n",
" for cb, dep_cbs in deps.items():\n",
" for dep_cb in dep_cbs:\n",
" g.edge(f\"{dep_cb.id}:out\", f\"{cb.id}:in\", tooltip=\"node-internal data dependency\", color='red')\n",
"\n",
"with open(\"settings/node-cbs.yaml\", \"w\") as f:\n",
" yaml = YAML()\n",
" yaml.dump(export_dict, f)\n",
"\n",
"g.save(\"latency_graph.gv\")\n",
"\n",
"g"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"....................................*.......................................*.......................................*........................................*.......................................*...#*....................................*.......................................*.......................................*.........................................*.......................................*.......................................*.......................................*.....#*..........................................*.......................................*.......................................*.......................................*.....#**.....................................*.......................................*.......................................*.......................................*.......................................*.......................................*.......................................*.......................................*.......................................*.......#*....................................*.......................................*...#**#***.****.**.#**....................................*.......................................*........................................*.......................................*.......................................*.........................................*........................................*.......................................*.........................................*.......................................*.......................................*.......................................*.......................................*.......................................*.........................................*............................................*.......................................*.........................................*.........................................*.......................................*...........................................*........................................*.......................................*.........................................*.......................................*..........................................*.......................................*.........................................*...#**....................................*.....#****.........................................*.......................................*.....*.===== PATH 0 =====\n",
"===== PATH 1 =====\n",
"===== PATH 2 =====\n",
"===== PATH 3 =====\n",
"===== PATH 4 =====\n",
"/diagnostics 56.812ms 56.812ms\n",
"===== PATH 5 =====\n",
"===== PATH 6 =====\n",
"===== PATH 7 =====\n",
"===== PATH 8 =====\n",
"===== PATH 9 =====\n",
"===== PATH 10 =====\n",
"===== PATH 11 =====\n",
"===== PATH 12 =====\n",
"===== PATH 13 =====\n",
"===== PATH 14 =====\n",
"===== PATH 15 =====\n",
"===== PATH 16 =====\n",
"===== PATH 17 =====\n",
"===== PATH 18 =====\n",
"===== PATH 19 =====\n",
"===== PATH 20 =====\n",
"===== PATH 21 =====\n",
"===== PATH 22 =====\n",
"===== PATH 23 =====\n",
"===== PATH 24 =====\n",
"===== PATH 25 =====\n",
"===== PATH 26 =====\n",
"===== PATH 27 =====\n",
"===== PATH 28 =====\n",
"/diagnostics 56.812ms 56.812ms\n",
"===== PATH 29 =====\n",
"===== PATH 30 =====\n",
"===== PATH 31 =====\n",
"===== PATH 32 =====\n",
"===== PATH 33 =====\n",
"===== PATH 34 =====\n",
"===== PATH 35 =====\n",
"===== PATH 36 =====\n",
"===== PATH 37 =====\n",
"===== PATH 38 =====\n",
"===== PATH 39 =====\n",
"===== PATH 40 =====\n",
"===== PATH 41 =====\n",
"===== PATH 42 =====\n",
"===== PATH 43 =====\n",
"===== PATH 44 =====\n",
"===== PATH 45 =====\n",
"===== PATH 46 =====\n",
"===== PATH 47 =====\n",
"===== PATH 48 =====\n",
"===== PATH 49 =====\n",
"===== PATH 50 =====\n",
"===== PATH 51 =====\n",
"===== PATH 52 =====\n"
]
}
],
"source": [
"\n",
"#################################################\n",
"# Transitively add latencies to get E2E latency\n",
"#################################################\n",
"\n",
"@dataclass\n",
"class PathElem:\n",
" src: CallbackObject\n",
" dst: CallbackObject\n",
" topic: Topic\n",
" latencies: LatencyStats\n",
"\n",
"def get_latency_paths(cb1, cb_to_cb_to_lat_stats, goals, parent_path=[]) -> List[List[PathElem]]:\n",
" if cb1 in goals:\n",
" return [parent_path]\n",
"\n",
" if cb1 not in cb_to_cb_to_lat_stats:\n",
" return [parent_path]\n",
"\n",
" paths = []\n",
" for cb2 in cb_to_cb_to_lat_stats[cb1]:\n",
" for topic, lats in cb_to_cb_to_lat_stats[cb1][cb2].items():\n",
" new_paths = get_latency_paths(cb2, cb_to_cb_to_lat_stats, goals, parent_path + [PathElem(cb1, cb2, topic, lats)])\n",
" paths += new_paths\n",
"\n",
" return paths\n",
"\n",
"\n",
"cb_to_cb_to_lat_stats = {}\n",
"for (pub, cb2), lat_stats in pub_cb_to_lat_stats.items():\n",
" if pub not in pub_to_scored_cb:\n",
" #print(f\"[WARN] Pub on topic {pub.topic.name} not in pub_to_scored_cb, skipping.\")\n",
" print(end='.')\n",
" continue\n",
" if len(pub_to_scored_cb[pub]) > 1:\n",
" #print(f\"[WARN] Pub on topic {pub.topic.name} has {len(pub_to_scored_cb[pub])} callbacks.\")\n",
" print(end='#')\n",
" for cb1, score in pub_to_scored_cb[pub]:\n",
" if score != 1.0:\n",
" #print(f\"[WARN] Callback for topic {pub.topic.name} only has a score of {score*100:.3f}%\")\n",
" print(end='*')\n",
" if cb1 in cb_to_cb_to_lat_stats and cb2 in cb_to_cb_to_lat_stats[cb1]:\n",
" #print(f\"[WARN] Pair of callbacks already in dict!\")\n",
" print(end='_')\n",
" else:\n",
" if cb1 not in cb_to_cb_to_lat_stats:\n",
" cb_to_cb_to_lat_stats[cb1] = {}\n",
" if cb2 not in cb_to_cb_to_lat_stats[cb1]:\n",
" cb_to_cb_to_lat_stats[cb1][cb2] = {}\n",
" cb_to_cb_to_lat_stats[cb1][cb2][pub.topic] = pub_cb_to_lat_stats[(pub, cb2)]\n",
"\n",
"latency_paths = []\n",
"for cb in inputs:\n",
" latency_paths += get_latency_paths(cb, cb_to_cb_to_lat_stats, outputs.keys())\n",
"\n",
"def pl(l, lvl=0):\n",
" if isinstance(l, list):\n",
" print(\" \"*lvl, type(l), len(l))\n",
" for i in l:\n",
" pl(i, lvl+1)\n",
" else:\n",
" print(\" \"*lvl, type(l))\n",
"\n",
"#pl(latency_paths)\n",
"\n",
"for i, path in enumerate(latency_paths):\n",
" print(\"===== PATH\", i, \"=====\")\n",
" #print(type(path))\n",
" tot_lat = 0.0\n",
" for item in path:\n",
" tot_lat += item.latencies.mean()\n",
" print(f\"{item.topic.name:120s} {item.latencies.mean()*1000:.3f}ms {tot_lat*1000:.3f}ms\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig = plt.figure(figsize=(30, 10))\n",
"ax = fig.add_subplot()\n",
"\n",
"for lat_stats in pub_cb_to_lat_stats.values():\n",
" ax.plot(lat_stats.index, np.where(np.isnan(lat_stats), 0, lat_stats))\n",
"\n",
"ax.set_ylim(0, .1)\n",
"ax.set_xlim(655+1.652795e9, 660+1.652795e9)\n",
"None"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"interpreter": {
"hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a"
},
"kernelspec": {
"display_name": "Python 3.8.10 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}