本人电脑系统为Ubuntu 20.04,ROS安装的版本为noetic,在用./build_ros.sh命令编译ORB_SLAM3时出现下面的错误:
![](https://i-blog.csdnimg.cn/blog_migrate/35695b7e83c1bcec8c1bcec7b5993d32.jpeg)
Failed to invoke rospack to get compile flags for package 'ORB_SLAM3'. Look above for errors from rospack itself. Aborting. Please fix the broken dependency!
仔细往上面找其实还有一个这个报错:
ERROR: Rosdep experienced an error: The read operation timed out Please go to.........
此时已经在.bashrc中添加了下面这段语句,且也source ~/.bashrc了,但还是出现上面的错误。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:YOUR_PATH/ORB_SLAM3/Examples/ROS
仔细看问题后面有提示:sudo rosdep init和rosdep update来解决,但是我sudo rosdep init后还是报下面的错误:
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.
当时我按照网上的很多方式去做,最后都失败了,这个问题卡了我两天,不经意间看到学ROS1时候的书,是赵虚左老师的教程,最后解决了上面的问题。
解决方式如下:
1、进入"/usr/lib/python3/dist-packages/"目录下修改相关文件,主要有: ./rosdistro/__init__.py、./rosdep2/gbpdistro_support.py、./rosdep2/sources_list.py 、./rosdep2/rep3.py。
sudo gedit ./rosdistro/__init__.py
sudo gedit ./rosdep2/gbpdistro_support.py
sudo gedit ./rosdep2/sources_list.py
sudo gedit ./rosdep2/rep3.py
2、文件中涉及的 URL 内容,如果是:raw.githubusercontent.com/ros/rosdistro/master都替换成步骤1中准备的gitee.com/zhao-xuzuo/rosdistro/raw/master即可,步骤1中的四个文件修改完后的内容如下:
DEFAULT_INDEX_URL = 'https://gitee.com/zhao-xuzuo/rosdistro/raw/master/index-v4.yaml'
FUERTE_GBPDISTRO_URL = 'https://gitee.com/zhao-xuzuo/rosdistro/raw/master/releases/fuerte.yaml'
DEFAULT_SOURCES_LIST_URL = 'https://gitee.com/zhao-xuzuo/rosdistro/raw/master/rosdep/sources.list.d/20-default.list'
REP3_TARGETS_URL = 'https://gitee.com/zhao-xuzuo/rosdistro/raw/master/releases/targets.yaml'
3、修改完毕,再重新执行命令:
sudo rosdep init
rosdep update
最后删除YOUR_PATH/ORB_SLAM3/Examples/ROS/ORB_SLAM3下的build文件夹,从新执行./build_ros.sh命令,编译成功。
最后说一下ORB_SLAM3为什么要在ROS环境运行,我认为是方便将其部署到机器人上,这样大大简化了后期实体机器人的开发周期,同时有些数据集也是rosbag的格式,在ROS环境下运行比较方便。但是目前的一些头部自动驾驶公司等,都会开发自己的框架,针对自己公司的产品做相应的优化,ROS环境还是相对冗余。学ROS1我非常推荐赵虚左老师的视频,讲的太棒了。