diff --git a/depthai-ros/CHANGELOG.rst b/depthai-ros/CHANGELOG.rst index a46eab1b..51020a01 100644 --- a/depthai-ros/CHANGELOG.rst +++ b/depthai-ros/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package depthai-ros ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2.10.2 (2024-09-26) +------------------- +* Fix Stereo K matrix publishing +* Fix socket ID for NN detections +* Remove catching errors when starting the device since it introduced undefined behavior +* Add desqueeze to NN node + 2.10.1 (2024-09-18) ------------------- * Fix ToF synced publishing diff --git a/depthai-ros/CMakeLists.txt b/depthai-ros/CMakeLists.txt index 9684655d..f2766769 100644 --- a/depthai-ros/CMakeLists.txt +++ b/depthai-ros/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10.2) # CMake version in Ubuntu 18.04 LTS -project(depthai-ros VERSION 2.10.1 LANGUAGES CXX C) +project(depthai-ros VERSION 2.10.2 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 14) diff --git a/depthai-ros/package.xml b/depthai-ros/package.xml index 82fd8f15..4cf4aac6 100644 --- a/depthai-ros/package.xml +++ b/depthai-ros/package.xml @@ -1,7 +1,7 @@ depthai-ros - 2.10.1 + 2.10.2 The depthai-ros package diff --git a/depthai_bridge/CMakeLists.txt b/depthai_bridge/CMakeLists.txt index 843880c7..13361568 100644 --- a/depthai_bridge/CMakeLists.txt +++ b/depthai_bridge/CMakeLists.txt @@ -1,10 +1,11 @@ cmake_minimum_required(VERSION 3.10.2) # CMake version in Ubuntu 18.04 LTS set(CMAKE_POSITION_INDEPENDENT_CODE ON) -project(depthai_bridge VERSION 2.10.1 LANGUAGES CXX C) +project(depthai_bridge VERSION 2.10.2 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Update the policy setting to avoid an error when loading the ament_cmake package # at the current cmake version level diff --git a/depthai_bridge/package.xml b/depthai_bridge/package.xml index c5c05e59..615f70b7 100644 --- a/depthai_bridge/package.xml +++ b/depthai_bridge/package.xml @@ -1,7 +1,7 @@ depthai_bridge - 2.10.1 + 2.10.2 The depthai_bridge package Adam Serafin diff --git a/depthai_descriptions/CMakeLists.txt b/depthai_descriptions/CMakeLists.txt index ad2dc15b..f524c03f 100644 --- a/depthai_descriptions/CMakeLists.txt +++ b/depthai_descriptions/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(depthai_descriptions VERSION 2.10.1) +project(depthai_descriptions VERSION 2.10.2) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) diff --git a/depthai_descriptions/package.xml b/depthai_descriptions/package.xml index a8c064d1..5a190525 100644 --- a/depthai_descriptions/package.xml +++ b/depthai_descriptions/package.xml @@ -1,7 +1,7 @@ depthai_descriptions - 2.10.1 + 2.10.2 The depthai_descriptions package Adam Serafin diff --git a/depthai_examples/CMakeLists.txt b/depthai_examples/CMakeLists.txt index afc582d0..98269251 100644 --- a/depthai_examples/CMakeLists.txt +++ b/depthai_examples/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10.2) # CMake version in Ubuntu 18.04 LTS -project(depthai_examples VERSION 2.10.1 LANGUAGES CXX C) +project(depthai_examples VERSION 2.10.2 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/depthai_examples/package.xml b/depthai_examples/package.xml index 38327126..35723f24 100644 --- a/depthai_examples/package.xml +++ b/depthai_examples/package.xml @@ -1,7 +1,7 @@ depthai_examples - 2.10.1 + 2.10.2 The depthai_examples package diff --git a/depthai_filters/CMakeLists.txt b/depthai_filters/CMakeLists.txt index 4349a21a..98c0d2f3 100644 --- a/depthai_filters/CMakeLists.txt +++ b/depthai_filters/CMakeLists.txt @@ -1,10 +1,11 @@ cmake_minimum_required(VERSION 3.8) -project(depthai_filters VERSION 2.10.1 LANGUAGES CXX C) +project(depthai_filters VERSION 2.10.2 LANGUAGES CXX C) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # find dependencies find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() diff --git a/depthai_filters/config/usb_cam_overlay.yaml b/depthai_filters/config/usb_cam_overlay.yaml index 70eac219..508f47a9 100644 --- a/depthai_filters/config/usb_cam_overlay.yaml +++ b/depthai_filters/config/usb_cam_overlay.yaml @@ -9,4 +9,4 @@ i_simulated_topic_name: /image_raw i_low_bandwidth: true nn: - i_enable_passthrough: true \ No newline at end of file + i_enable_passthrough: true diff --git a/depthai_filters/include/depthai_filters/detection2d_overlay.hpp b/depthai_filters/include/depthai_filters/detection2d_overlay.hpp index 2b79ef75..3cf32fcf 100644 --- a/depthai_filters/include/depthai_filters/detection2d_overlay.hpp +++ b/depthai_filters/include/depthai_filters/detection2d_overlay.hpp @@ -4,7 +4,6 @@ #include "message_filters/sync_policies/approximate_time.h" #include "message_filters/synchronizer.h" #include "rclcpp/rclcpp.hpp" -#include "sensor_msgs/msg/camera_info.hpp" #include "sensor_msgs/msg/image.hpp" #include "vision_msgs/msg/detection2_d_array.hpp" @@ -27,4 +26,4 @@ class Detection2DOverlay : public rclcpp::Node { "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"}; }; -} // namespace depthai_filters \ No newline at end of file +} // namespace depthai_filters diff --git a/depthai_filters/launch/example_det2d_overlay.launch.py b/depthai_filters/launch/example_det2d_overlay.launch.py index 08d26f88..478708ac 100644 --- a/depthai_filters/launch/example_det2d_overlay.launch.py +++ b/depthai_filters/launch/example_det2d_overlay.launch.py @@ -26,9 +26,11 @@ def launch_setup(context, *args, **kwargs): composable_node_descriptions=[ ComposableNode( package="depthai_filters", + name="detection_overlay", plugin="depthai_filters::Detection2DOverlay", remappings=[('rgb/preview/image_raw', name+'/nn/passthrough/image_raw'), - ('nn/detections', name+'/nn/detections')] + ('nn/detections', name+'/nn/detections')], + parameters=[params_file], ), ], ), @@ -46,4 +48,4 @@ def generate_launch_description(): return LaunchDescription( declared_arguments + [OpaqueFunction(function=launch_setup)] - ) \ No newline at end of file + ) diff --git a/depthai_filters/package.xml b/depthai_filters/package.xml index 1890e840..25698c16 100644 --- a/depthai_filters/package.xml +++ b/depthai_filters/package.xml @@ -2,7 +2,7 @@ depthai_filters - 2.10.1 + 2.10.2 Depthai filters package Adam Serafin MIT diff --git a/depthai_filters/src/detection2d_overlay.cpp b/depthai_filters/src/detection2d_overlay.cpp index 8ad65b36..7e17e4b9 100644 --- a/depthai_filters/src/detection2d_overlay.cpp +++ b/depthai_filters/src/detection2d_overlay.cpp @@ -1,5 +1,7 @@ #include "depthai_filters/detection2d_overlay.hpp" +#include + #include "cv_bridge/cv_bridge.h" #include "depthai_filters/utils.hpp" @@ -11,8 +13,8 @@ Detection2DOverlay::Detection2DOverlay(const rclcpp::NodeOptions& options) : rcl void Detection2DOverlay::onInit() { previewSub.subscribe(this, "rgb/preview/image_raw"); detSub.subscribe(this, "nn/detections"); - sync = std::make_unique>(syncPolicy(10), previewSub, detSub); - sync->registerCallback(std::bind(&Detection2DOverlay::overlayCB, this, std::placeholders::_1, std::placeholders::_2)); + sync = std::make_unique>(syncPolicy(10), previewSub, detSub); + sync->registerCallback(std::bind(&Detection2DOverlay::overlayCB, this, std::placeholders::_1, std::placeholders::_2 )); overlayPub = this->create_publisher("overlay", 10); labelMap = this->declare_parameter>("label_map", labelMap); } @@ -44,4 +46,4 @@ void Detection2DOverlay::overlayCB(const sensor_msgs::msg::Image::ConstSharedPtr } // namespace depthai_filters #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(depthai_filters::Detection2DOverlay); \ No newline at end of file +RCLCPP_COMPONENTS_REGISTER_NODE(depthai_filters::Detection2DOverlay); diff --git a/depthai_ros_driver/CMakeLists.txt b/depthai_ros_driver/CMakeLists.txt index 23bf624e..dcfc4c6b 100644 --- a/depthai_ros_driver/CMakeLists.txt +++ b/depthai_ros_driver/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.22) -project(depthai_ros_driver VERSION 2.10.1) +project(depthai_ros_driver VERSION 2.10.2) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_BUILD_SHARED_LIBS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/detection.hpp b/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/detection.hpp index 3986f6c4..e0d6a323 100644 --- a/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/detection.hpp +++ b/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/detection.hpp @@ -65,6 +65,9 @@ class Detection : public BaseNode { if(ph->getParam("i_disable_resize")) { width = ph->getOtherNodeParam(socketName, "i_preview_width"); height = ph->getOtherNodeParam(socketName, "i_preview_height"); + } else if(ph->getParam("i_desqueeze_output")) { + width = ph->getOtherNodeParam(socketName, "i_width"); + height = ph->getOtherNodeParam(socketName, "i_height"); } else { width = imageManip->initialConfig.getResizeConfig().width; height = imageManip->initialConfig.getResizeConfig().height; @@ -84,9 +87,11 @@ class Detection : public BaseNode { convConf.updateROSBaseTimeOnRosMsg = ph->getParam("i_update_ros_base_time_on_ros_msg"); utils::ImgPublisherConfig pubConf; + pubConf.width = width; + pubConf.height = height; pubConf.daiNodeName = getName(); - pubConf.topicName = "~/" + getName(); - pubConf.topicSuffix = "passthrough"; + pubConf.topicName = "~/" + getName() + "/passthrough"; + pubConf.infoSuffix = "/passthrough"; pubConf.socket = static_cast(ph->getParam("i_board_socket_id")); ptPub->setup(device, convConf, pubConf); diff --git a/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/spatial_detection.hpp b/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/spatial_detection.hpp index f22d1986..478e4178 100644 --- a/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/spatial_detection.hpp +++ b/depthai_ros_driver/include/depthai_ros_driver/dai_nodes/nn/spatial_detection.hpp @@ -76,8 +76,8 @@ class SpatialDetection : public BaseNode { pubConf.width = width; pubConf.height = height; pubConf.daiNodeName = getName(); - pubConf.topicName = "~/" + getName(); - pubConf.topicSuffix = "passthrough"; + pubConf.topicName = "~/" + getName() + "/passthrough"; + pubConf.infoSuffix = "/passthrough"; pubConf.socket = static_cast(ph->getParam("i_board_socket_id")); ptPub->setup(device, convConf, pubConf); @@ -97,8 +97,8 @@ class SpatialDetection : public BaseNode { pubConf.width = ph->getOtherNodeParam(sensor_helpers::getNodeName(getROSNode(), sensor_helpers::NodeNameEnum::Stereo), "i_width"); pubConf.height = ph->getOtherNodeParam(sensor_helpers::getNodeName(getROSNode(), sensor_helpers::NodeNameEnum::Stereo), "i_height"); pubConf.daiNodeName = getName(); - pubConf.topicName = "~/" + getName(); - pubConf.topicSuffix = "/passthrough_depth"; + pubConf.topicName = "~/" + getName() + "/passthrough_depth"; + pubConf.infoSuffix = "/passthrough_depth"; pubConf.socket = socket; ptDepthPub->setup(device, convConf, pubConf); diff --git a/depthai_ros_driver/include/depthai_ros_driver/param_handlers/nn_param_handler.hpp b/depthai_ros_driver/include/depthai_ros_driver/param_handlers/nn_param_handler.hpp index 40656c1b..9e287363 100644 --- a/depthai_ros_driver/include/depthai_ros_driver/param_handlers/nn_param_handler.hpp +++ b/depthai_ros_driver/include/depthai_ros_driver/param_handlers/nn_param_handler.hpp @@ -40,6 +40,7 @@ class NNParamHandler : public BaseParamHandler { template void declareParams(std::shared_ptr nn, std::shared_ptr imageManip) { declareAndLogParam("i_disable_resize", false); + declareAndLogParam("i_desqueeze_output", false); declareAndLogParam("i_enable_passthrough", false); declareAndLogParam("i_enable_passthrough_depth", false); declareAndLogParam("i_get_base_device_timestamp", false); @@ -104,7 +105,7 @@ class NNParamHandler : public BaseParamHandler { json data = json::parse(f); if(data.contains("model") && data.contains("nn_config")) { auto modelPath = getModelPath(data); - declareAndLogParam("i_model_path", modelPath); + modelPath = declareAndLogParam("i_model_path", modelPath); if(!getParam("i_disable_resize")) { setImageManip(modelPath, imageManip); } diff --git a/depthai_ros_driver/include/depthai_ros_driver/utils.hpp b/depthai_ros_driver/include/depthai_ros_driver/utils.hpp index 59f67fb0..28edf7cf 100644 --- a/depthai_ros_driver/include/depthai_ros_driver/utils.hpp +++ b/depthai_ros_driver/include/depthai_ros_driver/utils.hpp @@ -66,6 +66,7 @@ struct ImgPublisherConfig { dai::CameraBoardSocket rightSocket = dai::CameraBoardSocket::CAM_C; std::string calibrationFile = ""; std::string topicSuffix = "/image_raw"; + std::string infoSuffix = ""; std::string compressedTopicSuffix = "/image_raw/compressed"; std::string infoMgrSuffix = ""; bool rectified = false; diff --git a/depthai_ros_driver/package.xml b/depthai_ros_driver/package.xml index d17a5ac7..dca5ce86 100644 --- a/depthai_ros_driver/package.xml +++ b/depthai_ros_driver/package.xml @@ -2,7 +2,7 @@ depthai_ros_driver - 2.10.1 + 2.10.2 Depthai ROS Monolithic node. Adam Serafin diff --git a/depthai_ros_driver/src/camera.cpp b/depthai_ros_driver/src/camera.cpp index 6fb46fb0..949b2831 100644 --- a/depthai_ros_driver/src/camera.cpp +++ b/depthai_ros_driver/src/camera.cpp @@ -78,20 +78,11 @@ void Camera::diagCB(const diagnostic_msgs::msg::DiagnosticArray::SharedPtr msg) } void Camera::start() { - bool success = false; - while(!success) { - try { - RCLCPP_INFO(this->get_logger(), "Starting camera."); - if(!camRunning) { - onConfigure(); - } else { - RCLCPP_INFO(this->get_logger(), "Camera already running!."); - } - success = true; - } catch(const std::exception& e) { - RCLCPP_ERROR(this->get_logger(), "Exception occurred: %s. Retry", e.what()); - camRunning = false; - } + RCLCPP_INFO(this->get_logger(), "Starting camera."); + if(!camRunning) { + onConfigure(); + } else { + RCLCPP_INFO(this->get_logger(), "Camera already running!."); } } diff --git a/depthai_ros_driver/src/dai_nodes/nn/nn_wrapper.cpp b/depthai_ros_driver/src/dai_nodes/nn/nn_wrapper.cpp index b7d56f80..65a580e1 100644 --- a/depthai_ros_driver/src/dai_nodes/nn/nn_wrapper.cpp +++ b/depthai_ros_driver/src/dai_nodes/nn/nn_wrapper.cpp @@ -20,15 +20,15 @@ NNWrapper::NNWrapper(const std::string& daiNodeName, auto family = ph->getNNFamily(); switch(family) { case param_handlers::nn::NNFamily::Yolo: { - nnNode = std::make_unique>(getName(), getROSNode(), pipeline); + nnNode = std::make_unique>(getName(), getROSNode(), pipeline, socket); break; } case param_handlers::nn::NNFamily::Mobilenet: { - nnNode = std::make_unique>(getName(), getROSNode(), pipeline); + nnNode = std::make_unique>(getName(), getROSNode(), pipeline, socket); break; } case param_handlers::nn::NNFamily::Segmentation: { - nnNode = std::make_unique(getName(), getROSNode(), pipeline); + nnNode = std::make_unique(getName(), getROSNode(), pipeline, socket); break; } } diff --git a/depthai_ros_driver/src/dai_nodes/nn/spatial_nn_wrapper.cpp b/depthai_ros_driver/src/dai_nodes/nn/spatial_nn_wrapper.cpp index 16443492..adc200a7 100644 --- a/depthai_ros_driver/src/dai_nodes/nn/spatial_nn_wrapper.cpp +++ b/depthai_ros_driver/src/dai_nodes/nn/spatial_nn_wrapper.cpp @@ -19,11 +19,11 @@ SpatialNNWrapper::SpatialNNWrapper(const std::string& daiNodeName, auto family = ph->getNNFamily(); switch(family) { case param_handlers::nn::NNFamily::Yolo: { - nnNode = std::make_unique>(getName(), getROSNode(), pipeline); + nnNode = std::make_unique>(getName(), getROSNode(), pipeline, socket); break; } case param_handlers::nn::NNFamily::Mobilenet: { - nnNode = std::make_unique>(getName(), getROSNode(), pipeline); + nnNode = std::make_unique>(getName(), getROSNode(), pipeline, socket); break; } case param_handlers::nn::NNFamily::Segmentation: { diff --git a/depthai_ros_driver/src/dai_nodes/sensors/img_pub.cpp b/depthai_ros_driver/src/dai_nodes/sensors/img_pub.cpp index 02e0e9c1..f2d8c775 100644 --- a/depthai_ros_driver/src/dai_nodes/sensors/img_pub.cpp +++ b/depthai_ros_driver/src/dai_nodes/sensors/img_pub.cpp @@ -69,10 +69,10 @@ void ImagePublisher::setup(std::shared_ptr device, const utils::Img ffmpegPub = node->create_publisher( pubConfig.topicName + pubConfig.compressedTopicSuffix, rclcpp::QoS(10), pubOptions); } - infoPub = node->create_publisher(pubConfig.topicName + "/camera_info", rclcpp::QoS(10), pubOptions); + infoPub = node->create_publisher(pubConfig.topicName + pubConfig.infoSuffix + "/camera_info", rclcpp::QoS(10), pubOptions); } else if(ipcEnabled) { imgPub = node->create_publisher(pubConfig.topicName + pubConfig.topicSuffix, rclcpp::QoS(10), pubOptions); - infoPub = node->create_publisher(pubConfig.topicName + "/camera_info", rclcpp::QoS(10), pubOptions); + infoPub = node->create_publisher(pubConfig.topicName + pubConfig.infoSuffix + "/camera_info", rclcpp::QoS(10), pubOptions); } else { imgPubIT = image_transport::create_camera_publisher(node.get(), pubConfig.topicName + pubConfig.topicSuffix); } @@ -124,7 +124,6 @@ void ImagePublisher::createInfoManager(std::shared_ptr device) { auto info = sensor_helpers::getCalibInfo(node->get_logger(), converter, device, pubConfig.socket, pubConfig.width, pubConfig.height); if(pubConfig.rectified) { std::fill(info.d.begin(), info.d.end(), 0.0); - std::fill(info.k.begin(), info.k.end(), 0.0); info.r[0] = info.r[4] = info.r[8] = 1.0; } infoManager->setCameraInfo(info); diff --git a/depthai_ros_driver/src/dai_nodes/sensors/sensor_wrapper.cpp b/depthai_ros_driver/src/dai_nodes/sensors/sensor_wrapper.cpp index 6693d579..1bd98b0b 100644 --- a/depthai_ros_driver/src/dai_nodes/sensors/sensor_wrapper.cpp +++ b/depthai_ros_driver/src/dai_nodes/sensors/sensor_wrapper.cpp @@ -33,9 +33,9 @@ SensorWrapper::SensorWrapper(const std::string& daiNodeName, converter = std::make_unique(true); setNames(); setXinXout(pipeline); - socketID = ph->getParam("i_board_socket_id"); } + socketID = ph->getParam("i_board_socket_id"); if(ph->getParam("i_disable_node") && ph->getParam("i_simulate_from_topic")) { RCLCPP_INFO(getROSNode()->get_logger(), "Disabling node %s, pipeline data taken from topic.", getName().c_str()); } else { diff --git a/depthai_ros_driver/src/param_handlers/sensor_param_handler.cpp b/depthai_ros_driver/src/param_handlers/sensor_param_handler.cpp index 23cc3866..0b9fe0dd 100644 --- a/depthai_ros_driver/src/param_handlers/sensor_param_handler.cpp +++ b/depthai_ros_driver/src/param_handlers/sensor_param_handler.cpp @@ -30,7 +30,7 @@ void SensorParamHandler::declareCommonParams(dai::CameraBoardSocket socket) { declareAndLogParam("i_simulated_topic_name", ""); declareAndLogParam("i_disable_node", false); declareAndLogParam("i_get_base_device_timestamp", false); - socketID = static_cast(declareAndLogParam("i_board_socket_id", static_cast(socket), 0)); + socketID = static_cast(declareAndLogParam("i_board_socket_id", static_cast(socket), false)); declareAndLogParam("i_update_ros_base_time_on_ros_msg", false); declareAndLogParam("i_enable_feature_tracker", false); declareAndLogParam("i_enable_nn", false); diff --git a/depthai_ros_msgs/CMakeLists.txt b/depthai_ros_msgs/CMakeLists.txt index 8c3b48bc..45aec171 100644 --- a/depthai_ros_msgs/CMakeLists.txt +++ b/depthai_ros_msgs/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10.2) # CMake version in Ubuntu 18.04 LTS -project(depthai_ros_msgs VERSION 2.10.1) +project(depthai_ros_msgs VERSION 2.10.2) if(POLICY CMP0057) cmake_policy(SET CMP0057 NEW) diff --git a/depthai_ros_msgs/package.xml b/depthai_ros_msgs/package.xml index 2803de5e..615b9272 100644 --- a/depthai_ros_msgs/package.xml +++ b/depthai_ros_msgs/package.xml @@ -1,7 +1,7 @@ depthai_ros_msgs - 2.10.1 + 2.10.2 Package to keep interface independent of the driver Adam Serafin