[2023-04-10] 4. OpenCV와 Rosbag을 이용한 차선인식 주행
OpenCV와 Rosbag을 이용한 차선인식 주행
- RVIZ의 3D 자동차가 Rosbag의 카메라 데이터로 차선인식 주행
- 차선 추종 주행
- 좌우 차선을 찾아내어 차선을 벗어나지 않게 주행하면 됨
패키지 구성
- 기존의 line_drive 패키지 사용
- line_follow.py 파일 작성
-
카메라 토픽을 담은 cam_topic.bag 파일 준비
- line_follow.launch 파일 작성
- line_follow.rosbag.launch 파일 작성
ROS 노드와 토픽 구성도
cam_topic.bag 파일 제작
- 제공된 full_topic.bag에서 카메라 토픽만 추출하여 cam_topic.bag 제작
- 제작 순서
$ rosbag record -O cam_topic /usb_cam/image_raw/
: 토픽이 발행되면 카메라 토픽만 골라서 저장하는 것으로, 파일 이름은 cam_topic.bag으로 설정$ rosbag play full_topic.bag
: 터미널을 새로 열어서 전체 토픽이 담긴 ROS bag 파일을 재생(발행), 그러면 위에서 설정한 토픽은 record 되고 있음. 작업이 끝나면 이전 터미널로 가서 Ctrl + C를 눌러 녹화를 종료$ 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번 터미널에서 입력한 명령어가 잡아서 동영상 파일을 만듬
- 1번 터미널에서
line_follow.py 프로그래밍
- line_follow.py
조향각의 설정
- 인식된 양쪽 차선의 중점
- 화면 중앙의 가상의 지점의 거리에 따라 조향 정도를 설정
- 몇 픽셀에 1도씩 꺾어야 하는가?
launch 파일 작성
- line_follow.launch
- line_follow_rosbag.launch
실행
$ roslaunch line_drive line_follow.launch
실행 결과
- 가상 공간에서 차량이 주행하며 영상에서의 트랙 꺾임과 RVIZ에서의 차량 움직임이 일치함