# Video Demo

# Introduction
This repository implements teleoperation of the humanoid robot Unitree H1_2 using Apple Vision Pro.
# Prerequisites
We tested our code on Ubuntu 20.04 and Ubuntu 22.04, other operating systems may be configured differently.
For more information, you can refer to [Official documentation ](https://support.unitree.com/home/zh/Teleoperation) and [OpenTeleVision](https://github.com/OpenTeleVision/TeleVision).
## inverse kinematics
```bash
conda create -n tv python=3.8
conda activate tv
# If you use `pip install`, Make sure pinocchio version is 3.1.0
conda install pinocchio -c conda-forge
pip install meshcat
```
## unitree_dds_wrapper
```bash
# Install the Python version of the unitree_dds_wrapper.
git clone https://github.com/unitreerobotics/unitree_dds_wrapper.git
cd unitree_dds_wrapper/python
pip3 install -e .
```
## TeleVision and Apple Vision Pro configuration
### basic
```bash
cd ~
git clone https://github.com/unitreerobotics/avp_teleoperate.git
cd ~/avp_teleoperate
pip install -r requirements.txt
cd act/detr && pip install -e .
```
### Isaac Gym
If you want to try teleoperation example in a simulated environment (`teleop_hand.py`):
1. Download Isaac Gym: https://developer.nvidia.com/isaac-gym/download
2. Extracting to the current directory, go to the `IsaacGym_Preview_4_Package/isaacgym/python` directory and execute the command: `pip install -e .`
### Local streaming
**Apple** does not allow WebXR on non-https connections. To test the application locally, we need to create a self-signed certificate and install it on the client. You need a ubuntu machine and a router. Connect the VisionPro and the ubuntu machine to the same router.
1. install mkcert: https://github.com/FiloSottile/mkcert
2. check local ip address:
```bash
ifconfig | grep inet
```
Suppose the local ip address of the ubuntu machine is `192.168.123.2`
3. create certificate:
```bash
mkcert -install && mkcert -cert-file cert.pem -key-file key.pem 192.168.123.2 localhost 127.0.0.1
```
ps. place the generated cert.pem and key.pem files in `teleop`.
```bash
cp cert.pem key.pem ~/avp_teleoperate/teleop/
```
4. open firewall on server:
```bash
sudo ufw allow 8012
```
5. install ca-certificates on VisionPro:
```
mkcert -CAROOT
```
Copy the `rootCA.pem` via AirDrop to VisionPro and install it.
Settings > General > About > Certificate Trust Settings. Under "Enable full trust for root certificates", turn on trust for the certificate.
settings > Apps > Safari > Advanced > Feature Flags > Enable WebXR Related Features
6. open the browser on Safari on VisionPro and go to https://192.168.123.2:8012?ws=wss://192.168.123.2:8012
7. Click `Enter VR` and `Allow` to start the VR session.
### Simulation Teleoperation Example
1. After setup up streaming with either local or network streaming following the above instructions, you can try teleoperating two robot hands in Issac Gym:
```bash
cd teleop && python teleop_hand.py
```
2. Go to your vuer site on VisionPro, click `Enter VR` and `Allow` to enter immersive environment.
3. See your hands in 3D!