Execute loop at fixed frequency
rosrate object uses the
rateControl (Robotics System Toolbox) superclass to inherit most of its properties and methods. The
main difference is that
rateControl uses the ROS node as a source for
time information. Therefore, it can use the ROS simulation or wall clock time (see the
rosinit creates a ROS master in
MATLAB®, the global node uses wall clock time.
The performance of the
rosrate object and the ability to maintain
DesiredRate value depends on the publishing of the clock
information in ROS.
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 for execution of MATLAB code. To improve performance and execution speeds, use code generation.
rate = rosrate(
Rate object, which enables you to execute a
loop at a fixed frequency,
DesiredRate. The time source
is linked to the time source of the global ROS node, which requires you to
connect MATLAB to a ROS network using
rate = ros.Rate(
Rate object that operates loops at a fixed rate
based on the time source linked to the specified ROS node,
DesiredRate — Desired execution rate
Desired execution rate of loop, specified as a scalar in hertz. When using
waitfor, the loop operates every
DesiredRate seconds, unless the loop takes longer. It
then begins the next loop based on the specified
DesiredPeriod — Desired time period between executions
Desired time period between executions, specified as a scalar in seconds.
This property is equal to the inverse of
TotalElapsedTime — Elapsed time since construction or reset
Elapsed time since construction or reset, specified as a scalar in seconds.
OverrunAction — Method for handling overruns
'slip' (default) |
Method for handling overruns, specified as one of these character vectors:
'drop'— waits until the next time interval equal to a multiple of
'slip'— immediately executes the loop again
Each code section calls
waitfor (Robotics System Toolbox) at the end of execution.
IsSimulationTime — Indicator if simulation or wall clock time is used
Indicator if simulation or wall clock time is used, returned as
Rate object is using the
ROS simulation time to regulate the rate of loop execution.
Run Loop At Fixed Rate Using
Initialize the ROS master and the global node.
Launching ROS Core... Done in 0.41351 seconds. Initializing ROS master on http://172.29.205.49:56383. Initializing global node /matlab_global_node_43148 with NodeURI http://dcc950485glnxa64:35967/ and MasterURI http://localhost:56383.
Create a rate object that runs at 1 Hz.
r = rosrate(1);
Start loop that prints 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.
reset(r) for i = 1:10 time = r.TotalElapsedTime; fprintf('Iteration: %d - Time Elapsed: %f\n',i,time) waitfor(r); end
Iteration: 1 - Time Elapsed: 0.002380 Iteration: 2 - Time Elapsed: 1.005089 Iteration: 3 - Time Elapsed: 2.000598 Iteration: 4 - Time Elapsed: 3.001117 Iteration: 5 - Time Elapsed: 4.001761 Iteration: 6 - Time Elapsed: 5.000839 Iteration: 7 - Time Elapsed: 6.000640 Iteration: 8 - Time Elapsed: 7.000333 Iteration: 9 - Time Elapsed: 8.000699 Iteration: 10 - Time Elapsed: 9.000464
Shut down the ROS network.
Shutting down global node /matlab_global_node_43148 with NodeURI http://dcc950485glnxa64:35967/ and MasterURI http://localhost:56383. Shutting down ROS master on http://172.29.205.49:56383.
Run Loop At Fixed Rate Using ROS Time
Initialize the ROS master and node.
Launching ROS Core... ....Done in 4.1733 seconds. Initializing ROS master on http://192.168.88.1:51279. Initializing global node /matlab_global_node_86106 with NodeURI http://ah-avijayar:50550/
node = ros.Node('/testTime');
Using Master URI http://localhost:51279 from the global node to connect to the ROS master.
ros.Rate object running at 20 Hz.
r = ros.Rate(node,20);
Reset the object to restart the timer and run the loop for 30 iterations. Insert code you want to run in the loop before calling
reset(r) for i = 1:30 % User code goes here. waitfor(r); end
Shut down ROS node.
Shutting down global node /matlab_global_node_86106 with NodeURI http://ah-avijayar:50550/ Shutting down ROS master on http://192.168.88.1:51279.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
statisticsobject function is not supported.
Introduced in R2019b