프로그래머스 자율주행스쿨

TIL 21.01.11 - IMU 센서

donie 2021. 1. 11. 23:41

1강 자이카 센서

IMU센서, 카메라, LIDAR 또는 초음파센서, 가속도 센서, 지자기센서

모든 센서는 USB디바이스로 동작.

Xycar-A는 라이다

Xycar-B는 아두이노 - 초음파센서

 

카메라 센서

1080P USB 카메라

USB 2.0

UVC지원 (별도의 디바이스 드라이버 없이 윈도우 등 OS에서 인식해줌)

170도 어안렌즈

CMOS (CCD에 비해 가격이 장점. 성능은 덜 좋음. 전기를 적게 먹음.)

120fps (640x480), 30fps(1920x1080)

 

RGB (Red Green Blue)

그림/동영상 데이터는 RGB 각각의 색상을 1byte(=8bits)로 표현

 

해상도

 

노출도 Exposure

자율주행을 할 때 exposure는 낮아야 차선을 더 잘 찾는다.

exposure100보다 exposure20이 더 좋음.


2강

IMU센서

Inertial Measurement Unit

관성 측정 장치.

가속도계, 회전속도계, 자력계를 사용하여 / 어떤 물체에 가해지는 힘, 회전 각속도 등을 측정하는 장치.

roll : 옆으로 기운 것.

pitch : 앞으로 기운 것.

yaw : 좌/우회전

 

가속도 센서

MEMS기술 (Micro Electro Mechanical Systems)

기울임 감지

 

자이로센서

MEMS기술 (Micro Electro Mechanical Systems)

X,Y,Z축을 기준으로 한 회전 움직임 감지

roll, pitch, yaw

 

지자기센서

나침반 기능

지도와 결합하여 다양한 응용 가능 - 증강현실

 

라이다 LIDAR

1채널, 2D 라이다

레이저 신호의 반사파 이용.

 

레이다 RADAR

전파 신호의 반사파 이용.

라이다보다 더 긴 작동거리.


3강

초음파 Ultrasonic Wave

가청주파수보다 높은 진동수

자이카 B, C모델에 초음파센서 장착됨. 총 8개.

소리의 속도: 340m/s

측정오류 : 내가 보낸 신호가 모두 흡수되거나 / 다른 곳으로 튕겨 나가는 경우.


4강

자이카 카메라

640x480 해상도를 30fps

 

※ 카메라 노드 실행

roslaunch usb_cam usb_cam-test.launch

토픽은 /usb_cam/image_raw

토픽 정보 확인 명령어

rostopic info /usb_cam/image_raw

실제 토픽안에 담긴 메시지 정보 확인

rosmsg show sensor_msgs/Image

영상 데이터 살펴보기

rostopic echo /usb_cam/image_raw

5강

IMU센서

launch파일 실행

roslaunch xycar_imu xycar_imu_9dof.launch

xycar_imu노드가 IMU센서로부터 데이터를 가져와 /imu토픽으로 발행하고

rviz_imu노드가 토픽 /imu를 구독하여 가상공간에 육면체 이미지를 표시한다.

 

/imu 토픽 메시지 타입 확인

rostopic info /imu

/imu 토픽 정보 

rosmsg show sensor_msgs/Imu

/imu 토픽 내용

rostopic echo /imu

 

라이다

1채널 2D라이다

roslaunch xycar_lidar view_xycarlidar.launch

xycar_lidar 노드가 라이다에서 데이터를 가져와 /scan토픽으로 발행

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

 

/scan 토픽 타입 확인

rostopic info /scan

/scan 토픽 정보

rosmsg show sensor_msgs/LaserScan

intensities는 빛이 부딪쳤을 때 강도를 나타내는 값이다. 물체가 얼마나 딱딱한지 여부. 

참고: desktop.arcgis.com/en/arcmap/10.3/manage-data/las-dataset/what-is-intensity-data-.htm#:~:text=Intensity%20is%20a%20measure%2C%20collected,struck%20by%20the%20laser%20pulse.

 

What is lidar intensity data?—Help | ArcGIS Desktop

 

desktop.arcgis.com

/scan 토픽 내용

rostopic echo /scan

6강

my_imu 패키지

catkin_create_pkg my_imu std_msgs rospy

src 폴더에 roll_pitch_yaw.py

#!/usr/bin/env python
import rospy
import time

from sensor_msgs.msg import Imu
from tf.transformations import euler_from_quaternion

Imu_msg = None

def imu_callback(data):
	global Imu_msg
	Imu_msg = [data.orientation.x, data.orientation.y, data.orientation.z, data.orientation.w]

rospy.init_node("Imu_Print")
rospy.Subscriber("imu", Imu, imu_callback)

while not rospy.is_shutdown():
	if Imu_msg == None:
		continue
	(roll, pitch, yaw) = euler_from_quaternion(Imu_msg)

	print('Roll:%.4f, Pitch:%.4f, Yaw:%.4f' % (roll, pitch, yaw))

	time.sleep(1.0)

실행권한 부여

chmod +x *.py

 

launch 폴더에 roll_pitch_yaw.launch

<launch>
	<node pkg="xycar_imu" type="9dof_imu_node.py" name="xycar_imu" output="screen">
		<param name="rviz_mode" type="string" value="false" />
	</node>
	<node pkg="my_imu" type="roll_pitch_yaw.py" name="Imu_Print" output="screen" />
</launch>

 

빌드

cm

 

실행

roslaunch my_imu roll_pitch_yaw.launch

아마 xycar가 없어서 그런 것 같다.


7강

IMU관련 RVIZ Plug-in 설치

rviz_imu_plugin.tgz 파일을 ~/xycar_ws/src 폴더에 놓고 압축풀기.

tar xzvf rviz_imu_plugin.tgz

빌드

cm

 

rviz_imu 패키지 생성

catkin_create_pkg rviz_imu rospy tf geometry_msgs urdf rviz xacro

launch 폴더생성하여 imu_3d.launch

<launch>
	<!-- rviz display -->
	<node name="rviz_visualizer" pkg="rviz" type="rviz" required="true"
		args="-d $(find rviz_imu)/rviz/imu_3d.rviz"/>
	<node pkg="xycar_imu" type="9dof_imu_node.py" name="xycar_imu" output="screen">
		<param name="rviz_mode" type="string" value="false" />
	</node>
</launch>

 

rviz폴더 생성

~/xycar_ws/src/rviz_imu 위치에 rviz폴더를 생성한다.

mkdir rviz

 

rviz 실행

roslaunch rviz_imu imu_3d.launch

 

RVIZ 우측 Displays탭 하단에 Add버튼 클릭.

-> rviz_imu_plugin 아래의 Imu 선택하고 OK버튼 클릭.

< RVIZ Displays Tab > 세팅

Topic : /imu 선택 또는 타이핑

Box Properties : Enable box 체크하면 박스가 생김.

                      scale은 육면체 크기

                      alpha는 투명도

Axes Properties : 축 속성.

                      Enable axes 체크하면 축이 생김. 체크했는데 안생긴다면 체크해제 후 다시 체크.

                      scale은 축의 크기

 

RVIZ 세팅 상태 저장

imu_3d.rviz파일을 rviz폴더에 저장

RVIZ창을 닫으면 저장할 것인지 물어보는 창이 열린다. Save 선택.