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.
本文介绍一个简单有效的解决方法。网上有很多人提供的其他方法,这里试了都不管用。
本文提供的方法是从网络上规避境外网站,可靠实用。
1 原因分析
错误原因是下载20-default.list文件时无法访问http://raw.githubusercontent.com网站。
rosedep update时也要联网,默认的网站还是raw.githubusercontent.com,所以也会报错。
raw.githubusercontent.com实际上就是github的用户数据服务器,rosdep程序下载的就是github.com/ros/rosdistro这个repo里的yaml文件。
虽然raw.githubusercontent.com服务器无法访问,但是yaml文件可以直接从git clone的repo中获得。
所以,只要将ros/rosdistro整个git下来,然后再将相应文件中的默认url http://raw.githubusercontent.com全部指向本地的git,即可解决这个问题。
本文使用的时ubuntu16.04和 ros kinetic。 其他版本的ROS步骤是一样的。
2 解决步骤
2.1 从github下载rosdistro
> git clone https://github.com/ros/rosdistro.git
假设存放的目录为/home/robin/rosdistro
2.2 修改系列文件中默认的URL
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
/usr/lib/python2.7/dist-packages/rosdistro/__init__.py
/home/robin/rosdistro/rosdep/sources.list.d/20-default.list
1)$ sudo vi /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
做下面的需改:
#DEFAULT_SOURCES_LIST_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'
DEFAULT_SOURCES_LIST_URL = 'file:///home/robin/rosdistro/rosdep/sources.list.d/20-default.list'
2)sudo vi /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
做下面的需改:
#FUERTE_GBPDISTRO_URL = 'https://raw.githubusercontent.com/ros/rosdistro/' \
'master/releases/fuerte.yaml'
FUERTE_GBPDISTRO_URL = 'file:///home/robin/rosdistro/releases/fuerte.yaml'
3)sudo vi /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
做下面的需改:
#DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
DEFAULT_INDEX_URL = 'file:///home/robin/rosdistro/index-v4.yaml'
4)将/home/robin/rosdistro/rosdep/sources.list.d/20-default.list的内容替换如下:
# os-specific listings first
yaml file:///home/robin/rosdistro/rosdep/osx-homebrew.yaml osx
# generic
yaml file:///home/robin/rosdistro/rosdep/base.yaml
yaml file:///home/robin/rosdistro/rosdep/python.yaml
yaml file:///home/robin/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/robin/rosdistro/releases/fuerte.yaml fuerte
2.3 重新执行
sudo rosdep init && rosdep update
即可成功。
Reference
https://zhuanlan.zhihu.com/p/107218921