I want to run a lot of mobile robot tests in isaacsim platform, mainly with wheeled robots. But I found that the running speed in the simulation is slower than the real speed, that is, the simulation time is lagging behind the real time, is there any parameter about the time scale that can make the simulation time exponentially faster, but without affecting the physical simulation.
Do the robots have any sensor, or is just robots?
Thank you for your reply.
The sensors my robot uses are: camera, radar,
imu, and ultrasound,
odom.
Are there any sensors that affect simulation acceleration?
If you have lots of sensors, then you need a powerful GPU in order to have proper fps.
We are using an RTX4090 graphics card, is this configuration not enough?
Besides, there is no parameter or method of controlling the simulation to speed up the simulation is there, the crux of my question is that I want to explore if it is possible to set up a parameter to speed up or slow down the time scale of my simulation, but without affecting the accuracy of the physical simulation.
You can set speed with below python code.
“internal_frame_per_second” is time step in simulation world.
“real_frame_per_second” is update cycle.
If you set “internal_frame_per_second” less than “real_frame_per_second” and the machine performance is enough, you will speed up the simulation.
import sys
import time
import signal
from omni.isaac.kit import SimulationApp
real_frame_per_second = 60.0
internal_frame_per_second = 60.0
kit = None
is_processing = False
def scheduler(signum, frame):
global kit
global is_processing
if is_processing == False:
is_processing = True
kit.update()
is_processing = False
def main():
global kit
kit = SimulationApp({"renderer": "RayTracedLighting", "headless": False, "open_usd": usd_path})
import omni
from omni.isaac.core import World
my_world = World(stage_units_in_meters = 1.0, physics_dt = 1.0 / internal_frame_per_second, rendering_dt = 1.0 / internal_frame_per_second)
# Get stage handle
stage_handle = omni.usd.get_context().get_stage()
signal.signal(signal.SIGALRM, scheduler)
signal.setitimer(signal.ITIMER_REAL, 1/real_frame_per_second, 1/real_frame_per_second)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
# Shutdown and exit
omni.timeline.get_timeline_interface().stop()
kit.close()
if __name__ == '__main__':
main()