WEGO LIMO 딥러닝 자율주행 시스템 구성과 실행 방법

WEGO LIMO는 ROS 2와 카메라, LiDAR, TensorFlow, YOLO를 결합하여 차선 기반 주행과 객체 인식 기반 상황 제어를 수행할 수 있는 교육용 자율주행 플랫폼입니다.

이 글에서는 2026년 3월 3일 업데이트된 딥러닝 자율주행 패키지를 기준으로 WEGO LIMO의 주요 노드 구성, 토픽 흐름, 주행 파라미터, 실행 방법을 정리합니다.

이전 버전의 패키지를 사용하고 있다면 노드 이름, 파라미터 항목, 모델 구조가 다를 수 있으므로 최신 소프트웨어로 업데이트한 뒤 진행하는 것이 좋습니다.

1. WEGO LIMO 딥러닝 자율주행 구조

WEGO LIMO의 딥러닝 자율주행 시스템은 크게 다음 4개의 노드로 구성됩니다.

번호구성 요소주요 역할
1긴급 정지 노드LiDAR로 전방 장애물을 감지하고 위험 상황에서 차량을 정지시킵니다.
2주행 방향 추론 노드카메라 영상을 딥러닝 모델에 입력하여 좌우 주행 방향과 조향 오차를 계산합니다.
3객체 인식 노드YOLO 모델로 신호등, 서행, 가속, 우회전, 보행자 등의 객체를 인식합니다.
4주행 제어 노드조향 오차, 객체 인식 결과, 긴급 정지 신호를 종합하여 최종 속도와 조향 명령을 생성합니다.

전체적인 데이터 흐름은 다음과 같습니다.

카메라 영상
   ├─ 주행 방향 추론 노드 → /control
   ├─ 객체 인식 노드 → /yolo_bounding_boxes
   └─ 주행 제어 노드
          ↑
LiDAR 긴급 정지 노드 → /emergency_stop
          ↓
       /cmd_vel
          ↓
     WEGO LIMO 구동

카메라 영상 하나를 주행 방향 추론과 객체 인식에 동시에 사용하고, 두 추론 결과를 주행 제어 노드에서 통합하는 구조입니다.

2. 긴급 정지 노드

긴급 정지 노드는 LiDAR 데이터를 이용해 차량 전방의 장애물을 감지합니다.

설정된 안전 거리 안으로 장애물이 들어오면 /emergency_stop 토픽으로 위험 상태를 전달하며, 주행 제어 노드는 다른 명령보다 긴급 정지 신호를 우선 처리합니다.

출력 토픽은 일반적으로 다음과 같은 Bool 형식을 사용합니다.

ros2 topic echo /emergency_stop

예시는 다음과 같습니다.

data: true

true는 장애물이 감지되어 정지가 필요한 상태를 의미하고, false는 정상 주행이 가능한 상태를 의미합니다.

딥러닝 모델이 정상적으로 동작하더라도 LiDAR 긴급 정지 기능이 비활성화되어 있으면 실제 주행 중 안전성이 크게 떨어질 수 있습니다. 차량을 운용하기 전에는 반드시 /emergency_stop 토픽의 발행 상태를 확인해야 합니다.

3. 주행 방향 추론 노드

주행 방향 추론에는 trt_track_detect_node가 사용됩니다.

이 노드는 카메라의 압축 영상을 입력받아 이미지 하단 영역의 도로 또는 주행 경로를 분석합니다. 기본 구조에서는 영상 하단 110픽셀 영역을 중심으로 좌측 기준점 x₁과 우측 기준점 x₂를 추론합니다.

추론된 두 점의 중간 위치와 영상 중심점 150을 비교해 조향 제어 오차를 계산합니다.

개념적으로는 다음과 같이 표현할 수 있습니다.

경로 중심 = (x₁ + x₂) / 2

제어 오차 = 영상 중심점 - 경로 중심

제어 오차의 부호와 크기를 이용하면 차량이 현재 경로 중심에서 어느 방향으로 얼마나 벗어나 있는지 판단할 수 있습니다.

1) 입력 토픽

/camera/color/image_raw/compressed

카메라에서 발행되는 실시간 압축 이미지 데이터입니다.

압축 이미지 토픽을 사용하면 네트워크 및 ROS 2 통신 부하를 줄이는 데 유리합니다.

토픽 발행 상태는 다음 명령으로 확인할 수 있습니다.

ros2 topic hz /camera/color/image_raw/compressed

2) 조향 오차 출력

/control

/control 토픽에는 영상 중심과 추론된 주행 경로 중심의 차이가 출력됩니다.

ros2 topic echo /control

제어 오차의 절댓값이 작으면 차량이 경로 중심에 가깝다는 의미이고, 값이 커질수록 좌측 또는 우측으로 더 강한 조향이 필요하다는 의미입니다.

3) 추론 결과 이미지

/trt_image
/trt_image/compressed

해당 토픽에는 주행 경로 추론 결과와 중심점, 조향 오차 등이 표시된 디버깅 영상이 발행됩니다.

ros2 run rqt_image_view rqt_image_view /trt_image/compressed

차량이 좌우로 흔들리거나 코너에서 경로를 벗어난다면 /control 값만 확인하는 것보다 /trt_image/compressed 영상을 함께 확인하는 것이 효과적입니다.

4. YOLO 객체 인식 노드

객체 인식에는 yolo_object_detect_node가 사용됩니다.

이 노드는 카메라 영상을 YOLO 모델에 입력하여 학습된 객체를 실시간으로 검출합니다.

검출 대상은 학습 모델 구성에 따라 달라질 수 있으며, 일반적으로 다음과 같은 주행 관련 객체를 포함합니다.

  1. 속행 또는 가속 표지판
  2. 서행 표지판
  3. 우회전 표지판
  4. 적색 신호등
  5. 황색 신호등
  6. 녹색 신호등
  7. 보행자 또는 횡단보도 관련 표지판

1) 입력 토픽

/camera/color/image_raw/compressed

주행 방향 추론 노드와 동일한 카메라 압축 영상을 사용합니다.

2) 객체 검출 정보

/yolo_bounding_boxes

이 토픽에는 YOLO 모델이 검출한 객체의 종류와 화면상 위치, 바운딩 박스 크기 등의 정보가 포함됩니다.

ros2 topic echo /yolo_bounding_boxes

주행 제어 노드는 단순히 객체가 검출되었다는 사실만으로 동작하지 않고, 바운딩 박스의 면적이 설정된 기준값을 넘었는지도 함께 확인합니다.

이 방식은 멀리 있는 작은 객체에 차량이 너무 일찍 반응하는 문제를 줄이기 위한 것입니다.

바운딩 박스 면적은 일반적으로 다음과 같이 계산할 수 있습니다.

바운딩 박스 면적
= (xmax - xmin) × (ymax - ymin)

차량이 객체에 가까워질수록 화면에서 객체 크기가 커지므로, 면적 기준을 이용해 실제 제어가 필요한 시점을 판단할 수 있습니다.

3) 객체 검출 디버깅 영상

/yolo_image
/yolo_image/compressed

검출된 객체와 바운딩 박스, 클래스 정보 등을 확인할 수 있는 영상 토픽입니다.

ros2 run rqt_image_view rqt_image_view /yolo_image/compressed

객체를 인식하지 못한다면 다음 항목을 확인해야 합니다.

  1. 카메라 밝기와 노출 상태
  2. 객체와 카메라 사이의 거리
  3. 학습 데이터와 실제 환경의 차이
  4. YOLO 모델 파일 경로
  5. 클래스 이름과 제어 노드의 클래스 이름 일치 여부
  6. 바운딩 박스 면적 기준값
  7. 추론 프레임 속도

5. 주행 제어 노드

최종 차량 제어에는 dl_control_node가 사용됩니다.

이 노드는 다음 정보를 종합하여 WEGO LIMO의 선속도와 각속도를 결정합니다.

  1. 카메라 영상
  2. 긴급 정지 신호
  3. 딥러닝 조향 오차
  4. YOLO 객체 인식 결과
  5. 현재 주행 모드
  6. 객체별 동작 유지 시간
  7. 속도 및 조향 제한값

주행 제어 노드는 딥러닝에서 출력된 값을 그대로 /cmd_vel로 전달하지 않습니다.

카메라 기반 추론값에는 프레임별 편차와 작은 노이즈가 포함될 수 있기 때문에, 안정적인 차량 움직임을 만들기 위한 후처리 과정이 필요합니다.

6. 조향 안정화를 위한 3가지 처리 방식

1) 데드존

데드존은 작은 조향 오차를 무시하는 구간입니다.

차량이 거의 직진 상태인데도 추론값이 프레임마다 조금씩 달라지면 조향 장치가 좌우로 계속 움직일 수 있습니다. 이러한 미세 진동을 줄이기 위해 일정 범위 이하의 값을 0 또는 직진에 가까운 값으로 처리합니다.

데드존이 너무 작으면 차량이 좌우로 떨릴 수 있고, 너무 크면 작은 곡선을 제대로 따라가지 못할 수 있습니다.

2) 스무딩

스무딩은 이전 조향값과 현재 조향값을 혼합하여 급격한 조향 변화를 줄이는 방식입니다.

예를 들면 다음과 같이 계산할 수 있습니다.

최종 조향값
= 이전 조향값 × prev_gain
+ 현재 조향값 × current_gain

prev_gain이 커지면 움직임이 부드러워지지만 반응이 느려질 수 있습니다.

current_gain이 커지면 새로운 추론값에 빠르게 반응하지만 조향이 민감해질 수 있습니다.

3) 조향각 기반 감속

코너에서는 직선 구간과 같은 속도로 주행하면 경로를 벗어나거나 차량이 불안정해질 수 있습니다.

deceleration_ratio는 조향 명령이 커질수록 선속도를 자연스럽게 낮추는 데 사용됩니다.

급격하게 속도를 단계적으로 바꾸는 대신 시그모이드 형태의 감속 곡선을 사용하면 코너 진입과 탈출 과정에서 속도가 부드럽게 변합니다.

개념적인 속도 제어는 다음과 같습니다.

조향 오차 증가
→ 각속도 증가
→ 선속도 감소

이 기능은 특히 T자 교차로, 급커브, 좁은 트랙 구간에서 효과적입니다.

7. 주행 제어 노드 입력 토픽

dl_control_node는 다음 토픽을 입력받습니다.

토픽데이터용도
/camera/color/image_raw/compressed압축 영상주행 상태 디버깅 영상 생성
/emergency_stopBool전방 장애물 긴급 정지
/control조향 오차기본 조향 명령 계산
/yolo_bounding_boxes객체 검출 정보신호등과 표지판 기반 상태 제어

실제 토픽 연결 상태는 다음 명령으로 확인할 수 있습니다.

ros2 node info /dl_control_node

노드의 실제 이름이 네임스페이스를 포함하거나 다르게 실행된 경우에는 다음 명령으로 목록을 먼저 확인합니다.

ros2 node list

8. 주행 제어 노드 출력 토픽

1) 통합 디버깅 영상

/dl_image
/dl_image/compressed

이 영상에는 차량의 최종 주행 판단에 필요한 정보가 오버레이됩니다.

주요 표시 항목은 다음과 같습니다.

  1. YOLO 객체 검출 결과
  2. 바운딩 박스
  3. 객체별 면적 기준 통과 여부
  4. 현재 주행 모드
  5. 조향 제어 오차
  6. 선속도
  7. 각속도
  8. 정지 또는 통과 상태
  9. 객체별 타이머 상태

객체 바운딩 박스가 제어 기준 면적을 넘으면 초록색, 기준보다 작으면 빨간색으로 표시되도록 구성할 수 있습니다.

ros2 run rqt_image_view rqt_image_view /dl_image/compressed

2) 차량 속도 명령

/cmd_vel

/cmd_vel은 ROS 2의 geometry_msgs/msg/Twist 형식으로 차량의 선속도와 각속도를 전달합니다.

ros2 topic echo /cmd_vel

일반적인 출력 구조는 다음과 같습니다.

linear:
  x: 0.3
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: -0.25

linear.x는 전진 속도이며, angular.z는 좌우 회전 속도입니다.

WEGO LIMO의 구동 방식과 하위 제어 노드에 따라 각속도의 부호 방향이 달라질 수 있으므로, 차량을 바닥에서 들어 올리거나 낮은 속도로 시험한 뒤 방향을 확인해야 합니다.

9. 파라미터 파일 위치

주행 속도, 조향 민감도, 객체 반응 기준값은 params.yaml 파일에서 설정합니다.

/home/wego_ws/src/dl_ros2_application/params
dl_control_node:
  ros__parameters:
    max_steering: 1.5

    linear_x_base_speed: 0.3
    max_speed: 0.5
    min_speed: 0.05

    control_1_gain: 0.012 # 0.0065
    control_2_gain: 0.015 # 0.007

    prev_gain: 0.5
    current_gain: 0.5
    threshold_max: 1.0
    threshold_min: 0.8
    deceleration_ratio: 0.45

    speed_up_factor: 1.2
    slow_down_factor: 0.7
    turn_right_factor: 2.7 # 1.2
    yellow_light_factor: 0.5
    green_light_factor: 1.0

    slow_down_duration_sec: 1.0
    speed_up_duration_sec: 1.0
    turn_right_duration_sec: 1.0 # 1.5
    red_light_duration_sec: 1.0
    yellow_light_duration_sec: 1.0
    green_light_duration_sec: 1.0
    pedestrian_duration_sec: 3.0
    pedestrian_pass_by_duration_sec: 6.0

    slow_down_size_threshold: 2700.0
    speed_up_size_threshold: 2700.0
    turn_right_size_threshold: 2700.0 # 2700.0
    red_light_size_threshold: 7000.0
    yellow_light_size_threshold: 2700.0
    green_light_size_threshold: 7000.0
    pedestrian_size_threshold: 4000.0

파일을 수정한 뒤에는 실행 중인 노드를 종료하고 다시 실행해야 변경 내용이 반영됩니다.

설정 파일을 편집할 때는 다음과 같이 백업 파일을 먼저 생성하는 것이 좋습니다.

cd /home/wego_ws/src/dl_ros2_application/params

cp params.yaml params_backup.yaml

10. 기본 주행 파라미터

1) max_steering

max_steering: 1.5

차량에 적용할 수 있는 최대 조향값입니다.

추론값이 지나치게 크게 출력되더라도 설정값 이상으로 조향하지 않도록 제한합니다.

값이 너무 크면 급격한 조향과 차량 흔들림이 발생할 수 있고, 너무 작으면 급커브를 통과하지 못할 수 있습니다.

2) linear_x_base_speed

linear_x_base_speed: 0.3

객체 이벤트가 없는 일반 주행 상태의 기본 선속도입니다.

초기 주행 테스트에서는 속도를 낮게 설정하고, 조향 안정성을 확보한 뒤 단계적으로 올리는 것이 안전합니다.

3) max_speed

max_speed: 0.5

가속 표지판을 인식하거나 속도 배율이 적용되더라도 초과할 수 없는 최대 선속도입니다.

4) min_speed

min_speed: 0.05

차량이 주행 상태에서 사용할 최소 선속도입니다.

단, 긴급 정지나 적색 신호와 같이 완전 정지가 필요한 상황에서는 이 제한보다 정지 명령이 우선되어야 합니다.

5) control_1_gain

control_1_gain: 0.012

일반 주행 모드에서 사용하는 조향 민감도입니다.

값을 높이면 조향 반응이 빨라지고, 값을 낮추면 움직임이 부드러워집니다.

6) control_2_gain

control_2_gain: 0.015

우회전 또는 회전 모드에서 사용하는 조향 민감도입니다.

일반 모드보다 높은 값으로 설정하여 코너에서 경로를 적극적으로 따라가도록 합니다.

7) prev_gain

prev_gain: 0.5

스무딩 계산에서 이전 제어값을 유지하는 비중입니다.

8) current_gain

current_gain: 0.5

스무딩 계산에서 현재 추론값을 반영하는 비중입니다.

기본값에서는 이전 값과 현재 값을 같은 비율로 혼합합니다.

가능하면 다음 조건을 유지하는 것이 좋습니다.

prev_gain + current_gain = 1.0

9) threshold_max

threshold_max: 1.0

스무딩 또는 조향 보정이 적용되는 상한 기준입니다.

실제 코드에서 이 값이 어떠한 조건문에 사용되는지는 패키지 버전에 따라 다를 수 있으므로 소스 코드와 함께 확인해야 합니다.

10) threshold_min

threshold_min: 0.8

작은 조향값을 무시하기 위한 데드존 기준입니다.

직선 구간에서 차량이 좌우로 흔들리면 값을 조금 높이고, 완만한 곡선을 제대로 따라가지 못하면 값을 낮춰 조정할 수 있습니다.

11) deceleration_ratio

deceleration_ratio: 0.45

조향량에 따라 속도를 줄이는 비율입니다.

값을 높이면 코너에서 더 많이 감속하고, 값을 낮추면 코너를 더 빠르게 통과합니다.

11. 객체 반응 파라미터

1) speed_up_factor

speed_up_factor: 1.2

가속 또는 속행 표지판을 인식했을 때 현재 속도에 적용하는 배율입니다.

최종 속도는 max_speed를 초과하지 않아야 합니다.

2) slow_down_factor

slow_down_factor: 0.7

서행 표지판을 인식했을 때 적용하는 속도 배율입니다.

예를 들어 현재 속도가 0.3이라면 다음과 같이 계산할 수 있습니다.

0.3 × 0.7 = 0.21

3) turn_right_factor

turn_right_factor: 2.7

우회전 표지판을 인식했을 때 조향값에 적용하는 가중치입니다.

값이 너무 크면 회전 직후 반대 방향으로 크게 흔들릴 수 있으므로 control_2_gain, max_steering, deceleration_ratio와 함께 조정해야 합니다.

4) yollow_light_factor

yollow_light_factor: 0.5

황색 신호등을 인식했을 때 적용하는 속도 배율입니다.

현재 속도를 절반 수준으로 낮춰 정지 또는 신호 변화에 대비합니다.

파라미터 이름의 yollow는 일반적인 영어 표기인 yellow와 다릅니다. 실제 패키지에서 yollow_light_factor로 정의되어 있다면 임의로 이름을 수정하지 말고 소스 코드와 동일하게 사용해야 합니다.

5) green_light_factor

green_light_factor: 1.0

녹색 신호등 인식 시 현재 속도를 유지하는 배율입니다.

12. 객체별 정지 시간

객체가 인식된 직후 일정 시간 차량을 정지시키기 위한 파라미터입니다.

speed_up_duration_sec: 1.0
slow_down_duration_sec: 1.0
turn_right_duration_sec: 1.0
red_light_duration_sec: 1.0
yollow_light_duration_sec: 1.0
green_light_duration_sec: 1.0
pedestrian_duration_sec: 3.0
pedestrian_pass_by_duration_sec: 6.0

각 항목의 의미는 다음과 같습니다.

파라미터기본값동작
speed_up_duration_sec1.0초가속 표지판 인식 후 설정 시간 동안 정지
slow_down_duration_sec1.0초서행 표지판 인식 후 설정 시간 동안 정지
turn_right_duration_sec1.0초우회전 표지판 인식 후 설정 시간 동안 정지
red_light_duration_sec1.0초적색 신호 인식 후 최소 정지 시간
yollow_light_duration_sec1.0초황색 신호 인식 후 최소 정지 시간
green_light_duration_sec1.0초녹색 신호 인식 시 상태 전환 안정화 시간
pedestrian_duration_sec3.0초보행자 관련 객체 인식 후 정지 시간
pedestrian_pass_by_duration_sec6.0초동일 보행자 객체를 다시 처리하지 않는 전체 사이클 시간

보행자 처리 사이클을 예로 들면 다음과 같습니다.

0초: 보행자 객체 인식
0~3초: 차량 정지
3초: 차량 출발
3~6초: 보행자 객체가 계속 보여도 재정지하지 않음
6초 이후: 새로운 보행자 이벤트로 다시 처리 가능

이러한 무시 시간 또는 쿨다운 시간이 없다면 차량이 같은 표지판을 프레임마다 반복 인식해 계속 멈추는 문제가 발생할 수 있습니다.

13. 객체별 바운딩 박스 면적 기준

speed_up_size_threshold: 2700.0
slow_down_size_threshold: 2700.0
turn_right_size_threshold: 2700.0
red_light_size_threshold: 7000.0
yollow_light_size_threshold: 2700.0
green_light_size_threshold: 7000.0
pedestrian_size_threshold: 4000.0

각 임계값은 객체가 화면에서 일정 크기 이상으로 검출되었을 때 실제 제어 이벤트를 발생시키기 위한 기준입니다.

객체면적 기준값
가속 표지판2700.0
서행 표지판2700.0
우회전 표지판2700.0
적색 신호등7000.0
황색 신호등2700.0
녹색 신호등7000.0
보행자 표지판4000.0

임계값이 너무 낮으면 멀리 있는 객체에도 차량이 반응할 수 있습니다.

반대로 임계값이 너무 높으면 차량이 객체에 매우 가까워질 때까지 반응하지 않을 수 있습니다.

카메라의 해상도나 설치 높이, 렌즈 화각을 변경하면 동일한 거리에서도 바운딩 박스 크기가 달라지므로 임계값을 다시 조정해야 합니다.

14. WEGO LIMO 딥러닝 자율주행 실행

1) 센서 및 차량 기본 노드 실행

첫 번째 터미널에서 다음 명령을 실행합니다.

cd ~/wego_ws
source install/setup.bash
ros2 launch wego teleop_launch.py

이 런치 파일은 카메라, LiDAR, 차량 제어 등 기본 센서와 구동에 필요한 노드를 실행합니다.

실행 후에는 다음 항목을 확인합니다.

ros2 node list
ros2 topic list

카메라 토픽은 다음 명령으로 확인할 수 있습니다.

ros2 topic hz /camera/color/image_raw/compressed

2) 딥러닝 Conda 환경 활성화

두 번째 터미널에서 딥러닝 실행 환경을 활성화합니다.

conda activate dl_env

현재 활성화된 환경은 다음 명령으로 확인할 수 있습니다.

conda info --envs

터미널 프롬프트에 (dl_env)가 표시되는지도 확인합니다.

TensorFlow, TensorRT, CUDA, YOLO 관련 라이브러리는 반드시 패키지를 설치한 Conda 환경에서 실행해야 합니다.

3) 딥러닝 자율주행 런치 실행

cd ~/wego_ws
source install/setup.bash
ros2 launch dl_ros2_application dl_track_application.launch

정상적으로 실행되면 주행 방향 추론 노드, 객체 인식 노드, 주행 제어 노드가 시작됩니다.

15. 실행 후 확인해야 할 토픽

다음 토픽이 정상적으로 발행되는지 순서대로 확인합니다.

1) 카메라 영상

ros2 topic hz /camera/color/image_raw/compressed

2) 조향 오차

ros2 topic echo /control

3) YOLO 검출 결과

ros2 topic echo /yolo_bounding_boxes

4) 긴급 정지 상태

ros2 topic echo /emergency_stop

5) 최종 속도 명령

ros2 topic echo /cmd_vel

6) 디버깅 영상

ros2 run rqt_image_view rqt_image_view /trt_image/compressed
ros2 run rqt_image_view rqt_image_view /yolo_image/compressed
ros2 run rqt_image_view rqt_image_view /dl_image/compressed

16. 자율주행 시나리오

WEGO LIMO의 딥러닝 자율주행은 단순한 트랙 추종을 넘어 객체 인식 결과에 따라 주행 상태를 변경합니다.

1) 신호등 주행

적색 신호등을 인식하면 차량이 정지합니다.

녹색 신호등으로 변경되면 정지 상태를 해제하고 다시 출발합니다.

황색 신호등에서는 속도를 줄여 신호 변화에 대비합니다.

신호등은 크기가 작고 주변 조명의 영향을 많이 받기 때문에 트랙 표지판보다 높은 바운딩 박스 면적 기준을 사용할 수 있습니다.

2) 서행 구간

서행 표지판을 인식하면 slow_down_factor를 적용해 속도를 낮춥니다.

과속 방지턱이나 좁은 구간에서는 조향 안정성과 차체 충격을 줄이는 데 효과적입니다.

3) 보행자 구간

보행자 또는 횡단보도 표지판을 인식하면 설정된 시간 동안 정지합니다.

기본 설정에서는 3초 동안 대기한 뒤 다시 출발하며, 동일 객체에 반복적으로 멈추지 않도록 총 6초의 처리 사이클을 사용합니다.

4) 우회전 구간

우회전 표지판을 인식하면 회전 모드로 전환하고 일반 주행보다 높은 조향 게인을 적용합니다.

동시에 코너에서 속도를 낮추고 조향 가중치를 높여 T자 교차로나 급격한 우회전 구간을 통과합니다.

17. 파라미터 조정 순서

여러 파라미터를 동시에 변경하면 어떤 값이 주행에 영향을 주었는지 판단하기 어렵습니다.

다음 순서로 하나씩 조정하는 것이 좋습니다.

  1. linear_x_base_speed를 낮춰 안전한 시험 속도를 설정합니다.
  2. control_1_gain으로 직선과 완만한 곡선의 조향 반응을 맞춥니다.
  3. threshold_min으로 직선 구간의 좌우 흔들림을 줄입니다.
  4. prev_gain과 current_gain으로 조향 움직임을 부드럽게 만듭니다.
  5. deceleration_ratio로 코너 진입 속도를 조정합니다.
  6. control_2_gain과 turn_right_factor로 우회전 성능을 조정합니다.
  7. 객체별 size_threshold로 실제 반응 거리를 맞춥니다.
  8. 객체별 duration_sec로 정지와 재출발 시간을 조정합니다.
  9. 마지막으로 linear_x_base_speed와 max_speed를 단계적으로 높입니다.

18. 증상별 조정 방법

1) 직선 구간에서 좌우로 흔들리는 경우

다음 항목을 순서대로 조정합니다.

  1. threshold_min을 조금 높입니다.
  2. prev_gain을 높입니다.
  3. current_gain을 낮춥니다.
  4. control_1_gain을 낮춥니다.
  5. 카메라 고정 상태를 확인합니다.

2) 코너 진입이 늦은 경우

  1. control_1_gain 또는 control_2_gain을 높입니다.
  2. threshold_min을 낮춥니다.
  3. max_steering 제한이 너무 작은지 확인합니다.
  4. 딥러닝 모델의 경로 추론 지점을 확인합니다.

3) 코너에서 바깥쪽으로 이탈하는 경우

  1. deceleration_ratio를 높입니다.
  2. linear_x_base_speed를 낮춥니다.
  3. control_2_gain을 높입니다.
  4. turn_right_factor를 조정합니다.
  5. 우회전 모드 전환 시점을 앞당깁니다.

4) 우회전 후 반대 방향으로 크게 흔들리는 경우

  1. turn_right_factor를 낮춥니다.
  2. control_2_gain을 낮춥니다.
  3. 회전 모드 유지 시간을 줄입니다.
  4. prev_gain을 높여 복귀 동작을 부드럽게 만듭니다.

5) 표지판을 너무 멀리서 인식하는 경우

해당 객체의 size_threshold를 높입니다.

6) 표지판을 인식했지만 차량이 반응하지 않는 경우

  1. 바운딩 박스 면적이 임계값을 넘는지 확인합니다.
  2. YOLO 클래스 이름과 제어 코드의 클래스 이름을 확인합니다.
  3. 객체별 쿨다운 시간이 진행 중인지 확인합니다.
  4. /yolo_bounding_boxes 토픽이 제어 노드에 연결되어 있는지 확인합니다.
  5. 파라미터 파일이 런치 파일에 정상적으로 로드되는지 확인합니다.

19. 파라미터 적용 여부 확인

ROS 2에서 현재 노드에 적용된 파라미터 목록은 다음 명령으로 확인할 수 있습니다.

ros2 param list /dl_control_node

특정 값을 확인하려면 다음과 같이 실행합니다.

ros2 param get /dl_control_node linear_x_base_speed

노드 이름이 다를 경우 실제 이름을 확인한 뒤 명령에 적용해야 합니다.

ros2 node list

실행 중 파라미터 변경이 허용된 노드라면 다음과 같이 테스트할 수도 있습니다.

ros2 param set /dl_control_node linear_x_base_speed 0.2

단, 코드에서 동적 파라미터 변경을 처리하지 않으면 값이 변경되지 않거나 주행에 바로 반영되지 않을 수 있습니다.

Leave a Comment