在一个固定利率执行代码
介绍
通过按固定间隔执行代码,您可以准确地时间和安排任务。使用一个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
与一些迭代被跳过。
另请参阅
rateControl
|rosrate
(ROS工具箱)|等待