DepthAI ROS驱动程序
DepthAI ROS驱动程序
版本说明
此页面涵盖 ROS v3 驱动程序。
- Humble / Jazzy: ROS包名称使用
_v3后缀,例如depthai_ros_driver_v3和 Debian 包ros-$ROS_DISTRO-depthai-ros-v3。 - Kilted 及更新版本: v3 是默认驱动程序,因此包名称没有后缀,例如
depthai_ros_driver和 Debian 包ros-$ROS_DISTRO-depthai-ros。
快速入门
经典安装
请注意,此启动文件针对 OAK-D 系列设备,对于具有不同配置的设备(如 OAK-D-PoE-SR 或 OAK-FFC),您可能需要使用不同的启动文件或参数组合。每个启动文件都在其自己的可组合节点容器中启动 ROS 驱动程序作为可组合节点。
预构建的 Docker 镜像
Command Line
1xhost +local:dockerCommand Line
1docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:kilted-latestCommand Line
1docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:kilted-latest [CMD]Command Line
1docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:v3.0.9-kiltedCommand Line
1docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:kilted-arm64-latestCommand Line
1docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:v3.0.9-kilted-arm64.yaml 文件(例如 /home/YOUR_USERNAME_HERE/params/example_config.yaml),然后将其作为参数传递给可执行文件,如下所示:Command Line
1docker run -it -v /dev/:/dev/ -v /home/YOUR_USERNAME_HERE/params:/params --network host --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix depthai-ros ros2 launch depthai_ros_driver driver.launch.py params_file:=/params/example_config.yaml参数
启动文件
driver.launch.py以 RGBD 模式启动相机,并以空间模式(使用 Yolo V6)启动 NN。rgbd_pcl.launch.py以基本的 RGBD 配置启动相机,不加载任何 NN。还加载用于 RGBD 点云的 ROS 深度处理节点。example_multicam.launch.py同时启动多个相机,每个相机都在不同的容器中。编辑config目录中的multicam_example.yaml配置文件以更改参数(目前仅适用于 RVC2)。example_segmentation.launch.py以 RGBD + 语义分割模式启动相机(管道类型=RGBD,nn_type=rgb)。pointcloud.launch.py- 类似于rgbd_pcl.launch.py,但不使用 RGB 组件进行点云处理。注意,这里的点云发布在不同的主题上。rtabmap.launch.py启动相机和 RTAB-MAP RGBD SLAM(您需要先安装它 -sudo apt install ros-$ROS_DISTRO-rtabmap-ros)。您可能需要通过参数手动设置焦点。sr_rgbd_pcl.launch.py- 由于只有两个传感器,应将其用作 SR 相机的基线。sr_poe_rgbd_pcl.launch.py- 应将其用作 SR PoE 相机的基线。oak_t.launch.py- 专为 OAK-T 系列设计的启动文件。calibration.launch.py- 用于启动 ROS 校准工具,这主要用于测试。如果您发现相机校准无效,请使用我们的内部校准工具或直接联系我们。vio.launch.py- 默认启用 VIO 管道来启动相机。

从外部参数发布 TF
- parent_frame: "oak_parent_frame"
- base_frame: "oak"(或节点名称)
oak_imu_frame。默认情况下,相机变换是根据设备的相机校准数据发布的。当使用 driver.launch.py 时,您可以设置 pass_tf_args_as_params:=true,以便 TF 参数用于填充这些参数。例如 ros2 launch depthai_ros_driver driver.launch.py pass_tf_args_as_params:=true parent_frame:=map cam_pos_x:=1.0 imu_from_descr:=true。还可以使用 driver.i_tf_custom_urdf_path 和 driver.i_tf_custom_xacro_args 设置自定义 URDF 路径(目前仅支持绝对路径)和自定义 xacro 参数。请注意,robot_state_publisher 必须正在运行。关于外部参数的说明
如果您的相机具有未校准的 IMU,将显示警告,并且 IMU 将以零旋转和零平移发布。您可以设置
driver.i_tf_imu_from_descr: true 来覆盖此行为。这将根据相机型号从 URDF 发布默认 IMU 外部参数。自定义管道
dai_ros_plugins),在该包中创建一个可执行文件(dai_ros_plugins.cpp)。在该文件中,定义一个继承自 depthai_ros_driver::pipeline_gen::BasePipeline 并重写 createPipeline 方法的自定义插件。例如C++
1std::vector<std::unique_ptr<depthai_ros_driver::dai_nodes::BaseNode>> DaiRosPlugins::createPipeline(
2 std::shared_ptr<rclcpp::Node> node,
3 std::shared_ptr<dai::Device> device,
4 std::shared_ptr<dai::Pipeline> pipeline,
5 std::shared_ptr<depthai_ros_driver::param_handlers::PipelineGenParamHandler> ph,
6 const std::string& deviceName,
7 bool rsCompat,
8 const std::string& /*nnType*/) {
9 namespace dai_nodes = depthai_ros_driver::dai_nodes;
10 std::vector<std::unique_ptr<dai_nodes::BaseNode>> daiNodes;
11 auto left = std::make_unique<dai_nodes::SensorWrapper>("left", node, pipeline, deviceName, rsCompat, dai::CameraBoardSocket::CAM_B);
12 auto right = std::make_unique<dai_nodes::SensorWrapper>("right", node, pipeline, deviceName, rsCompat, dai::CameraBoardSocket::CAM_C);
13 daiNodes.push_back(std::move(left));
14 daiNodes.push_back(std::move(right));
15 return daiNodes;
16}C++
1#include <pluginlib/class_list_macros.hpp>
2
3PLUGINLIB_EXPORT_CLASS(dai_ros_plugins::DaiRosPlugins, depthai_ros_driver::pipeline_gen::BasePipeline)plugins.xml 文件中添加插件定义:Xml
1<library path="dai_ros_plugins">
2 <class type="dai_ros_plugins::DaiRosPlugins" base_class_type="depthai_ros_driver::pipeline_gen::BasePipeline">
3 <description>This is a square plugin.</description>
4 </class>
5</library>pipeline_gen.i_pipeline_type 设置为 test_plugins::Test 即可。您可以在 我们的应用示例 中查看包含插件的最终软件包的外观。特定相机配置
PoE 相机
subpixel 深度过滤。要启用低带宽,例如用于 RGB 相机,请更改参数:rgb.i_low_bandwidth- 设置为true以启用rgb.i_low_bandwidth_quality- 所需的质量百分比(默认为 50) 请参阅low_bandwidth.yaml文件,其中包含所有流的示例参数。
ToF 相机
sr_poe_rgbd_pcl.launch.py。 该文件还利用了 OAK-D-SR 特定的管道配置,您可以在上方找到有关管道类型的更多信息。 请注意,目前 ToF 相机会由于传感器插槽命名约定而以 rgb 帧发布图像。停止/启动相机以节省电量/重新配置
pipeline_gen.i_enable_diagnostics: true driver.i_restart_on_diagnostics_error: trueRealSense 兼容性
driver.launch.py 并带有 rs_compat:=true 参数来模拟 Realsense 相机行为。 这将使用 RGBD 管道设置相机,并发布与 Realsense 相机兼容的主题名称。 TF 坐标系也将以 Realsense 格式提供。类似于 RS 节点的工作方式,您可以使用 pointcloud.enable:=true 参数启用点云发布。 请注意,驱动程序将以不同的名称和命名空间以及不同的 DAI 节点名称启动,因此您可能需要相应地调整配置文件。 命名约定如下:- 命名空间:
''->camera - 节点名称:
oak->camera rgb->colorstereo->depth- 'left' ->
infra_2 - 'right' ->
infra_1 - 坐标系
oak->camera_link
示例
Python
1# 包含 RealSense 驱动程序的示例
2rs_camera_launch_include = IncludeLaunchDescription(
3 PythonLaunchDescriptionSource([
4 PathJoinSubstitution([
5 FindPackageShare('realsense2_camera'),
6 'launch',
7 'rs_launch.py',
8 ])
9 ]),
10 launch_arguments={
11 'pointcloud.enable': true,
12 }.items()
13)Python
1# 包含 OAK 驱动程序的示例
2oak_driver_launch_include = IncludeLaunchDescription(
3 PythonLaunchDescriptionSource([
4 PathJoinSubstitution([
5 FindPackageShare('depthai_ros_driver'),
6 'launch',
7 'driver.launch.py',
8 ])
9 ]),
10 launch_arguments={
11 'rs_compat': true,
12 'pointcloud.enable': true,
13 }.items()
14)RTABMap 示例与 RealSense 兼容性
rtabmap_ros 包中的一个示例,realsense_d435i_color.launch.py。注意 此示例在此时 (2024-08-27)需要针对 RS 主题名称进行调整,如下所示:之前
Python
1remappings=[
2('imu', '/imu/data'),
3('rgb/image', '/camera/color/image_raw'),
4('rgb/camera_info', '/camera/color/camera_info'),
5('depth/image', '/camera/realigned_depth_to_color/image_raw')]之后
Python
1remappings=[
2('imu', '/imu/data'),
3('rgb/image', '/camera/camera/color/image_raw'),
4('rgb/camera_info', '/camera/camera/color/camera_info'),
5('depth/image', '/camera/camera/depth/image_rect_raw')]Command Line
1ros2 launch realsense2_camera rs_launch.py enable_gyro:=true enable_accel:=true unite_imu_method:=1 enable_sync:=trueCommand Line
1ros2 launch depthai_ros_driver driver.launch.py rs_compat:=truedepthai_ros_driver 包中的 rtabmap.launch.py 示例,以使用 OAK 相机运行 RTABMap。您还可以进行一些小的修改以启用此示例的 RS 模式。重新校准
- 使用每个图像流可用的
set_camera_info服务 - 使用
i_calibration_file参数指向校准文件。注意 相机名称必须以/开头,例如/rgb。请参阅depthai_ros_driver/config/calibration获取示例校准文件。 提供了calibration.launch文件来启动单目和立体配置中的 ROS 相机校准器节点。 校准文件语法(来自camera_info_manager):
Yaml
1- file:///full/path/to/local/file.yaml
2- file:///full/path/to/videre/file.ini
3- package://camera_info_manager/tests/test_calibration.yaml
4- package://ros_package_name/calibrations/camera3.yaml开发人员指南
- 创建一个单独的工作空间
- 将存储库克隆到
src目录 - 将
.devcontainer目录复制到主工作空间目录 - 在 VSCode 中打开工作空间目录