ROS-Kinect安装时出现的rosdep init后不能rosdep update的问题。
这段时间在搭建一台新电脑的ros环境时出现rosdep init 和rosdep update的问题,在这里把解决方法记录下来,一边参考。
1、rosdep init的问题
(1)Website may be dowm 错误
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.
使用下方这条命令,下载安装python-rosinstall。
sudo apt-get install python-rosinstall
安装完成后可以继续尝试
sudo rosdep init
如果还有这个错误,就还需要到hosts文件添加网址IP地址来解决。
我们先使用命令ping出网址IP
ping raw.githubusercontent.com
获得以下显示
可以看到ping出的IP为151.101.84.133(文章中的这个IP有可能不能用,所以最好还是自己ping出来再换),打开hosts文件。
sudo gedit /etc/hosts
将IP和网址添加进去,保存。
保存好后就可以运行rosdep init这个命令了。
sudo rosdep init
得到终端中的显示
运行到这里就算是成功运行了init这条命令了。
(2)Please delete if you wish to re-initialize错误
为什么会出现这条错误,我的理解时rosdep init就是建立了一个下载链接文件,而之前这个文件已有的话就会出现这个错误。所以代表着可以不使用init命令进行创建,你也可以自己进入这个文件类进行修改。但是要是不知道文件里面的内容,还是建议使用命令操作。
解决办法,就按照字面意思进行操作就行。
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
然后在使用命令
sudo rosdep init
会得到上面这个成功的结果。
2、rosdep update的问题
上面rosdep init 就是为update更新一个下载源链接,在网络没有问题的情况下这条命令是必会出错的。主要是最近github进不去以后,这条命令就会下面这个问题,刚才更换IP后是有机会成功的,但是概率低。
txz@txz-laptop:~$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
<urlopen error ('_ssl.c:574: The handshake operation timed out',)> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
<urlopen error timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml]:
<urlopen error timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml]:
Failed to download target platform data for gbpdistro:
<urlopen error timed out>
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
ERROR: error loading sources list:
<urlopen error <urlopen error timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml)>
解决办法:从hub上面下载下来,将update更新从网上改到本地。
a、首先进入镜像网址下载
在这儿提供一个hub的镜像网址,供给大家参考,也可用自己的。(hub.fastgit.org)这个镜像网址可以直接进,也可以在使用git下载的时候使用前面那个网址代替github.com。
这里只介绍使用git命令下载。
git clone https://hub.fastgit.org/ros/rosdistro.git
下载结束后找到刚刚下载好的文件,记住他的路径。
b、修改20-default.list文件
这个文件不是刚才使用rosdep init生成的那个文件,我们修改的这个文件是我们从hub上下载下来的文件,以此作为更新的源链接。使用命令。(注意文件路径,是自己的下载的文件,同时再修改别的文件时,尽量还是将原来的注释,而不是删除)
sudo gedit /home/xxx/rosdistro/rosdep/sources.list.d/20-default.list
将文件内的内容替换为
# os-specific listings first
yaml file:///home/xxx/rosdistro/rosdep/osx-homebrew.yaml osx
# generic
yaml file:///home/xxx/rosdistro/rosdep/base.yaml
yaml file:///home/xxx/rosdistro/rosdep/python.yaml
yaml file:///home/xxx/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/xxx/rosdistro/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
上面文件的内容所对应的文件,全部换成本地的文件。
c、修改sources_list.py文件
使用命令,打开文件。
sudo gedit /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/xxx/rosdistro/rosdep/sources.list.d/20-default.list'
修改这个文件后,使用刚才rosdep init命令更新的源,会变成本地的内容,即刚才修改的那个文件。也可以全部修改后再输入。
sudo rosdep init
也就是说rosdep init这个命令是可以使用上面的操作进行替换的。
d、修改__init__.py文件
使用命令打开
sudo gedit /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/xxx/rosdistro/index-v4.yaml'
e、修改rep3.py 文件
使用命令打开
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
将
REP3_TARGETS_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'
替换成
REP3_TARGETS_URL = 'file:///home/xxx/rosdistro/releases/targets.yaml'
将以上的所有文件都提换成功后,先使用rosdep init初始化或者直接进入/etc/ros/rosdep/sources.list.d/20-default.list进行修改,修改内容同下载下来的文件内的20-default.list一样,最后运行rosdep update得到以下输出,则表示成功。