rosdep update time out及失败解决方案
在此之前,我已经撰写了一篇名为 sudo rosdep init Error ROS安装问题解决方案 博客并提供了各类解决方案,这些方案是在2020年4月29日提出并经过了一定的质检,可谓屡试不爽;本以为该问题已经被解决,直到今年把师兄的系统搞崩重装系统后发现该问题已经无法通过之前的办法解决。
于是痛定思痛,整理了一篇新的解决方案以应用该问题。
问题简述
操作系统:Ubuntu16.04
ROS版本:Kinetic
笔者在上述问题出现时,尝试在Melodic和Kinetic版本中,通过虚拟机进行了早期博文各类方法的尝试,最终仍然未能成功。其中问题出现的现象依然与早期相似;
在进行ROS安装过程中,我们要更新rosdep,于是首先在终端中键入如下命令
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.
该命令的作用是从目标网址中下载 20-default.list 文件,但由于网络或者其他原因,我们无法访问目标网站;
于是参考上一期的博客总结解决方案如下
解决方案
解决步骤 0x01 —— sudo rosdep init
此解决方案的原理是基于手动完成sudo rosdep init的步骤,通过自行创建目标文件 20-default.list
步骤一:首先打开一个终端,执行以下指令创建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
步骤三:打开新的终端键入如下命令
rosdep update
如果你在终端上述命令完成了更新,那么教程到此对您来说便已结束,但如果你遇到如下的情况,在 rosdep update 中终端提示 urlopen error timed out,那么你可以阅读解决方案 0x02 对该问题进行解决
解决步骤 0x02 —— rosdep update timed out
步骤一: ping 目标网站查看延时
ping raw.githubusercontent.com
从上图中我们可以看到延时大概在 2000ms 左右
步骤二: Ctrl + C 退出 rosdep update 定位更新代码文件
在运行 rosdep update 的终端中键入 Ctrl + C 退出
此时可以终端反馈中看到如下路径指向
/usr/lib/python2.7/dist-packages/rosdep2/main.py
至此完成了问题定位
解决步骤 0x03 —— 修改等待时间常数
步骤一:此时根据解决步骤0x02 的结论进入如下目录
/usr/lib/python2.7/dist-packages/rosdep2
步骤二:修改 sources_list.py 、 gbpdistro_support.py 、 rep3.py
在当前目录右键启动终端依次键入如下指令修改 DOWNLOAD_TIMEOUT 的值
默认情况下 DOWNLOAD_TIMEOUT = 15.0
结合解决步骤 0x02 中得到的延时结果,此处设定如下 DOWNLOAD_TIMEOUT = 10000.0
# sources_list.py
sudo gedit sources_list.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
# gbpdistro_support.py
sudo gedit gbpdistro_support.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
# rep3.py
sudo gedit rep3.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
至此,你已经完成了时间常数的修改。
解决步骤0x04 —— rosdep update 成功
当你完成了解决步骤 0x01 – 0x03 你已经完成了本教程 90% 的工作了。
此时你只需启动终端键入如下命令,享受成功的快乐
rosdep update
PS: 如果在上述步骤你仍然遇到提示 error 或者 timed out 的情况,请务必使用手机热点进行更新。