ROS(Robot Operating System)
로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임워크
- 노드 프로세스의 분산 프레임워크
- 실행 프로그램을 독립적으로 설계
- 실행 시 프로세스간 결합도를 낮춰줌
- 다양한 라이브러리 사용 가능
- C++, Python 지원
- 라이다, 카메라 등의 센서 데이터를 시각화 가능
1. 메시지와 토픽
노드 간 데이터를 주고 받을 때 사용하는 기능
- 각 노드의 Publisher와 Subscriber 의 정보를 공유해 메시지 송수신
- 토픽(메시지 이름), 메시지 타입을 맞춰야 메시지 송수신 가능
- ex) 시청자가 32ch에서 방송국의 9시 뉴스를 시청한다.
- 시청자, 방송국 - 노드
- 32ch - 토픽
- 9시 뉴스 - 메시지
2. rosbridge
json 형식의 데이터 ↔ ROS 메시지 변경을 통해 통신을 연결하는 역할의 ROS 패키지
- 내부 로컬 ip 이외에도 외부 프로그램과 통신 가능하도록 함
- 시뮬레이터에서 네트워크 연결하면 json 형식으로 데이터 전송
- ROS 마스터는 rosbridge를 통해 ROS 형식의 메시지로 수신
3. rviz, rqt
토픽을 수신해 데이터 타입에 따라 시각화하는 툴
- 데이터가 한눈에 보여 디버깅할 때 편하다.
- rqt_plot : 토픽을 이용해 그래프를 그려줌
- rviz : 라이다, tf, image 등의 메시지를 3D로 시각화 해줌
- rqt_graph : 노드와 메시지 관계를 한눈에 보기 쉽게 그래프를 그려줌
센서
1. 카메라
시각적으로 보이는 모든 것을 촬영 → 다양한 정보 획득
- 객체 인식을 위해선 여러 연산 필요
- 표지판, 문자 등 읽을 수 있음
- 정확한 거리 측정 불가
- 외부 환경에 따라 정보의 품질이 떨어지기 쉬움
- 낮은 단가로 차량 구성에 부담이 적음
2. 라이다(LiDAR)
레이저 펄스를 쏘아서 반사되어 돌아오는 시간을 이용해 거리를 인지하는 센서
- 정밀도가 높고 형태 인식이 가능
- 정확한 3D 이미지 제공
- 높은 에너지 소비와 가격대, 큰 외형을 가지고 있음
- 눈이나 비에 반사되어 악천후에 약함
- 점점 효율이 좋아지고 가격이 내려가고 있음
3. 레이더(Radar)
전파를 매개체로 사물간 거리와 형태를 파악하는 센서
- 라이더 센서보다 정밀도가 떨어지지만 소형화 가능
- 사이즈가 곧 성능
- 다른 센서보다 날씨에 영향을 많이 받지 않음
- 작은 물체 식별 어려움
- 정밀한 이미지 제공 못함
- 물체의 종류를 판독하지 못함
- 최대 측정 거리에 반비례하여 측정범위가 줄어듬
4. 센서의 감지 범위
- 센서 감지 영역 - 최소거리, 최대거리
- 센서 장착 높이, 수직 시야각을 이용해 최소거리 계산
- 최대거리는 센서가 가지는 해상도에 따라 달라질 수 있음
- 수직해상도는 채널 수에 따라 결정
- 최대 시야각 범위를 채널의 개수만큼 등간격으로 나누어 신호가 방출된다.
5. GPS(Global Positioning System)
현재 위치를 손쉽게 알아낼 수 있는 센서
- 모든 위성이 신호를 보내면 수신기를 통해 각 위성의 신호 시간을 측정
- 측정 결과 순간 위치를 계산해 거리 측정
6. IMU(Inertial Measurement Unit)
가속도계와 회전 속도계, 자력계의 조합을 사용해 힘과 방향 자기장을 측정하는 센서
- 관성 측정 장비
- 3축에 대한 회전 각 속도를 측정하는 자이로센서, 3축의 가속도를 측정하는 가속도 센서로 이루어짐
- 가속도 센서 : 직교 좌표계의 3축 방향으로 가속도 측정
- IMU 센서는 현재 물체의 각 방향 별 가속도 값을 측정할 수 있음
- 노이즈, 이동, 진동에 취약
- 자이로 센서 : 직교 좌표계에서 3축 기준으로 회전의 변화량을 측정
- X축 : Roll
- Y축 : Pitch
- Z축 : Yaw
- 지자기 센서 : 지구 자기장을 읽는 센서
7. Ground truth
시뮬레이터에서 정답으로 주는 값
- 카메라, 라이다, 레이더 센서는 3개의 Ground truth를 선택 가능
- RGB : Red, Green, Glue
- Sementic : class 기반의 segmentation. 같은 객체들끼리 구분
- Instance : instance 기반의 segmentation. 각 객체를 식별