📡

“SpaceCubics” というJAXAベンチャーでインターンをした話

2023/11/16に公開

はじめまして,Space CubicsでSoftwareインターンをしていた,あべま(@abema_astro)です.

今回はインターンを終えての振り返りブログということで,自分が業務の中で行っていたことや,Space Cubicsの文化について紹介していこうと思います.

インターンのきっかけ

自分がSpace Cubicsのインターンへ申し込んだのは,X(旧Twitter)で人工衛星の基板で遊んでみないかと呼びかけるポストを見たことがきっかけでした.

自分はもともとRaspberryPiとの出会いをきっかけに電子工作を始め,CanSatという模擬人工衛星の製作でも長くRaspberryPiを利用していたこともあって,このポストを見て速攻で会社のHPへインターン希望の連絡を提出しました.

業務内容

インターンは7月の終盤から9月の末までの2か月と少しでした.
面接の際にインターン生が扱う基板(以下インターン基板)として以下の画像を見せていただき自分の業務範囲の希望を尋ねられたのですが,CanSatと呼ばれる模擬衛星の競技を通してRaspberryPiとカメラモジュールを用いた画像処理の経験があったので,①RaspberryPi Zero 2 Wの電力削減と②画像ミッション周辺の業務を中心に取り組みました.

Kick Off

インターンを始めて2週目には札幌にて1週間の対面業務があったこともあり,現地でカメラのパラメータを調整しながら作業をするべく,第1週はLinuxの環境構築に始まり,カメラや公式ライブラリ周辺のドキュメントをひたすら読み漁りながら,ファイル形式やパラメータを変更する簡単なライブラリを作成しながら作業しました.

以前に取り組んでいたCanSatでカメラ周りの開発をしていた際に,どんな環境でどのような外乱を受けるか,その外乱を抑えるためにどのパラメータを調整すればいいのかの経験があったため,あとから実装するアルゴリズムを想定しながら作業を進めることが出来ました.

ちなみに,当時PCのバッテリーが不調だった僕がインターン初日の,一番最初に与えられたお仕事は「PC修理のサポートについて調べるかバッテリー不調を直すこと」でした.
(果たしてその時間もお給料をもらってよかったのでしょうか..…)

インターン序盤

2週目は札幌で対面の作業しました.
事前の話ではカメラ周りの作業を行う予定でしたが,作業の手順を教えてもらえるいい機会だということで業務用のオシロスコープを使った消費電流の測定と削減の業務から取り掛かりました.

RaspberryPiは超小型のPCのようなもので,電源を入れるとHDMIにGUIが出力され,自動でWiFi接続やBluetoothの検索,USB機器とのやり取りを行ってくれます.CPUの性能は低いですが,使用感は皆さんお持ちのPCと全く変わらないかと思います.

ただ,このHDMIによる映像出力機能やWi-Fi,Bluetoothなど近距離の無線通信機能は軌道上に打ち上げると不要な機能であり,むしろ貴重な電力を余計に消費してしまうので,電源投入時からOffになるように設定ファイルなどを書き換える必要があるのです.

600万円くらいのオシロスコープを使わせてもらったようです.
こんな金額の測定器を使うのは当然初めてなのでテンションが上がりますね.

消費電流の測定には秋月電子で市販しているセンサを使って行いました.業務ではもっと専門的な専用機器を使うものだと思っていたので,こういった解像度が上がるのもインターンの良い経験でした.

電流の測定方法はシンプルだった一方,電流の削減には苦労しました.
これまで殆ど触ってこなかったOSの低レイヤ領域に手を出す必要があったためです.

WiFiであればifconfig,USBであれば~/unbindを実行したりすることでそれぞれ無効化はできたのですが,カーネルのバージョンの違いなどによってconfig.txtを変更するHDMIインタフェースの無効化には苦戦しました.

きちんとOSの構成を理解すればそれぞれのデバイスを同じように扱いスマートな方法で無効化することも出来そうな気がするのですが,それは今後の勉強になりそうです.一旦できたところまではまた別にブログに出来ればと思います.


定常状態でのRaspberryPi.Meas1を見ると250mAくらい

今回の作業で色々落とした後.110mAくらいまで電流を削減できた.ノイズも少し減っているっぽい

対面作業の後半日程では再びカメラの作業に戻りました.
カメラ撮像ミッションを実現するためのアーキテクチャを,対面で議論できるうちに固めるためです.検討の際にはオフィスに保管されていた試験用の衛星を使いながら姿勢や運用の状況を想定しながら議論を進めました.


検討に用いたホワイトボード.

エンジニアリングモデルと呼ばれる試験用の衛星.
ここに今回作成している基板とプログラムが載る.

Space Cubicsの皆さんはとても暖かく迎えてくださりご飯もたくさん食べさせていただきました.
また,このブログを書くまで社員さんにも言ってなかったのですが,調子に乗って食べ過ぎたので2日目以降は消化不良による胃痛と戦っていたという裏話もあります(ありがとうございます!!!).

インターン中盤1

今回のインターン基板が衛星に搭載されて宇宙に行くときは,より中心的な役割を担う司令塔のような基板(MOBC : Main On Board Computer)からの指示を受けて初めて画像を撮影したり,情報のやり取りをしたりします.

そこで北海道での対面業務を終えてからは,このMOBCから通信による指示を受けてインターン基板が仕事をするようにプログラムを書き換え,更新していきました.こうすることで少しずつソフトウェアを実際の宇宙仕様に近づけていきました.

Space Cubicsが開発しているOBC (会社ホームページより)

具体的には,これまでラズパイのターミナルに直接触って実行していた画像撮影や情報の取得といったプログラムを,MOBCからの指示を受けて適切に実行させ,必要に応じてMOBCに対して情報を返すようにアップデートしていきました.

衛星に搭載される情報は,電子工作をしたことがある人には馴染み深いUARTや,宇宙機に特化しているSpaceWireやCSPなどのプロトコルによってやり取りされますが,今回の実験用プログラムでは開発を簡単に進めるため,インターネット通信でも使われるUDPというプロトコルを用いました.

インターン中盤2

MOBCとインターン基板の通信に関する開発の他には,画像データ処理について実装していました.宇宙空間で画像を撮影しても太陽光が明るすぎて画像が白飛びしてしまう場合,逆にカメラに入射する光が少なすぎて黒潰れする場合,上手く取れたけど地球とは異なる向きを向いている写真を撮ってしまう場合など,様々な故障のパターンが考えられます.

宇宙と地上との通信リソースは限られているので,極力そういった「失敗した画像」は地上へ送信しないようにインターン基板の中でふるいにかけます.

画像評価のプログラム作成に使用した素材.リーマンサットプロジェクトという衛星開発チームの発行する書籍を参考にした.

今回はその評価方法として①画像の二値化と②画像フィルタの適用を検討しました.

画像の二値化においては,画像に含まれるすべての画素に対して一定の条件のもと処理を行って,そこで決めた閾値を超えるか否かでピクセルを0か1に分類します.

今回は画素の二値化に対する条件としてピクセルの輝度を利用しました.今回打ち上げる人工衛星が撮影する可能性があるものは太陽・地球・宇宙空間そのものの3つのうちどれかであると考えられます.写真には宇宙空間はほぼ真っ暗に映り,太陽か地球のどちらかが一定以上の明るさを持って画像に映る,と考えたが画素の二値化条件に輝度を用いた理由です.今回は実装できませんでしたがここにさらに,青い画素の割合を判定条件に追加すればきちんと画像の中に地球が映っているかが判定できるという仕組みです.

画像フィルタの適用においては,隣り合う画素の変化量を見る微分フィルタ(ソーベルフィルタ)やラプラシアンフィルタと呼ばれるフィルタなどを比較検討しました.画像全体で見た時,きちんと明暗やピントが調節されている画像では隣り合う画素同士の変化量は大きい,逆に白飛びや黒潰れ,ピンボケが起きている画像では隣り合う画素同士の変化量が小さいだろうと考えたのがこの条件を設定した理由です.

つまり画像の二値化によってそもそも画像に被写体(地球)が映っているかどうかを,画像フィルタの適用によってその画像が良い画像かを判別する仕組みです.


画像に輝度を基準とした二値化の処理をかけた様子.画角に太陽と地球の両方が入ったときの処理が大変.

これらの処理で得られたデータは画像のメタデータにXMPと呼ばれる形式で書き込み,どれほど正常に画像が撮影されているのかを見積る指標とします.露光時間やゲインなど画像を撮影するときのカメラの条件をパラメータと呼ぶのですが,ここまでの一連の処理を複数のパラメータの組み合わせで実行し,最適な撮影条件を探すような機能も持たせるつもりでしたが,そこまでの実装には至りませんでした.

ただ,画像の自動評価までは実装できなかったものの,それを行うための撮影パラメータなどをメタデータとしてXMP形式で保存したり,タグをつけて管理したり,必要に応じて読み取ったりすることまでは出来ていたので,悔しさが残ります.

インターン終盤

ここまでで分かるように,インターンでは好き勝手に色々な分野に手を出させていただいたのですが,最終的には出来た成果を会社のGitHubにコミットしなければいけません.

インターン終盤はプログラムの整形とGitとのやり取りが多くの時間を占めました.

これまで自分は部活動・サークル単位での開発しか経験が無かったのですが,コーディング規約に従う,ライブラリをモジュール化するといった簡単なことから意識することが無かったので初めてソフトウェア屋としての世界に足を踏み入れた感覚を覚えたのがこの時期でした.

また,Space CubicsはLinuxをメインPCとして扱っているクールな社員さんが多く,ターミナルにおけるGit操作に関しても多くの手法を教わりました.

メッセージの書き方,プルリクエストの送り方,コミットの仕方などはチームの文化に依存するので,こういった形でインターンとして受け入れてもらいながら実際に手を動かすことで,大きな学びが得られたと実感しています.

インターン前にやっていてよかったこと・事前にやっておきたかったこと

自分が宇宙スタートアップでのインターンを意識し始めたのは大学1年生の頃、CanSatチームの顧問の先生に「CanSatが終わったらうちの研究室初のスタートアップでインターンしてみないか」と仰っていただいた時でした。

大学生のものづくり競技にはNHKロボコンや鳥人間コンテストなど様々ありますが、CanSatはそもそもが模擬衛星なので、開発を通して「実際の衛星ならこうする」という事を考えながら回路設計やプログラミングを行います.ここで学んだ衛星(っぽい)知識はインターンでも活きたかなと感じています。

また、CanSatの応用として勉強していたVisual SLAMや今年に入って友人に勧められて取得した情報処理技術者試験の知識も、このインターンで活躍しました.


Visual SLAMについて学習・研究していた際,特徴点抽出についての検討したスライド

CanSat開発のレビュー時の写真

もちろんCanSatそれ自体の経験も大いに役に立ちました.自分は海外の砂漠で行われるCanSatの大会に参加していました.このようなCanSatと衛星の類似な点は,「実際に運用するまで分からない環境を想定して開発を行うこと」です.衛星を開発する上では「無重力下で衛星がどのような挙動をするか」「宇宙空間でどのように画像が撮れるか」「放射線によってコンピュータがどのような動作をするか」を考える上では,この経験で得た思考のプロセスが活きたように思います.

一方で,実際にOSや通信プロトコルを触るとなると,それ専門の知識や経験が不足しているとも感じました.そのため,インターンが始まってからはLinuxOSについての勉強を行ったり,実際に自分で別のソフトウェアを作成したりしながら取り組んでいました.

OS,shell,プロトコル,ネットワーク等々..….
このあたりはインターンが始まる前にもっと勉強できたらよかったなと思っています.
https://github.com/spacecubics/scsat1-rpi
インターンで最終的にアウトプットしたものはここのリポジトリに入っています.

Space Cubicsインターンまとめ

ここまで書いてきたことが,自分がSpaceCubicsのインターンで取り組んできた内容の一切です.端的な感想としてはめちゃくちゃ楽しかったです.

これまで,自分はバックオフィス分野のインターンやアルバイトの経験はありましたが,技術系インターンってどんな雰囲気なんだろう..…という不安はつきまとっていました.

それでも実際初めてみると作業の自由度も高く取り組ませていただき,インターン生自身の興味が有り,取り組みたいと思った分野を最大限尊重して作業させていただいたので,モチベーションもキープしながら2か月を過ごすことが出来ました.札幌のオフィスを訪問して作業をしたのも忘れられません.今回のインターンはソフトウェア中心でしたが,オフィスにいる期間はハードウェア専門の方にもお話を聞くことができたり,今回インターン生が触れている以外の開発事業について教えていただいたり,社員さんの宇宙分野の開発/運用経験についてお話いただき,エンジニアとしての知見もしっかり注いでいただきました.


OBCは片手サイズ.大きなFPGAがカッコいいです

胃痛で落ち着かなかった筆者はバランスボールの上で揺れていました.

滞在期間中には札幌の推進系宇宙スタートアップLetaraさんにもお連れいただいたり,北海道大の小型衛星やロケットに関する展示を見たりと札幌の土地や食べ物の魅力もインプットしてきたので,ここもいつか別ブログに出来たらと思います.

このSpace Cubicsのインターンで心残りがあるとすれば,まず他のインターン生との交流があまり持てなかった点でしょうか.きっと他のインターン生も素晴らしいエンジニアだと思うのですが,今回の2か月のSummer Internの間では直接話す機会や連携する機会が殆どなかったので,刺激と知見が得られるチャンスを逃してしまった..…と思っています.今後インターンをされる皆さんはぜひ積極的に交流されてください!

また,この2か月で実現できた作業内容は,自分の中での完成イメージにはまだ遠く及んでいません.作業している中で見つけたよりよいやり方や追加の機能もあります.もし今後Space Cubicsでのインターンに携われるチャンスが再び巡ってきた場合には,これらのシステムを完成させたいと思っています.

Space Cubicsは多くの宇宙システムの知見を持つコンピュータ会社です.宇宙や人工衛星が好きな人からも,プログラミングやコンピュータが好きな人からも応援していただけると,僕自身も嬉しいです.
またインターンもまた募集するとのことなので,ぜひ,HPやSNSをチェックしてみてください!
https://spacecubics.com/
https://twitter.com/SpaceCubics

Discussion