一、报错
1.1 sudo rosdep init报错
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.
示例如下:
meng@meng:~$ 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.2 rosdep update报错
同时当sudo rosdep init成功后,同样会因为网络问题而在执行rosdep update时卡住
二、报错解决与理论分析
2.1 下载rosdep文件到本地(不能访问github可以留下邮箱)
rosdep是ros的“依赖项”,ros运行一般需要这些文件;rosdep官方github地址为:https://github.com/ros/rosdistro
进入网站,可以看出,只有少部分文件在近期更新,一般不是很影响(如果怕影响可以定期更新下载的文件并进行替换),直接下载即可(举个例子,我在大四下自己用自己下载的rosdep到自己的笔记本上用,现在研一下了还可以用)
下载命令为:(如果新电脑无法下载,可以用别的电脑下载并拷贝过来)
git clone https://github.com/ros/rosdistro
2.2 创建并修改20-default.list文件
没有20-default.list文件时,创建命令如下:(有的话直接打开修改即可)
mkdir -p /etc/ros/rosdep/sources.list.d/20-default.list
并打开/etc/ros/rosdep/sources.list.d/20-default.list进行修改:
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
填入并修改以下文件地址:(注:file://是本地文件链接方式,不同于https等)
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
文件地址可以从2.1下载的文件中获得:
2.3 修改/usr/lib/python2.7/dist-packages/rosdep2/目录下文件
2.3.1 sources_list.py
打开文件:
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
在第75行左右,修改DEFAULT_SOURCES_LIST_URL = ‘file:///etc/ros/rosdep/sources.list.d/20-default.list’,其中file:///etc/ros/rosdep/sources.list.d/20-default.list为在2.2中创建文件的地址,示例如下:
# default file to download with 'init' command in order to bootstrap
# rosdep
#DEFAULT_SOURCES_LIST_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'
DEFAULT_SOURCES_LIST_URL = 'file:///etc/ros/rosdep/sources.list.d/20-default.list'
2.3.2 rep3.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
修改 REP3_TARGETS_URL为本地targets.yaml文件地址,targets.yaml在2.1步骤下载的文件夹里面:
修改第39行左右,示例如下:
# location of targets file for processing gbpdistro files
#REP3_TARGETS_URL = 'https://raw.github.com/ros/rosdistro/master/releases/targets.yaml'
REP3_TARGETS_URL = 'file:///home/bit/Desktop/softwares/ros_install/rosdistro/releases/targets.yaml' #hxz
2.3.3 __init__.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
注:这个文件如果找不到,试着找init.py这个文件,但一般都是__init__.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/init.py
修改DEFAULT_INDEX_URL 为2.1步骤下载的文件路径 'file:///media/meng/xx/ros_install/rosdistro/index-v4.yaml'
修改示例如下:
# index information
#DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
DEFAULT_INDEX_URL = 'file:///home/bit/Desktop/softwares/ros_install/rosdistro/index-v4.yaml' #hxz
2.4 rosdep update
sudo rosdep init #maybe be error,but don't worry
rosdep update
3 进一步理论分析
3.1 sudo rosdep init无法访问的链接:
打开报错的链接:(从链接可以看出,该链接指向一个文件)
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
网页为文本呈现,内容为:
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
3.1.1 进一步打开osx-homebrew.yaml
其中apr、assimp、assimp-dev、boost等可以理解为包;
osx中os为系统,加上一个x网上一些人说是苹果系统,这里就理解它为系统;
homwbrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能,这里姑且就理解为包管理工具吧
至于有的packages对应[],有的对应有内容,我暂时还没理解
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml 内容如下(很长,这里只展示部分)
3.1.2 打开base.yaml链接
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
这应该是ros的各种组件(对应文件名称base)可以支持的系统(我在这里搜索cmake、turtle没有搜到任何内容)
3.1.3 python.yaml
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
这应该是ros所依赖(dependency)的各种包
3.1.4 ruby.yaml
和上面三个类似,应该也是在各个系统各个版本上面ros的依赖问题;我查了下ruby,据说它是一门脚本语言
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
3.1.5 fuerte.yaml
这个文件应该是最容易读懂的啦,它说了最新包的版本及下载地址
https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml