Ускорение время в ros в несколько раз

Как ускорить время в ros во много раз, используя rostime API?


Ответы (2 шт):

Автор решения: Andrey Belkin

Обычно, клиенты в ROS используют системные часы компьютера (т.н. "настенные часы"). Для ускорения, замедления и пр. времени, нужно задействовать /clock для симулирования времени. Для этого, нужено установить /use_sim_time параметр до инициализации.

Clock Message:

В любом случае, почитайте про ROS Clock, например на Clock.

→ Ссылка
Автор решения: sheviv

Для ускорения/замедления времени в 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)))

После чего запускаете ваш симулятор и продолжаете работу. Важно соблюдать алгоритм запуска и будет счастье.

→ Ссылка