読者です 読者をやめる 読者になる 読者になる

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

HoloLens で UDP 通信を行う方法について調べてみた

>>>>> 表面メッキ 農業資材ホルモンスプレーHGS-1, スリムで持ちやすく作業がしやすいと好評です

  • 農業資材ホルモンスプレーHGS-1, スリムで持ちやすく作業がしやすいと好評です
  • El1GINCJ
  • 16300円-34%-10800円
  • >

    ホルモン剤専用噴霧機です
    トマトトーン散布に最適です
    花または花房にだけスポット噴霧が可能!
    丈夫で信頼のおける日本製
    純真鍮(表面メッキ)
    こちらの商品は、容量2.0リットルタイプです

    恐れ入りますが、こちらの商品はメーカー直送となりますので
    お支払方法は、銀行振込かクレジット決済のみでお願いいたします。

    (方法はご利用になれません) 
    ご了承をお願いいたします
    また、こちらの商品と店頭から出荷するものと同時にご注文頂きました場合、
    店頭から出荷するものは別に送料をご負担いただくようになりますので
    ご了承くださいますようお願い申し上げます。

はじめに

前回のデモで iPad と HoloLens を OSC で通信しようとした際に通信周りが面倒だったのでまとめておきます。

tips.hecomi.com

ちなみに OSC はアドレス付きのデータを扱えるプロトコルで、UDP ベースのものがよく使われます。

薄いNTN NTN 円すいころ軸受 32040XE1, NTN 円すいころ軸受
なので速いですし、生の UDP よりもアドレスや型情報がついている分、圧倒的に使いやすいのでオススメです。

デモ

前回の一例ですが、ここではタッチ座標を iPad から OSC で送信して、それを HoloLens 側で受け取って、その位置に線を描く、というものになっています。

概要

Unity では System.Net.Sockets.UdpClient クラスを利用して簡単に UDP 通信が可能です。

using UnityEngine;
using System.Net;
using System.Net.Sockets;
public class UdpTest : MonoBehaviour
{
    [SerializeField]
    int listenPort = 3333;
    UdpClient udpClient_;
    IPEndPoint endPoint_;
    void Start()
    {
        endPoint_ = new IPEndPoint(IPAddress.Any, listenPort);
        udpClient_ = new UdpClient(endPoint_);
    }
    void Update()
    {
        while (udpClient_.Available > 0) {
            byte[] data = udpClient_.Receive(ref endPoint_);
            // data を使って何か処理する
        }
    }
}

ただ、HoloLens 上で動く UWP アプリでは UdpClient クラスが含まれていません。

代わりに、Windows.Networking.Sockets.DatagramSocket を使う必要があります。

参考: Hololens UDP server? — Hololens Developer Community

コード

ここでは UDP 経由で受け取ったデータは OSC のメッセージに変換して処理するものとします。例として OSC への変換には keijiro さんの unity-osc を利用しています。

github.com

using UnityEngine;
using UnityEngine.Assertions;
#if UNITY_EDITOR
using System.Net;
using System.Net.Sockets;
#else
using System;
using System.IO;
using Windows.Networking.Sockets;
#endif
public class TouchOscServer : MonoBehaviour
{
    [SerializeField]
    int listenPort = 3333;
    Osc.Parser osc_ = new Osc.Parser();
    void OnMessage(Osc.Message msg)
    {
        // ここで適当に処理する
        Debug.LogFormat("{0} => {1}", msg.path, msg.data[0]);
    }
#if UNITY_EDITOR
    UdpClient udpClient_;
    IPEndPoint endPoint_;
    void Start()
    {
        Assert.IsNotNull(handler, "should set handler.");
        endPoint_ = new IPEndPoint(IPAddress.Any, listenPort);
        udpClient_ = new UdpClient(endPoint_);
    }
    void Update()
    {
        while (udpClient_.Available > 0) {
            var data = udpClient_.Receive(ref endPoint_);
            osc_.FeedData(data);
        }
        while (osc_.MessageCount > 0) {
            var msg = osc_.PopMessage();
            OnMessage(msg);
        }
    }
#else
    DatagramSocket socket_;
    object lockObject_ = new object();
    const int MAX_BUFFER_SIZE = 1024;
    byte[] buffer = new byte[MAX_BUFFER_SIZE];
    async void Start()
    {
        try {
            socket_ = new DatagramSocket();
            socket_.MessageReceived += OnMessage;
            await socket_.BindServiceNameAsync(listenPort.ToString());
        } catch (System.Exception e) {
            Debug.LogError(e.ToString());
        }
    }
    void Update()
    {
        lock (lockObject_) {
            while (osc_.MessageCount > 0) {
                var msg = osc_.PopMessage();
                OnMessage(msg);
            }
        }
    }
    async void OnMessage(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
    {
        using (var stream = args.GetDataStream().AsStreamForRead()) {
            await stream.ReadAsync(buffer, 0, MAX_BUFFER_SIZE);
            lock (lockObject_) {
                osc_.FeedData(buffer);
            }
        }
    }
#endif
}
}

Unity と UWP 側で UDP の処理を切り分けています。Unity Eidtor 上の C# プロジェクトでは #else ブロックの内容が補完付きで編集できませんが、ビルド後の C# プロジェクトの中であれば補完付きで編集やデバッグもできるので、手を加えたい場合はビルド後のプロジェクトに対してやるのをオススメします。

本例では OSC 側でデータをキューに詰めてもらってますが(Osc.Parser.FeedData())、生の NTN NTN B 中形ボールベアリング 7312BDB, NTN B 中形ボールベアリング
のデータとして使いたい場合も同様に受信部でキューしておいて、メインスレッドで処理されるよう次回の Update 時にキューから取り出して処理、みたいな流れになると思います。

おわりに

HoloLens といろんなものを連携させて是非遊んでみてください。

CodkagalmudugishaLagaHeloWararkaXaqiiqda | ishaWararkaSuganeeSomaliaFriday,April28th,2017HomeWararkaMaantaWararkaDalkaWararkaGalmudugBanaadirNewsEnglishWararkamaantaDAAWO:XasanDaahirAweysooMuuqaalkiiuguhoreeyaysooduubay,Xaaladiisa&SirBadanoouuFashiliyay-Apr27,2017WadaadkaCaankaaheeXasanDaahirAweyskaasoomudosanadoahxabsiguri...DFoowaraanlafileynkasoosaartaywadahadalkiiGalmudug&Ahlusuna-Apr27,2017DowladdaFederaalkaSoomaaliyaayaacaawasoosaartaywarkusaabsanwaanwaanntiiaykadhex...DHAGEYSO:WaxgaradkaGalmudugookuhanjabayinfarogelindegdegahkusameyndoonaan…-Apr27,2017WaxaaodayaashadhaqankaGalmudug,markiiuguhoreysaykahadleendoorashadamadaxweynahamaamulkaoodib...Akhriso:BooqashadaFarmaajoEeTurkigaIyoHehiisyadaTaariikhigaAhEeLabadaDhinac-Apr27,2017MadaxweynahaSoomaaliyaMaxamedCabdullahiFarmaajoiyowafdiuuhogaaminayoayaahaatanbooqasho3maalmood...WARDEGDEG:LaboWiilooWalaaloahoosixungoordhowloogudilayMuqdisho(Magacyadooda)-Apr27,2017WararkanagasoogaarayodegmadaWadajirayaakuwaramayainlagudilayxaafadaSiliga...Top:DFoobillowdayqorshihiiciidanka&SidalooguqeybiyeyMaamulada-Apr27,2017WasiirkaDifaacaXukumaddaSoomaaliyaC/rashiidC/llaahiMaxamedayaabilaabaydiyaarintaCiidamadaXooggaeedhawaan...XOG:BeelishortaagtayMasuuluuMagacaabayRWkheyreiyoMDFarmaajooofarogeliyay-Apr27,2017CuleesbadanayaadhankabeeshaDaaroodkagayimidMadaxweyneFarmaajoKadibmarkiiladamcay...WarDegDeg:-Al-shabaabooWeerarKuahHoteeloayDeganYihiinWasiiradaSoomaliya-Apr27,2017IlolagukalsoonankaroayaaxaqiijiyayinDagaalyahanaxXarakadaAl-shabaabayweerarkuyihiinHoteelo...Sawirro:14RuuxooShubanBiyoodugugeeriyootaydeegaankaGadoon-Apr27,2017DeegaankaGadoonoohoostagadegmadaDhuusamareebeeGobolkaGalgaduudayaatodobaadkanwaxaacudurkaShuban...WarDegDegah:-Ra’iisulWasaarahaSoomaaliyaooMuqdishokulaShirsanHogaamiyahaGuudEeAhlusunna-Apr26,2017Ra'iisulWasaarahaXukumaddaSoomaaliyaXasanCaliKheyrreayaaCaawaKulanlalehGuddoomiyahaGuud...WARDEGDEGAH:MadaxweyneFarmaajoooYuusufJeelleumagacaabayXilCusub-Apr26,2017MadaxweynahaSoomaaliyaMaxamedC/llaahiFarmaajoayaamaantaumagaacabayMaareeyahaGuudeeHey’addaSaadaasha...(WarCusub);-MusharraxiintaMadaxweynahaMaamulkaGalmudugooMudoKoobanLooQabtay..-Apr26,2017GuddigadoorashadaGalmudugayaamuddo24-saacahgudaheedugayeeraydegmadaCadaadoineyku...FAALLO:YaadiiddanDowladdaMadaxweyneFarmaajo?-Apr26,2017Waxaanfalanqeyn-taydansikoobanugusharraxayaaindadbadanaysiqaldanuisticmaalayaan...DHAGEYSO:MahadSalaad”MadaxdaQarankaeeGodkakuridayaCiidamadawaaninlaFadeexeeyalanaMaxkamadeeyo”+(XildhibaanDamu-Jadiid)..-Apr26,2017ildhibaanMahadMaxamedSalaadookamidahXildhibaanadaBaarlamaankaSoomaaliyaayaasheegayin...DEGDEG:DagaalculusoocaawakadhaxqaraxayAl-ShabaabiyoEthiopia-Apr26,2017WararkainagasoogaarayaGobolkaHiiraanayaawaxaaaysheegayaaninDagaalculusuu...DAAWO:MadaxweyneFarmaajooosiweynloogusoodhaweeyayTurkiga-Apr26,2017MadaxweynahaDFSMudaneMaxamedCabdullahiFarmaajoayaagoordhowgaaraymagaaladdaAnkaraeecaasimaddadalka...WararkiiugudanbeeyayshirxasaasiahoocaawausocdaRWKheyre&MadaxdaAhlusuna-Apr26,2017WararkalagahelayomagaaladaMuqdishoayaasheegayainuushirxasaasiahcaawausocdo...­­­MusharaxMadaxweyneXaafDucaaleGeelleoowadaQorshelaguHormarinayoBulshadaGalmudug”Sawiro”-Apr25,2017MusharaxaMadaxweynahaDowladGoboleedkaGalmudugMudaneXaafDucaaleGeelleookamidaMusharaxiintaUgu...Wardegdegah-:JenGabreooweerarAfkaahkuqaadayMadaxweynahaSoomaaliya.-Apr25,2017JenGabreookamidahsaraakiishaciidamadaEthiopiaayaabartauukuleeyahay...UlajeedkaSafarkaMadaxweyneFarmaajoEeDalkaTurkiga-Apr25,2017MadaxweynahaSoomaaliyaMaxamedCabdullahiFarmaajoayaasaacadahasoosocdakusiijeedadalkaTurkiga,...EnglishNewsSomalia:Healthyherdshelpcommunitiessurvive-Jan6,2017Inacrowdedpenmadeofthornyshrubbrushesandtwigs,aherderpulls...U.S.airstrikeinSomaliakilledlocalmilitia,notalShabaab-Nov10,2016ASeptemberU.S.airstrikeinSomaliakilledlocalmilitiaforcesandnotal...SaudikingsendscongratulationstoSomalia,butonwrongday-Oct23,2016SaudiArabia'sKingSalmanhascongratulatedSomalia"ontheanniversaryofthecountry'snational...Somalipiratesfreeforeignsailors‘for3mransom’-Oct22,2016ThecrewofafishingvesselhijackedbySomalipiratesfourandahalf...AMISOMapologisesforshootingdeadacivilianinSomalia-Oct21,2016TheAfricanUnionpeacekeepingmissioninSomalia(AMISOM)onThursdayapologisedforshootingdeada...SomalisecurityforcesapprehendAljazeerajournalist-Oct19,2016TheSomalisecurityforcesarrestedAljazeerajournalist,HamzaMohamedtogetherwiththreeotherjournalists...7DeadasSomaliTroopsFightAl-ShababinTownNearCapita-Oct19,2016SomalipolicesayatleastsevenaredeadafterhoursofclashesasSomali...DowladdaItoobiyaooSoobandhigtayXaqiijintaHeshiiskaPuntlandiyoGalmudug.-Oct19,2016WasaraddaArrimahaDibaddaItoobiyaayaaBarteedaInternetkakusooqortayjiritaankaHeshiiskaaydhanka...WararkiiugudambeeyayAfgooyeiyoCiidamadaDFoodibulawareegay-Oct19,2016CiidamadadowladdaSoomaaliyaayaadibugulaabtaydegmadaAfgooyeeeGobolkaShabeellahaHoose,saacado...Sawiro-MadaxweynahaGalmudugoodhagaxdhigaywaddooyincusub-Oct18,2016MadaxweynahaGalmudugayaamaantadibugulabatayMagaladaCadaadoiyadoohalkaasisidiiranloogu...WardegdegAh:-DagaalCulusooHaddaKaSocdaAfgooye+khasaaraha-Oct18,2016WargoordhawkusoodhacayWarqabadkaWakaaladaWarqaad.comayaasheegayainDagaalXooganuu...Dhageyso-BanaabaxXooganookasocdaMagalada….-Oct18,2016Banaabaxxooganooloogasoohorjeedawarqadkasoobaxayqaramadamadoobeislamrkanalagu...Degdegah-WasiirkaAmnigaGalmudugoogaalkacyokagadhawaaqayarinkusaabsan…-Oct18,2016Wasiirkaamnigagalmudugcismaanciisenuurtaardhuleedoogordhowlahadlaywarbaahintaayaa...DHEGEYSO-XasanSheekh*GalkacyowaxayahaydmeelaanlaguhoyanGalmudugkahor*.-Oct18,2016MadaxwaynahaSoomaliyaXasansheikhayaatilmamayintaaanGalmuduglaDhisiningaalkacyoay...DegDeg:-GalmudugooWarkasoosaartayWada-hadalkaPuntland-Oct18,2016DowladdaGalmudugayaaWarkasooSaartayWada-hadalkaGalmudugaylagaleysoMaamulkaPuntland,...MadaxweynahaGalmudugooUgaasXasanugubaaqayinuuTaageeroMaamulkaHirshabeelle”Sawiro”-Oct18,2016MadaxweynahagalmudugayaamaantadibugusoolabatayMagaladacadaadomadaxweynahaayaawaxaasafarkiisaku...WarDegDegah:-DadkaMagaaladaGaalkacyoooSaakakaCabsiqabainlaguDuldagaalamo-Oct18,2016WararkakaimaanayamagaaladaGaalkacyoeegobolkaMudugayaawaxaysheegayaaninsaakayhalkaasi...MadaxweynahaoouhambalyeeyeymadaxdacusubeemaamulkaHirshabeelle:-Oct18,2016MadaxweynahaJamhuriyaddaFederaalkaeeSoomaaliya,MudanaXasanSheekhMaxamuud,ayaauhambalyeeyayhoggaankacusub...DhageysoDhamaanqudbadihiilagajeediyaydoorashadamadxaweynahahirshabelleiyokuxigeenkiisa….-Oct17,2016MadaxweynahaHirshabellecalicabdulaahiwarsameiyomadaxweynekuxigenkiisacaliguudlaweayaauguhoreyntiiHoos...DEGDEG:CaliGuudlaaweookuguuleystaydoorashadaMadaxweynekuxigeenkaHirshabeelle-Oct17,2016CaliCabdullaahiXuseen(CaliGuudlaawe)ayaakuguuleystaydoorashadaMadaxweynekuxigeenkaMaamulkaHirshabeelle,kaddib...MuuqaalkaGobolkaBanaadirFreeUsersOnlineCounterFARSAMADIICaydaruus©2017CodkagalmudugishaLagaHeloWararkaXaqiiqda-Allrightsreserved.DesignedBye:CaydaruusFirginle.