🚗

[AI Challenge 2025] ROS2 GraphでAutoware-Microを可視化したので理解したい

に公開

何をしたの?

ROS2 Graphというツールを用いて、自動運転AIチャレンジ2025のROS2ノードを可視化してみました。

https://github.com/kiwicampus/ros2_graph

なぜやったの?

ありがたいことに公式からAutoware-Microの全体ノード図はあったのですが、もっと詳しい内容も含めて、一歩ずつ理解したい思ったためです。

https://automotiveaichallenge.github.io/aichallenge-documentation-2025/development/main-module.html

どうやったの?

先人の知恵をお借りいたしました。

https://qiita.com/akinami/items/af4221b3044304c9df33

Docker内でrun_evaluation.bashでautowareを立ち上げ後、走っている最中にbashを実行して/latestディレクトリに出力させました。
実際に使用したbashはこちらになります。

nodes=$(ros2 node list)

for node in $nodes; do
    node_without_slash=$(echo $node | sed 's/^\///')
    node_without_slash=$(echo $node_without_slash | sed 's/\//_/g')
    ros2_graph $node -o /output/latest/nodes/${node_without_slash}.svg
done

少しだけ楽した点としては、事前にフォルダを作っておかないと「そんなフォルダが存在しないがな」と怒られるので、/をすべて_にしたくらいです。それ以外はほぼお借りしたものをそのまま使っています。

ちなみにros2 node listの中身はこんな感じでした。
かなり多くのノードが立ち上がっていることが分かります。

$ ros2 node list
/AWSIM
/actuation_cmd_converter
/control_mode_adapter
/goal_pose_setter
/initial_pose_relay
/launch_ros_250
/localization/ekf_localizer
/localization/gyro_odometer
/localization/imu_gnss_poser
/localization/transform_listener_impl_5f0cfee8b560
/localization/twist2accel
/map/lanelet2_map_loader
/map/lanelet2_map_visualization
/map/map_container
/map/vector_map_tf_generator
/planning/scenario_planning/simple_trajectory_generator
/raw_vehicle_cmd_converter
/relay_velocity
/robot_state_publisher
/rviz2
/sensing/gnss/racing_kart_gnss_poser
/sensing/gnss/transform_listener_impl_56f0437131b8
/sensing/imu/imu_corrector
/sensing/imu/transform_listener_impl_5ad40ac3e0f0
/sensing/vehicle_velocity_converter_node
/simple_pure_pursuit_node
/system/system_monitor/cpu_monitor
/system/system_monitor/mem_monitor
/system/system_monitor/process_monitor
/system/system_monitor/system_monitor/system_monitor_container
/system/system_monitor/voltage_monitor
/transform_listener_impl_5c9bd4023930

pngで出力もできるのですが、文字がとても読める解像度にならず。svgで出力するのが無難だと思われます。
それでも図形の形で端の文字が読めなくなることがあるのは、どうにかならないものか。

実際に出力された画像を眺める

/localization/ekf_localizer

車両の状態や位置、速度、向きなどの情報が詰まっている。
各所にトピックをパブリッシュしている。根幹部分のような。

/planning/scenario_planning/simple_trajectory_generator

追従する経路情報。基本的に影響を受けるのはsimple_pure_pursuite_nodeだけっぽい。

/simple_pure_pursuit_node

経路追従制御のアルゴリズムの一つ。

/localization/ekf_localizerノードから車両の状態や位置、速度、向きなどの情報と追従する経路情報(/planning/scenario_planning/simple_trajectory_generatorノード)を受け取り、制御指令(AckermannControlCommand)を車両に出している(/raw_vehicle_cmd_converterノード)。

送っているのは/control/command/control_cmdなので、ここで目標を伝え、後段でその目標を解釈し、適切なアクセス、ブレーキ、操舵角を決めるっぽい。

https://automotiveaichallenge.github.io/aichallenge-documentation-2025/specifications/interface.html#controlcommandcontrol_cmd

/raw_vehicle_cmd_converter

/simple_pure_pursuite_nodeノードから受けた指示と、/localization/ekf_localizerノードから車両情報を受け取り、/actuation_cmd_converterノードにActuationCommandStampedというのを送っている。要調査。

/actuation_cmd_converter

下記ドキュメントの仕様から、車両に対するアクセス、ブレーキ、タイヤ角の指示がここに詰まっている。

https://automotiveaichallenge.github.io/aichallenge-documentation-2025/specifications/interface.html#controlcommandactuation_cmd

Discussion