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
※ 참고자료
표윤석 박사 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 |