みなさん,こんにちは
おかしょです.
ロボットを制御するためには離散化という作業が必ず必要になります.
離散化手法はさまざまありますが,ここでは最も簡単な1次近似で行う方法を解説します.
ここでは1次近似をして離散化をする方法のまとめをします.
この記事を読むと以下のようなことがわかる・できるようになります.
- 離散化をする方法
- 1次近似のやり方
- 1次近似をしたときの精度の比較
この記事を読む前に
この記事は以下の記事の続きとなっています.
離散化が何で必要なのか,なぜ近似しなければいけないのかなどわからない方は以下の記事を先に読んでおくことをおすすめします.
離散化を1次近似で行う方法
以前の記事で離散化の理論式を示しました.
\[
x_{k+1}=x_k+A\int_{t_k}^{t_{k+1}}(x(t))dt+T_s Bu_k \tag{1}
\]
この式の右辺第2項,積分の部分を1次近似をします.
1次近似をするのも,データのどこを重視するかによってやり方が分けられます.
以下ではその方法を簡単に解説します.
1次関数とは
まずは1次関数のおさらいです.
1次関数は式で表すと以下のような形をしています.
\[
y = at+b \tag{1}
\]
この式の\(a\)や\(b\)を求めることで1次関数を決定することができます.
これをグラフで表すと直線になります.
この直線を引くには,直線上を通る2点がわかればOKです.
そのため,離散化を1次関数で近似する場合も2点を指定することでできるようになります.
また,直線の傾き\(a\)を指定して,直線状を通る1点を指定することでも1次関数を求めることができます.
1次関数の決め方
先ほども言いましたが,この1次関数の決め方はデータのどの部分に重点を置くかで決められます.
具体的には以下のようになります.
- 時刻\(t_k\)で\(x\)と\(\dot{x}\)が離散化したものと実際のもので一致する
- 時刻\(t_k\)と時刻\(t_{k+1}\)で\(x\)が一致する
- 時刻\(t_{k+1}\)で\(x\)と\(\dot{x}\)が離散化したものと実際のもので一致する
それぞれの求め方は以下の記事で解説しています.
以下の記事を読むのが面倒な方は下の方で各手法の比較をしているので,そちらを見てみてください.
各手法の比較
ここでは上の記事で求めた離散化手法でどれだけの精度が出るのか見ていきます.
現代制御工学の学習でもよく利用されるマス・スプリング・ダンパーシステムを例にして数値シミュレーションをしてみます.
マス・スプリング・ダンパーシステムについて知りたい方はこちらで解説しているので読んでみてください.
数値シミュレーションの設定は質量を0.1,ばね係数を0.1,ダンパー係数を0.01として制御をしなければ振動がなかなか収束しないようなものにしました.
制御入力は0として初期速度を1m/sとして自由応答を調べました.
その1
まずは「1次関数で近似した離散化手法~その1~」の結果を見てみます.
数値シミュレーションの結果は以下のようになります.
左の図の青い波を打った線が実際のマス・スプリング・ダンパーの位置を表しています.
そして赤い〇が今回離散化をしたシステムの応答になります.サンプリング時間\(T_s\)は1秒としています.
そして右の図が実際のデータと離散化をしたシステムのデータの相対誤差を表しています.
これらの図を見ると明らかなように時間の経過とともに誤差が発散していってしまっていることがわかります.
その2
次は「1次関数で近似した離散化手法~その2~」の結果を見てみます.
数値シミュレーションの結果は以下のようになります.
こちらの離散化は左の図を見るとそこまで悪くないように見えます.
ただ,相対誤差を求めてみると(右図)誤差が150%近くなることもあるので,精度が良いとは言えません.
その3
最後に「1次関数で近似した離散化手法~その3~」の結果を見てみます.
数値シミュレーションの結果は以下のようになります.
こちらも先ほどと同じように精度は決して良くありません.
実際のデータよりも早く0に収束しようとしています.
右図の相対誤差を見ても,先ほどのその2よりもひどい結果となっていることがわかります.
まとめ
この記事では離散化を1次関数で近似したときの精度について比較を行いました.
1次関数で近似する方法は3種類あるのですが,どれも精度の良い結果とはなりませんでした.
一番ましだったのはその2の手法で近似を行った時でした.
この手法はデータの以下のような特徴に重点を置いて1次関数を求めて近似をしました.
時刻\(t_k\)と\(t_{k+1}\)で\(x\)が離散化したものと実際のもので一致する
このように時間をまたいで近似を行った方が精度が良いということがわかりました.
ただ,図でも示したように実際の応答は時間に対して1次関数的な応答をしているわけではないので,離散化を1次関数で行うというのは厳しい結果になりました.
続けて読む
もっと精度の良い離散化を行うには高次な関数で近似をする必要があります.
以下の記事では2次関数で近似を行う方法について解説しているので続けて読んでみてください.
「現在準備中です」
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
YouTubeでも制御工学や電子工作などの解説をしているので,ぜひのぞいてみてください.
それでは最後まで読んでいただきありがとうございました.
コメント