모델 예측적 경로 적분 컨트롤러
시도 해보려 했으나… 왜인지 모르게 자꾸 프로그램이 죽어서 실패했습니다.
하지만 기본 개념은 익힐 수 있습니다.
Github 에서 소스 코드를 찾을 수 있습니다.
MPPI 컨트롤러는 모델 예측적 경로 적분 컨트롤러 를 구현합니다. 새로운 Nav2 MPPI 컨트롤러는 TEB 및 순수 경로 추적 MPC 컨트롤러의 후속 제품입니다. 이는 최적의 경로를 선택하기 위해 샘플링 기반 접근법을 사용하며, 연속적인 반복 사이에 최적화됩니다. 다양한 동작 및 동작 속성에 대한 사용자 정의 및 확장을 위해 플러그인 기반 목적 함수를 포함합니다.
현재 차분, 전방향 및 Ackermann 로봇과 함께 작동합니다. 이 컨트롤러는 겸손한 Intel 프로세서(4세대 i5)에서 50Hz 이상의 속도로 실행될 것으로 측정되었습니다.
MPPI 알고리즘은 로봇에 대한 제어 속도를 반복적인 접근 방식을 사용하여 찾습니다. 이전 시간 단계의 최적 제어 솔루션과 로봇의 현재 상태를 사용하여 가우시안 분포에서 무작위로 샘플링된 일련의 변형을 적용합니다. 이러한 노이즈가 포함된 제어들은 로봇의 운동 모델 내에서 일련의 경로를 생성하기 위해 전방 시뮬레이션됩니다. 다음으로, 이러한 경로는 일련의 플러그인 기반 비평가 함수를 사용하여 일괄처리 중 최적의 경로를 찾습니다. 출력 점수는 최적 제어를 설정하기 위해 소프트 맥스 함수에 사용됩니다. 이 프로세스는 여러 번 반복되어 수렴된 솔루션을 반환합니다. 그런 다음이 솔루션은 다음 시간 단계의 초기 제어의 기초로 사용됩니다.
이 작업의 강력한 결과 중 하나는 볼록이거나 미분 가능할 필요가 없는 목적 함수를 사용할 수 있으므로 디자이너는 훨씬 더 큰 유연성을 가질 수 있다는 것입니다.
보다 완전한 정보는 패키지의 README 를 참조하십시오.
MPPI 파라미터
- motion_model
유형
기본값
문자열
“DiffDrive”
- 설명
경로 계획에 사용할 원하는 모션 모델.
DiffDrive,Omni, 또는Ackermann옵션이 있습니다. 차이 드라이브 로봇은 전진/후진 및 각 속도를 사용할 수 있습니다; Omni는 측면 이동을 추가합니다; Ackermann은 최소 곡률 제약을 추가합니다.
- critics
유형
기본값
문자열 벡터
N/A
- 설명
자동으로로드 될
mppi::critic::네임스페이스 없이 사용할 평론 플러그인 함수의 벡터.
- iteration_count
유형
기본값
정수
1
- 설명
MPPI 알고리즘에서의 반복 횟수. 1로 유지하는 것이 좋으며 대신 더 큰 배치 크기를 선호합니다.
- batch_size
유형
기본값
정수
1000
- 설명
주어진 반복에서 현재 최적 제어 시퀀스에서 무작위로 샘플링된 후보 경로의 수. 50 Hz에서 1000 또는 30 Hz에서 2000이 좋은 결과를 낼 것으로 보입니다.
- time_steps
유형
기본값
정수
56
- 설명
후보 경로에서의 시간 단계(포인트) 수.
- model_dt
유형
기본값
배틀
0.05
- 설명
각 시간 단계의 길이인
dt타임 스텝(초).time_steps * model_dt는 예측 지포인트입니다.
- vx_std
유형
기본값
배틀
0.2
- 설명
Vx에 대한 샘플링 표준 편차
- vy_std
유형
기본값
배틀
0.2
- 설명
Vy에 대한 샘플링 표준 편차
- wz_std
유형
기본값
배틀
0.2
- 설명
Wz(각속도)에 대한 샘플링 표준 편차
- vx_max
유형
기본값
배틀
0.5
- 설명
목표 최대 전진 속도 (m/s).
- vy_max
유형
기본값
배틀
0.5
- 설명
Omni모션 모델을 사용하는 경우 목표 최대 측면 속도 (m/s).
- vx_min
유형
기본값
배틀
-0.35
- 설명
최대 후진 속도 (m/s).
- wz_max
유형
기본값
배틀
1.9
- 설명
최대 회전 속도 (rad/s).
- temperature
유형
기본값
배틀
0.3
- 설명
비용에 따라 경로를 선택하는 선택성 (이 값이 0에 가까울수록 비용이 적은 컨트롤을 고려함), 0은 최적 비용을 사용하고, 매우 큰 값은 비용 고려 없이 모든 경로의 평균을 취할 것입니다.
- gamma
유형
기본값
배틀
0.015
- 설명
부드러움 (높음)과 저 에너지 (낮음) 사이의 균형. 이것은 변경할 필요가 없는 복잡한 매개 변수입니다. 자세한 내용은 “정보 이론적 모델 예측 제어: 자율 주행에의 응용”의 3D-2 섹션을 참조하십시오.
- visualize
유형
기본값
부울
false
- 설명
시각화를 위해 디버깅 트라젝토리를 게시할지 여부. 이는 컨트롤러의 속도를 현저히 느리게 할 수 있습니다 (예: 30hz에서 1000 배치의 크기 56은 많은 데이터입니다).
- retry_attempt_limit
유형
기본값
정수
1
- 설명
실패한 경우 소프트 리셋을 위해 실행 중에 피할 수 없는 경로를 찾기 위한 시도 횟수.
- reset_period
유형
기본값
배틀
1.0
- 설명
옵티마이저를 재설정하기 위해 필요한 비활동 시간 (Humble에서만 백포트 ABI 정책으로 인해).
- regenerate_noises
유형
기본값
부울
false
- 설명
각 반복에서 잡음을 재생성할지 또는 초기화 및 재설정시 계산된 단일 잡음 분포를 사용할지 여부. 사실상 이것은 표준 분포에서 확률적으로 샘플링되는 경로가 있으므로 실행 중에 스레드 깨어 있는 시간으로 인한 계산 지연을 줄이기 위해 재샘플링되는 것입니다.
Trajectory Visualization
- trajectory_step
유형
기본값
정수
5
- 설명
시각화를 위해 후보 트라젝토리를 다운 샘플링하는 간격.
- time_step
유형
기본값
정수
3
- 설명
시각화를 위해 경로의 점을 다운 샘플링하는 간격.
Path Handler
- transform_tolerance
유형
기본값
배틀
0.1
- 설명
TF(시간 변환)와 관련된 데이터 변환에 대한 시간 허용 오차(초).
- prune_distance
유형
기본값
배틀
1.5
- 설명
로봇과 경로 사이의 가장 가까운 지점 앞의 거리에 경로를 가지런히 만듭니다 (m).
- max_robot_pose_search_dist
유형
기본값
배틀
코스트맵 크기 / 2
- 설명
경로 루프 인 경우 로봇 위치 앞의 최대 통합 거리에 대해 경로의 가장 가까운 지점을 검색합니다.
- enforce_path_inversion
유형
기본값
부울
false
- 설명
true이면, 컨트롤러가 방향을 변경해야 하는 구부러진 지점을 포함하는 경로를 가지치기하여 컨트롤러가 요청된 반전 지점에서 방향을 강제로 변경하도록합니다. 이는 특정 방향이 더 선호되는 Smac Planner 사용자를 대상으로합니다.
- inversion_xy_tolerance
유형
기본값
배틀
0.2
- 설명
경로 반전 지점에 대한 카르테시안 근접성(m). 이 지점 이후에 경로가 회전할 수 있습니다. 이는 Smac Planner 사용자에게만 적용됩니다.
inversion_yaw_tolerance:
Type
Default
double
0.4
- Description
경로 역전 지점과의 각도 근접성 (라디안)을 “달성”으로 간주하여 경로 역전 후 나머지 경로를 통과할 수 있도록 합니다. 0.4 rad = 23 deg.
Ackermann Motion Model
- min_turning_r
Type
Default
double
0.2
- Description
차량 플랫폼의 가능한 최소 회전 반경 (m).
Constraint Critic
이 비평가는 동적 또는 기구적 제약 조건 외부 요소가 있는 궤적을 벌점으로 부과합니다.
- cost_weight
Type
Default
double
4.0
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
Goal Angle Critic
이 비평가는 목표 근처에 있을 때 목표 자세의 각도를 달성하기 위해 항법하는 것을 장려합니다.
- cost_weight
Type
Default
double
3.0
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- threshold_to_consider
Type
Default
double
0.5
- Description
목표와 로봇 사이의 최소 거리(m)로, 이 거리 이상인 경우 각도 목표 비용을 고려합니다.
Goal Critic
이 비평가는 목표와 비교적 가까울 때 공간적으로 목표를 향해 항법하는 것을 장려합니다.
- cost_weight
Type
Default
double
5.0
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- threshold_to_consider
Type
Default
double
1.4
- Description
목표와 로봇 사이의 최소 거리(m)로, 이 거리 이상인 경우 목표 거리 비용을 고려합니다. 이 값을 예측 수평선과 동일하게 시작하여 경로 추종 비평가와 깨끗한 경로를 전달하도록 하는 것이 현명합니다.
Obstacles Critic
이 비평가는 원형 로봇 포인트 확인 또는 장애물에서의 거리를 사용하여 장애물과 비평적인 충돌을 피하도록 합니다.
- critical_weight
Type
Default
double
20.0
- Description
피부 착용 장애물 근처 충돌을 방지하기 위해 사용하는 비평가에 적용할 가중치. 이는 사실적으로 발포된 풋프린트의 방법으로 가상의 발포로 피부 착용을 방지하는 메서드로만 사용되어야 합니다.
- repulsion_weight
Type
Default
double
1.5
- Description
비평적인 용어에 적용할 가중치로, 일반적으로 낮은 비용 공간의 경로를 선호합니다. 이것은 발포 반경 내에서 적용됩니다.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- consider_footprint
Type
Default
bool
false
- Description
로봇이 원형이거나 낮은 컴퓨팅 파워인 경우 포인트 비용을 사용할지 SE2 풋프린트 비용을 계산할지 여부.
- collision_cost
Type
Default
double
100000.0
- Description
궤적에서 실제 충돌에 적용할 비용.
- collision_margin_distance
Type
Default
double
0.10
- Description
충돌에서 강력한 벌점을 적용할 마진 거리(m)로, 발포와 유사합니다. 0.05-0.2 사이가 합리적입니다.
- near_goal_distance
Type
Default
double
0.50
- Description
목표 주변 거리(m)에 대한 거리로, 로봇이 장애물과 가까이 있을 때 부드럽게 목표 자세로 수렴할 수 있도록 합니다.
- cost_scaling_factor
Type
Default
double
10.0
- Description
발포 반경에 걸쳐 지수적으로 감소하는 요인. 이는 발포 레이어에 대한 것과 동일해야 합니다 (Humble 전용).
- inflation_radius
Type
Default
double
0.55
- Description
치명적인 장애물 주변의 비용 맵을 팽창시킬 반지름. 이는 발포 레이어에 대한 것과 동일해야 합니다 (Humble 전용).
- inflation_layer_name
Type
Default
string
“”
- Description
팽창 레이어의 이름. 비어 있으면 비용 지도의 마지막 팽창 레이어를 사용합니다. 여러 팽창 레이어가 있는 경우 사용할 레이어의 이름을 지정할 수 있습니다.
Cost Critic
이 비평가는 비용 맵 값을 사용하여 장애물과 비평적인 충돌을 피하는 것을 장려합니다.
- cost_weight
Type
Default
double
3.81
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- consider_footprint
Type
Default
bool
false
- Description
로봇이 원형이거나 낮은 컴퓨팅 파워인 경우 포인트 비용을 사용할지 SE2 풋프린트 비용을 계산할지 여부.
- collision_cost
Type
Default
double
1000000.0
- Description
궤적에서 실제 충돌에 적용할 비용.
- critical_cost
Type
Default
double
300.0
- Description
발포된 공간 내의 어떤 지점에 비용을 적용하여 장애물로부터의 거리를 선호합니다.
- near_goal_distance
Type
Default
double
0.50
- Description
목표 주변 거리(m)에 대한 거리로, 로봇이 장애물과 가까이 있을 때 부드럽게 목표 자세로 수렴할 수 있도록 합니다.
- inflation_layer_name
Type
Default
string
“”
- Description
팽창 레이어의 이름. 비어 있으면 비용 지도의 마지막 팽창 레이어를 사용합니다. 여러 팽창 레이어가 있는 경우 사용할 레이어의 이름을 지정할 수 있습니다.
Path Align Critic
이 비평가는 글로벌 경로에 정렬하는 것을 장려합니다. 경로를 따라가는 행동은 구현하지 않습니다.
- cost_weight
Type
Default
double
10.0
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- threshold_to_consider
Type
Default
double
0.5
- Description
로봇과 목표 간의 거리 (m)가 정지 되어야 하는 거리로 경로 정렬 고려를 중단하고 목표 비평가를 사용할 수 있도록합니다.
- offset_from_furthest
Type
Default
int
20
- Description
어떤 궤적이 경로를 따라갈 충분히 멀리 왔는지 확인하는 것으로 경로 정렬 비평가를 적용합니다. 이는 초기화 동작으로 인한 어색한 움직임을 방지하여 로봇이 경로를 떠나지 않고 적절한 방향으로 헤딩을 달성합니다.
- max_path_occupancy_ratio
Type
Default
double
0.07
- Description
경로가 점유할 수 있는 최대 비율으로, 이 비평가가 고려되지 않도록하고 장애물 및 경로 추적 비평가가 동적 개체가 씬에있는 경우 경로의 의도를 따르면서 장애물을 피할 수 있습니다. 0-1 사이의 값으로 0-100 %입니다.
- use_path_orientations
Type
Default
bool
false
- Description
경로의 방향을 경로 정렬에 고려할지 여부로, 실행 가능한 smac 플래너와 함께 사용하여 smac 플래너가 요청하는 위치/시간에만 방향 변경을 장려할 수 있습니다. 로봇이 컨트롤러가 적합하다고 판단하는 곳/시간에만 방향을 바꾸려면 false로 유지합니다. 계획에 방향 정보가 포함되지 않은 경우 (예 : navfn) false로 유지합니다.
Path Angle Critic
이 비평가는 경로에 대한 상대 각도가 높을 때 궤적에 벌점을 부과합니다. 이는 큰 누적 각도 오류로 인해 필요할 때 로봇이 급한 회전을 할 수 있도록 도와줍니다.
- cost_weight
Type
Default
double
2.2
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- threshold_to_consider
Type
Default
double
0.5
- Description
로봇과 목표 간의 거리 (m)가 정지 되어야 하는 거리로 경로 각도를 고려하지 않고 목표 비평가를 사용할 수 있도록합니다.
- offset_from_furthest
Type
Default
int
20
- Description
궤적이 달성한 가장 먼 경로 지점 이후의 경로 점 수로 경로 각도를 상대적으로 계산합니다.
- max_angle_to_furthest
Type
Default
double
0.785398
- Description
로봇과 목표 간의 각도 (rad)가 경로 각도 비용을 고려하기 시작하는 값 이상입니다.
- mode
Type
Default
int
0
- Description
경로 입력 유형 및 행동적 요구에 따른 경로 각도 비평가의 작동 모드를위한 열거형 유형입니다. 0: 전방 우선, 로봇의 방향에 상대적인 높은 경로 각도를 벌점으로 부과하여 경로를 향해 회전하도록 장려합니다. 1: 방향 선호도 없음, 특정 방향의 이동이 선호되지 않을 때, 로봇의 방향 또는 반사된 방향 (예 : 반전) 중 어느 것이 덜 중요한지에 따라 경로의 고각을 벌점으로 부과합니다. 특정 방향이 선호되지 않습니다. 2: 실행 가능한 경로 방향을 고려하면 사용되며 경로 지점이 방향 정보 (예 : Smac 플래너)를 포함하는 경우 로봇이 요청된 방향으로 경로를 따라가도록 경로 각도를 벌점으로 부과합니다.
Path Follow Critic
이 비평가는 경로를 따라 진행하는 것을 장려합니다. 이는 로봇을 경로를 따라 전진시킵니다.
- cost_weight
Type
Default
double
5.0
- Description
비평가 용어에 적용할 가중치.
- cost_power
Type
Default
int
1
- Description
용어에 적용할 거듭제곱 순서.
- threshold_to_consider
Type
Default
double
1.4
- Description
로봇과 목표 간의 거리 (m)가 경로 추적을 고려하지 않고 목표 비평가를 사용할 수 있도록하는 거리입니다. 예측 수평선과 동일하게 시작하여 목표 비평가와의 깨끗한 전환을 보장하는 것이 현명합니다.
- offset_from_furthest
Type
Default
int
6
- Description
어떤 궤적이 경로를 따라 전진하기 충분히 멀리 왔는지를 확인하는 것으로 상대적인 경로 추적을 촉진합니다.
Prefer Forward Critic
이 평가자는 후진하는 대신 전진하는 것을 장려합니다.
- cost_weight
유형
기본값
double
5.0
- 설명
비평 항목에 적용할 가중치입니다.
- cost_power
유형
기본값
int
1
- 설명
항목에 적용할 거듭제곱 순서입니다.
- threshold_to_consider
유형
기본값
double
0.5
- 설명
로봇과 목표 사이의 거리 (m)로, 전방 우선으로 고려하는 것을 멈춥니다.
Twirling Critic
이 평가자는 홀로노믹 차량의 불필요한 ‘회전’을 벌칙합니다. 회전 각도를 일정하게 유지하는 제약을 추가합니다.
- cost_weight
유형
기본값
double
10.0
- 설명
비평 항목에 적용할 가중치입니다.
- cost_power
유형
기본값
int
1
- 설명
항목에 적용할 거듭제곱 순서입니다.
Example
controller_server:
ros__parameters:
controller_frequency: 30.0
FollowPath:
plugin: "nav2_mppi_controller::MPPIController"
time_steps: 56
model_dt: 0.05
batch_size: 2000
vx_std: 0.2
vy_std: 0.2
wz_std: 0.4
vx_max: 0.5
vx_min: -0.35
vy_max: 0.5
wz_max: 1.9
iteration_count: 1
prune_distance: 1.7
transform_tolerance: 0.1
temperature: 0.3
gamma: 0.015
motion_model: "DiffDrive"
visualize: false
reset_period: 1.0 # (only in Humble)
regenerate_noises: false
TrajectoryVisualizer:
trajectory_step: 5
time_step: 3
AckermannConstraints:
min_turning_r: 0.2
critics: ["ConstraintCritic", "ObstaclesCritic", "GoalCritic", "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", "PathAngleCritic", "PreferForwardCritic"]
ConstraintCritic:
enabled: true
cost_power: 1
cost_weight: 4.0
GoalCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 1.4
GoalAngleCritic:
enabled: true
cost_power: 1
cost_weight: 3.0
threshold_to_consider: 0.5
PreferForwardCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 0.5
ObstaclesCritic:
enabled: true
cost_power: 1
repulsion_weight: 1.5
critical_weight: 20.0
consider_footprint: false
collision_cost: 10000.0
collision_margin_distance: 0.1
near_goal_distance: 0.5
inflation_radius: 0.55 # (only in Humble)
cost_scaling_factor: 10.0 # (only in Humble)
# CostCritic:
# enabled: true
# cost_power: 1
# cost_weight: 3.81
# critical_cost: 300.0
# consider_footprint: true
# collision_cost: 1000000.0
# near_goal_distance: 1.0
PathAlignCritic:
enabled: true
cost_power: 1
cost_weight: 14.0
max_path_occupancy_ratio: 0.05
trajectory_point_step: 3
threshold_to_consider: 0.5
offset_from_furthest: 20
use_path_orientations: false
PathFollowCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
offset_from_furthest: 5
threshold_to_consider: 1.4
PathAngleCritic:
enabled: true
cost_power: 1
cost_weight: 2.0
offset_from_furthest: 4
threshold_to_consider: 0.5
max_angle_to_furthest: 1.0
mode: 0
# TwirlingCritic:
# enabled: true
# twirling_cost_power: 1
# twirling_cost_weight: 10.0
사용자에게 알림
일반적인 지혜의 말씀
model_dt 매개변수는 일반적으로 제어 주파수의 지속 시간으로 설정해야 합니다. 따라서 제어 주파수가 20Hz인 경우, 0.05 여야 합니다. 그러나 더 낮게 설정할 수도 있지만 커서는 안 됩니다.
시각화된 궤적을 visualize 를 사용하여 시각화하는 경우 궤적을 다시 계산하는 데 계산 리소스가 사용되어 계산 시간이 느려집니다. 이 매개변수를 true 로 설정하는 것은 배치된 사용 중에는 권장되지 않지만 시스템을 튜닝하는 동안 유용한 디버그 도구입니다.
그러나 많은 양을 사용하는 것은 피하세요. 2000개의 배치를 56개의 점으로 30Hz에서 시각화하는 것은 많습니다.
가장 일반적으로 변경하고 싶은 매개변수는 속도 프로필 (vx_max, vx_min, wz_max, 그리고 홀로노믹일 경우 vy_max)과 motion_model 에 해당하는 것입니다.
최대 속도 및 예측 지표에 비례하여 경로 계획의 prune_distance 를 고려하는 것이 현명합니다. 특히 장애물 평가자의 repulsion_weight 를 고려해야 할 매개변수입니다.
이는 인플레이션 레이어의 반경에 비례하여 조정되므로 관련 매개변수를 변경해야 합니다. 더 높은 반경은 패널티 형성 때문에 repulsion_weight 를 줄여야 합니다 (예: inflation_radius - 장애물까지의 최소 거리).
이 패널티가 너무 높으면 로봇이 비용 공간에서 비비러 지거나 좁은 통로에서 떨리게 됩니다. 이 매개변수를 동적인 장면에 대비하여 경로 정렬과 함께 세밀하게 조정해야 합니다.
그 외에는 매개변수가 대부분 네비게이터에 의해 신중하게 사전 조정되어 특정 원하는 동작에 대해 가볍게 (또는 전혀) 다시 튜닝할 수 있도록 시작 지점을 제공할 것으로 기대됩니다.
주목할 점은 consider_footprint = true 로 설정되어있을 경우 장애물 평가자가 전체 풋프린트 정보를 사용할 수 있다는 것입니다. 그러나 이는 연산 비용이 증가하는 것으로 알려져 있지만 변경할 필요성은 거의 없습니다.
예측 지폐, 코스트맵 크기 및 오프셋
이는 예측적인 플래너이기 때문에 최대 속도, 예측 시간 및 코스트맵 크기 사이에는 일정한 관계가 있습니다.
제어 서버 코스트맵이 크기를 3.0m로 설정하면 로봇이 중심에 있을 때 코스트맵의 양쪽에 각각 1.5m의 정보가 있다는 것을 의미합니다.
최대 속도 (vx_max)에서의 예측 시간 (time_steps * model_dt)이 이보다 크면 로봇은 코스트맵 제한으로 인해 최대 속도와 동작이 인위적으로 제한됩니다.
예를 들어, 0.5m/s 최대 속도로 3초(60단계, 단계당 0.05초) 동안 3초 앞으로 예측하면 최소 필요한 코스트맵 반경은 1.5m ~ 3m의 전체 폭입니다.
동일한 원리가 Path Follow 및 Align의 가장 먼 지점에 대한 오프셋에도 적용됩니다. 예를 들어, 가장 먼 지점이 이미 코스트맵의 가장자리에 위치하는 경우 추가적인 오프셋은 사용할 수 없기 때문에 임계값에 의해 제한됩니다. 따라서 이러한 매개변수를 선택할 때는 최대 예측 지향과 원하는 속도로 선택된 코스트맵 설정에서 이론적인 오프셋이 존재할 수 있는지 확인하는 것이 중요합니다. Path Follow 및 Goal Critic에서 고려되는 임계값을 예측 지향과 동일하게 설정하면, 경로 추종자가 최종 목표 포즈에 도달하면 목표를 표시로써 약간 느려지려고 시도하기 때문에 이들 간의 깔끔한 전환을 보장할 수 있습니다.
Path Follow 비평가는 rolling costmap의 사용 가능한 경로 상의 그 속도의 예측 가능한 거리보다 큰 속도를 주행할 수 없습니다.
Path Align 비평가의 offset_from_furthest는 경로를 추적하는 동안 궤적이 통과하는 경로 점의 수를 나타냅니다.
이 값이 극단적으로 낮게 설정된 경우(예: 5), 로봇이 단순히 경로 추적을 시작하려고 할 때 일부 비최적의 동작 및 지역 최소값을 유발할 수 있습니다.
이 값을 극단적으로 높게 설정한 경우(예: 50), 경로 해상도 및 코스트맵 크기에 비해 비평가가 절대로 트리거되지 않거나 전속력일 때만 트리거될 수 있습니다. 이곳에서 균형을 유지하는 것이 현명합니다.
이 값을 선택할 때 최대 속도로 예상되는 거리의 약 30% 정도인 것이 좋습니다(예: 플래너가 매 2.5cm마다 점을 생성하면 1.5m 지역 코스트맵 반경에 60개의 점이 들어갑니다.
최대 속도가 0.5m/s이고 3초의 예측 시간이 있는 경우, 20개의 점은 경로에 대한 예측된 지향으로 투사된 최대 속도의 약 33%를 나타냅니다).
의심스러울 때는, prediction_horizon_s * max_speed / path_resolution / 3.0 이 좋은 기준입니다.
장애물, 인플레이션 레이어 및 경로 추적
코스트맵 구성과 장애물 평가자 구성 간에는 관계가 있습니다. 장애물 평가자가 코스트맵 매개변수(인플레이션 반경, 스케일)와 잘 조율되지 않으면 로봇이 약간 더 낮은 비용의 트라젝터리를 취하려고 할 때 튀는 모션을 보이면서 목표하는 곳으로 이동할 때 어색한 행동을 할 수 있습니다. 이 때 자유 공간에서는 어색한 행동을 할 수 있습니다. 특히 작업을 진행하기 위해 비용 공간으로 진입할 때 자유 공간에 머무르는 것이 약간 비용이 들어가는 공간으로 진입하는 것보다 더욱 유리할 경우 장애물 평가자가 비례적으로 더 높게 설정되면 자유 공간에 진입하는 것을 거절할 수 있습니다.
따라서 로봇이 이러한 문제를 겪지 않도록 장애물 평가자의 가중치를 코스트맵 인플레이션 반경 및 스케일과 함께 선택하는 것이 중요합니다. 이를 위해 어떻게 튜닝하는지는 먼저 적절한 장애물 평가자 행동을 작성하는 것입니다. 장애물 평가자는 비용을 장애물로부터의 거리로 변환하기 때문에 인플레이션의 비용 분포의 성격은 크게 중요하지 않습니다. 그러나 인플레이션 반경과 스케일은 자유 공간이 끝나는 곳에 비용을 정의합니다. 따라서 그 임계값을 초과할 때의 품질 행동을 테스트해야 합니다.
장애물에 대한 가중치를 증가 또는 감소시키면 앞서 언급한 행동들이 나타날 수 있습니다 (예: 비비 무료에서 비비 무료로 이동하지 못함). 이를 극복하기 위해 Trajectory Planner가 목표 지점으로 계속 이동하도록 FollowPath 평가자 비용을 증가시키세요. 그러나 이를 너무 많이 증가시키지 마세요. 원하는 결과는 경로 중심에서의 부드러운 동작이며, 장애물과의 중요한 교착 상태는 없어야 합니다. 이것은 완벽하게 경로를 따르거나 출력 속도가 불안정하게 흔들리지 않아야 합니다.
장애물 회피 동작을 조정한 후 경로 정렬 평가자를 경로에 정렬하도록 조정하십시오. 정확한 경로 정렬 동작을 설계하면 장애물 평가자 단계를 건너뛸 수 있으며, 시스템을 경로를 따라 이동하도록 고도로 튜닝하면 장애물을 회피할 수 있는 능력이 줄어들지만 (속도가 느려질 것입니다) 정렬 동작은 그대로 유지됩니다. 장애물 평가자에 대한 가중치를 높게 설정하여 비교적 가까운 충돌을 피하도록 할 수 있지만 이러한 상황에서는 장애물 평가자의 추방 가중치가 대부분 불필요할 것입니다. 동적 동작을 원하는 사용자는 장애물 평가자의 가중치를 천천히 낮추어 경로 정렬 평가자에 좀 더 많은 공간을 제공할 수 있습니다. 경로가 비용 인식 플래너(예: Nav2에서 제공하는 모든 플래너)로 생성되었고 원하는 만큼 충분히 먼 장애물로부터의 경로가 제공된 경우, 장애물 평가자를 약간 감소시켜도 경로 정렬 평가자에는 영향을 미칠 것입니다. 경로 정렬 평가자에 과도한 가중치를 부여하지 않으면 로봇이 동적 장애물을 피할 수 있습니다. 응용 프로그램에 대한 최상의 동작에 대해서는 주관적이지만 MPPI가 정확한 경로 추적자이자/또는 동적 장애물을 매우 유연하게 피할 수 있는 것으로 나타났습니다. 제공된 기본값은 균형 잡힌 초기 트레이드 오프를 위한 일반적으로 올바른 영역에 있습니다.