English 中文(简体)
获得更多的确定性(短)睡眠
原标题:Get more deterministic (short) sleeps

作为学生项目,我们正在建造一个机器人,该机器人应该通过一个固定的课程运行,然后捡起一个木制立方体。它的核心是一台单机计算机,在250MHz用ARM9运行一台德比安式计算机。因此,控制器的处理能力就足够了。此外,它也做了一些图像处理(而不是在驾驶时,只有当它停止了的时候),这就是为什么我们不使用一个没有OS的简单的微控制器。

整个过程目前运作良好,但有一个问题:主要的控制环在没有任何延误的情况下执行,并达到超过1kHz的周期频率。这已经足够了,100Hz也足够。但是,每时每刻,都有一个单周期,需要100米以上,这可能会大大干扰控制器。

我怀疑还有其他任务造成这种延误,因为排程器可能发现,他们在很长一段时间内没有CPU时间。

因此,我最喜欢的是以下内容:在控制器主流中短短的睡眠时间可能为5米,这实际上只需要5米,但给系统其余部分一些处理时间。我可以包括一个延迟时间,例如500秒使用纳米睡眠,但这总是需要超过10米的时间才能执行,所以这实际上不是一种替代方法。我更喜欢像自愿睡觉那样的睡眠,让等待任务有机会做点什么,但尽快返回。

否则系统就会被卸载,所以没有任何东西可以 长期真正需要大量处理。

有没有办法在用户空间里做这件事, 即不用坚持像RTAI那样的事情?

Thanks, Philipp

问题回答

我建议您在进行运动控制时, 继续使用实时界面; 我看过1000公斤的卡车在演示期间撞到墙上, 因为操作系统决定再考虑一次...

如果你想远离RTAI(但你应该T);一个(也许)快速的解决方案就是为实际驾驶打阿杜诺板,并保留Linux板用于高级处理。

修补“墙壁问题”在驾驶板上设置一个监视器,

实时问题需要实时操作系统。

因为实时操作系统是可以预测的。 您可以设定任务优先事项, 以便那些需要在特定时间产生结果的任务不会被那些需要处理能力但不受时间限制的任务压倒。

Ok, 我找到了一个解决方案, 使它变得更好, 不完美 。 还有另一个 < a href=" https:// stackoverflow. com/ questions/9374653/ real-time- scheduling- in- linux > > tthread 来解释 sched_ setchedr () 函数 。 我的 Init 代码现在看起来是这样 :

// Lock memory to reduce probability of high latency due to swapping
int rtres = mlockall(MCL_CURRENT | MCL_FUTURE);
if (rtres) {
  cerr << "WARNING: mlockall() failed: " << rtres << endl;
}

// Set real-time scheduler policy to get more time deterministic behaviour
struct sched_param rtparams;
rtparams.sched_priority = sched_get_priority_max(SCHED_FIFO);
rtres = sched_setscheduler(0, SCHED_FIFO, &rtparams);
if (rtres) {
  cerr << "WARNING: sched_setscheduler() failed: " << rtres << endl;
}

Additionally, I ve removed the short sleeps from the mainloop. The process now eats all available processing power and is (obviously) unresponsive to any actions from the outside world (such as console keystrokes and such), but this is OK for the task at hand. The mainloop stats show that most iterations take less than a millisecond to complete, but there are still a few (every 1000th or so) which need approx. 100ms. This is still not good, but at least there are no more delays which are even longer.

因为这是一个“唯一的”学生项目, 我们可以接受这个计划,

总之,谢谢你的建议,下次我会更清楚 如何应付实时需求

Regards, Philipp

我们工作时在ARM7板上运行100个 Hz环路,使用标准的 Linux 和 < a href="https://rt.wiki.kernel.org/index.php/Main_Page" rel=“nofollow”>RT 补丁 ,这使得(几乎)内核中的所有锁都能先发制人。 将此与高优先线结合起来,让我们在内核和用户空间中都具备必要的性能。

你唯一需要做的就是应用补丁和配置内核 来使用完全的先发制人, 也很容易使用-- 不需要改变软件结构中的任何内容, 虽然我对Debian不太熟悉,





相关问题
Signed executables under Linux

For security reasons, it is desirable to check the integrity of code before execution, avoiding tampered software by an attacker. So, my question is How to sign executable code and run only trusted ...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

How to write a Remote DataModule to run on a linux server?

i would like to know if there are any solution to do this. Does anyone? The big picture: I want to access data over the web, using my delphi thin clients. But i´would like to keep my server/service ...

How can I use exit codes to run shell scripts sequentially?

Since cruise control is full of bugs that have wasted my entire week, I have decided the existing shell scripts I have are simpler and thus better. Here is what I have so far svn update /var/www/...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

热门标签