此页面由 AI 自动翻译。查看英文原版

本页目录

  • 简介
  • 可用的转换器
  • 用法

ROS Bridge

简介

DepthAI ROS Bridge (depthai_bridge 包) 是一个 ROS 包,它允许使用 C++ DepthAI API 和 ROS 消息转换器以更受控的方式创建管道。

可用的转换器

转换器描述
Disparity converter转换立体视差消息
Image converter用于将各种类型的 Image 消息转换为 DAI/OpenCV 格式或从 DAI/OpenCV 格式转换
IMG Detections converter转换 2D 检测
IMU converter转换 IMU 数据,可以插值 IMU 读数
Spatial Detections converter转换 3D 空间检测
Tracked Features converter转换跟踪特征
Track Detections converter转换 DAI Tracklets
TF Publisher用于转换 DAI 校准数据并将其发布为 ROS Transform 数据

用法

您可以参考 depthai_examples 包,了解如何设置管道以及使用 BridgePublisher 类和 ImageConverters 以 ROS 格式发布数据。 下面是一个简单的 RGB 发布示例
C++
1#include <cstdio>
2
3#include "depthai/device/Device.hpp"
4#include "depthai/pipeline/Pipeline.hpp"
5#include "depthai/pipeline/node/Camera.hpp"
6#include "depthai_bridge/BridgePublisher.hpp"
7#include "depthai_bridge/ImageConverter.hpp"
8#include "depthai_bridge/TFPublisher.hpp"
9#include "depthai_bridge/depthaiUtility.hpp"
10#include "rclcpp/node.hpp"
11
12int main(int argc, char** argv) {
13    int width = 1280;
14    int height = 720;
15    std::string tfPrefix = "oak";
16    rclcpp::init(argc, argv);
17    auto node = rclcpp::Node::make_shared("rgb_publisher");
18
19    auto device = std::make_shared<dai::Device>();
20    dai::Pipeline pipeline(device);
21
22    // 定义源和输出
23    auto rgbCamera = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_A);
24
25    // 创建输出队列
26    auto rgbOutputQueue = rgbCamera->requestOutput({width, height})->createOutputQueue(8, false);
27
28    pipeline.start();
29
30    // 为 RGB 图像创建桥接发布器
31    auto rgbConverter = std::make_shared<depthai_bridge::ImageConverter>(
32        depthai_bridge::getOpticalFrameName(tfPrefix, depthai_bridge::getSocketName(dai::CameraBoardSocket::CAM_A, device->getDeviceName())), false);
33
34    auto calibrationHandler = device->readCalibration();
35    auto tfPub =
36        std::make_unique<depthai_bridge::TFPublisher>(node, calibrationHandler, device->getConnectedCameraFeatures(), tfPrefix, device->getDeviceName());
37    auto rgbCameraInfo = rgbConverter->calibrationToCameraInfo(calibrationHandler, dai::CameraBoardSocket::CAM_A, width, height);
38
39    auto rgbPub = std::make_unique<depthai_bridge::BridgePublisher<sensor_msgs::msg::Image, dai::ImgFrame>>(
40        rgbOutputQueue,
41        node,
42        "rgb/image",
43        [rgbConverter](std::shared_ptr<dai::ImgFrame> msg, std::deque<sensor_msgs::msg::Image>& rosMsgs) { rgbConverter->toRosMsg(msg, rosMsgs); },
44        30,
45        rgbCameraInfo,
46        "rgb");
47
48    rgbPub->addPublisherCallback();
49
50    while(rclcpp::ok() && pipeline.isRunning()) {
51        rclcpp::spin(node);
52    }
53
54    return 0;
55}