728x90

본 문서는 표윤석 박사님의 youtube ROS 강의와 github를 참조하여 작성되었습니다.

1. ROS의 용어

  • Node : 최소 단위의 실행 가능한 프로세서. 하나의 실행 가능한 프로그램. ROS에서는 최소한의 실행단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.

  • Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것. 또한, 패키지의 묶음을 메타패키지라 하여 따로 분리한다.

  • Message : 메시지를 통해 노드간의 데이터를 주고받게 된다. 메시지는 interger, floating, point, boolean과 같은 변수형태이다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.

  • 메시지의 종류

    • Topic : 단방향, 연속성을 가진 통신 방법. 1:1 뿐만아니라 1:N, N:1, N:N 통신도 가능. 일방적인 데이터를 계속 보낼 때 많이 사용. 센서 데이터 송수신에 많이 사용됨.

      • Publisher Node : 메시지를 보내는 쪽

      • Subscriber Node : 메시지를 받는 쪽

    • Service : 양방향, 1회성인 통신 방법.

    • Action : 명령을 내리면 중간 피드백을 보내주고 마지막에 결과 값을 전송해줌. 복잡하고 장시간 테스트, 중간중간 결과값을 알고싶은 테스트에 쓰임.

    • Parameter : 변수를 네트워크에 지정해 놓고 그 변수를 외부에서 변경시키고 다른 노드에서 받아서 프로세스를 바꿀수 있음.

2. 메시지 통신

ROS에서 가장 기본이 되는 기술적 포인트인 노드간의 메시지 통신이다.

1. 마스터 구동 : XMLRPC(XML-Remote Procedure Call)

`$ roscore` 실행시키면 노드 정보를 관리하고 노드간의 통신을 연결시켜주는 매개체 역할을 하는 마스터가 구동된다. XMLRPC라는 XML기반의 간단한 서버 클라이언트 시스템을 구동한다고 볼 수 있다.

2. Subscriber Node(Node 2) 구동

`$ rosrun 패키지이름 노드이름` 으로 Subscriber Node를 실행시키면 노드의 정보(노드의 이름, 토픽의 이름, 메시지의 형태, IP번호와 포트번호)를 마스터에게 전달해준다.

3. Publisher Node(Node 1) 구동

`$ rosrun 패키지이름 노드이름` 으로 Publisher Node를 실행시키면 2번과 같이 노드의 정보를 마스터에게 전달해 준다.

4. Publisher 정보 알림

마스터는 노드 간의 토픽이름과 메시지의 형태를 매칭하여 Subscriber Node에게 새로운 Publisher 정보를 알린다.

5. Publisher Node에 접속 요청

마스터로부터 받은 Publisher 정보를 이용하여 TCPROS 접속을 요청

6. Subscriber Node에 접속 응답

접속 응답에 해당하는 자신의 TCP URI 주소와 포트번호를 전송

7. TCP 접속

TCPROS를 이용하여 퍼블리셔 노드와 직접 연결한다.

8. 메시지 전송

Publisher Node는 Subscriber Node에게 메시지를 전송 (토픽)

9. 서비스 요청 및 응답

1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.

tutlesim 패키지를 예제로 들어보자

먼저 `roscore`로 마스터를 구동시킨 후 `rosrun turtlesim turtlesim_node`를 실행시켜 Subscriber Node를 구동한 후 `rosrun tutlesim tutle_teleop_key`를 실행시켜 Publisher Node를 구동한다.

3. ROS 메시지

메시지는 노드 간에 데이터를 주고받을 때 사용하는 데이터의 형태

  • 토픽, 서비스, 액션은 모두 메시지를 사용

  • 단순 자료형으로 이루어져 있음

  • 메시지 안에 메시지를 품고 있는 간단한 데이터 구조

  • 메시지들이 나열된 배열과 같은 구조

ex) geometry_msgs/Twist

728x90

'Programming > Ros' 카테고리의 다른 글

Ros 개발환경 구축  (2) 2019.07.15
Ros란 무엇인가?  (0) 2019.07.11

+ Recent posts