Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

:)

OpenCV 자이카 카메라 활용 본문

ROS

OpenCV 자이카 카메라 활용

mihee 2022. 3. 28. 13:36

카메라 활용 사례

  • 카메라로 차선 등을 찾아 자율주행 구현
    • 자선을 찾아 차선을 벗어나지 않고 주행
    • 사람을 찾아서 사람을 쫓아 주행
    • 앞차를 따라가도록(군집주행)
  • 카메라를 이용한 주변상황 인지
    • 전방 이동물체 인식 - 차량/사람/자전거 인지 등등
    • 전방 고정물체 인식 - 교통표지판, 신호등, 정지선, 횡단보도, 언덕 등
  • 카메라 영상으로 자기위치 파악(Localization)
    • 앞에 펼쳐진 전경 또는 지형물을 보고
    • 지도 데이터와 비교하여 현재 차량의 위치를 유추

카메라 관련 노드와 토픽

  • /usb_cam 노드에서 발행하는
    • /usb_cam/image_raw 토픽
    • /usb_cam/image_raw/compressed 토픽 이용

카메라 기능을 사용하려면

  • Launch 파일에서 usb_cam 노드를 실행
    • Pkg (패키지) = usb_cam
    • Type(소스파일) = usb_cam_node.cpp (/nodes 폴더 아래

exposure - 주변 광원의 밝기에 따라 알맞은 노출을 설정

카메라 활용 ROS 프로그래밍

  1. 패키지 생성
  • 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>

  1. 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)
  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