:)
OpenCV 자이카 카메라 활용 본문
카메라 활용 사례
- 카메라로 차선 등을 찾아 자율주행 구현
- 자선을 찾아 차선을 벗어나지 않고 주행
- 사람을 찾아서 사람을 쫓아 주행
- 앞차를 따라가도록(군집주행)
- 카메라를 이용한 주변상황 인지
- 전방 이동물체 인식 - 차량/사람/자전거 인지 등등
- 전방 고정물체 인식 - 교통표지판, 신호등, 정지선, 횡단보도, 언덕 등
- 카메라 영상으로 자기위치 파악(Localization)
- 앞에 펼쳐진 전경 또는 지형물을 보고
- 지도 데이터와 비교하여 현재 차량의 위치를 유추
카메라 관련 노드와 토픽
- /usb_cam 노드에서 발행하는
- /usb_cam/image_raw 토픽
- /usb_cam/image_raw/compressed 토픽 이용
카메라 기능을 사용하려면
- Launch 파일에서 usb_cam 노드를 실행
- Pkg (패키지) = usb_cam
- Type(소스파일) = usb_cam_node.cpp (/nodes 폴더 아래
카메라 활용 ROS 프로그래밍
- 패키지 생성
- my_cam 패키지 만들기 (ROS workspace의 src 폴더)
$ catkin_create_pkg my_cam std_msgs rospy
- 서브폴더 만들기
- /launch 폴더 만들기
<launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="autoexposure" value="false" /> <param name="exposure" value="48" /> <param name="image_width" value="640" /> <param name="image_height" value="480" /> <param name="pixel_format" value="yuyv" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="map" /> </node> <node name="my_cam" pkg="my_cam" type="edge_cam.py" output="screen" /> </launch>
- edge_cam.py
- 카메라 영상을 OpenCV로 처리하여 그 결고를 화면에 출력
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import cv2
import rospy
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge # ROS에서 OpenCV를 편하게 사용하기 위한 CvBridge 사용
bridge = CvBridge()
cv_image = np.empty(shape=[0])
def img_callback(data): # image 토픽을 처리하는 콜백함수 정의
global cv_image
cv_image = bridge.imgmsg_to_cv2(data, "bgr8") # 토픽이미지를 opencv가 사용할 수 있는 이미지로 변환
rospy.init_node('cam_tune', anonymous=True)
rospy.Subscriber("/usb_cam/image_raw/", Image, img_callback)
while not rospy.is_shutdown(): # image토픽이 오면 콜백함수가 호출되도록 셋팅
if cv_image.size != (640*480*3): # 640*480 이미지 한 장이 모일때까지 잠시 기다린다.
continue
gray = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY) # 원본 이미지를 그레이칼라로 변경
blur_gray = cv2.GaussianBlur(gray,(5,5), 0)
edge_img = cv2.Canny(np.uint8(blur_gray), 60, 70)
cv2.imshow("original", cv_image)
cv2.imshow("gray", gray)
cv2.imshow("gaussian blur", blur_gray)
cv2.imshow("edge", edge_img)
cv2.waitKey(1)
- 결과 확인
$ roslaunch my_cam edge_cam.launch
- 노드 연결도
$ rqt_graph
ROS 토픽의 재생
저장된 ROS bag 파일에서 카메라 토픽만 꺼내기
카메라 토픽을 모아서 동영상 파일 만들기
'ROS' 카테고리의 다른 글
허프변환 기반 차선인식 (0) | 2022.04.10 |
---|---|
명도차 기반 차선 인식 (0) | 2022.03.30 |
자이카 센서 (0) | 2022.03.11 |
RVIZ 오도메트리 활용 (0) | 2022.03.10 |
URDF기반 자동차 3D모델링 (0) | 2022.03.10 |
Comments