はじめに
今年の 1 月末に mocopi が発売されてから、ネット上で様々な mocopi を使った記事や動画が投稿されています。
弊社でも発売開始直後に購入していたのですが、 しばらく放置 中々記事にすることができず、早数ヶ月経過してしまいました。ただ、せっかく購入したのに何もしないのはもったいないため、遅ればせながら mocopi を使って色々なことをしていきたいと思います。
今回は、まず mocopi から送信されてくるデータのパーサーを作り、今後の開発をスムーズにできるようにできるようなライブラリを作っていこうと思います。
実装について
実装例がないか探してみたところ、公式からパースするためのライブラリはなかったものの、以下の有志の方が作成したコードがありました。
GitHub - seagetch/mcp-receiver: Open source implementation of receiver plugin for mocopi motion tracking system.
Open source implementation of receiver plugin for mocopi motion tracking system. - seagetch/mcp-receiver
https://github.com/seagetch/mcp-receiver
この方の実装言語は Python でしたが、自分の予定では RaspberryPi や Arduino などのマイコンと連携していきたいと思っているので、 Rust で実装しました。
調査
いざ実装を始めて見たものの、そもそも UDP レシーバーを実装したことがなかったため、実際に mocopi の通信を読み取り、 Wireshark を使用してどのようなデータが受信できるか見てみるところから始めました。
mocopi からデータを受信する
まずは UDP 経由でデータを受信できるのか確かめます。
説明書どおりに mocopi を体に装着し、モーションキャプチャ画面まで表示します。
そして、PC の IP アドレスに向けて UDP を送信するように設定し、送信します。
上手くいくと、以下のように PC でデータを受信できます。
mocopiデータをパース
前節でデータを送信の確認ができたので、これと解析レポートを見ながら、このデータをプログラム上で受信し、データを利用しやすいようにパースする処理を書いていきます。
普段は Rust を書かないので、最初はかなり苦戦しましたが、以下のブログで紹介されていた nom というライブラリを使用することで、何とか実装することができました。
https://tech.aptpod.co.jp/entry/2020/10/09/090000