횡방향 제어 최적화 이론
자율 주행 차량의 차선 유지 및 경로 추종 성능을 확보하기 위해 카르시 (Carsim) 와 시뮬링크 (Simulink) 를 연동할 때, 선형 이차 규제 (Linear Quadratic Regulator, LQR) 는 매우 효과적인 최적 제어 기법으로 활용된다. 이 방식은 목표 궤적과의 오차를 최소화하면서도 조향 입력의 과도한 사용을 억제하여 승차감을 고려한 균형 잡힌 제어를 목표로 한다.
속도 의존성 피드백 게인 설계
LQR 컨트롤러는 차량의 종속 속도 ($v_x$) 에 따라 상태 방정식의 매개변수가 변화하므로, 고정된 게인을 사용하는 대신 실시간에 맞춰 피드백 행렬을 갱신하는 것이 바람직하다. 이를 통해 정속 주행에서부터 급격한 변선 동작까지 다양한 동역학 영역에서 안정성을 확보할 수 있다. 아래 코드는 차량 속도를 기반으로 폐루프 게인 행렬을 계산하는 과정을 보여준다.
function K_out = calculate_lqr_gains(current_vx)
% 물리적 상수 정의 (예시 값)
mass_val = m;
inertia_z = Iz;
front_coef = Caf;
rear_coef = Car;
wheelbase_a = a;
wheelbase_b = b;
% 상태 공간 모델 행렬 구성 (비선형 항 선형화 후)
sys_A = zeros(4);
sys_B = zeros(4, 1);
sys_A(1,2) = 1;
sys_A(2,2) = (front_coef + rear_coef) / (mass_val * current_vx);
sys_A(2,3) = -(front_coef + rear_coef) / mass_val;
sys_A(2,4) = (wheelbase_a*front_coef - wheelbase_b*rear_coef) / (mass_val * current_vx);
sys_A(3,4) = 1;
sys_A(4,2) = (wheelbase_a*front_coef - wheelbase_b*rear_coef) / (inertia_z * current_vx);
sys_A(4,3) = -(wheelbase_a*front_coef - wheelbase_b*rear_coef) / inertia_z;
sys_A(4,4) = (pow(wheelbase_a,2)*front_coef + pow(wheelbase_b,2)*rear_coef) / (inertia_z * current_vx);
sys_B(2) = -front_coef / mass_val;
sys_B(4) = -wheelbase_a * front_coef / inertia_z;
% 비용 함수 가중치 설정
weight_Q = diag([10.0, 0.1, 5.0, 0.01]);
weight_R = scalar([2.0]);
% LQR 해 구산
[K_out, ~, ~] = lqr(sys_A, sys_B, weight_Q, weight_R);
end
여기서 주목할 점은 상태 벡터의 구성이다. 일반적으로 많이 쓰이는 세 개의 상태 변수 대신, [측방향 오차, 측방향 오차 변화율, 방향각 오차, 요 (Yaw) 속도]로 네 가지 상태를 정의했다. 특히 측방향 오차의 미분항을 추가함으로써, 차량이 빠른 속도 (약 80km/h 이상) 로 긴급 회피 동작을 취할 때 관성력을 미리 예측하여 조향 개시를 앞당기는 효과가 발생한다. 이는 실제 테스트에서 차량의 흔들림 현상을 유의미하게 감소시켰다.
가중치 행렬 튜닝과 승차감
제어 성능 결정의 핵심은 $Q$와 $R$ 행렬의 비율이다. 측방향 위치 오차에 대한 가중치를 상대적으로 높고 방향각 오차에는 조금 낮게 설정하면, 커브 구간에서 차량이车道선을 완벽히 따르지 않더라도 조향 각도의 변화를 완만하게 만들어줄 수 있다. 실제 실험 결과, 이러한 설정은 운전자나 탑승자의 멀미 유발 지수를 약 20% 수준 개선시키는 것으로 나타났다.
실행 가능한 조향 명령 제한 (Rate Limit)
시뮬레이션상 계산된 이상적인 조향 각도가 실제 액추에이터의 물리적 한계를 초과하지 않도록 출력단에 제한기를 반드시 적용해야 한다. 특히 '엘크 테스트'와 같은 극한工况에서 순간적으로 발생 가능한 과도한 명령은 타이어 마찰 한계를 넘어서 모델 발산을 일으킬 수 있기 때문이다.
% 최대 허용 조향 속도를 라디안 단위로 변환
limit_max_rad_per_sec = (480 * pi / 180) / 60.0;
% 사각 함수 또는 포화 블록 대신 수학적 클램핑 적용
steer_output_raw = k_feedback * state_error_vec;
steer_output_lim = saturate_command(steer_output_raw, -limit_max_rad_per_sec, limit_max_rad_per_sec);
function val_sat = saturate_command(val_in, lim_low, lim_high)
if val_in < lim_low
val_sat = lim_low;
elseif val_in > lim_high
val_sat = lim_high;
else
val_sat = val_in;
end
end
타이어 모델 파라미터 민감도
LQR 제어기의 강건성은 타이어 모델의 정확도에 크게 의존한다. 예를 들어 제어 게인의 $R$ 값을 줄여 조향 응답을 빠르게 하면 오차는 줄어들지만, 진동이 증가한다. 이때 단순히 제어기만 수정하지 말고 페세카 (Pacejka) 식의 릴랙스 레ング스 (Relaxation Length) 를 보정하는 경우가 많다.冰雪路面仿真에서 타이어 접지력 계수 ($\mu$) 가 3% 만 편차 있어도 최적 제어기가 작동 불능 상태가 될 수 있으므로, 모델 매칭 공정이 선행되어야 한다.
복합 제어 구조 주의사항
외부 응답을 보완하기 위해 LQR 외부에 PID 제어기를 추가로 감싸는 경우를 권장하지 않는다. 두 개의 제어 루프가 중첩될 경우 위상 여유가 줄어들어 고주파 대역에서 자발적인 진동 (Oscillation) 을 유발할 위험이 있다. 특정 사례에서 고속 주행 시 차량이 심하게 좌우 흔들린 원인이 바로 중복된 피드백 루프 간의 위상 차이였으며, 최종적으로는 순수한 상태 피드백 제어기에 집중하고 $Q, R$ 행렬을 정교하게 조정하는 방식으로 해결되었다.