[2023-04-03] 1. 자이카 센서 장치와 ROS 패키지
자이카 센서 장치
카메라 센서
- 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 -> 가장 좌측 상단 하나의 점(픽셀)의 색상을 표현함
색의 인식과 저장
-
해상도 - 이미지나 화면의 선명도를 나타내는 측정 단위
-
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)
-
보통은 압축하여 전송하므로 더 높은 해상도와 초당 더 많은 프레임을 전송 가능
-
압축을 많이 하면 압축을 한 만큼 또 풀어야 하므로 시간을 소비해야 함(지연시간이 생김)
-
-
카메라 기능 조정
- 노출도
- 자동초점조정
IMU 센서(Inertial Measurement Unit)
- 관성 측정 장치 - 가속도계, 회전속도계, 자력계의 조합을 사용하여 어떤 물체(질량)에 가해지는 힘, 회전 각속도 등을 측정하는 장치
변위, 속도, 가속도
자이카에서 사용하는 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 축을 기준으로 한 회전 움직임 감지
- 지자계 센서
- 3축 나침반
- 방위 알려주는 디지털 나침반 기능
- ROLL : 이동 방향에 대하여 평행한 축 주위의 회전각
- PITCH : 이동 방향에 대하여 수직을 이루는 축 주위의 회전각(언덕을 올라가는 것과 내려오는 것을 감지 가능)
- YAW : 이동 방향에 대하여 수직을 이루는 축 주위의 회전각(좌회전, 우회전 감지 가능)
라이다
라이다 / 레이다
-
라이다
-
레이저 신호의 반사파를 이용
-
짧은 주파수로 작은 물체도 감지 가능
-
정확한 3D 단색 이미지 구성 가능
-
멀티 채널 라이다
- 위 아래 스캐닝 가능
- 사람, 차량, 벽, 기둥 인식 가능
-
-
레이다
- 전파신호의 반사파 이용
- 속도 감지 가능(경찰의 과속 측정기에 사용)
- 구름 많은 날씨 환경 및 야간에도 손쉽게 작동
- 라이다보다 더 긴 작동 거리를 제공
라이다의 장애물 감지 기능
- 돌발 장애물
- 라이다를 이용해 전방 장애물 감지
- 0~360도, 1도 단위로 거리 센싱
- X,Y 좌표로 변환하여 장애물 위치 판단
- 진행방향에 장애물이 있으면 정지
라이다의 센싱 데이터
- 360도 회전하면서 1도씩 전방에 있는 장애물까지의 거리를 센싱
- 360개의 Array 데이터를 만들어 사용
초음파 센서
- 인간의 귀가 들을 수 있는 가청 주파수 대역보다 높은 진동수로 발생하는 파동
- 초음파를 이용하여 센서로부터 사물까지의 직선거리를 측정
- 자이카에는 모두 5개가 달려있음 (후방 3개, 좌측 1개, 우측 1개)
- 송신부에서 초음파를 발사하면 물체에서 반사되고 반사된 초음파가 수신부에서 감지하며 송신과 수신 사이의 시간 간격을 기준으로 물체까지의 거리를 측정함
- 1cm 이동하는데 약 29us 소요
초음파 측정 오류
Depth 카메라
- 카메라 2개를 사용하여 영상 처리
<img src=”https://user-images.githubusercontent.com/116723552/230163282-7fa874b2-3530-4fd5-b0ed-f272784f42d1.png” alt=”image” style=”zoom:80%;” /
센서 ROS 패키지
카메라를 위한 ROS 패키지
-
카메라 제조사의 ROS 패키지가 아닌, 웹캠과 같은 범용 USB 카메라 제어용 ROS 패키지를 사용함
-
카메라 영상을 촬영하고 압축하고 전송하는 일을 처리함
- /usb_cam 노드에서 발행하는 /usb_cam/image_raw 토픽을 이용함
- /usb_cam/image_raw 토픽이 1초에 30번 날라감
- 네트워킹 부하를 줄이기 위해 /usb_cam/image_raw/compressd 토픽은 압축된 영상을 담고 있음
$ 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가 현재 카메라가 찍는 화면을 보여줌
- rqt_graph
$ rostopic info /usb_cam/image_raw
- image_raw의 타입은 sensor_msgs/Image 임
- /usb_cam이 쏘고 있고, /image_view가 받고 있음을 알려줌
$ rostoipic show sensor_msgs/Image
$ rostopic echo /usb_cam/image_raw | head - n 11
- 앞에 11줄만 일단 보여줘
IMU센서를 위한 ROS 패키지
- ROS 커뮤니티에서 많이 사용하는 IMU 센서 제어용 ROS Package를 사용
- 가속도계/자이로/지자계의 정보를 수집하고 전송하는 일을 처리
- /xycar_imu 노드에서 /imu 토픽 발행
$ roscd xycar_imu
- xycar_imu_9dof.launch 파일에는 2개의 노드를 실행하도록 설정되어있음
- xycar_imu 노드가 IMU 센서로부터 데이터를 가져와 /imu 토픽을 발행
- rviz_imu 노드가 토픽 /imu를 구독하여 가상공간에 육면체 이미지를 표시
-
$ roslaunch xycar_imu xycar_imu_9dof.launch
- IMU 센서의 데이터에 따라 육면체를 상하좌우로 움직여 표시
$ rostopic list
$ rostopic info /imu
- imu의 타입은 sensor_msgs/Imu
- /xycar_imu이 쏘고 있고, /rviz_imu가 받고 있음을 알려줌
$ rosmsg show sensor_msgs/Imu
$ rostopic echo /imu
- rqt_graph
- rviz_imu는 좌측상단에 노드를 설정해줘야 보임 (사실상 있는 것과 마찬가지)
라이다를 위한 ROS 패키지
- 라이다 제조사가 만들어 배포하는 라이다 제어용 ROS 패키지를 사용
- 라이다로부터 장애물까지의 거리 값을 수집하고 전송하는 일을 처리
- /xycar_lidar 노드에서 /scan 토픽 발행
-
$ roscd xycar_lidar
-
lidar.launch 파일에는 2개의 노드를 실행하도록 설정되어있음
-
xycar_lidar 노드가 라이다 장치에서 데이터를 가져와 /scan 토픽을 발행하고
-
rviz 노드가 토픽 /scan을 구독하여 이미지를 표시
-
-
$ roslaunch xycar_lidar lidar.launch
- 라이다로 감지한 거리정보를 가상공간의 점으로 표시
-
$ rostopic list
-
$ rostopic info /scan
-
scan의 타입은 sensor_msgs/LaserScan
-
/xycar_lidar이 쏘고 있고, /rviz가 받고 있음을 알려줌
-
$ rosmsg show sensor_msgs/Laser scan
$ rostopic echo /scan
- rqt_graph
초음파센서를 위한 ROS 패키지
- 아두이노와의 통신을 위한 ROS 패키지를 직접 제작하여 사용
- 아두이노가 각각의 초음파 센서를 제어하여 거리정보를 수집하고 통합하여 관리
- 초음파 센서를 관리하는 것은 아두이노로 아두이노가 데이터를 수집한 다음에 토픽에 발행함
- ROS 패키지는 초음파센서를 직접 관리하는 것이 아닌, 아두이노와 소통함
- /xycar_ultrasionic 노드에서 /xycar_ultrasonic 토픽을 발행
-
$ roscde xycar_ultrasonic
-
xycar_ultrasonic.launch 파일에는 2개의 노드를 실행하도록 설정되어있음
-
xycar_ultrasonic 노드가 아두이노에서 데이터를 가져와 /xycar_ultrasonic 토픽을 발행
-
xycar_ultrasonic_viewer가 토픽 /xycar_ultrasonic 을 구독하여 이미지를 표시
-
-
$ roslaunch xycar_ultrasonic xycar_ultrasonic.launch
- 숫자가 의미하는 것은 cm
- 000 은 센싱이 안되었거나 초음파 센서가 없거나
- 배열 값의 순서가 있음(운전석부터 시계방향)
-
$ rostopic list
-
$ rostopic info /xycar_ultrasonic
-
/xycar_ultrasonic의 타입은 std_msgs/Int32MultiArray
-
/xycar_ultrasonic이 쏘고 있고, /xycar_ultrasonic_viewer가 받고 있음을 알려줌
-
$ rostopic echo /xycar_ultrasonic
- 운전석부터 시계방향인 배열의 데이터를 확인할 수 있음
- 0은 아예 안 붙어있는 것을 알 수 있음
- 32비트 정수가 담긴 배열로 만들어서 발행하는 것을 확인 할 수 있음
- rqt_graph
Depth 카메라를 위한 ROS 패키지
- Depth 카메라 제조사가 제공하는 ROS 패키지를 사용
- 모두 3개의 카메라를 제어하여 영상정보와 거리정보를 수집
- 다양한 토픽에 다양한 정보를 담아 제공
- /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 공간에 표시
- 드래그하면서 위에서 본 모습, 아래에서 본 모습을 확인 할 수 있음
$ rostopic list
- 20개가 넘는 topic이 있음
-
$ 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가 쏘고 있음
-
- rqt_graph
- rviz가 표시되어 있지 않음