提供最先进的智能机器人科研平台,助力高校用户发文章和申请项目
宇树科技在GitHub上开源了相关代码,通过Azure Kinect DK相机实现对宇树G1等机器人的遥操作。开发者需在Ubuntu系统下安装相机SDK和身体跟踪SDK等,配置好相关环境后,连接Kinect相机硬件,即可通过其捕捉人体动作,进而控制G1机器人。

本例程在 Ubuntu 20.04 操作系统下进行测试,在其他版本的操作系统上构建时,所需条件和步骤可能会与本文档描述的存在差异。您可以根据实际使用情况调整构建过程。
Azure Kinect DK 深度相机驱动共包括两部分:相机 SDK 和身体跟踪 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
效果如下图所示:

本例程在 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键,命令行即可输出使用帮助信息
本例程所使用的 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

如果使用真实设备进行遥操模式,需确保人形机器人 H1 的硬件活动范围内不会碰撞到人或其他物品,以免发生意外;
确保 Azure Kinect DK 深度相机正面朝上、水平放置于桌面,镜头前无任何遮挡,其视角可以完整扫描到整个人体范围并识别出所有骨骼点;
操作人员在人形机器人 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.例程使用结束后,请务必关闭例程并断电;
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: 本例程中只会跟踪离相机最近的人的操作。


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