Skip to content

Latest commit

 

History

History
143 lines (106 loc) · 5.02 KB

vr_unity.md

File metadata and controls

143 lines (106 loc) · 5.02 KB

ROS#을 이용한 Oculus Quest 2 ROS message 수신



1. Test environment

  • Unity : 2021.3.1f1 LTS
  • ROS# : version 1.6
  1. Unity 개발 환경 구축
  • Unity Hub 실행
  • install버튼을 선택 시 Android Build Support플러그 인 추가
  • Android SDK, Android JDK 모두 선택
  1. 보유한 Oculus Quest 2의 개발자 모드를 유효화
  • 링크에서 Organization 작성
  • 휴대폰 Oculus 앱에서 설정-기타 설정-개발자 모드-on 선택
  1. 프로젝트 작성
  • 3D 템플릿 선택

2. Build Settings

  1. Build Setting 변경
  • File-Build Setting 선택
  • Platform에서 Android 선택 후 Switch Platform 클릭
  1. Oculus Integration
  • Window-Asset Store 선택 후 Oculus Integration 설치 후 import
  1. XR Plug-in Management 설치
  • Window-Package Manager 선택
  • XR Plug-in Management 설치
  1. Player Setting 변경
  • Edit-Project Settings-Player-Other Settings 선택
  • Package Name 설정
  • Minimum API Level : Android 7.1 'Nougat'(API level 25)
  • API Compatibility Level : NET 4.x
  • XR Plug-in Management : Oculus
  1. ROS# import
  • 링크에서 RosSharp.unitypackage 다운로드
  • Asset-Import Package-Custom Package에서 다운로드한 패키지 선택
  1. 추가 세팅
  • Edit-Project Settings-Player-Other Settings 에서 추가 세팅
  • Rendring-Color Space : Linear 선택
  • Configuration-Active Input Handling : Both 선택

3. Main Camera Settings

  1. Hierarchy-Main Camera 삭제
  2. Project에서 Asset/Oculus/VR/Prefabs 열고 OVRCameraRigHierarchy에 드래그 & 드롭
  3. OVRCameraRigOVR Manager 스크립트의 Target Devices를 Quest로 변경

4. Controller Settings

hierarchy

  1. Project-Assets/Oculus/VR/Prefabs-OVRControllerPrefabHierarchy-RightControllerAnchor에 드랍
  2. LeftControllerAnchor에도 똑같이 하고 Inspector-Controller-L Tracked Remote로 변경
  3. Oculus-Tools-Remove AndroidManifest.xml
  4. Create store-compatible AndroidManifest.xml
  5. 아래를 따라 코드 변경
<!--category android:name="android.intent.category.INFO"/-->
<category android:name="android.intent.category.LAUNCHER"/>

5. Build Test

  • Unity와 Oculus Quest 2를 유선 연결 해준 뒤, Build and Run 실행

  • Oculus Quest 2 실행 후, 알 수 없는 앱을 선택한 후 설정해 준 Package Name의 앱을 실행


6. ROS sharp

  1. Hierarchy에서 오른쪽 클릭 후 Create Empty-Game Object, 이름을 RosConnector로 변경
  2. Project-Assets/RosSharp/Scripts/RosBridgeClient/RosCommunication
  3. RosConnector script를 RosConnector Object에 드래그 & 드롭

7. PC setup

  • 아래의 명령을 통해 RosBridge Server install
$ sudo apt-get install ros-<rosdistro>-rosbridge-server
$ roslaunch rosbridge_server rosbridge_websocket.launch
  • ROS PC와 Oculus Quest 2가 같은 Wifi에 연결되어야 함

  • 연결 후 ROS PC terminal에 Client Connected가 뜨면 성공


8. Message setup

  1. Hierarchy에서 오른쪽 클릭 후 3D Object-Plane 작성 후 ImageReceiver로 변경
  2. Inspector에서 다음과 같이 변경
  • Position : (0,0,10)
  • Rotation : (90,0,0)
  • Scale : (-1,-1,0.75)
  1. Project에서 Assets/RosSharp/Scripts/RosBridgeClient/RosCommunication
  • ImageSubscriber 스크립트를 RosConnector Object에 터치
  • 터치한 ImageSubscriber의 Topic을 /camera/color/image_raw/compressed로 설정
  • MessageReceiverImageReceiver Object를 드래그 & 드랍
  1. PC 설정 (D435i 예시)
$ roslaunch rosbridge_server rosbridge_websocket.launch
$ roslaunch realsense2_camera rs_camera.launch
  1. Project-Assets/RosSharp/Scripts/RosBridgeClient/RosCommunication에서

topic

  • PoseStampedPublisher 스크립트를 RosConnector Object에 터치
  • 이후 토픽 명을 설정
  • 세 개의 객체를 Hierarchy에서 드래그 & 드랍
  • 헤드셋 : CenterEyeAnchor
  • L컨트롤러 : LeftControllerAnchor
  • R컨트롤러 : RightControllerAnchor
  1. Project-Assets/RosSharp/RosBridgeClient/RosCommunication에서
  • JoyPublisher스크립트를 RosConnector Object에 터치
  • 토픽 명 설정
  • Assets/RosSharp/Scripts/RosBridgeClient/MessageHandling에서
  • JoyAxisReader 스크립트와 JoyButtonReader를 필요한만큼 RosConnector에 터치
  • JoyAxisReader에서 읽고싶은 Name을 JoyButtonReader의 Name에 설정

9. Final Step

  • 링크 에서 패키지 설치
  • 해당 패키지를 통해 Twist메세지로 로봇 컨트롤 가능!