diff --git a/depthai_ros_driver/src/dai_nodes/sensors/tof.cpp b/depthai_ros_driver/src/dai_nodes/sensors/tof.cpp index 1442fda3..98c7efe2 100644 --- a/depthai_ros_driver/src/dai_nodes/sensors/tof.cpp +++ b/depthai_ros_driver/src/dai_nodes/sensors/tof.cpp @@ -28,7 +28,6 @@ ToF::ToF(const std::string& daiNodeName, boardSocket = socket; ph = std::make_unique(node, daiNodeName, deviceName, rsCompat); ph->declareParams(tofNode, socket); - setInOut(pipeline); aligned = ph->getParam(param_handlers::ParamNames::ALIGNED); if(aligned) { alignNode = pipeline->create(); @@ -37,6 +36,7 @@ ToF::ToF(const std::string& daiNodeName, alignNode->inputAlignTo.setBlocking(false); RCLCPP_DEBUG(getLogger(), "ToF is aligned, make sure to connect inputs/outputs in pipeline creation"); } + setInOut(pipeline); RCLCPP_DEBUG(node->get_logger(), "Node %s created", daiNodeName.c_str()); } ToF::~ToF() = default; @@ -57,14 +57,23 @@ void ToF::setInOut(std::shared_ptr pipeline) { encConfig.quality = ph->getParam(ParamNames::LOW_BANDWIDTH_QUALITY); encConfig.enabled = ph->getParam(ParamNames::LOW_BANDWIDTH); - tofPub = setupOutput(pipeline, tofQName, &tofNode->depth, ph->getParam(ParamNames::SYNCED), encConfig); + auto* tofOut = aligned ? static_cast(&alignNode->outputAligned) : static_cast(&tofNode->depth); + tofPub = setupOutput(pipeline, tofQName, tofOut, ph->getParam(ParamNames::SYNCED), encConfig); } } void ToF::setupQueues(std::shared_ptr device) { using param_handlers::ParamNames; if(ph->getParam(ParamNames::PUBLISH_TOPIC)) { - auto tfPrefix = getOpticalFrameName(getSocketName(boardSocket)); + auto pubSocket = aligned ? getAlignedSocketID() : boardSocket; + auto tfPrefix = getOpticalFrameName(getSocketName(pubSocket)); + auto pubWidth = ph->getParam(ParamNames::WIDTH); + auto pubHeight = ph->getParam(ParamNames::HEIGHT); + if(aligned) { + auto alignedSocketName = getSocketName(pubSocket); + pubWidth = ph->getOtherNodeParam(alignedSocketName, ParamNames::WIDTH); + pubHeight = ph->getOtherNodeParam(alignedSocketName, ParamNames::HEIGHT); + } utils::ImgConverterConfig convConfig; convConfig.tfPrefix = tfPrefix; @@ -80,11 +89,11 @@ void ToF::setupQueues(std::shared_ptr device) { pubConfig.daiNodeName = getName(); pubConfig.topicName = "~/" + getName(); pubConfig.lazyPub = ph->getParam(ParamNames::ENABLE_LAZY_PUBLISHER); - pubConfig.socket = ph->getSocketID(); + pubConfig.socket = pubSocket; pubConfig.calibrationFile = ph->getParam(ParamNames::CALIBRATION_FILE); pubConfig.rectified = false; - pubConfig.width = ph->getParam(ParamNames::WIDTH); - pubConfig.height = ph->getParam(ParamNames::HEIGHT); + pubConfig.width = pubWidth; + pubConfig.height = pubHeight; pubConfig.maxQSize = ph->getParam(ParamNames::MAX_Q_SIZE); tofPub->setup(device, convConfig, pubConfig);