1) Topic이란?

 

 

- 노드들 간에 통신할 수 있는 채널

- 프로세스 간의 통신 발생 시 주고 받는 메시지의 경로

- Publisher node : 메시지를 전송하는 노드

- Subscriber node : 메시지를 수신하는 노드

 

 

2) Topic 예제 과정

 

- 패키지 생성 

- 패키지 설정 파일, 빌드 설정 파일 수정

- 메시지 파일 작성

- Publisher node 작성

- Subscriber node 작성

- 패키지 빌드 및 노드 실행

 

 

3) Topic 실습

 

① 패키지 생성

 

 

cd catkin_ws/src                

catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp

→ message_generation, stsd,_msgs, roscpp를 의존성으로 하는 ros_tutorials_topic 패키지 생성

 

 

 

 

② 패키지 설정 파일, 빌드 설정 파일 수정

 

- 패키지 설정 파일 ( package.xml )

 

 

<?xml version="1.0"?>

→ xml 버전 명시
<package format="2">

<name>ros_tutorials_topic</name> 

→ 위에서 정한 패키지 이름 명시

<version>0.0.0</version>
<description>The ros_tutorials_topic package</description>

→ 생성한 패키지의 간략한 설명

 

 

- 의존성 관계를 설명해주는 명령어들

<buildtool_depend>catkin</buildtool_depend>

<build_depend>message_generation</build_depend>

→ 빌드할 때의 의존성
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>

→ 헤더를 export할 때 해당 헤더가 포함되어 있다면 추가해야 함
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>

→ 패키지를 실행하는 도중 의존성이 필요하다면 추가해야 함
<exec_depend>std_msgs</exec_depend>

 

 

- 빌드 설정 파일 ( CMakeLists.txt )

 

 

cmake_minimum_required(VERSION 3.0.2)

project(ros_tutorials_topic)

→ 위에서 생성한 패키지명과 동일해야 함

 

find_package(catkin REQUIRED COMPONENTS message_generation std_msgs roscpp)

→ catkin을 빌드할 때 요구되는 구성요소 패키지

→ 의존성 패키지로 message_generation, std_msgs, roscpp를 의미

 

 

include_directories(${catkin_INCLUDE_DIRS})

→ 인클루드 디렉터리 설정

 

 

MsgTutorial.msg add_message_files(FILES MsgTutorial.msg) 

→ 메시지 선언 ( MsgTutorial.msg )

generate_messages(DEPENDENCIES std_msgs) 

→ catkin 패키지 옵션으로 라이브러리, catkin 빌드 의존성, 시스템 의존 패키지 기술

 

add_executable(publisher src/publisher.cpp)

add_dependencies(publisher ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(publisher ${catkin_LIBRARIES})

→ publisher 노드에 대한 빌드 옵션

 

add_executable(subscriber src/subscriber.cpp)

add_dependencies(subscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(subscriber ${catkin_LIBRARIES})

→ subscriber노드에 대한 빌드 옵션

 

 

 

③ 메시지 파일 작성

 

cd catkin_ws/src/ros_tutorials_topic

mkdir msg

cd msg   

gedit MsgTutorial.msg 

 

 

- time, int32 : 메시지 형식

- stamp, data : 메시지 이름

 

※ ROS 변수 형식

 

 

 

 

④ Publisher node 작성

 

cd catkin_ws/src/ros_tutorials_topic/src/

gedit publisher.cpp

 

 

 

 

⑤ Subscriber node 작성

 

cd catkin_ws/src/ros_tutorials_topic/src/

gedit subscriber.cpp

 

 

 

 

⑥ 패키지 빌드 및 노드 실행

 

cm ros_tutorials_topic

 

 

위 명령어 정상 실행 시 3개의 터미널 열고 아래 명령어 입력 

 

roscore

rosrun ros_tutorials_topic publisher

rosrun ros_tutorials_topic subscriber

 

 

 

※ 참고자료

https://www.g.camp/41

 

표윤석 박사 ROS 강의 자료

로보티즈의 표윤석 박사의 ROS강의 노트사이트입니다. https://github.com/robotpilot/ros-seminar ROS 강의 Chapter1. 로봇 소프트웨어 플랫폼 ROS 강의 Chapter2. 로봇 운영체제 ROS ROS 강의 Chapter3. ROS 개..

www.g.camp

 

'2021 INCOGNITO > ROS' 카테고리의 다른 글

Ubuntu 18.04 + Autoware 설치  (0) 2021.07.13
Week 01_ROS  (0) 2021.05.30

+ Recent posts