Main Content


Execute loop at fixed frequency

Since R2022b


The ros2rate object allows you to execute a loop at a fixed frequency. It uses the ROS 2 node as a source for time information. Therefore, it can use the ROS 2 simulation time or wall clock time (see the IsSimulationTime property).

The performance of the ros2rate object, and the ability to maintain the DesiredRate value depend on the publishing of the clock information in ROS 2 network. Because the ros2rate object relies on the pause function, disabling pause will result in inaccurate execution.


The scheduling resolution of your operating system and the level of other system activity can affect rate execution accuracy. As a result, accurate rate timing is limited to 100 Hz when executing MATLAB® code. To improve performance and execution speeds, use code generation.




rate = ros2rate(node,desiredRate) creates a ros2rate object, rate, that enables you to execute a loop at a fixed frequency, desiredRate. The object uses the time source of the specified ROS 2 node object, node.


expand all

Loop execution uses simulation or wall clock time, specified as 1 (true) or 0 (false). If true, the ros2rate object uses the ROS simulation time to regulate the rate of loop execution.

Desired execution rate of the loop, specified as a scalar in Hz. When using waitfor, the loop operates every DesiredRate seconds, unless the loop takes longer than that to execute. It then begins the next loop based on the specified OverrunAction.

Desired time period between executions, specified as a positive scalar in seconds. This property is equal to the inverse of DesiredRate.

Elapsed time since construction or reset, specified as a positive scalar in seconds.

Elapsed time between last two calls to waitfor, specified as a scalar. By default, LastPeriod is set to NaN until waitfor is called for the first time.

Method for handling overruns, specified as one of these character vectors:

  • 'drop' — Executes the next iteration of the loop at the next time step equal to a multiple of DesiredPeriod.

  • 'slip' — Immediately executes the next iteration of the loop.

Comparison of drop and slip overrun handling methods.

Each code section calls waitfor at the end of execution.

Object Functions

waitforPause code execution to achieve desired execution rate
statisticsStatistics of past execution periods
resetReset ros2rate object


collapse all

Create a ROS 2 node.

node = ros2node("/myNode");

Create a publisher to publish a standard integer message.

pub = ros2publisher(node,"/my_int","std_msgs/Int64");

Create a ros2rate object that runs at 2 Hz.

r = ros2rate(node,2);

Start loop that prints the current iteration and time elapsed. Use waitfor to pause the loop until the next time interval. Reset r prior to the loop execution. Notice that each iteration executes at a 1-second interval.

for i = 1:10
	time = r.TotalElapsedTime;
	fprintf('Iteration: %d - Time Elapsed: %f\n',i,time)
Iteration: 1 - Time Elapsed: 0.005251
Iteration: 2 - Time Elapsed: 0.506020
Iteration: 3 - Time Elapsed: 1.002471
Iteration: 4 - Time Elapsed: 1.502649
Iteration: 5 - Time Elapsed: 2.003248
Iteration: 6 - Time Elapsed: 2.509758
Iteration: 7 - Time Elapsed: 3.000991
Iteration: 8 - Time Elapsed: 3.500100
Iteration: 9 - Time Elapsed: 4.000300
Iteration: 10 - Time Elapsed: 4.500118

Extended Capabilities

Version History

Introduced in R2022b

See Also