From 52e17113b54d4830083c011c633b4b19973037d9 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Thu, 27 Feb 2025 13:40:32 +0900 Subject: [PATCH] feat: add `autoware_localization_evaluation_scripts` (#215) * Added autoware_localization_evaluation_scripts Signed-off-by: Shintaro Sakoda * Added a linebreak Signed-off-by: Shintaro Sakoda * style(pre-commit): autofix * Added a storage option Signed-off-by: Shintaro Sakoda * Added options in README.md Signed-off-by: Shintaro Sakoda * Added ylabel("gyro_bias [rad/s]") Signed-off-by: Shintaro Sakoda --------- Signed-off-by: Shintaro Sakoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../CMakeLists.txt | 12 + .../README.md | 61 ++++ ...ndt_scan_matcher__scan_matching_status.png | Bin 0 -> 145809 bytes .../package.xml | 23 ++ .../scripts/plot_diagnostics.py | 305 ++++++++++++++++++ 5 files changed, 401 insertions(+) create mode 100644 localization/autoware_localization_evaluation_scripts/CMakeLists.txt create mode 100644 localization/autoware_localization_evaluation_scripts/README.md create mode 100644 localization/autoware_localization_evaluation_scripts/media/ndt_scan_matcher__scan_matching_status.png create mode 100644 localization/autoware_localization_evaluation_scripts/package.xml create mode 100755 localization/autoware_localization_evaluation_scripts/scripts/plot_diagnostics.py diff --git a/localization/autoware_localization_evaluation_scripts/CMakeLists.txt b/localization/autoware_localization_evaluation_scripts/CMakeLists.txt new file mode 100644 index 00000000..1dfb9180 --- /dev/null +++ b/localization/autoware_localization_evaluation_scripts/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.5) +project(autoware_localization_evaluation_scripts) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +install(PROGRAMS + scripts/plot_diagnostics.py + DESTINATION lib/${PROJECT_NAME} +) + +ament_auto_package() diff --git a/localization/autoware_localization_evaluation_scripts/README.md b/localization/autoware_localization_evaluation_scripts/README.md new file mode 100644 index 00000000..035c892a --- /dev/null +++ b/localization/autoware_localization_evaluation_scripts/README.md @@ -0,0 +1,61 @@ +# autoware_localization_evaluation_scripts + +This package contains some scripts for evaluating the localization of Autoware. + +Ths scripts are used for the result rosbags of localization, particularly the result_bag from `driving_log_replayer_v2`. + + + +As a test, execute `driving_log_replayer_v2` with the following command: + +```bash +ros2 launch driving_log_replayer_v2 driving_log_replayer_v2.launch.py \ + scenario_path:=$HOME/driving_log_replayer_v2/localization.yaml +``` + +Then, use the scripts for processing the result_bag: + +```bash +$HOME/driving_log_replayer_v2/out/latest/result_bag +``` + +## plot_diagnostics.py + +```bash +ros2 run autoware_localization_evaluation_scripts plot_diagnostics.py \ + \ + --save_dir=/your/path (default:rosbag_path/../) \ + --storage=mcap (default:sqlite3) +``` + +[Example] + +```bash +$ ros2 run autoware_localization_evaluation_scripts plot_diagnostics.py \ + $HOME/driving_log_replayer_v2/out/latest/result_bag +[INFO] [1740561002.740748735] [rosbag2_storage]: Opened database '$HOME/driving_log_replayer_v2/out/latest/result_bag/result_bag_0.db3' for READ_ONLY. +save_dir=PosixPath('$HOME/driving_log_replayer_v2/out/latest/diagnostics_result') +``` + +This command outputs each diagnostic (tsv) and plot result (png). + +```bash +$ tree $HOME/driving_log_replayer_v2/out/latest/diagnostics_result +$HOME/driving_log_replayer_v2/out/latest/diagnostics_result +├── gyro_bias_validator__gyro_bias_validator.png +├── gyro_bias_validator__gyro_bias_validator.tsv +├── localization__ekf_localizer.png +├── localization__ekf_localizer.tsv +├── localization__pose_instability_detector.png +├── localization__pose_instability_detector.tsv +├── localization_error_monitor__ellipse_error_status.png +├── localization_error_monitor__ellipse_error_status.tsv +├── ndt_scan_matcher__scan_matching_status.png +└── ndt_scan_matcher__scan_matching_status.tsv + +0 directories, 10 files +``` + +[Example : ndt_scan_matcher__scan_matching_status.png] + +![ndt_scan_matcher__scan_matching_status.png](./media/ndt_scan_matcher__scan_matching_status.png) diff --git a/localization/autoware_localization_evaluation_scripts/media/ndt_scan_matcher__scan_matching_status.png b/localization/autoware_localization_evaluation_scripts/media/ndt_scan_matcher__scan_matching_status.png new file mode 100644 index 0000000000000000000000000000000000000000..9d8819cd33d12d772727420a86f76c557aa20098 GIT binary patch literal 145809 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⁣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 + + + autoware_localization_evaluation_scripts + 0.1.0 + A package for evaluation localization + Yamato Ando + Taiki Yamada + Shintaro Sakoda + Anh Nguyen + Masahiro Sakamoto + Hayato Mizushima + Apache License 2.0 + + Shintaro Sakoda + + ament_cmake_auto + autoware_cmake + + + ament_cmake + + diff --git a/localization/autoware_localization_evaluation_scripts/scripts/plot_diagnostics.py b/localization/autoware_localization_evaluation_scripts/scripts/plot_diagnostics.py new file mode 100755 index 00000000..82eac299 --- /dev/null +++ b/localization/autoware_localization_evaluation_scripts/scripts/plot_diagnostics.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 +"""A script to parse diagnostics messages from a rosbag file.""" + +import argparse +from pathlib import Path + +from builtin_interfaces.msg import Time +import matplotlib.pyplot as plt +import pandas as pd +from rclpy.serialization import deserialize_message +import rosbag2_py +from rosidl_runtime_py.utilities import get_message + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("rosbag_path", type=Path) + parser.add_argument("--save_dir", type=Path, default=None) + parser.add_argument("--storage", type=str, default="sqlite3", choices=["sqlite3", "mcap"]) + return parser.parse_args() + + +def parse_stamp(stamp: Time) -> int: + return stamp.sec * int(1e9) + stamp.nanosec + + +def diag_name_to_filename(diag_name: str) -> str: + return diag_name.replace(":", "_").replace(" ", "_") + + +def parse_diagnostics_msgs(rosbag_path: str, target_list: list, storage: str) -> dict: + serialization_format = "cdr" + storage_options = rosbag2_py.StorageOptions( + uri=str(rosbag_path), + storage_id=storage, + ) + converter_options = rosbag2_py.ConverterOptions( + input_serialization_format=serialization_format, + output_serialization_format=serialization_format, + ) + + reader = rosbag2_py.SequentialReader() + reader.open(storage_options, converter_options) + + topic_types = reader.get_all_topics_and_types() + type_map = {topic_types[i].name: topic_types[i].type for i in range(len(topic_types))} + + storage_filter = rosbag2_py.StorageFilter(topics=["/diagnostics"]) + reader.set_filter(storage_filter) + + data_dict: dict = {key: [] for key in target_list} + + while reader.has_next(): + (topic, data, timestamp_rosbag) = reader.read_next() + msg_type = get_message(type_map[topic]) + msg = deserialize_message(data, msg_type) + timestamp_header = parse_stamp(msg.header.stamp) + for status in msg.status: + if status.name not in target_list: + continue + curr_data = {kv.key: kv.value for kv in status.values} + curr_data["timestamp_rosbag"] = timestamp_rosbag + curr_data["timestamp_header"] = timestamp_header + curr_data["level"] = int.from_bytes(status.level, "big") + curr_data["message"] = status.message + data_dict[status.name].append(curr_data) + return data_dict + + +if __name__ == "__main__": + args = parse_args() + rosbag_path = args.rosbag_path + save_dir = args.save_dir + storage = args.storage + + if save_dir is None: + if rosbag_path.is_dir(): # if specified directory containing db3 files + save_dir = rosbag_path.parent / "diagnostics_result" + else: # if specified db3 file directly + save_dir = rosbag_path.parent.parent / "diagnostics_result" + + target_list = [ + "ndt_scan_matcher: scan_matching_status", + "localization: ekf_localizer", + "localization_error_monitor: ellipse_error_status", + "localization: pose_instability_detector", + "gyro_bias_validator: gyro_bias_validator", + ] + + data_dict = parse_diagnostics_msgs(rosbag_path, target_list, storage) + + save_dir.mkdir(exist_ok=True) + print(f"{save_dir=}") + + ################################ + # save diagnostics data as tsv # + ################################ + for key, data in data_dict.items(): + df = pd.DataFrame(data) + for col in df.columns: + if pd.api.types.is_numeric_dtype(df[col]): + df[col] = df[col].astype(float) + df[col] = df[col].apply(lambda x: int(x) if x.is_integer() else x) + filename = diag_name_to_filename(key) + df.to_csv( + save_dir / f"{filename}.tsv", + index=False, + sep="\t", + float_format="%.9f", + ) + + # Fix timestamp to relative time from the first message and convert to seconds + # (for better visualization) + for one_data_dict_key in data_dict: + one_data_dict = data_dict[one_data_dict_key] + if len(one_data_dict) == 0: + continue + first_h = int(one_data_dict[0]["timestamp_header"]) + first_r = int(one_data_dict[0]["timestamp_rosbag"]) + for row in one_data_dict: + row["timestamp_header"] = int(row["timestamp_header"]) - first_h + row["timestamp_rosbag"] = int(row["timestamp_rosbag"]) - first_r + row["timestamp_header"] /= 1e9 + row["timestamp_rosbag"] /= 1e9 + + #################### + # ndt_scan_matcher # + #################### + diag_name = "ndt_scan_matcher: scan_matching_status" + df = pd.DataFrame(data_dict[diag_name]) + key_list = [ + "execution_time", + "iteration_num", + "sensor_points_size", + "sensor_points_delay_time_sec", + "skipping_publish_num", + "transform_probability", + "transform_probability_diff", + "nearest_voxel_transformation_likelihood", + "nearest_voxel_transformation_likelihood_diff", + "local_optimal_solution_oscillation_num", + "distance_initial_to_result", + ] + plt.figure(figsize=(6.4 * 2, 4.8 * 2)) + for i, key in enumerate(key_list): + if key not in df.columns: + print(f"Skip {key}") + continue + df[key] = df[key].astype(float) + df = df.dropna(subset=[key]) + plt.subplot(4, 3, i + 1) + plt.plot(df["timestamp_header"], df[key], label=key) + if key == "nearest_voxel_transformation_likelihood": + plt.plot( + df["timestamp_header"], + [2.3 for _ in range(len(df))], + label="threshold", + linestyle="dashed", + ) + plt.xlabel("time [s]") + plt.title(f"{key}") + plt.ylim(bottom=min(0, df[key].min())) + plt.grid() + + plt.tight_layout() + save_path = save_dir / f"{diag_name_to_filename(diag_name)}.png" + plt.savefig(save_path, bbox_inches="tight", pad_inches=0.05) + + ################# + # ekf_localizer # + ################# + diag_name = "localization: ekf_localizer" + df = pd.DataFrame(data_dict[diag_name]) + df = df[df["is_activated"] == "True"] + key_list = [ + "pose_mahalanobis_distance", + "twist_mahalanobis_distance", + "cov_ellipse_long_axis_size", + "cov_ellipse_lateral_direction_size", + ] + plt.figure(figsize=(6.4 * 2, 4.8 * 2)) + for i, key in enumerate(key_list): + if key not in df.columns: + print(f"Skip {key}") + continue + df[key] = df[key].astype(float) + key_threshold = ( + key + "_threshold" if "mahalanobis" in key else key.replace("_size", "_warn_threshold") + ) + df[key_threshold] = df[key_threshold].astype(float) + plt.subplot(4, 1, (i + 1)) + plt.plot(df["timestamp_header"], df[key], label=key) + plt.plot(df["timestamp_header"], df[key_threshold], label=key_threshold) + plt.xlabel("time [s]") + plt.title(f"{key}") + plt.grid() + + plt.tight_layout() + save_path = save_dir / f"{diag_name_to_filename(diag_name)}.png" + plt.savefig(save_path, bbox_inches="tight", pad_inches=0.05) + + ############################# + # pose_instability_detector # + ############################# + diag_name = "localization: pose_instability_detector" + df = pd.DataFrame(data_dict[diag_name]) + + plt.figure(figsize=(6.4 * 2, 4.8 * 2)) + target_names = ["position", "angle"] + for i, target_name in enumerate(target_names): + plt.subplot(2, 1, i + 1) + key_list = [ + f"diff_{target_name}_x", + f"diff_{target_name}_y", + f"diff_{target_name}_z", + ] + for key in key_list: + key_value = key + ":value" + key_threshold = key + ":threshold" + if key_value not in df.columns or key_threshold not in df.columns: + print(f"Skip {key}") + continue + df[key_value] = df[key_value].astype(float) + df[key_threshold] = df[key_threshold].astype(float) + plt.plot(df["timestamp_header"], df[key_value], label=key_value) + plt.plot( + df["timestamp_header"], + df[key_threshold], + linestyle="dashed", + ) + plt.plot( + df["timestamp_header"], + -df[key_threshold], + linestyle="dashed", + ) + plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0) + plt.xlabel("time [s]") + unit = "[m]" if target_name == "position" else "[rad]" + plt.ylabel(f"diff_{target_name} {unit}") + plt.grid() + + plt.tight_layout() + save_path = save_dir / f"{diag_name_to_filename(diag_name)}.png" + plt.savefig(save_path, bbox_inches="tight", pad_inches=0.05) + + ############################## + # localization_error_monitor # + ############################## + diag_name = "localization_error_monitor: ellipse_error_status" + df = pd.DataFrame(data_dict[diag_name]) + key_list = [ + "localization_error_ellipse", + "localization_error_ellipse_lateral_direction", + "level", + ] + plt.figure(figsize=(6.4 * 2, 4.8 * 2)) + for _, key in enumerate(key_list): + if key not in df.columns: + print(f"Skip {key}") + continue + df[key] = df[key].astype(float) + plt.plot(df["timestamp_header"], df[key], label=key) + plt.xlabel("time [s]") + plt.ylabel("error_ellipse [m]") + plt.grid() + plt.legend() + plt.tight_layout() + save_path = save_dir / f"{diag_name_to_filename(diag_name)}.png" + plt.savefig(save_path, bbox_inches="tight", pad_inches=0.05) + + ####################### + # gyro_bias_validator # + ####################### + diag_name = "gyro_bias_validator: gyro_bias_validator" + df = pd.DataFrame(data_dict[diag_name]) + key_list = [ + "estimated_gyro_bias_x", + "estimated_gyro_bias_y", + "estimated_gyro_bias_z", + ] + plt.figure(figsize=(6.4 * 2, 4.8 * 2)) + for _, key in enumerate(key_list): + if key not in df.columns: + print(f"Skip {key}") + continue + df[key] = df[key].astype(float) + plt.plot(df["timestamp_header"], df[key], label=key) + if "gyro_bias_threshold" in df.columns: + plt.plot( + df["timestamp_header"], + df["gyro_bias_threshold"].astype(float), + linestyle="dashed", + ) + plt.plot( + df["timestamp_header"], + -df["gyro_bias_threshold"].astype(float), + linestyle="dashed", + ) + plt.xlabel("time [s]") + plt.ylabel("gyro_bias [rad/s]") + plt.grid() + plt.legend() + plt.tight_layout() + save_path = save_dir / f"{diag_name_to_filename(diag_name)}.png" + plt.savefig(save_path, bbox_inches="tight", pad_inches=0.05)