跳到主要内容

0. 概要

当前仓库有两种类型的遥操作配置:

  • HTC Vive 头戴式显示设备 + 手套 + 手柄
  • Meta Quest3 头戴式显示设备 + 手柄

方案 1 已废弃,下面是方案 2 的使用步骤,以下说明假设读者具备 kuavo 机器人的基本使用方法,如不清楚,请参考相关仓库文档:

1. 安装代码环境

1.1 在 Meta Quest3 上安装所提供的 apk

这是最新版本的 apk,请根据实际情况下载最新版本,并在 quest3 上安装 leju_kuavo_hand.apk:下载地址

1.2 在 PC 上安装相关库

在具备 kuavo 环境的 PC 上,安装以下 python 库:

pip3 install scipy==1.10.1 numpy-quaternion==2023.0.4 protobuf==5.27.2

Note: 如果不是在 kuavo 环境里安装,执行 monitor_quest3.py 脚本时可能会显示缺库,请参考 noitom_hi5_hand_udp_python/requirements.txt 里面的 python 包列表进行安装。

1.3 下载

下载 ik 仓库代码到 src 目录下:

cd <path-to-kuavo-ws>/src
git clone https://www.lejuhub.com/highlydynamic/motion_capture_ik.git
# 或者下载这个开源库
git clone https://www.lejuhub.com/highlydynamic/motion_capture_ik_packaged.git

2. 启动遥操作仿真

在 kuavo 机器人上运行之前,建议在个人 PC 上进行仿真验证:

  • 启动 roscore

  • 启动 IK 并打开可视化并连接 Quest3 设备

  1. 通过 IP 直接连接 Quest3 设备,这种方法在比较复杂的网络环境下仍然试用,比如拥有两个子网,然后机器人和 Quest3 分别不在同一个子网的情况
cd <path-to-kuavo-ws>
source devel/setup.bash
roslaunch motion_capture_ik visualize.launch visualize:=true control_hand_side:=2 send_srv:=1 ip_address:=10.10.20.47 # 请根据实际情况更新 IP 地址
  1. 自动发现并连接,这种情况不需要输入 Quest3 的 IP,机器人会监听 Quest3 的广播并自动连接。这种情况需要满足两个条件: 机器人和 Quest3 连接在同一个路由器下,路由器支持局域网广播。

补充:如果局域网内同时有多台机器人和 Quest3 启动,互相之间的连接是随机的。在这个情况下,请逐步配对机器人和 Quest3,当第一套机器人和 Quest3 连接上之后。再启动第二套的机器人和 Quest3, 以此类推。

依赖:需要 Quest3 安装的 APK 版本 >= 0.0.1-89

cd <path-to-kuavo-ws>
source devel/setup.bash
roslaunch motion_capture_ik visualize.launch visualize:=true control_hand_side:=2 send_srv:=1

Note: 其中:visualize 置为 true 打开可视化, 如果在机器人上使用,可以不开启; control_hand_side 指定控制的手,0表示左手,1表示右手,2表示双手;send_srv 置为 0 表示跳过ros服务调用(该服务用于启动机器人手臂控制),1表示调用ros服务,如果只想查看rviz可视化内容而不控制仿真或实物,请置为 0,否则程序会卡在等待ros服务response的地方。

  • Meta Quest3 上点击安装好的程序,拿上手柄,启动。
  • 长按右遥控器上的 meta 按钮(meta 图标),标定当前位置,眼前的圈转完之后说明标定完毕。
  • 操作者双手姿态与机器人初始姿态保持一致,双手食指分别长按遥控器上面的按钮(约 1-2s),机器人开始运动。
  • 可以在 rviz 中查看 ik 求解的结果,如果 MR 手掌位置与机器人 EEF 的距离过大,遥操作会中断,中断后将人手的位置与机器人位置对准,可以恢复追踪。但如果差异过大,无法追踪,需要重启ik。
  • 如需关闭遥操作,请双手中指分别长按遥控器靠下方的按钮(约 1-2s)。重新启动请参考步骤 5。
  • 在仿真中验证无误后可以在实物上进行测试。

3. 启动实物遥操作

  • 启动 roscore

  • 启动实物机器人并让其站立

cd <path-to-kuavo-ws>
source devel/setup.bash
rosrun dynamic_biped highlyDynamicRobot_node --real
  • 在 kuavo 机器人上启动遥操作

  • 启动 IK 并连接 Quest3 设备

cd <path-to-kuavo-ws>
source devel/setup.bash
# 实物上推荐使用这个launch文件,简化了参数设置
roslaunch noitom_hi5_hand_udp_python launch_quest3_ik.launch send_srv:=1 ip_address:=10.10.20.47 # 请根据实际情况更新 IP 地址
  • 连接实物机器人并显示机器人摄像头的图像回传

依赖

  1. 需要 Quest3 安装的 APK 版本 >= 0.0.1-92

  2. 需要机器人和 Quest3 在同一个路由器网络下,并且路由器没有设置限制 UDP 广播 (一般国产路由器出厂的时候不会限制,比如:小米路由器)

操作方法

  1. 需要连接一个摄像头到运行 launch 文件的 NUC 上,摄像头型号没有严格要求,只要能被系统识别成 RGB 摄像头的设备即可。如果是深度摄像头,只要同时支持输出 RGB 的摄像头即可。

    验证的方法:

    1. 一般是 USB 设备,可以通过 lsusb 来查看连接的设备,例如下面,发现的是 ZED 的设备:

      Bus 002 Device 005: ID 2b03:f682 Technologies, Inc. ZED-M
      Bus 002 Device 002: ID 0bda:9210 Realtek Semiconductor Corp. RTL9210
      Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
      Bus 001 Device 009: ID 2b03:f681 STEREOLABS ZED-M Hid Device
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    2. 通过 ls /dev/video* 查看连接摄像头之后新增的设备名,并使用 rosrun image_publisher image_publisher __name:=camera_publisher _image_transport:=raw /dev/xx设备名称,可以输出如下的 log:

      [ INFO] [1730452487.370854134]: File name for publishing image is : /dev/video0
      [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1758) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource.
      [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
      [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
      [ INFO] [1730452487.430963586]: Flip horizontal image is : false
      [ INFO] [1730452487.431088426]: Flip flip_vertical image is : false

      并使用 rostopic list 查看是否有对应的 topic 存在,注意在查看 rostopic 的时候需要先声明 ROS 的环境变量。如果正常,那么你将在 rostopic list 输出的内容里面看到以下的 log:

      /camera_publisher/camera_info
      /camera_publisher/image_raw
      /camera_publisher/image_raw/compressed
      /camera_publisher/image_raw/compressed/parameter_descriptions
      /camera_publisher/image_raw/compressed/parameter_updates
      /camera_publisher/image_raw/compressedDepth
      /camera_publisher/image_raw/compressedDepth/parameter_descriptions
      /camera_publisher/image_raw/compressedDepth/parameter_updates
      /camera_publisher/image_raw/theora
      /camera_publisher/image_raw/theora/parameter_descriptions
      /camera_publisher/image_raw/theora/parameter_updates
      /camera_publisher/parameter_descriptions
      /camera_publisher/parameter_updates
    3. 如果发现的摄像头是 /dev/video0,那么直接启动默认的 launch 文件即可:roslaunch noitom_hi5_hand_udp_python launch_quest3_ik_videostream.launch。如果设备是其他名称,可以通过参数传入:roslaunch noitom_hi5_hand_udp_python launch_quest3_ik_videostream.launch video_device:=/dev/video对应的设备名称

    4. 启动之后带上 Quest3,启动 Quest3 上的对应程序,如果正常运行,你将看到以下视频的画面。如果图像持续白屏,可能是网络速度较慢或者不稳定,请在视频中耐心等待一会(根据你本地的网络情况而定)。

      Quest3 视频回传

Quest手柄操控

  • 手臂IK 双手放在身体两侧(与机器人手臂处于相似的姿态),长按两个手柄的上扳机,IK解锁,机器人手臂随操作员手臂一同运动。 长按两个手柄的下扳机,IK锁定,机器人手臂保持当前姿态。

  • 手指抓握 上扳机控制拇指和食指的抓握,下扳机控制后三指的抓握

  • 运动行走 运动主要分为 站立 和 行走 两个状态。由右手手柄按键控制: A 站立 B 原地踏步

  • 移动行走要先处于 “原地踏步” 状态, 再由手柄摇杆控制:
    左手摇杆控制前后左右行走,右手摇杆控制左右转向。 推摇杆机器人就运动,松摇杆就原地踏步。
    右手摇杆往上推进入高速模式,往下推为正常模式,默认为正常模式。

4. 键盘控制机器人手臂

闭源版本:请参阅 link

开源版本: 请参阅 link

5. 故障处理

  1. Quest3概率性无法控制,此时画面内手柄变灰,手指或者手柄无法控制任何对象【概率较低】
  • 解决方案:升级 Quest3 系统的固件版本到 V69 以上
  1. 概率性出现Quest3下发的双手位置处于某一固定点附近,可视化中显示为在躯干内部,此时手姿态可控,但位置不会发生变化【概率较高】
  • 解决方案:升级 Quest3 系统的固件版本到 V69 以上

  • 已在程序对该故障作诊断,如果出现该问题将打印错误信息提示用户重启VR程序:

    Detected VR ERROR!!! Please restart VR app in quest3!!!