一. D435i的配置
1. install
- 安装realsense sdk 和ros wrapper,安装完成后,输入:
realsense-viewer

2.ROS接口的使用
- 启动RealSense的ROS节点
realsense的ROS接口可以理解为一个读取数据并发布topic的节点,自己写ROS程序的时候订阅这个节点发出的topic即可
roslaunch realsense2_camera rs_camera.launch
 使用rostopic list查看这些节点  也可以使用rqt_image_view订阅这些节点  另外需要注意的是,前面提到D435i是支持双目的红外影像输出的,但是它默认是关闭这一选项的,也就是说它不会有双目红外影像的Topic。我们需要在对应的Launch文件中修改相关参数,就可以获得红外影像了。具体如下。 找到rs_camera.launch,将这三个参数全部设为true 
这样,重新运行的时候就会出现这个话题了:

3. imu信息融合
前面的Topic List里也看到了,D435i可以输出陀螺仪和加速度计的信息,我们可以分开读取,也可以将/camera/gyro/sample和/camera/accel/sample两个Topic合并到一起,叫做/camera/imu,这样一个Topic里既有陀螺仪的数据也有加速度计的数据。具体方法也很简单,还是修改Launch文件里的配置选项。在rs_camera.launch文件中找到unite_imu_method这个参数,把它的值可以设置为copy或者linear_interpolation,这样再次启动rs_camera节点启动D435i就可以在Topic列表里看到/camera/imu这个Topic了。
4. 深度图对齐问题
D435i可以输出原始的深度图(/camera/depth/image_rect_raw)以及和单目RGB影像对齐的深度图(/camera/aligned_depth_to_color/image_raw),这两个深度图是不一样的。在采集数据的时候尤其需要注意。比如在采集RGBD数据的时候需要的是对齐的深度,如果不小心采成了原始深度,那基本就是不能用的了。如何输出对齐的深度图,也非常简单,修改Launch文件里的配置选项。在rs_camera.launch文件中找到align_depth这个参数,把它的值可以设置为true即可。(设置这个选项之前,记得打开enable_depth,要不然是没有数据的)
5. D435i 相机默认参数查看
D435i相机在出厂时有一个默认的内参。查看方式有非常简单,在运行D435i以后,我们可以在Topic列表中看到很多叫camera_info的Topic,这些Topic就是对应的相机内参等参数。如下,查看的是RGB相机的参数。
rostopic echo /camera/color/camera_info

6. 数据采集录制
这里简单给出一些D435i数据采集的建议。首先,如果要采RGBD数据,那么一定要记得录对齐后的深度,而非原始输出深度。第二,如果采集场景是较暗或者较小的场景,那么可能会有很多红外斑点出现在双目红外影像中。如果想用双目影像做视觉SLAM,那么一定记得关闭红外发射器。
下面以一个利用D435i进行单目RGB、红外双目、IMU数据采集的过程为例,介绍一般流程与步骤。
首先明确要采集的数据类型、影像的大小、帧率、深度是否对齐等信息,这些都在rs_camera.launch文件的对应参数里设置。
然后,在终端中输入roslaunch realsense2_camera rs_camera.launch启动D435i。启动以后如果需要关闭红外发射器,按照上面提到的第三点进行操作即可。
然后,利用rqt_image_view进行可视化。可以打开多个rqt_image_view节点,分别查看RGB影像、左右红外影像等。
最后,打开终端,输入rosbag record /camera/color/image_raw /camera/infra1/image_rect_raw /camera/infra2/image_rect_raw /camera/imu,这样就开始录制了。录制完成后,按Ctrl+C保存退出即可。
二. ORB-SLAM3 编译运行(ROS)
- 将源码中的
/Examples/ROS/ORB-SLAM3路径添加到ROS_PACKAGE_PATH环境变量中,打开 ~/.bashrc
sudo gedit ~/.bashrc
在最后写入:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/your_name/Project/ORB_SLAM3/Examples/ROS
路径要从/home开始
- 在ORB-SLAM根目录下:
./build_ros.sh
碰到了以下错误:
[rosbuild] Error from directory check: /opt/ros/kinetic/share/ros/core/rosbuild/bin/check_same_directories.py /home/juno/Projects/ORB_SLAM3-0.4-beta/Examples/ROS/ORB_SLAM3
1
Traceback (most recent call last):
File "/opt/ros/kinetic/share/ros/core/rosbuild/bin/check_same_directories.py", line 46, in <module>
raise Exception
Exception
CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message):
[rosbuild] rospack found package "ORB_SLAM3" at "", but the current
directory is
"/home/juno/Projects/ORB_SLAM3-0.4-beta/Examples/ROS/ORB_SLAM3". You
should double-check your ROS_PACKAGE_PATH to ensure that packages are found
in the correct precedence order.
Call Stack (most recent call first):
/opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)
CMakeLists.txt:4 (rosbuild_init)
-- Configuring incomplete, errors occurred!
See also "/home/juno/Projects/ORB_SLAM3-0.4-beta/Examples/ROS/ORB_SLAM3/build/CMakeFiles/CMakeOutput.log".
make: *** No targets specified and no makefile found. Stop.
执行以下语句解决:
sudo ln -s /home/name/Projects/ORB_SLAM3/Examples/ROS/ORB_SLAM3 /opt/ros/kinetic/share/ORB_SLAM3
又出现以下eigen错误
CMake Error at CMakeLists.txt:41 (find_package):
Could not find a configuration file for package "Eigen3" that is compatible
with requested version "3.1.0".
The following configuration files were considered but not accepted:
/usr/lib/cmake/eigen3/Eigen3Config.cmake, version: unknown
-- Configuring incomplete, errors occurred!
See also "/home/juno/Projects/ORB_SLAM3-0.4-beta/Examples/ROS/ORB_SLAM3/build/CMakeFiles/CMakeOutput.log".
See also "/home/juno/Projects/ORB_SLAM3-0.4-beta/Examples/ROS/ORB_SLAM3/build/CMakeFiles/CMakeError.log".
make: *** No targets specified and no makefile found. Stop.
利用pkg-config查看eigen版本:
pkg-config --modversion eigen3
我的为3.2.92版本
参考: Intel RealSense D435i:简介、安装与使用(ROS、Python)
待续。。。
|