rosdep update 超时失败2021最新解决方法

ROS用户在国内常遇到rosdepupdate失败的问题,这主要由于访问境外服务器受阻。常规解决办法包括修改hosts文件、使用手机热点等。然而,近年来这种方法效果减弱。本文提供了一个新的解决方案,即利用ghproxy.com作为代理,修改rosdep相关脚本文件,将该代理添加到URL前,从而加速对Github资源的访问,有效解决rosdepupdate失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【好记性不如烂笔头,记录方法,方便大家】

一、关于 rosdep

安装ros的最后一步是rosdep init和rosdep update,rosdep是解决ros包依赖问题的一个工具。

rosdep init会从ros官方服务器上下载一个“20-default.list”文件,放在“/etc/ros/rosdep/sources.list.d/”路径下;打开“20-default.list”发现里边是一些yaml文件的网址,这些yaml文件里保存着一些ros工具或者常见ros包的依赖关系,也即:这些ros工具或者ros包依赖于哪些其它ros包。当你执行rosdep update,rosdep会尝试访问yaml文件网址,把yaml里的信息转存到本地,这样当你配置上述ros工具或者ros包时,ros会按照依赖关系自动把所需的依赖一并下载。这也是为什么一些人会认为rosdep失败也不影响ros使用,因为只有当你下载相关包时才会用到rosdep。

不难发现,rosdep init和rosdep update都需要访问境外服务器,这就导致国内用户rosdep相关操作经常失败。

二、常规解决方法

常规的方法是修改“/etc/hosts”文件,把“raw.githubusercontent.com”服务器的ip地址注册到里边,之前的话,通过此方法基本能解决rosdep问题,基本百试百灵。“raw.githubusercontent.com”的服务器ip可能会变化,大家可以通过 https://www.ipaddress.com 这个网站来查询当前的ip。

其它常见的解决方法还有:

1. 使用手机热点联网,多试几次;

2. 把“20-default.list”文件中所有yaml链接里的“raw.githubusercontent.com”替换为“raw.github.com”;

3. 修改“/etc/resolv.conf”文件,添加谷歌的域名服务器;

nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

根本上来讲,所有的方法都是为了能够让本机顺利访问yaml文件网址。

三、2021最新解决方法

但近期,通过修改hosts文件解决rosdep update失败的方法也不太好用了,成功几率很低。

参考 leida_wt 的方法,网站https://ghproxy.com/支持github的资源代理,非常好用,我们将用此代理加速rosdep对Github的访问,进而解决rosdep update失败问题。

我们要做的,是在rosdep的若干个脚本文件中,把 https://ghproxy.com/ 添加到相应URL前面即可。

1.首先修改rosdep下载资源的脚本文件:/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py,把以下行添加到脚本中的download_rosdep_data()函数中,以应用代理服务:

url="https://ghproxy.com/"+url

 

2.然后,用同样的方法修改/usr/lib/python2.7/dist-packages/rosdistro/__init__.py里面的DEFAULT_INDEX_URL参数,如下:

DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'

3.接着,以下4个文件中也使用了“raw.githubusercontent.com”网址,同样的方法把“https://ghproxy.com/”添加到网址前:

/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 36行
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py 72行
/usr/lib/python2.7/dist-packages/rosdep2/rep3.py	39行
/usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py 68行 119行

4.最后,在 /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 的第204行添加如下代码:

gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url

 

大功告成,现在你可以愉快地执行 rosdep update 啦!预祝一把过。

 

 

 

 

### 解决Ubuntu 20.04上`rosdep update`的问题 #### 修改配置文件以适应国内网络环境 对于在Ubuntu 20.04上遇到的`rosdep update`命令执行失败的情况,可以考虑通过编辑特定Python脚本来绕过国外服务器造成的连接障碍。具体操作如下: 针对`gbpdistro_support.py`文件,在路径`/usr/lib/python3/dist-packages/rosdep2/`下找到此文件并打开进行编辑[^5]。将默认指向GitHub仓库URL的部分更改为能够稳定访问的镜像源链接,例如Gitee上的对应资源位置。 ```python FUERTE_GBPDISTRO_URL = 'https://gitee.com/zhao-xuzuo/rosdistro/raw/master/releases/fuerte.yaml' ``` 上述更改使得ROS依赖项可以从国内托管平台获取,从而提高下载成功率和速度。 #### 手动初始化与更新rosdep数据库 另外一种有效的方式是分步处理`rosdep init`以及后续的`rosdep update`指令而不是一次性运行它们[^4]。这样做有助于定位可能存在的个别环节错误,并给予用户更多机会去修正潜在问题。 先单独执行`sudo rosdep init`完成初始化工作;之后再尝试`rosdep update`来同步最新的包列表信息。如果仍然存在超时现象,则可参照前述方法调整相关参数设置或者更换为其他可用的数据源地址。 #### 调整系统时间与时区设置 有时主机的时间不同步也会引发SSL证书验证失败等问题进而影响到HTTPS请求的成功率。因此确认本地计算机的时间准确无误同样重要。可以通过安装NTP服务自动校准时间戳,确保客户端与远程服务器之间保持一致。 ```bash sudo apt install ntp sudo timedatectl set-ntp true timedatectl status ``` 以上措施综合运用通常能较好地解决因网络条件不佳而导致的`rosdep update`困难状况。
评论 133
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值