TPN-Dev が 2026年01月30日18時24分05秒 に編集
コメント無し
本文の変更
## 概要 本作品は「**その場所でしか聞くことができない音**」を録音し、探索し、再生させるための装置です。 好きな場所で自由に**音の標**(しるべ)を立て、さらに**音を導**(しるべ)として録音された場所を辿ることもできます。 SPRESENSEの高精度な測位機能を活用することで実現しました。 主な機能は以下になります。 ### 録音 - 音声データと録音場所の座標をクラウド(AWS)へアップロード - 人の耳のモデルを介した「バイノーラル録音」 ### 探索 - 探索開始地点から、最寄りの録音場所を探知 - GNSSとIMUを活用し、録音場所の方角と距離を算出
- [ソナー音(バイノーラル)](https://elchika.com/article/c3bfc594-32e5-48ba-ac4e-d842722c07e4/#:~:text=%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F-,%E6%8E%A2%E7%B4%A2%E3%83%A2%E3%83%BC%E3%83%89%E6%99%82%E3%81%AE%E6%8E%A2%E7%B4%A2%E9%9F%B3%E3%81%AE%E5%86%8D%E7%94%9F%E6%96%B9%E6%B3%95,-%E7%9B%AE%E7%9A%84%E5%9C%B0%E6%96%B9%E5%90%91%E3%82%92)によって、録音場所まで案内
- [ソナー音(バイノーラル)](https://elchika.com/article/c3bfc594-32e5-48ba-ac4e-d842722c07e4/#h_%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)によって、録音場所まで案内
**目的地からの距離に伴うソナー音パターン** | レベル | 目的地からの距離 | ソナー音 | |---|---|---|---|---| | 0 | 301M~ | デフォルト | | 1 | ~300M | 「レベル0」×1.5倍速 | | 2 | ~30M | 「レベル1」×1.5倍速 | | 3 | ~15M | 「レベル2」×1.5倍速 | | 4 | ~5M | 高音のソナー音に変化 | ### 再生 - 臨場感のある立体的な音像 - 近い録音場所の音声をまとめて再生 ※場所を起点に**対話**が可能 - 持ち手部分を回すことで音量を調整 ## 使用方法  ### 前提 - 野外で使用すること - 有線イヤホン必須 - 通信状況により待機時間や位置検知の精度が変動 ### 録音 1. 「電源ボタン」をON 1. 全ボタンの点滅が終わった後、点灯している「録音ボタン」を押下 1. 音声等を録音 1. 再度「録音ボタン」を押下することで録音が完了しデータが保存される ※「中断ボタン」押下で録音を中断(保存はされない) ※録音した音声は24時間探索・再生が不可 ### 探索/再生 1. 「電源ボタン」をON 1. 全ボタンの点滅が終わった後、点灯している「探索」ボタンを押下 1. ソナー音を頼りに録音場所へ移動 1. 録音場所へ到着するとソナー音が変化 1. 「再生ボタン」を押下で再生開始 ※「中断ボタン」押下で探索を中断 ※再生した音声は24時間探索・再生が不可 https://youtu.be/gVGSKwdNOyM ### モード遷移フロー  **分岐毎の挙動** | 分岐 | 条件 | 操作 | 結果 | |---|---|---|---|---| | a | 「ニュートラル」モードであること | 「録音ボタン」押下 | 録音開始 | | a' | 「録音」モードであること | 「録音ボタン」押下 | 録音完了 | | b | 「ニュートラル」モードであること | 「探索ボタン」押下 | 探索開始 | | c | 「探索」モードであること、目的地に到着していること | 「再生ボタン」押下 | 再生開始 | | x | - | 「中断ボタン」押下 | 実行中のモードを中断し「ニュートラル」モードに移行 | **モード毎の挙動** | モード | 効果音 | ボタン点灯パターン | |---|---|---| | ニュートラル | - | 録音ボタン:点灯 / 探索ボタン:点灯 | | 録音 | - | 録音ボタン:点滅 / 中断ボタン:点灯 | | 探索 | ソナー音 | 探索ボタン:点滅 / 中断ボタン:点灯 | | 探索(目的地到着) | 目的地到着 | 探索ボタン:点滅 / 再生ボタン:点灯 / 中断ボタン:点灯 | | 再生モード | 再生開始 | 再生ボタン:点滅 / 中断ボタン:点灯 | ※点灯:利用可能 / 点滅:実行中 ## 筐体設計 ### 3Dプリンターによる制作  #### 制作物 - 本体×1 - カバー×1 - 基盤取付板×1 - 耳取付ジョイント×2 - 持ち手ジョイント×1 - ボリュームつまみ×1 - 持ち手×1 #### 工夫点 - 音の録音に臨場感がでるよう**筐体幅を頭幅にそろえ、耳の形状を再現** - 持ち手を3部材に分割することで、**音量つまみの自由回転を実現** - 耳ジョイントを作成し、耳モデルの取り外しを容易に - 耳ジョイントががたつかないよう微小な「かえし」を作成 ## 電装・電気回路     - LTE拡張ボード[LM1]に、メインボード、マルチIMUアドオンボード、GNSSアドオンボードをスタック - LTE拡張ボードを駆動に十分な出力容量を持つ薄型モバイルバッテリーを使用 - 小型実装可能なデジタルMEMSマイクを使用(LTE拡張ボードに必要な接続変更を実施) - 操作系LED内蔵スイッチをGPIO、ボリュームをアナログ入力に接続 ## ソフトウェア **githubパブリックリポジトリ**: https://github.com/HagTak/otoshirube - SPRESENSE Arduinoライブラリを使用 - 工夫した点 - 大きな音声ファイルのアップロード、ダウンロードを行うため、**Read / Writeを分割して処理**するようにした - 探索モード時の探索音の再生方法 - 目的地方向と距離を的確に知らせるため、**頭部伝達関数を畳み込み12方向分(30°毎)×距離による音パターン3種=36種類の探索音をSDカードに内蔵**し、それらから選択して再生 - 頭部伝達関数は、http://sound.media.mit.edu/resources/KEMAR/full.zip を使用    ## 位置検知 ### GNSSナビゲーションの実装技術 SPRESENSE単体で正確なナビゲーションを実現するために、ハードウェア選定とソフトウェア実装の両面で最適化を行っています。 本項では、GNSS Navigation APIの実装において、技術的に重要視した4つのポイントについて解説します。 ### 1. 高精度・高安定なセンサーハードウェアの選定 ナビゲーションの信頼性を確保するため、標準搭載の機能に加え、以下の産業用途向けアドオンボードを採用しました。 #### GNSSアドオンボード  Spresense本体の内蔵GNSSに加え、**L1帯とL5帯の同時受信が可能なアドオンボード**を使用しています。 ビル街や樹木下など、マルチパス(電波の乱反射)が発生しやすい環境においても、L5帯の信号を併用することで測位精度を維持し、 **目的の座標を安定して特定**できるようにしています。 #### マルチIMUアドオンボード  方位推定の安定化には、**16個のMEMSセンサー(加速度・ジャイロ)を搭載したマルチIMUボード**を採用しました。 単一のセンサーでは避けられないノイズやドリフト誤差を、16個のセンサーデータを用いた合成処理(アベレージング)によって低減させています。 これにより、**移動中の微細な振動やふらつきの影響を抑えた、安定した挙動検知**が可能となりました。 ### 2. GNSS×IMUのセンサーフュージョンによる方位補正 地磁気センサー(電子コンパス)は、周囲の磁気環境(建物や電子機器)の影響を受けやすく、正しい方位を示さない場合があります。 これを解決するため、本システムでは 「**移動ベクトルによる方位補正ロジック**」を実装しています。 - **課題:** 地磁気センサー単体では、環境要因により「北」の方角に誤差が生じる - **解決策:** ユーザーの移動時、GNSSから得られる「実際の進行方向(移動ベクトル)」と、IMUが示す「機首方位」を比較。 その差分をオフセット値として算出し、リアルタイムで補正 これにより、**磁気干渉を受けやすい環境下でも、歩行し続けることで正しい方位へ収束するアルゴリズム**となっています。 ### 3. POSIXスレッドを用いた非同期処理設計 Spresense(NuttX)のマルチスレッド機能を活用し、各処理を独立したスレッドで並列動作させています。 - **GNSSスレッド:** 測位データの受信と解析をバックグラウンドで実行し、最新座標を保持 - **IMUスレッド:** 60Hzの周期でセンサー値を取得し、フィルタリングと方位計算を継続 - **メインスレッド:** アプリケーションからの要求に対し、待機時間なしで最新の計算結果(座標・距離・角度)を返却 GNSSのデータ受信待ち等によるメイン処理のブロッキングを防ぎ、**音声再生やUI操作のレスポンスを損なわない設計**としています。 ### 4. ナビゲーションに特化したAPI仕様 取得した緯度経度をそのまま返すのではなく、アプリケーション側で使いやすい形式に加工して出力するAPIを実装しました。 - **相対情報の算出:** 現在地と目的地の座標から、大円距離(Haversine法)による「残り距離(m)」と、現在の進行方向に対する「回転角度(Turn Degree)」を内部で計算して返却し、アプリ側での計算負荷を軽減 - **時系列ソート機能 (API-3):** 指定範囲内の音声データを検索する際、位置的な近さだけでなく「登録日時(Timestamp)」の昇順でソートして返却することで、「過去のデータから順に再生できるよう実装 ## AWSの構成  API Gateway / Lambda / DynamoDB / S3 の4つのサービスを組み合わせて構築されており、役割分担としては下記の構成になっています。 - **API Gateway**:外部からの HTTP リクエスト受付 - **Lambda**:アプリケーションの処理本体 - **DynamoDB**:音声に紐づく位置情報などのメタデータ保存 - **S3**:音声ファイル(mp3)の実体保存 ### メタデータの保存について DynamoDBに保存しているのは以下のような 軽量なメタデータのみです。 これにより、**近傍検索(指定地点から半径○m以内)を高速かつ低コストで実現**しています。 - 取得日時 - 音声ID - 緯度・経度 - レコード種別 **その他工夫点** - DynamoDBのソートキーに緯度を格納 - Lambdaにて、クエリパラメータで指定された検索中心座標と半径に対応する緯度範囲でソートキーを検索し、その結果を緯度カラムでフィルタリング ※今後データ量が増えた場合、ソートキーを丸めた経度と緯度の組み合わせとすることで、低コストで大量データから読み取り可能 ## 使用部品 | 部品名 | 単価 | 数量 | 小計 | 参考情報 | |---|---:|---:|---:|---| | SPRESENSE mainボード | 6050 | 1 | 6050 | | | SPRESENSE LTE拡張ボード[LM1] | 10240 | 1 | 10240 | | | SPRESENSE GNSSアドオンボード | 8470 | 1 | 8470 | | | SPRESENSE マルチIMU Add-onボード | 43780 | 1 | 43780 | | | SPH0641LU4H使用 超広帯域マイクモジュールキット | 400 | 2 | 800 | https://akizukidenshi.com/catalog/g/g115577/ | | フレキシブルGNSS U.FLアンテナ | 1507 | 1 | 1507 | | | LED照光式タクトスイッチ 青 キートップ付き | 50 | 4 | 200 | https://akizukidenshi.com/catalog/g/g113870/ | | トグルスイッチ | 999 | 1 | 999 | https://www.amazon.co.jp/dp/B0D4LMTWJR?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1 | | 3.5mmステレオジャック MJ-073H | 450 | 1 | 450 | https://www.amazon.co.jp/dp/B011L1MLUI?ref=ppx_yo2ov_dt_b_fed_asin_title | | USB-Cソケット | 933 | 1 | 933 | https://www.amazon.co.jp/dp/B09VS9NL1N?ref=ppx_yo2ov_dt_b_fed_asin_title | | 薄型モバイルバッテリー | 1232 | 1 | 1232 | https://www.amazon.co.jp/dp/B07SMFDH8K?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1 | | L型コネクタマイクロUSBケーブル | 699 | 1 | 699 | https://www.amazon.co.jp/dp/B0FK9ZL91C?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1 | | 小型ボリューム 10kΩ | 60 | 1 | 60 | ソフトウェア処理可能なのでAカーブでもBカーブでもよい | | 抵抗 1.2kΩ | | 4 | | | | ピンヘッダ・ピンフレーム等 | | 適量 | | | | 配線材等 | | 適量 | | | | 耳モデル | 1380 | 1(1対) | 1380 | [https://www.amazon.co.jp/dp/B0CNNNMG64?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1](https://www.amazon.co.jp/dp/B0CNNNMG64?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1)| ## 最後に 子供の頃、街には市井の人のごく個人的なメッセージが溢れていたように思います。 駅の伝言板、喫茶店のお客様ノート、電話ボックスに貼られたメモ、あちこちに書かれたラクガキなど。 過去にその場にいた誰かがメッセージを残し、そこに自分が遭遇したという事実に、得も言われぬ高揚感を感じたものです。 ネットの普及によりそういったものは無くなりつつありますが、**当時のワクワクを現実世界に復活したい**と思い企画しました。 ソナー音を頼りに街や自然を歩き回り、誰かの声に辿り着いた時。 自分で録音した音声が、未来の同じ場所で再生され、返答が録音されていた時。 なんてことない言葉だったとしても、便利なSNSでは味わえない「**かけがえのなさ**」を感じられると思います。 今は世界に一台しか存在しませんが、もし様々な地域でたくさんの人々に利用されるようになれば、、 **日常や旅先の景色が、より特別なものに感じられる**はずです。 #### 使用例 - 生まれ育った街の思い入れがある場所で、子供時代のエピソードを話してみよう - 取り壊しが決まった建物の前で、そこでの思い出を振り返ってみよう - お祭りの日に、普段とは違う街の環境音を録音してみよう - 旅先で家族と一緒に、旅の感想を語り合ってみよう - 仕事帰りに公園に寄り道し、ベンチに座って愚痴を吐いてみよう - 「駅前のタバコ屋の横の路地を進んで突き当りを右に曲がり3つ目の電信柱の下で次の音声を再生しろ」という感じで謎解き感覚の道案内をしてみよう