Bootstrap

Ubuntu18.04安装Ros(最新最详细亲测)


安装前必看

本次更新于 2022年10月18 日

2021年暑假我在这篇文章中记载了安装过程,但现在有了更快捷方便的方法。可以节省大量时间。

执行下面的命令 然后按照脚本指示文件操作即可
wget http://fishros.com/install -O fishros && sudo ./fishros

给 linux 新手的解释下命令的含义:wget + 网址 -O = 将某网址的文件下载下来并输出(output -O) 到指定的位置也可以重命名。 & 前半段意思是 将文件的下载放在当前目录下并命名为fishros
后半段的意思是 ./fishros 执行 fishros 命令

这个脚本是别人做好的,可以替代我下面几千字的所有操作。非常推荐新手使用。

安装过程中如果有什么地方 不知道怎么操作 看不懂脚本的提示信息 。可以去看我后面的内容。
安装完毕后 直接跳到我所说检查步骤去检查整体的安装情况。** 这个很重要! **

我目前在ubuntu1804 2004 2204 三个平台上都测试过。

安装完ros后 建议检查安装情况,可以直接跳转到旧文章的检查段落。

后面的内容是我去年写的,但是我还是推荐你看一变以了解整个流程。毕竟很多时候安装软件配置环境依赖他人写好的脚本 将来如果出问题了就手足无措。
同时后面的内容还记载了常见的问题,

注意:

  1. 如果遇到错误 请先浏览完整篇文章看是否有提及该错误
  2. 浏览评论区看是否有人遇到相同的错误。

旧博文的前言

下方的内容仅适用于Ubuntu1804 且 操作比较原始,建议使用上面的最新方法安装。但建议阅读一遍了解安装的整个过程

Unbuntu安装Ros教程众多但时间太久大多不再能解决现在安装遇到的问题,本文发布于2021.7.15 保证及时更新,保证时效。

安装Ros 时将自动安装旧版的Cmake3.10.2。所以在安装Ros之前,请先检查此先是否有安装Cmake。

如果有请再查看它的版本例如 :cmake -version 显示:cmake version 3.20.5
安装Ros之后可能出现这种情况:在终端的命令行输入 cmake-version 将会显示 cmake version 3.10
也就是说此时cmake命令指向的是Ros安装下来的旧版cmake。对于这个问题的解决办法“软链接”补充在本文末尾。

如果在此之前没有安装cmake,那对于Ros安装没什么影响。完全可以在安装ROS后,去Cmake官网安装一个新版的cmake 再更改软链接即可。Cmake安装和软链接设置见本文末尾

注意:如果遇到问题,先去评论区看看有没有其他人和你的问题相同的。


提示:以下是本篇文章正文内容,下面案例可供参考

一、版本选择

不同的Unbutn安装的Ros版本不同。Ubuntu18.04对应的ros版本为ROS Melodic
提示:请安装对应版本,不要安装错了。版本对应如下
在这里插入图片描述
如果你的版本不在上面的图提示中 先搜索下版本对应关系。


二、下载步骤

提示:接下来的步骤将参考Ros官网的步骤详解 :RosMelodic官网

注:国内网络打开该网址需要等待非常长的时间,我下面的几个安装步骤和官网是一样的。当然你也可以去参考官网

注:请保证这个环节中网络的稳定,建议插有线网或链接高速wifi


1.检查Unbuntu的软件和更新源

在这里插入图片描述

在这里插入图片描述
将四个选项全部选上,同时将下载源更换为国内源。我这里用的是阿里云,换成清华中科大都是可以的。


2.设置Ros的下载源

解释:接下来是将ros 的下载源设置为中科大源,使用外国的源下载速度很慢:详情见RosMelodic网址

2.1设置中科大源: 在终端输入如下命令后回车

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.2 设置公钥: 在终端输入如下命令后回车

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

在这里插入图片描述
注解:我这里已经安装过一次钥匙了,所以显示不太一样。

注解:如果遇到问题 请尝试亲手在Unbutu终端输入以上命令。CSDN复制黏贴进终端有可能会出问题。

2.3 更新最新可用软件包列表:在终端输入以下命令后回车

sudo apt update

常见问题:
     设置钥匙时候如果不能设置,可能是因为电脑中没有安装相应钥匙功能的包 可以执行以下命令解决 并重复设置钥匙的步骤。


3.安装ROS

在终端输入以下命令后回车

sudo apt install ros-melodic-desktop-full

接下来就是漫长的等待

注解:这个命令将安装完整的ROS软件,包括ROS,rqt,rviz,机器人通用库,2D / 3D模拟器,导航和2D / 3D感知等等的全套基础组件(新手强烈建议安装这个就好)


4.设置环境变量

在终端输入以下命令后回车

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

注解:这个步骤是让你的 bash终端 以后可以识别 roscore,rosrun等命令。

ZSH用户 : 如果你用的不是bash,例如zsh fish等其他终端,那你就在zsh的配置文件里添加环境变量。

echo "source /opt/ros/melodic/setup.bash" >> ~/.zshrc
source ~/.zshrc

注意: zsh 的终端环境配置我不确定是不是这么弄,我只是写出来让zsh用户参考, 如果不行,你自己去home文件夹下添加zsh配置即可。

另外给Linux新手补充一点:如果你在bash中添加了环境,那你在zsh终端是无法启动的ros 的。 反过来也是一样。我建议你在常用终端下都添加环境变量。

在这里插入图片描述


5.下载其他功能组件

在终端输入以下命令后回车

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

这些组件可以构建和管理开发者自己的ROS工作空间,强烈建议安装。详情见 :[Ros官网]


6.rosdep init 初始化

1.在终端输入以下命令后回车

sudo rosdep init

2.常见报错

第一种报错:
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.

第二种报错
ERROR: Rosdep experienced an error: (‘The read operation timed out’,)
Please go to the rosdep page [1] and file a bug report with the stack trace below.
[1] : http://www.ros.org/wiki/rosdep
rosdep version: 0.21.0
Traceback (most recent call last):
File “/usr/lib/python2.7/dist-packages/rosdep2/main.py”, line 146, in rosdep_main
exit_code = _rosdep_main(args)
、、、、、、
、、、、、、
、、、、、、
SSLError: (‘The read operation timed out’,)

3.原因:初始化的这一步将会从外国的网站raw.githubusercontent.com拉取一些信息和文件。这个网站现在被墙了,导致这一步出错。

4.解决办法:

  • 法一:Unbuntu||爬楼梯||后再次尝试,没有方法的同学用下面的方法
  • 法二:让手机开热点让电脑连接,再次执行次命令。看别人的博客评论区说电信的热点就秒成。不一定成功吧,毕竟网站被墙了。而且那个作者的文章写于2020.5.10 有兴趣可以试试。反正我自己试了不行,╮(╯▽╰)╭。建议直接进入方法三。
  • 法三:给不能||爬楼梯||的朋友使用,强行绕过墙。以下是具体步骤

首先修改/etc/hosts文件

1.终端输入以下命令并回车:sudo gedit /etc/hosts

2.把下面这些地址拷贝到hosts文件末尾,然后保存

注解:这个步骤的作用是让你的linux在访问外国网站时会绕过去, 你可以在安装完ros之后把这些设置删除。

199.232.28.133 raw.githubusercontent.com
192.30.253.118 gist.github.com
185.199.110.153 github.io
151.101.113.194 github.global.ssl.fastly.net
52.216.227.168 github-cloud.s3.amazonaws.com
52.74.223.119 github.com
199.232.28.133 avatars1.githubusercontent.com
199.232.28.133 avatars2.githubusercontent.com
199.232.28.133 avatars0.githubusercontent.com
199.232.28.133 avatars3.githubusercontent.com
199.232.28.133 user-images.githubusercontent.com
199.232.28.133 avatars.githubusercontent.com
199.232.28.133 github.map.fastly.net
199.232.28.133 avatars7.githubusercontent.com
54.239.31.69 aws.amazon.com
54.239.30.25 console.aws.amazon.com
54.239.96.90 ap-northeast-1.console.aws.amazon.com
54.240.226.81 ap-southeast-1.console.aws.amazon.com
54.240.193.125 ap-southeast-2.console.aws.amazon.com
54.239.54.102 eu-central-1.console.aws.amazon.com
177.72.244.194 sa-east-1.console.aws.amazon.com
176.32.114.59 eu-west-1.console.aws.amazon.com
54.239.31.128 us-west-1.console.aws.amazon.com
54.240.254.230 us-west-2.console.aws.amazon.com
54.239.38.102 s3-console-us-standard.console.aws.amazon.com
54.231.49.3 s3.amazonaws.com
52.219.0.4 s3-ap-northeast-1.amazonaws.com
54.231.242.170 s3-ap-southeast-1.amazonaws.com
54.231.251.21 s3-ap-southeast-2.amazonaws.com
54.231.193.37 s3-eu-central-1.amazonaws.com
52.218.16.140 s3-eu-west-1.amazonaws.com
52.92.72.2 s3-sa-east-1.amazonaws.com
54.231.236.6 s3-us-west-1.amazonaws.com
54.231.168.160 s3-us-west-2.amazonaws.com
52.216.80.48 github-cloud.s3.amazonaws.com
54.231.40.3 github-com.s3.amazonaws.com
52.216.20.171 github-production-release-asset-2e65be.s3.amazonaws.com
52.216.228.168 github-production-user-asset-6210df.s3.amazonaws.com
————————————————
版权声明:本文为CSDN博主「银时大魔王」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_25923849/article/details/107976434
————————————————
此解决办法 乃是参考 CSDN作者"银时大魔王" 大家可以去看他的原文。我将其中的一行ip映射调整顺序放在了首行。
在这里插入图片描述

接下来修改/etc/resolv.conf 文件

1.终端输入以下命令并回车sudo gedit /etc/resolv.conf

2.将原有的nameserver那一行注释,并添加以下两行后保存:

nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
在这里插入图片描述

最后再次执行:sudo rosdep init

可能有如下报错:
ERROR: default sources list file already exists: /etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
这说明20-default.list 这个文件已经存在
解决办法删除20-default.list这个文件。
1.终端输入以下命令并回车删除文件:sudo rm /etc/ros/rosdep/sources.list.d/20-default.list,
2.再次执行:sudo rosdep init

显示如下信息,则rosdep初始化成功

wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update

7.rosdep update 更新

在终端输入以下命令并回车rosdep update

1.常见错误:更新超时read operation timed out

2.原因:raw.githubusercontent.com这个网站被墙,国内网拉取信息网速缓慢。

3.解决办法:

  • 法一:||爬楼梯||并重复此操作

  • 法二:多次执行rosdep update操作,网络良好的情况下有可能完成所有更新。也可以开手机热点更新。如果20来次都不行的话建议使用方法三。

  • 法三:将更新所需要的文件下载放在本地文件夹,并修改执行更新的路径。在本地完成更新,避免向外国网站拉取信息和文件。

    第一步: 本地更新所需文件下载

    CSDN作者银时大魔王已经将更新所需的文件整理好上传云中(大家可以去观摩原文):
    链接: https://pan.baidu.com/s/1PhTCqtvScV_XGf9ac0CcCg 提取码: w3ix

    第二步:将提取出的文件夹移动到/etc/ros文件夹下
    终端输入:sudo cp -r ../ros_github/ /etc/ros/
    注:../ros_github/为你自己提取安放的路径

在这里插入图片描述
第三步:修改更新文件路径
注:下文将原作者的讲述简化并配以图解,如需看原作者博客点击此链接

1.修改index-v4.yaml路径
     终端输入以下命令回车:sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
     将该文件中第68行代码注释并添加file:///etc/ros/ros_github/index-v4.yaml如下第一张图所示:
2.修改 /etc/ros/rosdep/sources.list.d/20-default.list文件。
     终端输入以下命令回车:sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
     再将原有内容全部注释 或者 删除。最后添加以下内容在文档中。如下第二张图所示
---
#os-specific listings first
yaml file:///etc/ros/ros_github/osx-homebrew.yaml osx
#generic
yaml file:///etc/ros/ros_github/base.yaml
yaml file:///etc/ros/ros_github/python.yaml
yaml file:///etc/ros/ros_github/ruby.yaml
gbpdistro file:///etc/ros/ros_github/fuerte.yaml fuerte
#newer distributions (Groovy, Hydro, …) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
---
在这里插入图片描述
在这里插入图片描述

    第四步:再次执行rosdep update
    一般情况下,这次更新就能成功了。成功更新的界面时这样子的 注:此图参考自这个博客在这里插入图片描述
常见问题:如果遇到Hit缺失,更新不完整的情况 ,可以尝试关闭终端 再次执行更新命令。多尝试几次就能成功。甚至可以重复上面一到两个步骤。(我的fuerte就有几次Hit不到,重复了几次才成功) 到此为止就成功安装ROS了。


8.检查安装情况:运行小海龟和rviz

建议再执行以下环境配置命令(有的同学可能漏了,且再来一次无妨):

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

1.终端输入命令回车:roscore

… logging to /home/hyj/.ros/log/b76e3992-e577-11eb-bf00-00e04c360b88/roslaunch-hyjlaptop-20795.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://hyjlaptop:38805/
ros_comm version 1.14.11
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.11
NODES
auto-starting new master
process[master]: started with pid [20805]
ROS_MASTER_URI=http://hyjlaptop:11311/

出现以上提示则代表安装成功。
2.检查基础功能
在终端成功输入roscore后,开启第二个终端输入rosrun turtlesim turtlesim_node会出现一个小海龟,最后开启第三个终端输入rosrun turtlesim turtle_teleop_key 接下来就可以通过方向键控制海龟的移动。下面时我画的一只小狗,是不是很可爱呀 n(≧▽≦)n
在这里插入图片描述
3.检查rviz等高级功能的运行
打开第一个终端输入roscore 打开第二个终端输入rosrun rviz rviz 看到下图画面则rviz等其他组件安装成功。
在这里插入图片描述


三、总结

以上就是Unbuntu18.04安装Ros的过程,本文是用来帮助那些没有linux||爬楼梯||方法的同学的。如果有||爬楼||方法,可以尝试开启后,直接执行 估计是一路通畅不会遇到什么问题的。

最后向CSDN作者银时大魔王 表示谢意,针对文中 rosdep init 和update 的问题先前做了很多工作。他的文章写于2020-08-13。 关于可能出现的问题 我也做了一些补充,并且将安装的全流程记录于此。希望能帮助更多的人。


四、!!!新手检查!!! 安装Ros后cmake版本倒退为3.10怎么办?

在安装Ros之前 如果你的Ubuntu中已经安装有Cmake。例如Cmake 3.20.5 。但是在安装Ros后 命令行输入Cmake -version 显示的版本为3.10.2。

这说明此时电脑中存在有多个版本的Cmake。

那么如何让Cmake命令指向我们所需的特定版本呢?此时可以参考我的另一篇博客解决该问题。

有些新接触linux系统的同学项目任务要求使用Cmake3.20等新版本,安装ros后,cmake指向旧版也可以由此解决。

可以查阅我的另一篇博客[安装Ros后Cmake变为3.10.2]。


五、如果你遇到本文没有提及的问题 一定要留下评论哦!真诚的感谢你的参与将这篇博客变得更丰富全面,帮助更多人。感谢你的点赞!O(∩_∩)O~~

;