OpenCV와 Rosbag을 이용한 차선인식 주행

  • RVIZ의 3D 자동차가 Rosbag의 카메라 데이터로 차선인식 주행
  • 차선 추종 주행
    • 좌우 차선을 찾아내어 차선을 벗어나지 않게 주행하면 됨

image

패키지 구성

  • 기존의 line_drive 패키지 사용
  • line_follow.py 파일 작성
  • 카메라 토픽을 담은 cam_topic.bag 파일 준비

  • line_follow.launch 파일 작성
  • line_follow.rosbag.launch 파일 작성

image

ROS 노드와 토픽 구성도

image

cam_topic.bag 파일 제작

  • 제공된 full_topic.bag에서 카메라 토픽만 추출하여 cam_topic.bag 제작

  • 제작 순서
    1. $ rosbag record -O cam_topic /usb_cam/image_raw/ : 토픽이 발행되면 카메라 토픽만 골라서 저장하는 것으로, 파일 이름은 cam_topic.bag으로 설정
    2. $ rosbag play full_topic.bag : 터미널을 새로 열어서 전체 토픽이 담긴 ROS bag 파일을 재생(발행), 그러면 위에서 설정한 토픽은 record 되고 있음. 작업이 끝나면 이전 터미널로 가서 Ctrl + C를 눌러 녹화를 종료
    3. $ rosbag info cam_topic.bag : 재생이 완료되면 record 작업을 끝내고 파일이 제대로 생성되었는지 확인

동영상 파일 제작

  • 3개의 터미널을 열고
    • 1번 터미널에서 $ roscore
    • 2번 터미널에서 $ rosrun image_view video_recorder image:='/usb_cam/image_raw' _filename:="track2.avi" _fps:=30 를 입력해 녹화를 시작하고 track2.avi 이름의 동영상 파일로 만듬
    • 3번 터미널에서 $ rosbag play cam_topic.bag를 입력하면 카메라 토픽이 막 발행되는데, 2번 터미널에서 입력한 명령어가 잡아서 동영상 파일을 만듬

line_follow.py 프로그래밍

  • line_follow.py

조향각의 설정

  • 인식된 양쪽 차선의 중점
    • 화면 중앙의 가상의 지점의 거리에 따라 조향 정도를 설정
    • 몇 픽셀에 1도씩 꺾어야 하는가?

image

launch 파일 작성

  • line_follow.launch
  • line_follow_rosbag.launch

실행

  • $ roslaunch line_drive line_follow.launch

실행 결과

  • 가상 공간에서 차량이 주행하며 영상에서의 트랙 꺾임과 RVIZ에서의 차량 움직임이 일치함