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。
快速入门
经典安装
Kilted 及更新版本
Command Line
1sudo apt install ros-$ROS_DISTRO-depthai-rosCommand Line
1ros2 launch depthai_ros_driver driver.launch.pyCommand Line
1ros2 launch depthai_ros_driver driver.launch.py use_rviz:=trueCommand Line
1ros2 run depthai_ros_driver driver_nodeuse_rviz:=true 对所有使用 driver.launch.py 的启动文件均有效。预构建 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/home/你的用户名/params/example_config.yaml)并将其作为参数传递给可执行文件,如下所示:Command Line
1docker run -it -v /dev/:/dev/ -v /home/你的用户名/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)。rgbd_pcl.launch.py以基本 RGBD 配置启动相机,不加载任何神经网络。同时加载 ROS 深度处理节点用于 RGBD 点云。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>这是一个方形插件。</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)使用 RealSense 兼容性的 RTABMap 示例
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:=trueintra_process_demo 外),因此您需要创建自定义容器。 DepthAI ROS 驱动程序的默认启动文件默认以组合模式运行,因此您可以在运行时向同一容器添加更多节点。 您也可以参考 depthai_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 中打开工作区目录