AutoCar

본문 바로가기
사이트 내 전체검색


AutoCar
AutoCar

3. 구독, 발행을 활용한 센서 데이터 수신

페이지 정보

작성자 관리자 댓글 0건 조회 1,842회 작성일 21-01-12 19:29

본문

3. 구독, 발행을 활용한 센서 데이터 수신

센서 데이터를 토픽으로 발행하고 구독하여 확인하는 프로그램을 작성해 보겠습니다. 

여기서는 장비에 장착되어 있는 Cds 센서를 활용하여 실습을 진행합니다. 

우선 센서데이터 발행을 위한 cds_publisher.py 를 작성합니다.


root@holdings:~/ros# vi cds_publisher.py

from pop import Cds

import time

import rospy

from std_msgs.msg import Float64


cds = Cds(7)

rospy.init_node('Cds')


pub = rospy.Publisher('lux', Float64, queue_size=10)

rate = rospy.Rate(1)

while not rospy.is_shutdown():

    lux = cds.read()

    pub.publish(lux)

    rate.sleep()



Cds 센서데이터 수집을 위해 pop 라이브러리의 Cds 클래스를 활용합니다. 

발행 노드의 이름은 'Cds' 로 지칭하고 'lux' 토픽을 발행합니다. 

메시지 발행 주기는 초당 1 회 입니다. 

센서로부터 수신한 데이터를 토픽으로 발행하여 구독하는 노드에서 센서데이터를 수신할 수 있도록 합니다.



이번에는 센서데이터 수신을 위한 구독 노드를 작성해 보겠습니다.

root@holdings:~/ros# vi cds_subscriber.py

import time

import rospy

from std_msgs.msg import Float64

rospy.init_node('recv_lux')


def callback_msg(data):

        print(data)


rospy.Subscriber('lux', Float64, callback_msg)

rospy.spin()


구독 노드는 'recv_lux' 라는 명칭으로 노드를 생성하고 ROS 등록되어 있는 토픽중에'lux' 토픽을 구독하여 토픽이 수신될 때 마다 화면에 데이터를 출력하도록 합니다.

이제 작성한 프로그램을 실행하여 결과를 확인합니다.


먼저 첫번째 터미널에서 roscore 를 실행합니다. 이미 실행 했다면 생략합니다.


두번째 터미널에서 센서 토픽을 발행하는 cds_publisher.py 를 실행합니다.


root@holdings:~/ros# python3 cds_publisher.py


cds_publisher.py 를 실행하고나면 'Cds' 노드가 실행되고 'lux' 이라는 토픽이 등록됩니다. 

rostopic 명령을 통해 확인이 가능합니다. 


세번째 터미널에서 등록된 토픽을 구독하기 위한 cds_subcriber.py 를 실행합니다.


root@holdings:~/ros# python3 cds_subscriber.py

data: 1.0

data: 1.0

data: 1.0

data: 2.0

data: 2.0

data: 2.0


프로그램이 실행되고나면 구독 노드에서는 수신된 토픽 데이터를 화면에 출력합니다.
센서근처에 빛을 밝게하거나 또는 어둡게하면 수신되는 데이터가 변경되는 것을 확인할 수 있습니다.




댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.