dataflow-analysis/trace-analysis.ipynb
2022-05-31 16:19:22 +02:00

1452 lines
165 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import sys\n",
"import babeltrace\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(\"/home/adlink/ros2-workspace/install/tracetools_read/lib/python3.8/site-packages/\")\n",
"sys.path.append(\"/home/adlink/ros2-workspace/src/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"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"found converted file: /home/adlink/.ros/tracing/autoware-trace/converted\n",
" [100%] [Ros2Handler]\n"
]
}
],
"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(\"~/.ros/tracing/autoware-trace/\")\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": 35,
"metadata": {},
"outputs": [],
"source": [
"if False:\n",
" n=1\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": 36,
"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 os.path.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": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Did not find pickled ROS objects, extracting...\n",
"Processed 61 nodes\n",
"Processed 264 publishers\n",
"Processed 212 subscriptions\n",
"Processed 67 timers\n",
"Processed 31 timer-node links\n",
"Processed 201 subscription objects\n",
"Processed 483 callback objects\n",
"Processed 483 callback symbols\n",
"Processed 183512 publish instances\n",
"Processed 390810 callback instances\n",
"Processed 161 topics\n",
"Caching dynamic properties...\n",
"Cached node properties\n",
"Cached publisher properties\n",
"Cached subscription properties\n",
"Cached timer properties\n",
"Cached callback object properties\n",
"Cached callback symbol properties\n",
"Cached topic properties\n",
"Pickling...\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",
" ]\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": 83,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1026 Subscription n=system_monitor_container t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1042 Subscription n=robot_state_publisher t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1070 Subscription n=system_error_monitor t=/parameter_events \n",
"void (AutowareErrorMonitor::?)(diagnostic_msgs::msg::DiagnosticArrayconst*) : i=1780 Subscription n=system_error_monitor t=/diagnostics_agg \n",
"void (AutowareErrorMonitor::?)(tier4_control_msgs::msg::GateModeconst*) : i=1626 Subscription n=system_error_monitor t=/control/current_gate_mode \n",
"void (AutowareErrorMonitor::?)(autoware_auto_system_msgs::msg::AutowareStateconst*) : i=1772 Subscription n=system_error_monitor t=/autoware/state \n",
"void (AutowareErrorMonitor::?)(autoware_auto_vehicle_msgs::msg::ControlModeReportconst*) : i=6466 Subscription n=system_error_monitor t=/vehicle/status/control_mode \n",
"void (robot_state_publisher::RobotStatePublisher::?)(sensor_msgs::msg::JointState*) : i= 0 Subscription n=robot_state_publisher t=/joint_states \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 950 Subscription n=aggregator_node t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1035 Subscription n=emergency_handler t=/parameter_events \n",
"void (EmergencyHandler::?)(autoware_auto_system_msgs::msg::HazardStatusStampedconst*) : i=1626 Subscription n=emergency_handler t=/system/emergency/hazard_status\n",
"void (EmergencyHandler::?)(autoware_auto_control_msgs::msg::AckermannControlCommandconst*) : i=10468 Subscription n=emergency_handler t=/control/command/control_cmd \n",
"void (EmergencyHandler::?)(nav_msgs::msg::Odometryconst*) : i=6466 Subscription n=emergency_handler t=/localization/kinematic_state \n",
"void (EmergencyHandler::?)(autoware_auto_vehicle_msgs::msg::ControlModeReportconst*) : i=6466 Subscription n=emergency_handler t=/vehicle/status/control_mode \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1026 Subscription n=map_container t=/parameter_events \n",
"void (HeaderlessHeartbeatChecker<autoware_auto_system_msgs::msg::HazardStatusStamped>::?)(autowar...: i=1626 Subscription n=emergency_handler t=/system/emergency/hazard_status\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1030 Subscription n=ad_service_state_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i=1026 Subscription n=transform_listener_impl_aaaab90b38b0 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaaab90b38b0 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaab90b38b0 t=/tf_static \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 940 Subscription n=mission_planning_container t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 907 Subscription n=scenario_selector t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 903 Subscription n=transform_listener_impl_aaaad6cbbcb8 t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 907 Subscription n=external_velocity_limit_selector t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaaad6cbbcb8 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaad6cbbcb8 t=/tf_static \n",
"void (AutowareStateMonitorNode::?)(autoware_auto_vehicle_msgs::msg::Engageconst*) : i=1626 Subscription n=ad_service_state_monitor t=/api/autoware/get/engage \n",
"void (AutowareStateMonitorNode::?)(autoware_auto_vehicle_msgs::msg::ControlModeReportconst*) : i=6466 Subscription n=ad_service_state_monitor t=/vehicle/status/control_mode \n",
"void (AutowareStateMonitorNode::?)(autoware_auto_planning_msgs::msg::HADMapRouteconst*) : i= 1 Subscription n=ad_service_state_monitor t=/planning/mission_planning/route\n",
"void (AutowareStateMonitorNode::?)(nav_msgs::msg::Odometryconst*) : i=6466 Subscription n=ad_service_state_monitor t=/localization/kinematic_state \n",
"void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectoryconst*) : i= 978 Subscription n=scenario_selector t=/planning/scenario_planning/lane_driving/trajectory\n",
"void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::Trajectoryconst*) : i= 101 Subscription n=scenario_selector t=/planning/scenario_planning/parking/trajectory\n",
"void (ScenarioSelectorNode::?)(autoware_auto_mapping_msgs::msg::HADMapBinconst*) : i= 1 Subscription n=scenario_selector t=/map/vector_map \n",
"void (ScenarioSelectorNode::?)(autoware_auto_planning_msgs::msg::HADMapRouteconst*) : i= 1 Subscription n=scenario_selector t=/planning/mission_planning/route\n",
"void (ScenarioSelectorNode::?)(nav_msgs::msg::Odometryconst*) : i=6466 Subscription n=scenario_selector t=/localization/kinematic_state \n",
"void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimitconst*) : i= 0 Subscription n=external_velocity_limit_selector t=/planning/scenario_planning/max_velocity_default\n",
"void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimitconst*) : i= 0 Subscription n=external_velocity_limit_selector t=/planning/scenario_planning/max_velocity_candidates\n",
"void (ExternalVelocityLimitSelectorNode::?)(tier4_planning_msgs::msg::VelocityLimitClearCommandco...: i= 0 Subscription n=external_velocity_limit_selector t=/planning/scenario_planning/clear_velocity_limit\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 934 Subscription n=motion_velocity_smoother t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 930 Subscription n=transform_listener_impl_aaaaf1071f80 t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 887 Subscription n=behavior_planning_container t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 887 Subscription n=motion_planning_container t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaaaf1071f80 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf1071f80 t=/tf_static \n",
"void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(autoware_auto_planning_msgs::msg::...: i=1079 Subscription n=motion_velocity_smoother t=/planning/scenario_planning/scenario_selector/trajectory\n",
"void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(nav_msgs::msg::Odometryconst*) : i=6267 Subscription n=motion_velocity_smoother t=/localization/kinematic_state \n",
"void (motion_velocity_smoother::MotionVelocitySmootherNode::?)(tier4_planning_msgs::msg::Velocity...: i= 0 Subscription n=motion_velocity_smoother t=/planning/scenario_planning/max_velocity\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 887 Subscription n=parking_container t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 888 Subscription n=control_container t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 896 Subscription n=planning_error_monitor t=/parameter_events \n",
"void (planning_diagnostics::PlanningErrorMonitorNode::?)(autoware_auto_planning_msgs::msg::Trajec...: i=1078 Subscription n=planning_error_monitor t=/planning/scenario_planning/trajectory\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 562 Subscription n=cpu_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 874 Subscription n=hdd_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 873 Subscription n=obstacle_avoidance_planner t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 875 Subscription n=lateral_controller_node_exe t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 863 Subscription n=transform_listener_impl_aaaaf51e51c0 t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 862 Subscription n=transform_listener_impl_aaaaf153e160 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6465 Subscription n=transform_listener_impl_aaaaf51e51c0 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaaaf153e160 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf51e51c0 t=/tf_static \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf153e160 t=/tf_static \n",
"void (ObstacleAvoidancePlanner::?)(autoware_auto_planning_msgs::msg::Path*) : i= 978 Subscription n=obstacle_avoidance_planner t=/planning/scenario_planning/lane_driving/behavior_planning/path\n",
"void (ObstacleAvoidancePlanner::?)(nav_msgs::msg::Odometry*) : i=6141 Subscription n=obstacle_avoidance_planner t=/localization/kinematic_state \n",
"void (ObstacleAvoidancePlanner::?)(autoware_auto_perception_msgs::msg::PredictedObjects*) : i=1582 Subscription n=obstacle_avoidance_planner t=/perception/object_recognition/objects\n",
"void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(autoware_auto_p...: i=1078 Subscription n=lateral_controller_node_exe t=/planning/scenario_planning/trajectory\n",
"void (ObstacleAvoidancePlanner::?)(tier4_planning_msgs::msg::EnableAvoidance*) : i= 0 Subscription n=obstacle_avoidance_planner t=/planning/scenario_planning/lane_driving/obstacle_avoidance_approval\n",
"void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(autoware_auto_v...: i=6285 Subscription n=lateral_controller_node_exe t=/vehicle/status/steering_status\n",
"void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)(nav_msgs::msg::...: i=6285 Subscription n=lateral_controller_node_exe t=/localization/kinematic_state \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 710 Subscription n=mem_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 703 Subscription n=lanelet2_map_loader t=/parameter_events \n",
"void (diagnostic_aggregator::Aggregator::?)(diagnostic_msgs::msg::DiagnosticArray*) : i=10587 Subscription n=aggregator_node t=/diagnostics \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 695 Subscription n=net_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 683 Subscription n=lanelet2_map_visualization t=/parameter_events \n",
"void (Lanelet2MapVisualizationNode::?)(autoware_auto_mapping_msgs::msg::HADMapBinconst*) : i= 1 Subscription n=lanelet2_map_visualization t=/map/vector_map \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 677 Subscription n=ntp_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 669 Subscription n=mission_planner t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 665 Subscription n=transform_listener_impl_aaab0bafc440 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaab0bafc440 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaab0bafc440 t=/tf_static \n",
"void (mission_planner::MissionPlanner::?)(geometry_msgs::msg::PoseStampedconst*) : i= 1 Subscription n=mission_planner t=/planning/mission_planning/goal\n",
"void (mission_planner::MissionPlanner::?)(geometry_msgs::msg::PoseStampedconst*) : i= 0 Subscription n=mission_planner t=/planning/mission_planning/checkpoint\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 661 Subscription n=process_monitor t=/parameter_events \n",
"void (mission_planner::MissionPlannerLanelet2::?)(autoware_auto_mapping_msgs::msg::HADMapBinconst*) : i= 1 Subscription n=mission_planner t=/map/vector_map \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 655 Subscription n=longitudinal_controller_node_exe t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 651 Subscription n=transform_listener_impl_aaaaf52d4c30 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6465 Subscription n=transform_listener_impl_aaaaf52d4c30 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf52d4c30 t=/tf_static \n",
"void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)(nav_msgs::...: i=6285 Subscription n=longitudinal_controller_node_exe t=/localization/kinematic_state \n",
"void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)(autoware_a...: i=1078 Subscription n=longitudinal_controller_node_exe t=/planning/scenario_planning/trajectory\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 603 Subscription n=gpu_monitor t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 581 Subscription n=goal_pose_visualizer t=/parameter_events \n",
"void (mission_planner::GoalPoseVisualizer::?)(autoware_auto_planning_msgs::msg::HADMapRouteconst*) : i= 1 Subscription n=goal_pose_visualizer t=/planning/mission_planning/route\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 569 Subscription n=pointcloud_map_loader t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 569 Subscription n=external_cmd_selector t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 553 Subscription n=behavior_path_planner t=/parameter_events \n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::ControlCommandStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/local/control\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::GearShiftStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/local/shift\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::TurnSignalStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/local/turn_signal\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 551 Subscription n=transform_listener_impl_ffff200c66b0 t=/parameter_events \n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::Heartbeatconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/local/heartbeat\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::ControlCommandStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/remote/control\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::GearShiftStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/remote/shift\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::TurnSignalStampedconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/remote/turn_signal\n",
"void (ExternalCmdSelector::?)(tier4_external_api_msgs::msg::Heartbeatconst*) : i= 0 Subscription n=external_cmd_selector t=/api/external/set/command/remote/heartbeat\n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_ffff200c66b0 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_ffff200c66b0 t=/tf_static \n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(nav_msgs::msg::Odometryconst*) : i=4320 Subscription n=behavior_path_planner t=/localization/kinematic_state \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 518 Subscription n=external_cmd_converter t=/parameter_events \n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_perception_msgs::msg::Pred...: i=1049 Subscription n=behavior_path_planner t=/perception/object_recognition/objects\n",
"behavior_path_planner::BehaviorPathPlannerNode::BehaviorPathPlannerNode(rclcpp::NodeOptionsconst&...: i=1577 Subscription n=behavior_path_planner t=/planning/scenario_planning/scenario\n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(tier4_planning_msgs::msg::Approvalconst*) : i=1171 Subscription n=behavior_path_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/path_change_approval\n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(tier4_planning_msgs::msg::PathChangeModu...: i= 0 Subscription n=behavior_path_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/path_change_force\n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_mapping_msgs::msg::HADMapB...: i= 1 Subscription n=behavior_path_planner t=/map/vector_map \n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)(autoware_auto_planning_msgs::msg::HADMap...: i= 1 Subscription n=behavior_path_planner t=/planning/mission_planning/route\n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)(nav_msgs::msg::Odometryconst*) : i=6285 Subscription n=external_cmd_converter t=/localization/kinematic_state \n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_external_api_msgs::msg::ControlC...: i= 0 Subscription n=external_cmd_converter t=/external/selected/external_control_cmd\n",
"void (behavior_path_planner::SideShiftModule::?)(tier4_planning_msgs::msg::LateralOffsetconst*) : i= 0 Subscription n=behavior_path_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/input/lateral_offset\n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)(autoware_auto_vehicle_msgs::msg::GearC...: i= 0 Subscription n=external_cmd_converter t=/external/selected/gear_cmd \n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_control_msgs::msg::GateModeconst*) : i=1626 Subscription n=external_cmd_converter t=/control/current_gate_mode \n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)(tier4_external_api_msgs::msg::Heartbea...: i= 0 Subscription n=external_cmd_converter t=/external/selected/heartbeat \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 469 Subscription n=costmap_generator t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 454 Subscription n=transform_listener_impl_aaaaf521b848 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6466 Subscription n=transform_listener_impl_aaaaf521b848 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf521b848 t=/tf_static \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 364 Subscription n=latlon_muxer_node_exe t=/parameter_events \n",
"void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control...: i=5235 Subscription n=latlon_muxer_node_exe t=/control/trajectory_follower/lateral/control_cmd\n",
"void (autoware::motion::control::trajectory_follower_nodes::LatLonMuxer::?)(autoware_auto_control...: i=5235 Subscription n=latlon_muxer_node_exe t=/control/trajectory_follower/longitudinal/control_cmd\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 358 Subscription n=lane_departure_checker_node t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 354 Subscription n=transform_listener_impl_aaaaf55ae730 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6465 Subscription n=transform_listener_impl_aaaaf55ae730 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf55ae730 t=/tf_static \n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)(nav_msgs::msg::Odometryconst*) : i=6286 Subscription n=lane_departure_checker_node t=/localization/kinematic_state \n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_mapping_msgs::msg::HADMa...: i= 1 Subscription n=lane_departure_checker_node t=/map/vector_map \n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::HADM...: i= 1 Subscription n=lane_departure_checker_node t=/planning/mission_planning/route\n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::Traj...: i=1078 Subscription n=lane_departure_checker_node t=/planning/scenario_planning/trajectory\n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)(autoware_auto_planning_msgs::msg::Traj...: i=5235 Subscription n=lane_departure_checker_node t=/control/trajectory_follower/lateral/predicted_trajectory\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 333 Subscription n=map_tf_generator t=/parameter_events \n",
"void (MapTFGeneratorNode::?)(sensor_msgs::msg::PointCloud2const*) : i= 1 Subscription n=map_tf_generator t=/map/pointcloud_map \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 322 Subscription n=surround_obstacle_checker t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 318 Subscription n=transform_listener_impl_ffff5c00c708 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6298 Subscription n=transform_listener_impl_ffff5c00c708 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_ffff5c00c708 t=/tf_static \n",
"void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(sensor_msgs::msg::PointCloud2con...: i=1574 Subscription n=surround_obstacle_checker t=/perception/obstacle_segmentation/pointcloud\n",
"void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(autoware_auto_perception_msgs::m...: i=1572 Subscription n=surround_obstacle_checker t=/perception/object_recognition/objects\n",
"void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)(nav_msgs::msg::Odometryconst*) : i=6298 Subscription n=surround_obstacle_checker t=/localization/kinematic_state \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 300 Subscription n=obstacle_stop_planner t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 296 Subscription n=transform_listener_impl_ffff3400eba0 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6294 Subscription n=transform_listener_impl_ffff3400eba0 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_ffff3400eba0 t=/tf_static \n",
"void (motion_planning::ObstacleStopPlannerNode::?)(sensor_msgs::msg::PointCloud2const*) : i=1573 Subscription n=obstacle_stop_planner t=/perception/obstacle_segmentation/pointcloud\n",
"void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_planning_msgs::msg::Trajectoryco...: i= 978 Subscription n=obstacle_stop_planner t=/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/trajectory\n",
"void (motion_planning::ObstacleStopPlannerNode::?)(nav_msgs::msg::Odometryconst*) : i=6293 Subscription n=obstacle_stop_planner t=/localization/kinematic_state \n",
"void (motion_planning::ObstacleStopPlannerNode::?)(autoware_auto_perception_msgs::msg::PredictedO...: i=1571 Subscription n=obstacle_stop_planner t=/perception/object_recognition/objects\n",
"void (motion_planning::ObstacleStopPlannerNode::?)(tier4_planning_msgs::msg::ExpandStopRangeconst*) : i= 0 Subscription n=obstacle_stop_planner t=/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/input/expand_stop_range\n",
"void (CostmapGenerator::?)(autoware_auto_perception_msgs::msg::PredictedObjectsconst*) : i=1228 Subscription n=costmap_generator t=/perception/object_recognition/objects\n",
"void (CostmapGenerator::?)(sensor_msgs::msg::PointCloud2const*) : i=1287 Subscription n=costmap_generator t=/perception/obstacle_segmentation/pointcloud\n",
"void (CostmapGenerator::?)(autoware_auto_mapping_msgs::msg::HADMapBinconst*) : i= 1 Subscription n=costmap_generator t=/map/vector_map \n",
"void (CostmapGenerator::?)(tier4_planning_msgs::msg::Scenarioconst*) : i=1232 Subscription n=costmap_generator t=/planning/scenario_planning/scenario\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 227 Subscription n=freespace_planner t=/parameter_events \n",
"void (freespace_planner::FreespacePlannerNode::?)(autoware_auto_planning_msgs::msg::HADMapRouteco...: i= 1 Subscription n=freespace_planner t=/planning/mission_planning/route\n",
"void (freespace_planner::FreespacePlannerNode::?)(nav_msgs::msg::OccupancyGridconst*) : i= 247 Subscription n=freespace_planner t=/planning/scenario_planning/parking/costmap_generator/occupancy_grid\n",
"void (freespace_planner::FreespacePlannerNode::?)(tier4_planning_msgs::msg::Scenarioconst*) : i=1232 Subscription n=freespace_planner t=/planning/scenario_planning/scenario\n",
"void (freespace_planner::FreespacePlannerNode::?)(nav_msgs::msg::Odometryconst*) : i=4919 Subscription n=freespace_planner t=/localization/kinematic_state \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 189 Subscription n=transform_listener_impl_aaaaf5695dc0 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6288 Subscription n=transform_listener_impl_aaaaf5695dc0 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_aaaaf5695dc0 t=/tf_static \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 188 Subscription n=shift_decider t=/parameter_events \n",
"void (ShiftDecider::?)(autoware_auto_control_msgs::msg::AckermannControlCommand*) : i=10468 Subscription n=shift_decider t=/control/trajectory_follower/control_cmd\n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 183 Subscription n=vehicle_cmd_gate t=/parameter_events \n",
"void (VehicleCmdGate::?)(autoware_auto_system_msgs::msg::EmergencyStateconst*) : i=1625 Subscription n=vehicle_cmd_gate t=/system/emergency/emergency_state\n",
"void (VehicleCmdGate::?)(tier4_external_api_msgs::msg::Heartbeatconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/external/selected/heartbeat \n",
"void (VehicleCmdGate::?)(tier4_control_msgs::msg::GateModeconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/control/gate_mode_cmd \n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::Engageconst*) : i= 2 Subscription n=vehicle_cmd_gate t=/autoware/engage \n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::SteeringReportconst*) : i=6282 Subscription n=vehicle_cmd_gate t=/vehicle/status/steering_status\n",
"void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommandconst*) : i=10468 Subscription n=vehicle_cmd_gate t=/control/trajectory_follower/control_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::TurnIndicatorsCommandconst*) : i= 983 Subscription n=vehicle_cmd_gate t=/planning/turn_indicators_cmd \n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommandconst*) : i= 983 Subscription n=vehicle_cmd_gate t=/planning/hazard_lights_cmd \n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommandconst*) : i=1571 Subscription n=vehicle_cmd_gate t=/control/shift_decider/gear_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommandconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/external/selected/control_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::TurnIndicatorsCommandconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/external/selected/turn_indicators_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommandconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/external/selected/hazard_lights_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommandconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/external/selected/gear_cmd \n",
"void (VehicleCmdGate::?)(autoware_auto_control_msgs::msg::AckermannControlCommandconst*) : i=1625 Subscription n=vehicle_cmd_gate t=/system/emergency/control_cmd \n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::HazardLightsCommandconst*) : i=1625 Subscription n=vehicle_cmd_gate t=/system/emergency/hazard_lights_cmd\n",
"void (VehicleCmdGate::?)(autoware_auto_vehicle_msgs::msg::GearCommandconst*) : i= 0 Subscription n=vehicle_cmd_gate t=/system/emergency/gear_cmd \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 151 Subscription n=behavior_velocity_planner t=/parameter_events \n",
"void (rclcpp::TimeSource::?)(rcl_interfaces::msg::ParameterEventconst*) : i= 147 Subscription n=transform_listener_impl_ffff24598628 t=/parameter_events \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i=6070 Subscription n=transform_listener_impl_ffff24598628 t=/tf \n",
"void (tf2_ros::TransformListener::?)(tf2_msgs::msg::TFMessage*,bool) : i= 3 Subscription n=transform_listener_impl_ffff24598628 t=/tf_static \n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_planning_msgs::msg...: i= 981 Subscription n=behavior_velocity_planner t=/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::m...: i=1515 Subscription n=behavior_velocity_planner t=/perception/object_recognition/objects\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(sensor_msgs::msg::PointCloud2con...: i=1517 Subscription n=behavior_velocity_planner t=/perception/obstacle_segmentation/pointcloud\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::Odometryconst*) : i=6069 Subscription n=behavior_velocity_planner t=/localization/kinematic_state \n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_mapping_msgs::msg:...: i= 1 Subscription n=behavior_velocity_planner t=/map/vector_map \n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::m...: i= 0 Subscription n=behavior_velocity_planner t=/perception/traffic_light_recognition/traffic_signals\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_api_msgs::msg::CrosswalkSt...: i= 0 Subscription n=behavior_velocity_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_crosswalk_states\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_api_msgs::msg::Intersectio...: i= 0 Subscription n=behavior_velocity_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_intersection_states\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_planning_msgs::msg::Veloci...: i= 0 Subscription n=behavior_velocity_planner t=/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_velocity_limit_mps\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(autoware_auto_perception_msgs::m...: i= 0 Subscription n=behavior_velocity_planner t=/external/traffic_light_recognition/traffic_signals\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(tier4_v2x_msgs::msg::VirtualTraf...: i= 0 Subscription n=behavior_velocity_planner t=/awapi/tmp/virtual_traffic_light_states\n",
"void (behavior_velocity_planner::BehaviorVelocityPlannerNode::?)(nav_msgs::msg::OccupancyGridconst*): i=1515 Subscription n=behavior_velocity_planner t=/perception/occupancy_grid_map/map\n",
"void (AutowareErrorMonitor::?)() : i=1783 Timer n=system_error_monitor p=100 ms \n",
"void (EmergencyHandler::?)() : i=1782 Timer n=emergency_handler p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 178 Timer n=ad_service_state_monitor p=1000 ms\n",
"void (ScenarioSelectorNode::?)() : i=1672 Timer n=scenario_selector p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 178 Timer n=planning_error_monitor p=1000 ms\n",
"void (planning_diagnostics::PlanningErrorMonitorNode::?)() : i=1781 Timer n=planning_error_monitor p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 174 Timer n=cpu_monitor p=1000 ms\n",
"void (diagnostic_updater::Updater::?)() : i= 178 Timer n=hdd_monitor p=1000 ms\n",
"void (autoware::motion::control::trajectory_follower_nodes::LateralController::?)() : i=5433 Timer n=lateral_controller_node_exe p=30 ms \n",
"void (HDDMonitor::?)() : i= 178 Timer n=hdd_monitor p=1000 ms\n",
"void (diagnostic_updater::Updater::?)() : i= 178 Timer n=mem_monitor p=1000 ms\n",
"void (diagnostic_aggregator::Aggregator::?)() : i=1780 Timer n=aggregator_node p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 178 Timer n=net_monitor p=1000 ms\n",
"void (diagnostic_updater::Updater::?)() : i= 177 Timer n=ntp_monitor p=1000 ms\n",
"void (diagnostic_updater::Updater::?)() : i= 121 Timer n=process_monitor p=1000 ms\n",
"void (autoware::motion::control::trajectory_follower_nodes::LongitudinalController::?)() : i=5427 Timer n=longitudinal_controller_node_exe p=30 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 177 Timer n=gpu_monitor p=1000 ms\n",
"void (diagnostic_updater::Updater::?)() : i= 163 Timer n=external_cmd_selector p=1000 ms\n",
"void (ExternalCmdSelector::?)() : i=1628 Timer n=external_cmd_selector p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 163 Timer n=external_cmd_converter p=1000 ms\n",
"void (external_cmd_converter::ExternalCmdConverterNode::?)() : i=1629 Timer n=external_cmd_converter p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 163 Timer n=lane_departure_checker_node p=1000 ms\n",
"void (AutowareStateMonitorNode::?)() : i=1772 Timer n=ad_service_state_monitor p=100 ms \n",
"void (surround_obstacle_checker::SurroundObstacleCheckerNode::?)() : i=1630 Timer n=surround_obstacle_checker p=100 ms \n",
"void (CostmapGenerator::?)() : i=1339 Timer n=costmap_generator p=100 ms \n",
"void (freespace_planner::FreespacePlannerNode::?)() : i=1332 Timer n=freespace_planner p=100 ms \n",
"void (lane_departure_checker::LaneDepartureCheckerNode::?)() : i=1627 Timer n=lane_departure_checker_node p=100 ms \n",
"void (ShiftDecider::?)() : i=1627 Timer n=shift_decider p=100 ms \n",
"void (diagnostic_updater::Updater::?)() : i= 162 Timer n=vehicle_cmd_gate p=1000 ms\n",
"void (VehicleCmdGate::?)() : i=1626 Timer n=vehicle_cmd_gate p=100 ms \n",
"void (behavior_path_planner::BehaviorPathPlannerNode::?)() : i= 984 Timer n=behavior_path_planner p=100 ms \n"
]
}
],
"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 = util._prettify(sym.symbol)\n",
" pretty_sym = re.sub(r\"std::shared_ptr<(.*?)>\", 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": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"161 topics were aggregated into 78 cohorts\n"
]
}
],
"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": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/system/system_error_monitor : 10.00Hz\n",
"/system/emergency_handler : 10.00Hz\n",
"/system/ad_service_state_monitor : 1.00Hz\n",
"/planning/scenario_planning/scenario_selector : 10.00Hz\n",
"/planning/planning_diagnostics/planning_error_monitor : 1.00Hz\n",
"/planning/planning_diagnostics/planning_error_monitor : 10.00Hz\n",
"/system/system_monitor/cpu_monitor : 1.00Hz\n",
"/system/system_monitor/hdd_monitor : 1.00Hz\n",
"/control/trajectory_follower/lateral_controller_node_exe : 33.33Hz\n",
"/system/system_monitor/hdd_monitor : 1.00Hz\n",
"/system/system_monitor/mem_monitor : 1.00Hz\n",
"/aggregator_node : 10.00Hz\n",
"/system/system_monitor/net_monitor : 1.00Hz\n",
"/system/system_monitor/ntp_monitor : 1.00Hz\n",
"/system/system_monitor/process_monitor : 1.00Hz\n",
"/control/trajectory_follower/longitudinal_controller_node_exe : 33.33Hz\n",
"/system/system_monitor/gpu_monitor : 1.00Hz\n",
"/control/external_cmd_selector : 1.00Hz\n",
"/control/external_cmd_selector : 10.00Hz\n",
"/control/external_cmd_converter : 1.00Hz\n",
"/control/external_cmd_converter : 10.00Hz\n",
"/control/trajectory_follower/lane_departure_checker_node : 1.00Hz\n",
"/system/ad_service_state_monitor : 10.00Hz\n",
"/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker : 10.00Hz\n",
"/planning/scenario_planning/parking/costmap_generator : 10.00Hz\n",
"/planning/scenario_planning/parking/freespace_planner : 10.00Hz\n",
"/control/trajectory_follower/lane_departure_checker_node : 10.00Hz\n",
"/control/shift_decider : 10.00Hz\n",
"/control/vehicle_cmd_gate : 1.00Hz\n",
"/control/vehicle_cmd_gate : 10.00Hz\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner : 10.00Hz\n",
"UNKNOWN (x34) : 1.00Hz\n",
"UNKNOWN (x1) : 2.00Hz\n",
"UNKNOWN (x1) : 10.00Hz\n",
"Found 31 timers with a recorded node, 36 without.\n"
]
}
],
"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": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"219 unknown publisher handles (176 known ones)\n"
]
}
],
"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(os.path.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": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/launch_ros_9807 has 0 timer callbacks, 0 subscription callbacks, 0 subscribed topics.\n",
"/system/system_monitor/system_monitor/system_monitor_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/robot_state_publisher has 0 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/system/system_error_monitor has 1 timer callbacks, 5 subscription callbacks, 5 subscribed topics.\n",
"/aggregator_node has 1 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/system/emergency_handler has 1 timer callbacks, 6 subscription callbacks, 5 subscribed topics.\n",
"/map/map_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/system/ad_service_state_monitor has 2 timer callbacks, 5 subscription callbacks, 15 subscribed topics.\n",
"/system/transform_listener_impl_aaaab90b38b0 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/mission_planning/mission_planning_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/scenario_planning/scenario_selector has 1 timer callbacks, 6 subscription callbacks, 6 subscribed topics.\n",
"/planning/scenario_planning/external_velocity_limit_selector has 0 timer callbacks, 4 subscription callbacks, 4 subscribed topics.\n",
"/planning/scenario_planning/transform_listener_impl_aaaad6cbbcb8 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/scenario_planning/motion_velocity_smoother has 0 timer callbacks, 4 subscription callbacks, 4 subscribed topics.\n",
"/planning/scenario_planning/transform_listener_impl_aaaaf1071f80 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_planning_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/motion_planning_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/scenario_planning/parking/parking_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/planning_diagnostics/planning_error_monitor has 2 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/control/control_container has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/system/system_monitor/cpu_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/control/trajectory_follower/lateral_controller_node_exe has 1 timer callbacks, 4 subscription callbacks, 4 subscribed topics.\n",
"/system/system_monitor/hdd_monitor has 2 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner has 0 timer callbacks, 5 subscription callbacks, 5 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/transform_listener_impl_aaaaf153e160 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/transform_listener_impl_aaaaf51e51c0 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/map/map_hash_generator has 0 timer callbacks, 0 subscription callbacks, 0 subscribed topics.\n",
"/system/system_monitor/mem_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/map/lanelet2_map_loader has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/system/system_monitor/net_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/map/lanelet2_map_visualization has 0 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/system/system_monitor/ntp_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/mission_planning/mission_planner has 0 timer callbacks, 4 subscription callbacks, 4 subscribed topics.\n",
"/system/system_monitor/process_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/planning/mission_planning/transform_listener_impl_aaab0bafc440 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/trajectory_follower/longitudinal_controller_node_exe has 1 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/mission_planning/goal_pose_visualizer has 0 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/system/system_monitor/gpu_monitor has 1 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/control/transform_listener_impl_aaaaf52d4c30 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/map/pointcloud_map_loader has 0 timer callbacks, 1 subscription callbacks, 1 subscribed topics.\n",
"/control/external_cmd_selector has 2 timer callbacks, 9 subscription callbacks, 9 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner has 1 timer callbacks, 9 subscription callbacks, 9 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/behavior_planning/transform_listener_impl_ffff200c66b0 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/external_cmd_converter has 2 timer callbacks, 6 subscription callbacks, 6 subscribed topics.\n",
"/planning/scenario_planning/parking/costmap_generator has 1 timer callbacks, 5 subscription callbacks, 5 subscribed topics.\n",
"/planning/scenario_planning/parking/transform_listener_impl_aaaaf521b848 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/trajectory_follower/latlon_muxer_node_exe has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/trajectory_follower/lane_departure_checker_node has 2 timer callbacks, 6 subscription callbacks, 6 subscribed topics.\n",
"/control/transform_listener_impl_aaaaf55ae730 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/map/map_tf_generator has 0 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/_ros2cli_9870 has 0 timer callbacks, 0 subscription callbacks, 0 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker has 1 timer callbacks, 4 subscription callbacks, 4 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/transform_listener_impl_ffff5c00c708 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner has 0 timer callbacks, 6 subscription callbacks, 6 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/motion_planning/transform_listener_impl_ffff3400eba0 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/planning/scenario_planning/parking/freespace_planner has 1 timer callbacks, 5 subscription callbacks, 5 subscribed topics.\n",
"/planning/scenario_planning/parking/transform_listener_impl_aaaaf5695dc0 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n",
"/control/shift_decider has 1 timer callbacks, 2 subscription callbacks, 2 subscribed topics.\n",
"/control/vehicle_cmd_gate has 2 timer callbacks, 17 subscription callbacks, 17 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner has 0 timer callbacks, 13 subscription callbacks, 13 subscribed topics.\n",
"/planning/scenario_planning/lane_driving/behavior_planning/transform_listener_impl_ffff24598628 has 0 timer callbacks, 3 subscription callbacks, 3 subscribed topics.\n"
]
}
],
"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": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416), {(Topic(name='/system/emergency/hazard_status'), 1.0), (Topic(name='/diagnostics_err'), 1.0)}), (CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024), {(Topic(name='/system/emergency/hazard_lights_cmd'), 1.0), (Topic(name='/system/emergency/control_cmd'), 1.0), (Topic(name='/system/emergency/emergency_state'), 1.0)}), (CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), {(Topic(name='/diagnostics'), 0.09086268504338949)}), (CallbackObject(id=187650227061536, timestamp=1652795532420884571, callback_object=187650227061760), {(Topic(name='/diagnostics'), 0.0005104645227156713)}), (CallbackObject(id=187650227086464, timestamp=1652795532421795094, callback_object=187650227086688), {(Topic(name='/diagnostics'), 0.0005104645227156713)}), (CallbackObject(id=187650725528480, timestamp=1652795532422494496, callback_object=187650725528704), {(Topic(name='/planning/scenario_planning/scenario_selector/trajectory'), 0.9063948100092678)}), (CallbackObject(id=187650725538176, timestamp=1652795532422934938, callback_object=187650725538400), {(Topic(name='/planning/scenario_planning/scenario_selector/trajectory'), 0.09360518999073215)}), (CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), {(Topic(name='/planning/scenario_planning/scenario'), 1.0)}), (CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560), {(Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/forward_filtered_trajectory'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/closest_max_velocity'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_time_resampled'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/closest_acceleration'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_raw'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/stop_speed_exceeded'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/closest_jerk'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_lateral_acc_filtered'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/closest_merged_velocity'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/merged_filtered_trajectory'), 1.0), (Topic(name='/planning/scenario_planning/trajectory'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/distance_to_stopline'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/backward_filtered_trajectory'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/debug/trajectory_external_velocity_limited'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/closest_velocity'), 1.0), (Topic(name='/planning/scenario_planning/motion_velocity_smoother/calculation_time'), 1.0)}), (CallbackObject(id=187650857828480, timestamp=1652795532481967108, callback_object=187650857828448), {(Topic(name='/diagnostics'), 0.09067753438614366)}), (CallbackObject(id=187650857760512, timestamp=1652795532488243650, callback_object=187650857873600), {(Topic(name='/planning/planning_diagnostics/planning_error_monitor/debug/marker'), 1.0), (Topic(name='/diagnostics'), 0.9072847682119205)}), (CallbackObject(id=281471621334496, timestamp=1652795532529885598, callback_object=281471621745744), {(Topic(name='/system/system_monitor/cpu_monitor/cpu_usage'), 1.0), (Topic(name='/diagnostics'), 0.9719101123595506)}), (CallbackObject(id=281470279474912, timestamp=1652795532561142429, callback_object=281470279147232), {(Topic(name='/diagnostics'), 0.978021978021978)}), (CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256), {(Topic(name='/control/trajectory_follower/lateral/diagnostic'), 1.0), (Topic(name='/control/trajectory_follower/lateral/control_cmd'), 1.0), (Topic(name='/control/trajectory_follower/lateral/predicted_trajectory'), 1.0)}), (CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072), {(Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/eb_trajectory'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/mpt_ref_traj'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/calculation_time'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/wall_marker'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/mpt_fixed_traj'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/mpt_traj'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/extended_fixed_traj'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/marker'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/trajectory'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/debug/extended_non_fixed_traj'), 1.0)}), (CallbackObject(id=281470749227904, timestamp=1652795532625531537, callback_object=281470748968624), {(Topic(name='/diagnostics'), 0.9943820224719101)}), (CallbackObject(id=187650717532576, timestamp=1652795532640963472, callback_object=187650717753424), {(Topic(name='/diagnostics_agg'), 1.0), (Topic(name='/diagnostics_toplevel_state'), 1.0)}), (CallbackObject(id=281472024280704, timestamp=1652795532656993809, callback_object=281472024014144), {(Topic(name='/diagnostics'), 0.9888268156424581)}), (CallbackObject(id=187650884621760, timestamp=1652795532673805669, callback_object=187650884621984), {(Topic(name='/map/vector_map_marker'), 1.0)}), (CallbackObject(id=281470749590016, timestamp=1652795532683997265, callback_object=281470749285872), {(Topic(name='/diagnostics'), 0.9943820224719101)}), (CallbackObject(id=187651612752912, timestamp=1652795532707997110, callback_object=187651612753136), {(Topic(name='/planning/mission_planning/route_marker'), 1.0), (Topic(name='/planning/mission_planning/route'), 1.0)}), (CallbackObject(id=281472024601248, timestamp=1652795532714492773, callback_object=281472023958064), {(Topic(name='/diagnostics'), 0.916030534351145)}), (CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112), {(Topic(name='/control/trajectory_follower/longitudinal/diagnostic'), 1.0), (Topic(name='/control/trajectory_follower/longitudinal/slope_angle'), 1.0), (Topic(name='/control/trajectory_follower/longitudinal/control_cmd'), 1.0)}), (CallbackObject(id=281470547917776, timestamp=1652795532748442494, callback_object=281470547558496), {(Topic(name='/diagnostics'), 0.9725274725274725)}), (CallbackObject(id=187651613335744, timestamp=1652795532750644582, callback_object=187651613335968), {(Topic(name='/planning/mission_planning/echo_back_goal_pose'), 1.0)}), (CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752), {(Topic(name='/diagnostics'), 0.9939024390243902)}), (CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), {(Topic(name='/control/external_cmd_selector/current_selector_mode'), 1.0)}), (CallbackObject(id=281471220283472, timestamp=1652795532812145400, callback_object=281471220283696), {(Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_boundary'), 0.004069175991861648), (Topic(name='/planning/hazard_lights_cmd'), 0.002034587995930824), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/drivable_area'), 0.002034587995930824), (Topic(name='/planning/turn_indicators_cmd'), 0.003051881993896236), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/force_available'), 0.003051881993896236), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/ready_module'), 0.003051881993896236), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output/path_candidate'), 0.002034587995930824), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id'), 0.004069175991861648), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/running_modules'), 0.003051881993896236), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array'), 0.001017293997965412)}), (CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), {(Topic(name='/diagnostics'), 0.09090909090909091)}), (CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), {(Topic(name='/diagnostics'), 0.9085331846068042)}), (CallbackObject(id=187651237083504, timestamp=1652795532841120743, callback_object=187651237083728), {(Topic(name='/control/trajectory_follower/control_cmd'), 0.5000477600534913)}), (CallbackObject(id=187651237165200, timestamp=1652795532841552585, callback_object=187651237165424), {(Topic(name='/control/trajectory_follower/control_cmd'), 0.4999522399465087)}), (CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), {(Topic(name='/diagnostics'), 0.09394812680115273)}), (CallbackObject(id=187650883819920, timestamp=1652795533257301461, callback_object=187650883820144), {(Topic(name='/tf_static'), 1.0)}), (CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), {(Topic(name='/diagnostics'), 0.9045431342521695), (Topic(name='/autoware/engage'), 1.0), (Topic(name='/autoware/state'), 1.0)}), (CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584), {(Topic(name='/planning/scenario_planning/status/no_start_reason'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/debug/marker'), 1.0), (Topic(name='/planning/scenario_planning/status/stop_reasons'), 1.0)}), (CallbackObject(id=281471555072288, timestamp=1652795547761742567, callback_object=281471555072512), {(Topic(name='/planning/scenario_planning/lane_driving/trajectory'), 0.003067484662576687), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/debug/marker'), 0.002044989775051125), (Topic(name='/planning/scenario_planning/status/stop_reason'), 0.003067484662576687)}), (CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432), {(Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/debug/marker'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/obstacle_stop/debug_values'), 1.0), (Topic(name='/planning/scenario_planning/status/stop_reason'), 1.0), (Topic(name='/planning/scenario_planning/status/stop_reasons'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/trajectory'), 1.0)}), (CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), {(Topic(name='/planning/scenario_planning/parking/costmap_generator/grid_map'), 1.0), (Topic(name='/planning/scenario_planning/parking/costmap_generator/occupancy_grid'), 1.0)}), (CallbackObject(id=187651235257712, timestamp=1652795547887008572, callback_object=187651235257936), {(Topic(name='/parameter_events'), 0.023809523809523808)}), (CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768), {(Topic(name='/parameter_events'), 0.047619047619047616), (Topic(name='/planning/scenario_planning/parking/trajectory'), 1.0), (Topic(name='/planning/scenario_planning/parking/freespace_planner/debug/partial_pose_array'), 1.0), (Topic(name='/planning/scenario_planning/parking/freespace_planner/debug/pose_array'), 1.0)}), (CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), {(Topic(name='/control/trajectory_follower/lane_departure_checker_node/debug/marker_array'), 1.0), (Topic(name='/control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw'), 1.0), (Topic(name='/control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw_deg'), 1.0), (Topic(name='/diagnostics'), 0.9048991354466859), (Topic(name='/control/trajectory_follower/lane_departure_checker_node/debug/processing_time_ms'), 1.0), (Topic(name='/control/trajectory_follower/lane_departure_checker_node/debug/deviation/lateral'), 1.0)}), (CallbackObject(id=187651238636192, timestamp=1652795547950945959, callback_object=187651238252112), {(Topic(name='/control/shift_decider/gear_cmd'), 1.0)}), (CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), {(Topic(name='/diagnostics'), 0.09050279329608939)}), (CallbackObject(id=187651239927824, timestamp=1652795548009185046, callback_object=187651239928048), {(Topic(name='/control/command/control_cmd'), 1.0), (Topic(name='/control/command/emergency_cmd'), 1.0)}), (CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), {(Topic(name='/api/autoware/get/engage'), 1.0), (Topic(name='/control/command/turn_indicators_cmd'), 1.0), (Topic(name='/api/autoware/get/emergency'), 1.0), (Topic(name='/control/command/hazard_lights_cmd'), 1.0), (Topic(name='/control/current_gate_mode'), 1.0), (Topic(name='/control/command/gear_cmd'), 1.0), (Topic(name='/diagnostics'), 0.9083798882681564)}), (CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), {(Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id'), 1.0), (Topic(name='/planning/hazard_lights_cmd'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/markers'), 1.0), (Topic(name='/planning/turn_indicators_cmd'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/force_available'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output/path_candidate'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_boundary'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/ready_module'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/running_modules'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/drivable_area'), 1.0)}), (CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448), {(Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/virtual_traffic_light'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/stop_line'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/traffic_light'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/crosswalk'), 1.0), (Topic(name='/planning/scenario_planning/status/stop_reasons'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/merge_from_private'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/detection_area'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/no_stopping_area'), 1.0), (Topic(name='/planning/scenario_planning/status/infrastructure_commands'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/occlusion_spot'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/blind_spot'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/output/stop_reason'), 1.0), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/debug/traffic_signal'), 1.0)}), (CallbackObject(id=281471292201536, timestamp=1652795553354910549, callback_object=281471292201760), {(Topic(name='/planning/scenario_planning/status/stop_reasons'), 0.003061224489795918), (Topic(name='/planning/scenario_planning/status/infrastructure_commands'), 0.0020408163265306124), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path'), 0.004081632653061225), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/occlusion_spot'), 0.0010204081632653062)}), (CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192), {(Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection'), 0.0020408163265306124), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/merge_from_private'), 0.0010204081632653062), (Topic(name='/planning/scenario_planning/status/infrastructure_commands'), 0.0010204081632653062), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/occlusion_spot'), 0.0010204081632653062), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/stop_line'), 0.0010204081632653062), (Topic(name='/planning/scenario_planning/status/infrastructure_commands'), 0.0020408163265306124)}), (CallbackObject(id=281471292814832, timestamp=1652795553365321826, callback_object=281471292815056), {(Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/virtual_traffic_light'), 0.0010204081632653062)})]\n",
"[(Topic(name='/parameter_events'), {CallbackObject(id=187651234160416, timestamp=1652795532821109872, callback_object=187651234160640), CallbackObject(id=281470547917776, timestamp=1652795532748442494, callback_object=281470547558496), CallbackObject(id=187651141131344, timestamp=1652795532311101741, callback_object=187651141131568), CallbackObject(id=187650716326256, timestamp=1652795532349074316, callback_object=187650716326480), CallbackObject(id=187650883764160, timestamp=1652795533256382978, callback_object=187650883764384), CallbackObject(id=187651235721328, timestamp=1652795532775611750, callback_object=187651235721552), CallbackObject(id=281472493892624, timestamp=1652795532629923233, callback_object=281472493892848), CallbackObject(id=187651236142368, timestamp=1652795532839556337, callback_object=187651236142592), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651233287328, timestamp=1652795532479639419, callback_object=187651233287552), CallbackObject(id=281470749590016, timestamp=1652795532683997265, callback_object=281470749285872), CallbackObject(id=187650857762320, timestamp=1652795532479743540, callback_object=187650857762544), CallbackObject(id=281472024280704, timestamp=1652795532656993809, callback_object=281472024014144), CallbackObject(id=187650829771872, timestamp=1652795532350920722, callback_object=187650829772096), CallbackObject(id=281471554740096, timestamp=1652795547746870515, callback_object=281471554740320), CallbackObject(id=187651164488032, timestamp=1652795532439240076, callback_object=187651164488256), CallbackObject(id=187651227801024, timestamp=1652795532470032265, callback_object=187651227801248), CallbackObject(id=187651613195392, timestamp=1652795532748230173, callback_object=187651613195616), CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256), CallbackObject(id=187651238514976, timestamp=1652795547892436231, callback_object=187651238515200), CallbackObject(id=187650226308288, timestamp=1652795532375697770, callback_object=187650226308512), CallbackObject(id=281471291788992, timestamp=1652795553346094958, callback_object=281471291789216), CallbackObject(id=187650857760512, timestamp=1652795532488243650, callback_object=187650857873600), CallbackObject(id=187651169928720, timestamp=1652795532557822817, callback_object=187651169928944), CallbackObject(id=187650884658048, timestamp=1652795532762621184, callback_object=187650884658272), CallbackObject(id=187651169206672, timestamp=1652795532444177693, callback_object=187651169206896), CallbackObject(id=187651236269456, timestamp=1652795532810728915, callback_object=187651236269680), CallbackObject(id=187651237531776, timestamp=1652795532889859996, callback_object=187651237532000), CallbackObject(id=281470749227904, timestamp=1652795532625531537, callback_object=281470748968624), CallbackObject(id=281472225640640, timestamp=1652795547634918157, callback_object=281472225640864), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187651233788976, timestamp=1652795532558494139, callback_object=187651233789200), CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024), CallbackObject(id=281471554611248, timestamp=1652795547744004144, callback_object=281471554611472), CallbackObject(id=187651239602848, timestamp=1652795547995976239, callback_object=187651239603072), CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112), CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416), CallbackObject(id=281470749005328, timestamp=1652795532623682651, callback_object=281470749005552), CallbackObject(id=187651612465104, timestamp=1652795532700426083, callback_object=187651612465328), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), CallbackObject(id=187651238636192, timestamp=1652795547950945959, callback_object=187651238252112), CallbackObject(id=187650226186624, timestamp=1652795532374505606, callback_object=187650226186848), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651235143408, timestamp=1652795547881623553, callback_object=187651235143632), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187650864342320, timestamp=1652795532328085121, callback_object=187650864342544), CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), CallbackObject(id=187651234959632, timestamp=1652795532731662114, callback_object=187651234959856), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=281472024068464, timestamp=1652795532655578964, callback_object=281472024068688), CallbackObject(id=187650884480560, timestamp=1652795532672665745, callback_object=187650884480784), CallbackObject(id=187651238520320, timestamp=1652795547949018752, callback_object=187651238520544), CallbackObject(id=187651164947536, timestamp=1652795532440607601, callback_object=187651164947760), CallbackObject(id=187650882833440, timestamp=1652795532360672437, callback_object=187650882833664), CallbackObject(id=281470749441328, timestamp=1652795532682345859, callback_object=281470749441552), CallbackObject(id=281470547686176, timestamp=1652795532745880765, callback_object=281470547686400), CallbackObject(id=281472024435376, timestamp=1652795532713404770, callback_object=281472024435600), CallbackObject(id=187651234080752, timestamp=1652795532819359866, callback_object=187651234080976), CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752), CallbackObject(id=187651237381392, timestamp=1652795532887641188, callback_object=187651237381616), CallbackObject(id=281470279374160, timestamp=1652795532557391375, callback_object=281470279374384), CallbackObject(id=281470279474912, timestamp=1652795532561142429, callback_object=281470279147232), CallbackObject(id=187650725401360, timestamp=1652795532413362864, callback_object=187650725401584), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=281471621334496, timestamp=1652795532529885598, callback_object=281471621745744), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), CallbackObject(id=281471292028256, timestamp=1652795553347799764, callback_object=281471292028480), CallbackObject(id=187651233966384, timestamp=1652795532561561190, callback_object=187651233966608), CallbackObject(id=187651612603424, timestamp=1652795532703342854, callback_object=187651612603648), CallbackObject(id=187650725347760, timestamp=1652795532411986859, callback_object=187650725347984), CallbackObject(id=187651234919584, timestamp=1652795532728929585, callback_object=187651234919808), CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584), CallbackObject(id=281472024601248, timestamp=1652795532714492773, callback_object=281472023958064), CallbackObject(id=281472225425664, timestamp=1652795547632168947, callback_object=281472225425888), CallbackObject(id=281471219439008, timestamp=1652795532784187141, callback_object=281471219439232), CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), CallbackObject(id=187651170054208, timestamp=1652795532561343110, callback_object=187651170054432), CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768), CallbackObject(id=187651121977600, timestamp=1652795532321694539, callback_object=187651121977824), CallbackObject(id=187650857828480, timestamp=1652795532481967108, callback_object=187650857828448), CallbackObject(id=281471621628224, timestamp=1652795532525757383, callback_object=281471621628448), CallbackObject(id=187651611899568, timestamp=1652795532393673274, callback_object=187651611899792), CallbackObject(id=187650717532576, timestamp=1652795532640963472, callback_object=187650717753424), CallbackObject(id=281471219298592, timestamp=1652795532780384807, callback_object=281471219298816), CallbackObject(id=187651290504128, timestamp=1652795532416569995, callback_object=187651290504352), CallbackObject(id=187650770538240, timestamp=1652795532443145810, callback_object=187650770538464), CallbackObject(id=281470279497792, timestamp=1652795532597927479, callback_object=281470279497648)}), (Topic(name='/diagnostics_agg'), {CallbackObject(id=187650864330336, timestamp=1652795532330218249, callback_object=187650864330560), CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416)}), (Topic(name='/control/current_gate_mode'), {CallbackObject(id=187650864449376, timestamp=1652795532330919371, callback_object=187650864449600), CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), CallbackObject(id=187651236612256, timestamp=1652795532816612776, callback_object=187651236612480)}), (Topic(name='/autoware/state'), {CallbackObject(id=187650864460272, timestamp=1652795532331872695, callback_object=187650864460496), CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416)}), (Topic(name='/vehicle/status/control_mode'), {CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187650864479216, timestamp=1652795532335829389, callback_object=187650864479440), CallbackObject(id=187650227061536, timestamp=1652795532420884571, callback_object=187650227061760), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650830008528, timestamp=1652795532360200355, callback_object=187650830008752), CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024)}), (Topic(name='/joint_states'), {CallbackObject(id=187651122540608, timestamp=1652795532342317452, callback_object=187651122540832)}), (Topic(name='/system/emergency/hazard_status'), {CallbackObject(id=187650830033680, timestamp=1652795532360765157, callback_object=187650830033904), CallbackObject(id=187650829768384, timestamp=1652795532353851173, callback_object=187650829768608), CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024)}), (Topic(name='/control/command/control_cmd'), {CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024), CallbackObject(id=187650829824912, timestamp=1652795532355007257, callback_object=187650829825136)}), (Topic(name='/localization/kinematic_state'), {CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187651165425504, timestamp=1652795532460207550, callback_object=187651165425728), CallbackObject(id=281472225979632, timestamp=1652795547642268663, callback_object=281472225979856), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), CallbackObject(id=187651235284384, timestamp=1652795547889036139, callback_object=187651235284608), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650829931008, timestamp=1652795532356961584, callback_object=187650829931232), CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), CallbackObject(id=187651235237984, timestamp=1652795532744201679, callback_object=187651235238208), CallbackObject(id=187651234414560, timestamp=1652795532590157812, callback_object=187651234414784), CallbackObject(id=281471220195376, timestamp=1652795532806785901, callback_object=281471220195600), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=281471555234272, timestamp=1652795547763222973, callback_object=281471555234496), CallbackObject(id=187651237827456, timestamp=1652795532894822254, callback_object=187651237827680), CallbackObject(id=187650227086464, timestamp=1652795532421795094, callback_object=187650227086688), CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584), CallbackObject(id=187650725684000, timestamp=1652795532424254103, callback_object=187650725684224), CallbackObject(id=187651236518192, timestamp=1652795532815224451, callback_object=187651236518416), CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187650830150352, timestamp=1652795532361855601, callback_object=187650830037024), CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112), CallbackObject(id=187651170628208, timestamp=1652795532580134856, callback_object=187651170628432), CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192), CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256)}), (Topic(name='/tf'), {CallbackObject(id=187650226291824, timestamp=1652795532378957462, callback_object=187650226292048), CallbackObject(id=187651234065648, timestamp=1652795532565550644, callback_object=187651234065872), CallbackObject(id=187651238603200, timestamp=1652795547893025154, callback_object=187651238603424), CallbackObject(id=187651170059920, timestamp=1652795532565566245, callback_object=187651170060144), CallbackObject(id=187651165031296, timestamp=1652795532444577855, callback_object=187651165031520), CallbackObject(id=187651234324080, timestamp=1652795532824376164, callback_object=187651234324304), CallbackObject(id=281471554835744, timestamp=1652795547747481077, callback_object=281471554835968), CallbackObject(id=281472225746144, timestamp=1652795547635494599, callback_object=281472225746368), CallbackObject(id=187651235042896, timestamp=1652795532732233516, callback_object=187651235043120), CallbackObject(id=187651612612256, timestamp=1652795532706555105, callback_object=187651612612480), CallbackObject(id=281471292128896, timestamp=1652795553348241165, callback_object=281471292129120), CallbackObject(id=187650725410336, timestamp=1652795532417147837, callback_object=187650725410560), CallbackObject(id=187651237578688, timestamp=1652795532890382998, callback_object=187651237578912), CallbackObject(id=281471219535424, timestamp=1652795532790952365, callback_object=281471219535648)}), (Topic(name='/tf_static'), {CallbackObject(id=187651234361344, timestamp=1652795532824823765, callback_object=187651234361568), CallbackObject(id=281471219572352, timestamp=1652795532791575127, callback_object=281471219572576), CallbackObject(id=281472225734800, timestamp=1652795547635901880, callback_object=281472225735024), CallbackObject(id=281471554826096, timestamp=1652795547748150359, callback_object=281471554826320), CallbackObject(id=187651612728512, timestamp=1652795532706991627, callback_object=187651612728736), CallbackObject(id=187651238618608, timestamp=1652795547893574595, callback_object=187651238618832), CallbackObject(id=187651237682400, timestamp=1652795532890844440, callback_object=187651237682624), CallbackObject(id=281471292137200, timestamp=1652795553348656727, callback_object=281471292137424), CallbackObject(id=187650725488048, timestamp=1652795532417736880, callback_object=187650725488272), CallbackObject(id=187651234148528, timestamp=1652795532566102206, callback_object=187651234148752), CallbackObject(id=187651165103760, timestamp=1652795532445212417, callback_object=187651165103984), CallbackObject(id=187651235134176, timestamp=1652795532732750798, callback_object=187651235134400), CallbackObject(id=187650226355600, timestamp=1652795532379481344, callback_object=187650226355824), CallbackObject(id=187651170173776, timestamp=1652795532566187047, callback_object=187651170174000)}), (Topic(name='/map/vector_map'), {CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), CallbackObject(id=187651234515584, timestamp=1652795547838675561, callback_object=187651234515808), CallbackObject(id=187651237831536, timestamp=1652795532895589816, callback_object=187651237831760), CallbackObject(id=187651612976832, timestamp=1652795532714680214, callback_object=187651612977056), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=187650725574912, timestamp=1652795532423326459, callback_object=187650725575136), CallbackObject(id=187650884621760, timestamp=1652795532673805669, callback_object=187650884621984), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=281471220400576, timestamp=1652795532813244684, callback_object=281471220400800), CallbackObject(id=281471292318288, timestamp=1652795553355949193, callback_object=281471292318512)}), (Topic(name='/map/pointcloud_map'), {CallbackObject(id=187650883819920, timestamp=1652795533257301461, callback_object=187650883820144), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936)}), (Topic(name='/perception/object_recognition/objects'), {CallbackObject(id=281471220214336, timestamp=1652795532811221477, callback_object=281471220214560), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=281472225914304, timestamp=1652795547641785221, callback_object=281472225914528), CallbackObject(id=187651170706592, timestamp=1652795532584393911, callback_object=187651170706816), CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=187651234414432, timestamp=1652795547836390752, callback_object=187651234414656), CallbackObject(id=281471292187680, timestamp=1652795553354325467, callback_object=281471292187904), CallbackObject(id=281471555182320, timestamp=1652795547763895895, callback_object=281471555182544), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584)}), (Topic(name='/initialpose2d'), {CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936)}), (Topic(name='/planning/mission_planning/route'), {CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), CallbackObject(id=187651237930272, timestamp=1652795532896095138, callback_object=187651237930496), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187650725588976, timestamp=1652795532423752581, callback_object=187650725589200), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651235257712, timestamp=1652795547887008572, callback_object=187651235257936), CallbackObject(id=187650227078464, timestamp=1652795532421286012, callback_object=187650227078688), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=281471220449136, timestamp=1652795532813935967, callback_object=281471220449360), CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187651613335744, timestamp=1652795532750644582, callback_object=187651613335968)}), (Topic(name='/planning/scenario_planning/trajectory'), {CallbackObject(id=187651238195664, timestamp=1652795532896665540, callback_object=187651238195888), CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112), CallbackObject(id=187651234294336, timestamp=1652795532585953717, callback_object=187651234294560), CallbackObject(id=187650857760512, timestamp=1652795532488243650, callback_object=187650857873600), CallbackObject(id=187650857875248, timestamp=1652795532487999409, callback_object=187650857875472), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187650857828480, timestamp=1652795532481967108, callback_object=187650857828448), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256), CallbackObject(id=187651235242032, timestamp=1652795532744934881, callback_object=187651235242256)}), (Topic(name='/control/trajectory_follower/control_cmd'), {CallbackObject(id=187651239927824, timestamp=1652795548009185046, callback_object=187651239928048), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651238636192, timestamp=1652795547950945959, callback_object=187651238252112), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187651238636368, timestamp=1652795547950849559, callback_object=187651238636592), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/vehicle/status/velocity_status'), {CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936)}), (Topic(name='/vehicle/status/steering_status'), {CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651239922832, timestamp=1652795548008681204, callback_object=187651239923056), CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651234295632, timestamp=1652795532588347765, callback_object=187651234295856), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/system/emergency/control_cmd'), {CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651240046928, timestamp=1652795548012805859, callback_object=187651240047152)}), (Topic(name='/api/autoware/get/engage'), {CallbackObject(id=187650226567200, timestamp=1652795532420470209, callback_object=187650226567424), CallbackObject(id=187650226411360, timestamp=1652795532381109590, callback_object=187650226411328), CallbackObject(id=187650227078416, timestamp=1652795533426825343, callback_object=187650227239936)}), (Topic(name='/planning/scenario_planning/lane_driving/trajectory'), {CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128), CallbackObject(id=187650725528480, timestamp=1652795532422494496, callback_object=187650725528704)}), (Topic(name='/planning/scenario_planning/parking/trajectory'), {CallbackObject(id=187650725538176, timestamp=1652795532422934938, callback_object=187650725538400), CallbackObject(id=187650725848512, timestamp=1652795532425613188, callback_object=187650725850128)}), (Topic(name='/planning/scenario_planning/max_velocity_default'), {CallbackObject(id=187651290507760, timestamp=1652795532427101753, callback_object=187651290507984)}), (Topic(name='/planning/scenario_planning/max_velocity_candidates'), {CallbackObject(id=187651290535728, timestamp=1652795532427573915, callback_object=187651290535952)}), (Topic(name='/planning/scenario_planning/clear_velocity_limit'), {CallbackObject(id=187651290617280, timestamp=1652795532428052996, callback_object=187651290617504)}), (Topic(name='/planning/scenario_planning/scenario_selector/trajectory'), {CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)}), (Topic(name='/planning/scenario_planning/max_velocity'), {CallbackObject(id=187651165497712, timestamp=1652795532460958593, callback_object=187651165497936)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path'), {CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)}), (Topic(name='/planning/scenario_planning/lane_driving/obstacle_avoidance_approval'), {CallbackObject(id=187651170795920, timestamp=1652795532587325042, callback_object=187651170796144)}), (Topic(name='/diagnostics'), {CallbackObject(id=187650717916800, timestamp=1652795532640322030, callback_object=187650717917024), CallbackObject(id=187650717532576, timestamp=1652795532640963472, callback_object=187650717753424)}), (Topic(name='/planning/mission_planning/goal'), {CallbackObject(id=187651612752912, timestamp=1652795532707997110, callback_object=187651612753136)}), (Topic(name='/planning/mission_planning/checkpoint'), {CallbackObject(id=187651612765392, timestamp=1652795532708748753, callback_object=187651612765616)}), (Topic(name='/api/external/set/command/local/control'), {CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651235894224, timestamp=1652795532782967137, callback_object=187651235894448), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/local/shift'), {CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651236009840, timestamp=1652795532783443978, callback_object=187651236010064), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/local/turn_signal'), {CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651236011408, timestamp=1652795532784181021, callback_object=187651236011632), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/local/heartbeat'), {CallbackObject(id=187651236017424, timestamp=1652795532784583022, callback_object=187651236017648), CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/remote/control'), {CallbackObject(id=187651236049552, timestamp=1652795532785299905, callback_object=187651236049776), CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/remote/shift'), {CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651236075584, timestamp=1652795532785742866, callback_object=187651236075808), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/remote/turn_signal'), {CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651236076832, timestamp=1652795532786221508, callback_object=187651236077056), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/api/external/set/command/remote/heartbeat'), {CallbackObject(id=187651236084304, timestamp=1652795532786621950, callback_object=187651236084528), CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520), CallbackObject(id=187651235891120, timestamp=1652795532777152956, callback_object=187651235824752)}), (Topic(name='/planning/scenario_planning/scenario'), {CallbackObject(id=281471220223648, timestamp=1652795532811598358, callback_object=281471220223872), CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), CallbackObject(id=187651235281808, timestamp=1652795547888058696, callback_object=187651235282032), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896), CallbackObject(id=187651234516960, timestamp=1652795547840656808, callback_object=187651234517184), CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/path_change_approval'), {CallbackObject(id=281471220283472, timestamp=1652795532812145400, callback_object=281471220283696), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/path_change_force'), {CallbackObject(id=281471220381760, timestamp=1652795532812642442, callback_object=281471220381984), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)}), (Topic(name='/external/selected/external_control_cmd'), {CallbackObject(id=187651236539712, timestamp=1652795532815699253, callback_object=187651236539936), CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624)}), (Topic(name='/external/selected/gear_cmd'), {CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651236535728, timestamp=1652795532816179894, callback_object=187651236535952), CallbackObject(id=187651240036592, timestamp=1652795548012323617, callback_object=187651240036816), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/external/selected/heartbeat'), {CallbackObject(id=187651236352592, timestamp=1652795532812970643, callback_object=187651236178928), CallbackObject(id=187651236629808, timestamp=1652795532817044218, callback_object=187651236630032), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651236521888, timestamp=1652795532817545579, callback_object=187651236826624), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651239890784, timestamp=1652795548007124319, callback_object=187651239891008)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/input/lateral_offset'), {CallbackObject(id=281471220598896, timestamp=1652795532815813653, callback_object=281471220599120), CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)}), (Topic(name='/control/trajectory_follower/lateral/control_cmd'), {CallbackObject(id=187651237083504, timestamp=1652795532841120743, callback_object=187651237083728)}), (Topic(name='/control/trajectory_follower/longitudinal/control_cmd'), {CallbackObject(id=187651237165200, timestamp=1652795532841552585, callback_object=187651237165424)}), (Topic(name='/control/trajectory_follower/lateral/predicted_trajectory'), {CallbackObject(id=187651237948160, timestamp=1652795532897086822, callback_object=187651237948384), CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864), CallbackObject(id=187651236032816, timestamp=1652795532892080524, callback_object=187651237609216)}), (Topic(name='/perception/obstacle_segmentation/pointcloud'), {CallbackObject(id=187651234424704, timestamp=1652795547837175515, callback_object=187651234424928), CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032), CallbackObject(id=281471555072288, timestamp=1652795547761742567, callback_object=281471555072512), CallbackObject(id=281472225878608, timestamp=1652795547641032339, callback_object=281472225878832), CallbackObject(id=281471292201536, timestamp=1652795553354910549, callback_object=281471292201760), CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584)}), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/trajectory'), {CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432)}), (Topic(name='/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/input/expand_stop_range'), {CallbackObject(id=281471555215120, timestamp=1652795547764540417, callback_object=281471555215344)}), (Topic(name='/planning/scenario_planning/parking/costmap_generator/occupancy_grid'), {CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768), CallbackObject(id=187651235210912, timestamp=1652795547887567254, callback_object=187651235211136)}), (Topic(name='/system/emergency/emergency_state'), {CallbackObject(id=187651239621024, timestamp=1652795548006270996, callback_object=187651239621248), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/control/gate_mode_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651239912896, timestamp=1652795548007646921, callback_object=187651239913120)}), (Topic(name='/autoware/engage'), {CallbackObject(id=187651239920720, timestamp=1652795548008189643, callback_object=187651239920944), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/planning/turn_indicators_cmd'), {CallbackObject(id=187651239936720, timestamp=1652795548009629168, callback_object=187651239936944), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/planning/hazard_lights_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651239969968, timestamp=1652795548010167010, callback_object=187651239970192)}), (Topic(name='/control/shift_decider/gear_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239979264, timestamp=1652795548010624811, callback_object=187651239979488), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/external/selected/control_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651239991632, timestamp=1652795548011089493, callback_object=187651239991856)}), (Topic(name='/external/selected/turn_indicators_cmd'), {CallbackObject(id=187651239995456, timestamp=1652795548011488534, callback_object=187651239995680), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/external/selected/hazard_lights_cmd'), {CallbackObject(id=187651240027632, timestamp=1652795548011898736, callback_object=187651240027856), CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408)}), (Topic(name='/system/emergency/hazard_lights_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651240076560, timestamp=1652795548013225020, callback_object=187651240076784)}), (Topic(name='/system/emergency/gear_cmd'), {CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032), CallbackObject(id=187651239642144, timestamp=1652795547999818893, callback_object=187651238547408), CallbackObject(id=187651240083056, timestamp=1652795548013645782, callback_object=187651240083280)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id'), {CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)}), (Topic(name='/perception/traffic_light_recognition/traffic_signals'), {CallbackObject(id=281471292354688, timestamp=1652795553356545995, callback_object=281471292354912)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_crosswalk_states'), {CallbackObject(id=281471292439776, timestamp=1652795553361648653, callback_object=281471292440000)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_intersection_states'), {CallbackObject(id=281471292458032, timestamp=1652795553362135975, callback_object=281471292458256)}), (Topic(name='/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/input/external_velocity_limit_mps'), {CallbackObject(id=281471292694880, timestamp=1652795553362858017, callback_object=281471292695104)}), (Topic(name='/external/traffic_light_recognition/traffic_signals'), {CallbackObject(id=281471292723984, timestamp=1652795553363274419, callback_object=281471292724208)}), (Topic(name='/awapi/tmp/virtual_traffic_light_states'), {CallbackObject(id=281471292758736, timestamp=1652795553364606664, callback_object=281471292758960)}), (Topic(name='/perception/occupancy_grid_map/map'), {CallbackObject(id=281471292814832, timestamp=1652795553365321826, callback_object=281471292815056)})]\n"
]
}
],
"source": [
"#################################################\n",
"# Data structures & helpers\n",
"#################################################\n",
"\n",
"@dataclass\n",
"class LatencyStats:\n",
" pub_use_latencies: np.ndarray\n",
"\n",
"@dataclass\n",
"class LatencyGraph:\n",
" verts: Set[CallbackObject]\n",
" edges: Dict[Tuple[CallbackObject, CallbackObject], Tuple[Topic, LatencyStats]]\n",
" starts: Set[CallbackObject]\n",
" ends: Set[CallbackObject]\n",
"\n",
"def pub_use_latencies(cb_instances: List[CallbackInstance], pub_instances: List[PublishInstance]):\n",
" if not pub_instances:\n",
" return np.full(len(cb_instances), np.nan)\n",
"\n",
" cb_times =[inst.timestamp.timestamp() for inst in cb_instances].sort()\n",
" pub_times = np.array([pub.timestamp * 1e-9 for pub in pub_instances].sort())\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",
" return pub_use_lats\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_topic: Dict[CallbackObject, Set[Tuple[Topic, float]]] = {}\n",
"topic_to_cb: Dict[Topic, Set[CallbackObject]] = {}\n",
"pub_cb_to_lat_stats: Dict[Tuple[Publisher, CallbackObject], LatencyStats] = {}\n",
"\n",
"for cb in callback_objects.values():\n",
" # Find topics the callback depends on (HEURISTICALLY!)\n",
" # - Timer callbacks: assume that the callback depends on every subscribed topic of the node\n",
" # - Subscription callbacks: assume that the callback only depends on the subscribed topic\n",
"\n",
" if 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",
" owner_node = owner_nodes[0]\n",
" dep_topics = [sub.topic for sub in owner_node.subscriptions]\n",
" elif type(cb.owner).__name__ == SubscriptionObject.__name__:\n",
" owner_node = cb.owner.subscription.node\n",
" dep_topics = [cb.owner.subscription.topic,]\n",
" elif cb.owner is None:\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_cb:\n",
" topic_to_cb[topic] = set()\n",
" topic_to_cb[topic].add(cb)\n",
"\n",
" for pub in topic.publishers:\n",
" pub_cb_to_lat_stats[(pub, cb)] = LatencyStats(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",
" 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 filter_pub_insts_by_interval(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",
" cb_runtime_intervals = [inst_runtime_interval(inst) for inst in cb.callback_instances]\n",
" cb_pub_overlap_counts = [filter_pub_insts_by_interval(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_topic: \n",
" cb_to_scored_topic[cb] = set()\n",
" cb_to_scored_topic[cb].add((pub.topic, score))\n",
"\n",
"#################################################\n",
"# For each callback, compute pub-use latency \n",
"# and runtime\n",
"#################################################\n",
"\n",
"\n",
"\n",
"#################################################\n",
"# Transitively add latencies to get E2E latency\n",
"#################################################"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"interpreter": {
"hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
},
"kernelspec": {
"display_name": "Python 3",
"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
}