智能机器人科教集成商
教学   科研   比赛   展示
科学研究

提供最先进的智能机器人科研平台,助力高校用户发文章和申请项目

Kinect Camera 遥操作

宇树科技在GitHub上开源了相关代码,通过Azure Kinect DK相机实现对宇树G1等机器人的遥操作。开发者需在Ubuntu系统下安装相机SDK和身体跟踪SDK等,配置好相关环境后,连接Kinect相机硬件,即可通过其捕捉人体动作,进而控制G1机器人。

项目课程

本文介绍了基于 Azure Kinect DK 深度相机的人形机器人 H1 双手臂遥操作示例程序。该程序实现了对 H1 机器人双手臂的遥控功能。 其中,单个手臂的控制范围包括4个自由度:肩部俯仰关节、肩部滚动关节、肩部偏航关节和肘部俯仰关节。因此,整个系统可以同时控制双臂共 8 个自由度,为人机交互提供了很大的灵活性。

【实验教学目标 】

效果演示

软件环境搭建

本例程在 Ubuntu 20.04 操作系统下进行测试,在其他版本的操作系统上构建时,所需条件和步骤可能会与本文档描述的存在差异。您可以根据实际使用情况调整构建过程。

Azure Kinect 环境配置

Azure Kinect DK 深度相机驱动共包括两部分:相机 SDK 和身体跟踪 SDK 。

1. 相机 SDK

开发者可以在 微软packages网站 手动下载最新的 1.4.1 版本 SDK 安装包: libk4a1.4_1.4.1_amd64.deb 、 libk4a1.4-dev_1.4.1_amd64.deb 、 k4a-tools_1.4.1_amd64.deb。本文档为方便起见,直接使用 wget 命令进行下载,下载完成后依次进行安装:

cd ~/Downloads
wget https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/libk4a1.4/libk4a1.4_1.4.1_amd64.deb
wget https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/libk4a1.4-dev/libk4a1.4-dev_1.4.1_amd64.deb
wget https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/k/k4a-tools/k4a-tools_1.4.1_amd64.deb
sudo dpkg -i libk4a1.4_1.4.1_amd64.deb
sudo dpkg -i libk4a1.4-dev_1.4.1_amd64.deb
sudo dpkg -i k4a-tools_1.4.1_amd64.deb

注意,为了在设备上无需成为“root”用户即可使用 Azure Kinect SDK,需要设置 udev 规则。设置命令如下:

cd ~
wget https://github.com/microsoft/Azure-Kinect-Sensor-SDK/raw/develop/scripts/99-k4a.rules
sudo mv ~/99-k4a.rules /etc/udev/rules.d/#分离并重新连接 Azure Kinect 设备(如果在此过程中已连接)

此步骤完成并连接相机硬件设备后,使用下述命令可打开 Azure Kinect 相机的图像可视化界面:

k4aviewer

效果如下图所示:

2. 身体跟踪 SDK

本例程在 Ubuntu 20.04 操作系统上进行测试。开发者可在可在微软 packages 网站手动下载最新的1.1.2版本安装包: libk4abt1.1_1.1.2_amd64.deb 和 libk4abt1.1-dev_1.1.2_amd64.deb 。

若您使用的操作系统为 Ubuntu 18.04 ,可以切换到 /ubuntu/18.04/ 路径内下载对应安装包。

本文档为方便起见,直接使用 wget 命令进行下载,下载完成后依次进行安装:

#一些可能需要的依赖库
sudo apt-get install libxi-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libxcursor-dev
sudo apt-get install libsoundio1
#开始安装身体跟踪库
cd ~/Downloads
wget https://packages.microsoft.com/ubuntu/20.04/prod/pool/main/libk/libk4abt1.1/libk4abt1.1_1.1.2_amd64.deb
wget https://packages.microsoft.com/ubuntu/20.04/prod/pool/main/libk/libk4abt1.1-dev/libk4abt1.1-dev_1.1.2_amd64.deb
sudo dpkg -i libk4abt1.1_1.1.2_amd64.deb
sudo dpkg -i libk4abt1.1-dev_1.1.2_amd64.deb
#完成后可通过 locate 命令检查路径中是否存在cmake配置文件
locate k4abtConfig.cmake
#成功安装的输出结果如下

完成上述步骤,通过 USB3.0 接口与线缆连接相机设备,使用下述命令可打开 Azure Kinect 相机的身体跟踪可视化界面。

k4abt_simple_3d_viewer

可视化界面内输入 h 键,命令行即可输出使用帮助信息

3. 固件版本(可选)

本例程所使用的 Azure Kinect DK 深度相机固件版本:

#注:直接输入AzureKinectFirmwareTool命令可查看命令使用信息,
AzureKinectFirmwareTool -q
#下方为命令输出信息
== Azure Kinect DK Firmware Tool == 
Device Serial Number: 000348604312
Current Firmware Versions:
  RGB camera firmware:      1.6.110
  Depth camera firmware:    1.6.80
  Depth config file:        6109.7
  Audio firmware:           1.6.14
  Build Config:             Production
  Certificate Type:         Microsoft

若您想更新相机设备到最新固件版本,可参考以下步骤:

#在官方仓库( 
cd ~/Downloads
wget  
#在设备连接的情况下,使用AzureKinectFirmwareTool命令加载二进制文件以更新设备固件
AzureKinectFirmwareTool -u AzureKinectDK_Fw_1.6.110080014.bin

更多信息,请参考 Update Azure Kinect DK firmware

开发环境配置

  • 例程代码:本例程代码修改继承自 Azure Kinect DK Code Samples 。

  • Mujoco:本例程使用 Mujoco 物理引擎进行仿真测试,其版本号为 3.1.5。为方便起见,Mujoco 的仓库文件已经放置于本例程 src/mujoco-3.1.5 目录下,无需开发者手动下载。

  • 模型文件:Mujoco 仿真环境需要的人形机器人 H1 相关的 XML 模型文件,已经放置于本例程 src/unitree_h1 目录下,无需开发者手动下载。

如果开发者想使用 Mujoco 可视化解析该模型文件以便进行研究,可按以下命令进行操作:

# 安装 python 版本 mujoco 
pip install mujoco
# 打开 mujoco 可视化器
python -m mujoco.viewer

用鼠标将 MJCF 模型文件 ( 即 src/unitree_h1/mjcf/scene.xml ) 拖入 MuJoCo Viewer 窗口后,效果如下图所示:

本例程使用 CMake +  ninja 方式构建工程,所以在安装 CMake 的基础上还要安装 ninja,可按以下命令进行操作:

sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install ninja-build

另外还需要安装  Eigen3 库来处理一些数学计算

sudo apt install libeigen3-dev

例程构建

克隆本例程仓库,然后编译:

cd ~
git clone  
cd kinect_teleoperate
mkdir build
cd build
cmake .. -GNinja
#使用ninja编译程序
ninja

成功进行编译后,在 build 目录下可以找到生成的程序可执行文件  kinect_teleoperate

【主要仪器设备 】

QQ_1770087853658.png

设备摆放要求

  1. 如果使用真实设备进行遥操模式,需确保人形机器人 H1 的硬件活动范围内不会碰撞到人或其他物品,以免发生意外;

  2. 确保 Azure Kinect DK 深度相机正面朝上、水平放置于桌面,镜头前无任何遮挡,其视角可以完整扫描到整个人体范围并识别出所有骨骼点;

  3. 操作人员在人形机器人 H1 斜后方45°的安全距离范围内站立,并正面朝向深度相机镜头(位置保证能实时观察遥操作执行情况即可);

【实验项目设置 】

启动程序

在 kinect_teleoperate/build 路径下启动遥操作可执行程序:

./kinect_teleoperate#以下为程序执行后的输出信息
 Basic Navigation:

 Rotate: Rotate the camera by moving the mouse while holding mouse left button
 Pan: Translate the scene by holding Ctrl key and drag the scene with mouse left button
 Zoom in/out: Move closer/farther away from the scene center by scrolling the mouse scroll wheel
 Select Center: Center the scene based on a detected joint by right clicking the joint with mouse

 Key Shortcuts

 ESC: quit
 h: help
 b: body visualization mode
 k: 3d window layout

control loop start...
MujocoRender loop start...
KinectRender loop start...

程序启动后,桌面弹出两个可视化窗口,如下图所示:

唤醒动作

如果在毫无准备的情况下立即执行遥操作功能,可能会带来意外和危险。为避免发生这种情况,程序启动后需要相应的唤醒动作来启动和停止遥操作功能。

  • 唤醒动作描述:遥操作人员在面朝 Azure Kinect DK 相机后呈自然站立姿势,上臂自然下垂、前臂朝向身前且与上臂呈约 90 度夹角的垂直姿态,在此状态下保持数秒钟便可切换遥操作启动或停止状态。

  • 唤醒动作示意图

 

唤醒动作示意图(左图:真人演示;右图:仿真演示)

当程序成功识别唤醒动作,并在命令行终端输出 START. 时功能便已开启,此时可以进行遥操作。
当再一次做出唤醒动作并成功识别后,命令行终端便输出 END. ,此时遥操作功能禁止。

代码目录

下方着重介绍与 Unitree Robot 遥操作功能相关的文件目录

├── CMakeLists.txt       cmake配置文件
├── lib                  kinect 相关库文件备份
└── src                  源代码主目录
    ├── CMakeLists.txt
    ├──            glfw 等第三方库
    ├── kinect_teleoperate_robot
    │   ├── CMakeLists.txt       cmake配置文件
    │   ├── include           
    │   │   ├── jointRetargeting.hpp 关节映射头文件
    │   │   ├── math_tool.hpp        数学工具
    │   │   └── StartEndPoseDetector.hpp 唤醒动作检测代码
    │   └── main.cpp                 主程序代码
    ├── mujoco-3.1.5                 mujoco库
    ├── sample_helper_includes
    ├── sample_helper_libs
    ├── unitree_g1                   Unitree g1 URDF
    └── unitree_h1                   Unitree h1 URDF

注意事项

1.请务必按照本文档的要求安装硬件设备、连接线缆;

2.在遥操过程中,请务必避免遥操作时机器人双臂的活动轨迹重合导致的碰撞!确保机器人硬件活动范围内不会碰撞到人或其他物品,以免发生意外;

3.在使用例程时,必须确保输入的参数和操作流程是正确的;

4.机器人在运行过程中会产生热量,在运行或刚停止时,请不要触摸电机关节部位;

5.例程使用结束后,请务必关闭例程并断电;

FAQ

Q: 只能控制双手臂共 8 个自由度吗?
A: 本例程代码中还包括躯干转动角度以及双手张开闭合状态检测,但它们的跟踪稳定性较差。所以此部分功能的代码在工程中已经被注释禁用,仅供感兴趣用户进行参考。由于 Kinect SDK 跟踪人体骨骼点的各方面限制,因此该功能可能难以扩展到 7 自由度手臂。

Q: 其他相机可以吗?
A: 奥比中光的 Kinect 替代相机从理论上来说也可以。详情请查看 奥比中光Femto Bolt 。

Q: 其他人形机器人可以使用该例程吗?
A: Unitree G1 也可以使用。仿真代码已经加入工程,通过宏定义 #define Control_G1 true 开启(注意此时 H1 控制宏定义应设置为关闭 #define Control_H1 false )。

Q: Kinect 相机前有多个人会发生什么?
A: 本例程中只会跟踪离相机最近的人的操作。

  • 全球首次完成侧空翻的人形机器人

    全球首次完成侧空翻的人形机器人宇树G1图片

    G1人形机器人运动图片

    今天你运动了没?G1人形机器人运动图片

  • G1人形机器人功夫

    G1人形机器人功夫图片

    接着奏乐接着舞

    G1人形机器人接着奏乐接着舞

  • 宇树G1仿生灵动升级

    宇树G1仿生灵动升级

    宇树H1全身关节控制

    宇树H1全身关节控制

  • G1人形机器人开元数据集

    G1人形机器人开元数据集

    2天学会仿人自然行走

    宇树G1人形机器人2天学会仿人自然行走

Donghu Robot Laboratory, 2nd Floor, Baogu Innovation and Entrepreneurship Center,Wuhan City,Hubei Province,China Tel:027-87522899,027-87522877

合作与咨询

渠道商务合作:18062020215

售前技术咨询:13807184032

售后服务热线:18062020228

网站备案号:鄂ICP备17004685号-1 | 技术支持 | 联系我们 | 服务条款与隐私权 | 网站地图