跳转至

遥操作

专为 Adam 系列机器人设计的实时动作映射框架,通过高精度动作捕捉设备实现自然流畅的遥操作体验

采用Noitom动捕设备Meta Quest 3 VR设备作为数据输入源

支持型号

型号 Noitom 动捕设备 Meta Quest 3 VR设备
Adam SP 待开发
Adam Pro
Adam U

效果展示

系统架构

系统采用分布式架构设计:

  • 动作输入层:Noitom (Windows) 或 Meta Quest 3 (WebVR)。
  • 控制核心层:运行于机器人内置 NUC 的 pnd_teleoperationpnd-control
  • 数据链路:基于 ROS 2 Humble 的实时数据总线。

teleop arch


环境配置

准备工作

  • 硬件状态:机器人已完成 开机流程
  • 网络连接:用户计算机与机器人处于同一局域网段。
  • 连接NUC:本文后续所有指令均在机器人 NUC 上执行。请先在用户计算机上通过终端连接:
    # 将 XX.XX 替换为实际 IP 地址(位于遥控器手柄背面)
    ssh pnd-humanoid@192.168.XX.XX 
    # 初始密码:pndxyz
    

1. 基础依赖安装

更新系统软件包清单并安装必要的开发工具与库:

sudo apt-get update && sudo apt-get install -y \
    build-essential \
    coinor-libipopt-dev \
    gfortran \
    liblapack-dev \
    pkg-config \
    swig \
    git \
    cmake \
    python3 \
    python3-pip \
    git-lfs \
    --install-recommends
2. 核心组件编译CasADi 3.6.7

为了确保运动控制的性能,需要从源码编译带有 IPOPT 支持的 CasADi 3.6.7

cd /tmp && \
git clone https://github.com/casadi/casadi.git casadi && \
cd casadi && \
git checkout 3.6.7 && \
mkdir build && \
cd build && \
cmake -DWITH_PYTHON=ON -DWITH_IPOPT=ON -DWITH_OPENMP=ON -DWITH_THREAD=ON .. && \
make -j$(nproc) && \
sudo make install && \
sudo ldconfig
3. 遥操作仓库配置

获取 pnd_teleoperation源码并配置 Python 虚拟环境:

cd ~/Documents/
git lfs clone https://github.com/pndbotics/pnd_teleoperation.git
cd ~/Documents/pnd_teleoperation
pip install uv --user
uv sync


启动遥操作

Step 1: 环境初始化

连接NUC后,需先进入目录并完成构建:

cd ~/Documents/pnd_teleoperation
./build.sh

Step 2: 运行遥操作程序

使用 spteleop 命令行工具,支持 Tab 键自动补全 指令。

# 加载 CLI 环境
source setup_cli.bash

请选择设备类型

# 以下命令按型号选择其一执行:
spteleop teleop adam_pro noitom pinocchio #或
spteleop teleop adam_sp noitom pinocchio #或
spteleop teleop adam_u noitom pinocchio

安装VR系统依赖 Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

运行遥操作程序

# 所有型号同一命令:
spteleop teleop adam_u webvr mink
点击展开旧版启动脚本(已弃用,将在若干版本后移除):
ssh pnd-humanoid@192.168.XX.XX # 将XX.XX替换为实际IP地址,位于遥控器手柄背面,输入初始密码:pndxyz
cd ~/Documents/pnd_teleoperation
sudo ./run.sh [adam_type] [mocap_driver] [algorithm] # adam_type: adam_sp/adam_u/adam_pro; mocap_driver: noitom/vr; algorithm: pinocchio/mink;

打开新终端:

ssh pnd-humanoid@192.168.XX.XX # 将XX.XX替换为实际IP地址,位于遥控器手柄背面,输入初始密码:pndxyz
cd ~/Documents/pnd_teleoperation
sudo ./preview.sh

Foxglove 可视化

  1. 在PC端安装并启动 Foxglove Studio
  2. 注册登录后点击"Open Connection"
  3. 通过WebSocket连接机器人:ws://localhost:8765(将localhost替换为机器人实际IP)
  4. 进入三维可视化面板,打开设置:

三维面板配置 5. 复制下方代码粘贴到到设置页面,点击"Apply"。配置成功后即可实时观察机器人动作映射效果

点击展开配置代码
{
  "layers": {
    "845139cb-26bc-40b3-8161-8ab60af4baf5": {
      "visible": true,
      "frameLocked": true,
      "label": "Grid",
      "instanceId": "845139cb-26bc-40b3-8161-8ab60af4baf5",
      "layerId": "foxglove.Grid",
      "size": 10,
      "divisions": 10,
      "lineWidth": 1,
      "color": "#248eff",
      "position": [
        0,
        0,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "order": 1
    }
  },
  "cameraState": {
    "perspective": true,
    "distance": 8.362406704377788,
    "phi": 74.10829292531537,
    "thetaOffset": 13.624928863620116,
    "targetOffset": [
      1.3462285617160472,
      3.872395794634993,
      -4.022926534191149e-17
    ],
    "target": [
      0,
      0,
      0
    ],
    "targetOrientation": [
      0,
      0,
      0,
      1
    ],
    "fovy": 45,
    "near": 0.5,
    "far": 5000
  },
  "followMode": "follow-pose",
  "followTf": "world",
  "scene": {
    "meshUpAxis": "z_up",
    "transforms": {
      "showLabel": false,
      "enablePreloading": true,
      "axisSize": 0
    },
    "ignoreColladaUpAxis": true
  },
  "transforms": {},
  "topics": {
    "/robot_description": {
      "visible": true
    }
  },
  "publish": {
    "type": "point",
    "poseTopic": "/move_base_simple/goal",
    "pointTopic": "/clicked_point",
    "poseEstimateTopic": "/initialpose",
    "poseEstimateXDeviation": 0.5,
    "poseEstimateYDeviation": 0.5,
    "poseEstimateThetaDeviation": 0.26179939
  },
  "imageMode": {}
}

动作捕捉设备配置

请选择设备类型

参考 诺亦腾官方教程 下载Axis Studio软件,穿戴动捕服。

使用网线连接用户计算机动捕设备。将该网线对应的用户计算机网卡IP设置为与动捕设备同一网段: 10.42.0.xxx,子网掩码 255.255.255.0

noitom_ip

打开Axis Studio软件设置:

Axis设置

在“设备”->“网络”中选择与动捕设备同一网段IP:10.42.0.XXX

Axis网络

点击绿色图标连接传感器:

Axis网络

启用BVH数据广播,通过UDP协议将动作数据流发送至目标机器人IP地址。配置如下:

  • 本机地址:选择用户计算机无线网卡IP:192.168.XX.XX
  • 目标地址:输入机器人IP:192.168.XX.XX

Axis广播配置

操作步骤

  1. 参考 Meta Quest 3官方教程 佩戴设备。
  2. 在Meta Quest 3头显设备中设置网络与机器人处于同一局域网,连接浏览器访问 https://192.168.XX.XX/webvr (替换为实际机器人IP)。使用VR手柄操作,按Trigger buttons键确定,点击地址栏呼出虚拟键盘,详见下方按键说明。
  3. 点击"Start Controller Tracking"启动追踪,开始标定。此时Foxglove界面将显示VR手柄与头显的实时位置。

标定姿势要求VR标定姿势

标定流程

  1. 长按VR右手柄Meta按钮3秒重置位置。
  2. 保持标定姿势,按下右手柄A键完成标定。
  3. Foxglove中的Adam机器人模型开始跟随VR动作。
  4. 按下右手柄B键即可断开遥操作连接。

注意

  • 标定完成后开始遥操作时,请保持双脚位置固定
  • 如需移动位置,请先断开遥操作连接,移动后重新标定

WebVR 手柄按键说明

Controllers Map

  1. Trigger buttons
  2. Y,X,A and B buttons
  3. Thumbstick
  4. Grip buttonsc
  5. Menu buttons
  6. Meta buttons

WebVR 手柄与实机手部映射

  • 右手柄A按钮:标定
  • 右手柄B按钮:断开遥操作
  • 右手柄Meta按钮:重置VR位置
  • 右手柄A按钮触摸:右手大拇指旋转
  • 左手柄X按钮触摸:左手大拇指旋转
  • 右手柄Trigger按钮:右手拇指、食指开合
  • 左手柄Trigger按钮:左手拇指、食指开合
  • 右手柄Grip按钮:右手中指、无名指、小指开合
  • 左手柄Grip按钮:左手中指、无名指、小指开合

实机操作

安全警告

  • 实机操作存在一定风险,请确保机器人周围3米范围内无障碍物
  • 仅在pnd_teleoperation正常运行且预览效果符合预期时,方可接入实机控制
  • 接入数据前确认预览中的关节位置与实际机器人姿态基本一致
  • 遥操作期间禁止切换其他运行模式(如行走、跑步等演示程序)
  • 遇到异常情况立即执行以下紧急操作:
    1. LT+B:进入阻尼模式
    2. LB+RB:执行器断电

xbox

各型号实机操作

实机遥操作目前基于adam_demo开发,手柄操作与adam_demo一致

  • 启动adam_demo

    打开新的终端

    ssh pnd-humanoid@192.168.XX.XX
    cd /home/pnd-humanoid/Documents/adam_demo/bin
    sh run.sh
    
  • 零位模式(按下 A

  • 站立模式(按下 X
  • 站立模式下按下 十字键 Right 接入teleoperation数据
  • 站立模式下按下 十字键 Left 断开teleoperation数据

1.启动 pnd_service_dds

ssh pnd-humanoid@192.168.41.xx
cd ~/Documents/adam_u_deploy/pnd_service_dds
sudo ./run.sh
控制启动成功

✅ 当终端出现 [DDS] Starting publish loop (400 Hz)... 时,表示服务已成功启动。

2.启动 pnd_adam_dds

打开新的终端

ssh pnd-humanoid@192.168.41.xx
cd ~/Documents/adam_u_deploy/pnd_adam_dds
sudo ./run.sh

控制启动成功

✅ 当终端出现 FSM start! 时,表示服务已成功启动。机器人启动后默认进入 阻尼模式。

  • 零位模式(按下 A)
  • 动作模式(按下 X)
  • 动作模式中按下 十字键 Right 接入teleoperation数据
  • 动作模式中按下 十字键 Left 断开teleoperation数据

FAQ

当Foxglove页面出现SSL证书警告时,请点击"加载不安全脚本"以正常使用功能。

ssl异常


最后更新:2026-03-23