TIL 21.01.11 - IMU 센서
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는 빛이 부딪쳤을 때 강도를 나타내는 값이다. 물체가 얼마나 딱딱한지 여부.
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 선택.