从宇树摇操avp_teleoperate到unitree_IL_lerobot:如何基于宇树人形进行二次开发

前言

如之前的文章所述,我司「七月在线」正在并行开发多个订单,目前正在全力做好每一个订单,因为保密协议的原因,暂时没法拿出太多细节出来分享

​但可以持续解读我们所创新改造或二次开发的对象,即解读paper和开源库「当然 有些paper/库还没开始用,但也可以提前解读,作为关注了解

而对于我司人形开发的订单,截止到25年4月,背后的机器人多半基于这几家:宇树、傅利叶、乐聚、智元「之所以用的这几家,一半因为我和这些公司熟,一半因为客户已有其中某一家或某几家的本体 需在其基础上做定制开发,如其它厂商看到 有兴趣合作,欢迎私我,比如星海图等等

且无论咱们是用傅利叶集成的lerobot——idp3,还是宇树集成的lerobot——π0,都是可以用宇树开源的摇操代码avp_teleoperate

去收集数据的,相当于

ipd3π0ACT附录:直接支持3d输入的vla
第一步 摇操采集

可以宇树VR摇操采集3d数据

也可以通过ipd3官方开源的摇操代码采集3d点云数据

可以宇树VR摇操采集3d数据,然后3d 改成2d数据,以去适配π0的 数据输入格式
当然,本质上也是可以用ipd3的摇操代码采集3d点云数据,然后再转换成2d

宇树VR摇操采集3d数据
毕竟其改造的Open-television
任意摇操方式
第二步 动作预测

要么傅利叶集成idp3的lerobot库:Fourier-Lerobot,做模仿学习

要么直接通过ipd3官方库做模仿学习宇树集成的unitree_IL_lerobotlerobot官方库:包含π0π0官方库那自然可以用Open-television中所用的ACT策略直接VLA交互

如此,本文便来了:从宇树摇操avp_teleoperate到unitree_IL_lerobot:如何基于宇树人形机器人进行二次开发

第一部分 Apple Vision Pro实现Unitree 人形机器人的远程操作

接下来,我们通过此教程《Apple Vision Pro 遥操作示例》,详细介绍下如何使用 Apple Vision Pro 进行遥操作,以控制宇树科技的 Unitree H1_2 手臂的示例程序。开发者只需佩戴 Vision Pro,即可通过摄像头进行手势追踪以操作机器人

1.1 Ubuntu、双臂 inverse kinematics 环境配置、unitree_dds_wrapper 配置

  1. Ubuntu 20.04 和 Ubuntu 22.04 操作系统下进行测试
  2. 双臂 inverse kinematics 环境配置
    该部分用于配置人形机器人 H1 双臂(共14个自由度)的末端位姿逆运动学求解相关的软件库
    Apple Vision Pro 获取左右两个手腕位姿后,使用 pinocchio 和 CasADi 库加载 URDF 并进行逆运动学计算,求解出到达该位姿的关节电机角度值
    meshcat 库则用于调试时在 Web 端进行可视化显示
    conda create -n tv python=3.8
    conda activate tv
    conda install pinocchio -c conda-forge
    pip install meshcat
    注意
    使用 pip 安装的 pinocchio 有可能不是最新版本 3.1.0,本环境需要使用 3.1.0 版本,请仔细检查
    必须先安装 pinocchio 并确保安装成功,然后再进行 TeleVision 的环境配置。安装顺序颠倒可能导致会安装好的 TeleVision 环境出错
    下文所有终端命令都应该在 conda 的 tv 环境内执行,除非另有说明
  3. unitree_dds_wrapper 配置
    该部分用于配置计算机主机与人形机器人的 unitree_dds_wrapper,可以使用 python 实现主机和机器人之间的通信、控制。请执行下面命令进行安装
    # 安装python版本的 unitree_dds_wrapper
    git clone https://github.com/unitreerobotics/unitree_dds_wrapper.git
    cd unitree_dds_wrapper/python
    pip3 install -e .

1.2 TeleVision 环境配置和 Apple Vision Pro 通信配置

本例程在 TeleVision 开源项目基础上修改完成,下述部分配置也可参考该项目的 README 及相关页面。在此,Isaac Gym 仿真环境用于测试配置正确性

1.2.1 基本环境配置和Isaac Gym安装

使用 git 克隆本项目「avp_teleoperate」至本地后,进入到项目路径下,安装基本功能库:

cd ~
git clone https://github.com/unitreerobotics/avp_teleoperate.git
cd avp_teleoperate
pip install -r requirements.txt

之后,在 Isaac Gym 下载页面下载 Isaac Gym 安装包并解压,然后到 IsaacGym_Preview_4_Package/isaacgym/python 目录下执行下面命令:

pip install -e .

1.2.2 证书生成相关配置

首先,安装mkcert

  1. 安装brew
    sudo apt-get install build-essential procps curl file git
    cd ~
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    当要求输入回车键时,请按下回车。然后继续执行:
    echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> $HOME/.bash_profile
  2. 配置环境变量
    eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
  3. 使用 brew 安装mkcert
    brew install mkcert

接下来,生成证书

  1. 查看本机 IP 地址
    ifconfig | grep inet
  2. 假设本机 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/
  3. 系统防火墙设置
    sudo ufw allow 8012
  4. 在 Apple Vision Pro 中安装证书
    mkcert -CAROOT
    上面命令可以获取到 rootCA.pem 的路径。然后通过苹果的隔空投送功能把 rootCA.pem 文件发送到 Apple Vision Pro

注意:Apple Vision Pro 接收文件前需要启动文件接收功能,方法是:设置 >> 通用 >> 隔空投送 >> 所有人(10分钟)

1.2.3 启用 Apple Vision Pro 的 WebXR 相关功能、进入VR

设置 >> Apps >> Safari浏览器 >> 高级 >> 功能标志 >> 启用 WebXR 相关功能

接下来,便可以进入VR

cd ~/avp_teleoperate/teleop
python teleop_hand.py

打开 Apple Vision Pro 的浏览器输入 https://192.168.123.2:8012?ws=wss://192.168.123.2:8012
点击 "Enter VR" 并且允许跟踪,就可以看到如下画面:

1.3 硬件适配

硬件清单如下所示

物品名称数量渲染图说明
Apple Vision Pro1

参考 Apple 官方网址
计算机1/x86_64 架构
人形机器人 H11/具体型号为 H1_2
灵巧手1

H1可搭载 Inspire Robotics (RH56DFX) 的仿人五指灵巧手,该灵巧手具有6个自由度和12个运动关节,可以模拟人手实现复杂动作

具体可参考该文档

双目相机1

普通 USB 免驱动双目相机

戴在机器人头部,主要作用是辅助操作人员,通过 Apple Vision Pro 观看到机器人视角下工作空间的视野

1.3 启动程序

在执行遥操作的程序前,需要预先启动一些服务支撑的程序

1.3.1 开启灵巧手服务

可以参考《RH56DFX灵巧手开发》配置相关环境和编译控制程序

关于控制方式,因时机械手官方SDK通过串口进行通讯,H1提供一个USB转串口模块,用户可以将该USB插在H1开发计算单元(PC2, PC3)上进行通讯控制灵巧手。此时端口通常为/dev/ttyUSB0

  1. 使用因时官方SDK控制
    用户可以根据因时灵巧手官方通讯协议自行编写程序控制灵巧手
  2. 使用宇树灵巧手SDK控制
    H1通信建立在DDS框架之上,为便于使用unitree_sdk2进行控制灵巧手。宇树提供将串口收发的数据转为DDS消息的示例程序

关于宇树SDK接口的说明

  1. 用户向 "rt/inspire/cmd" 话题发送 "unitree_go::msg::dds::MotorCmds_" 消息控制灵巧手
    从 "rt/inspire/state" 话题接受 "unitree_go::msg::dds::MotorStates_" 消息获取灵巧手状态
  1. 首先到 该网址oss-global-cdn.unitree.com/static 下载灵巧手控制接口程序,并将之拷贝到 机器人 Unitree H1_2 的 PC2 中
  2. 其次,在 PC2 中解压完成后,使用下述命令进行编译
    sudo apt install libboost-all-dev libspdlog-dev
    # Build project
    cd h1_inspire_service & mkdir build & cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    make
    
    # Terminal 1. Run h1 inspire hand service
    sudo ./inspire_hand -s /dev/ttyUSB0
    
    # Terminal 2. Run example
    ./h1_hand_example

如果发现左右灵巧手所有手指不断循环张开、闭合动作则表示成功。确认成功后,关闭 Terminal 2 中的 ./h1_hand_example 程序即可

  • 双臂可以进行遥操作,但是灵巧手却不会动,怎么办?
  • A: 程序中,双臂和灵巧手的控制指令是分开的。先通过上面「开启灵巧手服务」内容中所述的 h1_hand_example 程序检测灵巧手是否正常工作

1.3.2 开启图像推流服务

  1. 把 avp_teleoperate/teleop/image_server 目录中的 image_server.py 拷贝到机器人 Unitree H1_2 的 PC2 中,并在 PC2 内执行下面命令:
    sudo python3 image_server.py
    注意:这里需要检查 OpenCV 读取图像时的参数是否与双目相机硬件匹配,以及对于推流使用的默认5555端口是否可用
  2. 图像推流服务开启以后,可以在主机终端使用 image_client.py 测试通信是否成功(测试成功后记得关闭该程序):
    python image_client.py

1.3.3 启动遥操作程序

python teleop_hand_and_arm.py
# 程序启动后,如果配置正确,终端最终输出 `Please enter the start signal (enter 's' to start the subsequent program):` 信息。

# 此时,佩戴 Apple Vision Pro 的操作人员应将手臂形状摆放为与 Unitree H1_2 初始姿态相接近的姿势,避免初始位姿差距过大导致机器人产生过大的摆动。
# 当操作人员姿势摆放好后,主机操作人员可按下 `s` 字母和回车键,正式启动遥操作程序。这时,机器人双臂便可跟随佩戴 Apple Vision Pro 的操作人员双臂移动

第二部分 avp_teleoperate的源码分析

2.1 avp_teleoperate与OpenTeleVision的差异对比

2.1.1 核心架构的差异对比

avp_teleoperateOpenTeleVision
项目定位与目标由Unitree Robotics开发,专注于使用Apple Vision Pro控制Unitree系列机器人
明确支持多种Unitree机型:G1 (29DoF/23DoF)、H1 (4DoF)、H1_2 (7DoF)等
基于OpenTeleVision等开源项目构建,但进行了针对性优化
学术研究项目,有CoRL 2024论文支持
更通用的远程操作框架,支持多种VR设备
除了远程操作,还包含模仿学习功能
核心架构差异

分层设计——明确分为三大模块:

\rightarrow  image_server(图像传输)

\rightarrow  open_television(姿态获取),将OpenTeleVision作为组件集成,通过tv_wrapper进行封装

\rightarrow  robot_control(机器人控制)
机器人特化:为特定机器人型号设计了专用控制器和逆运动学计算

  - 针对G1、H1_2等不同型号实现了专用控制器
  - 对Dex3和Inspire手部实现了专用控制
  - 使用Pinocchio库进行精确的逆运动学计算
入口程序单一的teleop_hand_and_arm.py作为主入口,集成了所有功能

功能模块化:act(模仿学习)和teleop(远程操作)两大功能模块
网络通信:更复杂的WebRTC通信架构,支持多种设备
研究工具:包含完整的数据收集、处理和训练流程
多入口设计:有teleop_hand.py和teleop_active_cam.py等不同功能入口
技术实现差异

图像处理
  - 使用专门的image_server、image_client架构
  - 支持多相机同步(头部和手腕相机)

通用VR交互
  - 使用WebRTC实现跨设备通信
  - 支持本地和网络流式传输
学习功能
  - 包含完整的模仿学习管线
  - 使用ACT和DETR等深度学习模型

模拟环境
  - 与Isaac Gym等模拟器集成
  - 提供模拟测试环境

源码依赖与复用- 在LICENSE中明确指出基于OpenTeleVision构建
- 复用了OpenTeleVision的远程操作接口,但进行了重组织
- 添加了大量针对Unitree机器人的专有代码
- 作为原始项目,提供了基础架构
- 更通用的实现,但缺少针对特定机器人的优化

总结一下

  1. 架构组织不同
    avp_teleoperate更关注控制层次,分为图像、姿态获取、机器人控制等层
    OpenTeleVision更关注功能模块,分为远程操作和模仿学习等功能
  2. 代码复用关系
    avp_teleoperate是在OpenTeleVision基础上的应用和扩展
    保留了核心远程操作理念,但重新组织了代码结构以适应特定机器人
  3. 技术选择
    avp_teleoperate更注重工业级控制和精确的机器人运动学
    OpenTeleVision更注重通用性、研究功能和跨平台支持

2.1.2 代码结构上的差异对比

avp_teleoperate的代码结构:

├── LICENSE               # 声明基于OpenTeleVision等开源项目构建
├── README.md             # 主要文档(多语言版本)
├── requirements.txt      # 依赖项
├── assets/               # 机器人模型文件
│   ├── g1/               # G1机器人模型(URDF和STL文件)
│   ├── h1_2/             # H1_2机器人模型
│   ├── inspire_hand/     # Inspire手部模型
│   └── unitree_hand/     # Unitree Dex3手部模型
├── hardware/             # 硬件设计文件(摄像头支架等)
├── img/                  # 图片资源(安装指导等)
└── teleop/               # 远程操作核心代码
    ├── teleop_hand_and_arm.py  # 主程序入口
    ├── image_server/     # 图像传输服务
    │   ├── image_client.py
    │   └── image_server.py
    ├── open_television/  # 基于OpenTeleVision的包装
    │   ├── constants.py
    │   ├── television.py
    │   └── tv_wrapper.py
    ├── robot_control/    # 机器人控制代码
    │   ├── hand_retargeting.py
    │   ├── robot_arm_ik.py
    │   ├── robot_arm.py
    │   ├── robot_hand_inspire.py
    │   ├── robot_hand_unitree.py
    │   └── dex_retargeting/    # 精细手部动作重定向
    └── utils/            # 工具函数
        ├── episode_writer.py
        ├── mat_tool.py
        ├── rerun_visualizer.py
        └── weighted_moving_filter.py

而OpenTeleVision的代码结构为

├── LICENSE
├── README.md
├── requirements.txt
├── act/                  # 模仿学习模块(ACT模型)
│   └── detr/             # 目标检测模型
├── assets/               # 资源文件
├── img/                  # 图片资源
├── scripts/              # 各种脚本(处理数据、训练等)
│   ├── post_process.py
│   ├── replay_demo.py
│   └── deploy_sim.py
└── teleop/               # 远程操作核心代码
    ├── dynamixel/        # Dynamixel电机控制
    ├── webrtc/           # WebRTC网络通信
    ├── TeleVision.py     # 核心远程操作类
    ├── Preprocessor.py   # 数据预处理
    ├── constants_vuer.py # 常量定义
    ├── motion_utils.py   # 运动工具函数
    ├── teleop_active_cam.py  # 主动相机控制
    └── teleop_hand.py    # 手部远程操作入口

可以看出,avp_teleoperate代码的整体结构与 TeleVision 保持一致,以下是与 Unitree Robot 相关的文件目录

avp_teleoperate/
├── act                       存放模仿学习策略相关文件
├── assets                    存放机器人 URDF 相关文件 
├── scripts                   存放一些工具类文件
├── teleop                    存放遥操作主要文件
│   │
│   ├── image_server/         图像推流服务端与客户端相关代码
│   │     ├── image_client.py 客户端(仅用于测试 Unitree H1_2 上的图像推流服务是否正常)
│   │     ├── image_server.py 服务端(捕获相机的图像并通过网络对外发送,该代码在 Unitree H1_2 上运行)       
│   ├── robot_control/             存放IK解算、手臂控制相关文件
│   │      ├── robot_arm_ik.py     双臂IK解算代码
│   │      ├── robot_arm.py        双臂控制代码
│   │      ├── robot_hand.py       机械手控制代码
│   │──teleop_hand_and_arm.py   遥操作的启动程序代码
│   │──teleop_hand.py           可用于测试环境配置

// 待更

<think>好的,我需要帮助用户查找关于宇树Z1机械臂在ROS2中的仿真教程或配置方法。首先,我要回忆用户提供的三个引用内容,看看是否有相关信息。 引用[1]提到了宇树Z1机械臂的Gazebo仿真环境安装和键盘控制,使用ROS命令如roslaunch unitree_gazebo z1.launch,但这是ROS1的语法。用户问的是ROS2,所以可能需要确认是否有ROS2的版本。引用[3]同样提到了ROS的相关命令,比如roslaunch和rosrun,这些都是ROS1的。因此,可能需要考虑用户提供的引用主要是关于ROS1的,但用户需要ROS2的信息。 接下来,我需要考虑ROS1和ROS2之间的差异,特别是launch文件格式和包管理工具的变化。ROS2使用colcon构建工具,而ROS1使用catkin。此外,ROS2的launch文件是Python脚本,而不是XML格式。因此,可能需要指导用户如何将现有的ROS1配置迁移到ROS2,或者查找是否有官方支持的ROS2包。 另外,用户提供的引用中没有直接提到ROS2的内容,但引用[3]中的unitree_ros-master.zip可能包含相关代码,需要检查是否有ROS2的分支或说明。同时,引用[2]提到MuJoCo仿真器的模型集,可能需要确认宇树Z1是否有MuJoCo的ROS2接口。 可能的解决方案包括:建议用户查看宇树官方的GitHub仓库是否有ROS2的支持,或者社区是否有移植的教程。另外,可能需要使用ros2_control框架来适配现有的机械臂模型,或者使用Gazebo Ignition与ROS2集成。 需要注意的是,用户可能需要安装必要的ROS2包,如gazebo_ros_pkgs的ROS2版本,并配置相应的URDF和控制器。此外,可能涉及使用colcon构建工具来编译相关功能包,并设置环境变量。 最后,要确保回答中正确引用提供的引用内容,并生成相关问题。例如,关于ROS2与ROS1的区别,或者如何迁移项目到ROS2。</think>关于宇树Z1机械臂的ROS2仿真配置,目前公开资料主要基于ROS1(如引用[1][3]),但可通过以下步骤尝试迁移或适配ROS2环境: ### 一、基础环境配置 1. **安装ROS2与依赖** - 推荐使用Humble版本,需安装Gazebo Fortress(ROS2兼容版本): ```bash sudo apt install ros-humble-desktop ros-humble-gazebo-ros-pkgs ``` 2. **获取宇树官方资源** - 下载unitree_ros2功能包(需确认官方是否提供): ```bash git clone https://github.com/unitreerobotics/unitree_ros2.git ``` 若官方未发布,可尝试将ROS1包手动迁移(需修改`package.xml`和`CMakeLists.txt`) ### 二、关键配置步骤 1. **机械臂模型加载** - 修改URDF文件适配ROS2: ```xml <!-- 原ROS1语法 --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <!-- 改为ROS2兼容格式 --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros2_control.so"> ``` 2. **控制器配置** - 创建ROS2控制接口文件`z1_controllers.yaml`: ```yaml controller_manager: ros__parameters: update_rate: 100 z1_arm_controller: type: position_controllers/JointTrajectoryController ``` ### 三、启动仿真 1. **启动Gazebo+ROS2集成** ```bash source install/setup.bash ros2 launch unitree_gazebo z1.launch.py ``` 注:需将原ROS1的`.launch`文件改写为Python格式[^3] 2. **控制测试** - 使用ROS2命令行工具发布控制指令: ```bash ros2 topic pub /z1/joint_trajectory trajectory_msgs/JointTrajectory ... ``` ### 四、注意事项 1. **硬件接口适配** - ROS2需通过`ros2_control`框架连接仿真模型,需检查`<transmission>`标签配置[^2] 2. **消息格式转换** - 原ROS1的`trajectory_msgs/JointTrajectory`消息需替换为ROS2格式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_JULY_v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值