不久前,我做了一个小型履带机器人,它的两条腿各有两个自由度,所以总共有4个RC伺服器。在对腿部的运动进行编程时,我注意到它们的运动相当僵硬。 RC伺服器的内部控制器对位置命令有非常快速的响应是很有意义的,但是我希望我的履带以一种看起来更平滑和逼真的方式移动。

我的解决方案它创建了描述伺服器路径的时间的三次方函数,然后以较小的时间增量设置其位置,从而使运动更加平稳。基本上,我所做的就是使用时间间隔,伺服的开始和结束位置以及伺服应该移动的开始和结束速率(这只是位置的导数)来求解三次方程中的$ a_i $系数: br />
解决$ a_0 $,$ a_1 $,$ a_2 $和$ a_3 $:

$$ position(t)= a_0 + a_1t + a_2t ^ 2 + a_3t ^ 3 $$
$$ rate(t)= position'(t)= a_1 + 2a_2t + 3a_3t ^ 2 $$

给出:$ position(0)$,$ position( t_f)$,$ rate(0)$,$ rate(t_f)$

如果运动方向相反,我将一对运动之间的伺服速度设为零如果运动分别为正向或负向,则为负。

这工作得很好,但是此解决方案在某些方面受到限制。首先,很难确定在同一方向上运动之间的确切比率。我使用了两次运动之间特定位置前后的平均坡度,但我尚不清楚最佳状态。第二,三次曲线可能会将伺服器带到运动开始和结束位置之外的位置,这可能是不希望的。例如,在该时间间隔内的某个时刻,该曲线可能会导致伺服器超出第二位置或低于第一位置。第三,此处的曲线生成未考虑伺服器可以旋转的最大速率,因此曲线可能会使伺服器以不切实际的速度运动。因此,最不重要的是最大转动速度取决于伺服器内部控制器的响应,并且可能会根据位置间隔的大小而变化。

忽略最后一个问题,可以通过增加多项式的阶数并添加约束条件来解决系数来解决这些问题,但是我现在开始怀疑...

有没有比这更好的方法来使伺服运动平稳并看起来更逼真?

评论

该代码应该是相对简单的。您能否进一步谈谈它为何参与其中?

没错,代码虽然相当简单,但是控制伺服系统的方法比以前复杂得多。我已经对问题进行了编辑,以包含对此方法的局限性的描述。

NURBS(非均匀有理B样条)可能会完成此任务

@ jwpat7感谢您的输入,但我认为NURBS无法正常工作,因为不能保证这些曲线能达到所提供的要点

就像降低$ K_p $系数一样简单吗?

#1 楼

运动配置文件生成

过去,我使用运动配置文件生成器来解决此问题。要使用它,您需要与电动机关联的所需目标位置(设定点),最大速度和加速度值。它通过对梯形速度曲线进行积分以获得平滑的位置轮廓来工作。如果必须使运动更加平滑,则可以使用S曲线。
参考说明运动轮廓的文章。

设定点预滤波

在运动分析路径中,您可以尝试对命令进行低通滤波。这种类型的设定点过滤将减慢您的响应速度,但也会使其平滑并易于实现。必须选择截止频率,以便它支持系统的带宽(这样就不会滤除所需的运动)。
用C语言实现简单的低通滤波器

评论


$ \ begingroup $
+1:绝对是运动轮廓生成。
$ \ endgroup $
– Guy Sirton
13年8月1日下午5:35

#2 楼

我认为问题是针对此类设备的:RC伺服器

通常性能不高,因此它们将无法很好地跟踪生成的运动曲线。大多数商用电机控制系统使用S曲线进行点到点移动(请参阅@ddevaz的答案),该曲线进行分段配置,其中每个段使用不同的方程式。您的问题将是,为了使电动机跟踪生成的配置文件,您可能会有一个非常“缓慢”的配置文件。否则,您尝试命令设备遵循的配置文件将出现较大的位置误差,而不是设备的实际位置。

理想情况下,您需要一些反馈,您可以在查看时您正在执行动作,因此可以查看设备对命令的跟踪情况。从更实际的角度来看,如果想要明显更好的运动,则可能需要不同的电机和不同的电机控制。