rosdep问题处理(ros2 foxy和ros-melodic实测可以)

很多万恶的问题都是因为网络问题,害

1.关于sudo rosdep init

sudo rosdep init 这个操作最主要的工作就是从https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list,下载文件20-default.list,并把它放到/etc/ros/rosdep/sources.list.d/这个目录下。

解决办法是改一下/etc/hosts中的DNS地址,通过DNS网站查出https://raw.githubusercontent.com现在的IP,手动对应一下

2.关于rosdep update

我改完DNS 之后,update需要下载的几个yaml文件,今天随机可以,随机挂(21年换sed很快就能成功的,20年hhh根本不需要操作直接成功)....所以22年我建议,自己翻个梯子,下一下这几个文件,然后放到对应位置

(也可以用别人下好的,不过相隔时间久的,可能没更新吧,还是推荐自己手动下一下)

修改一下20-default.list脚本文件

# os-specific listings first
    #yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
    yaml file:///etc/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

    yaml file:///etc/ros/rosdistro/master/rosdep/base.yaml
    yaml file:///etc/ros/rosdistro/master/rosdep/python.yaml
    yaml file:///etc/ros/rosdistro/master/rosdep/ruby.yaml
    gbpdistro file:///etc/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

然后update试一下,如果还是报错连不上index-v4,还需要

  sudo 打开/usr/lib/python2.7/dist-packages/rosdistro/__init__.py这个文件,按照下面的代码进行修改。

(如果是安装foxy,不是python2.7了,要去python3)

1 # index information
2  
3 #DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
4 DEFAULT_INDEX_URL = 'file:///etc/ros/rosdistro/master/index-v4.yaml'

然后如果改了index-v4还有可能缺少 

[index-v4.yaml所在文件夹]/foxy/distribution.yaml。等等,都手动下下来放到对应的目录就好了

然后ros update应该就都可以成功了

我在ubuntu18上装ros-meldic的时候还有个ssl报错

加一下import  ssl 

然后禁止掉自检就可以了

报的错误原因是python 升级到 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL 证书,而当目标网站使用的是自签名的证书时就会抛出一个 urllib2.URLError的错误消息。

既然前面尝试了很多办法都没法解决SSL验证问题,那只能想办法在执行rosdep update时尝试定位urllib.urlopen()函数并规避掉SSL验证。

搜了很久,终于找到Z-HE:sudo rosdep init出错的解决方案,定位rosdep命令中用到的urllib.urlopen()

rosdep命令是py脚本,入口:
查找rosdep地址: /usr/bin/rosdep
查看rosdep.py内容:from rosdep2.main import rosdep_main
查找rosdep2地址:/usr/lib/python2.7/dist-packages/rosdep2
从main.py中进一步定位,发现是在
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py中的
download_default_sources_list()调用了urlopen()

找到urlopen()之后,如果参考链接里的解决方案,需要修改所有调用的14个地方,太复杂。如果我们可以在rosdep浅入口处设置urlopen()全局属性,取消SSL验证,那是不是可以一下解决问题?

在网上查找后发现确实可以设置SSL验证全局取消(参考Py 坑之 CERTIFICATE_VERIFY_FAILED)。

因此,在/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py中顶部直接插入两行代码取消SSL验证

import ssl
ssl._create_default_https_context = ssl._create_unverified_context


参考链接:  https://www.csdn.net/tags/MtzaggysMTQ3MC1ibG9n.html

https://blog.csdn.net/nhjydywd0/article/details/119236964
 

https://www.cnblogs.com/RobustFresher/p/14501660.html
感谢大佬们

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值