Skip to content
This repository was archived by the owner on Jul 26, 2024. It is now read-only.

Commit 2f6a7c8

Browse files
authored
Merge branch 'melodic' into patch-2
2 parents 839c0cc + 044693f commit 2f6a7c8

File tree

6 files changed

+243
-10
lines changed

6 files changed

+243
-10
lines changed

CMakeLists.txt

Lines changed: 110 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ project(azure_kinect_ros_driver LANGUAGES C CXX)
66

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

9+
option(CUDA_SUPPORT "use CUDA support onnxruntime library" ON)
10+
911
## Find catkin macros and libraries
1012
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
1113
## is used, also find other catkin packages
@@ -14,6 +16,7 @@ find_package(catkin REQUIRED COMPONENTS
1416
std_msgs
1517
sensor_msgs
1618
image_transport
19+
image_geometry
1720
nodelet
1821
tf2
1922
tf2_ros
@@ -24,6 +27,7 @@ find_package(catkin REQUIRED COMPONENTS
2427
camera_info_manager
2528
)
2629

30+
find_package(OpenCV REQUIRED)
2731
###################################
2832
## catkin specific configuration ##
2933
###################################
@@ -77,6 +81,7 @@ set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX ""
7781
############################
7882

7983
message("Finding K4A SDK binaries")
84+
message("--------------------------------------------${CMAKE_MODULE_PATH}-----------------------------------------")
8085

8186
# Disable cached locations for K4A SDK binaries.
8287
# Do this to force the search logic to happen correctly.
@@ -92,20 +97,121 @@ find_package(k4a 1.3.0 QUIET MODULE REQUIRED)
9297
set(K4A_LIBS k4a::k4a;k4a::k4arecord)
9398

9499
# Try to find and enable the body tracking SDK
95-
find_package(k4abt 1.0.0 QUIET MODULE)
100+
find_package(k4abt 1.0.1 QUIET MODULE)
96101
if (k4abt_FOUND)
97102
list(APPEND K4A_LIBS k4abt::k4abt)
98103
message(STATUS "Body Tracking SDK found: compiling support for Body Tracking")
99104
target_compile_definitions(${PROJECT_NAME}_node PUBLIC K4A_BODY_TRACKING)
100105
target_compile_definitions(${PROJECT_NAME}_nodelet PUBLIC K4A_BODY_TRACKING)
106+
message("!!! Body Tracking SDK found: body tracking features will be available !!!")
101107
else()
102108
message("!!! Body Tracking SDK not found: body tracking features will not be available !!!")
103109
endif()
110+
if(MSVC AND NOT k4abt_FOUND)
111+
if(CUDA_SUPPORT)
112+
113+
set(KBT "Microsoft.Azure.Kinect.BodyTracking.1.0.1")
114+
set(KBT_URL "https://www.nuget.org/api/v2/package/Microsoft.Azure.Kinect.BodyTracking/1.0.1")
115+
set(KBT_SHA512 "546ebf82551ca809213c7540c4a7c3ccdd14d1ae0ac5d8475b3a98439c4a68cf3d5b4e3fa70676d524ac820815f77611bf2d8ffba96933ad5b317db392d34f20")
116+
file(DOWNLOAD
117+
${KBT_URL}
118+
${CMAKE_CURRENT_BINARY_DIR}/kbt.nuget
119+
EXPECTED_HASH SHA512=${KBT_SHA512}
120+
SHOW_PROGRESS
121+
)
122+
123+
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KBT}")
124+
execute_process(COMMAND tar xvzf "${CMAKE_CURRENT_BINARY_DIR}/kbt.nuget"
125+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KBT}"
126+
)
127+
128+
file(GLOB KBT_ONNX_DLL
129+
"${CMAKE_CURRENT_BINARY_DIR}/${KBT}/lib/native/amd64/release/onnxruntime.dll"
130+
)
131+
132+
file(GLOB KBT_DLL
133+
"${CMAKE_CURRENT_BINARY_DIR}/${KBT}/lib/native/amd64/release/k4abt.dll"
134+
)
135+
136+
file(GLOB KBT_LIB
137+
"${CMAKE_CURRENT_BINARY_DIR}/${KBT}/lib/native/amd64/release/k4abt.lib"
138+
)
139+
140+
file(GLOB KBT_DNN_MODEL
141+
"${CMAKE_CURRENT_BINARY_DIR}/${KBT}/content/dnn_model_2_0.onnx"
142+
)
143+
144+
add_library(k4abt::k4abt SHARED IMPORTED GLOBAL)
145+
146+
target_include_directories(
147+
k4abt::k4abt
148+
INTERFACE
149+
${CMAKE_CURRENT_BINARY_DIR}/${KBT}/build/native/include
150+
)
151+
152+
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_CONFIGURATIONS "")
153+
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_LOCATION "${KBT_DLL}")
154+
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_IMPLIB "${KBT_LIB}")
155+
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_LINK_DEPENDENT_LIBRARIES "${KBT_DNN_MODEL};${KBT_ONNX_DLL}")
156+
set(k4abt_FOUND TRUE)
157+
set(k4abt_VERSION "1.0.1")
158+
list(APPEND K4A_LIBS k4abt::k4abt)
159+
target_compile_definitions(${PROJECT_NAME}_node PUBLIC K4A_BODY_TRACKING)
160+
target_compile_definitions(${PROJECT_NAME}_nodelet PUBLIC K4A_BODY_TRACKING)
161+
162+
set(KBT_DEPENDENCIES "Microsoft.Azure.Kinect.BodyTracking.Dependencies.0.9.1")
163+
set(KBTD_URL "https://www.nuget.org/api/v2/package/Microsoft.Azure.Kinect.BodyTracking.Dependencies/0.9.1")
164+
set(KBTD_SHA512 "5df5ceb2f7905a3e208a085a29ef02feb1820ffe819563af77c272ad7e068cf3a158c0ce610e421829b5f7ebbb628c45f56617344d6d1ef0a31d719253cf881f")
165+
file(DOWNLOAD
166+
${KBTD_URL}
167+
${CMAKE_CURRENT_BINARY_DIR}/kbtd.nuget
168+
EXPECTED_HASH SHA512=${KBTD_SHA512}
169+
SHOW_PROGRESS
170+
)
171+
172+
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KBT_DEPENDENCIES}")
173+
execute_process(COMMAND tar xvzf "${CMAKE_CURRENT_BINARY_DIR}/kbtd.nuget"
174+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KBT_DEPENDENCIES}"
175+
)
176+
177+
file(GLOB KBTD_DLLS
178+
"${CMAKE_CURRENT_BINARY_DIR}/${KBT_DEPENDENCIES}/lib/native/amd64/release/*.dll"
179+
)
180+
181+
file(COPY ${KBTD_DLLS} DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_BIN_DESTINATION})
182+
file(COPY ${KBTD_DLLS} DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_LIB_DESTINATION})
183+
184+
set(CUDNN_DEPENDENCIES "Microsoft.Azure.Kinect.BodyTracking.Dependencies.cuDNN.0.9.1")
185+
set(CUDNN_URL "https://www.nuget.org/api/v2/package/Microsoft.Azure.Kinect.BodyTracking.Dependencies.cuDNN/0.9.1")
186+
set(CUDNN_SHA512 "a9986d5d7f06e0445cb65dfe1363c3e827df2c87b80ecfa05894c062714bf2092b3f87defd136cd2a89b9e588e773080ecf7079e8ce7e428426c4a00259c5085")
187+
file(DOWNLOAD
188+
${CUDNN_URL}
189+
${CMAKE_CURRENT_BINARY_DIR}/cudnn.nuget
190+
EXPECTED_HASH SHA512=${CUDNN_SHA512}
191+
SHOW_PROGRESS
192+
)
193+
194+
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CUDNN_DEPENDENCIES}")
195+
196+
execute_process(COMMAND tar xvzf "${CMAKE_CURRENT_BINARY_DIR}/cudnn.nuget"
197+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CUDNN_DEPENDENCIES}"
198+
)
199+
200+
file(GLOB CUDNN_DLLS
201+
"${CMAKE_CURRENT_BINARY_DIR}/${CUDNN_DEPENDENCIES}/lib/native/amd64/release/*.dll"
202+
)
203+
file(COPY ${CUDNN_DLLS} DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_BIN_DESTINATION})
204+
file(COPY ${CUDNN_DLLS} DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_LIB_DESTINATION})
205+
206+
207+
else()
208+
message(FATAL_ERROR "Body Tracking SDK needs a NVIDIA GEFORCE GTX 1070 or better")
209+
endif()
210+
endif()
104211

105212
# This reads the K4A_LIBS and K4A_INSTALL_REQUIRED variables and decides how to install
106213
# the various shared objects / DLLs
107214
include(Installk4a)
108-
109215
##################################
110216
###### END AZURE KINECT SDK ######
111217
##################################
@@ -118,11 +224,13 @@ include_directories(
118224
target_link_libraries(${PROJECT_NAME}_node
119225
${K4A_LIBS}
120226
${catkin_LIBRARIES}
227+
${OpenCV_LIBS}
121228
)
122229

123230
target_link_libraries(${PROJECT_NAME}_nodelet
124231
${K4A_LIBS}
125232
${catkin_LIBRARIES}
233+
${OpenCV_LIBS}
126234
)
127235

128236
#############

cmake/Findk4abt.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set(RELATIVE_WIN_BIN_DIR "sdk/windows-desktop/amd64/release/bin")
66
set(RELATIVE_WIN_K4ABT_LIB_PATH "${RELATIVE_WIN_LIB_DIR}/k4abt.lib")
77

88
set(RELATIVE_WIN_K4ABT_DLL_PATH "${RELATIVE_WIN_BIN_DIR}/k4abt.dll")
9-
set(RELATIVE_WIN_DNN_MODEL_PATH "${RELATIVE_WIN_BIN_DIR}/dnn_model.onnx")
9+
set(RELATIVE_WIN_DNN_MODEL_PATH "${RELATIVE_WIN_BIN_DIR}/dnn_model_2_0.onnx")
1010
set(RELATIVE_WIN_ONNX_RUNTIME_DLL_PATH "${RELATIVE_WIN_BIN_DIR}/onnxruntime.dll")
1111

1212
# K4A BT versions have exactly 3 components: major.minor.rev
@@ -59,7 +59,7 @@ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
5959

6060
set(_dnn_model_path "${_sdk_dir}/${RELATIVE_WIN_DNN_MODEL_PATH}")
6161
if(NOT EXISTS "${_dnn_model_path}")
62-
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find dnn_model.onnx at ${_dnn_model_path}")
62+
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find dnn_model_2_0.onnx at ${_dnn_model_path}")
6363
return()
6464
endif()
6565

include/azure_kinect_ros_driver/k4a_ros_device.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@
2828
#if defined(K4A_BODY_TRACKING)
2929
#include <visualization_msgs/MarkerArray.h>
3030
#include <k4abt.hpp>
31+
#include <tf2_ros/transform_broadcaster.h>
32+
#include <geometry_msgs/TransformStamped.h>
33+
#include <geometry_msgs/Pose.h>
34+
#include <opencv2/opencv.hpp>
35+
#include <image_geometry/pinhole_camera_model.h>
36+
#include <tf2_ros/transform_listener.h>
37+
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
3138
#endif
3239

3340
// Project headers
@@ -63,13 +70,15 @@ class K4AROSDevice
6370
k4a_result_t getIrFrame(const k4a::capture& capture, sensor_msgs::ImagePtr& ir_image);
6471

6572
#if defined(K4A_BODY_TRACKING)
66-
k4a_result_t getBodyMarker(const k4abt_body_t& body, visualization_msgs::MarkerPtr marker_msg, int jointType,
73+
k4a_result_t getBodyMarker(const k4abt_body_t& body, visualization_msgs::MarkerPtr marker_msg, geometry_msgs::TransformStamped& transform_msg, int bodyNum, int jointType,
6774
ros::Time capture_time);
6875

6976
k4a_result_t getBodyIndexMap(const k4abt::frame& body_frame, sensor_msgs::ImagePtr body_index_map_image);
7077

7178
k4a_result_t renderBodyIndexMapToROS(sensor_msgs::ImagePtr body_index_map_image, k4a::image& k4a_body_index_map,
7279
const k4abt::frame& body_frame);
80+
81+
void imageCallback(const sensor_msgs::ImageConstPtr& image_msg, const sensor_msgs::CameraInfoConstPtr& info_msg);
7382
#endif
7483

7584
private:
@@ -140,8 +149,14 @@ class K4AROSDevice
140149

141150
#if defined(K4A_BODY_TRACKING)
142151
ros::Publisher body_marker_publisher_;
152+
tf2_ros::TransformBroadcaster br;
143153

144154
image_transport::Publisher body_index_map_publisher_;
155+
image_transport::Publisher image_tf_publisher_;
156+
image_transport::CameraSubscriber image_subscriber_;
157+
image_geometry::PinholeCameraModel cam_model_;
158+
tf2_ros::Buffer tfBuffer;
159+
tf2_ros::TransformListener* tfListener;
145160
#endif
146161

147162
// Parameters
@@ -162,6 +177,9 @@ class K4AROSDevice
162177
k4abt::tracker k4abt_tracker_;
163178
std::atomic_int16_t k4abt_tracker_queue_size_;
164179
std::thread body_publisher_thread_;
180+
181+
std::vector<std::string> joint_names_{"Pelvis", "Spine_Naval", "Spine_Chest", "Neck", "Clavicle_left", "Shoulder_left", "Elbow_left", "Wrist_left", "Hand_left", "Handtip_left", "thumb_left", "Clavicle_right", "Shoulder_right", "Elbow_right", "Wrist_right", "Hand_right", "Handtip_right", "Thumb_right", "Hip_left", "Knee_left", "Ankle_left", "Foot_left", "Hip_right", "Knee_right", "Ankle_right", "Foot_right", "Head", "Nose", "Eye_Left", "Ear_Left", "Eye_Right", "Ear_Right"};
182+
size_t num_bodies;
165183
#endif
166184

167185
std::chrono::nanoseconds device_to_realtime_offset_{0};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!--
2+
Copyright (c) Microsoft Corporation. All rights reserved.
3+
Licensed under the MIT License.
4+
-->
5+
6+
<launch>
7+
<include file="$(find azure_kinect_ros_driver)/launch/driver.launch">
8+
<arg name="body_tracking_enabled" value="true" />
9+
</include>
10+
</launch>

package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<depend>std_msgs</depend>
1919
<depend>sensor_msgs</depend>
2020
<depend>image_transport</depend>
21+
<depend>image_geometry</depend>
2122
<depend>tf2</depend>
2223
<depend>tf2_ros</depend>
2324
<depend>tf2_geometry_msgs</depend>
@@ -30,6 +31,7 @@
3031
<depend>K4A</depend>
3132

3233
<exec_depend>rgbd_launch</exec_depend>
34+
<depend>OpenCV</depend>
3335

3436
<export>
3537
<nodelet plugin="${prefix}/nodelet_plugins.xml" />

0 commit comments

Comments
 (0)