タグ付けされた質問 「pid」


4
Arduino PIDライブラリを使用して、ロボットを直線で駆動するにはどうすればよいですか?
2つの車輪、各車輪の直交エンコーダ、Hブリッジドライバーチップ(またはモーターコントローラー)、キャスターを備えたArduinoベースのロボットを作成したいと思います。PIDライブラリを使用して、速度が移動距離に比例するようにします。 概念レベルで(モーターがPWMレベルと同じように応答しないと仮定して)、PID制御を実装して、直線で移動する距離に比例する速度で移動するようにするにはどうすればよいですか?
19 arduino  pid  driver  encoding 

3
PIDパラメータをその場で自動的に調整するにはどうすればよいですか?
MCUに実装されたPIDコントローラーを使用してフィードバックを実行する簡単なサーボシステムがあります。ただし、システムのプロパティは動的に変更されるため、すべての状況でPIDパラメーターを調整することはできません。 私のロボットは、これに似た逆駆動可能な電動モーターを備えた軽量アームです。 アームは、重いものを持ち上げたり、机の上で物を押したり引いたりするなど、いくつかのタスクを実行します。これらの各タスクには、簡単に予測できないさまざまなPID調整パラメーターが必要です。 私が本当に欲しいのは、腕の動作に応じてパラメータを慎重に調整できる、より高いレベルの機能です。たとえば、腕が振動していることに気付いた場合、Pを減らしてDを増やすことができます。または、腕が目標に到達していないことに気付いた場合、Iを増やすことができます。 そのようなアルゴリズムは存在しますか?アルゴリズムがすぐにパラメーターを完成しなかったとしても、私は幸せです。例えば、パラメーターが新しい値に調整される前に、腕が数回振動する可能性がありました。

3
PIV制御はどのように実行されますか?
PID制御の代わりにPIV制御の実験を検討しています。PIDとは異なり、PIV制御では、インターネットや文献に関する説明はほとんどありません。この方法を説明する情報源はほぼ1つあります。これは、Parker Motionによる技術論文です。 (ラプラスドメインにある)制御方法図から理解できることは、制御出力は次の合計に要約されるということです。 Kpp *(位置誤差の積分) -Kiv *(測定された速度の積分) -Kpv *(測定速度) 私は正しいですか?ありがとうございました。

2
PIDを使用して差動ロボットを直進させる方法
フィードバック用にそれぞれにエンコーダーが取り付けられた2つのモーター付きホイールを備えた差動駆動ロボットを考えます。各DCモーターには、-1から1までのフロートを取り、そのモーターに比例した量の電力を供給するためにPWM信号を設定する機能があると仮定します。残念ながら、すべてのモーターが同じように作成されるわけではないため、各モーターに同じPWM信号を送信すると、ロボットは左右に向きを変えます。私は、各モーターに接続されたエンコーダーをPIDループへの入力として使用して、ロボットをまっすぐに駆動する方法を考えています。 方法は次のとおりです。左右のエンコーダーの差を取得し、ある範囲の誤差を制限し、[-1、1]から正規化して、モーターパワー0〜1にマッピングします。したがって、IとDがゼロで、エラーが1になった場合(左のモーターが右のモーターよりもはるかに多く回転した)、左のモーターは0に設定され、右のモーターは1に設定されます左)。 これに何か問題はありますか?より良いアプローチは何ですか?

3
クアッドコプターPIDチューニング
私がここで尋ねた質問の続きで:自律モードでの単純な離陸を伴うクアッドコプターの不安定性 ... (3DRoboticsのフレームを使用しています) 制御システム全体を2つのPIDブロックにまとめました。1つはロールを制御し、もう1つはピッチを制御します(ヨーとその他すべて...後で考えます)。 このセットアップは、自由に回転するビームで構成されるリグでテストしています。クアッドローターの2本のアームを縛りました。他の2つは自由に移動できます。そのため、実際には一度に1つの自由度(ロールまたはピッチ)をテストしています。 以下の画像を確認してください。ここで、A、Bは、セットアップが取り付けられている自由に回転するビームを示しています。 PおよびDパラメーターを慎重に調整することで、約30秒の持続的な飛行を達成することができました。 しかし、「持続」とは、ドローンが片側に倒れないテストを意味します。安定した飛行はまだ見えないところではなく、30秒以上の飛行も非常に困難に見えます。最初からぐらつきます。20〜25秒になると、片側に傾き始めます。30秒以内に、許容範囲を超えて片側に傾きました。すぐに、私はそれが逆さまに休むのを見つけます PIDコード自体に関しては、ジャイロ+加速度計データの「相補フィルター」から比例誤差を計算しています。積分項はゼロに設定されます。P項は約0.39になり、D項は0.0012になります。(私はArduino PIDライブラリを意図的に使用していません。ここに実装された自分のPIDの1つを取得したいだけです。 動作を確認したい場合は、このビデオを確認してください。 http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [はい、セットアップはかなり古いです!同意する。:)] この段階で安定性を改善するために何ができるか教えてください。 @Ian:セットアップで行った多くのテストのうち、シリアルモニターからの読み取り値を使用して、いくつかのテストのグラフをプロットしました。以下に、Roll vs 'Motor1&Motor2-PWM input'(ロールを制御する2つのモーター)のサンプル読み取り値を示します。 入力/出力に関して: 入力:加速度計+ジャイロの組み合わせによって取得されるロールとピッチの値(度単位) 出力:サーボライブラリのmotor.write()関数を使用して配信される、モーターのPWM値 解決 問題を解決しました。方法は次のとおりです。 問題の核心は、Arduinoプログラムの実装方法にありました。write()関数を使用してサーボ角度を更新していましたが、これは引数で整数ステップのみを受け入れます(または整数入力にのみ応答し、100と100.2は同じ結果を生成します)。私はそれをwriteMicroseconds()に変更したので、ヘリコプターはかなり安定したものになりました。 私は一方のモーターのRPMを加算し、もう一方のモーターを安定した値に保ちました。これを変更して、1つのモーターのRPMを増やし、反対側のモーターを減らしました。そのようなことで、水平方向の推力は変わらずに維持されます。これは、このことを垂直高度に保持しようとしているときに役立つかもしれません。 RPMを最大限界まで押し上げていたため、クアッドコプターはフルスロットルで制御を失い続けました。RPMが傾斜を感知したときにRPMが増加する余地はありませんでした。 私は、モーターの1つが他のモーターよりも本質的に弱いことを観察しました。理由はわかりません。そのモーターのPWM入力にオフセットをハードコーディングしました。 すべてのサポートに感謝します。 ソースコード: 興味のある方は、ここに私の必要最低限​​のPID実装のソースコードを示します。PIDソースコード ハードウェアで自由にテストしてください。プロジェクトへの貢献は大歓迎です。

3
PIDコントローラーの不可欠な部分がわかりません
PIDコントローラーの不可欠な部分を理解できません。Wikipediaのこの擬似コードを想定してみましょう。 previous_error = 0 integral = 0 start: error = setpoint - measured_value integral = integral + error*dt derivative = (error - previous_error)/dt output = Kp*error + Ki*integral + Kd*derivative previous_error = error wait(dt) goto start 積分は最初はゼロに設定されています。そしてループ内で、時間の経過とともにエラーを統合します。セットポイントに(正の)変更を加えると、エラーは正になり、積分は時間の経過とともに(最初から)値を「食べる」ことになります。しかし、私が理解していないことは、エラーがゼロに戻って安定したとき、積分部分はまだいくつかの値(時間の経過とともに統合されたエラー)を持ち、コントローラーの出力値に貢献しますが、そうではありません、エラーがゼロの場合、 PIDの出力もゼロになるはずですよね? 誰かがそれを説明してもらえますか?
12 control  pid 


1
重複する効果を持つ複数の制御ループ
1つの出力と1つのエラー信号があり、出力が必要な設定値をどれだけ適切に達成しているかについて、PIDを使用して閉ループ制御を実行することに慣れています。 ただし、複数の制御ループがあり、それぞれに1つの出力と1つのエラー信号がありますが、ループは完全に独立しているわけではありません。特に、1つのループがアクチュエータ信号を増加させると、システム内の他のループからの出力の影響が変化します。 具体的な例として、6つの調整可能な抵抗器が並列に接続されたシステム全体に電圧を印加して、抵抗器と直列の電圧源を想像してください。各抵抗を流れる電流を測定することができ、抵抗を調整することによって各抵抗の電流を個別に制御したいと考えています。もちろん、ここでの秘訣は、1つの抵抗の抵抗を調整すると、並列セットの全体的な抵抗が変化することです。つまり、電圧源の抵抗を持つ分圧器による電圧降下が変化し、他の抵抗を流れる電流が変化します。 。 これで、明らかにこのシステムの理想的なモデルがあるため、一連の線形方程式を解くことにより、すべての抵抗器に同時に使用する必要がある抵抗を予測できます。ただし、閉ループ制御の要点は、理想的なモデルから逸脱した、システム内のさまざまな未知のエラー/バイアスを修正したいということです。質問:この種のクロスカップリングを備えたモデルがある場合、閉ループ制御を実装する良い方法は何ですか?
9 control  pid 

1
高度推定に加速度計をどのように使用できますか?
私は現在、最近飛行して安定した自律型クワッドコプターを実装していますが、大きな外乱が存在する場合は自動補正できません。これは、飛行中にさらに調整する必要があるPIDゲインの調整が不十分なためだと思います。 現在の進行度合: 私の研究の範囲は屋内飛行のみであり、同僚によると気圧計の偏差は+ -5メートルであるため、気圧計を除外しました。 私は現在、高度推定に超音波センサー(HC-SR04)を使用しています。これは0.3cmの解像度を持っています。しかし、超音波センサーのリフレッシュレート20Hzは遅すぎて、高度補正に十分な速度で応答できないことがわかりました。 カスケードpidコントローラースキームで速度PIDに使用する速度を取得するために加速度を統合することにより、加速度計からZ軸の加速度を使用して高さデータを取得しようとしました。高度PIDコントローラーの現在の実装は、超音波センサーからの位置入力でPコントローラーを使用するシングルループpidコントローラーです。 重力による負の加速度測定値を考慮に入れていましたが、オフセットをどれだけ計算しても、負の加速度(たとえば-0.0034)が存在します。クワッドコプターを平らな面に置いたまま重力オフセットを計算し、加速度計のz軸から20,000個のサンプルを収集して平均化して、定数変数として保存されている「オフセット」を取得しました。次に、この変数が加速度計のZ軸出力から差し引かれ、オフセットが削除され、加速していない場合は「ゼロ」になります。質問で述べたように、負の加速度(例:-0.0034)がまだ存在しています。次に、私のクワッドは、常に高度を上昇させます。超音波センサーPコントローラーのみで、クワッドが50 cm振動します。 この一貫した負の加速度測定値をどのように効果的に処理できますか? 考えられる解決策:加速度計を使用して内部ループ(PIDコントローラー)とソナーセンサーを使用して外部ループ(Pコントローラー)で高度ホールドのカスケードPIDコントローラーを実行することを計画しています。私の顧問は、クワッドコプターが高度の遅いセンサーでも高度を保持できるようにするには、シングルループのPコントローラーで十分だと述べました。これで十分ですか?Pゲインだけでは、クワッドコプターが高度をオーバーシュートすることに気づきました。 Leaky Integrator:私はこの記事を見つけて、彼がLeaky integratorを使用して負の加速をどのように処理したかを説明しましたが、負のエラーが正のエラーになって問題を解決しないと思うので、なぜそれが機能するのか少し理解できません。私はあまりよく分からない。http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it 超音波センサーのみのシングルループPDコントローラー:これは遅いセンサーからのフィードバックを使用して実現可能ですか? 出典: LSM303DLHCデータシート:http ://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf 漏れやすいインテグレーター:http : //diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it ArduPilot PIDループ:http ://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg

4
四元数を使用してPIDクワッドコプター安定化ループに供給する方法は?
クワッドコプターを作っています。PIDループを設定して、特定のオイラー角(ピッチとロール)で安定させます。ロールが90度(45度以上)に近づくと、問題が発生します。ジンバルロックに近づくと、値は意味をなさなくなります。45度の回転制限を超える、ループなどの複雑な操作を行うつもりです。 クォータニオンを使用してこの問題を解決するにはどうすればよいですか?(MPU-9150から四元数を取得します。)四元数の問題について多くの記事を読みましたが、それらはすべて3Dソフトウェアでの回転、および2つの回転ポイント間のトゥイーンについて話しています。私は虚数と行列を知らないので、これはほとんど意味がありません。

2
ラインフォロワー最適化
私はラインフォロワーロボットの構築に取り組んでおり、そのパフォーマンスを最適化したいと考えています。PIDアルゴリズムを使用するよう提案されました。私はPIDについてたくさん読みましたが、以下について少し混乱しています: を使用してerror_valueを計算しました が、モーター速度の変化に関して、差(つまり、現在の位置-セットポイント)またはエラー値の比較中に何を使用するかについて混乱しています。それは私が使うべきですkp∗ p r o p o r t i o n a l + 。。。kp∗proport私oんal+。。。k_p * proportional + ... if (difference > 0) { //code for changing appropriate motor's speed using error_value } または if (error_value > 0) { //code for changing appropriate motor's speed using error_value } ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.