问题可能看起来很模糊,因为很难在一行中描述问题所以就这样了.
我在Raspberry Pi上使用Debian运行PID调节器,这意味着每次计算PID输出时都会获得dt(循环执行之间的时间差).
基本上dt是这样计算的.
oldtime_ = time_;
clock_gettime(CLOCK_MONOTONIC, &time_);
Timer.dt = ((static_cast(time_.tv_sec) * 1000000000 + static_cast(time_.tv_nsec)) - (static_cast(oldtime_.tv_sec) * 1000000000 + static_cast(oldtime_.tv_nsec))) / 1000000000.0;
PID每秒更新大约400次并且它很好,但有时Linux决定花费更多的时间来采取行动.结果是大量的dt,比如,不是1/400 = 0.0025而是0.8,这是所需的320倍.
结果是PID的计算不正确.看起来像这样.
我很乐意回答如何将raspbian移动到更接近实时系统的位置.
编辑
谢谢,anaken78和任何帮助过的人.使用RR_FIFO计划工作完美,处理速度始终为380-400hz.