この記事はSSSRC Advent calender 2023 10日目の記事として書かれています.

 

 

 

お久しぶりです B4の中西です.以前ブログを書いてからかなり長い年月が経った気がしております.

 

今日はCanSat講習で行う気球試験で使用する放出機構のお話をしようかと思います.

 

 

 放出機構の概要

ではまず,放出機構とは何ぞやというところから

 

 

数日前の投稿↑でT先輩も触れていた通り,新入生にCanSatの製作をさせて衛星やロケットを開発する基礎を身に着けさせます.まぁ画像のようなやつを作るんです(今,新入生が頑張って作ってる)

で,これを上空にある気球から落としてくるわけですよ.これを落下させる装置を我々は放出機構と呼んでいます.

 

さて,新入生教育委員長のK氏より重要な放出機構の修繕というタスクを拝命していたにも関わらず,長い間放置していましたが12月17日に気球試験があるということで,重い腰をあげていま修繕をやっとります

 

あぁぁぁぁぁぁぁぁぁぁぁ あと7日しかないのにまだ終わってない 

 

 

戯言はさておき,放出機構の基本的な構成は以下の通りです

 

 

配線とかは適当なんで,そこは気にしないでください.

 

押しボタンが5秒間押されると,その情報が無線機を介して相手側のマイコンに伝えられます.

気球側のマイコンはその情報を受け取るとサーボモーターを回転させてCanSatを落下させるといった具合になります.

 

温気圧センサがついてるのは上空と地上での温度と気圧を記録して,気球のおおよその高度を求めます.

求めた高度や温度の情報をモニターで表示するというこれまたオシャンティーな機能もついてるんですよ

 

 

 

 カイゼン

放出機構について大体わかったところで,次は今の進捗について説明します.

 

この放出機構ですが,過去にM先輩が何回かブログをアップしてますので興味ある人はこちらも見といてください.

 

 

 
多分一年くらい誰も使ってなかっのでとりあえず現状を確認するところからやりました.
で,分かったことは
 
①放出機構はこれが使えそう
②テープでぐるぐる巻きにして固定してる
③去年はアンテナが折れてそのまま
という感じです
 
 
そういうことで放出機構のカイゼンを行いました.
 
 
 
 

1つ目がアンテナの形状です

昨年Xbeeモジュールが破壊された考え方としては2種類あり,風にあおられてアンテナに瞬間的に大きな慣性力がかかってモジュールが破断した可能性と,アンテナにひもが引っかかって破壊されたというものです

 

アンテナに瞬間的に大きな慣性力がかかってXbeeが壊れた場合について直接SMAコネクタが取り付けられており,アンテナが片持ちはりとして作用し,これが折れた原因と考えられます.

 

 

ということでまずアンテナの形状を変更するべく,SMA同軸を接続するXbeeは使用せず,図の様なアンテナを利用できるU.FLコネクタのモデルに変更しました

はり全体に分布荷重がかかった時の最大せん断応力は機械を学ぶ学生は簡単に計算できますよね??

 

また,ひもの引っ掛かりが他の機器に影響を与えないよう天井も付けることにしました

 

 

 

 

 

2つ目の改善点がトグルスイッチの取り付けです.

これは新しい取り組みなのでどうなのか分かりませんが,使ってみて評価したいところです.

 

 

2年前の気球試験では電波が届かない(届きにくい)ことがありました,電波が届かないことの要因としてはいくつか考えられますが,昨年のこともあるのでガーン無線機が使えなくなっても開放する機構が必要という判断になりました.電波が通じないとスイッチを押した信号が気球に伝えられず,CanSatの放出もできないということです

 

このスイッチを用いることで時間計測で放出するモード,コントローラーで放出するモードを選べるようにしてます.

 

さぁ利用者の視点に立って考えるとスイッチを切り替えたらモードも切り替わるようにするのがいいです.マイコンのリセットスイッチわざわ押すの面倒といわれかねない.

 

ということで,割り込み処理を使ってスイッチが切り替わった瞬間にマイコンをリセットするようにプログラムを書いて

 

 

こうしておけばええわけですね

 

 

 

3つ目がコネクタ類,リード線の整理です

 

で,電池と基板を(テープでぐるぐる巻きはださいので)どう固定しようか問題です.

曲面なのでどうかとは思いましたが穴をあけてネジで固定することにしちゃいました

 

てことでまずは基板を固定して

 

 

 

 

そしたら次なる問題は線の長さが足りないんですね.

 

リード線を延長する方法は色々あるんですけど,(圧着やら熱収縮チューブやら使ったりと)面倒なことが嫌いな中西さんはあるものが目に入るわけです

これは熱収縮チューブの中に低温はんだと接着剤が入っており,線の接続と防塵等が一気にできる優れものにいなります.ただこれ一個90円もするのです.(高い..と感じる貧困脳)

 

ええ値段するなぁと思いつつ,一回使ってみたかったんで買っちゃいました.

 

繋げる線の被膜をはがして,中に突っ込んで,いい感じで火であぶったら引っ付きましたぁぁ

う~~ん なんかできているのか分からんけど,ととりあえずヨシ!ってことで延長が終わりました.

 

てな感じでそれっぽいところまで放出機構ができてきたという現状です(まだできてない)

 

 まとめ

はい,ということで長々と書き綴りましたが17日までにはちゃんと作ってCanSatの試験が実施できるようにしていきたいと思います.

 

来年以降も誰かが引き継いで素晴らしく独創的な放出機構を作ってくれることを願ってます(僕にはできない)

 

 

あと,先日SSSRCでバーベキューしたんですけれども,その際に酒を飲み過ぎて迷惑をかけた3人組が次回より3日連続でお届けしますので楽しみにお待ちください.

 

 

 

言い訳とはじめに

Tくんアドカレの順番変わってくれてありがとう.最近C++が親友な黒岩です.

僕がPythonのDIライブラリを使ってみたかっただけなので,多分わからないです.

ブラウザバックを推奨します.いや,もはや読むな.まあアメブロってプログラム書く場所でもないっすね.キレました.結構段階的にコード書いたりしたんですけどね.載せられないんで,この辺に興味を持つきっかけになればいいです.詳しくは聞きにきたら何時間でも付き合います.いやあ,Qiitaに書くべきなんでしょうね.............ここまで読んでしまいましたね.始めます.

 

人は,何かに依存して生活しています.依存は必ずありますが,過度に依存することは良くありません.依存とはうまく付き合う必要があります.プログラムも同じです.

本題

依存性逆転の法則とはwikiより,以下の通りです.

  1. 上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも抽象(例としてインターフェース)に依存するべきである。
    "High-level modules should not import anything from low-level modules. Both should depend on abstractions (e.g., interfaces)."[3]
  2. 抽象は詳細に依存してはならない。詳細(具象的な実装内容)が抽象に依存するべきである。
    "Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions."[3]

何を言ってんだという感じでしょう.まあ大切なのは,抽象に依存しましょうってことです.

 

キーボードをPCに接続する時を考えてみましょう.

下位モジュールは特定のキーボード,上位モジュールは特定のPCです.抽象はUSBですね.依存性逆転の法則に違反すると言うのは,特定の PCに向けてキーボードを作ってしまうのです.つまり,USBの規格から逸脱する.(なんか,新しいポートが必要そうな気がしますね.)そのキーボードは,そのPCでしか使えないといったことが起きます.

 

僕たちは宇宙に関する団体なので,宇宙ぽいことを題材に依存性について書いてみたいと思います.発電量計算のために.衛星パネルと太陽光のなす角の余弦を求めるコードを書いてみました.

このプログラムはcalculatorから軌道クラスorbitと姿勢クラスattitudeを用いて,1パネルのなす角を求めるプログラムです.

 

最終的にこんなプログラムを書きました.

calculator.py - メイン 軌道と姿勢のクラスを使って計算する

bindings.py -  DIライブラリの設定

IOrbit.py - 軌道クラスのインターフェイス

Orbit.py - β角を用いた軌道クラス (https://ameblo.jp/sssrc/entry-12716333438.html)

SkyfieldOrbit.py - skyfieldを用いたTLEから計算した軌道のクラス(時間は合わせてない)

IAttitude.py - 姿勢クラスのインターフェイス

Attitude.py - 姿勢クラス

 

 

何も考えずにプログラムを書くとすると,依存関係はこのようになるでしょう.(もちろん,こういった場合は規模がかなり小さいので,これでいいです.)

 

この時の問題点を考えてみましょう.

- クラスのどれかに変更があったときに,その影響が他にも伝播する.

- テストができない

- 密です

 

では,抽象に依存させてみましょう.抽象はインターフェイスを作ります.インターフェイスとは,クラスが持つべきメソッドを規定するものです.USBも規格がありますね.ちなみにPythonはABCという抽象規定クラスを定義できるやつがありますが,僕はあんまり好きじゃないので,必要なメソッドを定義してraise Not Implemented Errorとしてます.こうする人も結構いると思います.監修的にInterfaceの頭文字のIをとって名付けがちです.OrbitとAttitudeのインターフェイスをIOrbitとIAttitudeとしてしまいましょう.さあ,依存関係はどのようになるでしょうか...水色がインターフェイスになります.

 


 

濃い青色同士が直接つながらないのが確認できるでしょう.こうすることで,プログラム同士が疎結合になります.
 

 

では,AttitudeクラスがIOrbitクラスに依存していますが,プログラムではどのようになっているのでしょうか.簡単に思いつくのは,OrbitクラスをAttitudeクラスで生成するとかですが,それではいけません.依存性逆転の法則に反してますね.では,コンストラクタで与えるのはどうでしょう.今回は.こんな感じで描いてみました.コンストラクタで,orbitを受け取りインスタンス変数に保持しています.コンストラクタの型ヒントをIOrbitとすることで,エディタも抽象(IOrbit)に対してのメソッドを表示してくれます.ちなみに,pythonで型ヒントを使ってないやつはヤンキーです.更生しましょう.僕に聞きに来てください.

こうしていると,IOrbitクラスを継承したクラスならこのAttitudeクラスをうまく繋がることがわかります.実際にOrbitクラスと新しく作ったSkyfieldOrbitクラスを比べてみましょう.
 
インターフェイスで定義したIOrbitをオーバーライドする形で同じメソッドが定義されていますね.こんなの実装中にミスっちゃうよー!って言う.そこのあなたはインターフェイスの魔力にまだ気づいていません.IOrbitのインターフェイスを見てみましょう.
依存性逆転の法則に違反せずに書けば,他のモジュールがIOrbitだと思ってメソッドを呼びます.同じ名前の関数でオーバライドされないとNotImplementedErrorが起きます.動かないコードをできたと思う人間はいないですからね.(ただし,JavaやC#ほどの強制力がないのは事実です.mypyを使ってエラーの表示などを工夫して初めて効果が出ます.やっぱりmypy使ってないとダメです.更生しましょう.)こういった形で,クラスを書いているとテストがしやすくなります.最近はcopilotがテストを生成してくれますね.github coplilotは学生なら使いましょう.

 


さあ最後です.Calculatorでは,IOrbitとIAttitudeに対応するクラスを用いる必要があります.これが二つとかだといいんですが,複数増えてきて,IAttitude -> IOrbitだけでなくISolarPanel -> IAttitude , IOrbit,IBattery -> ISolarPanel, IEquipmentsなどと依存関係が増えてきたらどうでしょう??(まだまだ少ない.もっと増えます.)ちょっとやってられないですね.そこで活躍するのがDIライブラリです.今回は,以下のものを使ってみました.
 
では,実際に設定しているところと生成している場所を見てみましょう.
インターフェイスとクラスの結びつきをここで設定します.scopeは,そのクラスのライフタイムとインスタンスを管理するために必要です.今回設定しているのは,アプリケーションのライフタイム中に一度だけ生成されます.もし何個も生成されると,姿勢が依存する軌道と,太陽電池が依存する軌道が違うなんてことに!!!!!!!!!!!!!
 
このような設定をすると,以下のようにmain側でクラスを簡単に生成できます.(@injectは他のクラスにもつける必要はある.)
 
 
この一覧の流れで,DIおよびDIライブラリを用いたソフトウェアが作成できます.このCalculatorは結構テキトーに書きました.

こういう話をするとコードが書きにくくなっちゃう人へ
世間では,クソコードと呼ばれるものがあります.僕もなんだこれ?ってものに会いましたし,書きました.クソコードはストーリーがあります.期限や納期が差し迫っていた.技術がなかったなどなど.そのストーリーを考えてみると,微笑ましいものです.また,そのストーリの中で最適出力がそのコードです.その時の全力で書いたそれなりに動くコードです.クソコードなんて言わずに,可愛がりましょう.あとは俺に任せなという気持ちで取り組んでやりましょう.それでは本当のクソコードでお別れしましょう.これだ!!!!!!!!
 
import numpy as math
import math as np

この記事はSSSRC Advent calender 2023 8日目の記事として書かれています。

 

Bonjour!

1年ぶりですね.3回生になった松下ですチュー

去年は「先輩との良好な関係の築き方」という,とっっっっっっっっっっっっても飛び出すハートすっっっっっっばらしいキューン記事を書いたので,後輩諸君にはぜひ読んでいただきたいですね笑愛笑

↓リンク

先輩との良好な関係の築き方

 

さて,気付いたらもう2023年も終わりですよガーン泣

今年は個人的にものすごく色々ありました.

 

その中でも一番刺激的だったのは,やはりアメリカに行ったことですかね.

 

そう!

ついに!!

念願の!!!

アメリカに行きましたぁぁぁぁぁぁ!!!!

 

子供の頃からアメリカに憧れて,ロケットに興味を持ってからアメリカ以外に興味を示さなくなって,ついに太平洋を渡ることができました笑い泣き笑い泣き笑い泣き

ということで,今回は僕のアメリカ体験記を書こうと思いますカエルケロケロ

 

ホットドッグ左1.旅程ホットドッグ右

アメリカに行ったのは今年の2月末ですね.

名目上は留学ですけど,6日間しか滞在してないので実質旅行ですねてへぺろ

僕を含め5人でアリゾナ州のフェニックスというところに行きました.

留学先はEmbry Riddle Aeronautical Universityという航空大学校です飛行機

 

費用はなんと・・・

 

30万円!!

 

どっひゃぁぁぁぁぁぁぁぁぁぁぁぁぁぁ札束札束札束札束札束

たっけぇよ!おい!

 

まぁ,初めての海外だし,ずっと憧れてたアメリカですからね.

その分張り切って行きましたよプンプン

 

にしても飛行機がなっっっっっっがいえーん

行き9時間絶望

Twitterも使えないしオエー

しかも飛行機のど真ん中の席だったので一睡もできませんでした泣

で,帰りは12時間ガーン

でも帰りは隣が空いてたので(窓側の2列席を独占だぜニヤリ),ぐっっっっすり眠れましたふとん1ふとん2ふとん2ふとん3

 

でも隣の席が空いてたからって勝手に使っていいんですかね.

CAさんには何にも注意されなかったけど.

声かけられないほどに疲れてた様子だったのかなネガティブ

 

まぁ,アメリカが充実しすぎてたんでね.

30万円払った甲斐があったと思いますよカエルケロケロ

 

アメリカでは観光したり,特別プログラムを受けたり・・・

ほんとに一瞬でしたねスター

 

ホットドッグ左2.アメリカ観光ホットドッグ右

アリゾナ州に来たということでね.

もちろん行きますよね.

 

そう!

グランドキャニオン飛び出すハート愛飛び出すハート

 

 

何やこの壮大さ.圧巻すぎやろ.

何も言えねぇー

死ぬまでには訪れたかった場所ですしね.

こんなに景色もいいし.やりたくなりますよね.

 

デーーーン!

キラークイーンキラキラ

これで夢が1つ叶いましたハート

 

ダウンタウンってやつにも行きましたよ.

 

 

これよこれぇ!この感じよ!
アメリカ!アメリカぁ!!

興奮するねぇ⤴︎⤴︎⤴︎⤴︎⤴︎⤴︎⤴︎⤴︎⤴︎⤴︎

こんなにテンションが上がってしまうとね・・・

 

デーーーン!

キラークイーン!!

 

失礼しました.

キラークイーンが出てしまいました.

 

まぁ他にもセドナとか色々行ったんですけど,長くなっちゃうんでこれくらいにしとこうかな.
死ぬまでに行きたかったグランドキャニオンに行けてもう感無量ですよ.

 

ホットドッグ左3.特別プログラムホットドッグ右
冒頭に書いた特別プログラムってなんやねんって思った人も多いはず.
先に言っちゃおう.
自分,飛行機操縦しました.

 

ええええええええええええええポーンポーンポーン
なんだってぇぇぇぇびっくりびっくりびっくり

 

あ…ありのまま 今 起こった事を話すぜ!
おれはセスナに乗っていたと思ったらいつのまにか操縦桿を握って離陸していた… 
な… 何を言ってるのか わからねーと思うがおれも何をされたのかわからなかった… 頭がどうにかなりそうだった…


僕もびっくり.
まさか車よりも先に飛行機操縦するなんて飛行機
まぁセスナですけど.


離陸からやったんだよ.すごくない?
さすがに着陸はさせて貰えなかったけど.
隣のトレーナーから.「離陸する?やってみなよ」って.

え、かっるぅぅぅ.そんな感じですか?指差し


意外と簡単でしたキメてる
レバー押してトレーナーの合図で操縦桿引くだけ.(ただし引きすぎには注意注意)
巡航中なんて.思い通りに動きすぎて楽しくなっちゃた.


他にも重G体験とかもしたよ.
もう最高にハイッてやつですよ.ホントに.

まぁこれが特別プログラムのメインイベントなんですけど.
前日の天気が大荒れでずっと飛べないって言われてたけど,本番になってめっちゃ晴れてよかったぁぁ.

 

あとは動画制作したり、大学案内してくれたり…
やっぱりアメリカの大学って広いね.
プラネタリウム使ってプレゼンする授業があるんだって.そもそもなんで大学内にプラネタリウムがあるんや.
風洞もでっかいし.

 

食堂もこんな感じでバイキングよ.

いーなー.アメリカ.
お金さえあればなぁ.
ってつくづく思いましたね.

 

ホットドッグ左4.学生交流ホットドッグ右
もちろん向こうの大学生とも交流したんですけど,というか常に一緒にいたんですけど.
なんだろうね.
「積極性ってこういうことかぁ」ってめちゃめちゃ感じましたね.
日本人には無いというか,根本的に違うというか.


何よりも「この人たちと一緒に仕事したら愉しそうだなぁ」っていうのが1番の感想ですね.
THE・異文化って感じがして、これは実際にアメリカに来ないと分からないと思いましたよ.
あーーー.アメリカ行きたいなぁぁぁぁぁ

 

 

交流のきっかけになればと思って,某たけのこと某きのこを配りまくって,どっちの方が美味しいかってアンケート取ったんですよね.
そしたらなんと,たけのこの圧勝でしたよ.

20人くらいに配って2人だけかな.きのこは.
やっぱり時代はたけのこ.
きのこは黙って味噌汁飲んどけ.

 

ホットドッグ左5.ホームステイホットドッグ右
6日間の滞在のうち,3日間はホームステイしたんですけど.めっちゃ楽しいね.
全部ホームステイにして欲しかった.

 

ホストファザーの息子さんが野球してて,WBC前ってのもあって,野球の話で盛り上がりましたよ.
大谷翔平は向こうでも神らしいね.
同じ日本人として誇らしかったですよ.

 

朝ごはんはやっぱりシリアルでした.
それだけで感動.
しかもシリアルが手作り.
余計に感動.めっちゃ美味しいし.

 

人の家なんで写真は撮ってなかったんですけども.悔やまれますね.

 

ホットドッグ左6.アメリカに行ってみてホットドッグ右

1番の感想は失望しなくて良かったって事ですかね.
よくあるじゃないですか.
期待が先走りすぎて,実際に行ってみたらガッカリするパターン.
実はアメリカ行くまではそれを危惧してたんですよね.


でも,全然そんなこと無かった.
というかまだまだ憧れられると感じましたね.
憧れるのはやめませんよびっくりマークはてなマーク

 

「ここが僕のアナザースカイ」って言えるように,また戻ってこようと固く思いましたねカエルケロケロ

 

 

 

まだまだ話し足りないんですけどね.
ロストバゲッジした話とかね.
ウォルマートとか.
アメリカで出されてる日本料理とか.

 

まぁでも書き出すとキリがないんでね.

これで終わり.
長々とありがとうございましたカエルケロケロ

 

Salut バイバイ