ROS学习 一、Debian10安装ROS Noetic,解决rosdep update失败问题(更新一个可修改位置)

前言

装了挺多次ROS,每次安装都会卡在rosdep update这一步上,总要靠运气装好。最近发现一种很棒的ROS仓库连接不上的解决方案,因此重新记录一下在Debian10无卡顿安装ROS noetic的方法

注:ROS1 noetic之前所有发行版本的ROS系统都默认采用python2作为python的解释器,而noetic改成了python3,可以说是极大简化了基于python3程序在ROS上的移植

ROS安装

1.添加ROS的apt源和key(中科大源)

添加ROS中科大apt源

sudo sh -c 'echo "deb https://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

添加key

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新apt源

sudo apt update

2.apt安装ros-noetic核心组件

推荐直接安装完整的ros核心组件

sudo apt install ros-noetic-desktop-full

后续还可以加装特定的ros工具包,比如slam包

sudo apt install ros-noetic-slam-gmapping

3.配置ROS的bash环境

为了在终端terminal中使用ros,必须要先给bash配置环境,

source /opt/ros/noetic/setup.bash

每次打开terminal都必须输入这个指令,这就很麻烦,推荐把这条命令写在~/.bashrc中,这样每次打开terminal会自动读取该命令

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

4.安装其他常用ROS依赖项

除了核心组件外,ros还有一些常用的依赖工具包,可以通过apt进行安装,

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

5.解决python3-rosdep安装中出现的rosdep update error问题

首先python3-rosdep安装方法如下,

sudo apt install python3-rosdep
sudo rosdep init
rosdep update

但是,由于国内裸连ros仓库速度极慢,容易产生卡顿、中断等问题

之前的解决方法是修改hosts、nameserver、timeout等方式

尝试1.改hosts

原理是通过修改访问仓库的ip地址来加速访问

sudo gedit /etc/hosts
# 在末尾添加以下语句
# 151.101.84.133 raw.githubusercontent.com

尝试2.改resolv.conf

原理是修改DNS来防止仓库地址解析错误

sudo gedit /etc/resolv.conf
# 注释掉nameserver行
# 然后添加以下语句
# nameserver 8.8.8.8
# nameserver 8.8.4.4

尝试3.改timeout

原理是rosdep update拉取仓库时的默认timeout太短(15s),修改延长timeout

# 注意对应自己的python3版本
# 找到timeout = 15.0 ,改为timeout = 150
# 以下三个文件timeout都要改
sudo nano /usr/lib/python3/dist-packages/rosdep2/sources_list.py
sudo nano /usr/lib/python3/dist-packages/rosdep2/rep3.py
sudo nano /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py

最终的解决方法:

以上三种方法即使改完仍然要多次尝试后才可能rosdep update成功(前两年都是这么硬连)
现在提供一种一次搞定的方法,使用代理来连接github的仓库,方法如下,首先,

sudo apt install python3-rosdep

然后,自己手动创建ros仓库的list

# 手动创建一个ros仓库源的list
sudo nano /etc/ros/rosdep/sources.list.d/20-default.list

在上面的20-default.list中填上以下内容:

# os-specific listings first
yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx

# generic
yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://ghproxy.com/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

接着,

sudo rosdep init

然后,再将以下几个文件

/usr/lib/python3/dist-packages/rosdistro/__init__.py
/usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
/usr/lib/python3/dist-packages/rosdep2/sources_list.py
/usr/lib/python3/dist-packages/rosdep2/rep3.py
/usr/lib/python3/dist-packages/rosdistro/manifest_provider/github.py

中每个文件包含的仓库拉取地址
'https://raw.githubusercontent.com/······'
改成
'https://ghproxy.com/https://raw.githubusercontent.com/······'
例如将

'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'

变成

'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'

全部修改完毕后,再更新rosdep

rosdep update

大功告成

结语

以上方法终于解决了linux下安装ROS的老大难问题,日后会再更新有关ros的具体操作学习总结。

更新可修改位置

在执行以下命令时容易出现timeout

Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml

我通过在执行该命令时Ctrl+C强制停止发现了该命令运行时的timeout修改位置:
sudo nano /usr/lib/python2.7/dist-packages/rosdistro/loader.py
其中有一个load_url中的timeout=10,可改成timeout=150,retry=2改成5

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值