2017年9月1日金曜日

次は前壁補正

一応、少し良くなってきました。

壁制御のバグを取り除いて走らせてみると、前ほど悲惨にはなりませんでした。距離が増え出すようなことはとりあえずなさげなので、最短も走るようになりました。
今は袋小路でかなりずれてしまうので、次は前壁補正や袋小路バックを入れていこうかと思います。でも、なんでずれるのでしょうか。旋回時に重心がずれているのかなと思っていますが、重心は真ん中の方なのになんででしょうね。まだ走り込みが足りていないので、走らせながら試そうと思います。

今日はこの辺で。

2017年8月31日木曜日

安定しない…

8月が終わりますね…。ブログを書き始めてから、2年ですね。あの時は憧れていたDCマウスを作っているとは、2年前の自分は想像していたでしょうか。まぁ、動きはまだまだですが。

さて、最短で進む距離が長くなったり探索も同じ現象が起こったりとうーんという感じで、結構頭を抱えましたが、バグ発見しました。
これが歩数マップとかかと思いきや全然違いました。モーターの方でした。距離をリセットする関数でリセットしなくて良い部分までリセットがかかっていました。たかがソースコード2行程度のミスですが、やはりDCのアルゴリズムは今年初めて作ったのでミスが残っていたようです。

その後は速度を上げると(上げると言っても直線1.5m/s、小回りターン0.6m/s程度)でも走れなくなるので、ゲインの調整をしようと、ログ機能を搭載しました。それでログをtera termに保存させてそれをエクセルで開いてグラフ作る、という感じで速度や角速度のデータを見れるようにしました。
そしてゲインをある程度調整してみたのですが、どうも安定しない…というか走れていたパラメータも走れなくなる…という感じでうーんという感じでした。
さらに走らせて見ると分かってきましたが原因はおそらく壁制御です。壁があると急にスラロームがおかしくなります。おそらく壁制御を許可した時に壁がなくてもジャイロのI成分をリセットしているミスがあるなーと思い始めました。

ということで今に至ります。なかなか安定しません。難しいです…。
とりあえず走れるようにすることが今の目標ですね。

今日はこの辺で。

2017年8月29日火曜日

一応走る

マウスはそこそこ進んでいます。

まず、フェールセーフ入れました。入れないと暴走して危険なので。目標速度or角度がずれ続けたら、停止するというものです。
入れていくうちに壁制御の式がおかしいことに気づき、そこも直しました。

その後は探索。一応スラローム探索です。ただ、迷路の歩数マップ展開に時間がかかっているらしく、動きが多くなるほど距離がおかしくなっています。
最短も入れましたが、動きがおかしいです。パスは出ているのですが、動く距離が少し大きくなってしまいます。少し良くわからないですね…。

まぁ、迷路をようやく走れるようになりました。自分のDCマウスが動いているのを見るのは初めてなので、新鮮です。ステッパに比べると軽快で良いですね。
ただ、内容は良いかというとイマイチで、どうしようかなという感じです。
歩数マップのあたりは、先輩が使ってきたコードのアルゴリズムを流用していたのですが、それにそろそろ限界がきているというところでしょうか。自分で書いてみますかね…。作りかけの迷路シュミレータも作りますか。とりあえず少しあがいてまぁまぁになってきたら、変えようかなと思います。

今日はこの辺で。

2017年8月26日土曜日

壁制御

今日は、壁制御を実装しました。

ステッパではないので、単純に誤差をdutyにつっこむのではダメなので、制御法を変えました。角加速度に誤差をフィードバックして、かつジャイロのI制御を切るという方法です。そこそこ制御がかかりました。
しかし、これだけだと壁の切れ目に吸い込まれてしまいました。センサの反応が実際の壁との状況よりも遅いことが原因でした。ということで、センサの値の変化を見ながら、壁のなくなったタイミングを見つけ、もしそうであればリファレンス値をあげてやる、という感じで直してみたら、良くなりました。少しリファレンスの補正値を調整する必要がありましたが、いじってみたらきれいに壁制御が出来るようになりました。

近似化も、効果が早速現れている感じです。距離と比例して値が変わってくれるのはありがたいですね。調整も物理量だから測定しなくてもかなりあいますし、やはりやって良かったと思います。

これで、マウスが最低限動く基礎は、出来てきたというところでしょうか。
次は、いよいよ迷路探索かなと思います。どんな動きになるかわかりませんが、頑張ります。
もう少し先のことを考えると、壁切れ補正や、斜め走行(180度ターン、V90も)が出来るようになりたいですね。まぁまだ迷路を動いていないですが。吸引機構は、使う日が来るのでしょうか。DCマウスらしい動きを出来たら、良いなと思います。

今日はこの辺で。

2017年8月25日金曜日

近似化初挑戦

センサのほうも、まぁ使えそうなところに持っていきました。

今年はハードウェア側では全くフィルタをかけていないので、ソフトを考えて作りこみました。一応、強めのLEDでスポットライトじかに当ててもあまり揺らがない程度には値が取れるようになっています。
フォトトランジスタの応答速度は結構遅いので割とシビアに値の調整をしました。50㎲程度はないと追いつかないようなので、それを個別に1ms周期でずらして発光させています。ずらしも割と時間をおかないとなので、まともな値が取れるまではそこそこ実験しました。結果的には、電流も何も考えずに使う時の1/5にできましたし、割り込み処理が軽くなったので、高効率になったかなーと思います。

その後は、昨年時間がなくてできなかったセンサ値の近似化に取り掛かりました。
マイクロマウスのセンサ(とりあえず自分の場合)は、距離が近いと値の変化が急になりやすくなるような特性があります。遠いときは値の変化が緩やかです。そのようなグラフを近似化する必要があります。
調べてみると、自然対数を使う方法がなかなか有力なようで、確かに自然対数のグラフを見てみるとなかなかセンサの値と似ている感じでした。
ということで、それを用いて、実測値から連立方程式を解いてやって定数を算出し、式を出して近似してみました。結果はこんな感じです。


系列1が実際の距離、系列2が左前壁センサの値を近似化したもの、系列3は右前壁センサの値を近似化したものです。
どちらも110㎜を超えたあたりからずれていますが、正直値の実測の精度はたいして高くないですし、実用では問題ないかなという感じでしょうか。あと右のほうは飽和しています。左は飽和しないで比較的きれいなのになんででしょうね。光軸は結構調整しましたがどうも右は飽和します。まあ、15㎜程度なら何とかなると思います。
横壁センサも同様に近似して、なかなかよさげです。

とりあえずセンサも使えそうになりました。初めての試みでしたがうまくいっているようでよかったです。実際動かしてみないとこれがどう出るかはわかりませんが、生値を使っているよりははるかに良いと思います。

次は壁制御ですね。昨年のようにただ誤差をP制御するだけとかではだめそうなので、これも試行錯誤でやっていこうと思います。それが出来たら探索がようやくできる...とよいですね。迷路を動く姿を、見れるように頑張ろうと思います。

今日はこの辺で。

2017年8月23日水曜日

ようやく…

ようやく、もちもち3号が真っ直ぐ進めるようになりました。長い戦いでした…。

どうにか、昨年の全て符号なし整数になってしまっている物理量ベースを修正、符号付きにできるようにしました。ポカミスを割として時間がかかりましたが、何とか修正しました。
そしてそこからFBに取り掛かりました。難しかったです。昨年まではPID制御のうち知識がないのでPだけでやっていましたが、それだけでは無理と判断して、PI制御に変更しました。そして苦戦しましたが、一応ゲインを適当にいじって直進、旋回、スラロームが出来るようになりました。このマウスが、ようやくまともに動きそうなそぶりを見せてくれたのでとても嬉しかったです。

今の懸念は…たまにエンコーダの出力が飛ぶこと…です。右の出力が飛んで暴走します。原因はおそらくマイコンの接触不良だと思うのですが、既にハンダを付け直す→動く→動かなくなるのサイクルを2回程やっているので、うーんという感じです。多分半田が雑だったのだろうと思うようにしていますが、別のところに原因がないと良いですね。

次は、センサです。今年は回路上でフィルタを全くかけていないので、ソフトをしっかり作ろうと思います。
センサも触ってみましたが、なかなか難しく、フォトトランジスタの応答速度と外乱との戦いです。
DC変則4輪板マウスは総合的にとても難しいです。細かいところまで考えなければならなく、これまでの適当にやっていても(といってもそれなりに大変でしたが)動いていた機体とはまた違うなーと。動いて欲しいですね。

今日はこの辺で。


2017年8月20日日曜日

ソフトの見直しが必要

DCマウスは難しいです(挨拶)。

さて、今日、FB制御に取り掛かるかーと思ったのですが、まだ出来ていません。
書いているうちに、今のやり方に無理があることがわかってきました。
今回のモータ制御のあたりは、だいたいステッパの物理量ベースを流用してDCに直しているのですが、そこに穴がありまして。ステッパはオープンループだけなので速さとかを全て符号なし整数値にしていました。なので、例えば角速度も符号なしである→ジャイロからのフィードバックをかけようとするとスラロームの時向きがわからない、みたいな感じで詰みました。
今後は向きを考慮しないで正負とれる値から実際の制御に変換するような形をとろうと思います。

DCも難しいわけですが、変則4輪であることも難しさを増大させています。FFだけだとターンの時全く指令値とは違う動きをするので、アルゴリズムのテストがしづらいです。スラロームとか、適当に入れていますが、本当に正しく動いているのか分かりません。まぁ、フィードバックすれば何とかなるだろうとか思っています。

直進したいですね。もう何回目でしょうか。本当、難しいです。ただ、FFで3m/sとかで動かしてみると、どうにか動かしたいと思いますよね。まだまだ試行錯誤ですが、頑張ろうと思います。

今日はこの辺で。