システム概要¶
ナビゲーションパイプライン¶
graph TB
subgraph Inputs
Unity["Unity Sim\n/sim_odom"]
FASTLIO["FAST-LIO\n/Odometry"]
MapPNG["core1_field.png"]
LiDAR["Livox Mid-360\n/livox/lidar"]
end
BehaviorSystem["Behavior System"]
subgraph Bridge["データ変換"]
OdomBridge["odom_bridge_node"]
MapServer["map_server_node"]
end
subgraph Planning["経路計画・コストマップ"]
PathPlanner["path_planner_node"]
CostmapBuilder["costmap_build_node"]
end
MPPI["core_mppi_node"]
Smoother["cmd_vel_smoother_node"]
subgraph Control["車体制御"]
BodyController["body_control_node"]
Hardware["core_hardware"]
end
RViz["RViz2"]
Unity -->|/sim_odom| OdomBridge
FASTLIO -->|/Odometry| OdomBridge
MapPNG --> MapServer
LiDAR -->|/livox/lidar| CostmapBuilder
BehaviorSystem -->|/goal_pose| PathPlanner
OdomBridge -->|/start_pose| PathPlanner
OdomBridge -->|/odom| MPPI
OdomBridge -->|TF| RViz
MapServer -->|/map| PathPlanner
MapServer -->|/costmap/global| MPPI
PathPlanner -->|/planned_path| MPPI
CostmapBuilder -->|/costmap/local| MPPI
MPPI -->|/cmd_vel_raw| Smoother
Smoother -->|/cmd_vel| BodyController
BodyController -->|can/tx| Hardware
style MapPNG fill:#e1f5fe,color:#333
style Unity fill:#e1f5fe,color:#333
style FASTLIO fill:#e1f5fe,color:#333
style LiDAR fill:#e1f5fe,color:#333
subgraph Shooter["射撃系"]
Camera["カメラ"] -->|画像| TargetDetector["target_detector"]
TargetDetector --> TargetSelector["target_selector"]
TargetSelector -->|target_pose| AimBot["aim_bot"]
ShooterGate["shooter_cmd_gate"] --> ShooterCtrl["shooter_controller"]
MagazineMgr["magazine_manager"]
end
subgraph SystemMode["システム管理"]
WirelessParser["wireless_parser_node"]
EmergencyHandler["emergency_handler_node"]
Diagnostic["diagnostic_node"]
Diagnostic --> EmergencyHandler
end
WirelessParser -->|/cmd_vel| BodyController
EmergencyHandler -->|/hazard_status| BodyController
AimBot -->|can/tx| Hardware
ShooterCtrl -->|can/tx| Hardware
subgraph Localization["局在化(実機オプション)"]
PCDMap["PCD地図"] -->|点群| LocalizationNode["localization_node"]
end
FASTLIO -->|/cloud_registered| LocalizationNode
LocalizationNode -->|"map→odom TF"| RViz
style Localization fill:#e8f5e9,color:#333
style BehaviorSystem fill:#fff3e0,color:#333
ノード一覧¶
| ノード | パッケージ | 言語 | 役割 |
|---|---|---|---|
odom_bridge_node |
core_launch | Python | オドメトリソース切替、座標変換、TFブロードキャスト |
map_server_node |
core_launch | Python | PNG画像をOccupancyGridに変換してパブリッシュ |
path_planner_node |
core_path_planner | C++ | A*アルゴリズムによるグローバル経路計画 |
core_mppi_node |
core_mppi | C++ | MPPI(Model Predictive Path Integral)ローカル制御、ゴール到達判定 |
cmd_vel_smoother_node |
core_cmd_vel_smoother | C++ | cmd_vel EMA平滑化フィルタ |
costmap_build_node |
core_costmap_builder | C++ | LiDAR点群からローリングウィンドウ式ローカルコストマップ生成 |
body_control_node |
core_body_controller | C++ | cmd_vel→オムニホイールCAN指令変換、レートリミッタ |
target_angle_node |
core_body_controller | C++ | 車体回転角度PID制御(IMU+エンコーダ) |
core_hardware |
core_hardware | C++ | EtherCAT(SOEM)によるTeensy41スレーブ通信 |
ros_tcp_endpoint |
ROS-TCP-Endpoint | Python | Unity-ROS2 TCPブリッジ |
localization_node |
core_localization | C++ | NDT/ICPによるPCDマップベースのグローバル局在化(map→odom 動的TF) |
target_detector |
core_enemy_detection | C++ | カメラ画像からダメージパネル検出 |
target_selector |
core_enemy_detection | C++ | 最大面積パネルのターゲット選択 |
emergency_handler_node |
core_mode | C++ | 緊急信号集約・ハザード状態管理 |
diagnostic |
core_mode | C++ | マイコン/受信機ハートビート監視 |
wireless_parser_node |
core_ros_player_controller | C++ | ワイヤレスコントローラ入力パーサー |
shooter_cmd_gate |
core_shooter | C++ | 射撃コマンドゲート(左右振り分け) |
shooter_controller |
core_shooter | C++ | 射撃モーター・ローディング制御(左右各1) |
magazine_manager |
core_shooter | C++ | ディスクマガジン管理(左右各1) |
aim_bot |
core_shooter | C++ | ビジョンベースターゲット追尾(左右各1) |
起動モード¶
起動モードの詳細(コマンド、引数、実機テスト手順など)はナビゲーション起動ガイドを参照してください。
| モード | TCP EP | odom | localization |
|---|---|---|---|
| sim(デフォルト) | o | sim | x |
| sim + FAST-LIO | o | FAST-LIO | x |
| 実機 | x | FAST-LIO | x |
| 実機 + localization | x | FAST-LIO | o |
静的TF¶
navigation.launch.py で以下の静的TFがブロードキャストされます:
| 親フレーム | 子フレーム | 変換 |
|---|---|---|
map |
odom |
恒等変換(デフォルト)。use_localization:=true 時は localization_node が動的に更新 |
base_link |
livox_frame |
z=+0.5m, roll=π(上下反転) |
動的TFはTFフレームと座標系を参照してください。