Node
최소 단위의 실행 가능한 프로세서
Package
하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
Message
노드 간의 데이터
를 주고 받음Topic
Publisher
Subscriber
Service
Service client
Service server
실질적으로 많이 사용하지는 않음
Sevice랑 비슷하지만 중간에 피드백을 전달한다는 점이 다름
주로 복잡하고 오래 걸리는 task, 중간중간 결과물을 알고 싶을 때 사용
보통 ROS 프로그램을 짤 때 80~90% Topic을 쓰고, 적은 비중으로 Service를 쓰고, 더 적은 비중으로 Action을 씀
📌 ROS에서 가장 기본이 되는 기술적 포인트
: 노드간의 메시지 통신!
$ roscore
마스터는 노드 정보를 관리!
그 데이터에 관여하거나 프로세싱을 하는 것은 아니지만, 실행되는 노드들의 정보를 관리해서 노드들의 통신을 연결하는 매개체 역할
$ rosrun 패키지이름 노드이름
서브스크라이버 노드 정보를 마스터에 전달
이때 정보는 노드 이름
, 토픽 이름
, 메시지 타입
(ex. 카메라, 모터), IP 번호와 Port 번호
$ rosrun 패키지이름 노드이름
위와 마찬가지로 노드 이름, 토픽 이름, 메시지 타입, IP 번호와 Port 번호 전달
마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알림
(결혼정보회사에서 프로필을 비교해서 잘 맞는 둘을 서로 소개시켜주는 느낌)
마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청
(결혼회사에서 상대방 전화번호를 받아서 직접 연락하는 느낌)
접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
TCPROS를 이용하여 퍼블리셔 노드와 직접 연결
발생자 노드는 서브스크라이버 노드에게 메시지를 전송 (토픽)
토픽 방식에서는 접속을 끊지 않는 이상 지속적으로 메시지를 전송한다. 즉, 연속성.
1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.
서비스는 토픽과 달리 1회에 한해 접속하고 서비스 요청 및 서비스 응답이 수행한 후 서로 간의 접속을 끊는다. 즉, 1회성이다.
메시지는 노드 간에 데이터를 주고 받을 때 사용하는 데이터의 형태
토픽, 서비스, 액션은 모두 메시지를 사용
단순 자료형
메시지 안에 메시지를 품고 있는 간단한 데이터 구조
예: geometry_msgs/Twist
노드, 메시지(토픽, 서비스, 액션, 파라미터) 가지는 고유의 식별자
ROS는 그래프(graph)라는 추상 데이터 형태(abstract data type) 지원
글로벌(global)
프라이빗(private)
예제는 7장 ROS 기본 프로그래밍 roslaunch 부분에서 다룸
다양한 프로그래밍 언어 지원
MATLAB for ROS
LabVIEW for ROS
8장 카메라 참고
참고)
강의: https://www.youtube.com/watch?v=skqzz_xQQXg&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=4&ab_channel=ROBOTISOpenSourceTeam
자료: https://github.com/robotpilot/ros-seminar/blob/master/04_ROS%EC%9D%98_%EC%A4%91%EC%9A%94_%EC%BB%A8%EC%85%89.pdf