少し前に、それぞれ2自由度の2本の脚を持つ小型のクローラーロボットを作成したので、合計4つのRCサーボができました。脚の動きをプログラミングしているときに、脚の動きがかなり硬いことに気づきました。RCサーボの内部コントローラーが位置コマンドに対して非常に迅速に応答することは理にかなっていますが、クローラーをもう少しスムーズでリアルな動きにしたかったのです。
私の解決策は、サーボのパスを表す時間の3次関数を作成し、それらの位置を小さな時間増分で設定して、よりスムーズなモーションを実現することでした。基本的に私が行ったのは、時間間隔、サーボの開始位置と終了位置、およびサーボが移動する開始レートと終了レート(位置の微分)を使用して、3次方程式の係数を解くことです。
、a 1、a 2、およびa 3を解く:
r a t e (t )= p o s i t i o n ′(t )= a 1 + 2 a 2 t + 3 a 3 t
与えられた:、p o s i t i o n (t f)、r a t e (0 )、r a t e (t f)
一対の動きの間のサーボの速度を、動きが反対方向である場合はゼロに、動きが両方とも正または負方向である場合はそれぞれ正または負に設定しました。
これはかなりうまくいきましたが、このソリューションにはいくつかの制限があります。1つには、同じ方向に進む動作間の速度を正確に判断するのは難しいことです。動きの間の特定の位置の前後の勾配の平均を使用しましたが、それが最適かどうかはわかりません。第二に、三次曲線はサーボを動きの最初と最後の位置の範囲外の位置に移動させる可能性があり、これは望ましくない場合があります。たとえば、時間間隔のある時点で、カーブが原因でサーボが2番目の位置を超えるか、最初の位置より下になることがあります。第3に、ここでの曲線の生成では、サーボが回転できる最大速度は考慮されないため、曲線がサーボを非現実的な速度で移動させる可能性があります。それと、
その最後の懸念を無視して、これらの問題は、多項式の次数を増やし、係数を解決するための制約を追加することで解決できるかもしれませんが、今は疑問に思い始めています...
これよりもサーボの動きをスムーズにしてよりリアルに見える良い方法はありますか?