PIDを使用して差動ロボットを直進させる方法


13

フィードバック用にそれぞれにエンコーダーが取り付けられた2つのモーター付きホイールを備えた差動駆動ロボットを考えます。各DCモーターには、-1から1までのフロートを取り、そのモーターに比例した量の電力を供給するためにPWM信号を設定する機能があると仮定します。残念ながら、すべてのモーターが同じように作成されるわけではないため、各モーターに同じPWM信号を送信すると、ロボットは左右に向きを変えます。私は、各モーターに接続されたエンコーダーをPIDループへの入力として使用して、ロボットをまっすぐに駆動する方法を考えています。

方法は次のとおりです。左右のエンコーダーの差を取得し、ある範囲の誤差を制限し、[-1、1]から正規化して、モーターパワー0〜1にマッピングします。したがって、IとDがゼロで、エラーが1になった場合(左のモーターが右のモーターよりもはるかに多く回転した)、左のモーターは0に設定され、右のモーターは1に設定されます左)。

これに何か問題はありますか?より良いアプローチは何ですか?

回答:


5

これに何か問題はありますか?

これの主な問題は、提案されたソリューションがモーターの性能間の不一致を即座に修正する一方で、累積誤差は修正せず、アッベ誤差などのより複雑な位置の誤差は修正しないことです(後述)。

より良いアプローチは何ですか?

エラーに対する許容範囲と、エラーの修正にどれだけの労力を費やすかによって、できることはいくつかあります。

最初のステップは、各ホイールに1つずつ、PIDループのペアを設定して、両方に同じ需要位置を与えることです。同様の質問への回答で提案したように、両方のホイールを要求する場所の非常に厳しいエラーの範囲内に保つと、顕著な変動を引き起こすのに十分なエラーを蓄積するのに時間がかかります。

また、単一の複雑な相互依存複合システムを調整するよりも、2つの名目上独立したモーターレベルのPIDループを調整する方がはるかに簡単です。より高いレベルの制御の動作の変化に耐えるためには、各モーターを可能な限り他のモーターと可能な限り同じように動作させる必要があり、それには実際に個別のサーボループが必要です。

しかし、さらに多くの複雑な問題があります。それは、どの精度が必要か、どの解決策を採用するかを修正するためにどれだけの努力をするかによって異なります。これは、ということも推測航法が十分であるか、あなたはあなたのロボットに相対または絶対位置決意を追加する必要があります。

1つの問題は、左右のホイールが両方とも1000エンコーダカウント移動した場合でも、2つの異なる走行で異なる位置にとどまる可能性があることです。

たとえば、10個のエンコーダカウントの最大追従エラーがあり、モーターがPIDループの反復ごとに10個のエンコーダカウントの速度で動作しているとします。左のモーターは5,10,10,10 ... 10,5動きますが、右のモーターは4,11,10,10 ... 10,5のプロファイルを持ち、開始時の加速度のわずかな違いさえあります移動の動きにより、ロボットがわずかに間違った方向に出発する可能性があります。それだけでなく、その方向に進むほど、誤差は絶対的に大きくなります。これは、アッベ誤差について話しているときに話していることであり、複雑な運動学的モデルまたは何らかの外部参照がなければ、それを修正することはできません。

詳細については、似ているがまったく重複していない質問に対する私の答えを参照しください。 Arduino PIDライブラリを使用してロボットを直線で駆動するにはどうすればよいですか? また関連するラインフォロワーの最適化に対する私の答え


2

私は、独立して駆動される2つの車輪を持つボットを持っています。

ジャイロを使用して目的の方向を維持することを選択しました。滑りをぶつけ、拾い上げて向きを変えるだけでも、方向を修正するだけなので、ほとんど意味がありません。

1つのPIDを使用します。このPIDは、ジャイロによって決定される現在の方向(方向)の誤差に応じて、2つのモーターのそれぞれの所望の現在の速度に補正を加算/減算します。

たとえば、速度を50%に、方位を20度に設定します。これは通常、両方のモーターを50%の電力で駆動します。しかし、見出しがふらつくと、PIDは調整を行い、1つのモーターにいくらかの電力を追加し、もう1つのモーターからいくらかの電力を削除します。

ジャイロには問題がありますが、キャリブレーションに多少の時間を費やしましたが、私のgryoには1分あたり約1度のドリフトが見られます。これは、地球が1時間に15度回転するためである可能性がありますが、これも長期的に考慮する必要があります。

前述のように、車輪のエンコーダーは、実際にあなたがどこまで移動したかを知るための素晴らしいアイデアです。


このためのコードを見たいです。私はジャイロ/加速度計/磁力計で同じ道を歩んでいますが、まだこれらのセンサーからの読み取り値を理解しようとする非常に早い段階にいます。
ロン・スミス

ここに私のコードへのリンクがあります、私はそれが理解するのが簡単でないかもしれないと思います。github.com/rlsutton1/piBot/blob/master/src/main/java/au/com/...
ロバート・サットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.