9 : _frameName(frameName), _focalLength(focalLength), _baseline(baseline / 100.0), _minDepth(minDepth / 100.0), _maxDepth(maxDepth / 100.0) {}
12 auto tstamp = inData->getTimestamp();
13 DisparityMsgs::DisparityImage outDispImageMsg;
20 auto rclNow = rclcpp::Clock().now();
21 auto steadyTime = std::chrono::steady_clock::now();
22 auto diffTime = steadyTime - tstamp;
23 auto rclStamp = rclNow - diffTime;
24 outDispImageMsg.header.stamp = rclStamp;
26 sensor_msgs::msg::Image& outImageMsg = outDispImageMsg.image;
29 auto steadyTime = std::chrono::steady_clock::now();
30 auto diffTime = steadyTime - tstamp;
31 uint64_t nsec = rosNow.toNSec() - diffTime.count();
32 auto rosStamp = rosNow.fromNSec(nsec);
33 outDispImageMsg.header.stamp = rosStamp;
35 outDispImageMsg.header.seq = inData->getSequenceNum();
37 sensor_msgs::Image& outImageMsg = outDispImageMsg.image;
44 outImageMsg.header = outDispImageMsg.header;
45 if(inData->getType() == dai::RawImgFrame::Type::RAW8) {
46 outDispImageMsg.delta_d = 1;
47 size_t size = inData->getData().size() *
sizeof(float);
48 outImageMsg.data.resize(size);
49 outImageMsg.height = inData->getHeight();
50 outImageMsg.width = inData->getWidth();
51 outImageMsg.step = size / inData->getHeight();
52 outImageMsg.is_bigendian =
true;
54 std::vector<float> convertedData(inData->getData().begin(), inData->getData().end());
55 unsigned char* imageMsgDataPtr =
reinterpret_cast<unsigned char*
>(outImageMsg.data.data());
57 unsigned char* daiImgData =
reinterpret_cast<unsigned char*
>(convertedData.data());
61 memcpy(imageMsgDataPtr, daiImgData, size);
64 outDispImageMsg.delta_d = 1 / 32;
65 size_t size = inData->getHeight() * inData->getWidth() *
sizeof(float);
66 outImageMsg.data.resize(size);
67 outImageMsg.height = inData->getHeight();
68 outImageMsg.width = inData->getWidth();
69 outImageMsg.step = size / inData->getHeight();
70 outImageMsg.is_bigendian =
true;
71 unsigned char* daiImgData =
reinterpret_cast<unsigned char*
>(inData->getData().data());
73 std::vector<int16_t> raw16Data(inData->getHeight() * inData->getWidth());
74 unsigned char* raw16DataPtr =
reinterpret_cast<unsigned char*
>(raw16Data.data());
75 memcpy(raw16DataPtr, daiImgData, inData->getData().size());
76 std::vector<float> convertedData;
78 raw16Data.begin(), raw16Data.end(), std::back_inserter(convertedData), [](int16_t disp) -> std::size_t {
return static_cast<float>(disp) / 32.0; });
80 unsigned char* imageMsgDataPtr =
reinterpret_cast<unsigned char*
>(outImageMsg.data.data());
81 unsigned char* convertedDataPtr =
reinterpret_cast<unsigned char*
>(convertedData.data());
82 memcpy(imageMsgDataPtr, convertedDataPtr, size);
84 outDispImageMsgs.push_back(outDispImageMsg);
136 std::deque<DisparityMsgs::DisparityImage> msgQueue;
138 auto msg = msgQueue.front();
const std::string _frameName
const std::string TYPE_32FC1
DisparityImagePtr toRosMsgPtr(std::shared_ptr< dai::ImgFrame > inData)
void toRosMsg(std::shared_ptr< dai::ImgFrame > inData, std::deque< DisparityMsgs::DisparityImage > &outImageMsg)
DisparityConverter(const std::string frameName, float focalLength, float baseline=7.5, float minDepth=80, float maxDepth=1100)
DisparityMsgs::DisparityImage::Ptr DisparityImagePtr