【倒立振子part6】モータを回す

前回までは振子を倒立させるのに必要なモデルと状態空間モデルまで作成した。
今回からはハードの設計と製作を行う。

  • 前提
  • ブラシレスモータについて
  • ブラシレスDCモータを回転させる
    • LEDを光らせる
    • PWM出力をする
    • ボタンを押してPWMをパターンごと出力する
    • 配線を組んで回転させる
  • 次回
続きを読む

【倒立振子part5】パラメータ同定について

前回で状態空間モデルが完成したので今回は変数の値を求めていく。
重量など実測することで判明するものもあるが、粘性摩擦抵抗などのように測定できないものは近似モデルと実測が同じ結果になるようにパラメータ同定を行う。

  • 1. 慣性ロータ系のパラメータ同定
    • 1.1 DCモータの定数と内部抵抗測定
    • 1.2 慣性ロータ系のパラメータ同定
  • 2.振子のパラメータ同定
  • 結論
  • 次回
続きを読む

【倒立振子part4】状態空間モデルを作る

下記のpart2,3でモデルの運動方程式が作成が完了した。
今回は導出した運動方程式状態方程式と出力方程式に変形してシステムの状態空間表現を行う。

続きを読む

【倒立振子part2.5】maxiamaのコード

色々調べてもコードが入力できないなぁと思っていたけど、原因が分かったので書いておく。
はてなブログには編集モードが「見たままモード」「はてな記方」「Markdown記法」の3種類があるっぽい。
はじめは「見たままモード」になっており、このモードだと一回記事を書いてしまうと後から変更できない+コードは張れないことが判明した。

基本設定で「はてな記法」にしたのでコードは無事に張れそうなので下記で使用したmaxiamaのコードを保存しておく。
marurunru.hatenablog.com

基本的には難しいことはせずに式を定義してラグランジュの運動方程式のみをmaximaに解いてもらうようなコードのみを書いた。

depends(θp,t);
depends(θr,t);
/*振子*/
/*重心座標*/
xp:lp*sin(θp)/2;
yp:lp*cos(θp)/2;
/*重心速度*/
dxp:diff(xp,t);
dyp:diff(yp,t);
/*エネルギー*/
Kpt:ratsimp((mp*dxp^2)/2+(mp*dyp^2)/2);
Up:mp*g*lp*cos(θp);
Kpw:(Jp*(diff(θp,t))^2)/2;

/*ロータ*/
/*重心座標*/
xr:lr*sin(θp)/2;
yr:lr*cos(θp)/2;
/*重心速度*/
dxr:diff(xr,t);
dyr:diff(yr,t);
/*エネルギー*/
Krt:ratsimp((mr*dxr^2)/2+(mr*dyr^2)/2);
Ur:mr*g*lr*cos(θp);
Krw:(Jr*diff(θp+θr,t)^2)/2;
/*sin^2+cos^2=1で式を整理*/
Kpt:mp*lp^2*(diff(θp,t))^2/8;
Krt:mr*lr^2*(diff(θp,t))^2/8;

/*ラグラシアン*/
L:(expand((Kpt+Kpw+Krt+Krw)-(Up+Ur)));
/*損失エネルギー*/
D:(up*diff(θp,t)^2+ur*diff(θr,t)^2)/2;

/*ラグランジュの運動方程式*/
tp : ratsimp(expand(diff(diff(L ,diff(θp,t)),t)-diff(L,θp)+diff(D,diff(θp,t))),diff(θp,t,2),diff(θr,t,2),diff(θp,t),diff(θr,t),g);
tr :  ratsimp(expand(diff(diff(L ,diff(θr,t)),t)-diff(L,θr)+diff(D,diff(θr,t))),diff(θp,t,2),diff(θr,t,2),diff(θp,t),diff(θr,t),g);

maximaで使用している関数で忘れた箇所があれば下記のまとめサイトで確認できる。
ja.wikibooks.org

【倒立振子part2】maxiamaでモデルを計算する

前回でモデルに必要な式の導出を行った。

今回はラグランジュの運動方程式を計算するためにmaxiamaを使用して式を計算する。

(maximaのコードはどうやってここに挿入したらいいのか分からない。。。)

 

計算した結果

 J_r\ddot{\theta_r}+(\frac{1}{4}m_r{lr}^2+\frac{1}{4}mp{lp}^2+J_r+J_p)\ddot{\theta_p}+\mu_p\dot{\theta_p}-(m_rl_r+m_pl_p)g\sin\theta_p=0

J_r\ddot{\theta_r}+\mu_r\dot\theta_r+J_r\ddot{\theta_p}=\tau_\omega

この式は非線形のため線形化を行う。

 J_r\ddot{\theta_r}+(\frac{1}{4}m_r{lr}^2+\frac{1}{4}mp{lp}^2+J_r+J_p)\ddot{\theta_p}+\mu_p\dot{\theta_p}-(m_rl_r+m_pl_p)g\theta_p=0...①

J_r\ddot{\theta_r}+\mu_r\dot\theta_r+J_r\ddot{\theta_p}=\tau_\omega...②

 

次からは慣性ロータを回転させるためのモータのモデルを落とし込んだモデルを作る予定(ブログに入れるための図を作るのに手間取ってるだけ)

 

追記

コード挿入できたので下記にまとめ直した!

marurunru.hatenablog.com