奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示

本文介绍如何在ROS环境下配置与使用Orbbec Astra Pro视觉传感器,包括安装驱动、设置环境变量、安装ROS功能包等步骤,并解决rgb显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Orbbec Astra Pro传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示

这款摄像头使用uvc输入彩色信息,需要libuvc和libuvc_ros这样才能在ROS正常使用彩色功能。

请在下面网址,分别下载对应包:

1 https://github.com/ktossell

2 https://orbbec3d.com/develop/

也可以直接下载打包好的资源:

http://download.youkuaiyun.com/detail/zhangrelay/9705366

首先安装驱动,依据版本选择下载驱动中合适的版本:


依据下列文档说明进行安装:特别注意标出部分

#############Note###################
# For user with ARM based development board:
# With CPU Structure older than Cortex A17, use OpenNI-Linux-Arm-2.3 Nofilter.tar for better performance
####################################
# There are two zip files, one is for 32bit machine, the other one is for 64bit
# We choose 64bit(x64) and make the example as follows:
这里应为系统是Ubuntu 16.04 64bit PC选择对应64bit版本
# To run visual samples(e.g., SimpleViewer), you will need freeglut3 header and libaries, please install:

$ sudo apt-get install build-essential freeglut3 freeglut3-dev 

#check udev version, Orbbec Driver need libudev.so.1, if can't find it, can make symbolic link from libudev.so.x.x,
#which usually locate in /lib/x86_64-linux-gnu or /lib/i386-linux-gnu

$ldconfig -p | grep libudev.so.1
$cd /lib/x86_64-linux-gnu
$sudo ln -s libudev.so.x.x.x libudev.so.1
# copy tgz file to any place you want(e.g., Home)
# unzip tgz file

拷贝到对应文件夹并解压缩:

$ tar zxvf OpenNI-Linux-x64-2.2-0118.tgz
$ cd OpenNI-Linux-x64-2.2

# run install.sh to generate OpenNIDevEnvironment, which contains OpenNI development environment 

$ sudo ./install.sh
 
# please replug in the device for usb-register
# add environment variables

$ source OpenNIDevEnvironment
# build sample(e.g., SimpleViewer)
$ cd Samples/SimpleViewer
$ make 
# run sample
# connect sensor
$ cd Bin/x64-Release
$ ./SimpleViewer

# now you should be able to see a GUI window showing the depth stream video
# If the Debian Jessie Lite is used for testing, it may require the following installation for properly start the viewer.

$ sudo apt-get install libgl1-mesa-dri

安装完毕后,进行功能测试:

~/tools/OpenNI-Linux-x64-2.3/Samples/Bin$ ls
ClosestPointViewer    MultiDepthViewer    org.openni.jar
EventBasedRead        MultipleStreamRead  org.openni.Samples.SimpleViewer
libMWClosestPoint.so  MWClosestPointApp   org.openni.Samples.SimpleViewer.jar
libOpenNI2.jni.so     OpenNI2             SimpleRead
libOpenNI2.so         OpenNI.ini          SimpleViewer


使用./SimpleViewer和./ClosestPointViewer,注意传感器特性,深度视觉0.4-8.0米,如下:



安装ROS功能包,以kinetic为例,indigo类似:

~$ sudo apt-get install ros-kinetic-astra-camera ros-kinetic-astra-launch

完毕后,使用:

relaybotbox@relaybotbox-desktop:~$ roslaunch astra_launch 
astra.launch            device.launch           pointclouds.launch
astra_tf_prefix.launch  ir.launch               processing.launch
color.launch            kinect_frames.launch    
depth.launch            manager.launch          
relaybotbox@relaybotbox-desktop:~$ roslaunch astra_launch astra.launch 

工作正常的话可以看到:

~$ roslaunch astra_launch astra.launch 
... logging to /home/relaybotbox/.ros/log/26bcfad8-bcf9-11e6-bc52-00e0b4159b09/roslaunch-relaybotbox-desktop-6834.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://relaybotbox-desktop:33177/

SUMMARY
========

PARAMETERS
 * /camera/camera_nodelet_manager/num_worker_threads: 4
 * /camera/depth_rectify_depth/interpolation: 0
 * /camera/driver/auto_exposure: True
 * /camera/driver/auto_white_balance: True
 * /camera/driver/color_depth_synchronization: False
 * /camera/driver/depth_camera_info_url: 
 * /camera/driver/depth_frame_id: camera_depth_opti...
 * /camera/driver/depth_registration: False
 * /camera/driver/device_id: #1
 * /camera/driver/rgb_camera_info_url: 
 * /camera/driver/rgb_frame_id: camera_rgb_optica...
 * /rosdistro: kinetic
 * /rosversion: 1.12.6

NODES
  /camera/
    camera_nodelet_manager (nodelet/nodelet)
    depth_metric (nodelet/nodelet)
    depth_metric_rect (nodelet/nodelet)
    depth_points (nodelet/nodelet)
    depth_rectify_depth (nodelet/nodelet)
    depth_registered_sw_metric_rect (nodelet/nodelet)
    driver (nodelet/nodelet)
    points_xyzrgb_sw_registered (nodelet/nodelet)
    register_depth_rgb (nodelet/nodelet)
    rgb_rectify_color (nodelet/nodelet)
  /
    camera_base_link (tf2_ros/static_transform_publisher)
    camera_base_link1 (tf2_ros/static_transform_publisher)
    camera_base_link2 (tf2_ros/static_transform_publisher)
    camera_base_link3 (tf2_ros/static_transform_publisher)

auto-starting new master
process[master]: started with pid [6848]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 26bcfad8-bcf9-11e6-bc52-00e0b4159b09
process[rosout-1]: started with pid [6861]
started core service [/rosout]
process[camera/camera_nodelet_manager-2]: started with pid [6864]
process[camera/driver-3]: started with pid [6865]
process[camera/rgb_rectify_color-4]: started with pid [6867]
process[camera/depth_rectify_depth-5]: started with pid [6878]
process[camera/depth_metric_rect-6]: started with pid [6896]
process[camera/depth_metric-7]: started with pid [6912]
process[camera/depth_points-8]: started with pid [6920]
process[camera/register_depth_rgb-9]: started with pid [6938]
process[camera/points_xyzrgb_sw_registered-10]: started with pid [6949]
process[camera_base_link-12]: started with pid [6970]
process[camera_base_link1-13]: started with pid [6986]
process[camera_base_link2-14]: started with pid [6997]
process[camera_base_link3-15]: started with pid [7008]
[ INFO] [1481168899.738014182]: Initializing nodelet with 4 worker threads.
[ INFO] [1481168900.562120390]: Device "2bc5/0403@2/5" found.
Warning: USB events thread - failed to set priority. This might cause loss of data...

使用rqt_image_view:



发现rgb并没有正确显示??需要UVC支持。

编译libuvc过程如下:注意红色部分

`libuvc` is a cross-platform library for USB video devices, built atop `libusb`.
It enables fine-grained control over USB video devices exporting the standard USB Video Class
(UVC) interface, enabling developers to write drivers for previously unsupported devices,
or just access UVC devices in a generic fashion.

## Getting and Building libuvc

Prerequisites: You will need `libusb` and [CMake](http://www.cmake.org/) installed.

To build, you can just run these shell commands:

    git clone https://github.com/ktossell/libuvc
    cd libuvc
    mkdir build
    cd build
    cmake ..
    make && sudo make install

and you're set! If you want to change the build configuration, you can edit `CMakeCache.txt`
in the build directory, or use a CMake GUI to make the desired changes.

## Developing with libuvc

The documentation for `libuvc` can currently be found at https://int80k.com/libuvc/doc/.


然后编译libuvc_ros:注意红色部分

`libuvc_camera` is a ROS driver that supports webcams and other UVC-standards-compliant video devices.
It's a cross-platform replacement for `uvc_camera`, a Linux-only webcam driver.

Documentation is available on the ROS wiki: [libuvc_camera](http://wiki.ros.org/libuvc_camera).


使用catkin_make,如果报错,注意libusb.h的位置。使用locate libusb.h,并将其放到合适位置:

~$ sudo cp /usr/include/libusb-1.0/libusb.h  /usr/local/include/libuvc/

修改下libuvc.h中include中的路径。

在启动roscore后,使用:

~$ rosrun libuvc_camera camera_node

查看rgb。

~$ rosrun libuvc_camera camera_node 
[ INFO] [1481169521.460856223]: Opening camera with vendor=0x0, product=0x0, serial="", index=0
[ERROR] [1481169521.461465837]: Permission denied opening /dev/bus/usb/002/004

出现报错,修改端口权限,重试。

[ERROR] [1481169521.461465837]: Permission denied opening /dev/bus/usb/002/004
relaybotbox@relaybotbox-desktop:~$ sudo chmod 777 /dev/bus/usb/002/004
[sudo] relaybotbox 的密码: 
relaybotbox@relaybotbox-desktop:~$ rosrun libuvc_camera camera_node 
[ INFO] [1481169588.328108966]: Opening camera with vendor=0x0, product=0x0, serial="", index=0
unsupported descriptor subtype: 13
unsupported descriptor subtype: 13
[ WARN] [1481169589.131025001]: Unable to set scanning_mode to 0
[ WARN] [1481169589.132290563]: Unable to set auto_exposure to 8
[ WARN] [1481169589.133330942]: Unable to set auto_exposure_priority to 0
[ WARN] [1481169589.135009273]: Unable to set exposure_absolute to 1
[ WARN] [1481169589.136271211]: Unable to set auto_focus to 1
[ WARN] [1481169589.137170759]: Unable to set focus_absolute to 0
[ WARN] [1481169589.138442322]: Unable to set gain to 0
[ WARN] [1481169589.140162069]: Unable to set iris_absolute to 0
[ WARN] [1481169589.141553880]: Unable to set pantilt to 0, 0
[ INFO] [1481169589.273060465]: using default calibration URL
[ INFO] [1481169589.273198871]: camera calibration URL: file:///home/relaybotbox/.ros/camera_info/camera.yaml
[ INFO] [1481169589.273354822]: Unable to open camera calibration file [/home/relaybotbox/.ros/camera_info/camera.yaml]
[ WARN] [1481169589.273418390]: Camera calibration file /home/relaybotbox/.ros/camera_info/camera.yaml not found.

使用 rqt_image_view ,查看rgb如下:


同时使用也是可以的。



安装配置完毕,可以开始使用这款视觉传感器了。




RGBD 相机获取的深度图与 RGB 图像进行融合是计算机视觉中的常见任务,旨在结合颜色信息空间几何信息以实现更精确的场景理解。以下是几种常见的融合方法: ### 1. 点云生成 通过深度图提供的每个像素点的距离信息,结合 RGB 图像的颜色信息,可以生成包含颜色三维坐标(X, Y, Z)的 RGBD 点云数据[^2]。具体步骤包括: - **相机内参标定**:使用相机的焦距、主点等参数将图像坐标转换为世界坐标。 - **投影计算**:利用深度值相机模型计算每个像素对应的三维坐标。 - **颜色映射**:将 RGB 图像的颜色信息映射到对应的点上。 以下是一个 Python 示例代码片段,用于基于 NumPy OpenCV 将 RGB 图像与深度图融合为点云: ```python import numpy as np import cv2 def generate_point_cloud(rgb_image, depth_image, camera_matrix): """ :param rgb_image: 彩色图像 (H, W, 3) :param depth_image: 深度图像 (H, W) :param camera_matrix: 相机内参矩阵 [fx, 0, cx; 0, fy, cy; 0, 0, 1] :return: 点云数组 (N, 6),前三列为坐标,后三列为RGB颜色 """ h, w = depth_image.shape fx, fy = camera_matrix[0, 0], camera_matrix[1, 1] cx, cy = camera_matrix[0, 2], camera_matrix[1, 2] # 创建网格坐标 x_grid, y_grid = np.meshgrid(np.arange(w), np.arange(h)) z = depth_image / 1000.0 # 假设单位为毫米,转为米 x = (x_grid - cx) * z / fx y = (y_grid - cy) * z / fy # 合并为点云坐标 points_3d = np.stack((x, y, z), axis=-1).reshape(-1, 3) # 提取颜色信息 colors = rgb_image.reshape(-1, 3) # 合并点云坐标颜色 point_cloud = np.hstack((points_3d, colors)) return point_cloud ``` ### 2. 多模态特征融合 在深度学习中,可以通过神经网络架构直接对 RGB 图像深度图进行联合处理。例如: - **双流网络**:分别用两个卷积神经网络(CNN)提取 RGB 图像深度图的特征,再通过拼接或注意力机制进行融合。 - **跨模态注意力机制**:通过注意力模块让 RGB 特征指导深度特征的学习,反之亦然,从而提升分割精度[^1]。 ### 3. 图像增强与预处理 在实际应用中,深度图可能会存在噪声或缺失值。为了提高融合质量,通常需要进行以下预处理操作: - **深度图去噪**:使用中值滤波、双边滤波等方法去除深度图中的异常值。 - **深度图补全**:采用插值算法或基于学习的方法填充缺失区域。 ### 4. 应用示例 RGBD 融合技术广泛应用于机器人导航、增强现实(AR)、三维重建等领域。例如 Synexens CS30 RGBD 深度相机提供了高分辨率的彩色图像深度信息,适合用于室内环境的实时感知任务[^3]。 ---
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值