白鑞鴉くんの反省点
この記事はMice Advent Calendar 2019 - Adventarの19日目です。
Advent Calendar2つ目ですよ。ちょっと疲れました...
昨日の記事はebi-chanの「Fusion360で失敗した談
」でした。下板を作ってぜひステッパーマウスを作ってビュンビュン走ってほしいですね!
さて本題です。
今日のブログは「今年作った機体「白鑞鴉」の反省点まとめと次回作は...」のブログです。
新しくDC作る人の参考とかになったら幸いです。
じゃ、まず反省点 から...
①電源のスライドスイッチが押しずらい
ユザーインターフェイスはよく考えろやボケって言う話ですよ。
電源コネクタのせいですスイッチがーーー
見てわかるようにスイッチの延長棒をDMMに発注しました(笑)
②吸引用のモータのコネクタが吸引ファン固定用のせいで刺しづらい。
はいこれも同じです。
いつも外れてたら電源抜いてピンセットで器用につけてました。
③センサーを上手く使えなかった
壁制御が上手く行きませんでした。悲しみ
斜めの制御も前センサー2個ないと無理と思っていました...
しかし実際は斜め45センサーでも壁をよける制御はできました。
はい、大会には間に合ってないですけど、今は一応斜めのときは車の幅寄せみたいな動きをするようなものを書き込みました。うまく動いている気がします。まだ直進でのテストしかしてないのではっきりはいえませんが...
④ファンはアクリルで作ろう
ナイロンだと偏心による振動パない。このツイート見ましたか?やばくないですか。ナイロンの振動。まぁジャイロの位置や半田付けが悪いと言われれば、はい、そうかもしれません...
吸引ファンは精度良いもので作ろうな。MJFとか 使っちゃダメだった...
— しろめのカラス@半田ディザスターの人 (@Solder_disaster) 2019年11月29日
青いLEDがついたら宴会芸モードです。
MJFのファン pic.twitter.com/cXImaFS1UN
アクリルのファン pic.twitter.com/gIPMt2NDqD
— しろめのカラス@半田ディザスターの人 (@Solder_disaster) 2019年11月29日
アクリル精度いいね
⑤組み立て解体が簡単にできる機体を作ろう
うん、よく考えよ
ナット見えますか?ちょっと見づらいかもしれませんがナットのサイズと穴のサイズがあってなく、動いてしまうのでしっかりピンセットでナットを固定しないと締められないというクソ設計です。
⑥壁制御はちゃんと書けなかった
壁制御何も分からない。助けて
⑦センサーホルダー
センサーの角度を帰れるように基板の穴を○にしてたんですけど、それってセンサーホルダーの半分意味を失ってますよね。ばかですね過去の自分...発光部と受光部の相対位置は常に変化しませんでしたがセンサーの向きがぶつかるとかわるのはきついですね。僕は学生大会のときに本番前に最短で死にました
⑧ジャイロの値がおかしい...
今現在ジャイロの値を90/96倍してます。そうすると綺麗に回ります。なぜ??。今までぴったりに回ってないなと思ってて、Cheese杯で90/96倍したら綺麗に走るという悲しい事案が発生しました。
次によかった点です。
①吸引だけは一人前
そのままです。吸引は割といい感じでした。
②コードが少しだけきれいになった?
今までプログラムは自己流というかちょっと変な書き方をしてる箇所がちらほら。先輩に見せていろんなアドバイスをもらいました。これからはもう少し丁寧に応用ができるようなプログラムを書いて行きたいですね。
では最後に次回作について......
(データはまだ)ないです。
今の機体をしっかり反省するまでは次回作を作るのは、やめようと思って手をつけてないです。
一応センサー配置とか基板外形とか考えているんですけどね...
逃げてるわけじゃないですよ(^-^;
以上でブログ内容は終わりです。
明日はtaniho先輩の「QuadSPIを使った話」です!
Pythonでターンシミュレータ
この記事はMicro Mouse Advent Calendar 2019 - Adventarの19日目の記事です。
昨日の記事はけりさんの「自動復帰マウスの紹介」でした。
自動復帰ってすごいですね。初めてみたときはびっくりしました。どんな感じでやってるのか気になっていたので後日じっくり読みたいと思います。
では本題に入りたいと思います。
今日の自分の内容は「Pythonでターンシミュレータ」です。
アンケートで1位だったので書こうと思います。
技術力ないマンが作るものなんでそんなに期待はしないでね…
今回使った総合開発環境は「Pycharm」です。
使ったライブラリは「numpy」と「matplotlib」です。
これを使ってターンシミュレータを作ります。
- 関数の紹介
まず使う関数の紹介です.
Numpy(as np) |
|
np.array() |
配列 |
np.sin(角度[rad]) |
sin波 |
np.cos(角度[rad]) |
cos波 |
np.pi |
円周率 |
matplotlib(as plt) |
|
plt.axis(‘equal’) |
x軸,y軸のスケールを合わせる |
plt.plot(x,y,線幅,線色,線種) |
表に点や線をプロットするやつ |
plt.show() |
グラフの出力 |
- 壁を書く
こんなのを使っていきます。まず壁を書きましょう。
まじで適当に作ったのでもっとうまくできる人は頑張ってみてください
壁を書くプログラムリスト
import matplotlib.pyplot as plt
import numpy as np
x = np.array([0, 360])
y = np.array([0, 0])
plt.plot(x, y, linewidth=2, color="blue")
x = np.array([0, 0])
y = np.array([0, 360])
plt.plot(x, y, linewidth=2, color="blue")
x = np.array([360, 0])
y = np.array([360, 360])
plt.plot(x, y, linewidth=2, color="blue")
x = np.array([360, 360])
y = np.array([0, 360])
plt.plot(x, y, linewidth=2, color="blue")
x = np.array([180, 180])
y = np.array([0, 180])
plt.plot(x, y, linewidth=2, color="blue")
plt.axis('equal')
plt.show()
こんなんで壁は引けます。あとは補助線を自分で入れてみてください。リストが長くなりそうなので今回は壁だけで
最終的にはここまで補助線入れるといいと思います。
- 入力値と変数
下準備が終わったので次は実際にどのような計算を行っていくのかを書きたいと思います。
今回はeuler法の陽解法でやりました。
まずプロットする前に入力値に関して考えます。
初期位置 |
xstart,ystart |
初期角度 |
θstart |
重心速度 |
vg |
最大角速度 |
a |
角加速度 |
ωmax |
角度 |
θgoal |
オフセット |
Lin,Lout |
時間幅 |
dt |
次に途中で使う変数や計算で求めた値について
現在時間 |
tnow |
現在位置 |
xnow,ynow |
現在角度 |
θnow |
現在角速度 |
ωnow |
各種の角加速度が変わる時間(便宜上) |
t2,t3,t4,t5 |
めんどくさいの手書きの図で各時間はこれです。えっ…字が汚くて読めない?気合で読んで
じゃ、変数を定義はここまでにして計算していきましょう.
- 軌道の計算
まずターンの軌道は①オフセット領域,②等角加速度領域(クロソイド曲線),③等角速度領域(円弧),④等角加速度領域,⑤オフセット領域となっています。一つ一つ追っていきましょう。
便宜上は下記の図のように置く
全体の計算として,
時間をずつ足していく
現在の角速度を求める.
現在角度に
を足していく.
の座標に
を足していく.
の座標に
を足していく.
という流れを繰り返すものになっています。
①オフセット領域
これをに足していく.その
を用いて,
これを,
に足していく.
終了判定 が
を超えたとき
②等角加速度領域
これをに足していく.その
を用いて,
これをに足していく.
終了判定超えたとき,三角加速なら現在角度
が目標角度
の半分を超えたときとか?
③等角速度領域
これをに足していく.その
を用いて,
これをに足していく.
終了判定が
超えたとき,多分自分の台形加速はこんな感じの判定だったきがする.
④等角加速度領域のとき
より
これをに足していく.その
を用いて,
これをに足していく.
終了判定 まぁなんでいいとおもいます。②と同じ長さーとか,任せます。自分は,が
超えたときでしたね。三角加速なら②と同じ長さってしてますね。
⑤オフセット領域
これをに足していく.その
を用いて,
これを,
に足していく.
終了判定 が
を超えたとき
まぁさっきと全く同じです。
こんな感じ計算していきました。
今回は細かく領域ごとに説明しました。一般化すると最初に言ったように
時間をずつ足していく
現在の角速度を求める.
現在角度に
を足していく.
の座標に
を足していく.
の座標に
を足していく.
これです。
の関数さえわかっていれば,
を足し続けるの繰り返しです。簡単ですね。多分間違っていない。うん
台形加速②の領域を例にすると
while (now_t-t2)<=max_angle_speed/angle_acc: #終了判定
now_t+=delta_time #時間足していく
now_angle_speed = angle_acc*(now_t-t2) #角速度を変える
now_angle = now_angle + now_angle_speed * delta_time #角速度を角度に足していく
x += delta_time*g_speed * np.sin(now_angle) #を
に足していく
y += delta_time*g_speed * np.cos(now_angle) #を
に足していく
plt.plot(x, y, marker='.', color="red",markersize=1) #plotする
if now_angle-start_angle>=angle/2: #三角加速など条件あるなら…
sankaku_mode = 1
break
まぁ正直行列とか使ってないので全く制御工学っぽくなくてすみません。重心速度一定なんでそのままです。
- 滑り角を考える?
えっとじゃあ最後に滑り角について今現在自分がやっていることを紹介したいと思います。
車体にかかる横方向の力はコーナリングフォースと遠心力があります。基本的に車体は横方向に動かないのでコーナリングフォースは遠心力釣り合っていると考えられます。しかしこの状態にならない場合も存在するらしいです。しかしそんなの低能な自分には無理なので簡単のためコーナリングフォースは遠心力釣り合うと仮定します。次にコーナリングフォースとスリップ角の線形モデルを用います。簡単のためコーナリングフォースとスリップ角は比例と仮定します。実際にはなんかやばい式があります。Magic Formulaモデル?みたいなのがあるらしいです。式見ましたけどあーニュートンラプソンのコードは作ったことあるからできなくはないが…めんどい無理。まぁ以上をまとめると,コーナリングフォースは,
となり,スリップ角は,
となります.ここでのは比例定数です。このスリップ角を
に引きます。
now_angle=now_angle+now_angle_speed*delta_time-K*m*g_speed*now_angle_speed#mいらな
さっきの一文をこんな感じで変えました。正直多くの近似をしているため速度が遅いと合う気がしますが速くなるとやばそう…これあってますかね?マイクロマウス界隈のいろんな人に質問したですね。自分のは自己流すぎて全く自信がありません。
以上がターンシミュレータのお話でした。
明日の記事は枝ピロさんの「今年度機体の反省」です。
僕のもう一つのカレンダーでも反省を書いたんですけどやっぱり反省で大事ですよね。人に反省を見て自分も次の機体で頑張りたいですね。
白鑞鴉くん紹介「DCマウス足回り」
久しぶりのブログです。
最近ブログ書いてなくてすみませんって感じです。
今回はマウス合宿でとある方からブログを書いて欲しいと言われたので書きました。
内容は「白鑞鴉くんの足回り紹介」です。
強強の人はここ変えたほうがいいのでは?みたいアドバイスをお願いします!
DCを初めて作る方は参考になれば嬉しいなと思います。あくまで参考に...まだ完全に走ってる機体ではないので😢
ではさっそく本題に入りましょう。設計で考えた順に説明していきます。
①ギヤ比
40:11や40:13などの大体4:1のギヤ比が多いとよく聞きます。
出したい速度、加速度からモータの性能を加味して、後は寸法上の拘束で大体絞れます。
個人的は変速四輪にするならターンでトルクが必要になるためもう少しギヤ比があったほうがいいと思ったのですが、寸法上の拘束で基板と1717モータ(重いので重心に1番影響する)を接触させるとすると車高が上がってしまうため40に抑えました。
ピニオンを小さくすればいいと思うかもしれませんが圧入角20度の切下げ限界歯数が17らしいので11よりもさらに小さくするのは少し怖いかなって思います。
因みにスパーギヤは入手しやすいということで5の倍数にしてます。
②スパーギヤ周りの具体的な形状
主な部品構成です。
購入経路は、
モノタロウ
・ギヤ
・ベアリング
・シムリング
・タイヤ
DMM3Dプリント
・ホイール(MJF)
ウィルコ
・ネジ(軸)
です。
因みにスペーサーはないです。でもあった方がいいと思います。
詳しくは他の方のブログへ
http://beshiya.hatenablog.com/entry/2017/12/13/005153
具体的な形状を紹介していきます。詳しい仕組みに関しては他の人のブログを参考にしてみてください。上記のMiceの先輩がすごく丁寧に書いてあるのでここでは大雑把に(すみません🙏🙇)
まずは下記の図のようにスパーギヤの穴にベアリングを圧入します。
ホイールも圧入です
軸となる六角穴付きボルトを通し、ナイロンナットで挟み固定します。
③モータマウントの具体的な形状と軽微な修正
まずはホイールの軸の穴とモータの穴の位置から決定しました。
考えたこと
車高は1mm~3mm程度で段差を超えるために1mm以上欲しいですね。ぴったり1mmするとタイヤが摩耗して段差で死ぬ機体になりそうなので少し車高には余裕ほしいですね。ただ車高を上げると重心が上がってしまうので悩みどころですね。自分は大体2mm程度にした気がします。
バックラッシは0.1mmにしました。クラシックは、0.1mmでハーフは0.05mmってよく言われてますね。
厚さは、5mmですね。これで十分強度あります(MJFなら)もっと攻めたい方は頑張ってください。
あとは軽微な修正を繰り返しましたね。
ピニオンギヤと干渉しないように凹ませたり、ナイロンナットが入るように凹ませたり、基板の穴に圧入するために1mmの凹凸を作ったり、ナットを入れる空間を作ったり...等やりました。
詳しく見たい方は下にリンク貼っときます。
モータマウントのみ
足周り全体(軸やナイロンナットとかはないです)
DMMでMJF(マルチジェットフュージョン)のPA12(ナイロン12)を使ってみた
モータマウントとかの素材を何にしようか迷った中、今までのナイロンでもアクリルでもない素材を見つけたのでお試しで発注してみました。
その素材がこれです〜
https://make.dmm.com/print/material/85/
今のところ自分が確認した情報では結構良さそうだと感じました。
選定理由について少し書きたいと思います。
モータマウントに求めていたものは、
①耐衝撃性
②精度
③寸法安定性(吸湿性とか)
④値段...
ですかね?多分
まぁ、壊れにくくて、精度の良いものが良いわけですね。安ければなおよし。
DMMの3Dプリンタでは、
ナイロン(ガラスビーズ強化)→精度が良くない
アクリル→耐衝撃性がない、(値段が高い)
って感じでした。
そこでもっといいやつないかな〜って思いながら他の素材を1つずつ見てたらこれいいなって思う素材を見つけました!
それがさっきのやつです。
素材はナイロン12なので強度は十分な上、精度もまぁまぁいい。 (本当か?)
弱点と言えば、色が黒と灰しかないってことと質感がざらざらなことぐらいかなと今のところ思ってます。
よく調べてみると吸水性が低いし、ナイロン6より軽い!ナイロンの中でもかなり軽い!
よし!試しにやってみよー!
.........後日
その結果がこちら!
普通に良い軽いし、柔らかいから壊れにくそうな気もするし、精度良いし、安いし、いい感じ!
おすすめかも(個人の意見です)
色んなパーツ圧入した結果、いくつか緩いやつがあったので精度がカンペキとは自信を持って言えませんが許容できる範囲だと思います!!
回路設計終わったから皆さんに見て欲しい
新機体のコンセプトと機体名!
今回の記事はMice Advent Calendar 2018 - Adventarの22日目のブログです。
先日の@vinezitさんのブログは、「新作情報&デスク紹介」でしたね。回路図作ってるですね。こっちの方が進捗の暴力を受けている気がします。
みなさんこんにちは。Y.I.さんをI.Sysの人だと間違えてしまった理科大Miceの新副部長のふくだです。
Y.I.さんすみませんでした...
今回初めてのDCマウスを作成中です。機械設計、回路設計全くわからないマンなので今後、Twitterでたくさん質問するかもしれないので返信していただけると幸いです!!
アカウントは@Solder_disasterです。
今回のブログの内容は、「新機体のコンセプトと機体名」です。
コンセプトは3つです!(他にもたくさんありますが特に大事なのを絞って3つです)
1つ目は、「前作の欠点をなくす」です。
前作である半田ディザスター君は、よく接触不良を起こし壊れていました。
そのたび修理、修理、修理してました。
正直言ってすごくつらかったので壊れにくい機体を目指したいと思っています。
具体的な方法はまだ考え中です...
壊れるのつらい...
他の欠点といえば制御の方法ですね。
センサーが4つでジャイロがなかったので自分がしたい制御ができませんでした。
特に斜めのときにうまい制御ができず苦労しました。
今回は、センサの数も向きもよく考えて制作したいと考えています。
いまのところセンサの数は5個か6個にしようと考えています。
6個にしようと思っていたのですが偉大な先輩方の話を聞いてるうちに5個でよくね...っていう気持ちなり、絶賛悩んでいます。
あと機体が異常に大きいという欠点もありました。
キタイオオキイトナナメツライ。
斜めで少し余裕がある機体を作りたいですね~
前作の欠点はしっかりなおしてがんばりたいです!!
2つ目のコンセプトは、「圧倒的ダウンフォース」です。
かっこよく言いましたが吸引頑張りたいってことです。
なぜ吸引を頑張りたいのかというと...
「吸引宴会芸」がしたいからです!
結構前に吸引宴会芸している動画を見て自分もやってみたいと思い、コンセプトに入れました。
自重を支えられる吸引を目指します!!(必ずできるとは言ってない)
3つ目は「設計をしっかり行うこと」です。
自分は機械工学科なのですが今までしっかりとした設計をしたことがありません。
今回の機体ではそこを頑張りたいと思ってます。
モータ周辺の設計、吸引の設計に力を入れたいです。
以上3つが新しい機体のコンセプトです。
最後に機体名を書いて終わりたいと思います。
前作の半田ディザスターの由来は、半田付けが災害レベルでやばかったことから名付けたとテクニカルシートには書いたのですが、ほんとはアニメのキャラクターの名前を少しいじって、半田にかえてつけた名前でした。
今回も同様にアニメから名前を考えました。
半田の名を少し変え、
白鑞(錫と鉛の合金だし、ほぼ半田と同じだろ)にしました。
そして新たな白鑞(シロメ)くんの名は...
名前「白鑞鴉」
読み「シロメカラス」
英名「Solder Crow」
かっこいい(自画自賛)
以上で今回のブログを終わります~
明日のブログは@coffeinTapさんのブログです。
まだ未定とのことですかきっと素晴らしいブログタイトルを隠しているとみんな噂してたので楽しみですね。
全日本が終わりました...
みなさん、こんにちは。
久しぶりのブログを書く半田くんの主です。
今日の話は全日本の感想デスネー
一言でいうと「事故った」ですね。
全日本の2週間前にモータードライバ周りと電源周りに半田クラック?が生じて動かなくなって、モタドラを5個破壊しました(笑)
全日本の4日前ぐらいに次はセンサ周りが故障して、たまに前壁が読めなくなってぶつかるようになってしまいました。
そして全日本の結果は前壁がうまく読めず、探索3回失敗して、4回目で成功したが最短は時間切れでできずに死亡……(o_ _)o パタッ
完走はしたのでフレッシュマンは卒業出来ました(技術的にはまだまだフレッシュマンですが...)
せっかく斜めまで実装したのに...
まぁ、残念でしたが切り替えて次のことを考えようも思ったので、今後の目標(大体、次のcheese杯ぐらいまでの)を決めたので書きます。
目標①
Cheese杯で半田ディザスターの斜め最短成功。
目標②
新機体のプリント基板を作るための知識をかき集める。
そして最後に会場設備を行っていただいた工芸大の人々、車に乗せていただいたそらさん、そして様々なアドバイス(次回作のDCについて)をくれた電通大、芝浦工大、早稲田大、理科大の先輩、etc.....
本当にありがとうございました!!
次回作は頑張ります!