본문 바로가기

ROS

[ROS] Move Base (6) Local Planner 개념

  • 다음 사이트를 참고해서 포스팅 하였다.

http://wiki.ros.org/base_local_planner

 

base_local_planner - ROS Wiki

kinetic melodic noetic   Show EOL distros:  EOL distros:   electric fuerte groovy hydro indigo jade lunar diamondback: Only showing information from the released package extracted on Unknown. No API documentation available. Please see this page for in

wiki.ros.org

Local Planner

  • 책임
    • global path와 local cost map을 확인하고, 로봇이 움직일 cmd_vel과 local path를 생성한다.

여기서, local planner의 영역을 다음과 같이 2개로 나누어서 볼 수 있다.

  1. local path
  2. global path가 주어졌을 때, 주변 환경 (ex 동적 장애물)에 따라 새로운 local path를 만들어 낸다.
  3. control
  4. path가 주어졌을 때, 로봇이 움직여야 하는 cmd_vel을 생성해 낸다.

여기서, ROS에는 크게 DWA 와 TEB planner가 plugin으로 제공되어 있다.

TEB

local planner의 책임 중 주변 장애물을 확인하고 새로운 path를 만들어 내는 것에 중점이 되어 있다.

http://wiki.ros.org/teb_local_planner

 

teb_local_planner - ROS Wiki

kinetic melodic noetic   Show EOL distros:  EOL distros:   indigo jade lunar indigo: Documentation generated on June 09, 2019 at 04:06 AM (doc job).jade: Documentation generated on October 24, 2016 at 12:10 PM (doc job).kinetic: Documentation generate

wiki.ros.org

TEB를 개발한 사람들이 DWA와 global planner를 이용한 구조가 더 효율적이라 판단하여 개발이 중단되어 있다.

아래는 그에 대한 개발자들의 답변 내용이다. 한번 읽어보면 좋을 듯 하다.

 - 따라서 그냥 넘어갈 예정

https://github.com/rst-tu-dortmund/teb_local_planner/issues/154

 

ROS 2 Integration Plans · Issue #154 · rst-tu-dortmund/teb_local_planner

The teb_local_planner for ROS1 is very useful for the robotics community, and I am curious if you have any plans for porting it to ROS2. I am interested in helping in the porting process, if requir...

github.com

 

DWA

Dynamic Window Approach의 약자로, local planner에서 plan 보단 control에 더 중점을 둔 local planner이다 실제로 ROS2에서는 dwb라는 package로 변경되면서 모든 local planner는 controller라는 이름으로 변경되었다.

https://github.com/ros-planning/navigation

 

GitHub - ros-planning/navigation: ROS Navigation stack. Code for finding where the robot is and how it can get somewhere else.

ROS Navigation stack. Code for finding where the robot is and how it can get somewhere else. - GitHub - ros-planning/navigation: ROS Navigation stack. Code for finding where the robot is and how ...

github.com

parameter

  • acc_lim_x
    • 로봇의 x축 방향으로 최소 가속도를 나타낸다. 너무 작으면 로봇이 가속되지 않는다.
  • acc_lim_y
    • 로봇의 y축 방향으로 최소 가속도로 나타낸다. diff robot이면 0으로 세팅하자.
  • acc_lim_theta
    • 로봇의 최소 회전 가속이다. 너무 작으면 로봇이 가속되지 않는다.
  • max_vel_x
    • 로봇의 x축 방향으로 최대 속도를 나타낸다.
  • min_vel_x
    • 로봇의 x축 방향으로 최소 속도를 나타낸다. 0으로 세팅하자.
  • max_vel_theta
    • 로봇의 최대 회전 속도를 나타낸다.
  • min_vel_theta
    • 로봇의 최소 회전 속도를 나타낸다.

!!!!! 로봇의 회전 속도는 반 시계 방향이 +, 시계 방향이 -로 표현돼서 min_vel_thetadmf 0으로 되면 로봇은 반 시계 방향으로만 회전한다.

  • min_in_place_vel_theta
    • 안전 지대???에서의 최소 회전 속도이다.
  • backup_vel
    • 비 사용 권장. escape_vel을 사용이 권장된다. 로봇이 뒤로 가는 속도이다.
  • escape_vel
    • 로봇이 장애물에 걸렸다고 판단됐을 때 탈출하는 속도이다. 기본적으로 후진이기 때문에 -값으로 설정한다.
  • holonomic_robot
    • robot type을 설정한다. true면 holonomic_robot 즉 diff라고 생각해도 좋을 듯 하다.
  • y_vels
    • 로봇이 흔들릴 때 안정적이라고 판단되는 y축 속도 범위이다.
  • yaw_goal_tolerance
    • goal에 도착했는지 검사 할 때, 로봇 pos의 yaw값에 대한 오차 범위이다.
  • xy_goal_tolerance
    • goal에 도착했는지 검사 할 때, 로봇 pos의 x,y에 대한 오차 범위 이다.
  • latch_xy_goal_tolerance
    • 새로운 goal이 현재 위치에서 들어왔을 때, xy 오차범위 내에 있어도 yaw값을 맞추려고 회전한다.(이때 xy오차 범위를 무시한다.)
  • sim_time
    • dwa 알고리즘의 simulation시간이다.
    • 값이 커질 수록 vector field가 커진다.
  • sim_granularity
    • linear velocity의 step size이다. 값이 커질수록 x축 방향으로 vector field가 커진다.
  • angular_sim_granularity
    • angular velocity의 step size이다. 값이 커질수록 y축 방향으로 vector field가 커진다.
  • vx_samples
    • linear velocity의 sample 개수이다. 값이 커질수록 x축 방향으로 vector field가 커진다.
  • vtheta_samples
    • angular velocity의 sample 개수이다. 값이 커질수록 y축 방향으로 vector field가 커진다.
  • controller_frequency
    • local plan을 계산하는 주기이다. hz가 커질수록 cpu 연산량이 대폭 증가하니 적절히 조절하자.
  • meter_scoring
    • dwa cost를 계산할 때 cell대신 meter단위로 계산하게 하는 옵션이다.
  • pdist_scale
    • 시뮬레이션하는 path가 global path와 얼마나 차이 나는 지에 대한 값의 가중치이다.
  • gdist_scale
    • 시뮬레이션하는 path가 local goal에 얼마나 근접 하는 지에 대한 값의 가중치이다.
  • occdist_scale
    • 시뮬레이션하는 path가 장애물로부터 얼마나 떨어지는 지에 대한 값의 가중치이다.
  • heading_lookahead
    • path를 따라갈 때, 얼마나 떨어져 있는 trajectory를 보고 로봇의 방향과 path의 방향이 맞는지 확인
  • heading_scoring
    • path의 방향과 로봇의 방향이 맞는지 확인하여 scoring하는 옵션
  • heading_scoring_timestep
    • heading_scoring를 사용할 때, 얼마나 앞에 있는 trajectory를 볼 것 인가에 대한 시간.
  • dwa
    • dwa사용 유무. (default : true)
  • publish_cost_grid_pc
    • debug용, local plan을 할 때, vector field를 pointcloud2 형식으로 publish해준다.
  • global_frame_id
    • cost_cloud의 frame id
  • oscillation_reset_dist
    • 로봇이 oscillation됐을 때, oscillation이 reset되기 위한 최소 이동 거리
  • prune_plan
    • true로 설정시, global plan에서 로봇이 지나온 길은 1m 주기로 삭제

이상 간단히 local planner에 대해 포스팅 했고, 다음 포스팅은 DWA 논문 분석을 할 예정이다.

포스팅 내용이 뭔가 성의 없어진 건 내가 ROS2 navigation으로 넘어가서..