ROS로 뭔가를 하기 전에..
Node
ROS가 작동하는 프로세스 최소 단위를 Node라고 합니다.
그럼 노드란 무엇일까요?
자율주행 차는 기본적으로 다음과 같이 3가지의 단계를 거쳐서 행동을 하게 된다.
1.
Perception 단계에서는 카메라, LiDAR 등과 같은 기기로 부터 정보를 얻기
2.
Decision 단계에서는 Perception에서 받아온 정보를 토대로 어떤 움직임을 이어갈지 판단
3.
Control 단계에서는 Decision에서 결정한 판단을 토대로 차를 구동
ROS를 적용시켜서 크게 보면 1~3 단계가 각각 다른 노드에서 처리가 되고 서로 정보를 주고 받으면서 동작을 한다는 것인데요, 여기서의 정보를 Message라고 한다.
노드를 사용함으로써 얻는 장점은 시스템간에 충돌이 났을 경우, 각기 다른 노드로 관리되기에 어떤 노드에서 결함이 발생하였을 때 다른 노드에 영향을 주지 않는다는 점이다. 하나가 고장이 났는데 싹 다 망가지면 곤란하겠죵?
개발의 관점에서 보면 Class와 여러 함수 메소드를 기능에 따라 나눈 것이라고 보면 될 거 같다.
Package
ROS를 구성하는 기본 단위를 패키지라고 한다.
패키지 안에는 1개 이상의 노드가 있고 다른 패키지의 노드를 사용하기 위한 내용이 들어있다.
패키지 설정에 대한 내용은 아래 글을 보면 된다.
Message
Node끼리 Topic을 주고 받을 경우 Topic의 자료형을 Message라고 한다.
int8, uint16, string… 등 내장된 다양한 자료형이 있지만 커스텀 메시지를 통해 사용자가 원하는 메시지를 만들어서 활용할 수도 있다.
Topic
메세지를 주고 받는 통로라고 생각하면 된다.
이하 많은 개념과 명령어가 있지만 이미 잘 정리되어 있는 자료가 많기 때문에 생략.
Python vs C++
ROS는 파이썬과 C++을 다 지원한다. 상황에 맞게끔 언어를 선택하면 되는데 그 장단점은 짧게 요약하면 다음과 같다.
Python : 빠르게 개발을 할 수 있고 압도적으로 다양한 라이브러리를 활용할 수 있다. 단 실행 속도가 느리고 메모리 사용량이 높아서 실시간 처리에 알맞지 않을 수 있다.
C++ : Python과 반대되는데, 빠른 실행 시간과 효율적인 메모리 사용으로 실시간 처리에 알맞을 수 있으나 복잡한 문법과 느린 개발 시간으로 구현이 오래걸린다.
Reference