これに何か問題はありますか?
これの主な問題は、提案されたソリューションがモーターの性能間の不一致を即座に修正する一方で、累積誤差は修正せず、アッベ誤差などのより複雑な位置の誤差は修正しないことです(後述)。
より良いアプローチは何ですか?
エラーに対する許容範囲と、エラーの修正にどれだけの労力を費やすかによって、できることはいくつかあります。
最初のステップは、各ホイールに1つずつ、PIDループのペアを設定して、両方に同じ需要位置を与えることです。同様の質問への回答で提案したように、両方のホイールを要求する場所の非常に厳しいエラーの範囲内に保つと、顕著な変動を引き起こすのに十分なエラーを蓄積するのに時間がかかります。
また、単一の複雑な相互依存複合システムを調整するよりも、2つの名目上独立したモーターレベルのPIDループを調整する方がはるかに簡単です。より高いレベルの制御の動作の変化に耐えるためには、各モーターを可能な限り他のモーターと可能な限り同じように動作させる必要があり、それには実際に個別のサーボループが必要です。
しかし、さらに多くの複雑な問題があります。それは、どの精度が必要か、どの解決策を採用するかを修正するためにどれだけの努力をするかによって異なります。これは、ということも推測航法が十分であるか、あなたはあなたのロボットに相対または絶対位置決意を追加する必要があります。
1つの問題は、左右のホイールが両方とも1000エンコーダカウント移動した場合でも、2つの異なる走行で異なる位置にとどまる可能性があることです。
たとえば、10個のエンコーダカウントの最大追従エラーがあり、モーターがPIDループの反復ごとに10個のエンコーダカウントの速度で動作しているとします。左のモーターは5,10,10,10 ... 10,5動きますが、右のモーターは4,11,10,10 ... 10,5のプロファイルを持ち、開始時の加速度のわずかな違いさえあります移動の動きにより、ロボットがわずかに間違った方向に出発する可能性があります。それだけでなく、その方向に進むほど、誤差は絶対的に大きくなります。これは、アッベ誤差について話しているときに話していることであり、複雑な運動学的モデルまたは何らかの外部参照がなければ、それを修正することはできません。
詳細については、似ているがまったく重複していない質問に対する私の答えを参照してください。 Arduino PIDライブラリを使用してロボットを直線で駆動するにはどうすればよいですか?
また、関連するラインフォロワーの最適化に対する私の答え