This Project Baymax is from the course Mixed Reality from ETHz in year 2024. A HoloLens 2 application is developed to assist viusally impaired users navigate in unknown environments.
This Repository contains code runing on the PC to receive and process data from Hololens. Code of the Unity app running on the Hololens is manitained in the other repository: https://github.com/marcopepunkt/MixedReality_Baymax_UnityApp
A demo video is avaiable on https://youtu.be/bi-2wldo6RU. More implementation and user study details of this project is available in our report and poster, which you can find in this repository.
By integrating real-time object detection, spatial audio and navigation features, our app aims to provide a safer and more independent experience in navigating unfamiliar environments with 3 functions:
- Scene description
- Obstacle avoidance
- Public transit directions
Examples and an instruction for usage can be found in our demo video.
- Build our unity app from https://github.com/marcopepunkt/MixedReality_Baymax_UnityApp . We used Unity version 2020.3.42f1.
- Clone this repository on your PC (recommended system: windows or MacOS) and install dependencies from
scripts/environment.yaml
- Connect Hololens and your PC to the same network. set the IP address of the hololens in
run.sh
. if you're using windows, you need to disable firewalls on your PC to be connected to the HoloLens over wifi. - Set API keys (gemini, google maps) in
run.sh
- to be able to use the google maps feature, follow the setup instructions in section Google maps below
- start the unity app on hololens. say "Configure" to open a window where you insert the IP address of your PC, in the format "http://172.20.10.2:5000" (172.20.10.2 is the IP of the PC, 5000 is the port number of the hololens-PC connection in
scripts/baymax.py
. 5000 for windows OS, 6000 for MacOS) - run
run.sh
on your PC - after the PC server has started and the stream to hololens is initialized, you can make queries to baymax using the voice commands described below
- "Configure" - To open UI to change IP
- "Start" - Start Obstacle Avoidance
- "Stop" - End Obstacle Avoidance
- "Hey Baymax" - Activates scene description mode. After the ring, ask anything about the scene in front of you.
- "Abort" - Deactivates scene description mode.
- "Hey Baymax, take me to ... " - Activates google maps mode. Provide a location to get public transportation directions there.
- "Stop" / "Abort" - Deactivates google maps mode.
- install GPS2IP Lite app on phone GPS2IP.
- inside the app: go to Settings > Connection Method, choose TCP Push
- click on TCP Push and write the IP Address of your PC. The port number should be 11123 (should be the same on the app and on
receive_gps.py
) - in Settings > Network Selection, choose Cellular IP if you are connecting over your mobile data
- on PC: download Packet Sender
- inside the packet sender app; go to settings and enable TCP server. write down TCP server port (11123). instructions showing UI here under Test that we can receive GPS2IP data. on the phone app, enable GPS2IP Lite on top of the main screen and follow the instructions from last url to check you are receiving packets on packet sender.
- now you don't have to run packet sender app again when running baymax.py. just enable GPSIP Lite on the phone app each time you need gps coordinates.
- say "hey baymax, take me to ..." -> provides instructions like tram line, time, departure stop
- after hearing "Would you like additional instructions to first tram stop?", if you say "yes", it will give you the first walking instruction to the first tram stop and start receiving your gps coordinates from the phone. this feature is under testing/development and at the moment doesn't guide the user to final destination.