2. 구독, 발행, 토픽 개요
페이지 정보
작성자 관리자 댓글 0건 조회 1,721회 작성일 21-01-12 18:22본문
2. 구독, 발행, 토픽 개요
1. 토픽
토픽 메시지 통신은 정보를 송신하는 발행자와 수신하는 구독자가 정보를 송수신하는 형태입니다.
토픽을 수신하기 원하는 구독자는 마스터로부터 등록되어 있는 토픽이름 에 해당하는 발행자 노드와 직접 연결을 합니다.
연결된 이후에는 발행자가 송신하는 메시지를 수신합니다.
토픽은 비동기식 단방향 통신으로 연속적으로 여러 개의 토픽을 송신할 수 있습니다.
따라서 주기적으로 확인을 해야하는 센서 데이터등을 다룰 때 더 적합합니다.
발행자는 여러 개의 토픽을 동시에 발행할 수 있고 여러 개의 구독자 노드에 한번에 전달이 가능합니다.
구독자는 한 개의 발행자의 토픽만 수신하는 것이 아닌 마스터 노드에 등록되어 있는 토픽정보들 중 원하는 토픽의 개수만큼 수신이 가능합니다.
2. 발행자 노드
간단한 노드를 생성하여 토픽을 발행하고 구독하는 실습을 진행해보도록 하겠습니다.
time 라이브러리를 이용해 시간 데이터를 발행하는 파이썬 프로그램를 작성합니다.
다음 명령어로 publisher.py라는 새로운 파이썬 파일을 생성합니다.
root@holdings:~# cd ros
root@holdings:~/ros# vi publisher.py
현재 프로세스를 'Timer'라는 이름의 노드로 등록합니다.
rospy.Publisher 메소드로 'time'이라는 토픽을 가진 Float64 타입 메시지를 발행하는 객체를 생성합니다.
메시지 발행 주기를 초당 10 회로 설정합니다.
time.time() 메소드로 현재 시간을 얻어 메시지를 발행하고 다음 주기가 올 때까지 sleep 하는 과정을 ROS Core 가 꺼질 때까지 반복합니다.
또, ropy.loginfo() 메소드로 메시지 발행 결과를 기록합니다.
작성한 발행 노드가 정상적으로 실행되는지 확인하기 위해서는 우선 마스터가 실행되어 있어야 합니다.
마스터 실행은 roscore 명령을 통해 실행할 수 있습니다.
첫번째 터미널에서 roscore 를 입력합니다.
root@holdings:~# roscore
... logging to /root/.ros/log/91c72442-54b3-11eb-be2e-000000000001/roslaunch-holdings-31461.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://holdings:33111/
ros_comm version 1.14.7
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.7
NODES
auto-starting new master
process[master]: started with pid [31499]
ROS_MASTER_URI=http://holdings:11311/
setting /run_id to 91c72442-54b3-11eb-be2e-000000000001
process[rosout-1]: started with pid [31513]
started core service [/rosout]
노드의 실행은 다음과 같이 입력하면 됩니다.
실행하고 나면 'Timer' 노드가 실행되고 'time' 이라는 토픽이 등록됩니다.
root@holdings:~/ros# python3 publisher.py
[INFO] [1610442654.354594]: 1610442654.3542051
[INFO] [1610442654.454477]: 1610442654.4541175
[INFO] [1610442654.554491]: 1610442654.554133
[INFO] [1610442654.654502]: 1610442654.6541293
[INFO] [1610442654.754528]: 1610442654.7541473
댓글목록
등록된 댓글이 없습니다.