Ubunu20.04安装ROS noetic及rosdep update问题解决
一、Ubuntu20.04安装ROS noetic
注意Ubuntu版本与ROS版本对应关系
| Ubunu版本 | ROS版本 | ros python版本 |
|---|---|---|
| 16.04 | Kinetic | python2 |
| 18.04 | Melodic | python2 |
| 20.04 | Noetic | python3 |
1、添加ROS软件源
默认源(安装速度比较慢,不推荐)
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
采用下面国内的ROS软件源下载速度会快一些(推荐)
中科大USTC
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
清华源Tsinghua
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
2、添加Keys
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3、更新软件源列表
sudo apt update
4、安装ROS
推荐安装ros桌面完整版。等待ros安装,需要花费一些时间。
sudo apt install ros-noetic-desktop-full
5、设置环境变量
通过下面的命令会将ros的环境变量 /opt/ros/noetic/setup.bash 写入到 ~/.bashrc 文件中,不用在终端中每次运行ROS功能包时再手动刷新ros的环境变量。
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
6、安装编译ROS功能包的依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
7、初始化rosdep
sudo rosdep init
rosdep update
如果rosdep update成功(下图),则完成ROS的安装。

成功后可以运行小乌龟案例进行测试验证:Ctrl + Alt + T打开三个终端,输入下面命令。
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
但是一般情况下rosdep update都会失败。
二、rosdep update解决方案
2.1 方法1-修改/etc/hosts(不太好用)
可以通过网站 www.ipaddress.com 搜索 raw.githubusercontent.com 服务器的ip地址,然后在/etc/hosts文件最后一行添加相应的ip。
185.199.108.133 raw.githubusercontent.com

2.2 方法2-修改rosdep2等文件
需要修改/usr/lib/python3/dist-packages下的5个文件(对于Melodic版本,将pythnon3改为python2.7),具体修改如下:
| 修改文件 | 修改地方 |
|---|---|
| /usr/lib/python3/dist-packages/rosdep2/sources_list.py | 64行,301行 |
| /usr/lib/python3/dist-packages/rosdistro/__ init __.py | 68行 |
| /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py | 34行,203行 |
| /usr/lib/python3/dist-packages/rosdep2/rep3.py | 36行 |
| /usr/lib/python3/dist-packages/rosdistro/manifest_provider/github.py | 68行,119行 |
(1)/usr/lib/python3/dist-packages/rosdep2/sources_list.py
在 第64行 对 DEFAULT_SOURCES_LIST_URL 进行替换:
DEFAULT_SOURCES_LIST_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'
在 第301行添加:
url="https://ghproxy.com/"+url

(2) /usr/lib/python3/dist-packages/rosdistro/__ init __.py
第 68行 将DEFAULT_INDEX_URL替换为:
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
(3) /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
第 34行 FUERTE_GBPDISTRO_URL替换为:
FUERTE_GBPDISTRO_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/' \
'master/releases/fuerte.yaml'
第 203行 添加:
gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url

(4) /usr/lib/python3/dist-packages/rosdep2/rep3.py
第 36行 REP3_TARGETS_URL替换为:
REP3_TARGETS_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'
(5) /usr/lib/python3/dist-packages/rosdistro/manifest_provider/github.py
第 68行 修改为:
url = 'https://ghproxy.com/https://raw.githubusercontent.com/%s/%s/package.xml' % (path, release_tag)
第 119行 修改为:
url = 'https://ghproxy.com/https://raw.githubusercontent.com/%s/%s/%s' % \
(path, cache.ref(), package_xml_path + '/package.xml' if package_xml_path else 'package.xml')

修改完成后,在终端输入:
rosdep update
前面修改正确,便可以成功,成功界面如下: