[Nav2] 파라미터 - Planner, Controller

Hyuna·2025년 2월 24일

Nav2

목록 보기
2/2
post-thumbnail

Nav2 Plugins docs



로봇이 맵을 기반으로 자율주행 하기 위해 먼저 활성화되어 있어야 하는 노드는 map_serveramcl이다.

  • map_server : 기존에 존재하는 맵파일을 /map으로 발행하여 로봇이 주변환경 인식
  • amcl : 파티클 필터를 사용하여 로봇의 위치 실시간 추적, map - base_link 프레임 간 변환 제공



파라미터 변경 실시간으로 확인하기

rqt - Plugins - Parameter Reconfigure

planner_server


planner_server/map 기반으로 로봇의 시작위치에서 목표지점까지 도달하기 위한 전역 경로를 생성한다.


planner_server:
  ros__parameters:
    expected_planner_frequency: 20.0
    use_sim_time: True
    planner_plugins: ["GridBased"]
    GridBased:
      plugin: "nav2_navfn_planner/NavfnPlanner"
      tolerance: 0.5
      use_astar: false
      allow_unknown: true


  • expected_planner_frequency : 20
    • 플래너가 경로를 계산하는 빈도로 초당 20번 경로 갱신
    • 이 값이 너무 높으면 CPU 리소스를 낭비할 수 있음


🌱 플러그인이란?

코드를 수정하지 않고 기존 프로그램에 새로운 기능을 추가하거나 기존 기능을 수정할 수 있도록 하는 모듈

planner_plugins - NavFn Planner

planner server는 자체적으로 경로를 생성하는 것이 아니라, 전역 경로 생성을 위한 다양한 알고리즘 플러그인을 로드하여 경로를 생성을 맡긴다. 따라서 ,플러그인을 교체함으로써 전역 경로 생성 방식을 바꿀 수 있다.
NavFn은 Dijkstra 알고리즘을 기반으로 하며, 선택적으로 A* 알고리즘도 사용할 수 있다.


  • Dijkstra - (use_astar: false)
    : 시작점에서 목표지점까지 모든 가능한 경로를 탐색하여 가장 비용이 적은 경로를 선택한다. 항상 최단 경로를 보장하지만 연산량이 많다.


  • A* - (use_astar: true) : 높은 비용 지역(장애물)을 피하면서 목표지점까지 향하는 경로를 생성한다. 계산 속도 개선이 가능하다.
    `



    GridBased:
      plugin: "nav2_navfn_planner/NavfnPlanner"
      tolerance: 0.5
      use_astar: false
      allow_unknown: true
  • tolerance: 0.5

    • 로봇이 목표 지점으로부터 0.5m 이내 도달하면 성공으로 간주
  • allow_unknown: true

    • 미지의 영역을 경로로 생성할지 결정


controller_server


controller_server는 전역 경로를 기반으로 실시간 장애물을 고려한 로컬 경로를 생성한다. 센서 데이터를 통해 장애물을 감지하고 회피하면서 로봇이 안전하게 이동할 수 있게 한다.



controller_server:
  ros__parameters:
    use_sim_time: False
    controller_frequency: 20.0
    min_x_velocity_threshold: 0.001
    min_y_velocity_threshold: 0.5
    min_theta_velocity_threshold: 0.001
    failure_tolerance: 0.3
    progress_checker_plugin: "progress_checker"
    goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
    controller_plugins: ["FollowPath"]
    
    
  • controller_frequency: 20.0
    • 플래너가 경로를 계산하는 빈도로 초당 20번 경로 갱신
  • min_x_velocity_threshold: 0.001
    • 로봇의 X축 선속도에 대한 최소 임계값
    • x축 속도가 0.001 m/s 이하일 경우 0으로 간주하여 불필요한 미세 움직임 방지
  • min_y_velocity_threshold: 0.5
    • 로봇의 Y축 선속도에 대한 최소 임계값
    • Y축 속도가 0.5 m/s 이하일 경우 0으로 간주
  • min_theta_velocity_threshold: 0.001
    • 로봇 회전속도에 대한 최소 임계값
    • 회전 속도가 0.001 rad/s이하일 경우 0으로 간주하여 미세 회전 방지
  • failure_tolerance: 0.3
    • 로봇이 경로를 제대로 따라가지 못하는 경우 허용할 오차 범위
    • 0.3m를 초과하면 경로를 벗어난 것으로 판단


📌 progress_checker_plugins

로봇이 목표 지점을 향해 진전을 이루고 있는지 확인하는 플러그인이다. 로봇이 너무 오랫동안 같은 위치에 머무르거나 움직이지 않는 경우를 감지한다.

  • SimpleProgressChecker : 로봇이 지정된 시간 동안 일정거리만큼 이동했는지 확인
  • PoseProgressChecker : 로봇의 위치변화 뿐만 아니라 회전도 고려하여 진행 상황 확인


    progress_checker:
      plugin: "nav2_controller::SimpleProgressChecker"
      required_movement_radius: 0.5
      movement_time_allowance: 10.0
  • required_movement_radius: 0.5
    • 로봇이 이동했다고 간주되는 최소 거리
    • 0.5m 이상 이동해야 진행중으로 판단
  • movement_time_allowance: 10.0
    • 로봇이 이동 없이 멈춰있을 수 있는 최대 허용 시간
    • 로봇이 10초 이상 멈춰 있을 경우 경로 진행에 실패한 것으로 간주


📌 goal_checker_plugins

로봇이 목표 지점에 도착했는지 확인하는 플러그인이다.

  • SimpleGoalChecker : 로봇이 목표 위치에 도달하면 바로 성공
  • StoppedGoalChecker : 로봇이 목표 위치에 도달하고 완전히 정지해야 성공 → 정밀 작업용 로봇


    goal_checker:
      plugin: "nav2_controller::SimpleGoalChecker"
      xy_goal_tolerance: 0.25
      yaw_goal_tolerance: 0.25
      stateful: True
  • xy_goal_tolerance: 0.25

    • 목표 도달 완료 기준을 충족하기 위한 허용 오차
  • yaw_goal_tolerance: 0.25

    • 목표 도달 완료 기준을 충족하기 위한 회전 허용 오차
    • 너무 큰 값을 설정할 경우 로봇의 방향에 상관 없이 정지
  • stateful: True

    • true: 로봇의 현재 상태와 이전 상태를 비교하여 목표 도달 여부 확인
    • false: 로봇의 현재 상태만 기준으로 목표 도달 여부 확인

이미지처럼 너무 작은(0.01) xy_goal_tolerance 값은 로봇이 목표에 도달해도 계속 움직이게 만들 수 있다.



📌 controller_plugins

controller_plugin은 전역 플래너가 생성간 경로를 따라가기 위해 로컬 속도 명령/cmd_vel을 생성한다.

  • DWB Controller : 최적의 속도 명령을 선택하여 로봇이 장애물을 회피하면서 목표 경로 따라감
  • Regulated Pure Pursuit : 로봇이 단순하지만 부드럽게 목표 경로를 따라감
  • Rotation Shim Controller : 목표 방향으로 회전 후 목표 경로 따라감 → 물류 환경 AMR 유리


 # DWB parameters
    FollowPath:
      plugin: "dwb_core::DWBLocalPlanner"
      debug_trajectory_details: True
      min_vel_x: 0.0
      min_vel_y: 0.0
      max_vel_x: 0.26
      max_vel_y: 0.0
      max_vel_theta: 1.0
      min_speed_xy: 0.0
      max_speed_xy: 0.26
      min_speed_theta: 0.0
      # Add high threshold velocity for turtlebot 3 issue.
      # https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
      acc_lim_x: 2.5
      acc_lim_y: 0.0
      acc_lim_theta: 3.2
      decel_lim_x: -2.5
      decel_lim_y: 0.0
      decel_lim_theta: -3.2
      vx_samples: 20
      vy_samples: 5
      vtheta_samples: 20
      sim_time: 1.7
      linear_granularity: 0.05
      angular_granularity: 0.025
      transform_tolerance: 0.2
      xy_goal_tolerance: 0.25
      trans_stopped_velocity: 0.25
      short_circuit_trajectory_evaluation: True
      stateful: True
      critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
      BaseObstacle.scale: 0.02
      PathAlign.scale: 32.0
      PathAlign.forward_point_distance: 0.1
      GoalAlign.scale: 24.0
      GoalAlign.forward_point_distance: 0.1
      PathDist.scale: 32.0
      GoalDist.scale: 24.0
      RotateToGoal.scale: 32.0
      RotateToGoal.slowing_factor: 5.0
      RotateToGoal.lookahead_time: -1.0

◾ 속도 파라미터

  • min_vel_x, min_vel_y, max_vel_x, max_vel_y
    • 로봇의 최소,최대 선속도 설정
    • min_vel_x를 음수로 설정하면 로봇이 후진 가능
  • max_vel_theta, min_speed_theta
    • 로봇의 최소, 최대 회전 속도 설정
  • min_spedd_xy, max_speed_xy
    • 로봇의 최소, 최대 대각선 이동 속도 설정

◾ 가속/감속 파라미터

  • acc_lim_x, acc_lim_y, acc_lim_theta
    • x,y 방향 및 회전에 대한 최대 가속도 제한 설정
    • 값이 너무 높으면 전역 경로를 따라가는 움직임이 불규칙해짐
  • decel_lim_x, decel_lim_y, decel_lim_theta
    • x,y 방향 및 회전에 대한 최대 감속도 제한 설정

◾ Trajectory 샘플링 파라미터

  • vx_samples, vy_samples, vtheta_samples
    • X, Y, 회전 속도 샘플 개수
  • sim_time
    • 정해진 시뮬레이션 시간 동안 움직임 궤적 평가
  • linear_granularity, angular_granularity
    • 선형, 회전 시뮬레이션 샘플링 간격
  • transform_tolerance
    • tf 변환 허용 오차
  • short_circuit_trajectory_evaluation : True
    • 최적 궤적을 찾으면 평가를 조기 종료하여 성능 개선

🌱 Trajectory(경로) 샘플링이란

DWB Controller에서 로봇의 속도를 다양한 값으로 샘플링 한후 움직임 궤적을 시뮬레이션하여 가장 비용이 낮은 최적의 경로를 선택


◾ 목표 지점 감지 및 정지 파라미터

  • xy_goal_tolerance
    • 목표 지점에 도달했다고 판단하는 허용 오차
    • 목표에 가까워질수록 더 부드러운 움직을 만들기 위해 사용 → 목표 도달 여부 판단 X
  • trans_stopped_velocity
    • 로봇이 정지했다고 판단하는 선속도 임계값
    • 큰 값을 가지면 미세 움직임에도 정지로 판단
  • stateful
    • 로봇이 목표에 도달 후 상태를 유지할지 여부

◾ critics

  • DWB Controller에서 로봇의 경로를 평가하고 최적의 경로를 선택하는데 사용되는 비용 함수

    • BaseObstacleCritic : 장애물에 가까워질수록 높은 비용을 부과하여 충돌 방지
    • PathAlignCritic : 로컬 경로가 전역 경로와 얼마나 일치한지 판단
    • GoalAlignCritic : 목표에 가까워지도록 유도
    • PathDistCritic : 로컬 경로가 전역 경로에 가까울수록 낮은 비용 부여
    • GoalDistCritic : 로컬 경로가 목표 지점에 얼마나 가까워졌는지 평가
    • RotateToGoalCritic : 로봇이 목표 방향으로 정확하게 회전하도록 유도
    • OscillationCritic : 로봇이 같은 위치에 반복적으로 움직이는 경로 방지


💡 Path Planner 흐름 요약


1. map_serveramcl을 통해 맵을 불러오고 로봇의 현재 위치 추적
2. planner_server에서 맵의 기존 장애물 데이터를 바탕으로 NavFn을 사용해 전역 경로 생성
3. controller_server에서 실시간 센서 데이터로 로컬 경로를 생성하고 장애물 회피
4. DWB Controller를 통해 최적의 경로를 정하고 이를 따라갈 속도 명령/cmd_vel 생성
5. goal_checkerprogress checker를 통해 목표 도달 여부와 경로 진행 상태를 지속적으로 확인

로봇의 자율주행은 Controller Server가 핵심이다 ^_^

0개의 댓글