エヌがのロボット製作日記

どうも「エヌがの」です。主にマイクロマウスのことばかり書いているぶろぐです。とあるuniqueでexcitingな大学に在学中です。

磁気式エンコーダ その3

こんにちは。エヌがのです。

 磁気式エンコーダ第3回です。取得した速度データを滑らかに加工して制御をしやすくしたのが前回の記事です。今回は、取得した角度情報を使って補完した話を書こうと思います

 毎回ですが、モータに一定のdutyをかけ、空転させたとき取得したデータがこのようになっています
左:速度mm/s 右:取得角度(14bit/rot)
f:id:megato:20151129022235p:plain:w300 f:id:megato:20151129022248p:plain:w300
 ここから、磁石1回転分の角度情報を抜き出します。
この角度情報を無理やり理想的な形(1次線形)に線形変換します
f:id:megato:20151204032301p:plain:w400

変換した角度情報はこちらになります
f:id:megato:20151204032920p:plain:w400

線形変換は6次の線形近似を使用していますが、完全な近似ではないのでだいぶぶれています。おそらく他に方法はあると思いますが、思いつかなかったのでこれで良しとしました。単純に自分の知識不足なので、もっと良い方法はいくらでもあるでしょう

 気になる速度の情報はこちらになります
f:id:megato:20151204033204p:plain:w400
だいぶマシになったかなという程度です。線形変換のやり方を改善すればもっとよくなりそう
一応、1回転したときの整合性を合わせるために、1回転したときの角度値を変えております
 実装に関して、1ms毎に6次の近似方程式を2回解いていますが、問題なく動いています。さすがRX


 今回はここまでとします。磁気式エンコーダに関する記事はこれで最後にしようと思ったのですが、クラシックマウスでの体験談を後1回で書こうと思います。
 長文になりましたが、ここまで読んでくださり、ありがとうございました。

おまけ:
 これは全日本前あたりになって試みたことなのですが、かの有名なカルマンフィルタを使ってみました。
結果はこんなかんじ
f:id:megato:20151204033637p:plain:w400
 青線がフィルタを通さなかったデータで、黄線がカルマンフィルタを通した値です
 ものすごく改善した気がします。やはりカルマンさんは偉大。これで全日本決勝は走りました
 ただ、フィルタの設計や補正項など評価ができてないので詳しくは書きません(というか書けない)。見かけ上うまくいってるだけかも

 

磁気式エンコーダ その2

こんにちは。エヌがのです。

 前回から引き続き、磁気式エンコーダについて書いていきたいと思います。
 エンコーダから角度を取得しグラフにしたところ、このような結果になったことを前回書きました
左:速度mm/s 右:取得角度(14bit/rot)
f:id:megato:20151129022235p:plain:w300 f:id:megato:20151129022248p:plain:w300
モータに一定のdutyをかけ、空転させたときのデータです
 速度がものすごくブレてます。理想的な状態ならば、速度が一定になるはず。角度から察するに、速度のブレの周期がおよそ磁石が1回転する周期と同等程度なのはわかります。どうしてこんなにぶれているかの原因を推測しますと、

・磁気式ICと磁石の並行がとれていない
・磁気式ICの計測中心と磁石の回転中心があっていない
・磁石の回転が偏心している
・磁石自体の精度が悪い
・SPI通信で値を取得しているため、時間の整合性が合ってない

 様々な原因がありますが、一番の原因は磁気式ICの計測中心と磁石の回転中心がずれていることだと考えました。そこで、再びばらばらにし磁気式エンコーダICを丁寧にはんだづけしましたが、機械的な基準も拘束もなかったため、肉眼で合わせるくらいしかできませんでした。
f:id:megato:20151128184427j:plain:w300 f:id:megato:20151128184417j:plain:w300
肉眼では合っているように見える。
 改善の結果としては、少しマシになった程度で、効果は薄かったです。

 機械的な原因はもう設計時点でのミスであり、どうすることができませんでしたので、次はソフトウェアで対処することにしました
 とりあえず適当にFF制御で動かしたマウスの速度データが以下になります。
f:id:megato:20151129162645p:plain:w400
これでは制御ができないのでなんとか使えるデータにしてみます
 
 方法としては、こちらで紹介されている方法を用いました。
 10,20,30回で平均をとったデータがこちらです
f:id:megato:20151129163623p:plain:w400
 10,20,30と増やしていくに連れて、データが平滑化されているのがわかります。これはローパスフィルタがかかっているものと同義と私は考えていて、ある程度は効果がありますが、平滑化しすぎると応答の遅れから発振しやすくなります。私は、どれくらい平滑化するかは完全に主観で決め、20回と設定しました。

 これでまともに制御できるくらいにはなりました。しかし、まだ振れが大きくゲインをあまり上げられないという問題があり、なんとかならないかと考えました。

 今回はここまでになります。この話題についてはあと1回ほど書こうと思っていますが、ほとんどおまけみたいなものです。
 長文になりましたがここまで読んで下さり、ありがとうございます。

 

  

磁気式エンコーダ その1

こんにちは。エヌがのです。

 今回は、今年さんざん苦労させられた磁気式エンコーダについて書きたいと思います

 エンコーダは、角度を計測するセンサーで、マイクロマウスではタイヤの回転数を計測するためによく使用され、重要な要素となっています。タイヤの回転数から、マウス自身がどれだけ進んだか、また、どれほどの速度で走行しているかが分かります
 一般的に、エンコーダには、光と機械的な特性を用いた光学式と磁石の磁力線の特性を用いた磁気式という2つの方式があります。マイクロマウスではよく小型化されやすい光学式のエンコーダを用いることが多いのですが、本当に小型なものは値段が高く、入手も難しいです。しかし、近年では磁気式エンコーダ用の磁気を読み取る小型のICが安価で入手できるようになりました。このため、磁気式エンコーダを自作するマウスが多くなりました
 私もこの流れにのっかり、磁気式エンコーダを使ってみました

 使った感想としては、ちゃんと使わないと痛い目を見る。ということです。やはり既製品はよくできていて、自作するとボロがたくさんでます

 さて長々と書きましたが、磁気式エンコーダをどのように作製したか、問題点どこだったか、どのように解決したのかというのを書いていきたいと思います

まず、設計   左:組立図   右:分解図
f:id:megato:20151129010118p:plain:w200 f:id:megato:20151129010145p:plain:w300
左から磁気式IC、鉄製スペーサ、磁石、スペーサ、シャフト、ベアリング、モータマウント、スペーサ、ギアです。

 磁石をリング型にして、固定を楽に、さらにシャフトと磁石の回転中心をできるだけ合わせようという狙いでした。
 使用した磁石はネオマグというところのリング型ネオジム磁石内径1.2外径2.6です。

実際に作ったものがこちら
f:id:megato:20151128184302j:plain:w400
 鉄製スペーサは鉄ネジを旋盤で加工して作製、シャフトの磁石固定部分の径落としも旋盤で加工しました

 まず問題になったのがICとのSPI通信です
 今回、磁気式エンコーダICはAS5047を選択し、SPI通信で角度の情報を読み取るという方式を取っていました。その際、マイコンのピン数削減のために、MPU6500と一部を共通配線にしました。
f:id:megato:20151129014228p:plain:w400
 このせいで、めんどくさい問題がでました。MPU6500とAS5047とは通信の方式が同じSPI通信でも少し違っていて、一括で同じ設定で通信ができません。具体的には以下の2つの仕様が違いました。
○MPU6500
・8bit data / frame (一回の通信が8bit毎のデータ量)
・SCLKの基準電圧がhigh
f:id:megato:20151129020546p:plain:w300

○AS5047
・16bit data / frame
・SCLKの基準電圧がlow
f:id:megato:20151129020633p:plain:w300

RX631のRSPIには一つの通信毎にこのような設定を変更する機能があったので今ではなんとか通信出来ていますが、設定するのにずいぶんと時間がかかりました。できれば配線を分けたほうがいいと思います。

 次に問題になったのが、磁石がモータと引き合うというものでした。
 実は当初は上で公開しているような設計ではなく、もう少し大きめの外径6くらいの磁石を使用していました。さらに、モータも比較的大きいものを用いているため、このような問題がおこりました。主観的な説明になりますが、かなり強力に引きつけていました。100度くらい磁石を意図的に回しても、手を離した瞬間にすぐ戻ってしまうほどには。
 この問題を解決すべく、磁石の径を上で説明しているものに落とし、鉄製のスペーサで囲いました。こうすることによって、改善しました。手で意図的に回しても、引きつけられているとは感じないまでになりました。

 さて、肝心のエンコーダからの取得データですが、このようになりました。
 左:速度mm/sに直したもの 右:取得角度(最大14bit)
f:id:megato:20151129022235p:plain:w300 f:id:megato:20151129022248p:plain:w300
これはモータにduty10%?ほどかけて空転させたときのデータです。これを見たときは少し絶望しました。ここまでブレるのか・・・と。

 ここからは次回書くことにします。
 長文になりましたが、ここまで読んでくださり、ありがとうございました。

2015年全日本大会

こんにちは。エヌがのです。

 

 2015年の全日本大会が終わりました。今年も進行はスムーズに進み、気持ちの良い大会でした。大会の運営に関わった皆様に感謝致します。

 私の大会の成績はといいますと、

競技名 順位 タイム
クラシックエキスパート予選 16位 8.789秒
クラシックエキスパート決勝 16位 17.779秒
ハーフエキスパート決勝 16位 1:14.177秒

 f:id:megato:20151123211628p:plain:w400

とりあえず今年は16に縁があるようです。全部16位・・・

 
 今年のクラシック決勝の迷路はかなりおもしろい迷路でした。私のシミュレータではこのような結果がでました。

f:id:megato:20151124212128p:plain:w400

 近年では、長い直進がトレンドになっていた全日本のクラシックエキスパート決勝迷路ですが、今回も長い直線が豊富で左回りの経路が最速かと思いましたが、なにやらターンが多い右回りの経路が一番速いようです。大会の上位陣もこちらの経路を選んでいる人が多かったため、やはりこちらの経路なんでしょう。一応、ターン速度を下げて、直進速度と加速度の設定を上げてシミュレーションしましたが、同じ結果がでました。
 今年は斜め走行は5走目にしか行えず、ターン速度も600mm/sと全然だせない上に走行失敗という結果になりましたが、次はもっと速度を出したいと思います。

 ハーフエキスパートは、初めての32×32大迷宮に挑戦しましたが、やはりでかい。前日に慌てて対策しましたが、なんとか問題なく走行できた模様。とりあえず当初の目標であった、フル迷路の完走は果たせたので良しとします。ハーフには今年かなり力を入れましたが、まだまだ満足には走行してくれません。

 
 今年の反省点はこの4点で、
・ハード開発期間が長い
・マウス開発を始めるのが遅い
・ソフトウェア開発をもっと落ち着いて行う
・評価をもっと詳細に行う
です。
 とりあえず毎年のことながら、ハードに構いすぎて時間をとられ、ソフト開発が急ぎ足になり全然進歩しない。さらに、評価が甘く、あとあとで欠点や欠陥に気づくというのもたびたびあった。
 研究でもそうだが、問題認識と改善策とその裏付けと評価というのがちゃんとできてないせいでなかなか前に進まない、または間違った方向へ進んで道に迷うというのがよくある。時間がないというのはただの言い訳で、ひとつひとつやれば結果的に最適解へは短い時間で到達できるはず。どうしても思考がズレてしまい、なかなかこれらを正確に行うことができないでいて、どうして良いか悩み中です。根深い問題・・・

 とりあえず、来年のマウスについては
・始動を早くする
・ハードにいらんことせずシンプルなものを作る
というのを行おうと思います。

2015年クラシックマウスver2

こんにちは。エヌがのです。

2015年のクラシックマウスver2の詳細を報告します。なんとか全日本の1週間前に完成しました。一応良好に動いています。

f:id:megato:20151123204106j:plain:w400

回路、ハードの構成自体はほとんど変わっていませんが一応

名前 OpenerBurst
サイズ 縦:75mm 横:70mm 高さ:25mm
重量 60g
電源 Hyperion Lipo 2cell 120mAh
Motor Maxon DCX10L
モータドライバ DRV8835
CPU RX631
壁センサ TPS601 & SFH4550
ジャイロ&加速度 MPU6500
エンコーダIC AS5047
足回り ホイール径:22mm ギア比:3.46

 リスペクトこじまうす10ということで、前部分のセンサ配置を中心に寄せて、機体の慣性モーメントを下げています。そのせいで、後ろ重心になり、加速性能がすこし落ちましたが、減速では安定しています。
 重心を下げるための裏側のおもりは加工が間に合わなかったため今回は載せていません。重心のバランスはこのおもりでなんとか中心に近づけることができると考えていて、加減速もすこし改善できるはずです。

 ハードに関してすこし試みたのが、ピニオンギアです
 
f:id:megato:20151123204529j:plain:w400

 刃径0.3のエンドミルでギアを削り、イモネジ挿入の穴をボール盤で空け、タッピングしました。
 結果は予想していましたが、イモネジ部分の締まりがあまり良くなく、ゆるみやすい。さらに、外力で穴が拡張されてギアの中心が振れてしまいました。やはりイモネジ付きのピニオンギアは金属で作ったほうが良さそうです。

2014年度クラシックマウス

こんにちは。エヌがのです。本日3つめです


 2015年のクラシックマウスを書いてる時に、そういえば去年のマウスの詳細情報晒してなかったぞと気がつきました。これは2014年度クラシックマウスです

f:id:megato:20140920215431j:plain:w400

機体スペックはこちら

名前 OpenerAccel
サイズ 縦:100mm 横:75mm 高さ:30mm
重量 90g?
電源 Hyperion Lipo 2cell 120mAh
Motor FAULHABER 1331T
モータドライバ LTC4449 & IR8910
CPU RX62T
壁センサ TPS601 & SFH4550
ジャイロ&加速度 MPU6000
エンコーダ mes-6-500 (MTL社)
足回り ホイール径:26mm ギア比:2.8:1 材質:A7075(超々ジュラルミン)

このブログでもチラっとは全日本前に晒している気がしますが、このマウスはこんな機構になってます

f:id:megato:20141119074440j:plain:w400
モータの出力を内歯車で受け、それを外歯車でエンコーダを介してもうひとつのタイヤとつなげています

 私は2013年にDC2輪マウスを製作し、2014年はDC4輪にしました。ですが普通の1717モータを使用したマウスを作るのはつまらないと思い、この変な内歯車を使ったマウスを思いつき、作製しました。要はなんか面白そうなものを作ってみたかっただけです
 作るのにはだいぶ時間がかかりました。まずホイール

f:id:megato:20141114153705j:plain:w400

これが一番作製に時間がかかりました。およそ3,4ヶ月くらい?いろいろ加工方法を変えた結果こんなものができあがりました。ギア部は大学の放電加工機、追加工は旋盤、フライス盤の手加工です。内歯車付きのほうはこんなかんじにPEEKを削ったものを圧入して使用

f:id:megato:20141119074300j:plain:w400

モータマウントもCNCで切って、フライス盤で手加工と少し手間がかかりました。そしてこれはギアのバックラッシの調整のためにたくさん切りました

 f:id:megato:20140920212240j:plain:w400
まだまだあったはず。

ピニオンギアも、2013年度にさんざん苦労させられたので、イモネジで固定できるように自作

f:id:megato:20141103224426j:plain:w400

横から見ると足回りはこんな感じに

f:id:megato:20141119013016j:plain:w400

回路もモータドライバに手を加えたり、コンデンサに凝ってみたり色々試行錯誤しました。

今思い返してみるとえらい色々やってんなと思いますが、肝心なソフトが全然できてなかったので、まあ当たり前だと納得です。

 今年もハードで唸っているのでそろそろぬけだしたいところ。

2015年全日本マイクロマウス学生大会とその他大会

こんにちは。エヌがのです。本日2つ目です

f:id:megato:20151031212754j:plain:w200


つい先週、全日本学生大会がありました。クラシック、ハーフ、サーキットと3競技出場しましたが、なかなかの成績を残せました。

学生大会
種目 順位 タイム
クラシック 6位 10.186秒
ハーフ 優勝 15.771秒
サーキット 6位 10.487秒

f:id:megato:20151108194239p:plain:w400

 中でもハーフ優勝は2年ぶりの入賞ということで、とても嬉しいです。シード取得は初!学生のハーフはまだ平和ですね。たぶん某Mi○eがあまりいないからでしょう。クラシックは急増の新作をなんとか動かし、危うい走行ではありましたが完走してくれたので十分です。後に、あと0.02秒はやければシードだったというのを知って少し後悔しましたが。
 思うところはクラシックの迷路ですが、あれは面白い迷路ではあったと思います。ほとんど両壁のあるところがなく、横壁制御が効かない。また、柱のみの場所が多く、壁切れを読むのが困難。探索に関して言えば、袋小路は嫌というほどあるため、時間があれば完走は難しくはないと思います。ただ、初心者は、特にジャイロのないステッパマウスは直進に関しては横壁制御に頼らざるを得ないため、ターンの角度が少しでも甘いと壁にぶつかっておしまい・・・。なかなかターン角度の重要性を知るいい機会ではあったのかもしれません。個人的はこのくらいの難易度でバッチコーイなんですが、今回うちの後輩たちがほとんど完走できてないという現状をみるとなんだか複雑です。

 長々と物申してしまいましたが、他の大会の記録もここに上げときます

中部地区大会
種目 順位 タイム
クラシック -- R
ハーフ 10位 13.273秒
サーキット -- R
東日本地区大会
種目 順位 タイム
クラシック 5位 9.478秒
ハーフ 6位 36.360秒
サーキット -- R
関西地区大会
種目 順位 タイム
クラシック 7位 53.452秒
ハーフ 6位 14.132秒

 順位だけみるとなかなか良さそうに見えますが、そもそもハーフは母数が少ないのでほとんど最下位近くの順位です。中には最短すらできなかったものも。ハーフはやはり社会人が強い。学生はあまりやってる人がいなくそこそこ平和。今年は関西方面へ遠征にいきましたが、なかでもIsysの成長が目覚しく、うちでは歯が立たないのではないか・・・。特にIsysはトレーサ、クラシック、ハーフと幅広くやってるのがすごく良い。
 東のMice、西のIsys??ロボメカももうちょいがんばりたいところ。