Skip to content

Latest commit

 

History

History
204 lines (113 loc) · 7.57 KB

README.md

File metadata and controls

204 lines (113 loc) · 7.57 KB

Geospatial2ros

スマホアプリ (Unity) で Geospatial API を用い、 ROS または UDP 送信できます。
その Unity プロジェクトのファイルです。

gif

Overview 概要

スマホが自己位置推定の単体デバイス (ROS ノード) になります。

Geospatial API により、ストリートビューデータがあるエリアでは 0.5m 精度の緯度・経度・高度・向きの情報を取得できます。

それを ROS の sensor_msgs/NavSatFix と geometry_msgs/Pose で Publish、または、UDP にて緯度・経度・高度・向き・それらの精度の値を指定 IP アドレスに送れます。

使い方は 下記 Usage をどうぞ。

送る頻度はアプリ内で設定できます。ROS 側は ROS-TCP-Endpoint ノードを起動することでTopic が出ます。

(エラー処理等は、適宜追加してください)

なお、ARCore 対応端末でないと実行できません。
(https://developers.google.com/ar/devices)

Requirement

私は下記の環境で試しました。

●Environment

Win 10 64bit
Unity 2021.3.2f1
Android 10 (Xperia 1) -> ARCore 対応端末
Android 9 (Xperia XZ1) -> ARCore 対応端末
(iOS は下のFeatures 参照)

ROS (PC, Ubuntu 20.04, Noetic)

●Unity Packages

ARCore Extensions SDK (v1.31.0)
https://github.com/google-ar/arcore-unity-extensions
(Package Link: https://github.com/google-ar/arcore-unity-extensions.git)

Unity-Technologies/ROS-TCP-Connector (0.7.0)
https://github.com/Unity-Technologies/ROS-TCP-Connector
(Package Link: https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector)

●ROS

ROS-TCP-Endpoint
https://github.com/Unity-Technologies/ROS-TCP-Endpoint

Usage 使い方

当リポジトリをダウンロードし、Unity で開いてください。
(初回は各種パッケージが自動ダウンロードされるため、やや時間がかかります。)

●ROS で送る(pub)場合

■Unity 側(Androidスマホ)
①API key を作成 (Google Cloud Platform (GCP), リンクを参照)
https://zenn.dev/tkada/articles/04b44474149130

(ARCore API の料金は、2022/5 現在無料らしいですが、多量のアクセスがある場合は不明です。どなたかコメント等でお教え頂けると幸いです)

png1

②Geospatial2ros.unity シーンファイルを開きます。

③Unity -> Edit -> Project Settings -> XR Plug-in Management -> ARCore Extensions -> API keyを入力
png2

④Unity -> Rototics -> ROS Settings で IPアドレス、ROS-TCP-Endpoint 用のポート番号を設定してください。
(私はROSの入ったPC が 192.168.0.58 でした。 10000はデフォルトでOK)
(スマホアプリ内で設定してもOKです)
png3

⑤Android 実機のバージョンを設定します。

Unity -> Edit -> Project Settings -> Player のアンドロイドマークのタブ内に、API Level を設定する場所が2個あります。
これはAndroid 実機のバージョンより低い互換ナンバーにくする必要がありますが、そもそも Unity Hub で対応するAndroid API SDK がインストールされている必要があります。 当リポジトリのものは Android 10 指定にしてありますので、適宜変更・SDK 追加等をしてください。 (多分Unity Hub では新しめのバージョンしか最初はインストールされないので、 sdkmanager 等で追加インストールが必要な方もいると思います。)

Setting
png7

Unity Hub モジュールのインストール画面
png6

(参考1)
https://zenn.dev/tetr4lab/articles/4ec6f0a1b4a7cc

(参考2)
https://zenn.dev/tetr4lab/articles/4ec6f0a1b4a7cc

⑥Unity -> File -> Build Settings -> (Android を選び、Switch Platform) -> 上の Scenese In Build に Geospatial2ros.unity を追加 -> Build
apk ファイルが出来ますので、Android 実機に転送して開き、インストールして下さい。

⑦Android スマホは WiFi 等 ROS ホストと同ネットワークに接続しておいて、アプリを実行します。

⑧適宜画面のIP/Port/Rate 等を設定し、Apply Setting & START を押してください。
Status の英語コメントを読み、ストリートビューに出てくる場所を画面にかざすと、Localized され、高精度状態となります。

■ROS 側
ROS 側は ROS-TCP-Endpoint ノードを実行してください。 (Unity 内で ROS-TCP-Connector を利用しています。)

https://github.com/Unity-Technologies/ROS-TCP-Endpoint

# 動作確認

roscore

(別ターミナルで) roslaunch ros_tcp_endpoint endpoint.launch

(別ターミナルで) rostopic echo /fix
(別ターミナルで) rostopic echo /quat
(sensor_msgs/NavSatFix と geometry_msgs/Pose が受信されるはず)

png5

png4

●UDP で送る場合

double (8 byte ) x 7 種類の値を送ります。
適宜、他のIP にて受信してください。

Features

ROS1 で試しましたが、ROS2 もUnity -> Robotics -> ROS Settings の設定を変えれば出来ると思いますが試していません。

Android で試しましたが、iOS も設定すれば出来ました。

動作

https://twitter.com/devemin/status/1531826102259175424?s=20&t=BKsVMaoQVFgkaeSuijiACA

下記リンク参考にお試しください。

また、当プロジェクトがうまく実行できない場合も、下記 zenn記事での設定を確認してみて下さい。

Reference

ARCore Geospatial APIをUnityで使ってみる (Takeshi Kada)
https://zenn.dev/tkada/articles/04b44474149130

ROS-TCP-Connector (0.7.0) Tutorial
https://github.com/Unity-Technologies/Unity-Robotics-Hub/blob/main/tutorials/ros_unity_integration/README.md

Note

初回起動時、ROS-TCP-Connector で接続のログが出ない場合は、IP・ポート・ファイアーウォールの設定を確認しつつ、
アプリの IP / Port / ROS/UDP を設定し Apply Settings を押し、START/STOP のボタンを押す操作を何度か繰り返してみてください。

正しくつながれば、上記動作確認のところのスクショのようにログが出るはずで、rostopic echo /fix にも反応があるはずです。

repeat rate は1秒間に何回発するかの値です。
1.0 Hz = 1秒に1回
0.5 Hz = 1秒に0.5回(つまり 2秒に1回)

Author

twitter

Licence

Apache Licence 2.0

ARCore Extensions SDK v1.31.0 は 一部を除いて Apache Licence 2.0 です。
ROS-TCP-Connector も Apache Licence 2.0 です。

当リポジトリでは、ARCore Extensions SDK より、下記ファイルを引用しています。

Assets/GeospatialConfig.asset (そのまま引用)
Assets/SafeAreaScaler.cs (そのまま引用)
Assets/GeospatialController_withROS.cs (<- GeospatialController.cs を改変)
Assets/Geospatial2ros.unity (<- Geospatial.unity を改変)

結果的に、私が自ら作ったファイルは下2個のファイルだけです。