OAK-D深度图像转2d激光数据

编辑:OAK中国
作者:Kal-Lai
喜欢的话,请多多👍⭐️✍

▌前言

Hello,大家好,这里是OAK中国,我是助手君。

在csdn看到一篇好文,不知道作者在不在咱微信群里,先分享给大家。

————————————————正文分割线————————————————

▌写在前面

在调试OAK-D相机在ROS2 galactic上运行的时候,使用官方提供的depthai_ros源码运行发布点云数据。
在这里插入图片描述

使用RVIZ查看的点云效果。

发现点云的帧率非常低,而且干扰数据很多(纯双目相机的弊端?),整个效果相当不理想,几乎就是完全无法应用的状态。

下文将介绍使用depthimage_to_laserscan软件包将深度图像转成伪2D激光雷达数据,由于转换后的数据量小,帧率与深度图的相同(将近30Hz),实时性相当不错。

开发环境:

  • 操作系统:ubuntu 20.04
  • ROS版本:ROS2 Galactic
  • 硬件:OAK-D
    在这里插入图片描述

▌1.安装depthimage_to_laserscan

ROS2的depthimage_to_laserscan可以到github上下载源码编译:https://github.com/ros-perception/depthimage_to_laserscan/tree/ros2

也可以直接用apt安装,省去编译中可能会遇到的兼容问题。

sudo apt install ros-galactic-depthimage-to-laserscan

▌2.修改相机的launch file

我们直接使用depthai-ros-example提供的例程进行修改。

找到depthai-ros-examples/depthai_examples/launch/stereo.launch.py,复制改名为depthimage.launch.py。

打开launch file,去掉点云的节点:

在这里插入图片描述
在这里插入图片描述

这样就不会运行点云转换发布了。

▌ 3.创建depthimage_to_image的launch file

在自己的工作空间下新建一个depthimage_to_image的launch file。代码如下:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='depthimage_to_laserscan',
            executable='depthimage_to_laserscan_node',
            name='depthimage_to_laserscan_node',
            remappings=[('depth','/stereo/depth'),
                        ('depth_camera_info', '/stereo/camera_info'),
                        ('scan', '/oak_scan')],
            parameters=[{
                'scan_time': 0.033,    
                'range_min': 0.45,   #投影点的最小距离单位(米),更近的被丢弃
                'range_max': 5.0,   #投影点的最大距离单位(米),更远的被丢弃
                'scan_height': 5,    #depthimage中用于转成laserscan的行
                'output_frame': 'camera_depth_optical_frame'  #发布的帧 ID
            }]
        ),
        Node(
            package='tf2_ros',
            executable='static_transform_publisher',
            name='depthimage_to_laserscan_tf',
            arguments=['0','0','0','0','0','0','1','oak-d_frame','camera_depth_optical_frame']
        )
    ])

在launch file下运行了两个节点。

depthimage_to_laserscan节点重映射订阅的depth话题为oak-d发布的/stereo/depth。重映射订阅的depth_camera_info话题为oak-d发布的/stereo/camera_info。然后将发布的scan重映射为/oak_scan。参数部分,主要注意scan_height,设置越大就有越多的行数转成激光,也就是高度范围会更大,但由于oak-d的干扰数据太多,设大了效果不好。

另外还需运行静态tf变换,将camera_depth_optical_frame变换到oak-d_frame。

这样就可以正常运行了。

▌4.运行效果

先运行相机的launch file,再运行depthimage_to_laserscan的launch file。打开RVIZ,将/oak_scan加入显示。

为了让显示更明显,我将相机对准天花板,可以看到下图中的效果:
在这里插入图片描述
接下去就可以拿它做其它应用了。

▌参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值