不久前,我做了一个小型履带机器人,它的两条腿各有两个自由度,所以总共有4个RC伺服器。在编写腿部运动的程序时,我注意到它们的动作相当僵硬。RC伺服器的内部控制器对位置命令有非常快速的响应是很有意义的,但是我希望我的履带以一种看起来更加平滑和逼真的方式运动。
我的解决方案是创建时间的三次方函数,以描述伺服器的路径,然后以较小的时间增量设置其位置,从而实现更平滑的运动。基本上,我所做的就是使用时间间隔,伺服的开始和结束位置以及伺服应该移动的开始和结束速率(只是位置的导数)来求解三次方程式中的系数:
解决,,和:
给定:,,,
如果将两个运动之间的方向相反,则将一对运动之间的伺服速率设置为零;如果将两个运动都分别沿正方向或负方向设置,则将正速或负速分别设置为正或负。
这工作得很好,但是此解决方案在某些方面受到限制。首先,很难确定在同一方向上运动之间的确切比率。我使用了两次运动之间特定位置前后的平均坡度,但我尚不清楚最佳状态。第二,三次曲线可能会将伺服器带到运动开始和结束位置之外的位置,这可能是不希望的。例如,在该时间间隔内的某个时刻,该曲线可能会导致伺服器超出第二位置或低于第一位置。第三,此处的曲线生成未考虑伺服器可以旋转的最大速率,因此曲线可能会使伺服器以不切实际的速度运动。接着就,随即,
忽略最后一个问题,可以通过增加多项式的阶数并添加约束来解决系数来解决这些问题,但是我现在开始怀疑...
有没有比这更好的方法来使伺服运动平稳并看起来更逼真?