又一遍……ORB_SLAM2+ZED相机(SDK2.2.1)+CUDA9.0+ROS Kinetic 安装测试 some tips

很久没碰过ORB_SLAM2了,今天有需要,再来试一遍~
ORB_SLAM2的github链接

1. 安装ORB_SLAM2的依赖库

按照链接一步一步来就可以
eigen直接用命令安装就可以

sudo apt-get install libeigen3-dev

2.关于ZED相机

2.1 ZED的sdk

ZED的sdk从2.*.*开始似乎消除了对OpenCV的依赖,反正要装ROS,所以OpenCV先不用管它。
安装ZED的SDK需要CUDA
我装的是2.2.1对应的是CUDA9.0,更新的对应的是9.1,更老的对应的是8.0。

我习惯用deb文件安装CUDA

ZED的SDK就是个.run文件,直接运行即可。

2.2 ZED ROS wrapper

zed-ros-wrapper github链接

cd ~/catkin_ws/src

在github页的branch的tag里面选择跟SDK对应的版本,然后下载源代码到这个目录下面

cd ../
catkin_make
source ./devel/setup.bash
注意:最后这条语句似乎只对当前命令行生效?反正ROS的路径经常怪怪的。

所以每次用zed运行orb之前我都重新source一下。

2.3 使用zed tools测试zed

安装完sdk之后

cd /usr/local/zed/tools
./ZED\ Explorer//
//或者其他的,测试一下zed是否运行正常
//注意:使用蓝色的USB3.0口,以及可以先用calibration工具标定一下(真的不是很好标啊……)

3. 关于ROS和build_ros.sh

3.1 Ubuntu16.04对应安装ROS Kinetic 对应的OpenCV版本是3.*.*

3.2 ./build_ros.sh出现的关于boost的问题

问题:undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’

参考链接
验证可解决问题,给原博赞。

ros的路径

echo $ROS_PACKAGE_PATH
显示的路径:/opt/ros/kinetic/share

在bashrc中export了orbslam2中的ros路径之后
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

显示路径变成
/opt/ros/kinetic/share:PATH/ORB_SLAM2/Examples/ROS
注意:路径经常变化,ROS_PACKAGE_PATH跟有毒似的。

4. 使用ZED相机的ROS接口,将数据流对接到ORB_SLAM2上去

4.1 看一下zed都有啥数据流

cd ~/catkin_ws
source ./devel/setup.bash
roslaunch zed_wrapper zed.launch

如果

roslaunch zed_wrapper display.launch

会出现rviz的界面
看到命令行里面有这样几行
又一遍……ORB_SLAM2+ZED相机(SDK2.2.1)+CUDA9.0+ROS Kinetic 安装测试 some tips_第1张图片
我想使用的是校正后的图像,校正过的图像各条边线都很平,看起来很舒爽,校正的图像和没校正的图像可以用以下命令查看

roslaunch zed_wrapper zed.launch

//打开另外一个命令行
rqt_image_view

/zed/left/image_raw_color 左目未校正图像,原图
又一遍……ORB_SLAM2+ZED相机(SDK2.2.1)+CUDA9.0+ROS Kinetic 安装测试 some tips_第2张图片
/zed/left/image_rect_color 左目已校正图像,可以看得到明显的区别。
起码肉眼可见的枕形畸变消除了。
又一遍……ORB_SLAM2+ZED相机(SDK2.2.1)+CUDA9.0+ROS Kinetic 安装测试 some tips_第3张图片

好的,确定使用这两个数据流

/zed/left/image_rect_color
/zed/right/image_rect_color

4.2 使用ORB_SLAM2+ZED

比较简单的方法

//先用echo $ROS_PACKAGE_PATH检查一下ROS的路径对不对
cd ~/catkin_ws
source ./devedl/setup.bash   //放到bashrc里面有时候会有问题,为求保险啦

roscore
//再开一个命令行 
roslaunch zed_wrapper zed.launch
//再开一个命令行
//先进入ORB_SLAM2的根目录下
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false /camera/left/image_raw:=/zed/left/image_rect_color /camera/right/image_raw:=/zed/right/image_rect_color

//false的含义是do not rectify,因为使用了校正后的图像,所以不再校正,所以YAML文件也无所谓啦
//如果需要校正的话,需要自己写一个yaml文件,写入自己的传感器的标定参数,比如说使用普通的网络摄像头(Mono),然后选true

结果图
又一遍……ORB_SLAM2+ZED相机(SDK2.2.1)+CUDA9.0+ROS Kinetic 安装测试 some tips_第4张图片

或者是仿照
/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src目录下的ros_stereo.cc建立一个新的文件,比如说叫ros_zed_stereo_rect.cc
把代码复制过去,只需要更改

message_filters::Subscriber::Image> left_sub(nh, "/zed/left/image_rect_color", 1);
message_filters::Subscriber::Image> right_sub(nh, "/zed/right/image_rect_color",1);

然后修改CmakeLists.txt
加入:

# Node for ZED camera
rosbuild_add_executable(zed_Stereo_rect
src/ros_zed_stereo_rect.cc
)

target_link_libraries(zed_Stereo_rect
${LIBS}
)

然后重新编译,在ORB_SLAM2的根目录下

./build_ros.sh

会新生成一个可执行文件叫zed_Stereo_rect
然后,一样的步骤

//先用echo $ROS_PACKAGE_PATH检查一下ROS的路径对不对
cd ~/catkin_ws
source ./devel/setup.bash   //放到bashrc里面有时候会有问题,为求保险啦

roscore
//再开一个命令行 
roslaunch zed_wrapper zed.launch
//再开一个命令行
//先进入ORB_SLAM2的根目录下
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false 

你可能感兴趣的:(ORB_SLAM)