【问题标题】:How to create a ROS publisher that sends the actual wall clock time to the subscriber?如何创建向订阅者发送实际挂钟时间的 ROS 发布者?
【发布时间】:2019-09-29 20:43:06
【问题描述】:

我在弄清楚如何编写一个发布者节点 (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()

我真的没有任何代码可以分享,因为我不知道如何整合时间。这是我目前所拥有的,但我认为它不正确

它应该将时间发布给订阅者,但我不知道它在做什么,或者我应该使用什么变量,或者与此相关的任何事情。我们根本没有在课堂上了解到这一点。

【问题讨论】:

  • 你为什么不认为这是正确的?会发生什么,您预计会发生什么?

标签: python time ros publisher


【解决方案1】:

您应该熟悉所有 ROS 预定义的消息类型(尽管其中一些比其他的更常用),包括 std_msgsstd_msgs/Header 消息。它包括 std_msgs/Time 消息和 frame_id(字符串)术语,您可以为其存储时间的位置。

此外,ROS time 类型(有一个 std_msg Time 包装它),需要从适当的 ROS(rospy)方法获取,而不是 localtime()(尽管您可以将 @987654333 @ 来自localtime(),如果你愿意的话)。 如需更多time/Time 参考资料,请参阅overviewclient time librariespython / 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 坚持这一点,因为它使用 python 的 time.time() 来表示当前的 ROS 时间(这只是自那以后的秒数和秒数的额外纳秒)。这将允许您使用 python tools 的其余部分来根据需要对其进行格式化。如您所见,ROS 还允许使用Clock 进行“模拟时间”,但这是一个有趣的模拟功能,当您使用Time(无需担心)时,这不是您默认获得的。

【讨论】:

  • 除了使用CurrentTime = localtime() 而不是rospy.Time,您编写Time 发布者的代码是正确的。如果您对服务或多节点交互/设计有更多问题,请提出一个专门针对您的问题的新问题(因为这仅指定发布和理解 ROS 中的时间使用)。
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多