- 다음 사이트를 참고해서 포스팅 하였다.
http://wiki.ros.org/base_local_planner
Local Planner
- 책임
- global path와 local cost map을 확인하고, 로봇이 움직일 cmd_vel과 local path를 생성한다.
여기서, local planner의 영역을 다음과 같이 2개로 나누어서 볼 수 있다.
- local path
- global path가 주어졌을 때, 주변 환경 (ex 동적 장애물)에 따라 새로운 local path를 만들어 낸다.
- control
- path가 주어졌을 때, 로봇이 움직여야 하는 cmd_vel을 생성해 낸다.
여기서, ROS에는 크게 DWA 와 TEB planner가 plugin으로 제공되어 있다.
TEB
local planner의 책임 중 주변 장애물을 확인하고 새로운 path를 만들어 내는 것에 중점이 되어 있다.
http://wiki.ros.org/teb_local_planner
TEB를 개발한 사람들이 DWA와 global planner를 이용한 구조가 더 효율적이라 판단하여 개발이 중단되어 있다.
아래는 그에 대한 개발자들의 답변 내용이다. 한번 읽어보면 좋을 듯 하다.
- 따라서 그냥 넘어갈 예정
https://github.com/rst-tu-dortmund/teb_local_planner/issues/154
DWA
Dynamic Window Approach의 약자로, local planner에서 plan 보단 control에 더 중점을 둔 local planner이다 실제로 ROS2에서는 dwb라는 package로 변경되면서 모든 local planner는 controller라는 이름으로 변경되었다.
https://github.com/ros-planning/navigation
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으로 넘어가서..
'ROS' 카테고리의 다른 글
[ROS2] Lifecycle Node(nav2_util/LifecycleNode) (0) | 2022.03.30 |
---|---|
[ROS2] Install (Ubuntu 20.04, foxy) (0) | 2022.03.30 |
[ROS] Move Base (5) Global Planner Code 분석 (2) | 2022.02.21 |
[ROS] Move Base (4) Global Planner 개념 (0) | 2022.02.21 |
[ROS] Move Base (3) Move Base Code 분석 (0) | 2022.02.21 |