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
댓글목록
등록된 댓글이 없습니다.