[데브코스 자율주행 TIL] DAY18 (10/13) 🚗

happy_quokka·2023년 10월 15일
0
post-thumbnail

2023.10.13 DAY18😊

장애물 회피 주행을 이어서 실습했다!

어제 자이카 결과는...
1. 장애물 인식 후 go, stop 가능
2. 왼쪽, 오른쪽 거리 파악 후 우회전 또는 좌회전 판단 miss🚫
이렇게 장애물을 인식하지만 앞으로 가야할 방향에 대해서는 제대로 판단하지 못하였다. 그 이유가 거리가 먼 경우도 0.0으로 나오는 경우가 있고 또는 라이더의 각도를 제대로 설정하지 못했을거라는 추측을 했었다.

그래서 오늘은 자이카가 장애물을 인식하고 회피하는 것을 구현하였다. 결과적으로 자이카가 장애물을 판단하여 회피하는 것에 성공했다!! 하지만 코드가 깔끔하지 않고, 장애물이 너무 가까울 때만 인식하여 후진 후 재주행을 하다보니 번거로움이 있었다. 앞으로 개선해야할 문제인 것 같다!!

이제 한동안 자이카 실습을 못하는 것이 너무 아쉽다ㅠㅠ 틈틈히 코드를 수정하고, 구현해놓고 다음 자이카 실습 때 바로 실행해 볼 수 있도록 해야겠다.
다음에 만날 때 까지 안녕...👋


🚗실습 과정 및 어려웠던 점

LiDAR 각도 설정

  • 두둥...어제 라이다의 왼쪽, 오른쪽을 반대로 설정해놨었다!!! 다시 제대로 수정 완료..
  • 왼쪽 : 0°~20° (0 ~ 28)
  • 오른쪽 : 340°~360 (476 ~ 504)

LiDAR 주행 가능 여부 판단

장애물 인식을 하여 정지 후 주행이 가능한지, 어느 방향으로 주행하는 것이 좋은지 판단

문제 1 : 길이 있는데 길이 없다고 판단하는 문제 발생!!

\rightarrow 원인 : 장애물과의 거리가 0.4로 가까운 상태에서 -20° ~ 20 범위는 너무 좁아서 그 밖의 범위의 길 존재 여부를 판단하지 못한다.

  • 오른쪽, 왼쪽의 라이다 각도 범위를 처음에는 -20° ~ 20°으로 하였는데 -50° ~ 50°으로 변환
  • 각도 범위를 넓히니 구간 평균으로 길 존재 여부를 판단할 수 있게 되어 데이터 개수 10개씩(약 7°)을 평균내어 threshold 0.4보다 큰 0.5보다 크다면 길이 있다고 판단하고 해당 방향으로 주행
  • 구간이 아닌 개수로 길 존재 여부를 판단하는 것도 가능하지만 그렇게 되면 노이즈가 존재할 수 있다는 생각에 구간 평균으로 결정

문제 2 : 왼쪽으로 주행하는 것이 더 좋은 경우에도 오른쪽으로 주행

\rightarrow 원인 : 오른쪽을 우선 판단하여 오른쪽에 길이 존재한다면 왼쪽을 판단하지 않고 오른쪽으로 주행한다.

  • 오른쪽, 왼쪽의 모든 각도에서의 구간 평균을 계산하고 그 중에서 거리 평균이 가장 큰 값을 오른쪽 1개, 왼쪽 1개 각각 저장
  • 오른쪽, 왼쪽의 max 거리 값을 비교하여 큰 쪽으로 방향 설정

회전 시간, 바퀴의 각도 설정

  • 오른쪽 또는 왼쪽으로 회전 시 그 시간 설정
  • 오른쪽 또는 왼쪽 방향으로 주행할 때 바퀴의 회전 각도 설정

문제 3 : 회전하는 동안 장애물과 충돌하는 경우 발생

\rightarrow 원인 : 3초 동안 회전을 하였는데 그 동안 장애물 인식을 하지 않기 때문에 회전하는 동안 장애물과 충돌하는 경우가 발생

  • 회전 시간을 3초에서 2초로 변경
  • 회전 시간을 줄이면 회전하며 주행하는 거리, 각도가 줄어들기 때문에 더 자주 장애물 인식을 수행할 수 있고, 그렇게 되면 장애물과의 충돌을 줄일 수 있다.
  • 개선할 사항 : 하지만... 회전하는 시간을 정하는 것보다 계속 장애물 인식을 할 수 있도록 구현하는 것이 더 좋을 것 같다.

문제 4 : 조금만 회전하는 것이 좋은 경우에도 최대로 회전

\rightarrow 원인 : 회전 각도를 50 (20°)로 고정시켜 놓았기 때문에 회전하는 경우 무조건 20°로 회전

  • max 거리의 방향으로 주행하기 위해 그 때의 각도에 맞춰 바퀴의 회전 각도 조정
  • 오른쪽 또는 왼쪽의 max 거리일 때의 인덱스 값 활용
  • 인덱스 값의 각도가 -25° ~ 25°인 경우 회전 각도를 25 (또는 -25) 즉, 10° (또는 -10°)로 설정
  • 인덱스 값의 각도가 -25° ~ -50° 또는 25° ~ 50°인 경우 회전 각도를 50 (또는 -50) 즉 20° (또는 -20°)로 설정

🗂️Today's 실습 결과

  • 장애물 확인 라이다 범위 설정 : -20° ~ 20°
  • 장애물과의 거리 threshole : 0.4
  • 거리 개수 : 3개
  • 길 존재 여부 라이다 범위 : -50° ~ 50°
  • 길 존재 여부 확인 거리 threshold : 0.5
  • 길 존재 여부 확인 시 7도 구간별 평균값으로 판단
  • 오른쪽, 왼쪽 모두 길 존재 여부를 확인한 후, 그 거리값이 큰 경우의 방향으로 주행
  • 차량 속도 : 5 (후진 시 -5)
  • 차량 회전 각도
    • 인덱스 값의 각도가 -25° ~ -50° 또는 25° ~ 50°인 경우 : 50(20°) 또는 -50(-20°)
    • 인덱스 값의 각도가 -25° ~ 25°인 경우 : 25(10°) 또는 -25(-10°)
  • 회전 시간 : 2초

🛠️개선해야할 사항

  • 회전 시에도 장애물 여부 판단 \rightarrow 회전 시간을 설정하지 않고 회전할 수 있도록 개선
  • 코드 깔끔하게 정리
  • 가능하면 후진하지 않고 미리 장애물을 인식하여 회전할 수 있도록 개선
  • 라이다 인덱스, 각도를 쉽게 접근할 수 있도록 개선 (현재는 오른쪽, 왼쪽을 따로따로 접근해야하는데 이를 한번에 접근할 수 있도록 수정하고 싶다)

0개의 댓글