一. 运行D435i深度摄像头
https://www.intelrealsense.com/get-started-depth-camera/
请访问 GitHub 上的 Linux* 发行版页面以获取安装说明。
- 注册服务器的公钥:
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!
证明节点启动成功
我们可以看到以下关键信息:
- 初始化和版本信息:
- 使用的是RealSense ROS v2.3.2。
- 使用的LibRealSense版本为v2.54.1。
- 设备信息:
- 设备名称:Intel RealSense D435I。
- 设备序列号:243522070390。
- 设备固件版本:5.15.0.2。
- 设备USB类型:3.2。
- 设备传感器:
- 发现了Stereo模块。
- 发现了RGB摄像头。
- 发现了运动模块。
- Confidence传感器不受当前设备支持。
- 流设置:
- 深度流已启用,分辨率为848x480,帧率为30fps,格式为Z16。
- 彩色流已启用,分辨率为1280x720,帧率为30fps,格式为RGB8。
- 其他设置:
- 点云功能已关闭。
- 深度对齐功能已关闭。
- 同步模式已关闭。
- 状态信息:
- RealSense节点已启动并运行。
- 警告:
- 有一个警告,但内容没有完全显示。
分析总结:
- 你成功地启动了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界面中,按照以下步骤进行操作:
- 选择 “Fixed Frame”,将其设置为 “camera_link”。
- 单击左下角的 “Add” 按钮。
- 双击 “Camera”,将摄像机添加到左侧的列表中。
- 单击 "Camera"下拉按钮,然后选择 “Image Topic”。
- 在弹出的对话框中,选择 “/camera/color/image_raw”。
- 左下角的相机视图将显示摄像机的图像。
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
这些话题的简要介绍和总结:
-
Color Stream (彩色流):
/camera/color/camera_info
: 这个话题提供了RGB摄像头的内部参数,如焦距、畸变系数等,这些信息对于图像处理和计算机视觉任务非常重要。/camera/color/image_raw
: 这是摄像头捕获的原始RGB图像数据,通常用于图像处理和分析。/camera/color/metadata
: 这个话题提供了与RGB图像流相关的元数据,如时间戳、曝光时间等。
-
Depth Stream (深度流):
/camera/depth/camera_info
: 提供深度摄像头的内部参数,这些参数对于深度估计和3D重建非常重要。/camera/depth/image_rect_raw
: 这是经过矫正的深度图像数据,其中的每个像素值表示该像素点到摄像头的距离。/camera/depth/metadata
: 提供与深度图像流相关的元数据。
-
Extrinsics (外部参数):
/camera/extrinsics/depth_to_color
: 这个话题提供了深度摄像头到RGB摄像头的外部参数,如旋转和平移矩阵。这些参数对于深度和彩色图像的对齐非常重要。
-
Motion Module (IMU - 惯性测量单元):
/camera/motion_module/parameter_descriptions
: 这个话题描述了IMU的动态参数,如陀螺仪和加速度计的范围、分辨率等。/camera/motion_module/parameter_updates
: 当IMU参数发生变化时,这个话题会提供更新。
-
Camera Manager (摄像头管理器):
/camera/realsense2_camera_manager/bond
: 这是一个bond连接,用于确保摄像头节点的稳定运行。
-
RGB Camera Settings (RGB摄像头设置):
/camera/rgb_camera/...
: 这些话题允许用户获取和设置RGB摄像头的参数,如曝光、增益等。
-
Stereo Module Settings (立体摄像头模块设置):
/camera/stereo_module/...
: 这些话题允许用户获取和设置立体摄像头模块的参数。
-
Diagnostics (诊断):
/diagnostics
: 这个话题提供了有关摄像头和ROS节点健康状况的信息,如温度、错误消息等。
-
ROS Output (ROS输出):
/rosout
&/rosout_agg
: 这些话题提供了ROS节点的日志信息,对于调试和故障排除非常有用。
-
Transforms (坐标变换):
-
/tf
&/tf_static
: 这些话题提供了摄像头的坐标变换信息,如摄像头在机器人或环境中的位置和方向。
这些话题允许你访问和控制摄像头的各种功能,从基本的图像和深度流到高级的参数调整和诊断。
查看相机内参,再打开一个终端输入
rostopic echo /camera/color/camera_info
2.7 camera_info
消息详解
这个消息是ROS中sensor_msgs/CameraInfo
类型的一个实例,它为摄像头提供了详细的几何和畸变参数。这些参数对于图像校正、立体视觉和其他计算机视觉任务至关重要。
-
header:
seq
: 这是连续的消息序列号,用于跟踪消息的顺序。stamp
: 这是消息的时间戳,通常表示消息的生成时间。frame_id
: 这是摄像头的参考帧的名称。在ROS中,每个坐标帧都有一个唯一的名称,这里的frame_id
表示摄像头的光学中心。
-
height & width:
- 这些字段表示摄像头捕获的图像的高度和宽度,单位为像素。例如,一个1280x720的图像表示宽度为1280像素,高度为720像素。
-
distortion_model:
- 这是用于图像畸变的模型的名称。常见的模型有"plumb_bob"和"rational_polynomial"。在这里,使用的是"plumb_bob"模型,这是一个常用的径向畸变模型。
-
D:
- 这是畸变系数的列表。对于"plumb_bob"模型,通常有5个参数:k1, k2, t1, t2, k3。这些参数描述了图像的径向和切向畸变。
-
K:
- 这是摄像头的内部参数矩阵。它的主要元素包括:
- K[0] 和 K[4]: 这是摄像头的焦距,分别在x和y方向。
- K[2] 和 K[5]: 这是摄像头的光学中心,分别在x和y方向。
- 这是摄像头的内部参数矩阵。它的主要元素包括:
-
R:
- 这是摄像头的旋转矩阵。它描述了摄像头的旋转。对于单个摄像头,这通常是单位矩阵,表示没有旋转。
-
P:
- 这是摄像头的投影矩阵。它描述了从3D世界坐标到2D图像坐标的映射。这个矩阵也包括了摄像头的焦距和光学中心。
-
binning_x & binning_y:
- 这些字段描述了图像在x和y方向上的二值化。二值化是一种减少图像分辨率的方法,通常用于加速图像处理。
-
roi:
- 这是摄像头的感兴趣区域(Region of Interest)。它描述了图像中的一个子区域,通常用于聚焦于图像的某个特定部分。
这些参数通常是通过摄像头标定得到的,标定过程使用一系列已知的3D点和它们在图像中的2D投影来计算。