Upgrade to Pro — share decks privately, control downloads, hide ads and more …

探査機自作ゼミ2025スライド

Avatar for sksat sksat
August 15, 2025

 探査機自作ゼミ2025スライド

セキュリティ・キャンプ2025 開発コースYトラック『探査機自作ゼミ』の事前学習および当日に使用したスライドです

Avatar for sksat

sksat

August 15, 2025
Tweet

More Decks by sksat

Other Decks in Education

Transcript

  1. 講師⾃⼰紹介 • sksat(えすけーさっと) • ArkEdge Space Inc. コンピューティング基盤部 / 筑波大学情報科学類 • 宇宙オタク

    -> パソコンオタク -> 宇宙パソコン野郎 • やってた: OS、x86エミュレータ、数値計算、小型ハイブリッドロケット、 自宅サーバ • やってる: (超小型人工衛星の)OS/Framework、シミュレーション基盤、 CI/CD、姿勢制御系、社内システム • 趣味: 自宅サーバのオーバーエンジニアリング、VRChat • 気持ちがあるところ: 実在する複雑性の咀嚼と妥当な対処の案組み これ中指じゃないです→
  2. • 「リモートセンシング」 • カメラで画像を撮ったり ◦ 可視光? ◦ 赤外線? ◦ 電波?

    • センサーで値を取ったり ◦ 磁気? ◦ 重力? • メリット:広範囲な観測 • デメリット:細部は分からない 周回軌道からの観測
  3. 具体例:MRO Mars Reconnaissance Orbiter • 「リモートセンシング」 • カメラで画像を撮ったり ◦ 可視光?

    ◦ 赤外線? ◦ 電波? • センサーで値を取ったり ◦ 磁気? ◦ 重力? • メリット:広範囲な観測 • デメリット:細部は分からない 周回軌道からの観測 観測
  4. 具体例:MRO Mars Reconnaissance Orbiter • 「リモートセンシング」 • カメラで画像を撮ったり ◦ 可視光?

    ◦ 赤外線? ◦ 電波? • センサーで値を取ったり ◦ 磁気? ◦ 重力? • メリット:広範囲な観測 • デメリット:細部は分からない 周回軌道からの観測 観測
  5. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:広範囲は分からない 着陸しての直接観測
  6. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:着陸するのは大変 着陸しての直接観測 具体例:Perseverance
  7. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:広範囲は分からない 着陸しての直接観測 具体例:Perseverance
  8. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:広範囲は分からない 着陸しての直接観測 具体例:Perseverance しかし
  9. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:広範囲は分からない 着陸しての直接観測 具体例:Perseverance 着陸は大変
  10. 着陸! • その場に行けば色々できる • センサーでの観測 • サンプルの採取 • 行って生えた疑問をより詳しく ◦

    「ここがこうならあっちは?」 • メリット:詳細な直接観測 • デメリット:広範囲は分からない 着陸しての直接観測 具体例:Perseverance 着陸はすごく大変
  11. • 試行回数が稼ぎにくい • あっちもこっちも見てみたい!!! • でも1機しかない!!!!! 着陸はすごく大変 子機 具体例:Ingenuity Perseviarance

    に搭載 分離して飛行 • 着陸のダルさは親機におまかせ • 別行動して試行回数を増やせる ということで
  12. • 試行回数が稼ぎにくい • あっちもこっちも見てみたい!!! • でも1機しかない!!!!! 着陸はすごく大変 子機 具体例:Ingenuity Perseviarance

    に搭載 分離して飛行 • 着陸のダルさは親機におまかせ • 別行動して試行回数を増やせる みなさんには 「子機」 を作ってもらいます
  13. • 試行回数が稼ぎにくい • あっちもこっちも見てみたい!!! • でも1機しかない!!!!! 着陸はすごく大変 子機 具体例:Ingenuity Perseviarance

    に搭載 分離して飛行 • 着陸のダルさは親機におまかせ • 別行動して試行回数を増やせる さて どうしましょうか?
  14. sksat は「先生」ではない sksat は3つの顔でみなさんと接します • sksat1:キャンプの準備・事務連絡人間 • sksat2:いつでも雑に相談できる「経験者」 ◦ でも「答え」は提供しません。あったら僕が知りたい。

    • sksat3:「複雑性」をたくさん増やしてくるめんどくさいやつ ◦ 「これも考えた方がいいかもね~~~?」 • sksat4:「ハードウェア担当」「親機担当」としての調整先 ◦ HW などは時間の都合でこちら側で用意します
  15. 「雑」にコミュニケーションしよう • 雑に発言をしよう - 更新終了 過去アーカイブ ◦ 「きっちりと推敲したり計画立ててやってるわけじゃないおおざっ ぱな、しかしそれを契機に話を膨らませたり、世界観の一端を伝え たりできるような、適当に役に立つライトウェイトな発言」

    • とりあえず言ってみる、とりあえず書いてみる • 思いついたり気になったりしたことを失うのはもったいないこと • 筋がいいかとか、本当にやるかとかは行って/書いてから考える • Discord の Y3 ゼミチャンネルではどんな話をしても OK
  16. 今回のハードウェア:基本構成 • 本体:タミヤ 楽しい工作シリーズ クローラタイプ ◦ これを改造して自律走行させる • 電源:乾電池 •

    マイコン:Raspberry Pi Pico(RP2040) x2 • 無線通信:TWE-Lite(特定小電力無線 2.4GHz) • データ保存:microSD • 基板はメイン部とミッション部に分かれた構成
  17. 今回のハードウェア:構造設計 タミヤの板 メイン基板 タミヤの板 進行方向 ギヤボックス ギヤボックス 超音波 (距離計測) 電池ボックス

    カメラ 赤外線 micro SD TWE- Lite 無線通信( 2.4GHz) モータ ドライバ タミヤの板 進行方向 ギヤボックス ギヤボックス 電池ボックス アーム アーム 今回の構造設計 (あくまで sksat 想定なので変更可) 通常のタミヤの設計 (リモコンでの操作) to リ モ コ ン リモコン 改造して 自律動作する 探査機に Pico Pico
  18. メイン部 • 探査機としての最低限の機能を満たす ◦ 自律走行 ▪ モータ操作 ▪ 障害物検知 ◦

    無線通信 ◦ データ保存 • タミヤの板にメイン基板を乗せる • センサーはあまり載っていない タミヤの板 メイン基板 タミヤの板 ギヤボックス ギヤボックス 超音波 (距離計測) 電池ボックス カメラ 赤外線 micro SD TWE- Lite 無線通信( 2.4GHz) モータ ドライバ アーム Pico Pico ミッション部 (上段)
  19. メイン部 • 探査機としての最低限の機能を満たす ◦ 自律走行 ▪ モータ操作 ▪ 障害物検知 ◦

    無線通信 ◦ データ保存 • タミヤの板にメイン基板を乗せる • センサーはあまり載っていない タミヤの板 メイン基板 タミヤの板 ギヤボックス ギヤボックス 超音波 (距離計測) 電池ボックス カメラ 赤外線 micro SD TWE- Lite 無線通信( 2.4GHz) モータ ドライバ アーム Pico Pico ミッション部 (上段) 当日までにここは組み立てておいてほしい!!!
  20. ミッション部 • 2つ目のタミヤの板を上に乗せる ◦ アーム用ギアボックス ◦ アーム ◦ ミッション基板 •

    ミッション基板に各種センサ ◦ 温湿度センサ、磁気センサ ◦ カメラ、赤外線アレイセンサ • 注意:アームの操作はメイン基板 タミヤの板 メイン基板 タミヤの板 ギヤボックス ギヤボックス 超音波 (距離計測) 電池ボックス カメラ 赤外線 micro SD TWE- Lite 無線通信( 2.4GHz) モータ ドライバ アーム Pico Pico メイン部 (下段)
  21. 「ハードウェア」の解像度を上げる • 「ハードウェア」はものすご~~~く雑な区切り ◦ 「ソフトウェア」だって色々ある:OS、コンパイラ、Web frontend/backend • 「電気(エレキ)」「構造」「機構」とか • 今回の場合

    ◦ 電気(sksat):メイン基板、ミッション基板、ハーネス ◦ 構造(sksat + タミヤ):さっきのやつ ◦ 機構(タミヤ):キャタピラとか、アームとか
  22. 論理的な接続(メイン部) メイン基板 モータドライバ モータドライバ 超音波距離計 9軸センサ 無線機 地上局 UART 無線

    (2.4GHz) 無線機 Raspberry Pi Pico ミッション基板 右モータ 左モータ アーム モータ UART i2c microSD SPI i2c (拡張用)
  23. いつものソフトウェア 組み込みソフトウェア すごく高スペックな汎用計算機 e.g. RAM 32GB, 64bit 数GHz CPU 色々なことができる汎用OS

    e.g. Linux, Windows, macOS 汎用のミドルウェア e.g. PostgreSQL リッチなアプリ(複数) e.g. Web server ショボいマイコン そんな余裕はない (もちろん場合による) 専用のアプリ 謎のハードウェア 謎のハードウェア 謎のハードウェア
  24. いつものソフトウェア 組み込みソフトウェア すごく高スペックな汎用計算機 e.g. RAM 32GB, 64bit 数GHz CPU 色々なことができる汎用OS

    e.g. Linux, Windows, macOS 汎用のミドルウェア e.g. PostgreSQL リッチなアプリ(複数) e.g. Web server ショボいマイコン そんな余裕はない (もちろん場合による) 専用のアプリ 謎のハードウェア 謎のハードウェア 謎のハードウェア もちろん トレードオフが ある
  25. • 目的が事前にわからない ◦ サーバー?ブラウザ見る? • 制約が少ない ◦ どうせコンセントはある ◦ 動かなくていい

    • 「いつもの」範囲ならなんでも ◦ Web、ゲーム、多様な業務 いつものソフトウェア 組み込みソフトウェア • 目的が単一 or 少ない ◦ 「探査機」 • 制約が多い ◦ 体積、電力、etc ◦ いつものは乾電池で動かない • 普段できないことができる ◦ モータを動かすとか
  26. • 目的が事前にわからない ◦ サーバー?ブラウザ見る? • 制約が少ない ◦ どうせコンセントはある ◦ 動かなくていい

    • 「いつもの」範囲ならなんでも ◦ Web、ゲーム、多様な業務 いつものソフトウェア 組み込みソフトウェア • 目的が単一 or 少ない ◦ 「探査機」 • 制約が多い ◦ 体積、電力、etc ◦ いつものは乾電池で動かない • 普段できないことができる ◦ モータを動かすとか 強い制約条件の課題を ハードウェアと結託して 解決する 「いつもの」高性能な ハードウェアがあれば 多くの課題を解ける
  27. Raspberry Pi Pico • 正確にはこれは「マイコンボード」 ◦ CPU 以外にも多少の周辺機器が載ってる ◦ 「パソコン」みたいな単位

    • CPU とかが載ってるのは “RP2040” というマイコンチップ ◦ 動作周波数 133MHz ◦ RAM:264KB、ROM:2MB ◦ 参考:4K画像1ファイルは20MBぐらい(圧縮して数MBとか) • 当然 Windows、Linux、macOS は動かない(そもそも乗らない) • 普段 OS がやってくれていたことを自分でやる必要がある(or できない) ◦ ハードウェアの資源管理、メモリ管理、「標準出力」、...etc
  28. まずはLチカ by Arduino on シミュレータ • 画面も stdout もない →

    Hello, World! できない!!! • まず何をするのか ◦ LED をチカチカさせる • Wokwi: https://wokwi.com/projects/401288015258586113 • まずは Arduino(マイコン用フレームワーク)でやってみる ◦ 言語としてはほぼC言語※1 ※1: 正確には勝手に Arduino.h が include される C++ だが、少なくとも多くの場合デフォ ルトでは C++03 がちだし、ちょっとヘンなC言語、ぐらいに思っておくのがちょうどよい
  29. Lチカ:結局何をやったのか? • ピンの状態を HIGH とか LOW とかに設定した ◦ これは電圧の設定 ◦

    ラズピコの場合、HIGH:3.3V LOW:0V ◦ “HIGH” が何 V かはマイコンやセンサ、アクチュエータによって違 う • 設定するのに使った関数:digitalWrite() ◦ 察せられること1:設定値が HIGH と LOW の2値なので “digital” ◦ 察せられること2:digital があるなら analog もあるのでは? ◦ 察せられること3:write があるなら read もあるのでは?
  30. デジタル信号 • HIGH と LOW の2値があると書いたが、世界はそんなに綺麗ではない ◦ 実際は「だいたい3.3V」「だいたい0V」みたいなかんじになる • もし完璧な

    HIGH と LOW を出せても、切り替わる瞬間は中途半端な電圧になる ◦ 実際はしきい値を決めて「~Vより高いと HIGH」「~Vより低いと LOW」と定義する • 2値を定義できた → どちらかを1、どちらかを0とすると2進数として扱える → digitalWrite() して別のマイコンで digitalRead() したら、2進数で情報を送信できる!!!
  31. Rust の環境構築 • VSCode ◦ Live Share extention は便利なので入れておこう ◦

    wokwi の extention もあるので手元でも試せる ▪ 設定例:https://github.com/sksat/pico-wokwi-playground • rustup ◦ とりあえず cargo init して cargo run して Hello できる状態にはしておいてほしい
  32. 「複雑なシステム」としての「探査機」 • デプロイ先がどんなところがわからない ◦ それを「探査」しに行くのだから! • 非修理系 ◦ 「ちょっと壊れたので直そう」ができない!!! •

    考えることが多い ◦ 開発体制、構造設計、機構設計、搭載ソフトウェア、通信、地上 局、...etc ◦ 開発期間が短い!!!(今回は1週間) ◦ しかも、それらの要素が相互に影響する
  33. 気付いていること・理解していること Unknown Unknowns 知らないことを知らない Known Unknowns 知らないと知っている Unknown Knowns 知っていると知らない

    Known Knowns 知っていると知っている 理解している 気 付 い て い る どんどん気付く どんどん知る
  34. とはいっても何が何だかわからん • 複雑なミッション • 複雑な ToDo • 複雑なシステム • 複雑なエラー

    • 複雑なバグ • 複雑な組織 解きほぐす 大きな方針 大きな方針 大きな方針
  35. シンプルに作る • 複雑な目的や状況 → すぐに解決も複雑になる ◦ それって結局なにをどう解決してるんだっけ? • 最適化の法則:「まだするな!」 •

    ムズカシイけど色々解決する、みたいな手段がありがち ◦ もちろんトレードオフ ◦ ムズカシイ = 認知負荷が大きい ◦ 変更しにくくなる:試行回数が減ってしまう • 複雑なことも、まずはじめはシンプルに ◦ ex:ブレッドボードで試す、ユニットテスト Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet.
  36. 高速に「やったことがある」状態に持ち込む • 複雑な問題 ◦ Unknown-unknowns だらけ ◦ 事前の想定が良くも悪くも覆る ◦ 経験の鮮度が重要

    • 仮説を立て、検証するループ • 高速に細かく Iteration を回す ◦ 手戻りは早い方がいい SpaceX (2012). System Engineering: A Traditional Discipline in a Non-Traditional Organization
  37. 事実を観測せよ! • 推測しすぎない ◦ 事象 A が起きているとき、「たぶん B だから~」と言っていないか? ◦

    事実関係を区別してコミュニケーションしよう ▪ 事象そのもの、事象の仮説、仮説の前提条件 • 事実をできるだけ観測し、仮説を検証せよ!!! ◦ ex:そもそも電源入ってる?導通してる?信号は流れてる? ◦ 観測手段の例 ▪ テスター、ロジックアナライザ、USB シリアル変換、lldb、... • 観測手段(手札)をたくさん確保しておく
  38. 手札とメタ手札 • 自分やチームが持っている手札を把握する ◦ 技術、観測手段、LLM、相談できる人(ex:sksat)... • 手札は目的に対して不足していないか? • 手札は精度を高めたり、増やしたりできる •

    手札を増やすための手札(メタ手札)を獲得しよう • 「こういう手札があるはず」があると応用がすごく効く ◦ ex:「Rust/マイコンにこれを解決する機能があるのでは?」 • 「こういう事実を観測する手段を作れれば......?」
  39. 「やること」は DAG • 「やること」は1次元のリストではない! • それぞれに依存関係がある • 依存が被らない実行経路を作ることができる ◦ →

    複数人で並列実行できる ◦ ex:B→C と B→D • 実行中にノードや依存関係を増やすこともできる ◦ タスクの分割/解像度が上がった • 並列度の高いタスク分割 → チームの「実行効率」を高められる
  40. 「やらないこと」を決める • 「やること」「やった方がいいこと」を決めるのはカンタン • しかし、実際に「やる」のは大変 • 同時にあれもこれもやっていると混乱する ◦ 「コンテキストスイッチのコストが大きい」 •

    「何をやらないか」を決める(強い気持ちで!) • 「やらないこと」にも色々ある ◦ 「今やらない」「**が分かるまでやらない」「絶対やらない」
  41. 脇道:LLM とその活用(2) • コードを書かせるとき(coding agent など) • Web は得意、組み込みは苦手(学習データ不足) •

    書かせたコードは自分の手札にはならない ◦ 「なんかよくわからんけどできた」 ◦ 「コードを書かせる」という手札は深い理解とセット ◦ プロンプトの書き方、は新モデルが出たらすぐ変わる