添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • ROS与Python入门教程-目录
  • ROS与Python入门教程-搭建开发环境(PyCharm)
  • ROS与Python入门教程-构建工作空间
  • ROS与Python入门教程-构建Catkin包
  • ROS与Python入门教程-写简单发布器和订阅器
  • ROS与Python入门教程-写简单服务端和客户端
  • ROS与Python入门教程-使用参数
  • ROS与Python入门教程-使用日志
  • ROS与Python入门教程-制作Makefile文件
  • ROS与Python入门教程-设置PYTHONPATH
  • ROS与Python入门教程-使用numpy
  • ROS与Python入门教程-发布信息
  • ROS与Python入门教程-CompressedImage类型的订阅器和发布器
  • ROS与Python入门教程-代码风格
  • ROS与Python入门教程-节点初始化和关闭
  • ROS与Python入门教程-深入发布和订阅
  • ROS与Python入门教程-深入服务
  • ROS与Python入门教程-名称和节点信息
  • ROS与Python入门教程-时间
  • ROS与Python入门教程-异常
  • ROS与Python入门教程-TF-开发tf的broadcaster(广播器)
  • ROS与Python入门教程-TF-编写tf的listener(监听器)
  • ROS与Python入门教程-TF-增加参考系
  • ROS与Python入门教程-TF-了解tf和时间
  • ROS与Python入门教程-TF-Time travel(时间穿梭)
  • ROS与Python入门教程-actionlib-开发简单的action服务端
  • ROS与Python入门教程-actionlib-开发简单的action客户端
  • ROS与Python入门教程-actionlib-开发数据节点
  • ROS具有内置的时间和持续的原始类型

  • 在rospy由rospy.Time和rospy.Duration实现

  • Time是一个特定的时刻(如“今天下午”)而Duration是持续一段时间(如5小时)。持续时间可以是负的。

  • 时间和持续时间有相同的表现形式:

    int32 secs
    int32 nsecs

  • ROS有能力为节点设置一个模拟时钟。不必使用Python的time.time模块,而是使用ros的时间函数来获取当前时间

  • 获取当前时间

  • 获取当前时间: rospy.Time.now(), rospy.get_rostime() 两个是相同的
  • now = rospy.get_rostime()
    rospy.loginfo("Current time %i %i", now.secs, now.nsecs)
    
  • 获取当前时间:rospy.get_time(),获取浮点值的秒数
  • seconds = rospy.get_time()
    

    时间为0值

  • 使用模拟时钟的时间,直到在/clock上收到第一条消息,否则get_rostime() 会得到0值。
  • 0值意味客户端还不知道时间,需要区别对待,循环获取get_rostime() 直到非0值。
  • 创建时间实例

  • 使用rospy.Time(secs=0, nsecs=0)
  • epoch = rospy.Time() # secs=nsecs=0
    t = rospy.Time(10) # t.secs=10
    t = rospy.Time(12345, 6789)
    
  • 使用rospy.Time.from_sec(float_secs)
  • t = rospy.Time.from_sec(123456.789)
    

    转换时间和持续时间实例

  • 时间和持续时间的情况下可以转换为秒以及纳秒,便于非ROS库使用。
  • t = rospy.Time.from_sec(time.time())
    seconds = t.to_sec() #floating point
    nanoseconds = t.to_nsec()
    d = rospy.Duration.from_sec(60.1) # a minute and change
    seconds = d.to_sec() #floating point
    nanoseconds = d.to_nsec()
    

    时间和持续时间算术运算

  • 像其他原始类型一样,您可以执行时间和持续时间的算术运算。例如:
  • 1 hour + 1 hour = 2 hours (duration + duration = duration)
    2 hours - 1 hour = 1 hour (duration - duration = duration)
    Today + 1 day = tomorrow (time + duration = time)
    Today - tomorrow = -1 day (time - time = duration)
    Today + tomorrow = error (time + time is undefined) 
    
  • 与时间和持续时间的实例的算术类似于上面的例子:

    two_hours = rospy.Duration(6060) + rospy.Duration(6060)
    one_hour = rospy.Duration(26060) - rospy.Duration(6060)
    tomorrow = rospy.Time.now() + rospy.Duration(24
    60*60)
    negative_one_day = rospy.Time.now() - tomorrow

  • Sleeping and Rates(睡眠和速率)

  • rospy.sleep(duration),duration可以是rospy.Duration或秒。会睡眠指定的时间。
  • # sleep for 10 seconds
    rospy.sleep(10.)
    # sleep for duration
    d = rospy.Duration(10, 0)
    rospy.sleep(d)
    
  • rospy.sleep()如果出现错误,会抛出rospy.ROSInterruptException

  • rospy.Rate(hz),可以保持一定的速率来进行循环。

  • r = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        pub.publish("hello")
        r.sleep()
    
  • Rate.sleep() 出现错误,抛出rospy.ROSInterruptException
  • Timer

  • 函数定义:rospy.Timer(period, callback, oneshot=False),实现方便定期调用回调函数。
  • period,调用回调函数的时间间隔,如rospy.Duration(0.1)即为10分之1秒。
  • callback,定义回调函数,会传递TimerEvent实例
  • oneshot,定时器,是否执行多次。false即一直执行。
  • def my_callback(event):
        print 'Timer called at ' + str(event.current_real)
    rospy.Timer(rospy.Duration(2), my_callback)
    
  • 例子里,Timer实例会每2秒调用my_callback

  • TimerEvent实例包含如下字段:

  • last_expected,上一个触发回调函数应该发生的时间
  • last_real,上一个触发回调函数实际发生的时间
  • current_expected,当前触发回调函数应该发生的时间
  • current_real,当前触发回调函数实际发生的时间
  • last_duration,上一个触发回调函数发生时间间隔(结束时间-开始时间)
  • 调用shutdown()关闭。

  • 纠错,疑问,交流: 请进入讨论区点击加入Q群

    获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号

    标签: ros与python入门教程

  • ROS2视频集
  • ROS1视频集
  • ROS2/二代机器人系统
  • ROS1/一代机器人系统
  • Walking/大负载科研
  • Ailibot/算法验证机器人
  • Turtlebot4/四代机器人
  • Turtlebot3/三代机器人
  • Turtlebot2/二代机器人
  • AutoDriving/自动驾驶
  • ROBOTS/其他机器人
  • Arm/机械臂套件
  • AiLearning/科教培训
  • UAV/无人机
  • ROV/USV/无人潜艇/船
  • OS/操作系统
  • Dev/开发语言
  • SLAM/即时定位和导航
  • DL/AI/深度学习
  • TK1/TX1/嵌入式开发板
  • Arduino/电子原型平台
  • Raspberry pi/树莓派
  •