Skip to content

Revo 2 适配宇树 G1(测试与常见问题)

示例1:简单动作

1. 机器人配置

修改通用配置 brainco_ws/src/control_py/config/smach_config.yaml

yaml
mode:
	current_mode: simple # 选择预定义的模式

修改模式配置 brainco_ws/src/control_py/control_py/state_manager/<mode>/<mode>_states_config.yaml

yaml
behavior_trees:
	active: # 动作序列

active_expected_duration: # 每个动作的执行时间,在此期间不会被其他动作打断

2. Unitree 终端1: 启动主控制节点和灵巧手节点

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活环境
conda activate g1brainco

# (可选)启动上肢运控
./launch/launch_robot.sh
# (可选)单独启动手臂运控
./launch/launch_robot.sh arm
# (可选)启动全身运控
# 需使用遥控手柄让机器人进入"常规运控模式(R1 + X)"
./launch/launch_robot.sh body

检查输出信息:

nodeinfo
stark_nodeslave[126] get_device_info... DeviceInfo: ...
slave[127] get_device_info... DeviceInfo: ...
双手通信正常
high_cmd_nodeG1 HighCmd service ready下肢运控 bridge 已准备
smach_main_nodeImporting ultralytics YOLO. Please wait...等待 YOLO 模型加载完成(如果启用)
smach_main_nodeMode: eeg 检查正确选择的控制模式
smach_main_nodeIK initialization done.加载 IK
smach_main_nodeRequest 'configure' to start等待 agent 控制命令

3. Unitree 终端2: 启动 Agent 网络服务

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活conda环境
conda activate g1brainco
# 启动 Agent 服务
./launch/launch_trans.sh agent

检查输出信息:

nodeinfo
smach_trans_nodeAll ROS2 services ready检测 ROS2 服务已启动
serverUDP discovery listening on ('0.0.0.0', 37020)等局域网广播发现
agentTCP listening on ('0.0.0.0', 43210)状态机命令端口
agentTCP listening on ('0.0.0.0', 46000)动作/切换命令端口
smach_trans_nodeAgents started网络代理服务已经启动成功

4. 控制端 PC: 打开控制 GUI

sh
# 进入 client 目录
cd ui_client
# 激活conda环境
conda activate braincogui
# 启动 GUI
python ui_client/ui_client.py

执行动作

Init -> Ready -> Active -> (e.g.)a1_Hello -> 手臂放下3s后可执行下个动作

结束动作

(e.g.)a1_Hello -> Ready/Ready(Table Safe) 会打断正在执行的动作
UI configdescriptiondefault
左上角IP同网络下的机器人IP192.168.123.164
Port1内部状态机命令,不可被发现43210
Port2Action切换命令,可以通过广播自动发现46000
State
Init初始状态
Ready机器人准备/回零手臂从当前位置径直恢复原位
Ready (Table Safe)机器人准备/回零手臂绕过桌子恢复原位
Shutdown机器人急停重启需在机器人端重启两个终端命令

注意:

  • 激活命令显示黄色,可达命令显示白色
  • 左侧状态机不影响下肢 HighCmd
  • Active 期间,正在执行的动作在一定时间(可配置)内不会被其他 Action 打断,但可通过 Ready 回零,或通过Shutdown 急停

示例2:手眼标定

1. 机器人配置

修改通用配置 brainco_ws/src/control_py/config/smach_config.yaml

yaml
mode:
	current_mode: calibr # 选择手眼标定模式

检查标定配置 brainco_ws/src/control_py/control_py/state_manager/calibrate/calibrate_config.yaml

yaml
paths:
  cam_calibr_dir: /home/unitree/unitree-g1-brainco-hand/cam_calibr

collection:
  move_range: [0.015, 0.015, 0.015, 0.15, 0.15, 0.15]
  • cam_calibr_dir: 标定数据保存目录
  • move_range: 采集标定数据时机械臂末端随机运动范围

2. Unitree 终端1: 启动主控制节点和灵巧手节点

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活环境
conda activate g1brainco
# (推荐)单独启动手臂运控
./launch/launch_robot.sh arm

检查输出信息:

  • IK初始化结束 "IK initialization done."
  • 当显示 "Request 'configure' to start" 则可以发送状态转换请求

3. Unitree 终端2: 启动 Agent 网络服务

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活 conda 环境
conda activate g1brainco
# 启动 Agent 服务
./launch/launch_trans.sh agent

4. 客户端 PC: 打开控制 GUI

sh
# 进入 client 目录
cd ui_client
# 激活 conda 环境
conda activate braincogui
# 启动 GUI
python ui_client/ui_client.py

5. 采集手眼标定数据

先准备好棋盘格标定板。我们提供与 Revo2 手腕同构的棋盘格标定板3D打印文件标定板(待更新)标定板支架,自行打印后,可直接替换 Revo2 双手完成标定。

分别执行左右手标定

Init -> Ready -> Active -> Calibr-Left-Start -> Calibr-Right-Start -> Ready

采集过程中,程序会自动控制机械臂随机运动并保存数据。默认每侧采集 20 组数据。

生成的数据文件:

  • 图像:cam_calibr/imgs/left/cam_calibr/imgs/right/
  • 机械臂位姿:cam_calibr/arm_pose/left.jsoncam_calibr/arm_pose/right.json

6. 离线计算标定结果

左右手均采集完成后,检查左右手图像

sh
cd ~/unitree-g1-brainco-hand/cam_calibr
chmod +x ./imgs/check_img_grid.sh
./imgs/check_img_grid.sh left
./imgs/check_img_grid.sh right

离线计算标定参数

sh
cd ~/unitree-g1-brainco-hand/cam_calibr
python compute_calibration.py

运行完成后会生成:

  • cam_calibr/settings.yaml

该文件包含左右手对应的相机外参,后续 calibrate 模式会读取该文件用于坐标转换。

示例3:脑控机器人任务

1. 机器人配置

通用配置

修改通用配置 config/smach_config.yaml

yaml
mode:
  current_mode: eeg # 选择当前模式
  trigger_test: False # 转换异常是否触发程序中断(机器人调试时可设置为 True,脑控时推荐 False)

robot:
	robot_dof: 29 # 机器人型号
	safe_height_threshold: 0.07 # 单位:米,相对于机器人腰部零位高度,用于判定是否启用 SafeArmDown

脑控动作域配置

可以修改 eeg 动作配置 state_manager/eeg/eeg_states_config.yaml

yaml
behavior_trees: # 动作序列
active_expected_duration: # 为每个动作设置期望持续时间,单位为秒

视觉配置

部分动作 Grasp-Apple, Pour-Water 需要视觉信息,先擦完成 07 Test Run 示例2 手眼标定

修改视觉偏移 state_manager/eeg/vision_config.yaml

Replay 动作配置

部分动作 BiubiubiuLeRobot 3.0 上肢遥操数据集回放

配置回放数据 state_manager/eeg/datasets_config.yaml

2. Unitree 终端1: 启动主控制节点和灵巧手节点

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活环境
conda activate g1brainco
# 启动全身运控 (推荐先测试上肢动作,再启动全身运控)
./launch/launch_robot.sh body

检查输出信息:

  • IK初始化结束 "IK initialization done."
  • 当显示 "Request 'configure' to start" 则可以发送状态转换请求

3. Unitree 终端2: 启动 Agent 网络服务

sh
# 进入工作空间
cd ~/unitree-g1-brainco-hand/brainco_ws
# 激活 conda 环境
conda activate g1brainco
# 启动 Agent 服务
./launch/launch_trans.sh agent

4. 客户端 PC: 打开控制 GUI

sh
# 进入 client 目录
cd ui_client
# 激活 conda 环境
conda activate braincogui
# 启动 GUI
python ui_client/ui_client.py

通过软件 GUI 管理机器人状态

Init -> Ready -> Active

点击GUI 右侧动作按钮,或者通过脑控机器人训练平台发出动作指令

(e.g.)a1_Hello -> 手臂放下3s后可执行下个动作

通过软件管理结束动作

Ready/Ready(Table Safe) 会打断正在执行的动作

FAQ

System

Q1. 配置自定义网络后,可能无法连接网络

sh
# 移除默认路由
sudo ip route del default via 192.168.123.1 dev eth0

Q2. colcon build 显示系统时钟警告

make[2]: warning:  Clock skew detected.  Your build may be incomplete.
sh
# 查看系统时间
date

显示1970年,可能是无法连接网络导致系统时钟无法自动更新

sh
# 移除默认路由
sudo ip route del default via 192.168.123.1 dev eth0

关闭并重新打开终端

sh
# 查看系统时间同步情况
timedatectl status

时间更新成功

删除 build install log 文件,重新编译

sh
# 注意在正确的 ws 中运行以下命令
rm -rf build install log
colcon build

不再报错

Q3. not found

ros2: command not found
Package 'XXX' not found

以上问题出现可能是没有 source 正确的配置文件

Q4. 遇到任何 ROS 问题,可以尝试:

  1. 关闭所有 Terminal,重新打开新的 Terminal
  2. 删除 build install log 重新编译

Q5. 网络配置

sh
unitree@ubuntu:~$ sudo ifconfig wlan0 up
# 报错 SIOCSIFFLAGS: Operation not possible due to RF-kill

解决:

sh
# 查看
unitree@ubuntu:~$ rfkill list
# 0: phy0: Wireless LAN
#         Soft blocked: yes
#         Hard blocked: no

unitree@ubuntu:~$ sudo rfkill unblock wifi

# 再查看
unitree@ubuntu:~$ rfkill list
# 0: phy0: Wireless LAN
#         Soft blocked: no
#         Hard blocked: no

# 重新运行不再报错
unitree@ubuntu:~$ sudo ifconfig wlan0 up

Q6. SSH 成功 但 VScode 连接远程失败

首先,Download Server 需联网,确认本地网络连接正常

如果多次要求重新输入密码,且显示

Failed to connect to the remote extension host server (Error: ExtensionInstallFailed(ExtensionInstallFailed("Error while installing extensions: getaddrinfo EAI_AGAIN marketplace.visualstudio.com\ngetaddrinfo EAI_AGAIN marketplace.visualstudio.com\n")

是 VS Code 远程 SSH 到 Linux 服务器时无法下载 VSCode 插件 的典型网络问题。DNS 解析失败或超时,即 Linux 服务器无法访问 marketplace.visualstudio.com

解决:

  1. 通过 Windows Powershell 或 Linux 命令行 ssh 连接远程
sh
ssh unitree@192.168.xx.xx
  1. 在 Linux 服务器上运行:
sh
unitree@ubuntu:~$ ping marketplace.visualstudio.com

如失败,则是 Linux 服务器的外网访问问题

  1. 运行:
sh
unitree@ubuntu:~$ cat /etc/resolv.conf

显示

nameserver 127.0.0.53
search Huawei.Local

这意味着 Ubuntu 正在使用 systemd-resolved 的本地 DNS 缓存代理(127.0.0.53),但它无法解析外部域名。

  1. 运行:
sh
unitree@ubuntu:~$ sudo vim /etc/systemd/resolved.conf

找到或添加如下几行(去掉 #):

[Resolve] DNS=8.8.8.8 1.1.1.1
FallbackDNS=114.114.114.114
DNSStubListener=yes

保存

  1. 重启 DNS 服务
sh
unitree@ubuntu:~$ sudo systemctl restart systemd-resolved
  1. 检查 DNS 是否生效
sh
unitree@ubuntu:~$ systemd-resolve --status

如显示

DNS Servers: 8.8.8.8 1.1.1.1
Fallback DNS Servers: 114.114.114.114 8.8.8.8

则已生效

q 退出查看

  1. 再次测试网络
sh
unitree@ubuntu:~$ ping 8.8.8.8
unitree@ubuntu:~$ ping marketplace.visualstudio.com

如果能 ping 通, 则重启 VScode 远程 SSH 不会再出现问题

Control

Q1 Client 扫描不到机器人设备

优先检查:

  • ./launch_robot.sh 以及 ./launch_trans.sh agent 是否已启动,且输出正常
  • 机器人与控制端是否在同一网络
  • 4600037020 是否被占用

Q2 平台看不到新增动作

优先检查:

  • 是否重新编译
  • 当前模式是否正确 src/control_py/config/smach_config.yaml
  • 新动作是否加入 active.children
  • 该编号是否被加入 hidden_action_reg
  • 是否重启了 Agent 并重新扫描设备

Q3 动作能触发,但不能切换下一步

优先检查:

  • active_expected_duration 是否过长
  • allowed_sub_trans 是否定义了不允许切换的状态
  • 使用 auto 的动作是否正确调用了 mark_active_action_done()

Q4 抓取为什么总是右手执行

当前代码中,部分抓取流程入口和中间步骤都存在固定 right 的逻辑。 如果要支持左手或双手,需要同步修改 on_xx_handler 中的处理逻辑。

Q5 识别物体后动作为什么不开始

常见原因:

  • 物体没稳定识别(当前有稳定检测逻辑,如手的晃动可能导致手中的物体无法通过稳定检测判定)
  • 物体检测边框离相机边缘过近

联系方式

如有问题或购买需求,请联系 BrainCo 灵巧手团队,或通过页面帮助入口提交工单。

帮助