01
3D-JOYSTICK
A spatial joystick that lives inside the immersive scene. Push it through 3D space to command motion in three axes.
An open-source visionOS client and Python streaming server. WebRTC video from an Intel RealSense D435i to Apple Vision Pro, with a bidirectional data channel for control. Two interaction protocols — 3D-Joystick and Custom-Gesture — compared in a within-subjects user study.
[ 02 / OVERVIEW ]
An Intel RealSense D435i mounted on the robot streams color, depth, and infrared via a Python WebRTC server. The visionOS client renders the remote track in an immersive scene and transmits velocity commands back over a bidirectional data channel. A simulation mode runs the same input pipeline against a virtual robot for development without hardware.
[ 03 / CONTROL ]
01
A spatial joystick that lives inside the immersive scene. Push it through 3D space to command motion in three axes.
02
Hand pose drives the robot. Pinches, drags, and orientation map straight to velocity commands sent over the data channel.
03
Each protocol is a swappable module. Add one by conforming to the input view-model contract and registering it in the landing picker.
[ 04 / HOW IT WORKS ]
01
A Python server reads from the RealSense D435i, encodes the selected stream, and opens a WebRTC peer connection. Falls back to a regular webcam if no RealSense is attached.
02
Video flows one way. Commands flow the other.
03
The visionOS client renders the remote track in an immersive scene, captures input from the chosen protocol, and pushes velocity commands back to the robot in real time.
[ 05 / SIMULATION ]
A simulation mode runs the same input pipeline against a virtual robot in an immersive scene. Useful for protocol development, gesture validation, and pilot tests when the robot isn't available.
[ 06 / RESEARCH ]
Two protocols. One fixed course. A stopwatch. Locomotion is built around a within-subjects user study that pits 3D-Joystick against Custom-Gesture on the same navigation task — measuring completion time, errors, workload, awareness, sickness, and preference for every participant.
PROTOCOL J
Virtual joystick handles in the immersive scene. Push, pull, twist.
PROTOCOL G
Middle-finger pinch translation, custom rotation gesture. Hands free of UI.
01
From "Go" to crossing the finish line. Seconds, 0.1s precision.
02
Count of times the robot leaves the marked tape line.
03
Cognitive workload across six dimensions, 0–100.
04
Situation Awareness Rating Technique, 0–100.
05
System Usability Scale, 0–100.
06
Simulator Sickness Questionnaire, 0–235.
07
"Which protocol did you prefer?" — binary J or G.
N = 15 participants. Both protocols frozen at one commit. Primary tests via paired t-test; Wilcoxon as backup where normality failed; binomial test on preference.
73%
CHOSE GESTURE
−16%
FASTER WITH G
1
METRIC WON BY J
SUMMARY — Custom-Gesture significantly outperforms 3D-Joystick on completion time, navigation errors, workload, awareness, usability, and preference. 3D-Joystick yields lower simulator sickness scores. Recommendation: adopt Custom-Gesture as the default; monitor SSQ in extended sessions.
[ 07 / GET STARTED ]
01
The Vision Pro client will be on the App Store at launch. Until then, build from
source with Xcode against main.
02
Plug in a RealSense D435i, install the Python deps, and run
python3 Server/app.py. The server prints a network URL — paste it into
the app and connect.
[ 08 / TEAM ]
Six contributors across design and development. Based out of Napoli.
[ 09 / OPEN SOURCE ]
MIT-licensed. Implementation, study materials, and analysis open in the repository. Issues, PRs, and forks for new robots, cameras, and protocols welcome.