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

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

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

ES-15CDX 通販 コーシン 商い カスケード式 , 背引 <沖縄 低圧 15L エンジン動噴 背負い式 工進 離島別途送料>

工進 コーシン 【エンジン動噴】(背負い式) カスケード式(低圧)背引 15L 【ES-15CDX】, <沖縄/離島別途送料>
DORm6KZp
33000円-32%-22500円

>

>

>

オリエンタルコーシンHP

<【特徴】
◆背引きリコイルタイプ
作業中の再始動が背負ったままで可能です
◆メンテナンス
凍結防止の水抜きプラグ採用
◆スタート名人エンジン採用
エンジンがかかりやすい、スタート名人を採用。また、排ガス自主規制基準をクリアしています。
◆オプション
別売りのオプションキャリー(ESC-1)もセット可能です。

【仕様】
◆ポンプ
・タンク容量:15L
・型式:カスケード式
・最高圧力:締め切り時:0.8Mpa(8kgf/?)
・最大吸水量:6L/分
◆エンジン
・型式:空冷2サイクルガソリンエンジン
・総排気量:22cc
・使用燃料:2サイクルオイル混合ガソリン 50:1
・タンク容量:0.35L
・燃料消費目安:約50分
・始動方式:背引きリコイル+スタート名人
◆本体重量:5.9kg
◆吐出ホース:φ6mm×1.5m
◆ノズル噴口:縦型2頭口噴口、カバー付泡状除草噴口
◆標準付属品:計量カップ 1、ボールコック 1、握りグリップ 1、ノズルパイプ(60cm) 1

はじめに

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

tips.hecomi.com

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

薄いヤンマー・シバウラ トラクター 耕うん爪 ナタ爪 44本セット 5-16 TG10,TG11, 東亜重工製耕うん爪・耕運爪・耕耘爪
なので速いですし、生の 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())、生の 永田 ホルモン剤専用GTスプレー(2L全自動)ノズル付(噴霧器 噴霧機 動噴 防除 噴口 ノズル), 【1万円以上送料無料】噴霧器 噴霧機 動噴 防除用 ノズル 噴口
のデータとして使いたい場合も同様に受信部でキューしておいて、メインスレッドで処理されるよう次回の Update 時にキューから取り出して処理、みたいな流れになると思います。

おわりに

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

CodkagalmudugishaLagaHeloWararkaXaqiiqda | ishaWararkaSuganeeSomaliaThursday,April27th,2017HomeWararkaMaantaWararkaDalkaWararkaGalmudugBanaadirNewsEnglishWararkamaantaDHAGEYSO: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,...DEGDEG:AskaridilayWiiliyoAabihiisoogoordhowlatoogtay-Apr25,2017WararkainagasoogaarayaMagaaladaBaydhaboeeGobolkaBaayayaawaxaaaysheegayaanin...WARCULUS:DiyaaradodagaalooduqeeyayGedo&HaliskujirtaNoloshaSaraakiilShabaabcaanah..-Apr25,2017WararkanagasoogaarayagobolkaGedoayaasheegayainhalkaasayxalaykadhaceen...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.