[ROS开发]Ubuntu18.04下Azure Kinect DK深度相机 SDK以及ROS驱动配置

安装前准备:
–需要提前安装好ROS Melodic版本,可参考安装教程
–需要提前完成Azure Kinect SDK的安装,可参考lucky li的博客文章
–测试SDK中的k4aviewer能够正常启动并显示相机图像数据后开始以下配置工作

1.创建ROS工作空间

#建立并进入工作空间文件夹
mkdir -p catkin_ws/src
#初始化工作空间
cd catkin_ws/src
catkin_init_workspace

#编译工作空间
cd ..
catkin_make
#将ROS工作空间路径写入系统变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

#进入src目录下下载驱动代码 
cd catkin_ws/src
git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git

2.整理驱动下相关文件

文件下载链接:https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/
下载libk4a1.4/和lib4a1.4-dev/两个链接中的deb文件,然后解压
在这里插入图片描述在两个解压文件中都有data.tar.gz压缩包,再将该压缩包解压后能够得到lib、share、include三个文件夹
在catkin_ws/src路径下创建文件夹ext/sdk
并创建ext/sdk/中的三个子文件夹bin、lib、include

cd catkin_ws/src
mkdir -p ext/sdk
cd ext/sdk
mkdir bin && cd ..
mkdir include && cd ..
mkdir bin && cd ..

创建好的文件如下
在这里插入图片描述

  • bin文件夹: 把编译SDK时build文件夹里面的那个bin文件夹拷贝过来
  • include文件夹:SDK源码里的include文件夹和从deb文件里提取出的include文件夹合并,拷贝过来
  • lib文件夹:从deb文件里提取出的两个lib文件夹合并,拷贝过来

整理后的详细文件内容如下:

.
└── sdk
    ├── bin
    │   ├── allocator_ut
    │   ├── azure_c_shared_test
    │   ├── AzureKinectFirmwareTool
    │   ├── calibration_info
    │   ├── calibration_ut
    │   ├── capturesync_ut
    │   ├── color_ft
    │   ├── color_ut
    │   ├── cpp_projection_ft
    │   ├── custom_track_ut
    │   ├── depth_ft
    │   ├── depthmcu_ut
    │   ├── depth_ut
    │   ├── deversion
    │   ├── dynlib_ut
    │   ├── enumerate_devices
    │   ├── executables_ft
    │   ├── executables_ft_custom
    │   ├── fastcapture_streaming
    │   ├── fastcapture_trigger
    │   ├── fastpointcloud
    │   ├── functional_custom_test_list.txt
    │   ├── functional_test_list.txt
    │   ├── global_ft
    │   ├── green_screen
    │   ├── handle_ut
    │   ├── imu_ft
    │   ├── imu_ut
    │   ├── k4a_cpp_ft
    │   ├── k4a_example_test
    │   ├── k4arecord_custom_track
    │   ├── k4arecorder
    │   ├── k4aviewer
    │   ├── latency_perf
    │   ├── libk4arecord.so -> libk4arecord.so.1.4
    │   ├── libk4arecord.so.1.4 -> libk4arecord.so.1.4.0
    │   ├── libk4arecord.so.1.4.0
    │   ├── libk4a.so -> libk4a.so.1.4
    │   ├── libk4a.so.1.4 -> libk4a.so.1.4.0
    │   ├── libk4a.so.1.4.0
    │   ├── libtest_dynlib.so -> libtest_dynlib.so.1
    │   ├── libtest_dynlib.so.1 -> libtest_dynlib.so.1.0
    │   ├── libtest_dynlib.so.1.0
    │   ├── logging_ut
    │   ├── multidevice_ft
    │   ├── opencv_example
    │   ├── perf_test_list.txt
    │   ├── playback_external_sync
    │   ├── playback_perf
    │   ├── playback_ut
    │   ├── queue_ut
    │   ├── record_ut
    │   ├── rwlock_ft
    │   ├── streaming_samples
    │   ├── testutil
    │   ├── throughput_perf
    │   ├── transformation_example
    │   ├── transformation_ut
    │   ├── undistort
    │   ├── unit_test_list.txt
    │   └── viewer_opengl
    ├── include
    │   ├── azure_kinect_ros_driver
    │   │   ├── k4a_calibration_transform_data.h
    │   │   ├── k4a_ros_bridge_nodelet.h
    │   │   ├── k4a_ros_device.h
    │   │   ├── k4a_ros_device_params.h
    │   │   └── k4a_ros_types.h
    │   ├── k4a
    │   │   ├── k4a_export.h
    │   │   ├── k4a.h
    │   │   ├── k4a.hpp
    │   │   ├── k4atypes.h
    │   │   └── k4aversion.h.in
    │   ├── k4ainternal
    │   │   ├── allocator.h
    │   │   ├── calibration.h
    │   │   ├── capture.h
    │   │   ├── capturesync.h
    │   │   ├── color.h
    │   │   ├── color_mcu.h
    │   │   ├── common.h
    │   │   ├── deloader.h
    │   │   ├── depth.h
    │   │   ├── depth_mcu.h
    │   │   ├── dewrapper.h
    │   │   ├── dynlib.h
    │   │   ├── firmware.h
    │   │   ├── global.h
    │   │   ├── handle.h
    │   │   ├── image.h
    │   │   ├── imu.h
    │   │   ├── k4aplugin.h
    │   │   ├── logging.h
    │   │   ├── math.h
    │   │   ├── matroska_common.h
    │   │   ├── matroska_read.h
    │   │   ├── matroska_write.h
    │   │   ├── queue.h
    │   │   ├── rwlock.h
    │   │   ├── tewrapper.h
    │   │   ├── transformation.h
    │   │   └── usbcommand.h
    │   └── k4arecord
    │       ├── playback.h
    │       ├── playback.hpp
    │       ├── record.h
    │       ├── record.hpp
    │       └── types.h
    └── lib
        └── x86_64-linux-gnu
            ├── cmake
            │   ├── k4a
            │   │   ├── k4aConfig.cmake
            │   │   ├── k4aConfigVersion.cmake
            │   │   ├── k4aTargets.cmake
            │   │   └── k4aTargets-relwithdebinfo.cmake
            │   └── k4arecord
            │       ├── k4arecordConfig.cmake
            │       ├── k4arecordConfigVersion.cmake
            │       ├── k4arecordTargets.cmake
            │       └── k4arecordTargets-relwithdebinfo.cmake
            ├── libk4a1.4
            │   └── libdepthengine.so.2.0
            ├── libk4arecord.so -> libk4arecord.so.1.4
            ├── libk4arecord.so.1.4 -> libk4arecord.so.1.4.0
            ├── libk4arecord.so.1.4.0
            ├── libk4a.so -> libk4a.so.1.4
            ├── libk4a.so.1.4 -> libk4a.so.1.4.0
            └── libk4a.so.1.4.0

13 directories, 119 files

3.部分代码修改

需要修改的代码路径:Azure_Kinect_ROS_Driver/include/azure_kinect_ros_driver/k4a_ros_device.h

  1. 将std::atomic_int64_t last_capture_time_usec_; 改为:std::atomic<int64_t> last_capture_time_usec_;
  2. 将std::atomic_uint64_t last_imu_time_usec_;改为:std::atomic<uint64_t> last_imu_time_usec_;
  3. 将 std::atomic_bool imu_stream_end_of_file_;改为: std::atomic imu_stream_end_of_file_;

4.编译ROS工作空间

cd catkin_ws
catkin_make

在这里插入图片描述编译成功后就会有以下提示信息

Built target azure_kinect_ros_driver_nodelet
Built target azure_kinect_ros_driver_node

5.测试ROS是否正常发送并接收Topic

roscore
roslaunch azure_kinect_ros_driver driver.launch

在这里插入图片描述正常启动节点的话终端会输出相机相关信息。
订阅ros话题,查看相机进程是否已经成功发送topic

rostopic list

在这里插入图片描述能够正常接受相机发送的topic,说明配置成功。
现在可以通过rviz进行话题订阅以及在rviz中显示Azure Kinect DK的图像画面。

rviz

点击Add->Image载入图像窗口
在这里插入图片描述
在Image下拉选项中找到Image Topic的下拉菜单,选择不同的话题(不同的图像格式)进行订阅,就可以在图像窗口中进行显示。
RGB模式:
在这里插入图片描述
RGB_To_Depth模式:
在这里插入图片描述
至此,全部配置圆满完成!

6.相关问题解决:

6.1 roslaunch出现错误

[ERROR] [1627390501.011460316]: Failed to open K4A device at index 0
[ERROR] [1627390501.011490280]: Failed to open a K4A device. Cannot continue.

解决办法:

cd ~/Azure-Kinect-Sensor-SDK
sudo cp scripts/99-k4a.rules /etc/udev/rules.d/.

按照以上命令修改SDK权限即可

6.2 catkin_make编译报错

CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_ros_device.cpp.o:在函数‘cv::Mat::Mat(int, int, int, void*, unsigned long)’中:
k4a_ros_device.cpp:(.text._ZN2cv3MatC2EiiiPvm[_ZN2cv3MatC5EiiiPvm]+0x296):对‘cv::Mat::updateContinuityFlag()’未定义的引用
collect2: error: ld returned 1 exit status

解决办法:
在CmakeList.txt文件中添加OpenCV的依赖
路径:/catkin_ws/src/Azure_Kinect_ROS_Driver/CMakeLists.txt
在其中添加:

find_package(OpenCV REQUIRED)  
target_link_libraries(${PROJECT_NAME}_node
  ${K4A_LIBS}
  ${OpenCV_LIBRARIES} # add
  ${catkin_LIBRARIES}
)
target_link_libraries(${PROJECT_NAME}_nodelet
  ${K4A_LIBS}
  ${OpenCV_LIBRARIES} #add
  ${catkin_LIBRARIES}
)

修改后的文件内容如下,可对照进行修改:

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

cmake_minimum_required(VERSION 3.5)
project(azure_kinect_ros_driver LANGUAGES C CXX)

list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}/cmake)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  sensor_msgs
  image_transport
  nodelet
  tf2
  tf2_ros
  tf2_geometry_msgs
  geometry_msgs
  nodelet
  cv_bridge
)

find_package(OpenCV REQUIRED)  
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES k4a_ros_bridge
#  CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)

###########
## Build ##
###########


## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node
  src/k4a_ros_bridge_node.cpp
  src/k4a_ros_device.cpp
  src/k4a_ros_device_params.cpp
  src/k4a_calibration_transform_data.cpp
  )

target_compile_features(${PROJECT_NAME}_node PUBLIC cxx_std_11)

add_library(${PROJECT_NAME}_nodelet
  src/k4a_ros_bridge_nodelet.cpp
  src/k4a_ros_device.cpp
  src/k4a_ros_device_params.cpp
  src/k4a_calibration_transform_data.cpp
  )

target_compile_features(${PROJECT_NAME}_nodelet PUBLIC cxx_std_11)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

############################
#### AZURE KINECT SDK ######
############################

message("Finding K4A SDK binaries")

# Disable cached locations for K4A SDK binaries.
# Do this to force the search logic to happen correctly.
# If we don't disable these cached directories, we
# won't be able to tell the difference between the ext/sdk location
# and the system installed version on linux. Since we have to treat these
# differently (one needs install, one doesn't) we must disable the cache
# so that find_package(k4a) will fail in all cases if not installed via the .deb.
unset(k4a_DIR CACHE)

# Force running the Findk4a.cmake module
find_package(k4a 1.3.0 QUIET MODULE REQUIRED)
set(K4A_LIBS k4a::k4a;k4a::k4arecord)

# Try to find and enable the body tracking SDK
find_package(k4abt 1.0.0 QUIET MODULE)
if (k4abt_FOUND)
  list(APPEND K4A_LIBS k4abt::k4abt)
  message(STATUS "Body Tracking SDK found: compiling support for Body Tracking")
  target_compile_definitions(${PROJECT_NAME}_node PUBLIC K4A_BODY_TRACKING)
  target_compile_definitions(${PROJECT_NAME}_nodelet PUBLIC K4A_BODY_TRACKING)
else()
  message("!!! Body Tracking SDK not found: body tracking features will not be available !!!")
endif()

# This reads the K4A_LIBS and K4A_INSTALL_REQUIRED variables and decides how to install
# the various shared objects / DLLs
include(Installk4a)

##################################
###### END AZURE KINECT SDK ######
##################################

include_directories(
  ${catkin_INCLUDE_DIRS}
  "include"
)

target_link_libraries(${PROJECT_NAME}_node
  ${K4A_LIBS}
  ${OpenCV_LIBRARIES} # add
  ${catkin_LIBRARIES}
)

target_link_libraries(${PROJECT_NAME}_nodelet
  ${K4A_LIBS}
  ${OpenCV_LIBRARIES} #add
  ${catkin_LIBRARIES}
)

#############
## Install ##
#############

# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html

## Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME}_node
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(TARGETS ${PROJECT_NAME}_nodelet
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)

## Mark other files for installation (e.g. launch and bag files, etc.)
install(
  DIRECTORY
  launch
  urdf
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

install(FILES
   nodelet_plugins.xml
   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
Ubuntu 18.04中安装Azure Kinect DK,首先需要下载ROS驱动。可以按照以下步骤进行操作: 1. 在终端中创建一个名为KinectDK_ws的工作空间,并进入src目录: ``` mkdir -p ~/KinectDK_ws/src cd ~/KinectDK_ws/src ``` 2. 初始化工作空间: ``` catkin_init_workspace ``` 3. 克隆Azure Kinect ROS驱动的代码仓库: ``` git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git ``` 接下来,需要安装Azure KinectSDK和依赖库文件。可以按照以下步骤进行操作: 1. 安装libk4a1.4-dev包: ``` sudo apt install libk4a1.4-dev ``` 2. 将libdepthengine.so.2.0文件拷贝到/usr/lib/x86_64-linux-gnu目录下: ``` sudo cp /usr/lib/x86_64-linux-gnu/libk4a1.4/libdepthengine.so.2.0 /usr/lib/x86_64-linux-gnu ``` 3. 克隆Azure Kinect SDK的源码仓库: ``` git clone -b v1.4.0 https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git ``` 4. 在~/Azure-Kinect-Sensor-SDK/scripts/docker路径下找到setup-ubuntu.sh文件,并将其设置为可执行文件。 5. 打开终端,执行脚本文件以安装依赖项: ``` sudo ./setup-ubuntu.sh ``` 这样,你就成功地在Ubuntu 18.04上安装了Azure Kinect DK驱动SDK。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Ubuntu18.04+Azure Kinect DK配置全过程(SDK源码+ROS)](https://blog.csdn.net/qq_27399933/article/details/107356117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [libdepthengine.so.1.0](https://download.csdn.net/download/weixin_41628710/11484674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值