D435/D435i使用技巧
D435/D435i是目前市场上使用最为方便的双目深度相机。虽然淘宝上其价格有些让人望而却步,但是咸鱼上成色不错的D435/D435i 价格就在1000左右,依旧是自主无人机视觉定位和感知的首选。
这里记录一下,我使用这款相机的一些技巧,希望对大家有些帮助
相机内部参数的获取
realsense 系列的相机,在出厂时都已经进行了标定,其标定结果基本是很不错的。大家可以放心的直接使用,如果有不满意,也可以再自行使用kalibr工具包标定。
有两种方式获取其参数:
rs-enumerate-devices -c
找到我们输出的分辨率,一般是640×480
Intrinsic of "Infrared 1" / 640x480 / {Y8}
Width: 640
Height: 480
PPX: 324.642425537109
PPY: 236.990188598633
Fx: 386.346374511719
Fy: 386.346374511719
Distortion: Brown Conrady
Coeffs: 0 0 0 0 0
FOV (deg): 79.26 x 63.7
rostopic echo /camera/infra1/camera_info
header:
seq: 78
stamp:
secs: 1679556374
nsecs: 751435738
frame_id: "camera_infra1_optical_frame"
height: 480
width: 640
distortion_model: "plumb_bob"
D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [386.34637451171875, 0.0, 324.6424255371094, 0.0, 386.34637451171875, 236.9901885986328, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [386.34637451171875, 0.0, 324.6424255371094, 0.0, 0.0, 386.34637451171875, 236.9901885986328, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0
binning_y: 0
roi:
x_offset: 0
y_offset: 0
height: 0
width: 0
do_rectify: False
其中K为相机内参矩阵:
K
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
K=\begin{bmatrix} f_x & 0 &c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1\end{bmatrix}
K=
fx000fy0cxcy1
关闭结构光
在使用D435/D435i运行双目视觉里程计时,其结构光产生的光斑是不可接收的。我们可以物理手段,直接将结构光投影器遮蔽。也可以从launch文件中设置,将下面的内容加入<group ns="$(arg camera)">
之前即可:
<arg name="emitter_enable" default="false"/>
<!-- rosparam set /camera/stereo_module/emitter_enabled false -->
<rosparam>
/camera/stereo_module/emitter_enabled: 0
</rosparam>
<rosparam if="$(arg emitter_enable)">
/camera/stereo_module/emitter_enabled: 1
</rosparam>
结构光闪烁
虽然关闭了结构光可以方便我们进行双目的特征提取。但是这使得深度的估计不如结构光开启时准确。为此,可以修改驱动使得结构光开关交替,并将结构光关闭时的infra图像输出,将结构光开启时的depth输出,即获得高质量深度图也获得没有结构光干扰的infra图!这样是更优选,Fast_lab的汪泽培博士和周鑫博士已经写好了这个驱动,里面有些编译的小bug, 我修复后把它放在了这里:
https://portrait.gitee.com/music-lab/modified_realsense2_camera
多个设备接入一台电脑
由于一些任务和算法的需要,我们可以需要将多个D435/D435i 接入电脑。那么参考官网操作即可:
https://www.intelrealsense.com/how-to-multiple-camera-setup-with-ros/
key piont:
-
roslaunch realsense2_camera rs_camera.launch camera:=cam_1 serial_no:=140122076981 filters:=spatial,temporal,pointcloud
-
roslaunch realsense2_camera rs_camera.launch camera:=cam_2 serial_no:=xxxx filters:=spatial,temporal,pointcloud
-
filters参数可用可不用!