1 Realsense
D455 配置:
- RGB:彩色相机,FOV(h,v)( 90*65 )
- 红外点阵发射:位于上图中RGB右边,发射特定模式的红外光,通常是一种点阵图案,这有助于红外摄像头捕捉和计算物体的深度信息
- Right 和 Left:双目红外相机,FOV(h,v)( 87 *58 ),可接受普通光源和红外光源,基线9.5cm
可输出:1 深度图 %2@4M; 2 双目灰度图;3 彩色单目Left (ps:不同于RGB相机,这个是IR相机的彩色) - IMU:BMI055
2 安装
以下是基于Ubuntu20.04系统安装realsense-ros
的一般步骤
2.1 前置
-
安装ROS:您需要在您的计算机上安装ROS。假设您使用的是ROS Noetic版本,您可以按照ROS官方安装指南进行安装。
-
安装RealSense SDK 2.0:在安装
realsense-ros
之前,您需要安装Intel RealSense SDK 2.0。您可以通过以下命令来安装它:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u sudo apt-get install librealsense2-dkms -y sudo apt-get install librealsense2-utils -y sudo apt-get install librealsense2-dev -y sudo apt-get install librealsense2-dbg -y # version后面出现realsense表示更新成功。 modinfo uvcvideo | grep "version:"
- 使用sdk:
插入D455相机,需要USB3.0及以上接口。使用命令启动:
realsense-viewer
用来列出系统上连接的所有RealSense设备和它们的属性,使用命令:
rs-enumerate-devices
2.2 realsense-ros
-
设置ROS工作空间(如果您还没有):
mkdir -p ~/catkin_ws/src
-
克隆
realsense-ros
仓库:cd ~/catkin_ws/src
git clone https://github.com/IntelRealSense/realsense-ros.git cd realsense-ros/
# 选择最新的稳定版本
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1` -
编译工作空间:
catkin_make
-
环境配置:
source ~/catkin_ws/devel/setup.bash
-
安装完成后,您可以通过运行示例节点来测试安装是否成功::
roslaunch realsense2_camera rs_camera.launch
-
编译
realsense-ros
时遇到了一个错误,提示找不到ddynamic_reconfigure
这个ROS包。这个包是必需的,因为realsense-ros
需要它来动态调整参数。
下面是解决这个问题的步骤:sudo apt-get update sudo apt-get install ros-noetic-ddynamic-reconfigure
3 使用
3.1 获取标定外参
需要 source devel/setup.bash;
3.1.1 Left IR camera (深度图)到 RGB
camera
rostopic echo /camera/extrinsics/depth_to_color
这条命令会输出深度摄像头到彩色摄像头的转换矩阵,包括旋转矩阵和平移向量。旋转矩阵接近单位阵,平移向量大概距离6cm。
header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: "depth_to_color_extrinsics"
rotation:
[0.9999966025352478, 0.0024309128057211637, -0.000930685258936137,
-0.0024320671800523996, 0.9999962449073792, -0.001241242396645248,
0.0009276643977500498, 0.0012435016687959433, 0.9999988079071045]
translation:
[-0.05915042757987976, -0.0002094241644954309, 0.0002801527443807572]
3.1.2 Left IR camera 即为 depth camera
rostopic echo /camera/extrinsics/depth_to_infra1
旋转矩阵为单位阵,平移向量为0
header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: "depth_to_infra1_extrinsics"
rotation: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
translation: [0.0, 0.0, 0.0]
3.1.3 Left IR camera 到
Right IR camera
rostopic echo /camera/extrinsics/depth_to_infra2
旋转矩阵为单位阵,平移向量为右侧9.5cm
header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: "depth_to_infra2_extrinsics"
rotation: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
translation: [-0.09505465626716614, 0.0, 0.0]
3.2 使用RealSense ROS获取数据
3.2.1 使用默认配置
roslaunch realsense2_camera rs_camera.launch
启动后查看topic:
rostopic list
图像数据话题
/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/rgb_camera/auto_exposure_roi/parameter_descriptions 和 /camera/rgb_camera/auto_exposure_roi/parameter_updates: 彩色摄像头自动曝光区域的参数描述和更新。
/camera/stereo_module/auto_exposure_roi/parameter_descriptions 和 /camera/stereo_module/auto_exposure_roi/parameter_updates: 立体摄像模块的自动曝光区域参数描述和更新。
系统和诊断话题
/diagnostics: 发布系统的诊断信息,可以用于监控设备状态和性能。
/rosout 和 /rosout_agg: ROS系统日志输出,用于调试和日志记录。
/tf 和 /tf_static: 发布时间和空间中的坐标变换信息,/tf用于动态变换,而/tf_static用于几乎不变的变换。
3.2.2 启用原始双目IR图片
默认配置只开启了深度图模式,没有发送双目IR图片。
两个IR相机共有三种模式:1 深度图(默认打开);2双目灰度IR;3单左目彩色IR(不是那个彩色相机)
模式2和模式3不能同时,只能选择一种,模式1可以在打开模式2或3时同时开启。
编辑 realsense-ros/realsense2_camera/launch/rs_camera.launch:
配置模式2
<arg name="enable_infra" default="false"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
<arg name="infra_rgb" default="false"/>
配置模式3
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="false"/>
<arg name="enable_infra2" default="false"/>
<arg name="infra_rgb" default="true"/>
3.2.3 lauch文件中所有可配置参数
基础参数
- serial_no: 指定连接设备的序列号。
- usb_port_id: 指定设备连接的USB端口ID。
- device_type: 指定设备类型,如D455。
- json_file_path: 指定一个JSON配置文件的路径,该文件包含用于设备的预设配置。
- camera: 指定摄像头的命名前缀。
- tf_prefix: 指定发布到tf中的坐标系前缀。
- external_manager: 如果设置为
true
,使用外部的节点管理器。 - manager: 指定节点管理器的名称。
- output: 指定日志输出方式。
- respawn: 如果节点终止,是否自动重启节点。
图像数据流参数
- fisheye_width/height: 指定鱼眼摄像头的图像宽度和高度。
- enable_fisheye: 是否启用鱼眼摄像头。
- depth_width/height: 指定深度摄像头的图像宽度和高度。
- enable_depth: 是否启用深度摄像头。
- confidence_width/height: 指定置信图像的宽度和高度。
- enable_confidence: 是否启用置信度图像。
- confidence_fps: 置信图像的帧率。
- infra_width/height: 指定红外摄像头的图像宽度和高度。
- enable_infra, enable_infra1, enable_infra2: 是否启用红外摄像头。
- infra_rgb: 是否将红外图像与RGB图像同步。
- color_width/height: 指定彩色摄像头的图像宽度和高度。
- enable_color: 是否启用彩色摄像头。
性能参数
- fisheye_fps, depth_fps, infra_fps, color_fps: 对应各摄像头的帧率。
- gyro_fps, accel_fps: 陀螺仪和加速度计的帧率。
- enable_gyro, enable_accel: 是否启用陀螺仪和加速度计。
点云和同步参数
- enable_pointcloud: 是否生成点云数据。
- pointcloud_texture_stream: 点云的纹理来源。
- pointcloud_texture_index: 使用的纹理流的索引。
- allow_no_texture_points: 是否允许无纹理点。
- ordered_pc: 是否生成有序点云。
- enable_sync: 是否启用传感器数据同步。
- align_depth: 是否将深度数据与其他数据流对齐。
转换和滤镜参数
- publish_tf: 是否发布TF转换。
- tf_publish_rate: TF发布的频率。
- filters: 应用于图像数据的滤波器。
- clip_distance: 裁剪距离,用于过滤远距离的点。
- linear_accel_cov: 线性加速度的协方差。
- initial_reset: 启动时是否重置设备。
- reconnect_timeout: 重连超时时间。
- wait_for_device_timeout: 等待设备连接的超时时间。
- unite_imu_method: IMU数据的合并方法。
- topic_odom_in: 接收里程计信息的话题。
- calib_odom_file: 里程计校准文件的路径。
- publish_odom_tf: 是否发布里程计的TF数据。
曝光和增益参数
- stereo_module/exposure/1, stereo_module/gain/1: 第一个红外摄像头的曝光和增益设置。
- stereo_module/exposure/2, stereo_module/gain/2: 第二个红外摄像头的曝光和增益设置。
3.2.4 URDF 坐标系可视化
roslaunch realsense2_description view_d455_model.launch
在 RViz 中查看 Intel RealSense D455 模型。这个启动文件一般包含在 realsense2_description
包中,该包用于存储和展示 RealSense 设备的 URDF(统一机器人描述格式)模型。
为什么urdf中会有camera_infra2_optical_frame与camera_infra2_frame 这两种形式的坐标系?
在 URDF (统一机器人描述格式) 中,包含 camera_infra2_optical_frame
和 camera_infra2_frame
这两种形式的坐标系的原因主要与ROS的坐标系规范和特定的应用需求有关。每种坐标系都有其特定的用途,理解它们的区别对于进行精确的空间计算和数据整合非常重要。ROS坐标系范:
-
通用坐标系(例如
camera_infra2_frame
):- 这通常是相对于摄像头硬件本身的坐标系。在这个坐标系中,原点通常位于摄像头的物理中心或某个固定的参考点,坐标轴与摄像头的默认方向对齐。
camera_infra2_frame
可能会用于表示摄像头硬件的位置和方向相对于其他硬件组件(如机器人本体)的情况。
-
光学坐标系(例如
camera_infra2_optical_frame
):- 光学坐标系遵循一个特殊的ROS规范,其中 z 轴正对着前方,x 轴向右,y 轴向下。这种布局是基于图像坐标系的常见布局,使得z轴正对图像平面。
camera_infra2_optical_frame
用于处理图像数据时更为方便,因为它使得摄像头捕获的图像直接对应于其坐标系的方向,这对于图像处理和计算机视觉应用尤为重要。
应用场景
- 数据转换:在ROS中,不同的节点和工具可能需要使用不同的坐标系来处理数据。例如,一个节点可能使用通用坐标系来计算摄像头的物理位置,而另一个节点则使用光学坐标系来处理图像数据和执行视觉识别任务。
- 模块化和灵活性:提供两种坐标系允许开发者根据需要选择最适合其应用的坐标系,而无需在中间进行复杂的坐标转换。