Main Content

ロボット アームのマルチループ PI 制御

この例で,looptune6-DOFロボットロボットロボットアームマニピュレーターコントローラーをする方法を说明します。。

ロボットアームモデルコントローラー

6自由にに示す示す示す示す示す自由のロボットアームを使用しします。このこのアームアームははは,,,ベースベースベースベースベースからからから先端先端先端先端へへへへへへへととととととととととととととととラベルラベルラベルラベルラベルラベルラベルラベル付け付け付け付け付け付け付け付け付け付けさささささささされれされれれれたたたたたたたたたたたたたたたたたジョイントたたつのつのたたたたたはははははははははははははははははははははははははは,“手”抓手“抓手”でで构成ますます。。つつつつつのののモーターモーターモーター并行ししててて使用使用するするするするするするするするするするするするするするジョイントジョイントジョイントジョイントジョイントジョイントを除いて

図1:ロボットアームマニピュレーター。

ファイル "cst_robotarm.slx" には、このシステムの電気系と機械系のコンポーネントの Simulink モデルが含まれています。

図 2: ロボット アームの Simulink モデル。

"Controller" サブシステムは 6 つ (ジョイントごとに 1 つ) のデジタル PI コントローラーで構成されます。各 PI コントローラーは、Simulink ライブラリの "2-DOF PID Controller" ブロックを使用して実装されます (理由については、「設定点の追従と外乱の抑制の PID 調整」ts = 0.1(10 Hz)です

図3:コントローラーの构造。

pid,マルチループマルチループコントローラーコントローラー,,ループループループループループループループループつずつ,,全体のの动作动作动作が満足できる状态にになるなるまでまでループを周期的的にに缲り返すことでかかることますまた必ずしもがにされれた状态に收束するととはは限りませんんSystuneまたはlooptuneを使用し、応答時間や最小相互干渉といったシステム レベルの要件に従って、6 つすべての PI ループを一緒に調整することもできます。

この例で,各ジョイントでの滑らかな角運動により、アームを特定の構成に約 1 秒で移動させなければなりません。アームは、Bicep の 90 度の角度以外は、すべてのジョイントの角度がゼロである完全に伸ばされた垂直位置から動き始めます。最終的な構成は次の角度位置で指定されます。Turntable = 60 度、Bicep = 80 度、Forearm = 60 度、Wrist = 90 度、Hand = 90 度、Gripper = 60 度。

Simulink モデルの "再生" ボタンをクリックして、モデルに指定された PI ゲイン値の角度の軌跡をシミュレートします。最初に青いボタンをダブルクリックして、ロボット アームの 3D アニメーションを表示することもできます。以下に角度応答と 3D アニメーションを示します。応答が非常に遅く、不正確であることは明らかです。

図 4: 調整されていない応答。

プラントの线形化

ロボットのは线形です。アームををををアームセットセットセットゲインゲインゲインできるできるできるかどうどうどうかかかか把握把握するするするするににはは,,,目的目的目的のののの轨迹轨迹ににに(“プラント”は(pidブロックの)と信号(“ 6 Dof Robot Arm”ブロックブロック出力)のののをを示し示して。

Snapshottimes = 0:1:5;%植物是从PID输出到机器人臂输出的linios = [...linio('cst_robotarm/Controller/turntablePID',,,,1,'openinput'),,,,...linio('cst_robotarm/Controller/bicepPID',,,,1,'openinput'),,,,...linio('cst_robotarm/Controller/trearmpid',,,,1,'openinput'),,,,...linio('cst_robotarm/Controller/Wristpid',,,,1,'openinput'),,,,...linio('cst_robotarm/Controller/Handpid',,,,1,'openinput'),,,,...linio('cst_robotarm/Controller/GripperPID',,,,1,'openinput'),,,,...linio('CST_ROBOTARM/6 DOF机器人臂',,,,1,'输出');linopt = LinearizeOptions('SampleTime',,,,0);% seek continuous-time modelG = linearize('cst_robotarm',Linios,Snapshottimes,Linopt);尺寸(g)
6x1状态空间模型阵列。每个模型都有6个输出,6个输入和19个状态。

t = 0、1、2、3、4秒秒のたたt = 5秒秒秒秒のモデルモデルの间ギャップギャップギャップををプロットプロット

g5 = g(:,:,end);%t = 5G5.SamplingGrid = []; sigma(G5,G(:,:,2:5)-G5,{1e-3,1e3}), grid title(“沿轨迹线性动力学的变化”) 传奇('t = 5 s'的线性化,,,,'Absolute variation',,,,...'location',,,,'SouthWest'

低周波数と高周波数ではダイナミクスが大幅に変化しますが、その変化は 10 rad/s 付近で 10% 未満まで低下します。大まかに言うと、これが目的の制御帯域幅です。ターゲット ゲイン交差周波数付近の小さなプラント変化は、単一セットの PI ゲインでアームを制御することができ、ゲイン スケジューリングを使用する必要がないことを示しています。

looptuneを使用たたコントローラーの调整调整

looptuneを使用すると、6 つすべての PI ループを直接調整し、最小限のループ相互作用と適切な MIMO 安定余裕で目的の応答時間を実現することができます。PI ゲインを Simulink に書き戻すときに、コントローラーは連続時間で調整され、自動的に離散化されます。Sltunerインターフェイスをて,しブロックをし,やコントローラーの境界境界を特定特定。。。

% Linearize the plant at t=3stLinearize = 3;%创建Sltuner接口TunedBlocks = {'turntablePID',,,,'biceppid',,,,“前臂”,,,,...'腕带',,,,“手杆”,,,,“抓钉”};ST0 = slTuner('cst_robotarm',tunedblocks,tlinearize);%标记PID块作为植物输入的输出AddPoint(ST0,TunedBlocks)%标记关节角度作为植物输出addPoint(ST0,'6 DOF Robot Arm'%标记参考信号RefSignals = {...'ref Select/tREF',,,,...'ref Select/bREF',,,,...'ref select/freef',,,,...'ref Select/wREF',,,,...'ref select/href',,,,...'ref select/gref'};AddPoint(ST0,RefSignals)

最も简単使用方法で,,looptuneに必要な情報はターゲットの制御帯域幅のみであり、目的の応答時間の逆数の少なくとも 2 倍でなければなりません。ここでは、目的の応答時間が 1 秒であるため、ターゲットの帯域幅を 3 rad/s で試します (プラント ダイナミクスが少なくとも 10 rad/s 付近で変化することを忘れないでください)。

WC = 3;% target gain crossover frequency控件= tunedblocks;% actuator commands测量='6 DOF Robot Arm';%关节角度测量st1 = looptune(ST0,对照,测量,WC);
最终:峰值增益= 0.957,迭代= 10实现目标增益值目标Gain = 1。

1付近またはより最终,,,looptuneが要求た幅幅达成したを示してます。最初最初ののコントローラーコントローラーコントローラーとと调整コントローラーコントローラー关し关して,,,角度角度位置のの

t0 = getiotransfer(ST0,RefSignals,测量值);t1 = getiotransfer(ST1,RefSignals,测量值);opt = timeOptions;opt.iogrouping ='all';opt.Grid ='上';Stepplot(T0,'b--',,,,T1,'r',4,opt)传奇('最初的',,,,“调谐”,,,,'location',,,,'SouthEast'

y = 1ののたたたたたつつつジョイントジョイント応答応答を,,,,,y = 0 = 0の,,,,,のの付近整定整定さされれれ曲线曲线はは干干干干に改善てますが,オーバーシュートがあるためためためため応答応答応答安定するまでまで时间が

2自由度活用

2-DOF PI コントローラーには、フィードフォワード コンポーネントとフィードバック コンポーネントがあります。

図 5: 2 自由度 PID コントローラー。

既定では、looptuneはフィードバック调整だけで,ををををををををしししません。これをを确认确认するするにには$b$パラメーターがその初期値$b=1$に设定たでことを検证しますますますますますますたたたshowTunable(ST1))。ます。フィードフォワードアクション利用てオーバーオーバーするするにはは,,,明示的ななステップ追従追従要件による帯域帯域幅ターゲットターゲットターゲットを

tr = tuninggoal.StepTracking(RefSignals,测量,0.5);st2 = looptune(ST0,对照,测量,TR);
最终:峰值增益= 0.766,迭代= 13实现了目标增益值目标= 1。

2-DOF 調整によってオーバーシュートを除去し、Bicep の応答を改善します。

t2 = getiotransfer(ST2,RefSignals,测量值);Stepplot(T1,'r--',,,,T2,'G',4,opt)传奇('1-DOF tuning',,,,'2-DOF tuning',,,,'location',,,,'SouthEast'

调整コントローラーの検证

调整さ応答は満足できるものにに见えるためため,ためゲインゲイン调整调整されれた万博1manbetxたたたた値値値ををををををををををををををををををを

writeBlockValue (ST2)

図 6: 調整された角度応答。

bicep biTepジョイント形はシュートがです。さらにさらにすると,,そのそのその原因原因原因にににには次次のののののののつつつ2vに制限れます)。

図7:dcモーターへ入力(制御信号)。

次に、Wrist と Bicep 間の相互干渉効果をスケーリングすると、Bicep の応答に有意で持続的な影響を及ぼすため。これを確認するには、操作 (Bicep ジョイントに -10 度、Wrist ジョイントに 90 度) 時に発生する実际のステップ変化,このこのつのジョイントステップ応答をしし。。

H2 = T2([2 4],[2 4]) * diag([-10 90]);%按逐步幅度缩放H2.U = {'二头肌',,,,'Wrist'};h2.y = {'二头肌',,,,'Wrist'};步骤(H2,5),网格

設計の改良

bicepに対するに対するのの応答するは相互相互干渉の影响をを各ジョイントジョイントでででの最终最终的的的なな角変位変位変位変位小さく维持なりませ。これにはステップ追従要件件の相互干渉项渉项を基准角のの振幅振幅振幅。

JointDisp = [60 10 60 90 90 60];百分比命令的角位移TR.InputScaling = JointDisp;

アクチュエータの削减には基准信号制御信号のゲインを制限します。

ur = tuninggoal.gain(RefSignals,Controls,6);

これらのさ调整目标でコントローラー再调整します。

st3 = looptune(ST0,对照,测量,TR,UR);
Final: Peak gain = 1.14, Iterations = 205

wristと。と。。。。。。。。ととととととととのののの间间のの干渉が,ピーク値値およびおよび合计エネルギーのいずれにおいて

T2s = diag(1./JointDisp) * T2 * diag(JointDisp); T3s = diag(1./JointDisp) * getIOTransfer(ST3,RefSignals,Measurements) * diag(JointDisp); stepplot(T2s,'g--',T3S,'m',4,opt)传奇('Initial 2-DOF',,,,'Refined 2-DOF',,,,'location',,,,'SouthEast'

simulinkに万博1manbetx入れたたに入れに入れに入れ,検证します。。

writeBlockValue(ST3)

シミュレーション結果を図 8 に示します。Bicep の応答は、整定時間および滑らかな過渡に関して他のジョイントと同レベルになり、以前の設計と比べてアクチュエータの飽和が減っています。

図8:改良されたコントローラーを使用した角度位置と制御信号。

アームが目的の構成に従って迅速かつ正確に動くことを 3D アニメーションで確認できます。

図 9: 微調整された応答。

参考

|||

関連するトピック