コンテンツにスキップ

core_shooter

左右タレットの射撃・照準・マガジン管理を行うシューターパッケージです。

概要

デュアルタレット構成で、各タレットが独立した照準(aim_bot)、射撃制御(shooter_controller)、マガジン管理(magazine_manager)を持ちます。ビジョンによる自動追尾と手動照準の両モードに対応します。

graph TB
    subgraph Input
        ManualMode["/manual_mode"]
        ManualPitch["/manual_pitch"]
        ShootOnce["/left/shoot_once"]
        ShootMotor["/shoot_motor"]
        TargetPose["/left/target_pose"]
        JointState["/joint_state"]
        Hazard["/system/emergency/hazard_status"]
    end

    Gate["shooter_cmd_gate"] --> LCtrl["left/shooter_controller"]
    Gate --> RCtrl["right/shooter_controller"]
    ManualMode --> Gate
    ManualPitch --> Gate
    ShootOnce --> Gate
    ShootMotor --> Gate

    TargetPose --> LAim["left/aim_bot"]
    JointState --> LAim
    Hazard --> LAim

    LCtrl --> LCmd["/left/shoot_cmd"]
    LAim --> LCAN["/can/tx"]

    LMag["left/magazine_manager"]

ノード

shooter_cmd_gate

射撃コマンドのゲート。手動/自動制御を左右タレットに振り分けます。

shooter_controller(左右各1)

シューターモーターとローディング機構を制御。単発・バースト・フルオートモードに対応。ジャム検出機能あり。

magazine_manager(左右各1)

ディスクマガジンの管理。高さセンサでディスク数を推定し、リグリップ機能を提供します。

aim_bot(左右各1)

ビジョンベースのターゲット追尾。ゾーン別角度制限、手動モード時の固定角度制御に対応します。

入力

トピック 説明
/left/shoot_once, /right/shoot_once std_msgs/Bool 単発射撃コマンド
/left/shoot_burst, /right/shoot_burst std_msgs/Bool バースト射撃コマンド
/left/shoot_fullauto, /right/shoot_fullauto std_msgs/Bool フルオート射撃コマンド
manual_mode std_msgs/Bool 手動照準モード切替
manual_pitch std_msgs/Float32 手動ピッチ入力 [-1.0〜1.0]
/shoot_motor std_msgs/Bool シューターモーター状態
joint_state sensor_msgs/JointState モーター関節状態フィードバック
damage_panel_pose geometry_msgs/PointStamped ビジョンからのターゲット検出
/system/emergency/hazard_status std_msgs/Bool 緊急停止信号
distance sensor_msgs/Range マガジン充填高さセンサ

出力

トピック 説明
shoot_cmd std_msgs/Int32 射撃コマンド(CAN経由)
shoot_motor std_msgs/Float32 シューターモーター指令
manual_mode std_msgs/Bool 手動モード状態(左右別)

パラメータ

設定ファイル: config/shooter.params.yaml

ShooterController

パラメータ デフォルト 説明
shoot_motor_id 15/16 シューターモーターCAN ID(左/右)
loading_motor_id 12/8 ローディングモーターCAN ID(左/右)
burst_count 3 バーストモードの発数
shoot_interval_ms 500 単発射撃間隔 [ms]
burst_interval_ms 500 バースト射撃間隔 [ms]
fullauto_interval_ms 500 フルオート射撃間隔 [ms]
loading_motor_speed 6.5 ローディングモーター速度 [rev/s]
target_speed [2000, 1750, 1500] シューターモーター目標速度
enable_jam_detection false ジャム検出有効化

MagazineManager

パラメータ デフォルト 説明
max_disks 30 最大ディスク容量
disk_thickness 20.0 ディスク厚さ [mm]
sensor_height 500.0 センサ高さ [mm]
regrip_enabled true リグリップ機能有効化
regrip_release_ms 1000 リグリップ保持時間 [ms]

AimBot

パラメータ デフォルト 説明
pitch_motor_id 11/7 ピッチモーターCAN ID(左/右)
yaw_motor_id 5/6 ヨーモーターCAN ID(左/右)
rate 30.0 更新レート [Hz]
horizontal_fov_deg 100.0 水平視野角 [deg]
yaw_image_gain 0.0005 ヨー画像追尾ゲイン
pitch_image_gain 0.0005 ピッチ画像追尾ゲイン
target_timeout_sec 0.2 ターゲット検出タイムアウト [s]
enable_zone_angle_limit true ゾーン別角度制限有効化

起動

ros2 launch core_shooter shooter.launch.py

タレット構成

左右タレットはそれぞれ left/right/ 名前空間で起動されます。モーターIDはランチファイルで左右別に設定されます。

デバッグツール

shooter_debug_topic_gui

Tkinterベースのデバッグ用GUIツールです。実機やハードウェアがなくても、シューターシステムの各トピックを手動でパブリッシュ・モニタリングできます。

ros2 run core_shooter shooter_debug_topic_gui

主な機能

トピックパブリッシュ:

  • テストモード・手動モードの切替(/test_mode, /manual_mode
  • 射撃コマンド送信(単発・バースト・フルオート、左右独立)
  • ヨー・ピッチ角の手動入力(/left/test_yaw_angle 等)
  • シューターモーター速度の制御
  • リロード・ディスクホールド操作
  • 緊急停止の発行
  • CAN フレームの直接送信(/can/tx

モニタリング:

  • 残弾数(/left/remaining_disk, /right/remaining_disk
  • 射撃ステータス・コマンド値
  • 距離センサ値
  • 全17モーターの関節角度・速度(/joint_states
  • CAN送信フレームのリアルタイム表示

ターゲット指定:

  • 640x360 のキャンバス上でクリックしてターゲット画像位置を設定(/left/target_image_position, /right/target_image_position
  • 自動追尾のテストに使用

テストモード

/test_mode トピックを true にすると、shooter_controller と aim_bot がテストモードに切り替わります。テストモードではジャム検出やシューターモーター回転コマンドの遅延チェックなど一部の安全チェックがバイパスされます。