자이카 센서 장치

카메라 센서

  • 1080P USB 카메라
  • USB2.0, UVC 지원(USB Video Class, PC나 노트북에서 별도의 드라이브 소프트웨어 없이 운영체제에서 쉽게 인식하고 사용함)
  • 170도 어안렌즈
  • CMOS OV2710 Sensor(CCD 카메라는 화질이 좋지만 전력을 많이 먹어서 화질도 괜찮게 나오면서 전력을 적게 먹는 CMOS를 사용)
  • 120-fps (640x480), 30-fps(1920-1080)
RGB(Red, Green, Blue)
  • 세상의 모든 색은 RGB의 3가지 색상 요소로 분해 가능
  • RGB 컬러 이미지의 경우, RGB 각각의 색상을 1byte(8bits)로 표현하여 한 픽셀당 3bytes 를 사용
  • Gray 스케일 이미지의 경우, 한 픽셀당 1byte 사용(각 픽셀이 0부터 255까지의 값으로 표현될 수 있음)
  • 1920 x 1080 의 화면을 가득 채우는 그림의 크기는 1920 * 1080 * 3bytes = 6Mbytes
  • 사진 데이터를 한 바이트 한 바이트 씩 표현하면 아래와 같음
  • 아래의 그림에서 3, 65, 52 -> 가장 좌측 상단 하나의 점(픽셀)의 색상을 표현함

image

색의 인식과 저장

image

  • 해상도 - 이미지나 화면의 선명도를 나타내는 측정 단위

  • PPI - 화면이나 출력장치에서 인치당 화소 수

    • PPI가 높을 수록 이미지는 더욱 선명하게 보이고 출력물의 품질도 높아짐
    • PPI가 높을수록 파일의 크기가 커짐

    e.g. 300PPI의 이미지는 인치당 300개의 화소로 구성

  • 화소수 - 디지털 이미지나 화면의 작은 단위이며, 이미지나 그래픽의 선명도와 정확도는 이 화소 수에 따라 정해짐

    ​ e.g. FHD는 1920 * 1080 = 약 200만 화소로 이루어짐

기능
  • 영상 촬영

    • 연속된 사진을 찍어 이미지 파일로 전송

    • 최대 해상도 1920 x 1080

    • 하지만 Xycar에서는 640 x 480 사진을 초당 30장 촬영

    • 640 x 480(화소수) x 3(RGB) x 30(초) = 27Mbtytes = 216Mbits

    • 전송 속도는 216Mbps, USB2.0의 최대 속도는 480Mbps(실제 240Mbps)

      • 보통은 압축하여 전송하므로 더 높은 해상도와 초당 더 많은 프레임을 전송 가능

      • 압축을 많이 하면 압축을 한 만큼 또 풀어야 하므로 시간을 소비해야 함(지연시간이 생김)

카메라 기능 조정
  • 노출도

image

  • 자동초점조정

image

IMU 센서(Inertial Measurement Unit)

  • 관성 측정 장치 - 가속도계, 회전속도계, 자력계의 조합을 사용하여 어떤 물체(질량)에 가해지는 힘, 회전 각속도 등을 측정하는 장치
변위, 속도, 가속도

image

자이카에서 사용하는 IMU 센서
  • 6축 IMU 센서-6050

    • 가속도 센서 Accelerometer : 직선 방향 가속도 감지 및 중력 가속도 감지

    • 자이로 센서 Gyroscope : 회전 속도인 각속도를 감지

  • 9축 IMU 센서 SparkFun 9DoF Razor IMU M0

    • 가속도 센서 Accelerometer

    • 자이로 센서 Gyroscope

    • 지자계 센서 Magnetometer : N극 방향 감지 및 동서남북 방위각 감지

  • 가속도 센서
    • MEMS(Micro-Electro-Mechanical-Systems) 기술 기반
    • 반도체 칩 안에 입체적인 구조물을 만들어 외부의 힘에 따라 움직이는 것을 전기적 신호로 바꾸어 출력
    • X, Y, Z 축 방향의 직선 움직임과 기울어짐의 자세 파악
  • 자이로 센서
    • MEMS(Micro-Electro-Mechanical-Systems) 기술 기반
    • X, Y, Z 축을 기준으로 한 회전 움직임 감지

image

  • 지자계 센서
    • 3축 나침반
    • 방위 알려주는 디지털 나침반 기능
      • ROLL : 이동 방향에 대하여 평행한 축 주위의 회전각
      • PITCH : 이동 방향에 대하여 수직을 이루는 축 주위의 회전각(언덕을 올라가는 것과 내려오는 것을 감지 가능)
      • YAW : 이동 방향에 대하여 수직을 이루는 축 주위의 회전각(좌회전, 우회전 감지 가능)

image-20230405171548225

라이다

라이다 / 레이다
  • 라이다

    • 레이저 신호의 반사파를 이용

    • 짧은 주파수로 작은 물체도 감지 가능

    • 정확한 3D 단색 이미지 구성 가능

    • 멀티 채널 라이다

      • 위 아래 스캐닝 가능
      • 사람, 차량, 벽, 기둥 인식 가능
  • 레이다

    • 전파신호의 반사파 이용
    • 속도 감지 가능(경찰의 과속 측정기에 사용)
    • 구름 많은 날씨 환경 및 야간에도 손쉽게 작동
    • 라이다보다 더 긴 작동 거리를 제공
라이다의 장애물 감지 기능
  • 돌발 장애물
    • 라이다를 이용해 전방 장애물 감지
    • 0~360도, 1도 단위로 거리 센싱
    • X,Y 좌표로 변환하여 장애물 위치 판단
      • 진행방향에 장애물이 있으면 정지
라이다의 센싱 데이터
  • 360도 회전하면서 1도씩 전방에 있는 장애물까지의 거리를 센싱
  • 360개의 Array 데이터를 만들어 사용

image

초음파 센서

  • 인간의 귀가 들을 수 있는 가청 주파수 대역보다 높은 진동수로 발생하는 파동
  • 초음파를 이용하여 센서로부터 사물까지의 직선거리를 측정

image

  • 자이카에는 모두 5개가 달려있음 (후방 3개, 좌측 1개, 우측 1개)
  • 송신부에서 초음파를 발사하면 물체에서 반사되고 반사된 초음파가 수신부에서 감지하며 송신과 수신 사이의 시간 간격을 기준으로 물체까지의 거리를 측정함
  • 1cm 이동하는데 약 29us 소요

image

초음파 측정 오류

image

Depth 카메라

image

  • 카메라 2개를 사용하여 영상 처리

<img src=”https://user-images.githubusercontent.com/116723552/230163282-7fa874b2-3530-4fd5-b0ed-f272784f42d1.png” alt=”image” style=”zoom:80%;” /

image

image

센서 ROS 패키지

카메라를 위한 ROS 패키지

  • 카메라 제조사의 ROS 패키지가 아닌, 웹캠과 같은 범용 USB 카메라 제어용 ROS 패키지를 사용함

  • 카메라 영상을 촬영하고 압축하고 전송하는 일을 처리함

image

  • /usb_cam 노드에서 발행하는 /usb_cam/image_raw 토픽을 이용함
  • /usb_cam/image_raw 토픽이 1초에 30번 날라감
  • 네트워킹 부하를 줄이기 위해 /usb_cam/image_raw/compressd 토픽은 압축된 영상을 담고 있음

image

  • $ roscd usb_cam
  • usb_cam-test.launch 파일에는 2개의 노드를 실행하도록 설정되어있음
    • usb_cam 노드가 카메라 영상을 토픽 /usb_cam/image_raw에 담아 발행
    • image_view 노드가 토픽 /usb_cam/image_raw를 구독하여 이미지를 화면에 표시
  • $ roslaunch usb_cam usb_cam-test.launch
  • image_view가 현재 카메라가 찍는 화면을 보여줌

image

  • rqt_graph

image

  • $ rostopic info /usb_cam/image_raw
    • image_raw의 타입은 sensor_msgs/Image 임
    • /usb_cam이 쏘고 있고, /image_view가 받고 있음을 알려줌
  • $ rostoipic show sensor_msgs/Image

image

  • $ rostopic echo /usb_cam/image_raw | head - n 11
    • 앞에 11줄만 일단 보여줘

image

IMU센서를 위한 ROS 패키지

  • ROS 커뮤니티에서 많이 사용하는 IMU 센서 제어용 ROS Package를 사용
  • 가속도계/자이로/지자계의 정보를 수집하고 전송하는 일을 처리

image-20230406035413885

  • /xycar_imu 노드에서 /imu 토픽 발행

image

  • $ roscd xycar_imu
  • xycar_imu_9dof.launch 파일에는 2개의 노드를 실행하도록 설정되어있음
    • xycar_imu 노드가 IMU 센서로부터 데이터를 가져와 /imu 토픽을 발행
    • rviz_imu 노드가 토픽 /imu를 구독하여 가상공간에 육면체 이미지를 표시
  • $ roslaunch xycar_imu xycar_imu_9dof.launch

    • IMU 센서의 데이터에 따라 육면체를 상하좌우로 움직여 표시

image

  • $ rostopic list
  • $ rostopic info /imu
    • imu의 타입은 sensor_msgs/Imu
    • /xycar_imu이 쏘고 있고, /rviz_imu가 받고 있음을 알려줌

image

  • $ rosmsg show sensor_msgs/Imu

image

  • $ rostopic echo /imu

image

  • rqt_graph
    • rviz_imu는 좌측상단에 노드를 설정해줘야 보임 (사실상 있는 것과 마찬가지)

image

라이다를 위한 ROS 패키지

  • 라이다 제조사가 만들어 배포하는 라이다 제어용 ROS 패키지를 사용
  • 라이다로부터 장애물까지의 거리 값을 수집하고 전송하는 일을 처리

image

  • /xycar_lidar 노드에서 /scan 토픽 발행

image

  • $ roscd xycar_lidar

  • lidar.launch 파일에는 2개의 노드를 실행하도록 설정되어있음

    • xycar_lidar 노드가 라이다 장치에서 데이터를 가져와 /scan 토픽을 발행하고

    • rviz 노드가 토픽 /scan을 구독하여 이미지를 표시

  • $ roslaunch xycar_lidar lidar.launch

    • 라이다로 감지한 거리정보를 가상공간의 점으로 표시

image

  • $ rostopic list

  • $ rostopic info /scan

    • scan의 타입은 sensor_msgs/LaserScan

    • /xycar_lidar이 쏘고 있고, /rviz가 받고 있음을 알려줌

image

  • $ rosmsg show sensor_msgs/Laser scan

image

  • $ rostopic echo /scan

image-20230406044404141

  • rqt_graph

image-20230406044554755

초음파센서를 위한 ROS 패키지

  • 아두이노와의 통신을 위한 ROS 패키지를 직접 제작하여 사용
    • 아두이노가 각각의 초음파 센서를 제어하여 거리정보를 수집하고 통합하여 관리
  • 초음파 센서를 관리하는 것은 아두이노로 아두이노가 데이터를 수집한 다음에 토픽에 발행함
  • ROS 패키지는 초음파센서를 직접 관리하는 것이 아닌, 아두이노와 소통함

image

  • /xycar_ultrasionic 노드에서 /xycar_ultrasonic 토픽을 발행

image

  • $ roscde xycar_ultrasonic

  • xycar_ultrasonic.launch 파일에는 2개의 노드를 실행하도록 설정되어있음

    • xycar_ultrasonic 노드가 아두이노에서 데이터를 가져와 /xycar_ultrasonic 토픽을 발행

    • xycar_ultrasonic_viewer가 토픽 /xycar_ultrasonic 을 구독하여 이미지를 표시

  • $ roslaunch xycar_ultrasonic xycar_ultrasonic.launch

    • 숫자가 의미하는 것은 cm
    • 000 은 센싱이 안되었거나 초음파 센서가 없거나
    • 배열 값의 순서가 있음(운전석부터 시계방향)

image

  • $ rostopic list

  • $ rostopic info /xycar_ultrasonic

    • /xycar_ultrasonic의 타입은 std_msgs/Int32MultiArray

    • /xycar_ultrasonic이 쏘고 있고, /xycar_ultrasonic_viewer가 받고 있음을 알려줌

image

  • $ rostopic echo /xycar_ultrasonic
    • 운전석부터 시계방향인 배열의 데이터를 확인할 수 있음
    • 0은 아예 안 붙어있는 것을 알 수 있음
    • 32비트 정수가 담긴 배열로 만들어서 발행하는 것을 확인 할 수 있음

image

  • rqt_graph

image

Depth 카메라를 위한 ROS 패키지

  • Depth 카메라 제조사가 제공하는 ROS 패키지를 사용
  • 모두 3개의 카메라를 제어하여 영상정보와 거리정보를 수집
  • 다양한 토픽에 다양한 정보를 담아 제공

image-20230406050004150

  • /camera/realsense2_camera 노드가 발행하는 2개의 대표적인 토픽
    • /camera/color/image_raw : 카메라 사진이라고 생각하면 됨
    • /camera/depth/image_rect_raw : 흑백 사진의 진함과 어두움으로 거리를 알 수 있음
  • demo_pointclound.launch 파일에는 2개의 노드를 실행하도록 설정되어있음

    • Depth 카메라를 구동하고 /camera/realsense2_camera_manager 노드가 토픽을 발행

    • RVIZ가 토픽 을 구독하여 3차원 공간에 영상이미지 표시

  • $ roslaunch realsense2_camera demo_pointclound.launch
    • RVIZ에서 depth 정보를 반영하는 영상 이미지를 3D 공간에 표시
    • 드래그하면서 위에서 본 모습, 아래에서 본 모습을 확인 할 수 있음

image

  • $ rostopic list
    • 20개가 넘는 topic이 있음

image

  • $ rostopic info /camera/color/image_raw

    • /camera/color/image_raw의 타입은 sensor_msgs/Image

    • /camera/realsense2_camera_manager가 쏘고 있고, 아무도 받고 있지 않음

  • $ rostopic info /camera/depth/image_rect_raw

    • /camera/depth/image_rect_raw 의 타입은 sensor_msgs/Image

    • /camera/realsense2_camera_manager가 쏘고 있음

image

  • rqt_graph
    • rviz가 표시되어 있지 않음

image