【ROS使用RealSense-D435i,RealSense-ROS】

一. 运行D435i深度摄像头

https://www.intelrealsense.com/get-started-depth-camera/

请访问 GitHub 上的 Linux* 发行版页面以获取安装说明。

安装软件包:https://github.com/IntelRealSense/librealsense/blob/development/doc/distribution_linux.md#installing-the-packages

  • 注册服务器的公钥:
sudo mkdir -p /etc/apt/keyrings
curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo tee /etc/apt/keyrings/librealsense.pgp > /dev/null
  • 确保安装了 apt HTTPS 支持:
sudo apt-get install apt-transport-https
  • 将服务器添加到存储库列表中:
    在这里插入图片描述
echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \
sudo tee /etc/apt/sources.list.d/librealsense.list
sudo apt-get update

在这里插入图片描述

  • 安装库(如果升级软件包,请参阅下面的部分):

    以上两行将部署librealsense2 udev规则,构建和激活内核模块,运行时库以及可执行的演示和工具。sudo apt-get install librealsense2-dkms``sudo apt-get install librealsense2-utils

  • (可选)安装开发人员和调试包:

    安装包后,您可以使用您选择的 IDE 使用 librealsense 编译应用程序。sudo apt-get install librealsense2-dev``sudo apt-get install librealsense2-dbg``dev``g++ -std=c++11 filename.cpp -lrealsense2

重新连接英特尔实感深度摄像头并运行:

realsense-viewer

以验证安装

验证内核是否已更新:
应包含字符串modinfo uvcvideo | grep "version:"``realsense

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

Linux 手册安装指南
我使用Motion Module模式报错如下

Backend in rs2_open_multiple(sensor:0x7f0dc401bc80,
profiles:0x7f0dc59de1f8, count:2):
Failed to open scan_element
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5.4/4-5.4:1.5/0003:8086:0B3A.000E/HID-SENSOR-200073.3.auto/iio:device0/scan_elements/in_accel_y_en
Last Error: Permission denied

解决:

sudo realsense-viewer

二 ROS中使用RealSense-D435

建议参考

ROS接口安装
由于ros1的维护,直接安装会以最新版本下载,其适配ros2,导致编译失败,所以在安装时要选择与之ros相对应的tag

以我的ros noetic为例

  • 建立ROS工作空间并初始化 ~/catkin_RealSense_ws/src
mkdir -p ~/catkin_RealSense_ws/src
cd ~/catkin_RealSense_ws/src
catkin_init_workspace
cd ..
catkin_make

安装realsense-ros:

https://gitcode.net/mirrors/intelrealsense/realsense-ros?utm_source=csdn_github_accelerator

安装ddynamic_reconfigure:

https://gitcode.net/mirrors/pal-robotics/ddynamic_reconfigure.git

在这里插入图片描述
返回到工作空间的根目录并构建:编译

catkin_RealSense_ws/src$ cd ..
cgm@cgm:~/catkin_RealSense_ws$ catkin_make

2.1 把我们工作空间的环境变量设置到bash中

打开终端输入

echo "source ~/catkin_RealSense_ws/devel/setup.bash" >> ~/.bashrc

刷新 bash

source ~/.bashrc
echo $ROS_PACKAGE_PATH

在这里插入图片描述

我在catkin_make时报错了:

`CMake Error `at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "cv_bridge" with
  any of the following names:

    cv_bridgeConfig.cmake
    cv_bridge-config.cmake

  Add the installation prefix of "cv_bridge" to CMAKE_PREFIX_PATH or set
  "cv_bridge_DIR" to a directory containing one of the above files.  If
  "cv_bridge" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  realsense-ros/realsense2_camera/CMakeLists.txt:11 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/cgm/catkin_RealSense_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/cgm/catkin_RealSense_ws/build/CMakeFiles/CMakeError.log".
`Invoking "cmake" failed`

主要问题是在尝试构建realsense2_camera包时,CMake无法找到cv_bridge包。cv_bridge是ROS中用于在ROS消息和OpenCV数据结构之间进行转换的包。

安装cv_bridge:首先,确保你已经安装了cv_bridge。你可以使用以下命令来安装它:

sudo apt-get install ros-noetic-cv-bridge

再次编译:catkin_make
在这里插入图片描述
启动节点

cgm@cgm:~/catkin_RealSense_ws$ source devel/setup.bash

cgm@cgm:~/catkin_RealSense_ws$ ls ~/catkin_RealSense_ws/src/realsense-ros/realsense2_camera/launch
demo_pointcloud.launch      rs_camera.launch                  rs_rgbd.launch
demo_t265.launch            rs_d400_and_t265.launch           rs_rtabmap.launch
includes                    rs_d435_camera_with_model.launch  rs_t265.launch
opensource_tracking.launch  rs_from_file.launch
rs_aligned_depth.launch     rs_multiple_devices.launch

cgm@cgm:~/catkin_RealSense_ws$ echo $ROS_PACKAGE_PATH
/home/cgm/catkin_RealSense_ws/src:/home/cgm/catkin_ws_yolov8/src:/home/cgm/catkin_ws/src:/opt/ros/noetic/share


# roslaunch realsense2_camera rs_camera.launch命令
# roslaunch realsense2_camera rs_camera.launch命令
cgm@cgm:~/catkin_RealSense_ws$ roslaunch realsense2_camera rs_camera.launch
... logging to /home/cgm/.ros/log/8cfbde3c-5af3-11ee-9fc0-31bf2915ed5f/roslaunch-cgm-67078.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://cgm:40819/

SUMMARY
========
.
.
.
.
[ INFO] [1695572201.765937000]: setupPublishers...
[ INFO] [1695572201.767861959]: Expected frequency for depth = 30.00000
[ INFO] [1695572201.769582894]: Expected frequency for color = 30.00000
[ INFO] [1695572201.770742675]: setupStreams...
[ INFO] [1695572201.809016911]: SELECTED BASE:Depth, 0
[ INFO] [1695572201.813351024]: RealSense Node Is Up!
[ WARN] [1695572201.943537509]: 

出现RealSense Node Is Up!证明节点启动成功

我们可以看到以下关键信息:

  1. 初始化和版本信息:
    • 使用的是RealSense ROS v2.3.2。
    • 使用的LibRealSense版本为v2.54.1。
  2. 设备信息:
    • 设备名称:Intel RealSense D435I。
    • 设备序列号:243522070390。
    • 设备固件版本:5.15.0.2。
    • 设备USB类型:3.2。
  3. 设备传感器:
    • 发现了Stereo模块。
    • 发现了RGB摄像头。
    • 发现了运动模块。
    • Confidence传感器不受当前设备支持。
  4. 流设置:
    • 深度流已启用,分辨率为848x480,帧率为30fps,格式为Z16。
    • 彩色流已启用,分辨率为1280x720,帧率为30fps,格式为RGB8。
  5. 其他设置:
    • 点云功能已关闭。
    • 深度对齐功能已关闭。
    • 同步模式已关闭。
  6. 状态信息:
    • RealSense节点已启动并运行。
  7. 警告:
    • 有一个警告,但内容没有完全显示。

分析总结:

  • 你成功地启动了Intel RealSense D435I相机,并使用了ROS的RealSense节点。
  • 相机的深度和彩色流都已成功启用。
  • 你没有启用点云和深度对齐功能,这可能是基于你的应用需求。
  • 你的设备不支持Confidence传感器,这可能是因为你的相机型号或固件版本。
  • 除了一个未完全显示的警告外,没有其他明显的错误或问题。

2.2 查看话题

rostopic list

在这里插入图片描述

sudo apt-get install ros-noetic-rqt-image-view
rqt_image_view

在这里插入图片描述

2.3 rviz显示点云

sudo apt-get install ros-noetic-rviz
roslaunch realsense2_camera demo_pointcloud.launch 

在这里插入图片描述

2.4 在rviz中测试相机

前提

roslaunch realsense2_camera rs_camera.launch

再打开一个终端输入

rviz

在RViz界面中,按照以下步骤进行操作:

  1. 选择 “Fixed Frame”,将其设置为 “camera_link”。
  2. 单击左下角的 “Add” 按钮。
  3. 双击 “Camera”,将摄像机添加到左侧的列表中。
  4. 单击 "Camera"下拉按钮,然后选择 “Image Topic”。
  5. 在弹出的对话框中,选择 “/camera/color/image_raw”。
  6. 左下角的相机视图将显示摄像机的图像。
    在这里插入图片描述

2.5 Python接口安装

pip install pyrealsense2

import pyrealsense2 as rs
import numpy as np
import cv2
 
if __name__ == "__main__":
    # Configure depth and color streams
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
    # Start streaming
    pipeline.start(config)
    try:
        while True:
            # Wait for a coherent pair of frames: depth and color
            frames = pipeline.wait_for_frames()
            depth_frame = frames.get_depth_frame()
            color_frame = frames.get_color_frame()
            if not depth_frame or not color_frame:
                continue
            # Convert images to numpy arrays
 
            depth_image = np.asanyarray(depth_frame.get_data())
 
            color_image = np.asanyarray(color_frame.get_data())
 
            # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
            depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
            # Stack both images horizontally
            images = np.hstack((color_image, depth_colormap))
            # Show images
            cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
            cv2.imshow('RealSense', images)
            key = cv2.waitKey(1)
            # Press esc or 'q' to close the image window
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                break
    finally:
        # Stop streaming
        pipeline.stop()

在这里插入图片描述
RealSense-ROS安装测试完毕。

2.6 查看相机内参

前提,先运行rs_camera.launch

roslaunch realsense2_camera rs_camera.launch

看一下有些什么话题

cgm@cgm:~$ rostopic echo /
/camera/color/camera_info
/camera/color/image_raw
/camera/color/metadata
/camera/depth/camera_info
/camera/depth/image_rect_raw
/camera/depth/metadata
/camera/extrinsics/depth_to_color
/camera/motion_module/parameter_descriptions
/camera/motion_module/parameter_updates
/camera/realsense2_camera_manager/bond
/camera/rgb_camera/auto_exposure_roi/parameter_descriptions
/camera/rgb_camera/auto_exposure_roi/parameter_updates
/camera/rgb_camera/parameter_descriptions
/camera/rgb_camera/parameter_updates
/camera/stereo_module/auto_exposure_roi/parameter_descriptions
/camera/stereo_module/auto_exposure_roi/parameter_updates
/camera/stereo_module/parameter_descriptions
/camera/stereo_module/parameter_updates
/diagnostics
/rosout
/rosout_agg
/tf
/tf_static

这些话题的简要介绍和总结:

  1. Color Stream (彩色流):

    • /camera/color/camera_info: 这个话题提供了RGB摄像头的内部参数,如焦距、畸变系数等,这些信息对于图像处理和计算机视觉任务非常重要。
    • /camera/color/image_raw: 这是摄像头捕获的原始RGB图像数据,通常用于图像处理和分析。
    • /camera/color/metadata: 这个话题提供了与RGB图像流相关的元数据,如时间戳、曝光时间等。
  2. Depth Stream (深度流):

    • /camera/depth/camera_info: 提供深度摄像头的内部参数,这些参数对于深度估计和3D重建非常重要。
    • /camera/depth/image_rect_raw: 这是经过矫正的深度图像数据,其中的每个像素值表示该像素点到摄像头的距离。
    • /camera/depth/metadata: 提供与深度图像流相关的元数据。
  3. Extrinsics (外部参数):

    • /camera/extrinsics/depth_to_color: 这个话题提供了深度摄像头到RGB摄像头的外部参数,如旋转和平移矩阵。这些参数对于深度和彩色图像的对齐非常重要。
  4. Motion Module (IMU - 惯性测量单元):

    • /camera/motion_module/parameter_descriptions: 这个话题描述了IMU的动态参数,如陀螺仪和加速度计的范围、分辨率等。
    • /camera/motion_module/parameter_updates: 当IMU参数发生变化时,这个话题会提供更新。
  5. Camera Manager (摄像头管理器):

    • /camera/realsense2_camera_manager/bond: 这是一个bond连接,用于确保摄像头节点的稳定运行。
  6. RGB Camera Settings (RGB摄像头设置):

    • /camera/rgb_camera/...: 这些话题允许用户获取和设置RGB摄像头的参数,如曝光、增益等。
  7. Stereo Module Settings (立体摄像头模块设置):

    • /camera/stereo_module/...: 这些话题允许用户获取和设置立体摄像头模块的参数。
  8. Diagnostics (诊断):

    • /diagnostics: 这个话题提供了有关摄像头和ROS节点健康状况的信息,如温度、错误消息等。
  9. ROS Output (ROS输出):

    • /rosout & /rosout_agg: 这些话题提供了ROS节点的日志信息,对于调试和故障排除非常有用。
  10. Transforms (坐标变换):

  11. /tf & /tf_static: 这些话题提供了摄像头的坐标变换信息,如摄像头在机器人或环境中的位置和方向。

这些话题允许你访问和控制摄像头的各种功能,从基本的图像和深度流到高级的参数调整和诊断。

查看相机内参,再打开一个终端输入

rostopic echo /camera/color/camera_info

在这里插入图片描述

2.7 camera_info消息详解

这个消息是ROS中sensor_msgs/CameraInfo类型的一个实例,它为摄像头提供了详细的几何和畸变参数。这些参数对于图像校正、立体视觉和其他计算机视觉任务至关重要。

  1. header:

    • seq: 这是连续的消息序列号,用于跟踪消息的顺序。
    • stamp: 这是消息的时间戳,通常表示消息的生成时间。
    • frame_id: 这是摄像头的参考帧的名称。在ROS中,每个坐标帧都有一个唯一的名称,这里的frame_id表示摄像头的光学中心。
  2. height & width:

    • 这些字段表示摄像头捕获的图像的高度和宽度,单位为像素。例如,一个1280x720的图像表示宽度为1280像素,高度为720像素。
  3. distortion_model:

    • 这是用于图像畸变的模型的名称。常见的模型有"plumb_bob"和"rational_polynomial"。在这里,使用的是"plumb_bob"模型,这是一个常用的径向畸变模型。
  4. D:

    • 这是畸变系数的列表。对于"plumb_bob"模型,通常有5个参数:k1, k2, t1, t2, k3。这些参数描述了图像的径向和切向畸变。
  5. K:

    • 这是摄像头的内部参数矩阵。它的主要元素包括:
      • K[0] 和 K[4]: 这是摄像头的焦距,分别在x和y方向。
      • K[2] 和 K[5]: 这是摄像头的光学中心,分别在x和y方向。
  6. R:

    • 这是摄像头的旋转矩阵。它描述了摄像头的旋转。对于单个摄像头,这通常是单位矩阵,表示没有旋转。
  7. P:

    • 这是摄像头的投影矩阵。它描述了从3D世界坐标到2D图像坐标的映射。这个矩阵也包括了摄像头的焦距和光学中心。
  8. binning_x & binning_y:

    • 这些字段描述了图像在x和y方向上的二值化。二值化是一种减少图像分辨率的方法,通常用于加速图像处理。
  9. roi:

    • 这是摄像头的感兴趣区域(Region of Interest)。它描述了图像中的一个子区域,通常用于聚焦于图像的某个特定部分。

这些参数通常是通过摄像头标定得到的,标定过程使用一系列已知的3D点和它们在图像中的2D投影来计算。

再次建议参考gitcode的官网镜像教程

github上的官网教程

猜你喜欢

转载自blog.csdn.net/u013454780/article/details/133255733