타임슬롯 Publisher

  • 2_1_타임슬롯_sender.ipynb

  • 셀 실행시키기
    Ctrl + Enter
import rospy
from std_msgs.msg import Int32
import time
  • rospy 모듈 가져오기

  • std_msgs.msg 모듈의 Int32 가져오기

  • time 모듈 가져오기

rospy.init_node( 'Sender', anonymous=False)
pub = rospy.Publisher('my_topic', Int32, queue_size=0)
  • Sender Node 생성

  • my_topic Topic Publish

def do_job(num):
    for i in range(num):
        i += 1
        pub.publish(i)
  • do_job(num) 함수 생성

  • i가 num이 될 때 까지 i에 일을 더하고, Message i를 Publish함

print("")
r = input('Rate: ') #타임 슬롯 하나의 크기를 얼마나 할 것인가. = (1/r) 초
num = input('Num: ') #몇 개를 보낼 것인가 = (1/r) 초당 보낼 데이터 수
print("")

rate = rospy.Rate(r)
elapsed_total = 0

for _ in range(r):
    start_send = rospy.get_time()
    do_job(num)
    end_send = rospy.get_time()
    elapsed_sending = end_send - start_send

    start_sleep = rospy.get_time()
    rate.sleep()
    end_sleep = rospy.get_time()
    elapsed_sleep = end_sleep - start_sleep

    print(" Send: %.5f sec" % elapsed_sending)
    print("Sleep: %.5f sec" % elapsed_sleep)
    print("Total: %.5f sec\n" % (elapsed_sending + elapsed_sleep))

    elapsed_total += (elapsed_sending + elapsed_sleep)

print("\n------------- [Report]--------------")
print("It took %.5f seconds to send data" % elapsed_total)
print("-------------------------------------")
  • 사용자 입력으로 r과 num을 지정

  • rate를 r로 지정

  • elapsed_total 변수를 0으로 지정

  • for문을 r번간 실행

    • start_send 변수를 현재 Timestamp로 지정

    • do_job(num) 함수 실행

    • start_send 변수를 현재 Timestamp로 지정

    • elapsed_sending 변수를 end_send - start_send로 지정

    • start_sleep 변수를 현재 Timestamp로 지정

    • rate 동안 시간 지연

    • end_sleep 변수를 현재 Timestamp로 지정

    • elapsed_sleep 변수를 end_sleep - start_sleep으로 지정

    • elapsed_sending, elapsed_sleep, (elapsed_sending + elapsed_sleep) 출력

    • elapsed_total에 (elapsed_sending + elapsed_sleep)을 더함

  • elapsed_total 출력

    • 1/r초에 num의 갯수만큼의 data를 보낸 뒤 rate 및 sleep, data를 보낸 총 시간

    • 1/r초간 보내야 하는 data의 수가 많아질 수록 sleep이 줄어듦