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(2460*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/树莓派