今回は、新しく立ち上げた工作・開発プロジェクトについて紹介したいと思います。

皆さんは「レインボーシックス シージ(R6S)」というゲームをご存知でしょうか?あのゲームで非常に重要な役割を果たすのが、準備フェーズで床を走り回る「索敵ドローン」です。サバゲーなどでもあんな風に偵察できるガジェットがあったらロマンがあるな…と思い立ち、「画面を見ながらスマホで遠隔操縦できる、R6S風の円筒型ドローン」をイチから自作することにしました。

今回は初回ということで、このドローンがどのようなハードウェアとソフトウェアで構成され、どんな仕組みで動いているのか、大まかな概要を解説します。

 

全体システムの仕組み:専用アプリ不要のIoTデバイス

市販のラジコンとは違い、今回はスマートフォンやPCのブラウザ(SafariやChromeなど)をコントローラーとして使います。専用アプリをインストールする必要はありません。

ドローンの頭脳には「Raspberry Pi(ラズパイ)」を搭載し、このラズパイ自身が小さな「Webサーバー」として稼働します。スマホから指定のURLにWi-Fi経由でアクセスするだけで、カメラのリアルタイム映像を見ながら画面上のUIで操縦できるという、本格的なIoTデバイスの仕組みを採用しています。

 

 

ハードウェア(機体の構成)

機体の特徴である「横長・円筒形のボディ」はCADで設計し、3Dプリンター(PLA素材)で出力しています。筒の中に基板やバッテリーを綺麗に収めるのはパズルのようで、ハードウェア開発の面白いところです。

  • メイン基板(頭脳):Raspberry Pi Zero 2 W 超小型ながら強力な処理能力とWi-Fi/Bluetooth通信モジュールを備えた、本機の心臓部です。

  • 電源モジュール:PiSugar ケーブルレスでラズパイ本体に直接重ねて搭載できる専用バッテリーモジュールを採用し、極限まで省スペース化を図っています。

  • カメラモジュール&接続方式 Raspberry Pi Camera Moduleを使用。狭い筒内でのケーブルの取り回しと排熱対策を考慮し、Pi Zero専用の極短FPCカメラケーブルで接続しています。

  • 駆動系 左右独立で駆動するDCギヤードモーター2基と、ラズパイからの信号を動力の電圧に変換するモータードライバ基板で構成しています。

 

3DCADでの設計の様子

 

ソフトウェア(プログラムの構成)

プログラムは主に2つの言語を組み合わせて構築しています。

  • 裏側の制御(Python 3 / Flask) 軽量なWebフレームワークであるFlaskを使い、Webサーバーを構築。モーターへの駆動指示(前進・後退・左右旋回・停止)や、カメラ映像のストリーミング処理を担当しています。

  • 表側の操作画面(HTML / JavaScript) スマホのブラウザに表示される操縦UIの設計です。

 

前方に赤と黄色の対象物を置いた構図

操作画面の様子(カメラフィルムをはがしていない為このような色彩)

 

映像ストリーミングの最適化

リアルタイムでの索敵において、「映像の遅延」は命取りになります。そのため、映像処理にはいくつか独自の工夫を凝らしました。

  • 軽量化と圧縮:形式はMJPEG(Motion JPEG)を採用。遅延と熱暴走を防ぐため、解像度を320×240ピクセル、フレームレートを約20FPSに設定し、画質をあえて50%に圧縮して転送負荷を下げています。

  • OpenCVによるリアルタイム補正:カメラの搭載向きの都合上、映像が逆さまになってしまうため、OpenCVを用いてリアルタイムに180度(上下左右)の反転処理をかけてからストリーミングしています。

 

操作システム(UI)と安全装置

単に動かすだけでなく、実用性と安全性を考慮したシステムを組み込んでいます。

  • リアルタイム・テレメトリー表示 操縦画面にはソフトウェア十字キーに加え、現在の「CPU温度」「バッテリー残量」「RTC現在時刻」がリアルタイムで表示される設計にしました。

  • モーター暴走防止機構(touchcancel検知) スマホのタッチ操作特有のバグとして、「指が画面外に滑り出るとモーターが回り続ける」という危険な現象があります。これを防ぐため、touchcancelイベントを検知し、強制的にモーターを停止させる安全プログラムを実装しました。

  • キャッシュバスター機能によるフリーズ回避 映像ストリーミング時、スマホブラウザ特有の「画面フリーズ・無限ロード」が発生する問題がありました。これを回避するため、アクセスするたびに画像のURLの末尾にランダムな文字列(動的URL)を付与し、強制的に最新の映像を読み込ませるシステムを組み込んでいます。

  • 直進キャリブレーション機能(ハードの個体差をソフトで補正) 左右のモーターやギアボックスにはどうしても個体差があり、そのままでは右に曲がってしまうクセがありました。そこで、プログラム上で左モーターの出力を「50%」に制限することで直進性を補正しています。

 

今後の展望

現在はキャリブレーションを中心に調整を進めていますが、カメラケーブルの取り回しなどのハードウェア面もさらに改善していく予定です。最終的には、サバゲーのフィールドのような障害物の多い場所で、実際に索敵テストをしてみたいなと企んでいます。

今後の進捗や、開発中にぶち当たったエラーとその解決策についても、このブログで詳しく解説していく予定です。