Skip to content
takeoverjp edited this page Feb 9, 2021 · 27 revisions

全体像

  • 起動処理
  • 走行
  • 敵機検出
  • 安定化

詳細

  • 起動処理

    • 初期化
    • ゲーム状態の管理
  • 走行

    • 自律走行アルゴリズム
    • パラメータ
    • 地図
    • ルート
  • 敵機検出

    • LIDARによる敵検出(obstacle detector)
    • お見合い対策
    • 画像処理
  • 安定化

    • 衝突回避
    • 走行ルート選択効率化
  • memo

■入力
tf: 自己位置
enemy_position: 敵っぽいものの座標情報(LIDARから点群を取得して、そこから敵位置)
scan: LIDARの点群(前方の障害物衝突回避の為)

■出力
move base

  1. LIDAR,障害物のコストマップ
  2. コストマップから経路を引く global plannerはこちら/open source
  3. どんな速度、角速度を出すか local plannerはこちら/

rqt_graph

重要な実装

  • seigoRun2.py

    • いわゆるmain node
    • IN: /tf, 座標情報
    • IN: /scan, Lidar
    • IN: /move_base/action_topics, ???
    • IN: /enemy_position, 敵位置
    • OUT: /move_base/action_topics, 移動先座標を指定
    • OUT: /cmd_val, 移動量を指定(敵発見時。これを使うときは/move_baseを止める)
    • 状態遷移
      • BASIC: 敵を見つけていない場合、もしくは遠い場合。
      • DEFENCE: 敵が近くにいて、得点が勝っている場合。
      • ATTACK: 敵が近くにいて、得点が負けている場合。
      • ESCAPE: 敵が近くにいて、得点が負けている場合。
      • ATTACKかESCAPEかはrosparam(enable_escape_approach)で決める
  • following_planner

    • move_baseのlocal planner pluginとして実装されている
    • defaultで使用されるOSSのlocal plannerは、大きく迂回してしまう課題があったため、 global plannerが生成する経路に比較的忠実に沿って動くlocal plannerを自作した
  • enemy_detector

    • IN:/obstacles, obstacle_tracker nodeが検出したobstacles
    • 処理:既知の障害物を除いて敵っぽい物体を選別
    • OUT: /enemy_position, 敵の位置情報
Clone this wiki locally