Program Listing for File TFPublisher.hpp

Return to documentation for file (/tmp/ws/src/depthai-ros/depthai_bridge/include/depthai_bridge/TFPublisher.hpp)

#pragma once
#include "depthai-shared/common/CameraFeatures.hpp"
#include "depthai/device/CalibrationHandler.hpp"
#include "geometry_msgs/msg/quaternion.hpp"
#include "geometry_msgs/msg/transform_stamped.hpp"
#include "nlohmann/json.hpp"
#include "rclcpp/node.hpp"
#include "rclcpp/parameter_client.hpp"
#include "tf2_ros/static_transform_broadcaster.h"

namespace dai {
namespace ros {
class TFPublisher {
   public:
    explicit TFPublisher(rclcpp::Node* node,
                         const dai::CalibrationHandler& calHandler,
                         const std::vector<dai::CameraFeatures>& camFeatures,
                         const std::string& camName,
                         const std::string& camModel,
                         const std::string& baseFrame,
                         const std::string& parentFrame,
                         const std::string& camPosX,
                         const std::string& camPosY,
                         const std::string& camPosZ,
                         const std::string& camRoll,
                         const std::string& camPitch,
                         const std::string& camYaw,
                         const std::string& imuFromDescr,
                         const std::string& customURDFLocation,
                         const std::string& customXacroArgs);
    std::string getURDF();
    geometry_msgs::msg::Quaternion quatFromRotM(nlohmann::json rotMatrix);
    geometry_msgs::msg::Vector3 transFromExtr(nlohmann::json translation);

   private:
    void convertModelName();
    std::string prepareXacroArgs();
    void publishDescription();
    void publishCamTransforms(nlohmann::json camData, rclcpp::Node* node);
    void publishImuTransform(nlohmann::json json, rclcpp::Node* node);
    bool modelNameAvailable();
    std::string getCamSocketName(int socketNum);
    std::unique_ptr<rclcpp::AsyncParametersClient> _paramClient;
    std::shared_ptr<tf2_ros::StaticTransformBroadcaster> _tfPub;
    std::string _camName;
    std::string _camModel;
    std::string _baseFrame;
    std::string _parentFrame;
    std::string _camPosX;
    std::string _camPosY;
    std::string _camPosZ;
    std::string _camRoll;
    std::string _camPitch;
    std::string _camYaw;
    std::string _imuFromDescr;
    std::string _customURDFLocation;
    std::string _customXacroArgs;
    std::vector<dai::CameraFeatures> _camFeatures;
    rclcpp::Logger _logger;
    const std::unordered_map<dai::CameraBoardSocket, std::string> _socketNameMap = {
        {dai::CameraBoardSocket::AUTO, "rgb"},
        {dai::CameraBoardSocket::CAM_A, "rgb"},
        {dai::CameraBoardSocket::CAM_B, "left"},
        {dai::CameraBoardSocket::CAM_C, "right"},
        {dai::CameraBoardSocket::CAM_D, "left_back"},
        {dai::CameraBoardSocket::CAM_E, "right_back"},
    };
};
}  // namespace ros
}  // namespace dai