主要内容

在一个固定利率执行代码

介绍

通过按固定间隔执行代码,您可以准确地时间和安排任务。使用一个rateControl对象允许您控制您的代码的速度执行。这些例子显示不同的应用程序rateControl对象包括其使用机器人控制的ROS和发送命令。

在固定利率运行循环

创建一个对象,运行速度在1赫兹。

r = rateControl (1);

开始循环使用rateControl对象内部控制循环执行。重置对象前循环执行重置计时器。打印迭代和时间。

重置(右)我= = r.TotalElapsedTime 1:10时间;流(迭代:% d -时间:% f \ n ',我等待,时间)(r);结束
迭代:1 -时间:0.001271迭代:2 -时间:1.001402迭代:3 -时间:2.001519迭代:4 -时间:3.000807迭代:5 -时间:4.001274迭代:6 -时间:5.000890迭代:7 -时间:6.001031迭代:8 -时间:7.000924迭代:9 -时间:8.000725迭代:10 -时间:9.000518

每个迭代执行秒的间隔。

侵占行为为固定利率执行

rateControl对象使用OverrunAction属性来决定如何处理代码花费的时间超过操作所需的时间。选项是“滑”(默认)或“下降”。这个例子显示了如何OverrunAction影响代码的执行。

设置所需的速度和循环时间。slowFrames是一个数组的时候,循环应该停滞超过所需的速度。

desiredRate = 1;loopTime = 20;slowFrames = (3 7 12 18);

创建对象和指定OverrunAction财产。“滑”表明,等待如果时间函数将立即返回LastPeriod大于DesiredRate财产。

率= rateControl (desiredRate);率。OverrunAction =“滑”;

重置对象并开始循环。这个循环将执行所需的速度,直到达到循环时间。当TotalElapsedTime达到一个缓慢的框架,它将拖延超过所需的时间。

重置(率);率。TotalElapsedTime < loopTime如果~ isempty(找到(slowFrames = =地板(rate.TotalElapsedTime)))暂停(desiredRate + 0.1)结束等待(率);结束

查看统计数据对象。注意时间的数量。

统计=统计(率)
统计=结构体字段:时间:[1.0010 0.9993 1.0001 1.1021 0.9994 1.0008 0.9994……]NumPeriods: 20 AveragePeriod: 1.0204 StandardDeviation: 0.0418 NumOverruns: 4

改变OverrunAction“下降”“下降”表明,等待函数将返回下一个时间步,即使LastPeriod大于DesiredRate财产。这有效地下降迭代错过的慢的代码执行。

率。OverrunAction =“下降”;

重置对象并开始循环。

重置(率);率。TotalElapsedTime < loopTime如果~ isempty(找到(slowFrames = =地板(rate.TotalElapsedTime)))暂停(1.1)结束等待(率);结束stats2 =统计(率)
stats2 =结构体字段:时间:[1.0005 0.9996 1.0006 2.0013 0.9989 0.9998 1.9999……]NumPeriods: 16 AveragePeriod: 1.2501 StandardDeviation: 0.4473 NumOverruns: 4

使用“下降”在运行操作导致16时期“滑”导致20期。这种差异是由于“滑”没有等到下一个时间间隔根据所需的速度。从本质上讲,使用“滑”试图保持AveragePeriod属性接近所需的速度。使用“下降”确保代码将执行在一个区间相对DesiredRate与一些迭代被跳过。

另请参阅

|(ROS工具箱)|