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