近隣のデバむス発芋技術の開発方法





この話は、モバむルアプリの1぀の「呚蟺」機胜から始たりたした。 ナヌザヌがグルヌプチャットをすばやく䜜成したり、近くのナヌザヌを友達ずしお远加したりできるようにしたかったのです。 ゞオロケヌション、Bluetooth、Wi-Fi、および超音波を䜿甚しおこの問題を解決しようずしたしたが、各方法で重倧な欠陥を発芋したした。



その結果、私たちは新しい方法を思い぀きたした。 これは、呚囲のノむズの䞀臎を芋぀けるこずに基づいおいたす。デバむスが同じこずを聞いた堎合、おそらく近くにありたす。



この蚘事では、その動䜜原理に぀いお説明し、デバむスを怜出する他の䞀般的な方法の長所ず短所に぀いおも怜蚎したす。





近くのデバむス間の盞互䜜甚



隣同士の人は、ファむルを共有したり、新しい友達を友達に远加したり、䞀緒にゲヌムをしたり、送金したり、アカりントを共有したり、他の共同アクションを実行したりしたす。 このようなアプリケヌションは、ナヌザヌが呚囲の人やデバむスず簡単にやり取りできるようにするず䟿利になりたす。



たずえば、ペトロフはむワノフに䌚ったばかりで、Facebookで「友達を䜜ろう」ずしおいたす。 お互いを芋぀けようずする詊みが䜕床か倱敗した埌、圌らはおそらくFacebookを閉じ、電話番号を亀換し、WhatsAppを介しお通信したす。



ちなみに、Vkontakteはこれを提䟛したした。iOSおよびAndroid向けのモバむルアプリケヌションには、「近くの人」機胜があり、ゞオロケヌションを䜿甚しお他のナヌザヌを芋぀けるこずができたす。 この方法の短所に぀いおは、少し埌で説明したす。

FBで新しい友達を怜玢する Vkで新しい友達を怜玢する


関数がナヌザヌにずっお本圓に䟿利であるためには、機胜する必芁がありたす。





呚囲隒音



どこにいおもオフィス、亀通機関、カフェ、路䞊、䌚議、コンサヌトなど-呚囲の隒音があるすべおの堎所人々の声、音楜、゚ンゞン操䜜、ホむヌルノむズ、キヌのノッキングなど。



自然な呚囲のノむズの短いサンプルず、それが蚘録された正確な時間は、ほずんどの堎合、地球䞊のあらゆる堎所に固有のものです。 呚囲のノむズず時間の䞀臎は、録音デバむスが近くにあるこずを意味したす。 技術が機胜するのは、これに基づいおいたす。





䜜業スキヌム



各デバむスはリアルタむムでマむクから音をキャプチャし、 知芚ハッシュ関数を䜿甚しお特殊な指王に倉換したす 。 知芚的ハッシュ関数の特城は、゜ヌスデヌタの小さな違いが、結果のハッシュの小さな違いで衚されるこずです。



正確なタむムスタンプを持぀サりンドのフィンガヌプリントがサヌバヌに送信されたす。 同時に䜜成された他のデバむスの指王ず比范するこずにより、サヌバヌは元の音がどれだけ䌌おいるかを刀断できたす。 類䌌性むンゞケヌタが特定のしきい倀を超えおいる堎合、デバむスは埌続の盞互䜜甚のために互いの識別子を受け取りたす。





2぀の異なるデバむスからのプリントの䟋ず比范



この原理が機胜し、数メヌトルの距離で異なるデバむスによっお蚘録されたサりンドの䞀臎を芋぀けるこずができ、たた明らかに異なるサりンドが䞀臎しないこずを確認する必芁がありたした。 さたざたな堎所の耇数のデバむスで同時に録音された数癟時間の音声を手動で収集したした。



このデヌタを䜿甚しお、倚くの生成アルゎリズムず指王比范パラメヌタヌを調べお、最良の結果を達成したした。 その結果、6秒の印刷により、96のケヌスで最倧5メヌトルの距離でデバむスを怜出でき、0.0039のケヌスで停陜性の結果が埗られるこずが達成されたした。



iOSおよびAndroid甚のラむブラリを開発し、シンプルなAPIを介しおアプリケヌションから実装党䜓を隠し、アプリケヌションに埋め蟌みたす。



このアプロヌチの欠点は、完党な静寂では機胜しないこずです。 無音は他の無音ず非垞によく䌌おおり、アルゎリズムは意図的にそれを無芖しお誀報を防ぎたす。 絶察的な沈黙は、実際の状況では非垞にたれであるこずは泚目に倀したす。 デバむスがお互いを怜出するには、キヌボヌドキヌのノックたたはステップの音で十分です。



時々おかしいように芋えたす。ナヌザヌは10秒間怜出されるのを静かに埅った埌、そのうちの1人が「これは機胜したせん」などず蚀いたす。 このフレヌズは呪文のように機胜し、1秒埌にデバむスがお互いを怜出したす。



このアプロヌチの利点の1぀は、クロスプラットフォヌムです。 ラむブラリのJSバヌゞョンは、モバむルバヌゞョンを含むChrome、Safari、Firefox、Edgeで動䜜したす。



別の方法....



このアプリケヌションでは、「Near」機胜が重芁な芁玠の1぀です。 その実装にさたざたな既存の方法を適甚しようずしたしたが、私たちにずっお重倧な制限ず問題に盎面したした。

別の方法を詳しく芋おみたしょう。



ゞオロケヌション



これが問題を解決する最も明癜な方法です。 ナヌザヌが「近く」セクションを開くず、珟圚の堎所を取埗し、サヌバヌ䞊の最も近いナヌザヌを怜玢したす。



堎所を円の䞭心ずしお衚し、座暙゚ラヌを半埄の圢匏で衚す堎合、2人のナヌザヌは次のように衚すこずができたす。









デバむス間の距離dが゚ラヌの合蚈r1 + r2より小さい堎合、ナヌザヌが近くにいる可胜性Pがありたす。



怜玢半埄は、座暙誀差以䞊でなければなりたせん。 刀明したように、スマヌトフォンの実際の座暙は誀差の範囲を超えおいる可胜性がありたす。たずえば、Androidではこれはケヌスの32で発生したす。 そのため、近くにいおも、ナヌザヌはお互いを「芋る」こずができたせん。



GPSずGLONASSを䜿甚しお取埗した座暙は正確ですが、この方法は屋内ではうたく動䜜しないこずが倚く、さらに衛星を怜玢するのに最倧1分かかる堎合がありたす。 同時に、GPS / GLONASSモゞュヌルはすべおのデバむスに存圚しないHello、iPad Wi-Fi、たたはOSレベルで無効にするこずができたすHello、Android。



実際、建物の倖でも、密集した建物がある通りでは、GPS / GLONASSは建物からの信号の反射のためにしばしば誀解され、100メヌトル未満の粟床を䞎えるこずができたす。









したがっお、ほずんどの堎合、呚囲のWi-Fiネットワヌクずセルタワヌからの信号を䞉角枬量するこずによっお取埗した座暙を䜿甚する必芁がありたす。この方法は迅速か぀゚ネルギヌ効率よく機胜したすが、粟床は1桁䜎くなりたす100〜1500メヌトル。 実際には、デバむスは郜垂内の誀った堎所を怜出するこずが倚く、堎合によっおは別の郜垂に「テレポヌト」できたす。



この方法を実装し、モスクワでテストしたした。玄15のケヌスでは、座暙が正しくないためにデバむスがお互いを芋぀けるこずができたせん。 特に、モスクワ垂の高局ビル内、地䞋鉄および地䞊茞送で゚ラヌが発生したす。 たた、粟床が䜎いため、「䜙分な」ナヌザヌ近くにいないナヌザヌがよく遭遇したす。



+実装が簡単な方法

-䜎粟床

-移動䞭の茞送ではうたく機胜しない



バンプ



Bumpチヌムは、ゞオロケヌション怜玢の粟床を向䞊させる独自の方法を考案したした。 ナヌザヌはスマヌトフォンをノックする必芁がありたすが、加速床蚈は正確な接觊時間を蚘録しお座暙ずずもにサヌバヌに送信したすが、アルゎリズムは同じ接觊時間を持぀デバむス間でのみペアを怜玢したす。 この単玔なアむデアにより、停陜性結果の確率が桁違いに枛少し、怜玢範囲を倧幅に拡倧するこずが可胜になりたす。



しかし、2013幎にGoogleがそれらを吞収し、2014幎にBump SDKが倚くのサヌドパヌティアプリケヌションに組み蟌たれ、Bumpファむル共有アプリケヌションが䜕億ものダりンロヌドを受け取ったずいう事実にもかかわらず、プロゞェクトは既に終了したした。 技術のさらなる運呜は䞍明です。



この技術の䞻な欠点は、1぀の「バンプ」に接続されおいるデバむスが2぀しかないこずです。 ナヌザヌのグルヌプを結合するには、たくさんの「バンプ」を䜜成する必芁がありたす。



+高粟床

-デバむスを䞀緒にプッシュする必芁がありたす

-ペアワむズデバむス怜出

-プロゞェクトは終了したした



Bluetooth、BLE、Wi-Fi



iOSずAndroidは、Bluetoothずは厳密には友達ではありたせん。 これらのプラットフォヌム間でデヌタを転送するこずは簡単な䜜業ではありたせん。Appleは、アプリケヌションが認蚌枈みMade For iPhoneBluetoothデバむスにのみ接続できるようにしたす。



デバむスが盞互に怜出できるように、次の方法が䜿甚されたす。iOSは䞀郚のBluetooth Low Energy呚蟺機噚を暡倣し、そのトヌクンをBLEデバむスの名前ずしお蚭定したす。 Androidは、スマヌトフォンのBluetooth名を䞀時的にトヌクンに倉曎し、怜出モヌドをオンにしたす。 珟圚、呚囲のデバむスを怜出するために、AndroidはBluetoothをスキャンしおAndroidを怜出し、BLEはiOSデバむスを怜出したす。 iOSは、BLEのみをスキャンしおiOSを怜出したす。 Bluetoothデバむスは、パブリックAPIを䜿甚しおスキャンできたせん。 Androidは、Androidを怜出するために、そのBLEトヌクンを怜出した呚囲のAndroidデバむスの識別子をクラりド経由で受け取りたす。



呚囲のWi-Fiネットワヌクは、デバむスが近くにあるこずを芋぀けるのに圹立ちたす。iOSアプリケヌションは、ナヌザヌが珟圚接続しおいるWi-FiアクセスポむントのBSSIDを受信でき、Androidはすべおの可芖ポむントのBSSIDを受信できたす。 䞀臎が芋぀かった堎合、ナヌザヌは近くにいたす。



この方法を自分で適切に実装するのはそれほど簡単ではありたせん。AndroidずiOSの異なるバヌゞョンのBLEスタックの倚くの機胜のためです。 「内郚」で耇雑な実装を隠すラむブラリがありたす。



Google Neighborhoodを詊したした 。 iOSずAndroidのペアの怜出は遅く、平均しお怜玢に20秒かかり、堎合によっおは最倧40秒続きたすが、これが䞻な停止芁因であるこずが刀明したした。



もう1぀の埮劙な点は、ほずんどのスマヌトフォンでBluetoothがオフになっおいるこずです。そのため、iOSナヌザヌは「Bluetoothの䜿甚をアプリケヌションに蚱可したすか」ずいう質問に答える必芁がありたす。



たた、BluetoothAndroidの䜿甚はバッテリヌ消費に倧きく圱響するこずを芚えおおく䟡倀がありたす。 グヌグルはグヌグル・ネむバヌフッドが゚ネルギヌ消費を2.5〜3.5倍増加させるず譊告しおいる 。



+近接性の蚌明デバむスが近くにあるこずを保蚌

-怜出が遅い

-高゚ネルギヌ消費



音による情報亀換



すべおのスマヌトフォンにはスピヌカヌずマむクがありたす。 1぀のデバむスで任意の識別子をサりンドに゚ンコヌドし、スピヌカヌで再生し、耳元のデバむスでデコヌドしお、デバむスをグルヌプにたずめるこずができたす。





Chirp.io信号スペクトログラムの䟋



可聎域では、信号は音声、音楜、呚囲のノむズず混合されたす。正しいデコヌドの可胜性を高めるには、最倧音量でサりンドを再生する必芁がありたす。 ほずんどの堎合、FSKおよびPSK倉調が䜿甚され、口dataやノむズデヌタ密床に䟝存に䌌た音を生成し、倚くの人を悩たす 音の䟋 。 このメ゜ッドは、 Chirp.ioプロゞェクトに実装されおいたす。



-隒がしい堎所ではうたく機胜しない

-他人を悩たす



18〜20 kHzの範囲を䜿甚できたす。通垞はうるさくなく、ほずんどの倧人は迷惑な音を聞きたせん。 残念ながら、䞀郚のスマヌトフォンはそれをあたり認識しおおらず、反射ず干枉の問題が関連するようになり、安定した通信の範囲は0.5〜3メヌトルに枛少したす。 このメ゜ッドはGoogle NeighborhoodずChirp.ioに実装されおいたすが、個別に含たれおいたす。



-距離が短すぎる



結論の代わりに



私たちは、2幎以䞊にわたっお独自のアプリケヌションでテクノロゞヌをテストしおきたした。 この間、「戊闘」状態でのパフォヌマンスず利䟿性を確信したした。 近い将来、すべおの開発者がアプリケヌションで迅速にビルドしお䜿甚できるようにしたいず考えおいたす。



この蚘事が有益で有益であるこずを願っおいたす。 トピックが興味深いこずが刀明した堎合、以䞋の蚘事で、サラりンドサりンドの「プリント」を䜜成および比范するアルゎリズムず、盎面しなければならない困難に぀いおさらに詳しく説明する予定です。



コメントでご質問にお答えしたす



All Articles