memomem

備忘録・メモ置き場

PID制御

温度制御をはじめとした各種制御に用いられる一般的な制御方式としてPID制御があります。

今回は、このPID制御の各要素、P(比例制御),I(積分制御),D(微分制御)について、それぞれどのような働きをするものなのかを、比較的なじみの深い「車の運転」を例に説明したいと思います。

高速道路の料金所で一旦停止したところから、時速 80Km/h で巡航運転するまでの操作を考えてみてください。 まず、速度 0Km/h から目標とする時速 80Km/h までの差(制御では偏差と表現する)が大きいため、アクセルを大きく踏み込みます。(大きな出力を加える)

このように、目標との差(偏差)の大きさに比例した操作を行うことが比例制御(P)に相当します

車が加速して時速 80Km/h に近づいてくると、「このままの加速では時速 80Km/h をオーバーしてしまう」と感じてアクセルを緩める操作を行います。

このように、速度の変化に対して、それを抑える様な操作を行うことが微分制御(D)に相当します

最後に、時速 80Km/h ピッタリで走行するため、微妙な速度差をなくすようにアクセルを調整します。

このように、目標とする速度との差(偏差)をなくすような操作を行うことが積分制御(I)に相当します

qiita.com

https://botalab.tech/unity_control_position_and_rotation_with_pid/botalab.tech

www.rkcinst.co.jp

vazgriz.com

digitalopus.ca

Unity PID controller for position and rotation · GitHub

from ChatGPT

UnityでPID制御を使用して姿勢を制御する方法は以下の手順で行います:

必要なコンポーネントの追加: 制御対象となるオブジェクトにRigidbodyコンポーネントを追加します。また、制御を行うスクリプトをアタッチするための空のGameObjectを作成します。

制御用スクリプトの作成: 制御を行うスクリプトを作成します。このスクリプトは空のGameObjectにアタッチされます。スクリプト内で、PID制御アルゴリズムを実装します。

制御目標の設定: 制御対象の姿勢を制御したい目標値を設定します。目標値はQuaternionで表されることが一般的です。

PID制御のパラメータの設定: PID制御には、比例ゲイン (Proportional Gain)、積分ゲイン (Integral Gain)、微分ゲイン (Derivative Gain) の3つのパラメータが必要です。これらの値を調整して制御性能を調整します。

制御ループの実装: FixedUpdate() メソッド内で制御ループを実装します。制御ループでは、現在の姿勢と目標値の差分を計算し、PID制御アルゴリズムを適用して制御入力を求めます。

制御入力の適用: 制御入力をRigidbodyの力やトルクとして適用します。制御入力はAddForce() や AddTorque() メソッドを使用してオブジェクトに加えます。

以上の手順に従ってUnityでPID制御を使用して姿勢を制御することができます。