爬行机器人的平稳伺服运动


11

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

我的解决方案是创建时间的三次方函数,以描述伺服器的路径,然后以较小的时间增量设置其位置,从而实现更平滑的运动。基本上,我所做的就是使用时间间隔,伺服的开始和结束位置以及伺服应该移动的开始和结束速率(只是位置的导数)来求解三次方程式中的系数:ai

解决,,和:a0a1a2a3

position(t)=a0+a1t+a2t2+a3t3
rate(t)=position(t)=a1+2a2t+3a3t2

给定:,,,position(0)position(tf)rate(0)rate(tf)

如果将两个运动之间的方向相反,则将一对运动之间的伺服速率设置为零;如果将两个运动都分别沿正方向或负方向设置,则将正速或负速分别设置为正或负。

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

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

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


该代码应该是相对简单的。您能谈谈为什么会涉及吗?
DaemonMaker

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

NURBS(非均匀有理B样条)可能会完成这项工作
James Waldby-jwpat7

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

就像降低系数一样简单吗?Kp
2013年

Answers:


6

运动轮廓生成

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

设定点预过滤

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


+1:绝对是运动轮廓生成。
盖·西顿

2

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.