ros::Rate 设定的帧率循环进入一次就卡住

问题:ros::Rate 设定的循环进入一次就卡住

解决方案:ros环境使用的仿真时间,时钟源(录的数据包)停止了,设置使用系统时间或者重新播放bag数据包,仿真时间更新即可.或者,中断rosore重新启动.

参考:ROS时钟仿真的初探_qq_278667286的博客-CSDN博客ros时钟仿真的初探如果设置了ros时钟仿真参数,发布一个时间的clock话题,就可以控制ros系统的时间。但是当发布clock话题的节点没有运行,会出现什么反应?我得出的答案是当其他所有节点线程遇到延时,执行rospy.sleep,rate.sleep等函数时,会一直卡住,while循环不跳出。一直等待 ,直到时钟初始化。让我们顺腾摸瓜一起看看ros 的python代码是如何运作的...https://blog.csdn.net/qq_38288618/article/details/103153996

# 取消仿真时间
rosparam set use_sim_time false
# 设置使用仿真时间
rosparam set use_sim_time true

Clock官方说明

Clock - ROS Wiki

写个程序test.py测试一下

设置use_sim_time false 和true 感受一下

import rospy

if __name__ == '__main__':
    rospy.init_node("test_node")
    rate = rospy.Rate(5)

    while not rospy.is_shutdown():
        rospy.loginfo("Hello world!")
        rate.sleep()

当use_sim_time false时输出:时间戳为系统时间

[INFO] [1648006025.447472]: Hello world!
[INFO] [1648006025.647359]: Hello world!
[INFO] [1648006025.847537]: Hello world!
[INFO] [1648006026.047720]: Hello world!
[INFO] [1648006026.247704]: Hello world!
[INFO] [1648006026.447708]: Hello world!

当设置use_sim_time true时执行程序

输出如下,然后会卡住,第一个为系统时间,第二个为仿真时间,没有bag包播放时仿真时间为0, 程序卡住.

[INFO] [1648006222.430755, 0.000000]: Hello world!

随便找个bag数据包,播放一下,使用仿真时间加 "—clock"

rosbag play filename.bag --clock

程序继续运行输出如下,时间戳多了仿真时间一项

[INFO] [1648006222.430755, 0.000000]: Hello world!
[INFO] [1648006373.102147, 1647073793.956939]: Hello world!
[INFO] [1648006373.104268, 1647073793.956939]: Hello world!
[INFO] [1648006373.305042, 1647073794.158665]: Hello world!
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值