问题:ros::Rate 设定的循环进入一次就卡住
解决方案:ros环境使用的仿真时间,时钟源(录的数据包)停止了,设置使用系统时间或者重新播放bag数据包,仿真时间更新即可.或者,中断rosore重新启动.
# 取消仿真时间
rosparam set use_sim_time false
# 设置使用仿真时间
rosparam set use_sim_time true
Clock官方说明
写个程序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!