메시지의 종류에는 토픽, 서비스, 액션 세 가지가 있다.
종류 | 동기 | 방향 | 사용 |
---|---|---|---|
Topic | 비동기 | 단방향 | 연속으로 데이터를 송수신 |
Service | 동기 | 양방향 | 요청 처리가 순간적(1회성); 현재 상태를 확인하고 응답받는 것이 필요한 경우 |
Action | 비동기 | 양방향 | 요청 처리 후 응답까지 오래 걸려서 서비스를 이용하기 어려운 경우, 중간 피드백값이 필요한 경우 |
토픽은 실시간으로 전송되는 단방향성 메시지이다. 퍼블리셔나 서브스크라이버가 중지하지 않는 이상 메시지를 계속 보낸다.
이러한 특성 때문에 로봇의 상태나 센서 메시지 등을 보낼 때 토픽을 많이 사용한다.
서비스는 1회성의 메시지이다. 토픽에서는 동등한 지위의 두 개의 노드간에 통신이 이루어졌지만, 서비스는 서비스 서버와 클라이언트 사이에서 통신이 이루어진다.
서비스 클라이언트는 서비스를 요청하는 입장이고, 서비스 서버는 서비스를 요청받아 정해진 프로세스를 수행하고 응답하는 역할이다.
요청과 응답을 수행하면, 서로의 접속을 끊으므로, 다시 필요하면 접속부터 새롭게 진행해야 한다.
1회성이라는 특징때문에, 로봇에 1회성 행동 명령을 내려야 하는 경우 많이 사용된다.
액션은 서비스에서 중간 결과값을 보고하는 부분이 추가된 통신이다. 서비스를 기반으로 만들어진 통신이라 생각하기 쉽지만, 실제로는 토픽을 바탕으로 구동된다.
서비스와는 다르게 클라이언트에서 취소명령을 보내거나, 서버에서 결과값을 보내면 접속이 종료된다.
roscore
모든 ros 노드들에 대한 정보 중계를 담당.
각 노드들이 서로의 존재를 인식하게 하는 역할만 담당하고, 이후는 노드들끼리 직접 통신한다. 즉, 모든 통신이 roscore를 거치는 것은 아니다.
rosrun 패키지이름 노드이름Subscriber나 Client를 따로 임의로 실행시킬 때 사용한다. 서브스크라이버 노드는 구동과 함께 마스터에 자신의 노드 이름과 메시지 형태, URI 주소 등 각종 정보를 등록한다.
다음은 ROS에서 주로 사용되는 명령어이다.
명령어 | 중요도(사용빈도) | 의미 | 기능 |
---|---|---|---|
roscd | ★★★ | ros+cd(change directory) | 지정한 ROS 패키지의 디렉터리로 이동 |
rosls | ★☆☆ | ros+ls(list files) | ROS 패키지의 파일 목록 확인 |
roscp | ★☆☆ | ros+cp(copy files) | ROS 패키지의 파일 복사 |
명령어 | 중요도(사용빈도) | 의미 | 기능 |
---|---|---|---|
roscore | ★★★ | ros+core | |
rosrun | ★★★ | ros+run | 노드 실행 |
roslaunch | ★★★ | ros+launch | 노드를 여러 개 실행 및 실행 옵션 설정 |
rosclean | ★★☆ | ros+clean | ROS 로그 파일을 검사하거나 삭제 |
명령어 | 중요도(사용빈도) | 기능 |
---|---|---|
rosnode list | ☆☆☆ | 활성화된 노드 목록 확인 |
rostopic list | ☆☆☆ | 활성화된 토픽 목록 표시 |
rosservice list | ☆☆☆ | 활성화된 서비스 정보 출력 |
명령어 | 중요도(사용빈도) | 기능 |
---|---|---|
catkin_create_pkg | ★★★ | 패키지 자동 생성 |
catkin_make | ★★★ | 캐킨 빌드 시스템에 기반을 둔 빌드 |
catkin_init_workspace | ★★☆ | 캐킨 빌드 시스템의 작업 폴더 초기화 |
catkin_find | ★☆☆ | 캐킨 검색 |
명령어 | 중요도(사용빈도) | 의미 | 기능 |
---|---|---|---|
rospack | ★★★ | ros+pack(age) | ROS 패키지와 관련된 정보 보기 |
rosinstall | ★★☆ | ros+install | ROS 추가 패키지 설치 |
rosdep | ★★☆ | ros+dep(endencies) | 해당 패키지의 의존성 파일 설치 |
출처: 05_ROS_명령어.pdf
더 많은 명령어: ROS 명령어
이 예제는 터미널 창 3개를 띄우고 시작한다.
먼저, 마스터를 구동한다.
roscore
그 다음으로, turtlesim 패키지의 turtlesim_node 서브스크라이버 노드를 구동한다.
rosrun turtlesim turtlesim_node
turtlesim 패키지에서 키보드 입력을 받는 turtle_teleop_key 퍼블리셔 노드를 구동한다.
rosrun turtlesim turtle_teleop_key
이제 토픽으로 메시지가 전송되어 키보드의 방향키 입력이 실시간으로 거북이의 움직임에 반영된다.
키보드의 방향키를 이용해 거북이를 움직여보자.
↑: 전진 ↓: 후진 ←: 좌로 회전 →: 우로 회전