前言
等了一个月的realsense d435i终于发货了!
这款D435i(见下图)在D435的基础上,另外搭载了博世的惯性测量单元(IMU),可以作为研究VIO及其他SLAM算法的良好传感器组。本文将介绍自己一步步搭建d435i环境,并成功跑通ORB-SLAM2、RTAB和VINS-Mono的过程,供大家参考。
安装环境
系统:ubuntu 16.04 内核 4.15.0-43-generic
ROS: Kinetic
传感器:intel realsense d435i
环境上已经成功搭建并使用dateset跑过ORB-SLAM2、VINS-Mono与RTAB。
安装Realsense SDK
github:https://github.com/IntelRealSense/librealsense 安装可以参考文档:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md
1、下载source
git clone https://github.com/IntelRealSense/librealsense
cd librealsense
2、安装依赖项
sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev
3、Install Intel Realsense permission scripts located in librealsense source directory:
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
4、这边需要注意把realsense拔下来
Build and apply patched kernel modules for:
根据不同的ubuntu版本安装:对于Ubuntu 14/16/18 LTS
./scripts/patch-realsense-ubuntu-lts.sh
sudo dmesg | tail -n 50
这里可以看一下UVC是否安装成功了
5、基于cmake的编译
mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make
sudo make install
-DBUILD_EXAMPLES=true 这个选项表示带演示和教程的
6、进入/librealsense/build/examples/capture,试一下效果
./rs-capture
大功告成!
安装ROS Wrapper
https://github.com/intel-ros/realsense
直接按照github上的教程即可:
1、建立workspace,已经有的可以跳过
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
catkin_init_workspace
cd ..
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
2、在catkin_ws/src/下载源程序
cd src
git clone https://github.com/intel-ros/realsense.git
3、catkin_make
cd ..
catkin_make
4、如果没有错误说明,已经装好了,启动相机节点
roslaunch realsense2_camera rs_rgbd.launch
5、看一下发布的topic
rostopic list
6、打开RVIZ看看效果
内参获取
若不进行标定,可以先从Realsense ROS Wrapper发布的topic中获得相机的内参。
rostopic echo /camera/color/camera_info
rostopic echo /camera/aligned_depth_to_color/camera_info
解释一下topic中所有aligned_depth_to_color是指已经将深度信息通过相机到RGBD的外参映射到彩色图像上嗯了
ORB-SLAM
1、在ORB-SLAM2/Examples/ROS/ORB-SLAM2/src中修改ros_rgbd.cc的topic订阅:
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 1);
2、重新编译ORB-SLAM2
chmod +x build_ros.sh
./build_ros.sh
3、连接realsense d435i,启动ROS realsense2_camera:
roslaunch realsense2_camera rs_rgbd.launch
4、先用TUM1.yaml的参数运行一下试试看:
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
程序正常运行!
5、修改yaml文件中的部分参数再试试看!
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/realsense_d435i.yaml
RTAB
RTAB建议源码安装。
可以参考:https://www.ncnynl.com/archives/201709/1991.html
1、源码安装rtabmap
$ git clone https://github.com/introlab/rtabmap.git rtabmap
$ cd rtabmap/build
$ cmake -DCMAKE_INSTALL_PREFIX=~/catkin_ws/devel ..
$ make -j4
$ make install
2、源码安装rtabmap_ros
$ cd ~/catkin_ws
$ git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros
$ catkin_make -j1
3、修改catkin_ws/src/rtabmap_ros/launch中的rtabmap.launch
<!-- RGB-D related topics -->
<arg name="rgb_topic" default="/camera/color/image_raw" />
<arg name="depth_topic" default="/camera/aligned_depth_to_color/image_raw" />
<arg name="camera_info_topic" default="/camera/color/camera_info" />
<arg name="depth_camera_info_topic" default="$(arg camera_info_topic)" /> <!-- RGB-D related topics -->
<arg name="rgb_topic" default="/camera/color/image_raw" />
<arg name="depth_topic" default="/camera/aligned_depth_to_color/image_raw" />
<arg name="camera_info_topic" default="/camera/color/camera_info" />
<arg name="depth_camera_info_topic" default="$(arg camera_info_topic)" />
4、运行
roslaunch realsense2_camera rs_rgbd.launch
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start"
实验效果如上图,在局部进行建图效果还可以,但是比如绕房间走一圈,闭环容易出问题,还需要进一步调试。
VINS-Mono
这个的坑比较大,主要问题在于realsense d435i在ROS中发布的imu topic是分开来的,同时这两个的时间戳也不太一样:
/camera/gyro/sample 发布角速度
/camera/accel/sample 发布线加速度
目前网上对realsense d435i的IMU问题的相关资料很少,到目前我还没有调试稳定。
先发一张我暂时成功的图,有关于我如何实现的我将单独写一个博客。
后来发现其实realsense官方是做好了同步的!
直接修改launch文件(如rs_camera.launch)中的:
<arg name="enable_sync" default="true"/>
<arg name="unite_imu_method" default="copy"/>
重新启动roslaunch 就可以得到topic:“/camera/imu”