Creating ROS Message objects is much slower in R2021a than in R2019b.

2 次查看(过去 30 天)
The way MATLAB handles ROS message objects changed much in one of the recent releases of Matlab.
Sadly, I noticed a significant performance loss when creating ROS message objects even with simple messages like std_msgs/Float64.
Consider the following snippet:
while 1
tic
cmd=rosmessage('std_msgs/Float64');
toc
pause(0.1)
end
In R2019b, the object creation takes approximately 1 ms:
...
Elapsed time is 0.001047 seconds.
Elapsed time is 0.000782 seconds.
Elapsed time is 0.001075 seconds.
Elapsed time is 0.001025 seconds.
Elapsed time is 0.001191 seconds.
...
compared to almost 100 ms in R2021a:
...
Elapsed time is 0.009721 seconds.
Elapsed time is 0.008442 seconds.
Elapsed time is 0.008579 seconds.
Elapsed time is 0.010353 seconds.
Elapsed time is 0.008737 seconds.
...
This affects both Linux and Windows machines.
In most cases it is advisible to create the object only once and reuse it within the loop.
cmd=rosmessage('std_msgs/Float64');
while 1
tic
cmd.Data=1.1;
toc
pause(0.1)
end
While this works fine for simple scripts, this approach makes code much more error prone, when used with more complex message types (think of trajectory_msgs/JointTrajectory for example), where the length of the JointTrajectoryPoint array might vary.
Does something like "msg.reset()" exist that would reset all message properties before one reuses the object?

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Specialized Messages 的更多信息

标签

产品


版本

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by