前几天给电脑重装了系统升级到了ubuntu20.04,之前一直用的2021年4月发布的ORB_SLAM3 v0.4测试版,这次也更新到了1.0正式版。但是1.0版本ROS接口编译的坑实在太多了
首先是ubuntu20.04搭配ROS-Noetic,在cmake过程中报错,显示
Failed to invoke rospack to get compile flags for package...
一般的解决方案是在.bashrc中加入
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
但是我明明已经加了,而且已经source了很多遍,仔细看cmake报错前面还有一行关于rosdep找不到的错误,这时我再次运行rosdep,提示rosdep找不到命令,并建议我安装python3-rosdep2,可是不久前我安装ROS-Noetic的时候已经完成这步操作了啊?但是回想起,安装python3-rosdep2后导致我原本的ros-noetic-desktop-full的部分包被删除,roscore无法运行,最后我又重新apt install ros-noetic-desktop-full,我重复上述操作后发现,ros-noetic-desktop-full与python3-rosdep2是冲突的,两者不能共存。
正确的rosdep init的方法是首先安装python3-rosdep!!! 千万不要安装python3-rosdep2!!!
这次我还发现,当提示
ERROR: cannot download default sources list from:
https : //raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
这种情况时,如果已经在hosts文件里加入了该网站的真实ip,还无法rosdep init成功。可以尝试手动在浏览器里打开这个网址
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
如果可以打开,那么复制里面的内容
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
粘贴进去,实际上就已经手动完成了rosdep init这一命令,就可以不再进行rosdep init了。
现在rosdep可以用了,本以为应该没有问题,但是还没结束。
首先ORB_SLAM3 readme里给出的编译ROS接口的方法里,在.bashrc中添加
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
然而其ROS目录却在Examples_old文件加下,应给把Examples换成Examples_old,同样build_ros.sh文件中也应做出对应修改。
重新进行cmake,提示:
Cmake: OpenCV > 2.4.3 not found.
我的电脑中安装的是OpenCV4.5,这里在CMakeLists.txt里修改第33行为
find_package(OpenCV 4.0 QUIET)
接下来终于可以进行编译了,报错:
fatal error: sophus/se3.hpp: 没有那个文件或目录
这里究极离谱,我们继续修改CMakeLists.txt,加入Sophus路径
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${PROJECT_SOURCE_DIR}/../../../include/CameraModels
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
${Pangolin_INCLUDE_DIRS}
)
继续编译,结果在ViewerAR.cc处报了一堆关于Eigen的错误,考虑可能是一堆版本问题,修改起来非常麻烦,而我们又不需要这一部分,一怒之下直接将CMakeLists.txt中关于AR target的这部分编译命令全部注释了,再次进行编译,终于成功了。
ORB_SLAM3 1.0版本在github上关于ROS接口的问题也非常多,还是等待官方进一步完善吧。