灵犀 X2 二次开发指南
1. 环境总览
表1 环境总览
| 环境 | 系统 | 路径 | 用途 |
|---|---|---|---|
| 机器人 | Ubuntu ARM64,ROS 2 Humble | ~/aimdk(容器内) | 真机编译、控制、SLAM |
| WSL 开发机 | Ubuntu 22.04 x86_64,ROS 2 Humble | ~/aimdk_sim_ws | MuJoCo 仿真 |
| Windows | Windows 11 22H2+ | — | 网络配置、WSL 管理 |
SDK 版本:v1.1.0
仿真栈:MuJoCo 3.13.0 + onnxruntime 1.23.2 + sim2sim_x2.py
2. WSL 与 ROS 2 安装(在 Windows PowerShell 管理员模式执行)
wsl --install -d Ubuntu-22.04重启电脑后,在弹出的 Ubuntu 终端中设置用户名和密码,然后:
- 切换清华源
sudo tee /etc/apt/sources.list > /dev/null <<'EOF'deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiversedeb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverseEOF- 安装底层依赖
sudo apt update && sudo apt upgrade -ysudo apt install -y python3-colcon-common-extensions build-essential curl gnupg lsb-releasesudo apt install python3-colcon-common-extensions -y# ROS 2 密钥与源sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullsudo apt update && sudo apt install -y ros-humble-desktopmkdir -p ~/aimdk_sim_ws/src- 安装python3.10.11
curl -LsSf https://astral.sh/uv/install.sh | shecho 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrcsource ~/.bashrcuv --version# 安装 Python 3.10.11uv python install 3.10.11# 加 --system-site-packagescd ~/aimdk_sim_ws/srcuv venv --python 3.10.11 --system-site-packages .venvsource .venv/bin/activatepython --version # 应该显示 Python 3.10.11# 验证 ROS 2 依赖可见(关键一步,不通过就说明 venv 方式没生效)python -c "import catkin_pkg; print('catkin_pkg ok')"python -c "import empy; print('empy ok')"3. 工作空间与代码同步
3.1 从机器人同步代码到 WSL(机器人无 scp,用 SSH 管道)
在 WSL 终端执行:
# 把机器人上的 extra 目录拉取到 WSL 工作空间ssh agi@<机器人IP> "tar -czf - -C ~/aimdk/extra ." | tar -xzf - -C ~/aimdk_sim_ws/src/# 把 src 目录也拉一份ssh agi@<机器人IP> "tar -czf - -C ~/aimdk/src ." | tar -xzf - -C ~/aimdk_sim_ws/src/如果机器人上有 ~/.ssh/authorized_keys 配置了免密,可以直接执行;否则按提示输入机器人 agi 用户密码。
- 或者直接下载SDK包- 直接下载: SDKv1.1.0
3.2 清理重复包
如果 colcon build 报 Duplicate package names,进入 src 删除多余副本:
cd ~/aimdk_sim_ws/src# 示例:删除 x2_rl_deploy 里重复的 aimdk_msgsrm -rf x2_rl_deploy/aimdk_msgs# 删除无关的宇树第三方机器人控制器rm -rf mc-rl/third_party/unitree_rl_lab/4. 安装依赖
sudo sed -i 's|http://packages.ros.org/ros2/ubuntu|https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu|g' /etc/apt/sources.list.d/ros2-latest.listsudo apt install -y libgflags-dev libgl1-mesa-dri libglfw3 libglew-dev libx11-dev libncurses-devsudo apt install -y libcurl4-openssl-devsudo apt install -y ros-humble-grid-map* ros-humble-rmw-cyclonedds-cpp- ONNX Runtime(后面虚拟仿真mujoco会用,选择性安装)
pip3 install onnxruntime mujoco5. 编译与自动环境加载
#安装第三方库cd ~/aimdk_sim_wssource ~/aimdk_sim_ws/src/.venv/bin/activateuv pip install --python ~/aimdk_sim_ws/src/.venv/bin/python3 catkin_pkg larkuv pip install --python ~/aimdk_sim_ws/src/.venv/bin/python3 empy==3.3.4#去除windows自带的curl影响unset CMAKE_PREFIX_PATHunset CURL_DIR CURL_ROOT CURL_INCLUDE_DIR CURL_LIBRARY
colcon build# 写入 .bashrc 实现自动加载echo "source /opt/ros/humble/setup.bash" >> ~/.bashrcecho "[ -f ~/aimdk_sim_ws/install/local_setup.bash ] && source ~/aimdk_sim_ws/install/local_setup.bash" >> ~/.bashrcsource ~/.bashrc5.1 如果修改了 aimdk_msgs 或其他 ROS 包
cd ~/aimdk_sim_wscolcon build --packages-select aimdk_msgs --allow-overriding aimdk_msgssource install/local_setup.bash6. 网络配置(WSL2)—对网线连接机器人无用!仅对网络连接有效
6.1 前提条件
- Windows 11 22H2 或更高版本
- WSL2 已安装 Ubuntu 22.04
- 建议为 WSL 放行 Windows 防火墙
6.2 启用镜像网络模式
在 Windows 用户目录(如 C:\Users\lenovo\)创建或编辑 .wslconfig:
[wsl2]networkingMode=mirroreddnsTunneling=truefirewall=trueautoProxy=truePowerShell(管理员)执行:
wsl --shutdown重新打开 Ubuntu 终端。
6.3 验证镜像网络是否生效
ip addr showping 192.168.88.88如果 ping 通,说明 WSL 与 Windows 在同一网络平面。
6.4 Windows 端静态 IP
打开 ncpa.cpl,找到连接机器人的“以太网”网卡 → 属性 → IPv4:
- IP 地址:192.168.88.88
- 子网掩码:255.255.255.0
- 网关/DNS:留空
6.5 机器人连接
ping 10.0.1.41ssh agi@10.0.1.41 # 密码通常为 1如需本地查看机器人状态:
export ROS_DOMAIN_ID=0export ROS_LOCALHOST_ONLY=0export ROS_STATIC_PEERS=192.168.88.887. 机器人端开发(SSH + 宿主机编译)
注意:容器方案在机器人上因内核限制不可用(cannot clone: Operation not permitted),以下均为宿主机直接编译。
ssh agi@10.0.1.41 # 密码通常为 1# 进入 SDK 目录cd ~/aimdksource /opt/ros/humble/setup.bashcolcon build # 非首次可跳过source install/local_setup.bash7.1 每次新终端只需
cd ~/aimdksource install/local_setup.bash因为 local_setup.bash 会自动带出 ROS 2 基础环境。
7.2 自动加载(写入 ~/.bashrc)
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrcecho "[ -f ~/aimdk/install/local_setup.bash ] && source ~/aimdk/install/local_setup.bash" >> ~/.bashrcsource ~/.bashrc8. 常用机器人指令
py_examples 里可直接运行的示例脚本如下(部分功能可能未配备,请谨慎运行):

ros2 run py_examples get_mc_action # 获取运动模式ros2 run py_examples set_mc_action SD # 切换模式(PD/DD/JD/SD/LD)ros2 run py_examples preset_motion_client # 预设动作ros2 run py_examples mc_locomotion_velocity # 速度控制ros2 run py_examples play_linkcraft # 播放灵犀工坊作品8.1 获取运动模式 get_mc_action
ros2 run py_examples get_mc_action
输出中的 Mode name 就是当前运动状态,可在最后的运动模式对照表里查对应名称。
8.2 切换运动模式 set_mc_action
ros2 run py_examples set_mc_action SD可用的模式缩写:

出现下面的输出即视为切换成功:

8.3 预设动作 preset_motion_client
ros2 run py_examples preset_motion_client动作—代码对照表:
| 动作名称 | motion | area | 说明 | 动作名称 | motion | area | 说明 |
|---|---|---|---|---|---|---|---|
| 右手挥手 | 1002 | 2 | 稳定站立模式下执行 | 拥抱 | 3008 | 11 | 同上 |
| 左手挥手 | 1002 | 1 | 同上 | 加油 | 3011 | 11 | 同上 |
| 右手握手 | 1003 | 2 | 同上 | 双手平举 | 1010 | 3 | 同上 |
| 左手握手 | 1003 | 1 | 同上 | 右手平举 | 1010 | 2 | 同上 |
| 右手举手 | 1001 | 2 | 同上 | 左手平举 | 1010 | 1 | 同上 |
| 左手举手 | 1001 | 1 | 同上 | 拜拜 | 3031 | 11 | 同上 |
| 右手飞吻 | 1004 | 2 | 同上 | 动感光波 | 3007 | 11 | 同上 |
| 左手飞吻 | 1004 | 1 | 同上 | 右手击掌 | 1008 | 2 | 同上 |
| 鼓掌 | 3017 | 11 | 同上 | 左手击掌 | 1008 | 1 | 同上 |
| 右手敬礼 | 1013 | 2 | 同上 | 双手打叉 | 3009 | 11 | 同上 |
| 左手敬礼 | 1013 | 1 | 同上 | 胸前右手挥手 | 1011 | 2 | 同上 |
| 双手比心 | 1007 | 3 | 同上 | 胸前左手挥手 | 1011 | 1 | 同上 |
| 右手比心 | 1007 | 2 | 同上 | 鞠躬 | 3001 | 11 | 同上 |
| 双手比心 | 1007 | 3 | 同上 | 挠头 | 3024 | 11 | 同上 |
| 右手比心 | 1007 | 2 | 同上 | 抓屁股 | 3025 | 11 | 同上 |
| 左手比心 | 1007 | 1 | 同上 |
按提示输入 arm area ID 与 preset motion ID,出现下面输出即为下发成功:

8.4 速度控制 mc_locomotion_velocity
ros2 run py_examples mc_locomotion_velocity三个数值按需求填写(0.0—1.0,单位 m/s),数值不要太大,防止机器人误伤:

8.5 播放灵犀工坊作品 play_linkcraft
ros2 run py_examples play_linkcraft先列出机器人上已有的作品资源:

在提示符处按索引选择作品,出现 Play success 即为播放成功:

8.6 运动模式对照
表2 运动模式对照
| 缩写 | 模式名 | 说明 |
|---|---|---|
| PD | PASSIVE_DEFAULT | 零力矩 |
| DD | DAMPING_DEFAULT | 阻尼模式 |
| JD | JOINT_DEFAULT | 位置控制站立(关节锁定) |
| SD | STAND_DEFAULT | 稳定站立(自动平衡) |
| LD | LOCOMOTION_DEFAULT | 行走/奔跑 |
官方文档里的完整版本(含使用场景):

9. WSL 图形显示配置(MuJoCo 必需)
9.1 Windows 11(推荐)
WSLg 自带图形支持,直接运行即可弹窗。验证:
xeyesglxgears9.2 Windows 10
需要安装 X Server(VcXsrv 或 Xming),然后在 ~/.bashrc 添加:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):010. 仿真空间
10.1 手动进入
cd ~/aimdk_sim_wssource install/local_setup.bashcd ~/aimdk/extra/mc-rl/rl/sim2sim/python3 sim2sim_x2.py10.2 一键启动脚本
cat > ~/run_sim.sh << 'EOF'#!/bin/bashcd ~/aimdk_sim_wssource install/local_setup.bashcd ~/aimdk/extra/mc-rl/rl/sim2sim/python3 sim2sim_x2.pyEOFchmod +x ~/run_sim.sh以后只需:
~/run_sim.sh10.3 仿真按键
表3 仿真按键说明
| 按键 | 功能 |
|---|---|
| 回车 / 空格 | 从 DAMPING 启动状态机 |
| W / S | 前进 / 后退 |
| A / D | 左移 / 右移 |
| Q / E | 左转 / 右转 |
| 空格 | 原地站立 |
| Backspace | 回到 DAMPING |
| ? | 显示帮助 |
| Ctrl+C | 退出 |
11. 已知问题与故障排查
11.1 编译相关
表4 编译问题排查
| 报错 | 原因 | 解决 |
|---|---|---|
| Duplicate package names | src 下存在同名包 | 删除多余副本(备份目录移出 src) |
| cannot find …/urdf | x2_description 缺少 urdf 目录 | 在 X2_URDF-v1.3.0/ 下 mkdir urdf && cp *.urdf urdf/ |
| Undefined symbol: ProcessInfo | aimdk_msgs 版本缺消息 | 用 x2_rl_deploy/aimdk_msgs 替换并补全 |
| ImportError: McLocomotionVelocity | 替换后缺原 SDK 消息 | 从备份恢复 aimdk_msgs,合入 6 个 HDS 消息 |
11.2 仿真相关
现象:进入 RL_ACTIVE 后机器人持续抽搐或直接躺倒,无法站立。
已尝试:
- 补全 DEFAULT_JOINT_POS 为 31 个关节
- 重置时显式设置 pelvis 完整位姿(位置+四元数)
- 调整 pelvis 高度(0.40 / 0.50 / 0.55)
- 调整稳定步数(500 / 3000)
- 切换 PD 增益(standup_gains / rl_gains)
- 放宽 GRAVITY_PITCH_LIMIT
结论:策略在 IsaacLab 训练,与 MuJoCo 物理环境存在差异,需官方提供 sim2sim 对齐配置。
12. 安全注意事项
- 停止 mc 模块前必须确保机器人有吊挂或安全支撑。
- 真机控制夹爪/灯带前,先确认当前运动模式,避免冲突。
- sudo 权限受限,不要随意安装系统包。
- 容器方案在机器人上不可用,请使用宿主机直接编译。
13. 版本与备份
- 机器人 SDK:v1.1.0
- WSL 工作空间:~/aimdk_sim_ws
- 备份目录:~/aimdk_msgs_bak(已移出 src)
部分内容可能已过时