Junhyeok Lee

Applies to v0.1.0.

Frames & time

The simulator publishes a full TF tree and, when you ask for it, a simulation clock. This page is the reference for the frame names, where each one sits, and the one case where you need /clock.

The frame tree

Unity publishes every transform on /tfat 30 Hz. Everything hangs off a single fixed frame, odom:

FrameParentWhere it is
odomThe fixed world frame. It never moves; the car moves within it. Use this as the fixed frame in rviz and Foxglove.
base_linkodomThe car body. Its origin is the mid-wheelbase ground point — halfway between the axles, on the floor.
laserbase_linkThe LiDAR, at the pose you gave it in Sensor Setup.
imu_linkbase_linkThe IMU.
gnss_linkbase_linkThe GNSS antenna — the point its fix reports.
{camera}_linkbase_linkEach camera, named from the sensor in Sensor Setup.

The sensor frames sit at the Extrinsics you set in the Sensor Setup panel, so moving a sensor on the car moves its frame here too. The ego pose in /ego/odom is the transform from odom to base_link.

Simulation time: /clock

By default the simulator runs in step with the wall clock, and /clock ships disabled. In that mode your nodes use their own system time, exactly as they would against real hardware, with nothing to configure.

Enable /clock in the Network panel only when you set time_scale ≠ 1 , that is, when the simulation runs faster or slower than real time. Then tell your nodes to follow it:

# ROS 2 — per node
ros2 run <pkg> <node> --ros-args -p use_sim_time:=true

With use_sim_time set, timestamps and TF stay consistent even when a second of simulation is not a second on your watch. At time_scale = 1 it is unnecessary. Leave the clock off.