初めに
本ブログではやった内容技術詳細ではなく、未踏プロジェクトをやってみてどうだったか、どんなことを学んだのか、感じたことといったポエムです。興味のある方だけ読むようにお願いします。あらかじめご了承ください。
概要
今回、2021年度の未踏プロジェクトを終了しましたのでご報告をさせていただきます。今回私はレースドローン向け低遅延IP映像伝送システムの開発というテーマで取り組みました。高画質なデジタル映像伝送かつ、アナログ映像伝送並みの伝送遅延を実現したいというプロジェクトです。FPGAを使った、フレームバッファリングをしない画像処理、MJPEG圧縮やIP送信機構などハードウェア実装など行いカメラから受信機までを30ms程度の遅延でなんとかしましたというプロジェクトです。
一人プロジェクトです。
未踏期間中に思ったこと
よくある感想で申し訳ないのですが、あっという間でした。それだけ忙しかったという感じです。未踏期間は約9ヶ月、作業的には8ヶ月くらいしかありません。この期間でハードウェアを作ろうという人は覚悟して挑んだほうが良いと思います。自分の能力不足という可能性も十分にあり
自分の場合は構想だけあって、基礎技術だけ検証できてる状態で、実際に組み合わせて動作を確かめたりが全然できておらず、未踏期間中に初めて組み合わせて動かすという状態だったのでかなり厳しい戦いだった。特に電子回路からFPGA、CPU、OS、アプリケーションまで触るようなフルレイヤーはかなりハマりやすいのもあり相当苦戦しました。使ったことないツールを使わないといけないことがわかったり、そもそもやり方が間違っており実装できず全部やり直しになったりしたというのもあるんですけどね。
一人プロジェクトは作業中の会話相手がいないし、挫けそうになった時すぐに相談できる人もあんまいないのでそこはグループプロジェクトの強いところだと思います。一人プロジェクトのいいところはなんでしょう・・・。方針だったりやり方を全部自分で決められることと、委託金を全部受け取れるところですかね(笑)
未踏採択者向け
未踏に採択された人向けですが、PMやクリエイターと積極的に絡みに行ったほうがいいです。お世辞にもコミュニケーション得意ではありませんが、それでもアタックしてれば同じものづくり好きな人同士仲良くなれることは多いと思います。未踏に選ばれてるくらいなので実力は確かですし、交流しておいて絶対損はないです。
できるだけオフラインで参加できる機会があればオフラインで参加したほうがいいと思います。やっぱり空気感だったり、移動して話に行けるっという体験はオンラインだとなかなか難しいです。より距離感が近いので良かよくなれる気がする。コロナで大変ですが、めんどくさがらずやったほうが良かったなと思うことは何度もありましたし後悔もありました。
開発をする上で大事だと思ったこと
今回はFPGAやハードウェアまで触るようなことをしました。ハードウェアを開発する人に関係しそうな、未踏期間中に思ったこと(心構え?)を自分用のメモを書いておきます。
1. 一歩一歩踏みしめて行こう
開発をやっていると「ここまではやったことがあるし、大丈夫でしょ」って感じで一段とばしとかしたくなってしまうが、結果としてものすごく最初からやり直すことになったり、解決できない問題が出てきて困ったことになる。その時はクソほど遠回りだと思ってもあとから見るとそれが最短経路だったり実はクリティカルパスだったということもよくある。(あった)
できると思っていることも、HelloWorldからその環境で試して、動くことを踏みして行くことが重要だと思った。最後の方はこの開発方針を遵守するようにして、一歩一歩検証するようにしていました。検証しすぎて動いたときも、そりゃうごくだろ・・みたいなレベルでやったほうがいい。そんだけ刻んでやっていても動かないのがフルレイヤー開発のやばいところなので、どんどん刻んで・踏みしめて実装して行こう。
2. 客観的事実から切り分けを行う
当たり前ですが、客観的事実から切り分けを行うようにします。同じものを何十時間も、何百時間も開発しているとこれができなくなってしまい、主観にハマってしまうとマジで一生抜けなくなってしまう現象が何度も発生しました。徹底的に観測を行って客観的事実を集めることで問題の解決の発見につながることが多い。
どうしても抜けられなくて困ったときは他の人に現状を相談すると主観から抜けられることもある。思い込みはマジで危険なので常にWatchdog Timer的に確認するようにしょう。
3. 今やっていることは本質的なのか工程なのかを考える
細かい枝葉のところで絡まっていても、マジで一生終わらない。これは自分あるあるですが、なんか作っていると気になってしまってそれを治すのに時間がかかったり、デバッグ用ツールの開発にものすごく時間を書けてしまうことが多発しました。未踏プロジェクトではかなり膨大な工程があり、全て一人でやる必要がありました。全体を見て、なんのためにこれを開発しているのか。なんのためにバグを直しているのかを考え直してみるのも良いかと思います。
本当に今回の実装の中で必要なところはなにかを考え、必要に応じてその実装を諦めたり、別のやり方をとったりすることが重要。いまハマってるところって本来の筋から必要なことなのか?よく考えるべき。クリティカルパスならやるべきだし、やらなくても良いことはたくさんある。ある程度できているのであればそこでハマっていてもしょうがないので別のやり方をしてもよいのかもしれない。
それでも最終的に使えないことがわかって捨てないといけなくなったり、作り直しになったりするものなので難しいところです。ハマってる・こだわってる時間は全然ないです。
4. 石橋を叩き壊す
これは1とも被るところですが、ハードウェアは石橋を叩き壊す勢いでやらないといけない。徹底的に検証して、検証しすぎて動いても嬉しくないくらいには検証しましょう。特にフルレイヤーの場合は叩き壊したとしても動かないことはよくある。頑張りましょう。
5. やってきたことは確かに生きる
奇跡はおこらず、そこにあるのはこれまでにやってきたという事実だけでした。結局失敗してしまい、役に立たなかったとその時は思っても、それは確かにやってきたことになるので大きな積み重ねになる。コツコツやるとはよく言うが、どちらかというと、やってきたことだけが自分の礎となると感じた。奇跡を願うのではなく積んできた、踏み固めてきた地面がいかにしっかりしているかが実装物完成のために重要であると思った。
6.しっかり休もう
継続して頑張るためにはやっぱり休まないとだめ。毎日睡眠時間をキッチリ8時間はキープしていました。うまく行かなすぎて発狂したときも寝ればまあなんとかなっていたので寝るのは大事だと思います。しらんけど。
まとめ
完全にポエムで公開するのが恥ずかしいんですが、誰かの役に立てば嬉しいです。
謝辞
本プロジェクトでは@homelith様 @ryuz88様 @ikwzm様 @ciniml様 他FPGAコミュニティの皆様に多大なご支援をいただきました。この場をお借りして御礼申し上げます。プロジェクトを見ていただきましたさくらインターネット株式会社田中PM、各種手続きをご支援いただきましたIPA未踏事務局の皆様にも深く感謝いたします。