视频演示
简介
本仓库实现了使用Apple Vision Pro对优衣库H1_2人形机器人进行远程操作。
前提条件
我们在Ubuntu 20.04和Ubuntu 22.04上测试了我们的代码,其他操作系统的配置可能有所不同。
有关更多信息,您可以参考官方文档和OpenTeleVision。
逆运动学
conda create -n tv python=3.8
conda activate tv
# 如果使用`pip install`,请确保pinocchio版本是3.1.0
conda install pinocchio -c conda-forge
pip install meshcat
pip install casadi
unitree_dds_wrapper
# 安装Python版本的unitree_dds_wrapper
git clone https://github.com/unitreerobotics/unitree_dds_wrapper.git
cd unitree_dds_wrapper/python
pip install -e .
TeleVision和Apple Vision Pro配置
基础
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
如果您想在模拟环境中尝试远程操作示例(teleop_hand.py
):
- 下载Isaac Gym:https://developer.nvidia.com/isaac-gym/download
- 解压到当前目录,进入
IsaacGym_Preview_4_Package/isaacgym/python
目录并执行命令:pip install -e .
本地流媒体
Apple不允许在非https连接上使用WebXR。要在本地测试应用程序,我们需要创建一个自签名证书并将其安装在客户端上。您需要一台Ubuntu机器和一个路由器。将VisionPro和Ubuntu机器连接到同一个路由器。
- 安装mkcert:https://github.com/FiloSottile/mkcert
- 检查本地IP地址:
ifconfig | grep inet
假设Ubuntu机器的本地IP地址是192.168.123.2
- 创建证书:
mkcert -install && mkcert -cert-file cert.pem -key-file key.pem 192.168.123.2 localhost 127.0.0.1
注:将生成的cert.pem和key.pem文件放在teleop
目录中。
cp cert.pem key.pem ~/avp_teleoperate/teleop/
- 在服务器上打开防火墙:
sudo ufw allow 8012
- 在VisionPro上安装ca-certificates:
mkcert -CAROOT
通过AirDrop将rootCA.pem
复制到VisionPro并安装。
设置 > 通用 > 关于本机 > 证书信任设置。在"为根证书启用完全信任"下,打开对证书的信任。
设置 > 应用程序 > Safari > 高级 > 功能标志 > 启用WebXR相关功能
-
在VisionPro的Safari浏览器中打开https://192.168.123.2:8012?ws=wss://192.168.123.2:8012
-
点击
进入VR
并允许
以开始VR会话。
模拟远程操作示例
-
按照上述说明设置本地或网络流媒体后,您可以尝试在Issac Gym中远程操作两只机器人手:
cd teleop && python teleop_hand.py
-
在VisionPro上进入vuer网站,点击
进入VR
和允许
以进入沉浸式环境。 -
在3D中看到您的手!
使用方法
在启动此程序之前,请至少阅读一次官方文档。
灵巧手服务
您可以参考灵巧手开发配置相关环境并编译控制程序。首先,使用此URL下载灵巧手控制接口程序,并将其复制到Unitree H1_2的PC上。在Unitree H1_2的PC上,执行以下命令:
sudo apt install libboost-all-dev libspdlog-dev
# 构建项目
cd h1_inspire_service & mkdir build & cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
# 终端1. 运行h1 inspire手服务
sudo ./inspire_hand -s /dev/ttyUSB0
# 终端2. 运行示例
./h1_hand_example
如果两只手连续开合,表示成功。成功后,关闭终端2中的./h1_hand_example
程序。
图像服务器
将avp_teleoperate/teleop/image_server
目录中的image_server.py
复制到Unitree H1_2的PC上,并在PC上执行以下命令:
sudo python image_server.py
图像服务启动后,您可以在主机终端中使用image_client.py
测试通信是否成功:
python image_client.py
开始
警告:所有人员必须与机器人保持足够的安全距离,以避免危险!
python teleop_hand_and_arm.py
代码库教程
代码的整体结构与TeleVision保持一致,我们只关注与优衣库机器人相关的修改文件目录。
avp_teleoperate/
│
├── act [与ACT策略用于模仿学习相关的文档]
│
├── assets [存储机器人URDF相关文件]
│
├── scripts
│
├── teleop
│ ├── image_server/ [图像传输服务器和客户端代码]
│ │ ├── image_client.py [客户端(仅用于测试图像流服务是否正常,不用于远程操作)]
│ │ ├── image_server.py [从双目相机捕获图像并通过网络发送(在Unitree H1_2上执行)]
│ │
│ ├── robot_control/ [存储IK求解器、手臂和手部控制相关文档]
│ │ ├── robot_arm_ik.py [手臂的逆运动学]
│ │ ├── robot_arm.py [控制双臂关节并锁定其他部分]
│ │ ├── robot_hand.py [控制手部关节]
│ │
│ │──teleop_hand_and_arm.py [远程操作的启动执行代码]
| |──teleop_hand.py [可用于测试环境配置]
致谢
本代码基于以下开源代码库。请访问URL以查看各自的许可证:
- https://github.com/OpenTeleVision/TeleVision
- https://github.com/dexsuite/dex-retargeting
- https://github.com/vuer-ai/vuer
- https://github.com/stack-of-tasks/pinocchio
- https://github.com/casadi/casadi
- https://github.com/meshcat-dev/meshcat-python
- https://github.com/zeromq/pyzmq
- https://github.com/unitreerobotics/unitree_dds_wrapper
- https://github.com/tonyzhaozh/act
- https://github.com/facebookresearch/detr