Как создать издателя ROS, который отправляет подписчику фактическое время настенных часов? - PullRequest
0 голосов
/ 29 сентября 2019

У меня возникла проблема с выяснением того, как написать узел издателя (ROS Python), который будет отправлять подписчику фактическое время (IE: 12:46), которое мне нужно сделать для домашней работы. Мне нужно опубликовать фактическое время, чтобы подписчик мог использовать это время и разницу во времени, запрошенную через службу, для расчета времени где-то еще в мире. (То есть: Node1 публикует время в Нью-Йорке, Node2 подписывается и запрашивает разницу во времени между текущим местоположением - Нью-Йорк - и Лондон. Node1 отправляет информацию о разнице во времени в Node2. Node2 берет текущую разницу времени и времени и добавляет их, чтобы найтиТекущее время в Лондоне)

Я погуглил проблему и не могу найти какую-либо полезную информацию. Я нашел несколько запутанных источников, которые говорят, как получить смоделированное время в секундах и (возможно) время часов в секундах, но я не совсем понял, что они говорили достаточно, чтобы использовать информацию.

кодчто у меня есть: Извините, IDK, как правильно отформатировать это на этом сайте


   #!/usr/bin/env python

   from beginner_tutorials.srv import TimeDiff, TimeDifResponse

   from std_msgs.msg import Time

   import rospy

   pub = rospy.Publisher('currentTime', Time, queue_size=10)
   CurrentTime= localtime()

   def setupPublisher():

       rospy.init_node('talker', anonymous=True)
       rate = rospy.Rate(5) # 5hz

       while not rospy.is_shutdown():

           global CurrentTime
           CurrentTime= localtime()
           pub.publish(CurrentTime)
           rate.sleep()

   if __ name __ == "__ main __":
       setupPublisher()

У меня нет никакого кода для обмена, потому что я не знаю, как включить время. Это то, что я имею до сих пор, но я не думаю, что это правильно

Это должно опубликовать время для подписчика, но я понятия не имею, что он делает, или какие переменные я должен использовать, иличто-нибудь по этому вопросу. Мы вообще не узнали об этом в классе.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы должны быть знакомы со всеми предопределенными типами сообщений ROS (хотя некоторые из них используются значительно чаще, чем другие), включая сообщение std_msgs std_msgs / Header . Он включает в себя сообщение std_msgs / Time и термин frame_id (String), для которого вы можете сохранить местоположение времени.

Кроме того, тип ROS time (для которого есть std_msg Time, обертывающий его), необходимо получить из соответствующего метода ROS (rospy), а не localtime() (хотя вы могли бы сделатьtime от localtime(), если хотите). Для получения дополнительных справочных данных time / Time ниже приведены обзор , клиентских библиотек времени и python / rospy . Суть состоит в трех (полностью эквивалентных) функциях:

rospy.Time.now() #get time as rospy.Time instance
rospy.get_rostime() #get time as rospy.Time instance, same as .now()
rospy.get_time() #get time as float secs

Помните, что стандартом для «текущего времени» являются секунды с 1970 UTC / GMT (часовой пояс + -0). rospy.Time соответствует этому правилу, так как использует текущее время ROS time.time() для python (которое является просто набором секунд с тех пор и лишних наносекунд со секунды). Это позволит вам использовать остальные инструменты python для форматирования по своему усмотрению. ROS также позволяет «имитировать время» с Clock, как вы видели, но это забавная функция для симуляции, которую вы не получаете по умолчанию, когда используете Time (не нужно беспокоиться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...