ros2/ros安装ros-dep||rosdep init错误

2023-12-13 13:40:58

第一个错误的做法:

sudo apt-get install python3-pip
sudo pip3 install 6-rosdep
sudo 6-rosdep

如果使用上述代码将会摧毁整个系统,不重装系统反正我是搞不定啊,因为我不知道那个写软件的人到底做了什么。因为这个我安装的版本是humble,这个软件识别版本都是错的

我认为后头这个文章写的比较可靠:(后面这个方法我试了一下,打不开,而且可能有病毒)

解决rosdep init和rosdep update失败的问题 - 知乎 (zhihu.com)

上述方法代理IP打不开,并且计算机出现异常,不要使用 ,但是上边这个方法可能是对的,就是网址是错的(事实证明,上边这个博客思路也是错的,后面那个才是正确的)

我好像发现了一个今天可以用的代理网址:GitHub 加速下载 - 在线工具 (ur1.fun)

我猜测如果把这个网址替换掉上边那个就可以了?

结合最后这个方法是可以解决这个问题的:

?看吧:我输入rosdep init 命令不再有提示失败的内容了

对于后边这个正确的博客我要说明一下:我在使用humble版本的时候需要把地址里面的python2.7修改为python3,另外我觉得如果可以直接修改rosdep程序,那么也许会更加省事,因为那个程序里面必然有一条判断的语句是否为空,把那条语句给他删了就什么事情都没有了也许(我是这么猜的)

解决rosdep init和rosdep update根本问题

ubuntu18.04安装melodic遇到的问题

针对目前安装ROS时出现的一些指令问题进行解析,主要卡在rosdep init和rosdep update这里,主要是被墙的太严重了。

下面开始解决它

1

2

3

4

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.

?在进行rosdep init的时候需要联网访问这个网址,然而这个网址无法进入,导致一直卡这报错过不去,目前网上有很多方法,我也都尝试了,可以参考一下

https://blog.csdn.net/u013468614/article/details/102917569

https://www.guyuehome.com/12640

https://zhuanlan.zhihu.com/p/43345574
https://link.zhihu.com/?target=https%3A//www.cnblogs.com/liwe1004/p/11795932.html
https://link.zhihu.com/?target=https%3A//blog.csdn.net/maolong2725/article/details/82530722

也可以找到一个文件,加一句话主要看运气,比较玄学,方法如下:

1

2

3

4

5

#打开hosts文件

sudo vim /etc/hosts

#在文件末尾添加

151.101.84.133? raw.githubusercontent.com

#保存后退出再尝试<br>或者添加<br>151.101.76.133 raw.githubusercontent.com

解决思路

在进行rosdep init 的时候访问raw.githubusercontent.com,这个其实就是github的用户数据服务器。rosdep 程序下载的就是github.com/ros/rosdistro这个包里的yaml文件。
因此得到一个思路就是:首先下载github.com/ros/rosdistro包,将下列文件里面的默认的进入raw.githubusercontent.com去下载文件的url地址全部改为本地的下载的包的地址。
解决过程

第一步

首先进入www.github.com/ros/rosdistro去把这个包下载下来

包名rosdistro-master应改为rosdistro

也可以从我的网盘下载

链接:https://pan.baidu.com/s/1B4E_spuSJ_E1MANxWVrLfw
提取码:ja5d

第二步

修改这个包中rosdep/source.list.d/下的文件20-default.list,将这个文件中指向raw.githubusercontent.com的url地址全部修改为指向本地文件的地址(自己放置该包的地址),也就是该下载好的包的地址:以下是我修改好的样例:

1

2

3

4

5

6

7

8

9

10

# os-specific listings first

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

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

***注意:***在py语言中:url本地文件地址格式是:file://+文件地址,后面更改其他文件中地址的时候也一样。

第三步

修改/usr/lib/python2.7/dist-packages/rosdep2/main.py中的默认的url的地址,但是经过代码阅读,该文件中并不存在指向raw.githubusercontent.com的代码。而且经过对代码的分析,提示报错的代码就在该文件中

1

2

3

4

5

6

7

8

def command_init(options):

????try:

????????data = download_default_sources_list()

????except URLError?as?e:

????????print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.'?% (DEFAULT_SOURCES_LIST_URL))

????????return?4

????except DownloadFailure?as?e:

????????print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.'?% (DEFAULT_SOURCES_LIST_URL))

由于其调用了download_default_sources_list()这个函数
而该函数就在/usr/lib/python2.7/dist-packages/rosdep2该文件夹下面的sources_list.py文件里面。而这个文件里面的代码则进行了访问raw.githubusercontent.com的操作,因此修改该默认url即可

1

2

3

4

5

# default file to download with 'init' command in order to bootstrap

# rosdep

DEFAULT_SOURCES_LIST_URL =?'file:///home/xxx/rosdistro/rosdep/sources.list.d/20-default.list'

# seconds to wait before aborting download of rosdep data

总结:该步实际并不是修改 main.py 文件里面默认url的指向地址,而是修改同文件夹下的sources_list.py文件里面的代码

第四步

修改以下两个文件里面的代码,修改方法类似:

1

2

/usr/lib/python2.7/dist-packages/rosdep2/rep3.py

/usr/lib/python2.7/dist-packages/rosdistro/__init__.py

下面是我分别修改后的样例:

修改rep3.py文件

1

/usr/lib/python2.7/dist-packages/rosdep2/rep3.py文件:

1

2

3

4

# location of targets file for processing gbpdistro files

REP3_TARGETS_URL =?'file:///home/xxx/rosdistro/releases/targets.yaml'

# seconds to wait before aborting download of gbpdistro data

修改__init__.py的文件

1

/usr/lib/python2.7/dist-packages/rosdistro/__init__.py的文件:

  

1

2

3

4

5

# index information

DEFAULT_INDEX_URL =?'file:///home/xxx/rosdistro/index-v4.yaml'

def get_index_url():

然后进行sudo rosdep init? 就没有什么问题了

如果你是ubuntu20.04安装noetic的话,就要更改一些细节了:noetic不是更改/usr/lib/python2.7/dist-packages/了,而是更改/usr/lib/python3/dist-packages/

最后感谢原博主:

https://blog.csdn.net/nanianwochengshui/article/details/105702188

故事还没有结束:上边这个方法是错的:这个办法虽然对于init部分没有问题,但是当具体要使用rosdep的时候,会要求update,然后会出问题,最后我使用了那个小鱼一键安装rosdep,就把update的问题也解决了。

wget http://fishros.com/install -O fishros && bash fishros

执行上边,然后选择3----也就是选择rosdep安装就搞定了,毕竟我们不是专门去研究ros2这个东西,我们是要去搞机器人的,所以还是把专业的事情交给专业的人去搞

?出现上边这个就说明没问题了:#ALL required rosdeps installed successfully

最后附带一个没有经过任何修饰的原装的rosdep update

我惊奇的发现虽然失败了,但是原装的居然对于版本的判断也会失败,因为我用的是humble,但是这个里面在判断为humble的同时,还选择了iron,这就搞不懂了

文章来源:https://blog.csdn.net/geniusChinaHN/article/details/134889791
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。