クローリングロボットのスムーズなサーボ動作


11

少し前に、それぞれ2自由度の2本の脚を持つ小型のクローラーロボットを作成したので、合計4つのRCサーボができました。脚の動きをプログラミングしているときに、脚の動きがかなり硬いことに気づきました。RCサーボの内部コントローラーが位置コマンドに対して非常に迅速に応答することは理にかなっていますが、クローラーをもう少しスムーズでリアルな動きにしたかったのです。

私の解決策は、サーボのパスを表す時間の3次関数を作成し、それらの位置を小さな時間増分で設定して、よりスムーズなモーションを実現することでした。基本的に私が行ったのは、時間間隔、サーボの開始位置と終了位置、およびサーボが移動する開始レートと終了レート(位置の微分)を使用して、3次方程式の係数を解くことです。ai

a 1a 2、およびa 3を解く:a0a1a2a3

r a t e t = p o s i t i o n t = a 1 + 2 a 2 t + 3 a 3 t

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

与えられた:p o s i t i o n t fr a t e 0 r a t e t fposition(0)position(tf)rate(0)rate(tf)

一対の動きの間のサーボの速度を、動きが反対方向である場合はゼロに、動きが両方とも正または負方向である場合はそれぞれ正または負に設定しました。

これはかなりうまくいきましたが、このソリューションにはいくつかの制限があります。1つには、同じ方向に進む動作間の速度を正確に判断するのは難しいことです。動きの間の特定の位置の前後の勾配の平均を使用しましたが、それが最適かどうかはわかりません。第二に、三次曲線はサーボを動きの最初と最後の位置の範囲外の位置に移動させる可能性があり、これは望ましくない場合があります。たとえば、時間間隔のある時点で、カーブが原因でサーボが2番目の位置を超えるか、最初の位置より下になることがあります。第3に、ここでの曲線の生成では、サーボが回転できる最大速度は考慮されないため、曲線がサーボを非現実的な速度で移動させる可能性があります。それと、

その最後の懸念を無視して、これらの問題は、多項式の次数を増やし、係数を解決するための制約を追加することで解決できるかもしれませんが、今は疑問に思い始めています...

これよりもサーボの動きをスムーズにしてよりリアルに見える良い方法はありますか?


コードは比較的単純である必要があります。なぜそれが関係していたのか、もっと話してもらえますか?
DaemonMaker 2013

1
そのとおりです。コードはかなり単純明快ですが、サーボを制御するための結果の方法は以前よりも複雑でした。代わりに、質問を編集して、この方法の制限の説明を含めました。
Robz 2013

NURBS、非均一な有理Bスプラインが
効果を発揮

@ jwpat7あなたの入力に感謝しますが、それらの曲線が提供されたポイントにヒットすることが保証されていないため、NURBSは機能しないと思います
Robz

Kp

回答:


6

モーションプロファイルの生成

以前は、この問題を解決するためにモーションプロファイルジェネレータを使用していました。これを使用するには、モーターに関連付けられた目的の目標位置(設定点)、最大速度、および加速度の値が必要です。これは、滑らかな位置プロファイルを得るために、台形の速度曲線を統合することで機能します。Sカーブは、モーションをさらに滑らかにする必要がある場合に使用できます。 モーションプロファイリングを説明する記事への参照

セットポイントの事前フィルタリング

モーションプロファイリングルートとは別に、コマンドをサーボにローパスフィルタリングするだけです。このタイプのセットポイントフィルタリングは応答を遅くしますが、それをスムーズにし、実装も簡単です。カットオフ周波数は、システムの帯域幅をサポートするように選択する必要があります(目的のモーションがフィルターで除去されないようにするため)。 Cでの単純なローパスフィルターの実装


+1:確かにモーションプロファイルの生成。
ガイサートン2013

2

質問はこの種のデバイスに関するものだと思います:RCサーボ

これらは通常、それほど高性能ではないため、生成されたモーションプロファイルを十分に追跡することはできません。ほとんどの商用モーター制御システムは、各セグメントが異なる方程式を使用する区分的プロファイルを行うポイントツーポイント移動(@ddevazの回答を参照)にSカーブを使用します。あなたの問題は、あなたのモーターが生成されたプロファイルを追跡するために、おそらく非常に「遅い」プロファイルを持つことになるでしょう。そうしないと、デバイスが従うように命じ、コマンドを実行するプロファイルは、デバイスの実際の位置と比較して大きな位置誤差を生じます。

理想的には、モーションの実行中に確認できるある種のフィードバックが必要になるため、デバイスがコマンドをどの程度追跡しているかを確認できます。より実用的な観点から、大幅に良いモーションが必要な場合は、さまざまなモーターとさまざまなモーター制御が必要になることがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.