rosdep init ROS安装问题解决方案(最新)
Ubuntu16.04 安装 ROS时,有时在运行sudo rosdep init
后出现下所示错误:
首先试着通过浏览器访问error中提及的网址:浏览器启动——!!!
可惜发现网址都无法打开,于是在终端尝试以下代码,ping一下这个网址
ping raw.githubusercontent.com
却发现其实通过终端ping的方式,我们是可以访问上述网页地址的。
那么究竟error中返回的地址到底有什么内容呢?首先,看到网址中包含20-default.list,可以猜测访问该网址就是为了下载这个文件。接着,从一台安装好ROS的电脑上(这里小编已经提前下载),我们访问了这个error中提及的网址,从下图可以看出这个网址页面的一些信息。
在安装好ROS的电脑上翻看了相关文件,发现在/etc/ros/rosdep/sources.list.d文件目录下有一个名称为20-default.list文件,打开显示如下,通过对比发现,该文档的内容与error返回网址的内容一致,于是笔者猜测sudo rosdep init
为链接上述网址,下载相关文件(20-default.list)到上述目录中,并且通过rosdep update
访问该文件中的相关地址,下载相关文件。
这是访问外网总会出现的翻墙现象之一,学过JavaWeb的小伙伴一定深同感受:配置Maven的本地仓库虽然麻烦,但比远程访问的效果要好很多。所以解决思路就是将用到的文件下载到本地,然后修改原文件中的链接,指向本地仓库,即可完美解决。
首先,这里先推荐一般的方法:https://www.guyuehome.com/12640,大家可以先试一下。不过,此法对笔者没有任何帮助。
所以,又找了第二种方法:https://blog.csdn.net/qq_35822136/article/details/106320587。不幸的是,笔者再次失败了,因为这两种方法都要在虚拟机终端中远程访问外网,皆以翻墙失败告终。
不过,笔者不会就此被打倒。终于,站在前辈的想法上,思考出一种有效的方法(亲测多次成功)。
一、解决方案
1.新建一个文件夹
sudo mkdir -p /home/hqlee/
2.下载文件到本地
**步骤一:**可以在任意平台将用到的文件下载到本地
**步骤二:**将下载的文件移植到Ubuntu操作系统的虚拟机中
这里为了方便,可以将Windows上的压缩包文件直接拖到Ubuntu下的/home文件夹中(因为home文件夹下的权限较高)。
**步骤三:**解压压缩包
并将压缩后的文件夹命名为rosdistro
。
**步骤四:**移动文件夹 rosdistro 到 /home/hqlee/ 目录下
cd /home/* // 此处*代指以用户名命名的文件夹,每位用户的都不相同
ls
sudo mv rosdistro /home/hqlee
3.另打开一个终端,备份原文件,运行
sudo cp /usr/lib/python2.7/dist-packages/rosdep2/rep3.py /usr/lib/python2.7/dist-packages/rosdep2/rep3.py.bak
sudo cp /usr/lib/python2.7/dist-packages/rosdistro/__init__.py /usr/lib/python2.7/dist-packages/rosdistro/__init__.py.bak
sudo cp /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py.bak
4.修改代码,将原文件的网址替换为本地仓库地址
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
并全部做替换,将 https://raw.githubusercontent.com/ros/rosdistro/master 全部替换为 file:///home/hqlee/rosdistro 。这里小编可以很负责地说,每个文件里仅有一处要修改,且修改的地方都在代码的前面部分。
5.重新运行
sudo rosdep init
若运行失败,可以多次重新运行。实在不行的话,也不用气馁。因为我们还可以手动配置20-default.list文件。
当然,运行成功的话,就不必再听小编叨叨了,可以直接跳过第6步,直接执行第7步;否则还是要执行第6步。
6.配置20-default.list文件
此解决方案的原理是基于手动完成sudo rosdep init
的步骤
**步骤一:**首先打开一个终端,执行以下指令创建root并切换至root用户
sudo su //或者su root 然后输入密码切换至root用户
sudo mkdir -p /etc/ros/rosdep/sources.list.d
cd /etc/ros/rosdep/sources.list.d
sudo gedit 20-default.list
**步骤二:**将以下内容复制进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
**步骤三:**执行以下指令
exit //退出root用户
7.保存并运行,并替换下载地址
sudo cp /etc/ros/rosdep/sources.list.d/20-default.list /etc/ros/rosdep/sources.list.d/20-default.list.bak
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
将 https://raw.githubusercontent.com/ros/rosdistro/master 全部替换为 file:///home/hqlee/rosdistro 。
# os-specific listings first
yaml file:///home/hqlee/rosdistro/rosdep/osx-homebrew.yaml osx
# generic
yaml file:///home/hqlee/rosdistro/rosdep/base.yaml
yaml file:///home/hqlee/rosdistro/rosdep/python.yaml
yaml file:///home/hqlee/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/hqlee/rosdistro/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
8.运行
rosdep update
9.over,接下来就可以配置环境变量,测试ros环境了。