본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 local planner였던
Controller_server의 파라미터에 대해서 알아보았다.
[오늘의 수강 영상]
[오늘의 실습]
Controller란?
ROS1에서 Local Planner와 동일한 것으로
현재 위치에서 전방 몇 m(센서범위)까지 반응형 경로 계획을 수행하는 것이다.
이를 사용하여 동적 장애물을 피하는 궤적을 만들면서 Global Plan을 따르려고 한다.
Controller Server Parameter는 아래와 같다.
1. controller_frequency
controller_frequency란?
Controller가 경로를 계산하는 빈도수이다.
이는 double로 나타내며 기본값은 20.0hz이다.
controller_frequency은 너무 작게하면 갑자기 생기는
장애물에 실시간으로 반응하지 못하게되고
너무 크게 하면 계산량이 너무 많아져서
적당한 정도를 찾아가는 것이 중요하다.
너무 크게 했을 때 CPU사용량의 차이가 얼마나 나는지
실습을 통해 확인해았다.
우리가 보고자하는 프로세스의 PID는 3214이다.
2. min_x_velocity_threshold
min_x_velocity_threshold란?
컨트롤러가 고려할 x의 최소 속도이며
이보다 낮은 값은 0.0m/s로 간주한다.
이는 double로 나타내며 기본값은 0.0001 m/s이다.
3. min_y_velocity_threshold
min_y_velocity_threshold란?
컨트롤러가 고려할 y의 최소 속도이며
이보다 낮은 값은 0.0m/s로 간주한다.
이는 double로 나타내며 기본값은 0.0001 m/s이다.
4. min_theta_velocity_threshold
min_theta_velocity_threshold란?
컨트롤러가 고려할 최소 각속도이며
이보다 낮은 값은 0.0rad/s로 간주한다.
이는 double로 나타내며 기본값은 0.0001 rad/s이다.
5. failure_tolerance
failure_tolerance란?
호출된 컨트롤러 플러그인이 실패했다고 생각할 최대 기간(초)이다.
double로 나타내며 기본값은 0.0이다.
즉, 호출된 컨트롤러 플러그인이 이 기간안에
예상대로 움직이지 않으면 실패했다고 생각하겠다는 것이다.
이 값을 -1.0으로 설정하면 무한대라는 뜻이고,
0이면 비활성화한다는 뜻이다.
6. progress_checher_plugin
progress_checher_plugin이란?
로봇의 주행 상황(현재상황)을 확인하기 위한 플러그인으로
맵핑(연결)된 이름을 파라미터 값으로 입력한다.
이는 string으로 나타내며 기본값은 progress_checker이다.
이 파라미터에는 맵핑된 이름을 적기 때문에
이 파라미터에 적은 값과 동일한 이름으로 밑에 plugin 이름과
맵핑시켜줘야한다.
사용되는 plugin에는 SimpleProgressChecker와 PosePregressChecker가 있다.
통상적으로 SimpleProgressChecker를 많이 사용한다.
1) SimpleProgressChecker
SimpleProgressChecker란?
로봇이 주어진 시간 내에 최소한의 거리를 이동하여
목표를 향해 나아갈 수 있는지 확인하는 것이다.
2) PosePregressChecker
PosePregressChecker란?
로봇이 주어진 시간 내에 최소한의 거리 또는 각도(회전)를 이동하여
목표를 향해 나아갈 수 있는지 확인하는 것이다.
이 plugin의 파라미터에는 아래와 같은 것들로 구성되어져 있다.
1) required_movement_radius
required_movement_radius란?
로봇이 이 반경 내에서 충분히 이동하지 않으면
진행 중이지 않다고 생각할 최소 거리이다.
이는 double로 표현하며 기본값은 0.5m이다.
2) movement_time_allowance
movement_time_allowance란?
로봇이 이동을 시작하고 진행 상황을 확인하는데
허용되는 시간(초)을 설정한다.
이는 double로 표현하며 기본값은 10.0s(초)이다.
즉, 이 시간(movement_time_allowance)이 지나도
지정된 반경(required_movement_radius)을
벗어나지 않으면 로봇이 경로를 잘 따르고 있지 않다고 판단한다.
7. goal_checker_plugins
goal_checker_plugins란?
로봇이 목적지(목표 pose)에 도달했는지 확인하기 위한 플러그인으로
매핑된 이름 목록을 파라미터 값으로 입력한다.
이는 string으로 나타내며 기본값은 general_goal_checker이다.
이 파라미터에도 맵핑된 이름을 적기 때문에
이 파라미터에 적은 값과 동일한 이름으로 밑에 plugin 이름과
맵핑시켜줘야한다.
사용되는 plugin에는 SimpleGoalChecker와 StoppedGoalChecker가 있다.
통상적으로 SimpleGoalChecker를 많이 사용한다.
1) SimpleGoalChecker
SimpleGoalChecker란?
로봇이 목표의 병진 거리, 회전 거리 내에
있는지 확인하는 것이다.
2) StoppedGoalChecker
StoppedGoalChecker란?
로봇이 목표의 병진 거리, 회전 거리, 속도 임계값 내에
있는지 확인하는 것으로 목표 포즈에 도달하여 정지했는지까지 확인한다.
이 plugin의 파라미터에는 아래와 같은 것들로 구성되어져 있다.
1) stateful
stateful란?
목표 도달 여부를 판단할 때 이전 상태를
기억해서 판단할지 여부를 설정하는 값이다.
이는 bool로 표현하며 기본값은 true이다.
이 값이 true이면 현재 상태와 이전 상태를 비교해서 목표 도달 여부를 확인하고
false이면 현재 상태만을 기준으로 목표 도달 여부를 확인한다.
2) xy_goal_tolerance
xy_goal_tolerance란?
목표 도달 완료 기준을 충족하기 위한 허용 오차 (m)를 설정한다.
이는 double로 표현하며 기본값은 0.25m이다.
3) yaw_goal_tolerance
yaw_goal_tolerance란?
목표 도달 완료 기준을 충족하기 위한 허용 오차 (rad)를 설정한다.
이는 double로 표현하며 기본값은 0.25rad이다.
여기에서의 Goal은 로봇이 최종적으로 도착하고자 하는 목적지를 의미한다.
8. Controller_plugins
Controller_plugins란?
컨트롤러 플러그으로
매핑된 이름 목록을 파라미터 값으로 입력한다.
이는 string으로 나타내며 기본값은 FollowPath이다.
이 파라미터에도 맵핑된 이름을 적기 때문에
이 파라미터에 적은 값과 동일한 이름으로 밑에 plugin 이름과
맵핑시켜줘야한다.
사용되는 plugin에는 DWB Controller, TEB Controller, Regulated Pure Pursuit,
MPPI Controller, Rotation Shim Controller,Graceful Controller가 있다.
1) DWB Controller
DWB Controller란?
로봇의 동적 속도와 가속도를 고려하여
실시간 장애물 회피에 적합하다.
이는 Differential, Omnidirectional, Legged에서
사용할 수 있다.
2) TEB Controller
TEB Controller란?
시간 최적화 기반 경로 생성, 복잡한 환경에서 효율적이며
좁은 공간에서도 효율적으로 움직인다.
이는 Ackermann, Legged, Omnidirectional, Differential에서 사용할 수 있으며
omnidirectional에서 DWB 보다 더 정확도가 높다.
3) Regulated Pure Pursuit
Regulated Pure Pursuit란?
로봇이 주어진 경로를 추적하기 위해 목표점을 따라가며
단순하지만 효과적이고 경로를 곡선으로 매끄럽게 추적할 수 있다.
이는 Ackermann, Legged, Differential에서
사용할 수 있다.
4) MPPI Controller
MPPI Controller란?
샘플 기반 최적화 알고리즘을 사용하여
복잡한 경로 계획과 제어를 수행한다.
이는 Differential, Omnidirectional, Ackermann에서
사용할 수 있다.
5) Rotation Shim Controller
Rotation Shim Controller란?
회전 시 로봇을 미세하게 조정하여
목표 지점에 정확하게 정렬하도록 한다.
이는 Differential, Omnidirectional, model rotate in place에서
사용할 수 있다.
6) Graceful Controller
Graceful Controller란?
작은 속도 변화로 안정적인 이동을 제공하며,
부드러운 이동 경로를 생성한다.
이는 Differential에서 사용할 수 있다.
우리는 DWB Controller를 사용했으며
이 plugin의 파라미터에는 아래와 같은 것들로 구성되어져 있다.
1) min_vel_x, min_vel_y, max_vel_x, max_vel_y
min_vel_x, min_vel_y, max_vel_x, max_vel_y란?
로봇의 최소 및 최대 선속도를 x 및 y 방향으로 설정한다.
이는 double로 표현되며, 기본값은 0.0이고 단위는 m/s를 사용한다.
값이 너무 높은데 controller_frequency 값이 낮으면 로봇이 실시간 환경에 적응하지 못할 수 있다.
2) max_vel_theta, min_speed_theta
max_vel_theta, min_speed_theta란?
로봇의 최대 및 최소 회전 속도를 설정한다.
이는 double로 표현되며, 기본값은 0.0이고 단위는 rad/s를 사용한다.
3) min_speed_xy, max_speed_xy
min_speed_xy, max_speed_xy란?
로봇의 대각선 이동 시 최소 및 최대 속도를 설정한다.
이는 double로 표현되며, 기본값은 0.0이고 단위는 m/s를 사용한다.
4) acc_lim_x, acc_lim_y, acc_lim_theta
acc_lim_x, acc_lim_y, acc_lim_theta란?
x, y 방향 및 회전에 대한 최대 가속도 제한을 설정한다.
이는 double로 표현되며, 기본값은 0.0이고 단위는 m/s² 및 rad/s²를 사용한다.
값이 너무 크면 움직임이 불규칙해지고, 너무 작으면 반응이 느려진다.
이 값을 min_vel 값보다 작게 설정하면 경로를 보다 안정적으로 따라갈 수 있다.
5) decel_lim_x, decel_lim_y, decel_lim_theta
decel_lim_x, decel_lim_y, decel_lim_theta란?
x, y 방향 및 회전에 대한 최대 감속도 제한을 설정한다.
이는 double로 표현되며, 기본값은 0.0이고 단위는 m/s² 및 rad/s²를 사용한다.
6) vx_samples, vy_samples, vtheta_samples
vx_samples, vy_samples, vtheta_samples란?
속도 샘플링에 사용되는 x, y 방향 및 회전 속도의 샘플 수를 설정한다.
이는 int로 표현되며, 기본값은 각각 20, 5, 20이고
경로 계획의 정밀도와 연산량 사이의 균형을 맞춰서 사용해야한다.
7) sim_time
sim_time이란?
경로 계획을 위해 시뮬레이션하는 시간을 설정한다.
이는 double로 표현되며, 기본값은 1.7이고 단위는 초를 사용한다.
설정 시간이 너무 짧으면 최적 경로를 찾지 못하고, 너무 길면 계산량이 증가한다.
8) linear_granularity, angular_granularity
linear_granularity, angular_granularity란?
로봇이 경로를 따라 이동할 때 계산되는 선형 위치 및 각도 간격을 설정한다.
이는 double로 표현되며, 기본값은 각각 0.5, 0.025이고 단위는 m 및 rad를 사용한다.
장애물이 많거나 좁고 복잡한 환경일수록 작은 값을 사용하지만, 그만큼 계산 부하도 증가한다.
9) transform_tolerance
transform_tolerance란?
트랜스폼 데이터의 허용 시간 오차를 설정한다.
이는 double로 표현되며, 기본값은 0.1이고 단위는 초를 사용한다.
너무 작으면 실시간 데이터 처리에서 동기화 문제가 생길 수 있고,
너무 크면 오래된 데이터를 사용하게 되어 정확도가 떨어질 수 있다.
10) xy_goal_tolerance
xy_goal_tolerance란?
경로 추종(path following) 중 중간 경유점(waypoint) 도달에 대한 위치 허용 오차를 설정한다.
이는 double로 표현되며, 기본값은 0.25이고 단위는 m를 사용한다.
정밀한 작업에서는 작은 값이 필요하며,
넓은 공간에서 빠른 이동이 중요할 경우에는 큰 값을 사용하는 것이 유리하다.
여기서 사용되는 goal은 waypoint를 뜻한다.
11) trans_stopped_velocity
trans_stopped_velocity란?
로봇이 정지했다고 판단하는 속도 임계값을 설정한다.
이는 double로 표현되며, 기본값은 0.25이고 단위는 m/s를 사용한다.
값이 너무 높으면 로봇이 실제로 멈추지 않았음에도 정지로 판단할 수 있고,
너무 낮으면 완전 정지를 기다리느라 응답성이 떨어질 수 있다.
12) short_circuit_trajectory_evaluation
short_circuit_trajectory_evaluation이란?
조건을 만족하는 경로가 발견되면 나머지 경로 평가를 중단할지 여부를 설정한다.
이는 bool로 표현되며, 기본값은 true이다.
연산량을 줄이고 빠르게 경로를 선택하고자 할 때 유용하다.
오늘은 이렇게 다양한 Controller_server의 파라미터에
대해서 알아보았다.
굉장히 많은 파라미터들이 있어서
모두 기억하기에는 무리가 있지만
다음에 필요할 때 찾아와서
필요에 따라 잘 사용해 봐야겠다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr