2017年終了のお知らせとそのご挨拶

みなさんこんばんは!

 

ここ数回JASALMAのソースコード解読を行っていましたが今日は大晦日ということで年末の挨拶や今年の振り返り、来年のお話を少しだけ書いていきたいと思います。

 

まず今年の振り返りについてです。

やはり一番大きな出来事としてはMiceに入ってしまったということでしょう。

これによって自分の大学生活が大きく変わってしまったことは言うまでもありません。

(Miceに入っていなければ22時過ぎまで大学に残るような日々を送ることはなかったでしょう)

そのせいで1年目からマウスを完成させ、やりつくしたとは言えないものの完走させることができました。

あれはほんとに嬉しかったし、やってよかった!と強く感じた瞬間でした

同時に、沢山教えてもらったり助けてもらったりと先輩への感謝も感じた一年でした。

来年は自分もそうゆう先輩になりたいな、と思います!

 

さらに言えば基礎工生なのに部長に就任してしまいました。

経験が少ないですし技術的にはなにも教えられない部長になる気がしますが残り11ヶ月程の任期、一生懸命頑張っていこうと思います(`・ω・´)ゞ

 

次に(?)来年の話を少々

Miceの部長としては今年の先輩方と同様に新歓やプチ大会の開催などなどやらなきゃいけないことがたくさんあります...

さらに来年は理科大がマウス合宿担当ということで・・・

幹部共々なんとか成功させなきゃな、と思っております。

ので皆様の参加を心よりお待ちしております。

 

個人的な話としては新作をしっかり完成させてある程度の記録を残したいなと思っております。

負けたくない相手もいますしね

f:id:kt33-JASALMA:20171231185250p:plain

とりあえず早く設計を終わらせなきゃというところです。

わからないことだらけなので先輩方、沢山話を聞かせてください!

 

んー、話したいことはそれくらいですかね?

あとは兼サーしているテニスサークル(GRASS)のほうでも役職を持っているのでそっちも頑張らなきゃと思いつつ・・・

あー、なんとも忙しい一年になりそうです。

学業もおろそかにしないよう、落単しないように気を付けたいと思います。

 

それではみなさん今年一年間大変お世話になりました!

平成30年もよろしくお願いします!

ではでは(^.^)/~~~

R

 

JASALMAのプログラム解読Part3 センサーとバッテリー等々のその他&走行系の補足

こんにちは。

もう年の瀬ですね...

もうほんと早いな~と思いながらこんな話はまた明日、大晦日に残しておこうと思います。

 

さてさて、今回のブログではプログラムの細かい部分と走行系の補足についてです。

 

まず補足から行きましょう。(今後もまた何か思い出したら随時補足していきます。)

前回前々回のブログで走行系について書いてきました。

その中で任意の距離を走れるようになる!、という話をしたと思います。

そのためには基準となる点(区画の中心や境界)で走行距離をリセットするのがポピュラーなやり方なんじゃないかと思います。

このリセットのタイミングについて言及していなかったのでここで記していきたいと思います。

何も考えずにやるなら走り始めるタイミングでリセットをかける人が多いと思います。

(↑個人の独断と偏見)

ですが後々のことを考えると走行が終わったタイミングでリセットをかける(基準の点を出る時ではなく、到達した時)ようにしておいたほうがいいと思います。

これに関しては後々ある動きを実装しようとしたときに幸せを感じられるものだと思います。

のであえて理由は書かないでおきます。

 

さあ、いよいよ本題(?)の細々した部分について書いていきます。

 

まずはセンサー関連について、主にチャージ発光についてです。

(※書いてるのが雑魚なので詳しく知りたい人は自分で調べるかもっと強い人に聞いてみましょう)

(Miceの標準回路を使用していれば)センサー周りの回路内にLEDと並列でコンデンサがあると思います。

センサー用のLEDを点灯させる際はこのコンデンサに充電してあるエネルギーを使用しているらしいです。

そのため点灯からの時間によってその明るさが・・・変わる・・・?(ホンマか?)

つまりセンサーの値を取得する(AD変換する)際には1つづつ行う必要があります。

 

またチャージ発光とは少し違う話になりますがセンサー値の外乱を取り除く方法について記していきます。

この処理をしないと機体を180度回転させるだけで値が100ほどずれる場合もあるので是非行いましょう。

さて、外乱を取り除く方法ですがこれはLEDが点灯している時のセンサー値から消灯している時のセンサー値を引けばよいでしょう。

 

以上の2つを考慮してLED1つ1つを順々に”点灯→AD変換→消灯→AD変換→(次のLEDを点灯)”を行えばいいと思います。

また点灯からセンサー値が変化するまでにはラグが存在するのでその対策は忘れないようにしましょう。

 

JASALAMAではこれらの処理をCMT割り込みで行い、1ms毎にセンサー値の取得を行っておりました。

 

全日本大会の3日前までこの処理をしておらず(上手くできておらず)壁制御もセンサー値も安定していませんでしたがこの処理をしてから色々と安定し幸せになることができました。

なので是非

みんなには幸せになってほしい

 と思う今日この頃です...

 

 

次にバッテリーの電圧測定についてです。

マイクロマウスで多く用いられているリポ(リチウムポリマー電池)は軽量、高電圧、大容量などとても優れた電池でドローン(マルチコプター)などにも用いられています。

一方でやばいことをしてしまうと発火してしまうなど、大きな危険性も孕んでいます。

やってはいけないこととして以下のようなものがあげられます。

  • 過充電はしない
  • 過放電はしない
  • 保管中にショートしないようにする
  • 充電は安全な場所で目を離さないように
  • 充電終了後or異常が確認されたらすぐ充電器から外す
  • 使用していないときには丈夫なケースに入れて保管する

以上より、動作中に起こりうるやばいことは過放電です。

そのためマウスでバッテリーの電圧を読んであげる必要があります。

標準の回路図を用いていればバッテリーを抵抗で分圧させてその電圧がマイコンに入力されているはずです。

つまり分圧のために用いている抵抗の値がわかればマイコンからバッテリーの電圧が読めるはずです。

そのために・・・

はんだ付けする前に分圧に使う抵抗の抵抗値を測定しておきましょう!

それさえやっておけばAD変換とその抵抗値を用いて電圧が読めるはずです。

それで電圧が読めるようになったらどうするか?

→ある値以下の電圧を示した段階で動作を終了し充電させる

この基準となる値に関しては詳しくないし適当なことも言えないのでもっと強い方に聞いてください。

JASALAMAでは電源を入れた時とモードを選択したときに10.9V(?)以下となっていたら無限ループに入るようなプログラムとなっています。

これで電圧が降下してきたら動かなくなるのですぐにわかります。

なのでリポはこのような形でなくてもいいですが過放電を起こさないような対策をしてから使うようにしましょう。

 

では今日はここらへんで失礼します。

何か指摘等あればお待ちしてます。

(^.^)/~~~

F

JASALMAのプログラム解読Part2 走行系2

こんにちは。

 

昨日はCheese杯でした。

運営された方、参加された方、本当にお疲れ様でした。

(結果は聞かないでください・・・)

 

さてさてJASALMAのソースコード解読第二弾です。

(ふとプログラムとソースコードの違いが気になったので強い人是非教えてください)

今日は前回の続きということで走行系の2、です。

前回の部分で任意の速度を実現できるようになっています。

そのため今回は台形加速についてです。

(あくまでも個人の考えだよ、という点は変わらずですが、それに加えて今日からの内容では自作の関数や変数が出てきます。そのネーミングセンスはないと自覚しているのでそっとしておいてください&名前は自分で変更することを強くオススメします)

 

台形加速のざっくりとしたイメージは前回のブログで書いてるので省略します。

まず台形加速を考えて行く前に三角加速を説明させていただきます。

台形加速するためには最低速度、最高速、加速度、走りたい距離(走行距離)、初速、終端速etcのパラメーターが存在します。

台形加速とは時間-速度のグラフが台形となる=最高速度に達しているということです。

では、走行距離が短くなっていったらどうなるでしょう?

 

台形の上辺(下辺もですがここでは気にしない)が短くなっていきある地点で上辺が0となることがイメージできると思います。

この時の走行距離の値より走行距離が大きくなれば速度が最低速まで達する前に減速することがわかるかと思います。

さあここでこの時のグラフの概形を考えてみましょう。

答えは必要ないですよね?

 

つまり台形加速を実装するためには同時に三角加速も実装する必要があり、そのためには走行距離(+その他のパラメーター)に応じてどちらの加速をすればいいのかを判断する必要があります。

この判定の条件は自分で考えてみましょう。

高校物理の知識があれば解けますから難しくないですし...

 

台形加速と三角加速の判断が出来てしまえばあとは加速区間、等速区間、減速区間の判断を導入してあげればよいでしょう。

この判定の仕方には距離、速度、時間などが使えると思います。

理論的にはどれを使っても問題ないはずです。

JASALAMAでは加速・等速の判定は速度、等速・減速の判定は距離、停止の判定は距離としました。

 

おっと、ここでさらっと距離を認識していると書いていますがその説明をしていませんでした。

距離は速度を時間積分すれば求められます...がここではそれをもう少し簡単に計算していきます。

速度を計算した時と同様に距離xはCMT割り込みの度に以下の計算をすれば現在の位置(距離)xを求められます。

     x+=v×0.001

 

以上を踏まえれば台形加速は最高速に達するまで加速、その後等速として(走りたい距離)-(台形加速と三角加速の境界の距離の半分)まで走行、以降は走りたい距離に達するまで減速とすれば台形加速は完成です。

この時減速区間では速度が最低速以下にならないように気を付けましょう。

 

今更ですがマイクロマウスにおいて最低速は0ではなくある程度の値とする方が主流です。

JASALAMAでは180[mm/s]を最低速、最高速(探索速度)は500[mm/s]、加速度は1700[m/s^2]としていました。

 

上記のように加速区間、等速区間、減速区間を判定できるようになれば後はフラグとif文等を用いてCMT内の処理を変更し、速度を上げたり下げたりそのままにしたりすればいいでしょう。

 

これで基本的な台形加速は完成です。

ただしここまでで記した通りの台形加速を実装では停止状態から任意の距離走行し停止する、というパターンしか実現できないと思います。

これでもカクカクしながら走行することは可能でしょう。

というか初めて左手法を実装する際などはこの動きで十分とすら言えるかもしれません。

しかし、後々には停止状態から探索速度まで加速、探索速度から停止、探索速度を維持したまま走行、探索速度からさらに速い速度まで加速したのち探索速度に戻る、などの動作が必要になると思います。

 

そのため今の段階で様々な動きを実現できるような関数を作るのもありかもしれません。しかしそのためには関数の引数が多くする必要がありその入力がめんどくさくなるかと思います。

そのため引数を少なくして関数を多く作るというのもありかもしれません。

その時は今回作った台形加速の関数をコピペしてちょっといじってあげればいいと思います。

 

まあこの辺の考え方は宗教性があるところだと思うので自分の好きなようにしてください。

 

さて次は超信地旋回についてです。

超信地旋回とはその場でぐるぐる回ることを指しています。

これを実現するためには左右のタイヤを同じ速度で逆方向に回してあげればいいでしょう。

この時も台形加速を用いてあげればいいと思います。

そのためには任意の角度まわる際に左右のタイヤがどれだけの距離を進む(回転する)必要があるのかを知る必要があります。

 

超信地旋回ではタイヤの軌跡は左右のタイヤの中心を原点に左右のタイヤの間隔(=トレッド幅を)直径とした円を描くことがわかるかと思います。

(ほんとはわかりやすい絵を載せるべきなのかもしれませんか面倒くさかったいい絵が見つからなかったので割愛します)

つまり走りたい距離(i_distance)は走りたい距離(i_degree)に対して

     i_distance=トレッド幅×3.14×i_degree/360

 で求められると思います。

これを台形加速の関数に突っ込んで回転の向きだけ変更してあげれば回転させたい向きに任意の角度だけ回転させることができると思います。

 

JASALAMAのソースコードでは台形加速の関数に引数としてモードを選択できるようにしてその値に応じて直進、右折、左折、後進ができるようにしていました。

(もっとも後進は1度も使ったことありませんでしたがw)

 

なんだかとてもぐちゃぐちゃした説明の記事となってしまいましたが今日はここで終了とします。

 

次は走行系で書き忘れてたことがあればそれを書くか、センサー(チャージ発光)か左手法あたりを書こうと思ってます。

 

ここまで汚い文章をお読みいただきありがとうございました。

(^.^)/~~~

.

 

 

 

 

 

JASALMAのプログラム解読Part1 走行系1

お久しぶりです。

 

やばいテストを4日後に控えて余裕がないのに現実逃避するために書いているブログです(-_-;)

 

さて、今日は前々から書こ書こうと思っていたJASALMAのプログラム解読、そのPart1として走行関連、主に台形加速付近までを書ければと思っています。

 

注意

ブログ名でも記しているように独り言ブログなので、あくまでも自分個人の考え、実装であり正しいor最適なものだとは1ミリも思っておりませんのでその点はあらかじめご了承ください。

というかこうしたほうがいいんじゃない?等々あればコメントでも見かけたときにでもTwitterにでも書いて教えてください。

 

まずJASALMAで使用しているモータはステッピングモーター(オリエンタルモーターさんのPKE243A-L)です。

ステッピングモーターの詳しい原理等は省きますが簡単に言うとパルス波が入力されると定められた角度変化するよ、というものだそうです。(ほんまか?)

このパルス波形の生成にはMTUを用いました。

MTUの初期設定やその仕組み(?)等々に関してはデータシート読んでもらえればと思います。

(自分は沢山先輩に助けていただいたので偉そうなこと言えませんが・・・)

書いてあるのはピン設定・カウントのタイミング(ここではMPΦ/1でカウント)・カウントのタイミング・TCNTのクリアのタイミングの設定・割り込み許可・モード2に設定etcです。

そんなこんなでMTUで矩形波が出せるようになるとモータが回るのももう少しです。(ホンマか?)

 

 

さあさあ、ここから実際にモータを動かすためのプログラムを解読していきます。

 

まず大前提としてこのプログラムではCMTで1msごとに速度や壁制御の制御量等々を計算し、その値をMTUの割り込みのタイミングでTGRAの値を変更することでモーターの回転速度を変更しています。

   ↓↓↓

つまり、任意の速度を入力した際にその速度に対応したモーターの回転速度となるようなTGRAの値を出力させる計算式が必要!

 

そのためにすごく参考になったサイト(pdf)がこちら

(正直上のリンクですべて事足りるのでは?とも思いますが頑張って書いていきます・・・)

 

それでは自分の計算用紙を載せとくので説明は省略します。

f:id:kt33-JASALMA:20171222001859j:plain
f:id:kt33-JASALMA:20171222001853j:plain

 

はい、ごめんなさい、これでわかるわけないですよね。

(↑書いた本人もわかってないです...)

 

まずTGRBの値はステッピングモーターがパルスを認識するのにに必要な時間が確保できる最小の値に固定しておきました。

このソースコードでは内部クロック(25[MHz])のタイミングでカウントしています。

つまり1カウントあたりにかかる時間は0.00000004[s]です。

また、1パルスで0.9°回転するモーターであるためステップ距離[mm/1パルス]は

     ステップ距離=直径×π×(0.9/360)[mm/1パルス]

で求められます。ここでタイヤの直径を51.0とすればこの値は0.400…となります。

また上記のサイトよりパルス周波数をfとすればこれは

     f=速度/ステップ距離[1/s] -①

となります。

さらにパルス周波数とはTGRAによって生じるパルスの周期の逆数によって与えられるものであるためその値は以下のように与えられます。

     f=1/(0.00000004×TGRA) -②

ここで①と②よりTGRAの値について整理すれば

     TGRA=ステップ距離/(0.00000004×速度)

          ≒10013/速度

程度となります。のちのちタイヤ径の調整をすることも考えられますからその値は変数として変更できるように書いておくといいかと思います。

(その計算はお任せします)

 

さあ、これで任意の速度でモーターを回転させることができるようになりました。 

 

 

加減速についてです。

台形加速とはその名の通り(?)時刻t-速度vのグラフの概形が台形となるように速度を変化させることを指しています。

なぜそんな加速のさせかたをしなければならないかというと、ステッピングモーターが急激な速度変化に対応しきれずに脱調を起こしてしまうためです。

 つまりいきなり全速力では走り出せないからしっかり遅い速度から加速してやろうな!、という話です。

 

基本的に加減速等の流れとしてはCMTの割り込みの度に速度を計算し、この計算によって得られた値をMTU割り込みにタイミングで先ほど求めた式に突っ込んであげる、という形です。

まず速度の計算には

     v=v0+αt

の式を用います。(厳密にはこの積分としてのしての考え方のほうが近いと思います)

CMTの割り込みを1[ms](=0.001[s])毎と設定しているため速度vは

     v+=0.001×α

と表現できると思います。

 

 これで任意の加速度で速度を変更出来るようになったと言えるでしょう。

 

さらにここからは台形加速や三角加速についてです。

 

・・・と言いたいところですがもう疲れたのと皆さんが突っ込みたいことも溜まってきたころだと思うので今回のブログはここまでとします。

 

それではまた(^.^)/~~~

G

 

P.S.  そういえばテスト前とか書いてましたが、気づいたらテスト終わってました。

明日はcheese杯に向けtの調整、明後日以降はまた新作の設計をやろうと思っています。

Mice総会の振り返り(個人的)

/※この記事は自分の所属している知的ロボットサークルMiceのイベントMice Advent Calendar 2017 - Adventarの3日目の記事となっております。※/

 

皆さんこんにちは!

もう12月ですね。

いやー、もうほんと時が過ぎるのは早いなと感じる今日この頃です。

 

さてさて、今回のブログでは本日行われたMiceの総会の個人的な復習をしていこうと思います。

 

まず何と言ってもこれでしょう…

 

自分、Miceの次期部長だってよ!!

(ええぇぇ・・・)

 

正直自分は人格的にも技術的にもとても未熟な人間なので部長なんて大役がこなせるかわかりませんが任された以上精一杯頑張ってやっていこうと思います。

なのでこのブログをご覧の皆様、今後様々なところでご迷惑等おかけするかもしれませんがどうぞこれからもよろしくお願いします。色々と助けてくださいな!

 

他の役職に関してはここでどこまで言っていいのかわからないので具体的なことを書くつもりはないですが頼れるメンツが揃っていると感じています。

役職任された人もそうじゃない現役生も

     これから一緒に頑張っていこうな!!

       (老害の方々はこれからも色々と頼ってしまうと思いますがよろしくお願いします)

 

後はSlackの導入とか中々に重い話が沢山ありました。

この辺の細かいお話はこの辺?を参照してください。(ほんまか?)

 

ほんと老害の方含め先輩方皆さんしっかりしててこんなふうになれるのだろうか、と言う感じです。

 

(あれ?意外と早く終わってしまった・・・?)

ここからは総会関係ない個人的なお話を少々。

  • まず現在設計中(設計準備中)の新作について

クラシックサイズマウス

DCモーター:1717

コンセプト:初のDCモーターマウスなので基本的には標準的に

      来年の大会で走ることが第一

      (可能ならフルオートスタートの実現)

マイコン:RX631

ジャイロ:ICM20648(?)

その他:吸引やりたい、JASALMAで使えなかったスピーカーのリベンジ、

    センサーは5つ

といったことを考えております。

こうしたほうが、ああしたほうがいいよというような意見お待ちしております。

どしどしご応募ください。

今後の予定としてはまずCADの操作法を覚えながら、外形、回路等を組んでいくことです。

できるだけ早く終わらせたいな~といった感じで。

 

これは前回のブログで書いたことなのですがJASALMAのソースコード解読を来年以降の新入生のため自分のためにやりたいやりたいと思っているのですがなかなか時間が取れずできる見込みがついていないという現状です。

今後、全然進まない新作の設計の隙間にやっていきたいと思います。

 

 

さて、とりあえず書きたいことは一通り書けたので今日はここまで!

皆様、ここまでお読みいただきありがとうございました。

 

/※この記事は自分の所属している知的ロボットサークルMiceのイベントMice Advent Calendar 2017 - Adventarの3日目の記事となっておりました

 

昨日のブログはこちらとなっております。

大会前すごくデバッグ手伝って頂き感謝と申し訳なさしかない先輩です。

(ただ翌日の投稿者がドМとか言ってるのはよくわかんないですね(。´・ω・)?)

 

明日のブログは今日老害の仲間入りを果たしてしまった元副部長さんです。

内容は未定とのことですが噂でちらっと聞いた話通りならとても興味深そうな内容でした。

※/

 

それではまた(^_^)/~

P

 

 

 

2017年度公式戦終了のお知らせ

本日、全日本マイクロマウス大会が終了いたしました

いやー、とりあえず皆さまお疲れさまでした🍻

 

個人としてはフルオートスタートを目指し、超信地探索はコケないだろうと過信した結果2回目の探索で失敗し、その後のモード選択でも慌てて同じモード(2回探索&3回最短)を選択してしまい、時間が足りず最短は出来ませんでした…orz

 

そもそもクラシック・フレッシュマンの予選も同じモードで挑み、一度最短を決めたものの加速させられるだけの直線もなく、超信地の速度も上げずの最短で予選通過30人中28位とヒヤヒヤな結果でした…(結果発表の間ほんとに胃がキリキリしてました(;・∀・))

いやー、フレッシュマン、レベル高いな、って感じですほんとに。

 

まあ2回目のモード選択でミスったところは悔いが残るけど、それ以外ではやり切った感があるのでよかったかな、と思います。

それでもやっぱり頑張って入れて調整したスラロームも直線加速もお披露目できず悔しい・・・

 

この悔しさは来年晴らすためにまた一年間頑張ろうと思います。

次の機体に関しては自分の中で7:3くらいで決まっております。

まあこれに関しては決まり次第報告したいと思います。

 

というわけで今後はJASALMAでやり残したこと(斜めとか壁切れとか?)を実装できる範囲で実装し、同時並行で新作の設計も進めていこうと思います。(あ~、CAD無理、教えてください...)

 

それと今後このブログでJASALMAに書き込んであるソースコードの解読を行っていく予定です。(来年以降後輩に教えるときに見返すようにね)

自分でもわかるクソなやつやん!(宮川大輔風)って感じのソースコードではあるので突っ込みどころが多々あるとは思いますが温かい心で見守っていただければ幸いです(指摘は随時受け入れております。)

 

ほいじゃ、今日のとことはこんなところで(^_^)/~ C

 

(P.S. ブログタイトル変更しました

前半部の名前の由来については需要があればそのうち書くかも・・・?

後半はその名の通り書きたいことを書いてるので、って感じです。

書き手の名前がないって話に関しては特に名前を付けず行こうかなと考えております(どうせ見てくれるのはTwitter経由の人たちだけだろうし))

はじめまして

はじめまして   〈名称不明〉です。

東京理科大学に通う学生です。

 

自分はMiceというサークルでマイクロマウスというものを作成しており、それを作る際にオリエンタルモーターさんからモーターを無償提供して頂きました。

その無償提供の条件がブログの開設だったのでこのようなブログを作ってみました。

(それにサークル内の伝統?文化?風習?としてブログを書こう!というもがありましたのでそれも理由の1つ)

 

基本的にはマイクロマウス関連を中心に書いて行く予定ですがいかんせん低スペックポンコツマンなので書いてる事が正しいとは思わないでください。

(ご指摘、ご指導お待ちしておりますのでお願いします)

 

最初の投稿としてはこんなところですかね?

不定期で書きたくなったら更新しますのでよろしくお願いします。

(直近だと東北大会とか東日本の話とかになるんですかね?)

 

P.S.サークルの先輩の方々あだ名というかニックネームセンスありすぎじゃないですか?

全然思い浮かばなくて困ります。

何かいい案があれば命名してください...