🕹️ PND Adam Teleoperation
专为 Adam 系列机器人设计的实时动作映射框架,通过高精度动作捕捉设备实现自然流畅的遥操作体验
采用Noitom动捕系统和Meta Quest 3S作为数据输入源
📋 支持型号
| 型号 | Noitom动捕 | VR头显 |
|---|---|---|
| Adam SP | ✅ | 待开发 |
| Adam Pro | ✅ | 待开发 |
| Adam U | ✅ | ✅ |
效果展示
🏗️ 系统架构
系统采用分布式架构设计:
- 动作输入层:Noitom 动捕系统(Windows平台)或 Meta Quest 3S VR设备
- 控制核心层:pnd_teleoperation 与 pnd-control 运行于Adam机器人内置NUC
- 数据链路:基于ROS 2 Humble构建的实时通信框架

⚙️ 环境配置
Adam内置NUC已预装完整运行环境。如需在其他设备部署,请按以下要求配置:
- 操作系统:Ubuntu 22.04 LTS
- 中间件:Ros2 humble
- 数学库:casadi 3.6.7(需源码编译)
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
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
💃 动作捕捉配置
动作捕捉
启动Axis Studio软件,完成传感器连接与姿态校准。启用BVH数据广播功能,通过UDP协议将动作数据流发送至目标机器人IP地址。
具体操作流程请参考教学视频。
BVH广播配置要点:
- 本机地址:运行Axis软件的计算机IP
- 目标地址:Adam机器人计算机IP
- 网络要求:双方设备需处于同一局域网内

注意
- 标定完成后开始遥操作时,请保持双脚位置固定
- 如需移动位置,请先断开遥操作连接,移动后重新标定
操作前提:
- VR设备与Adam机器人处于同一局域网
- pnd_teleoperation 系统正常运行
- 下方Python依赖环境已正确安装
操作步骤:
- 在Meta Quest 3S浏览器中访问 https://192.168.XX.XX:8443 (替换为实际机器人IP)
- 点击"Start Controller Tracking"启动追踪
- Foxglove界面将显示VR手柄与头显的实时位置
标定姿势要求:

标定流程:
- 保持标定姿势,长按VR右手柄
3秒重置位置 - 保持姿势,按下右手柄A键完成标定
- Foxglove中的Adam机器人模型开始跟随VR动作
- 按下右手柄B键即可断开遥操作连接
🚀 启动遥操作
通过SSH连接机器人(IP地址位于手柄背面,默认密码:pndxyz)
ssh pnd-humanoid@192.168.XX.XX
cd ~/Documents/
git clone https://github.com/pndbotics/pnd_teleoperation.git
cd pnd_teleoperation
./build.sh
sudo su
./run.sh [adam_type] [mocap_driver] [algorithm] # adam_type: adam_sp/adam_u/adam_pro; mocap_driver: noitom/vr; algorithm: pinocchio/mink;
打开一个新的终端:
🖥️ Foxglove 可视化
- 在PC端安装并启动 Foxglove Studio
- 注册登录后点击"Open Connection"
- 通过WebSocket连接机器人:
ws://localhost:8765(将localhost替换为机器人实际IP) - 进入三维可视化面板,导入下方配置代码并点击"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.362406704376102,
"phi": 78.01200929751727,
"thetaOffset": -81.68452995867766,
"targetOffset": [
-4.304686610834797,
0.46408895757669916,
-2.8097074529725844e-16
],
"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,
"axisScale": 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": {}
}
🤖 实机操作
安全警告
- 实机操作存在一定风险,请确保机器人周围3米范围内无障碍物
- 仅在pnd_teleoperation正常运行且预览效果符合预期时,方可接入实机控制
- 接入数据前确认预览中的关节位置与实际机器人姿态基本一致
- 遥操作期间禁止切换其他运行模式(如行走、跑步等演示程序)
- 遇到异常情况立即执行以下紧急操作:
- LT+B:进入停止模式
- LT+RT:退出控制程序
- LB+RB:执行器断电

各型号实机操作
实机遥操作目前基于adam_demo开发,手柄操作与adam_demo一致。原则上adam_demo功能在teleop_bin上完全兼容(未测试)。
- 启动teleop_bin
sh run.sh - 回零(按下 A)
- 站立(按下 X)
- 在站立状态下按下 Right 接入teleoperation数据
- 在站立状态下按下 Left 断开teleoperation数据
打开新的终端
1.启动 pnd_service_dds
✅ 当终端出现
[DDS] Starting publish loop (400 Hz)...时,表示服务已成功启动。
2.启动 pnd_adam_dds
打开新的终端

✅ 当终端出现
FSM start!时,表示服务已成功启动。机器人启动后默认进入 Stop 模式。
- 回零(按下 A)
- 准备(按下 X)
- 在准备状态下按下 Right 接入teleoperation数据
- 在准备状态下按下 Left 断开teleoperation数据
❓ FAQ
当Foxglove页面出现SSL证书警告时,请点击"加载不安全脚本"以正常使用功能。

最后更新:2025-11-27