1 . 机器环境:
硬件设备:jetson nano b01-2GB
操作系统:ROS-melodic+Ubuntu 18.04
2 . 安装Pangolin库
(1). 安装依赖
sudo apt-get install libpython2.7-dev
(2). 下载0.5版本的Pangolin
链接:https://share.weiyun.com/xZgO8kzA 密码:ym94pw
下载后,解压
(3) . 源码编译
进入Pangolin文件夹,使用如下命令进行编译:
mkdir build
cd build
cmake ..
make
sudo make install
执行cmake .. 可能会出现的问题:
"Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)"或者"CMake Error at CMakeModules/FindGLEW.cmake:51 (MESSAGE): Could not find GLEW"
解决方法:
sudo apt-get install doxygen
sudo apt-get install libglew-dev glew-utils
sudo apt install libglfw3-dev
3 . 安装opencv和eigen3及相关依赖
sudo apt-get install libqglviewer-headers libcxsparse3 libcholmod3 libopencv-dev libeigen3-dev libqt4-dev qt4-qmake libsuitesparse-dev
4 . 安装ORB_SLAM2
(1) . 在工作空间下使用如下命令下载源码(如果下载失败,可以尝试把https改成git)
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
(2). 进入ORB_SLAM2文件夹,找到build.sh文件,双击打开,然后逐步运行里边的命令(我建议是逐步运行,因为2GB的可能处理不过来,很多次都是会卡死),如果觉得自己硬件设备ok的话,也是可以直接运行脚本文件的,运行前先用chmod +x build.sh,逐步手动运行命令如下:
cd Thirdparty/DBow2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
cd Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
cd Vocabulary/
tar -xf ORBvoc.txt.tar.gz
cd .. #这里是回到ORB_SLAM2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
这里的make我是没有带参数,脚本里边是带了参数的j的,也是因为2GB的原因
可能会出现的问题:
在执行make命令,出现“ORB_SLAM2/src/System.cc: error: ‘usleep’ was not declared in this scope usleep(5000)”
解决方法:切换到/ORB_SLAM2/include目录下,修改System.h文件,加入头文件#include
(3). 对其中的ROS功能包进行编译
在ORB_SLAM2目录下打开终端,设置路径,指令如下,其中ORB_SLAM_PATH是ORB_SLAM2功能包的所在路径
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
#这里的~/catkin_ws换成自己的功能包路径
重新开启一个终端,修改环境变量./.bashrc文件,在其后面增加一句
source /自己的功能包路径/src/ORB_SLAM2//Examples/ROS/ORB_SLAM2/build/devel/setup.bash --extend
保存退出,然后重新source ./.bashrc刷新下环境变量
接下来就是编译ROS功能包了,这里我们切换到ORB_SLAM2下,有个build_ros.sh文件,还是看各人的硬件水平吧,我建议是逐步运行,需要一键运行脚本的,需要和之前的一样,需要赋予它权限,输入命令,
chmod +x build_ros.h
如果是按照脚本文件逐步运行呢,则是,
cd Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
这里的make我也是没有带参数的,顺带提一下,带了参数j会加快编译,但是也很有可能会出现卡死的现象
可能会出现为问题:
在执行make命令时,出现“CMakeFiles/Stereo.dir/build.make:227:recipe for target '../Stereo' failed”等类似的错误
解决方法:修改该路径下的CMakeLists.txt文件,在set(LIBS)里边加上-lboost_system,部分代码所示:
5 . 使用usb摄像头实现单目ORB_SLAM
首先需要明确一点的就是,ORB_SLAM2订阅的图像话题是/camera/image_raw,而usb_cam节点发布的图像话题为/usb_cam/image_raw,话题名称不一致需要进行修改一下,有两修改方法:
(1). 直接修改/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/下的ros_mono.cc文件,把里面订阅图像的话题名字改成/usb_cam/image_raw,代码所示如下
修改完后,再重新编译一次,在Examples/ROS/ORB_SLAM2/build目录下直接执行make命令就可以了
(2). 不修改源码,写一个launch文件,通过话题映射,把/usb_cam/image_raw映射成/camera/image_raw,映射话题代码如下
(3). 开启usb摄像头运行节点或者通过launch驱动摄像头后,输入以下命令,开启ORB_SLAM2节点,
rosrun ORB_SLAM2 Mono /home/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml
#同样的,这里的工作空间的路径需要按照自己实际情况进行修改,但是后边的Vocabulary/ORBvoc.txt和Asus.yaml保持不变
(4). 效果展示,成功开启后会出现
结语:第一次写技术博客,有哪里不对的地方,还请各位多多指教,slaute!有问题可以留言,我会回复下去的,踩过的坑有很多0..0,希望可以帮助到你们。