realsense D435i终于到手了,打开发现其实很小巧,先做一些配置看看。默认要使用USB3,如果RealSense使用USB2, Output Resolution自动降到480*270 30fbs
,而非产品所宣称的1280 x 720 active stereo depth resolution和90fps,且只有Stereo Moudle在工作,无Image Sensor的RGB Moudle菜单项,无法进行3D建模。
D435i采用了即用型USB供电形式,不仅提供深度传感器模组,还配备了一个IMU单元(惯性测量单元,采用的博世BMI055)。凭借内置的IMU单元,结合视觉数据可实现6DoF追踪功能。其中,IMU将各种线性加速度计和陀螺仪数据结合,可检测X,Y,Z三轴的旋转和平移,以及俯仰、横摇等动作。D435i的2000万像素RGB摄像头和3D传感器可以30帧/秒的速度提供分辨率高达1280 × 720,或者以90帧/秒的速度提供848 × 480的较低分辨率。该摄像头具有全局快门,可以处理快速移动物体,室内室外皆可操作。深度距离在0.1 m~10 m
之间,视场角度为85 × 58度
可以获得RGB图、左右红外摄像图、深度图、IMU数据,并且将深度图数据和RGB图进行对齐。左右红外相机进行测量深度,中间红外点阵投射器相当于补光灯,不打开也能测深度,只是效果不好;最右边的rgb相机用于采集彩色图片,最终可以将彩色视频流与深度流进行对齐.
两个驱动讲究搭配,否则安装编译都不报错,运行时会报错 realsense hwmon command 0x7d failed 我使用的是realsense-ros-2.2.23
和librealsense-2.43.0
安装librealsense
先装realsense的驱动,步骤参考网上的,其实不必完全相同,我的步骤如下:
- 下载驱动,然后解压到根目录
- 执行如下命令:
1
2
3
4
5cd ~/librealsense
sudo apt-get install libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev libglfw3-dev
# 许可脚本
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger - 开始编译
1
2
3
4
5cd ~/librealsense
mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true
sudo make uninstall && make clean && make -j7 && sudo make install
运行realsense-viewer
验证,看到如下画面
配置可以修改为常见的黑白深度图以及分辨率等等
ROS驱动
从这里下载,然后放到某工作空间,编译即可:1
2catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
现在运行roslaunch realsense2_camera rs_camera.launch
,打开rqt就能看到realsense的三种图像
实际运行了/camera/realsense2_camera
和camera/realsense2_camera_manager
两个节点,涉及的话题有很多,以后慢慢分析。
tf关系如图:
在rqt中打开深度图时出现了报错,又是图像编码问题
在rqt里查看/camera/depth/image_rect_raw/theora
,同样没有深度图,但rqt不报警
在rqt查看RGB和红外的图像,只要选择theora,rqt终端都会报警:1
[ WARN][/rqt_gui_cpp_node_25764] [TheoraSubscriber::internalCallback] line_170 [theora] Packet was not a Theora header
使用对齐的深度话题信息发布RGBD点云1
roslaunch realsense2_camera rs_rgbd.launch
这一步还没有成功,在rviz里没看到结果
内参
realsense
启动时可以发现信息 [color stream is enabled - width: 640, height: 480, fps: 15, Format: RGB8]
realsense相机出厂的时候一般都标定好了,直接读取他们的内参即可。终端输入: rs-sensor-control
,根据提示选择,出现所有视频流的列表时,根据上面的信息选择,最终显示内参:1
2
3
4Principal Point : 327.438, 239.997
Focal Length : 611.354, 610.016
Distortion Model : Inverse Brown Conrady
Distortion Coefficients : [0,0,0,0,0]
疑难问题 undefined symbol: _ZN2cv3MatC1Ev
运行rs_camera.launch
时报错1
symbol lookup error: /home/jetson/catkin_ws/devel/lib//librealsense2_camera.so: undefined symbol: _ZN2cv3MatC1Ev [camera/realsense2_camera_manager-2] process has died
我查了好长时间,期间还改用其他的librealsense
和firmware的版本,比如到firmware版本历史,下载对应版本。 参考firmware-update-tool的Usage部分
运行时可以看到相关的环境版本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15RealSense ROS v2.3.2
[ INFO] [1723892537.013079361]: Built with LibRealSense v2.50.0
[ INFO] [1723892537.013109698]: Running with LibRealSense v2.50.0
[ INFO] [1723892537.311113159]: Device with serial number 014122072296 was found.
[ INFO] [1723892537.311624883]: Device with physical ID 2-1.4-6 was found.
[ INFO] [1723892537.311852281]: Device with name Intel RealSense D435I was found.
[ INFO] [1723892537.313360062]: Device with port number 2-1.4 was found.
[ INFO] [1723892537.313859786]: Device USB type: 3.2
[ INFO] [1723892537.373681930]: JSON file is not provided
[ INFO] [1723892537.373700779]: ROS Node Namespace: camera
[ INFO] [1723892537.373737260]: Device Name: Intel RealSense D435I
[ INFO] [1723892537.373757100]: Device Serial No: 014122072296
[ INFO] [1723892537.373777005]: Device physical port: 2-1.4-6
[ INFO] [1723892537.373792685]: Device FW version: 05.13.00.50
后来又参考如何修改CMakeLists
最后发现其实存在两个librealsense2_camera.so
1
2/home/jetson/catkin_ws/devel/lib/librealsense2_camera.so
/opt/ros/noetic/lib/librealsense2_camera.so
只需要运行ROS自带的就可以了: roslaunch /opt/ros/noetic/share/realsense2_camera/launch/rs_camera.launch