質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Microsoft HoloLens

Microsoft HoloLensは、マイクロソフト社が開発しているヘッドマウントディスプレイ方式のコンピュータです。拡張現実体験のため透明なレンズを備えています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4446閲覧

Hololens2とRosで通信を行って、Hololens2のカメラ映像をraw_imageとして配信したい

12-ko

総合スコア2

Microsoft HoloLens

Microsoft HoloLensは、マイクロソフト社が開発しているヘッドマウントディスプレイ方式のコンピュータです。拡張現実体験のため透明なレンズを備えています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/06/05 03:55

前提・実現したいこと

最近MicrosoftのHololens2を使ったアプリケーション開発を始めたのですが、rossharpを利用してUnityアプリとrosの間でコミュニケーションをとろうと思っています。
Hololens2で起動するアプリ内でHololens2のカメラ映像をraw_imageとしてrosに配信したいです。
(アプリ開発のツールとしてMRTKを導入しています)

発生している問題

まず最初は何も考えずにImagePublisherコンポーネントのImageCameraにHierarchyからMixedRealityPlaySpace/Main Cameraを選択しました。しかし実行してみると、Display1 No Cameras Renderingと出てしまい、エラーとなりました。
そこでこのMain Cameraを複製したところBuildまで上手くいき、アプリもしっかり動き、以下のようにデータも送られていました。
Ubuntu
しかし、この画像をrqt_image_viewを使って可視化してみたところ以下のように画面一面が灰色で上手くHololens2のカメラ映像が表示されません。
Ubuntu
いろいろ検索したのですが、そもそもこのスクリプトを使っているところを見つけられず、手本もなく途方に暮れています。

#ImagePublisher.cs

C#

1using UnityEngine; 2 3namespace RosSharp.RosBridgeClient 4{ 5 public class ImagePublisher : UnityPublisher<MessageTypes.Sensor.CompressedImage> 6 { 7 public Camera ImageCamera; 8 public string FrameId = "Camera"; 9 public int resolutionWidth = 640; 10 public int resolutionHeight = 480; 11 [Range(0, 100)] 12 public int qualityLevel = 50; 13 14 private MessageTypes.Sensor.CompressedImage message; 15 private Texture2D texture2D; 16 private Rect rect; 17 18 protected override void Start() 19 { 20 base.Start(); 21 InitializeGameObject(); 22 InitializeMessage(); 23 Camera.onPostRender += UpdateImage; 24 } 25 26 private void UpdateImage(Camera _camera) 27 { 28 if (texture2D != null && _camera == this.ImageCamera) 29 UpdateMessage(); 30 } 31 32 private void InitializeGameObject() 33 { 34 texture2D = new Texture2D(resolutionWidth, resolutionHeight, TextureFormat.RGB24, false); 35 rect = new Rect(0, 0, resolutionWidth, resolutionHeight); 36 ImageCamera.targetTexture = new RenderTexture(resolutionWidth, resolutionHeight, 24); 37 } 38 39 private void InitializeMessage() 40 { 41 message = new MessageTypes.Sensor.CompressedImage(); 42 message.header.frame_id = FrameId; 43 message.format = "jpeg"; 44 } 45 46 private void UpdateMessage() 47 { 48 message.header.Update(); 49 texture2D.ReadPixels(rect, 0, 0); 50 message.data = texture2D.EncodeToJPG(qualityLevel); 51 Publish(message); 52 } 53 54 } 55} 56

試したこと

  • PlayerSettingでCapablityのWebCameraを有効する
  • Hololens2のResearch Modeを有効にする
  • 送られたデータを解凍してから再送し、表示してみる(結果は同じでした)

補足情報(FW/ツールのバージョンなど)

Unity:2019.4.15f1
MRTK:2.5.1
ros:kinetic
rossharp: https://github.com/EricVoll/ros-sharp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Microsoft公式ドキュメントにあるPhotoCapture機能を用いることで上手くいきました。PhotoCaptureで撮った写真をTexture2Dに変換してImagePublisherスクリプトのデータに代入することで配信でき、それを解凍することで写真の配信が完了できます。

投稿2021/08/30 08:01

12-ko

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問