rogi_nav アーキテクチャ
現在の実装と example/sample の設定を基にした概要図です。実線は主な実行時のデータフロー、破線は経路ファイルの読み込みを表します。図は直接編集できる SVG で、ブラウザのライト/ダークテーマと「視差効果を減らす」設定に対応しています。接続線のアニメーションは方向を示す装飾であり、実際の通信状態や周期を示すものではありません。
起動と行動制御
rogi_nav.launch.py が example の設定を読み込み、各コンポーネントを起動します。real.yaml / sim.yaml で実行環境と有効なノードを選び、initial_pose.yaml で初期位置を指定します。図のカードは機能単位であり、プロセスやコンテナの境界ではありません。
state_node は BehaviorTree.CPP v3 で tree/main.xml を実行します。WaitStart は /start を待ち、FollowPath は /follow_path action に path_index を渡します。結果・キャンセルの接続は図では省略しています。
simple_pure_pursuit は事前に作成した経路 CSV を読み込み、指定された経路と /localization_pose から /cmd_vel を生成します。/robot_pose の Pose2D 入力にも対応しています。図の経路 CSV はオンラインの経路計画ノードではありません。
地図・自己位置推定
map_loader / map_converter は直線・円の CSV を読み込み、形状地図 /raw_map と占有格子地図 /map を配信します。
localization.launch.py は localization_method に応じて以下の一方を起動します。
手法 |
主な入力 |
出力 |
|---|---|---|
|
|
|
|
LaserScan、 |
|
sensing.launch.py の PicoScan・scan merger・line detector は RANSAC 選択時に起動します。EMCL2 は line detector を経由しません。シミュレーションでの scan 入力は scan_frame_normalizer が /scan_for_localization に出力します。実機で EMCL2 を利用する場合は、別途 LaserScan の供給元とトピック設定が必要です。図では EMCL2 への scan 接続と各ノードの TF 接続を文字で補足しています。
トピック名は launch の remap と example の設定を反映した代表例です。ノードを単体起動した場合や設定を変更した場合は異なることがあります。
実機とシミュレーション
プロファイル |
指令 |
フィードバック |
|---|---|---|
実機 |
|
PicoScan の scan、 |
Gazebo |
|
scan、 |
実機インターフェースの rs485_interface2 と stm32_mavlink_udp は外部パッケージです。図では launch が選択する接続先としてまとめています。
シミュレータのディレクトリ名は rogi_simulator、ROS パッケージ名は gazebo_simulator です。オドメトリのドリフト付与は設定で切り替えます。図の左端の矢印は選択された実行環境からのセンサーフィードバックをまとめたものです。
可視化
RViz2 と visualizer は地図・経路・自己位置を表示します。Groot Monitor は state_node の ZeroMQ 出力で Behavior Tree の状態を表示します。統合 Web 配信は RViz / Groot をブラウザのタブで表示します。これらは設定で有効化する観測用ツールです。
図の編集
編集対象は _static/architecture.svg です。外部フォント・画像・JavaScript への依存はありません。変更後はブラウザで開き、文字のはみ出しと接続線を確認してください。
デザイン参考: Grove-G1 のアーキテクチャ図。色分け・角丸カード・流れる接続線の表現を参考に、rogi_nav の実装に合わせて作成しています。