やはり実際に大会に参加するといろんな意味で収穫があるものである.
・実際の迷路を試走させていただいてわかったこと
機械研迷路とは異なり,粘着による摩擦は非常に小さい.調整をしてみると,モータのフィードバックのゲインが10倍ほど違う.話にならん.よって学生大会に向けてまずはじめに迷路の塗料を塗りなおさなければならない.
・参加者との情報交換で得たヒント
こちらで触れておられる,ADXRS300のselftestの話.もっと前に情報公開していただいていたらしいが,完全にスルーしていた.ドキュメントをよく読めば,ドリフトを劇的に抑えることができうるらしいです.
・貴重な休日として調整をしていて気づいたこと.
本番でもそうだったのだが,今年はなぜかブレーキが効かず,スラローム前に完全にスリップしてしまうことがたびたびあった.やや前重心とはいえ減速の加速度を落としても改善しないことから,簡単にスリップで片付けていい問題ではなさそう.どうも,タイヤ速度が落ちないもんだから,フィードバック制御で無理やり強いトルクをかけようとしたときにスリップすると考えられる.
さらにログをみながら探っていくと,duty比50%で一定速度の状態からduty比60%とすると5m/s/sで加速するが,40%としても-5m/s/sでは減速しないことがわかった.なぜ?トルクの線形性はないということか?
電流連続モードからかけはなれているからか?と思ってモータ制御のPWM周期は100kHzとしていたところを200kHzにしてみた.改善せず.20kHzにしてみた.改善した.そういうものなのか.なぜだろうか.MIN5では10kHzくらいと低いのが気になっていたが関係はあるのだろうか?
理由はわからないながらも,問題のひとつは解決しそうである.毎年中部地区大会では重要な知見が多く得られるが今年も例外ではなかった.学生大会までにすべてを盛り込んで調整するのは困難かもしれない.なんせマウスだけでなく迷路の路面状態も調整する必要があるから.
2009年10月30日金曜日
2009年10月28日水曜日
ミニモータのケーブル
2009年9月11日金曜日
DCモータの制御(フィードバック)
マウスではよく,目標のタイヤ速度を設定して(計算して)それに追従するようにフィードバックをかけて速度制御する方法が用いられる.このとき,目標速度v_tarとエンコーダ出力から求めたタイヤ速度vの差を埋めるために,
r_duty = - P * (v - v_tar) - I * Σ(v - v_tar)
で計算されるduty比を以前に書いたフィードフォワードのdutyに加えてモータにかける.PとIの値は実際に走らせてみて最も追従性がよくなるように調整する.
ログをとってみると,ある程度ゲインを調整すれば目標値にはそれなりに追従するようになる.しかし,タイヤがスリップなどしているときにはエンコーダから求めた速度は実際の速度ではない.高い加速度で加速するとそうしたことが実際に起こっているようで,nakashimaさんによれば減速時にはエンコーダから求めた速度より実際の速度は大きいのでオーバースピードでターンに突っ込んでしまう.それを防止するためにターン前に一定速度の区間を設けるのが広く使われているテクニックだと思うが,この区間は無駄なのでできるだけ短くしたい.(関連するやりとりをメモ)
最近はますます加速度が高くなっているので,こうした細かいこともよく考察しておきたいところである.
r_duty = - P * (v - v_tar) - I * Σ(v - v_tar)
で計算されるduty比を以前に書いたフィードフォワードのdutyに加えてモータにかける.PとIの値は実際に走らせてみて最も追従性がよくなるように調整する.
ログをとってみると,ある程度ゲインを調整すれば目標値にはそれなりに追従するようになる.しかし,タイヤがスリップなどしているときにはエンコーダから求めた速度は実際の速度ではない.高い加速度で加速するとそうしたことが実際に起こっているようで,nakashimaさんによれば減速時にはエンコーダから求めた速度より実際の速度は大きいのでオーバースピードでターンに突っ込んでしまう.それを防止するためにターン前に一定速度の区間を設けるのが広く使われているテクニックだと思うが,この区間は無駄なのでできるだけ短くしたい.(関連するやりとりをメモ)
最近はますます加速度が高くなっているので,こうした細かいこともよく考察しておきたいところである.
2009年8月30日日曜日
DCモータの制御(フィードフォワード)
マウスにおいて最大のパフォーマンスを発揮するためには等加速度の加減速をすることが必要.わりときっちり制御しないと,過剰なトルクがかかってスリップなんてことになってしまう.
今,加速度aで加速(もしくは減速)したいとすると,必要なタイヤのトルクT_tireは
T_tire = a /2 * d
T_tire = m * a / 2 * r_tire
となる.mは機体質量,r_tireはタイヤ半径であり,2で割っているのはタイヤが左右で2つある場合を考えているから.モータが出力すべきトルクT_motorはギヤ比をr_gearとして,
T_motor = T_tire / r_gear.
モータのカタログにのっているトルク定数k_mを用いれば,モータに流すべき電流Iは
I = T_motor / k_m.
そのために必要なモータの両端の電圧Vは
V = R * I + V_r
である.Rはモータの巻線抵抗,V_rはモータに発生する逆起電力で,カタログの発生電圧定数k_eを用いれば,
V_r = k_e * n
となる.ただし,nはモータの回転数であり,一定時間のエンコーダのカウント値からわかる.
実際にモータを制御する際にはPWM波のduty比r_dutyを変化させる.電源電圧をVsとして,
r_duty = V / Vs
である.これで今モータに与えるべきduty比を計算することができる.
以上はフィードフォワード制御をする場合に役に立つ.というかこれなしではレスポンスが遅すぎて制御しにくいと思う.実際にはこれに加えて目標値とのずれを埋めるためにフィードバック制御もする.
今,加速度aで加速(もしくは減速)したいとすると,必要なタイヤのトルクT_tireは
T_tire = m * a / 2 * r_tire
となる.mは機体質量,r_tireはタイヤ半径であり,2で割っているのはタイヤが左右で2つある場合を考えているから.モータが出力すべきトルクT_motorはギヤ比をr_gearとして,
T_motor = T_tire / r_gear.
モータのカタログにのっているトルク定数k_mを用いれば,モータに流すべき電流Iは
I = T_motor / k_m.
そのために必要なモータの両端の電圧Vは
V = R * I + V_r
である.Rはモータの巻線抵抗,V_rはモータに発生する逆起電力で,カタログの発生電圧定数k_eを用いれば,
V_r = k_e * n
となる.ただし,nはモータの回転数であり,一定時間のエンコーダのカウント値からわかる.
実際にモータを制御する際にはPWM波のduty比r_dutyを変化させる.電源電圧をVsとして,
r_duty = V / Vs
である.これで今モータに与えるべきduty比を計算することができる.
以上はフィードフォワード制御をする場合に役に立つ.というかこれなしではレスポンスが遅すぎて制御しにくいと思う.実際にはこれに加えて目標値とのずれを埋めるためにフィードバック制御もする.
