- 前言
- ROS安装
- 1.添加ROS的apt源和key(中科大源)
- 2.apt安装ros-noetic核心组件
- 3.配置ROS的bash环境
- 4.安装其他常用ROS依赖项
- 5.解决python3-rosdep安装中出现的rosdep update error问题
- 尝试1.改hosts
- 尝试2.改resolv.conf
- 尝试3.改timeout
- 最终的解决方法:
- 结语
- 更新可修改位置
装了挺多次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