未踏ジュニア Advent Calendar 2023に参加しています!当記事は12-18分です。 成果報告会が終わって、Advent of Codeの存在を思い出した頃、未踏ジュニアでアドベントカレンダーをすると聞きました。この機会を使い、未踏ジュニア期間中の振り返りをまとめます。(If I had more time, I would have written a shorter letter.)
私のプロジェクトは、鉄道模型の世界に没入する為のNゲージ列車全自動運行システム、HATOです(詳細がわからないと追うのは難しいと思うので、すみませんが発表動画を見てもらえると嬉しいです)。
未踏ジュニアでのプロジェクトの大まかな流れはアドベントカレンダーの他記事で書かれている私がかけるよりうまく書いてあるので、ここでは割愛します。
ここからはプロジェクトの軌跡を辿ります。
まず、採択前のインタビューです。ここで一番印象的だったのは「色々やろうとしているみたいだけれど、全て出来るの?」という質問でした。当時は列車を自動運転するシステムの他に、鉄道シミュレーターゲームとの連動やレイアウトを3Dスキャンする特別なNゲージ車両も開発しようとしていました。「自動運転システムからできるだけやります」と言い、連動まで出来るだろうと思っていました。
次はメンターの坂元律矛さんとの初ミーティングでした。ブースト合宿が3週間ほど先だったこともあり、ブースト合宿でどうHATOを説明するか、どこでアドバイスをもらいたいかを決め、スライドを作り始めました。未踏(ジュニア)コミュニティ半分くらいの人がNゲージ・鉄道模型を触ったことがあると思い、簡単なNゲージの紹介だけで済ませました。ところが、Nゲージを使ったことが有る人が思ったより少なかったことに驚きました。ソフトウェアを毎秒いじってるようなハッカーたちは、鉄道模型を根源的に欲しくなるものだと思っていました1。
ブースト合宿も無事終わり、ほぼ0状態から本格的に開発を進め始めます。やはり、Nゲージ車両に電力を送り、状態を測定するモータードライバ装置が一番の課題となりました。v1とv2(下記)は市販モータードライバシールドを使用しました。ですが、モータに大電流を流すと何故かマイコンが落ちる、電流測定の精度が悪い等の問題がありました。 他にも、位相差がある電流が短絡し、大電流が流れる問題もありました。(気になる方は「AT饋電方式」や「異周波数・異相区分切替セクション」と検索してみて下さい)。ハードウェアを使うプロジェクトとして、ハードウェアの信頼性が欠けると、ソフトウェアがほぼundefined behaviourをするか、死ぬか、以外の選択肢はないのです。ハードウェアの問題を解くのには部品調達と実際の工作も含むため、O(log n)でも定数時間2が多いアルゴリズムと同じです。そこで、ソフトウェアを直しても、肝心のハードウェアが完成していないので、TAL3以上のものしか開発出来ない状態になります。モータードライバは8chを位相・周波数差なしで制御出来るよう、一個のマイコンを使い制御することにしました。なので、根本的な解決ではなく、未踏ジュニア期間中ではその場しのぎのような実装となりました。位相差の問題に直面した結果、このような解決法を見つけることが出来ました。
先述した通り、抽象化レイヤー上のソフトウェアを書き、捏ねる時間が相対的に莫大だったので、アーキテクチャやプログラムの構成を比較的確り作れました(やはりハッカーの根源的欲求は抽象化なのかもしれません)。このお陰もあってか、新しいモータードライバ装置等のハードウェア導入は案外スムーズで、ハードウェアが確り出来た後は全体の信頼性も良好でした。(特にハードウェア等ぐちゃぐちゃな世界の)基盤の信頼性は全体の信頼性を直撃します。最低レイヤーのハードウェアとアーキテクチャという基盤が確り整備されていることがプロジェクトの救いとなり、CYYZ-RJTTフライト後、成果報告会数日前にデモ動画を無事取ることが出来ました。
発表数日前に内容が完成するという芸当を出来た理由は他にも有ります。それは、未踏ジュニアの半年で開発するものは、プロダクト・プログラムそのものではなく、直結した知見や経験ということです。例として、結局自動運転システムが~MVP×2状態までしか開発出来ませんでした。ですが、確りした基盤と、開発をn倍する知見や手段を得られました。
大学出願直前の未踏ジュニアだったので、すこぶる忙しかったですが、メンターの坂元さんを始め未踏ジュニアの皆さんのお陰でプロジェクトを楽しく進め、発表することが出来ました。