상세 컨텐츠

본문 제목

[ROS]Topic 통신 실습

coding/ROS

by golduny_zoo 2021. 6. 8. 16:47

본문

728x90

Topic 통신

간략하게 정리한 부분

2021.06.07 - [분류 전체보기] - [ROS] Topic, Publisher, Subscriber

 

[ROS] Topic, Publisher, Subscriber

발행-구독 모델은 비동기 메시징 패러다임이다. 발행-구독 모델에서 발신자의 메시지는 특별한 수신자가 정해져 있지 않다. 대신 발행된 메시지는 정해진 범주에 따라, 각 범주에 대한 구독을

golduny.tistory.com


Topic 이해하기

Point

  • Master를 실행하여 두 노드를 연결 시켜 주어야한다.
  • Master 없이 노드는 연결이 되지 않는다.
  • 노드를 연결한 후 Master을 실행중지 시키면 연결된 노드는 계속 연결이 되어있느나, 
    통신이 끊길 경우 연결되지 다시 연결되지 않는다.

목표 

Topic통신 메세지를 만들어 현재 시간을 나타내본다.

과정

  1. 메세지 내용 만들기 
  2. Publisher 노드 만들기 
  3. Subscriber 노드 만들기
  4. CMakeLists.txt 수정
  5. Bulid

 


2021.06.08 - [분류 전체보기] - [ROS]Package 생성

 

[ROS]Package 생성

2021.06.07 - [분류 전체보기] - [ROS]우분투 리눅스 ROS [ROS]우분투 리눅스 ROS 우분투 18.04버전으로 진행하여 Melodic Morenia 버전으로 진행했습니다. http://wiki.ros.org/ Documentation - ROS Wiki ROS (R..

golduny.tistory.com

 


1. 메세지 내용 만들기 

만든 패키지로 이동한 후

$ cd ~/catkin_ws/src/yh_tutorial

 

메세지를 위한 폴더를 생성한다.

$ mkdir msg

메세지 폴더로 들어가 파일을 생성한다.

$ cd msg
$ gedit {파일명}.msg

내가 만든 파일은 yh_msg_tutorial.msg

 

파일에 보낼 메세지의 정보를 입력한다.

더보기

만약 service 혹은 action을 만든다면 이런식으로~

만약 service 혹은 action을 만든다면 이런식으로~


2. Publisher노드 만들기

패키지 파일의 src파일로 위치를 변경한 후

$ cd ../src

노드명을 입력 한 후 파일을 작성한다.

$ gedit {노드 명}.cpp

내가 만든 Publisher노드 명은 pub_test.cpp


3. Subscriber 노드 만들기

위와 같은 위치에서 새로운 노드를 생성하고, 작성한다.

 $ gedit {노드 명}.cpp

내가 만든 Subscriber 노드명은 sub_tes.cpp


4. CMakeLists.txt 수정

위치를 패키지로 변경한다.

$ cd ~/catkin_ws/src/yh_tutorial

이 위치에 있는 CMakeLists.txt파일을 수정할 것이다. 

이 파일은 노드들의 설명서라고 생각하면 된다.

$ gedit CMakeLists.txt

10번 째 줄에는 패키지를 설정했을 때의 의존성 패키지들이 들어가 있다. 

Topic통신에서 사용하는 세개의 패키지를 남겨두고, 정리를 해주었다.

49번 째 줄 밑을 확인해 보면 'msg', 'srv', 'action'의 메세지 폴더들이 보이는데 

topic을 사용하기 위해 msg쪽의 주석을 풀고 내 메세지 폴더에 만든 파일의 이름을 넣어 주었다.

70번째 줄에서는 주석을 풀고 msg가 사용하는 의존성 패키지를 넣었다.

(msg파일에서 time stamp를 사용하기 위한 의존성 패키지)

104번째 줄에서는 현재는 include를 사용하지 않으니 주석으로 처리를 하고,

노드 파일을 실행하기 위한 의존성 패키지를 넣어준다.

message_generation은 사용하지 않으니 제거 해주었다.

117번째 줄확인

굵은 글씨는 변수할당이 되어있음을 의미한다.

135번째 줄에서 실행시킬 노드를 설정해준다.

publisher, subscribe노드를 실행해야 하기 때문에 2개로 만들어 설정한다.

144번째의 줄에서 2개의 노드를 넣어준다.

더보기

130번재의 줄에도 똑같은 add_dependencies 문장이 있는데 이것은 메타패키지를 이용할 때 쓰는 문장이다.

마지막으로 149번째의 줄에서 노드들을 추가해주면 완성이다.


5. Bulid(컴파일) 

위치를 catkin_ws로 이동한다.

$ cd ~/catkin_ws

명령어 실행

$ catkin_make

만약 오류가 나는 경우 어디에서 오류가 났는지 친절하게 알려주므로 그 무엇이 틀렸는 지 알 수 있다. 


실행 해보기 

터미널을 3창을 띄워야 한다.

    1. Master용 

$ roscore

    2. pub용

$ rosrun {프로젝트 이름} {publisher노드 이름}

    3. sub용

$ rosrun {프로젝트 이름} {publisher노드 이름}

이렇게 잘 돌아가는 topic통신을 확인할 수 있다.


http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

 

ROS/Tutorials/UnderstandingTopics - ROS Wiki

Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. Understanding ROS Topics Description: This tut

wiki.ros.org

 

'coding > ROS' 카테고리의 다른 글

[ROS]Service 통신 실습  (0) 2021.06.09
[ROS]Package 생성  (0) 2021.06.08
[ROS] ROS 용어 정리  (0) 2021.06.07
[ROS] Action, Action server, Action client  (0) 2021.06.07
[ROS] Service, Service server, Service client  (0) 2021.06.07

관련글 더보기