硬件:jetson agx xavier,系统 ubuntu 18.04.

1. Azure kinect 简介

Azure Kinect DK 文档
github: Azure-Kinect-Sensor-SDK
github:Azure_Kinect_ROS_Driver

深度相机与 rgb 相机的简要说明

Azure Kinect DK 硬件规格
深度相机的视场:
Narrow Field of View (NFOV) :窄视场深度模式。适合于 X,Y 维度范围小,Z 维度范围大的场景。
Wide Field of View (WFOV) :宽视场深度模式。适合于 X,Y 维度范围大,Z 维度范围小的场景。

Azure Kinect DK 集成了 Microsoft 设计的 1 兆像素时差测距 (ToF) 深度相机,该相机使用符合 ISSCC 2018 的图像传感器。 深度相机 支持如下所述的模式:
在这里插入图片描述
深度相机可选模式解析:
WFOV_UNBINNED:深度图分辨率1024x1024,带畸变
WFOV_2X2BINNED:深度图分辨率512x512,带畸变
NFOV_UNBINNED :深度图分辨率640x576,去畸变
NFOV_2X2BINNED:深度图分辨率320x288,去畸变

Azure Kinect DK 包含 OV12A10 12MP CMOS 滚动快门传感器。 下面列出了 Color camera 支持的工作模式:
在这里插入图片描述

每个传感器设备有关联的独立坐标系,使用 校准函数 可以转换这些坐标系之间的点。 转换函数 转换坐标系之间的整个图像。

2. 安装 Azure Kinect Sensor SDK

直接根据官网 Azure Kinect 传感器 SDK 下载 的步骤安装即可。
目前,唯一支持的Linux 系统分发版是 Ubuntu 18.04。

2.1 安装步骤:

  1. 配置Microsoft的包存储库 (Ubuntu 18.04)
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
sudo apt-get update

若没有 curl 命令,则先安装 curl:

sudo apt install curl
  1. 安装所需的包
  • k4a-tools 包,其中包含 Azure Kinect 查看器Azure Kinect 录制器Azure Kinect 固件工具。安装该包运行:sudo apt install k4a-tools

  • libk4a<major>.<minor>-dev包。<major>.<minor>是版本号,比如(上述)官方说明文档中给出的是1.1,即libk4a1.1-dev,而目前github上最新release已经是1.4了,即libk4a1.4-dev。
    说明:libk4a<major>.<minor>-dev 包中包含针对 libk4a 生成的头文件以及 CMake 文件。 libk4a<major>.<minor> 包中包含共享对象,运行依赖于 libk4a 的可执行文件时需要这些对象。
    安装libk4a1.4-dev 包指令:sudo apt install libk4a1.4-dev

如果该命令成功,则表示 SDK 可供使用。

一个可能对 jetson AGX Xavier 有用的资源链接:#1093 ,libk4a1.4 deb arm64 版 手动下载地址。

2.2 使用测试

在电脑中找到一个叫k4a-tools.list的文件(通常文件路径为/var/lib/dpkg/info/k4a-tools.list),打开,查看 k4aviewer文件的路径(通常为
/usr/bin/k4aviewer)。
打开终端输入以下命令即可打开
Azure Kinect 查看器

cd /usr/bin
sudo k4aviewer

其实在任意路径下执行sudo k4aviewer命令都可以打开Azure Kinect 查看器。

使用Azure Kinect DK 录制器,录制mkv文件。

k4arecorder output.mkv

可能有用的参考:
Azure Kinect DK 深度相机,Ubuntu 18.04系统安装SDK
注意:可能需要安装NVIDIA的显卡驱动
Azure Kinect DK + Ubuntu 18.04,从相机获取图像和点云数据

3. 安装 ROS package : Azure_Kinect_ROS_Driver

有文章引用了Azure-Kinect-Sensor-SDK/docs/usage.md,中的一句话,开始费心扒拉的编译Azure Kinect Sensor SDK源码。

If you are making changes to the SDK, you can build your own copy of the SDK from source。

请不要听信此等过气言论!!!
Building the Azure Kinect ROS Driver 中说只要将Azure Kinect Sensor SDK安装在了默认位置,即可自动被 located。根本不需要编译 SDK 源码!

The Azure Kinect ROS Driver includes CMake files which will try to locate the installed location of the Azure Kinect Sensor SDK. Installing the SDK in a non-default location will result in compile failures when CMake is unable to locate the SDK.

过气参考:
知乎:Azure Kinect DK + ROS (ubuntu 16.04)
Ubuntu18.04+Azure Kinect DK配置全过程(SDK源码+ROS)
ubuntu16.04\18.04安装Azure Kinect SDK+配置ros版 超全详细踩坑记录

3.1 编译Azure-Kinect-Sensor-SDK源码(此节无用,务必跳过)

  1. 拷贝深度引擎文件ibdepthengine.so.2.0(此步似乎不需要,上一节安装完 libk4a1.4-dev 后文件已经在相应的文件夹中了)
cd /usr/lib/x86_64-linux-gnu/libk4a1.4
sudo cp libdepthengine.so.2.0 /usr/lib/x86_64-linux-gnu

jetson TX2 及 Xavier 应该在 /usr/lib/aarch64-linux-gnu 文件夹。

  1. Azure-Kinect-Sensor-SDK源码下载:
git clone -b https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
  1. 安装依赖
    在~/Azure-Kinect-Sensor-SDK/scripts/docker 路径下找到setup-ubuntu.sh文件,右击->属性->权限->勾选允许作为程序执行文件
    打开命令行,执行脚本文件:
sudo setup-ubuntu.sh

若依然无法执行,可直接打开脚本,手动sudo apt install
4. 编译 SDK
编译过程中需要在线下载额外的依赖包,下载的地址在~/Azure-Kinect-Sensor-SDK/.gitmodules中,libyuv包需要翻墙才能下载,在这里需要将其地址改为Github上的源。
在~/Azure-Kinect-Sensor-SDK/路径下按下Ctrl+h按键,显示隐藏文件,此时可以发现.gitmodules文件,找到libyuv对应的url,将其替换为下面地址即可。

url = https://github.com/lemenkov/libyuv.git

编译 SDK

mkdir build
cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug
ninja
# 安装到系统路径中,便于后续 SDK 开发
sudo ninja install

3.2 安装 Azure_Kinect_ROS_Driver

前提,装好 ros 和 Azure-Kinect-Sensor-SDK。

  1. 去掉运行SDK时的Root限制。
    这一步是必要的。因为Azure_Kinect_ROS_Driver 无法获取 root 权限,会报错Failed to open a K4A device. Cannot continue.
    下载Azure-Kinect-Sensor-SDK源码,进入源码根目录中 scripts 文件夹,复制99-k4a.rules文件至 /etc/udev/rules.d/ 。
git clone -b https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
cd Azure-Kinect-Sensor-SDK/scripts 
sudo cp 99-k4a.rules /etc/udev/rules.d/

重新插拔相机电源,测试。显示正常。

$ k4aviewer  # new terminal

附赠 jetson agx xavier 截图指令:gnome-screenshot -a -c ,-a表示截取区域屏幕,-c表示将截屏直接发送到剪贴板

  1. 安装 Azure_Kinect_ROS_Driver 包
# 下载Azure_Kinect_ROS_Driver源码
cd catkin_ws/src
git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git
# 编译工作空间
cd  catkin_ws
catkin_make
roslaunch azure_kinect_ros_driver driver.launch
# 新终端,启动rviz.   add -> by topic ->image 即可查看图像。
rviz # 或 rqt_image_view 查看图像
# 检查当前存在的Topic:
rostopic list
# 使用rosbag工具录制topic:
rosbag record -O image.bag /rgb/image_raw /depth_to_rgb/image_raw
# 回放包中数据:
rosbag play image.bag

depth_to_rgb / image_raw:深度图像,由Azure Kinect SDK转换为彩色相机坐标空间。 调整了该图像的大小以匹配彩色图像的分辨率。

4. Azure Kinect SDK 的 Python API

在 github 上发现了一个项目pyk4a,封装了 Azure Kinect SDK 的 python3 接口。

linux安装方法:

pip install pyk4a

若安装不成功(比如安装时的报错:ERROR: Could not build wheels for pyk4a which use PEP 517 and cannot be installed directly)可先将文件下载到本地,然后编译安装。

git clone https://github.com/etiennedub/pyk4a.git
cd pyk4a
# pip install -r requirements-dev.txt
python setup.py install

一个简单的应用示例:

from pyk4a import Config, PyK4A
from matplotlib import pyplot as plt
# Load camera with the default config
k4a = PyK4A()
k4a.start()
# Get the next capture (blocking function)
capture = k4a.get_capture()
img_color = capture.color
# Display with pyplot
plt.imshow(img_color[:, :, 2::-1]) # BGRA to RGB
plt.show()

更多用法直接查看 main class PyK4A.

5. 补充内容:find_object_2d

参考:ros:find_object_2d
github:find-object
Ros中使用find_object_2d快速实现物体的检测识别
通过ROS控制真实机械臂(16) — 视觉抓取之find_object实现物体识别

find_object_2d是能对物体进行快速识别定位的功能包,该功能包是基于模板匹配算法(包括彩色图像或点云匹配)。实测效果比较差。无法用于复杂的抓取任务。

5.1 安装 find_object_2d

# ros melodic
sudo apt-get install ros-melodic-find-object-2d

5.2 使用

5.2.1 将 /rgb/image_raw 转换为 bgr8rgb8格式

azure kinect输出的/rgb/image_raw是bgra8格式,直接用于 find_object_2d 会报错:
find_object_ros: Encoding "bgra8" detected. Supported image encodings are bgr8 and rgb8...
因此首先要用cv_bridge将/rgb/image_raw转换为 bgr8rgb8格式。

参考:cv_bridge/ Tutorials/ ConvertingBetweenROSImagesAndOpenCVImagesPython

  1. 在ros工作空间src文件夹下创建功能包 image_converter
catkin_create_pkg image_converter sensor_msgs cv_bridge rospy std_msgs
  1. 添加 image_converter_node.py 文件,将/rgb/image_raw转换为bgr8格式,并输出到 /rgb/image_color topic。
#!/usr/bin/env python
from __future__ import print_function
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
class image_converter:
    def __init__(self):
        self.image_pub = rospy.Publisher("/rgb/image_color",Image)
        self.bridge = CvBridge()
        self.image_sub = rospy.Subscriber("/rgb/image_raw", Image, self.callback)
    def callback(self,data):
        try:
            cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
            self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
        except CvBridgeError as e:
            print(e)
def main(args):
    ic = image_converter()
    rospy.init_node('image_converter', anonymous=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down")
    cv2.destroyAllWindows()
if __name__ == '__main__':
    main(sys.argv)
  1. 可执行权限
chmod +x  image_converter_node.py # 可执行权限

5.2.2 测试 find_object_2d

roslaunch azure_kinect_ros_driver driver.launch
rosrun image_converter image_converter_node.py
rosrun find_object_2d find_object_2d image:=/rgb/image_color

在出现的界面左侧空白栏中鼠标右击选择 Add obejct from scene 从场景中选取待检测物体,将想要识别的物体置于场景当中,点击 take picture,然后左上角可以选择拍照的具体的区域或者角点,next之后确认无误end即可。

此时左侧空白处已经添加了一个待识别物体,当我们将该物体放到摄像头的视角当中的时候,待识别物体就会被框选出来。
在这里插入图片描述

查看物体位置:

rosrun find_object_2d print_objects_detected # 输出检测框四个角点坐标
rostopic echo /objects # 查看检测物体的完整信息

其中第二和第三个数字是被测物体的宽和高,后面的九个数字是一个3*3的单应性矩阵。这个矩阵可以根据下图的公式找到目标的当前位置和方向。
在这里插入图片描述

实测效果很差,被测物体姿态偏差稍大就很难被找到了。无法用于抓取操作。

Azure kinect 简介Azure Kinect DK 文档ROS package : Azure_Kinect_ROS_Driver安装 Azure_Kinect_ROS_Driver# 下载cd catkin_ws/srcgit clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git# 编译cd catkin_wscatkin_make修改 k4a_ros_device.h ?路径:Azure_Kine
Azure Kinect虚幻插件 此Unreal( 4.25 )项目包含Azure Kinect插件和用于测试该插件的示例映射。 该插件集成了Azure Kinect传感器SDK(K4A)和Azure Kinect身体跟踪SDK(K4ABT) 。 它捕获并处理人体跟踪数据,并将其映射到虚幻人体模型骨架网格物体上。 该插件最多支持追踪10个物体。 开发工具包 起床并跑步 将<Azure>/tools文件夹添加到“用户或系统的Environment Variables的“ Path变量中。 如果要启用Azure Ki
安装Kinect SDK,并根据需要更新设备固件版本: 设备固件版本必须至少为1.6.110079014或更高。 如果在Linux上,请确保相关的k4a.so和k4abt.so动态库在您的路径中。 目前只包装了人体追踪器,但添加其他包装器应该很容易,PR也将不胜感激! 有一个非常简单的示例,您可以通过以下方式运行: py -3 example/simple_sample.py 我们正在使用它为开发一个Azure Kinect插件,您可以在此处看到非常早的演示: 该插件可供早期访问,并将很快开源,请发送电子邮件至以获得早期访问。 不要在Windows应用商店中使用Python 如果出现错误: [2021-01-18 14:05:28.307] [error] [t=6336] [K4ABT] D:\a\1\s\src\TrackerHost\Track
参考官网教程: https://docs.microsoft.com/zh-cn/azure/kinect-dk/build-first-app 文章目录一、项目配置1. 新建空白C++控制台工程并添加源文件Main.cpp2. 安装 Azure Kinect NuGet 包3. 添加头文件和库文件3.1 加入头文件k4a.h3.2 配置头文件目录和库文件目录二、完整源代码、结果展示 一、项目配置 1. 新建空白C++控制台工程并添加源文件Main.cpp Main.cpp添加后可以先空着。
Azure Kinect SDK (K4A) 欢迎使用 Azure Kinect 传感器 SDK! 我们希望您可以使用它来构建许多出色的应用程序并参与该项目。 不要羞于提出问题并提供反馈。 有关设备信息和可用文档,请参阅 。 Azure Kinect SDK是一个跨平台(Linux 和 Windows)用户模式 ​​SDK,用于从 Azure Kinect 设备读取数据。 为什么要使用 Azure Kinect SDK Azure Kinect SDK 使你能够充分利用 Azure Kinect 相机。 功能包括: 深度摄像头访问 RGB 相机访问和控制(例如曝光和白平衡) 运动传感器(陀螺仪和加速度计)访问 同步深度-RGB 摄像头流,摄像头之间的延迟可配置 外部设备同步控制,可配置设备之间的延迟偏移 用于图像分辨率、时间戳和温度的相机帧元数据访问 设备校准数据访问 1.2 文件拷贝 cd /usr/lib/x86_64-linux-gnu/libk4a1.4 sudo cp libdepthengine.so.2.0 /usr/lib/x86_64-linux-gnu 1.3 下载官方SDK源码:git clone -b v1.2.0 https://gith
sudo apt install git build-essential dkms 2. 在安装Azure Kinect之前,您需要安装libusb-1.0-0-dev软件包。您可以在终端中运行以下命令进行安装: sudo apt-get install libusb-1.0-0-dev 3. 接下来,您需要从GitHub上获取Azure Kinect SDK。在终端中运行以下命令,克隆存储库并进入目录: git clone https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git cd Azure-Kinect-Sensor-SDK/ 4. 为了构建SDK,您需要安装CMake。您可以在终端中运行以下命令进行安装: sudo apt-get install cmake 5. 然后,输入以下命令以构建并安装Azure Kinect SDK: mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install 6. 如果您需要使用Azure Kinect DK硬件设备并获取数据,您需要安装Azure Kinect DK传感器固件。可以在此处下载固件并按照说明进行安装。 7. 最后,您需要为用户启用访问Azure Kinect DK设备的权限。您可以在终端中运行以下命令: sudo usermod -aG k4a <youruser> 更多详细说明和信息,请参考Azure Kinect SDK文档。
qq_69319165: Traceback (most recent call last): File "/home/chenkaige/12/devel/lib/ur_move_test/ur_move_test_node.py", line 15, in <module> exec(compile(fh.read(), python_script, 'exec'), context) File "/home/chenkaige/12/src/ur_move_test/scripts/ur_move_test_node.py", line 34 def plan_cartesian_path(self, scale=1): SyntaxError: invalid syntax 机器人抓取(一)—— ROS MoveIt! 程序控制真实UR5机器人运动(python) qq_69319165: python文件报错 机器人抓取(七、八)—— kinect 相机的 ros 服务器及 基于gqcnn 抓取 ros 服务器 qq_69319165: 您好,请问有基于d435i的吗 用d435i的话有没有什么区别