카메라 입력 데이터 프레임 취득
카메라 토픽 구독
얻어낸 영상 데이터로 차선위치 결정
BGR GrayScale
외곽선 추출 : Canny함수로 임계값 범위 설정
ROI 크롭
차선검출 : 허프변환으로 직선 찾기
양쪽 차선을 나타내는 평균 직선 도출
수평선 긋고 양쪽 직선과의 교점 좌표 도출
차선위치를 기준으로 조향각 결정
차선의 중앙으로 차량 주행
결정한 조향각에 따라 조향 모터 제어
모터제어 토픽 발행
xycar_ws
├ src
│ └ hough_drive
│ ├ src
│ │ ├ hough_drive.py
│ │ └ hough_drive.png
│ └ launch
│ └ hough_drive.launch
├ build
└ devel
카메라 노드가 보내는 토픽에서 영상 프레임 획득
영상 프레임을 OpenCV 함수로 넘겨 처리
OpenCV 영상처리 - GrayScale, Gaussian Blur, Canny Edge, ROI, HoughLinesP
차선의 위치 찾고 화면 중앙에서 어느 쪽으로 치우쳤는지 파악
핸들 조향 강도 결정
모터제어 토픽을 발행해서 차량의 움직임 제어
roi 라이다에 가림
roi 조정
곡선 구간 허프변환 실패에 대한 예외처리 필요
Gap
(roi height) 변화에 의한 lpos, rpos 조정 필요
tmp_pos
에 이전값 저장
허프변환 실패 시 이전값을 불러와서 현상 유지
gap_y
추가를 통한 lpos, rpos 조정
직선 구간에서 핸들이 좌측으로 꺾임
center_calibration
추가
rqt_graph
xycar_ws
├ src
│ └ sliding_drive
│ ├ src
│ │ ├ sliding_drive.py
│ │ └ steer_arrow.png
│ └ launch
│ └ sliding_drive.launch
├ build
└ devel
카메라 노드가 보내는 토픽에서 영상 프레임 획득
카메라 Calibration 설정값으로 이미지 보정
원근변환으로 차선 이미지를 Bird's eye view로 변환
OpenCV 영상처리 - Gaussian Blur, cvtColor, threshold
히스토그램을 사용해서 좌우 차선의 시작 위치 파악
슬라이딩 윈도우 좌우 9개씩 쌓아 올리기
왼쪽과 오른쪽 차선 위치 탐색
적절한 조향값 계산, 모터제어 토픽 발행
warp_img 4점 조정, 반전
exposure가 다른 입력에서 lane_bin_th 조정
경로가 곡선구간 진입 시 효율성이 급격히 저하
sliding window는 직선 주행이 대다수인 고속도로에 적합하다고 판단
실용화를 위해서는 warp_img의 범위를 넓게 할 수 있는 카메라를 이용해야 강건성이 좋아질 것 같음
rqt_graph