Ускорение время в ros в несколько раз
Как ускорить время в ros во много раз, используя rostime API?
Ответы (2 шт):
Обычно, клиенты в ROS используют системные часы компьютера (т.н. "настенные часы"). Для ускорения, замедления и пр. времени, нужно задействовать /clock для симулирования времени. Для этого, нужено установить /use_sim_time параметр до инициализации.
Clock Message:
- roslib/Clock (до C Turtle)
- rosgraph_msgs/Clock (Diamondback и после):
time clock
В любом случае, почитайте про ROS Clock, например на Clock.
Для ускорения/замедления времени в ROS следует покапаться с API Time,в частности с Clock и Time.
Перед запуском вашего симулятора:
rosparam set use_sim_time true
После чего запускаем скрипт, который паблишит новые значения времени в топик /clock:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import rospy
import time
from rosgraph_msgs.msg import Clock
from std_msgs.msg import Time, Duration
rospy.init_node('sim_clock', anonymous=True)
clock_pub = rospy.Publisher("/clock", Clock, queue_size=10)
clock = Clock()
clock.clock = rospy.Time.from_sec(100)
r = 40
# Значение для duration менял от 0.01(очень медленно) и до 0.3(очень быстро)
# Можете сами поиграться со значениями, которые будут зависеть от ваших нужд и железа рабочей машины
duration = rospy.Duration.from_sec(0.3)
sleep_rate = r
sleep_duration = 1./sleep_rate
while not rospy.is_shutdown():
t1 = time.time()
clock.clock = clock.clock + duration
clock_pub.publish(clock)
time.sleep(max(0, sleep_duration - (time.time() - t1)))
После чего запускаете ваш симулятор и продолжаете работу. Важно соблюдать алгоритм запуска и будет счастье.