3. 구독, 발행을 활용한 센서 데이터 수신
페이지 정보
작성자 관리자 댓글 0건 조회 1,843회 작성일 21-01-12 19:29본문
센서 데이터를 토픽으로 발행하고 구독하여 확인하는 프로그램을 작성해 보겠습니다.
여기서는 장비에 장착되어 있는 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
댓글목록
등록된 댓글이 없습니다.