2021-06-01 Ubuntu 1604安装ROS+ ROS初始化失败的解决方案

Ubuntu 1604安装ROS+ ROS初始化失败的解决方案


#本文是对网络上安装ROS以及解决ROS初始化报错问题解决方法的整理,仅作为个人学习记录使用#

1. ROS版本选择

ROS目前只支持在Linux系统上安装部署,它的首选开发平台是Ubuntu。时至今日ROS已经相继更新推出了多种版本,供不同版本的Ubuntu开发者使用。为了提供最稳定的开发环境,ROS的每个版本都有一个推荐运行的Ubuntu版本。如下表所示:

ROS版本 首选Ubuntu版本
Noetic Ubuntu 20.04
Melodic Ubuntu 18.04
Lunar Ubuntu 17.04
Kinetic(建议选用) Ubuntu 16.04
Indigo Ubuntu 14.04

本教程使用的平台是Ubuntu 16.04,ROS版本是Kinetic。
如果已经安装Ubuntu,可以在终端中输入cat /etc/issue确定Ubuntu版本号,然后选择对应的ROS版本。如果没有安装正确的ROS版本,就会出现各种各样的依赖a错误,所以安装时请谨慎。
更多信息请参考 ROS官方网站进行下载和安装。

2. 安装ROS

在正式的安装前,先检查下Ubuntu初始环境是否配置正确。
打开Ubuntu的设置->软件与更新->Ubuntu软件->勾选关键字universe,restricted,multiverse三项。如图所示:2021-06-01 Ubuntu 1604安装ROS+ ROS初始化失败的解决方案
配置完成后,就可以开始安装ROS了,打开终端。
① 添加sources.list

$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

这一步配置将镜像添加到Ubuntu系统源列表中,建议使用国内或镜像源,这样能够保证下载速度。本例使用的是中国科技大学的源。
② 添加keys

$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

公钥是Ubuntu系统的一种安全机制,也是ROS安装中不可缺的一部分。
③ 系统更新

$ sudo apt-get update && sudo apt-get upgrade

更新系统,确保自己的Debian软件包和索引是最新的。
④ 安装ROS
ROS中有很多函数库和工具,官网提供了四种默认的安装方式,当然也可以单独安装某个特定的软件包。这四种方式包括桌面完整版安装、桌面版安装,基础版安装、单独软件包安装。推荐安装桌面完整版安装(包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能),如下:
Ubuntu 16.04安装Kinetic版本

 $ sudo apt-get install ros-kinetic-desktop-full # Ubuntu 16.04

如果你不想安装桌面完整版,你还可以尝试以下三种方式安装:
桌面版安装(包含ROS、rqt、rviz以及通用机器人函数库)

$ sudo apt-get install ros-kinetic-desktop

基础版安装(包含ROS核心软件包、构建工具以及通信相关的程序库,无GUI工具)

 $ sudo apt-get install ros-kinetic-ros-base

单独软件包安装(这种安装方式在运行ROS缺少某些package依赖时会经常用到。你可以安装某个指定的ROS软件包,使用软件包名称替换掉下面的PACKAGE)

$ sudo apt-get install ros-kinetic-PACKAGE

例如系统提示找不到slam-gmapping,你就可以:

$ sudo apt-get install ros-kinetic-slam-gmapping

要查找可用的软件包,请运行:

$ apt-cache search ros-kinetic

软件包的依赖问题还可能出现在重复安装ROS、错误安装软件包的过程中,出现有一些软件包无法安装,例如:

下列软件包有未满足的依赖关系:ros-kinetic-desktop-full : 
依赖: ros-kinetic-desktop 但是它将不会被安装;
依赖: ros-kinetic-perception 但是它将不会被安装;
依赖: ros-kinetic-simulators 但是它将不会被安装;
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

出现上述问题,有可能是自己的版本不合适不兼容造成,也可能是镜像源没有更新,具体的设置参考软件和更新的截图。当然也有可能是其他原因,比如更新了忘记刷新环境source一下,重开一个终端等等。具体的问题原因可以去搜索引擎上尝试求助解决,或者登陆ROS Wiki(ROS的百科全书)去查询解决自己的具体问题。

3. 配置ROS

配置ROS是安装完ROS之后必须的工作。
① 初始化rosdep

$ sudo rosdep init 
$ rosdep update

这一步初始化rosdep,是使用ROS之前的必要一步。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。


附:(ROS初始化报错解决办法)


Ubuntu安装ROS完成后初始化失败,通过本地创建配置文件的方法解决。

1.执行 sudo rosdep init失败
反复尝试一下,一般情况下反复个几次,init这步就可以成功。
如果反复不成功,根据提示错误,可以先参考下面链接提供的方法尝试一下
https://www.cnblogs.com/xuhaoforwards/p/9399744.html
上面的操作都不成功,可以参考下面。
sudo rosdep init这个操作最主要的工作就是从https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list,下载文件20-default.list,并把它放到/etc/ros/rosdep/sources.list.d/这个目录下。
20-default.list这个文件的内容如下:

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

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

用最高权限创建目录/etc/ros/rosdep/sources.list.d/,并在此目录下创建20-default.list这个文件。
2. 执行rosdep update失败
这步的操作失败原因是从raw.githubusercontent.com/下载文件失败,主要是防火墙限制了对这个网站的访问,能*的同学就不用往下看了。

(1)可以先参考下面链接的方法,将python脚本的超时时间写长一点比如120s,然后反复尝试。
https://www.cnblogs.com/zxzmnh/p/11758103.html
(2)如果以上操作仍然无效的话,请继续往下看。分析了前面链接提到的sources_list.pygbpdistro_support.pyrep3.py几个脚本,发现主要在打开20-default.list里的链接时失败,也就是无法下载20-default.list列举的几个配置文件。把这些文件下载到本地,然后修改20-default.list脚本文件就可以了。
具体操作如下:
a.将20-default.list中的链接在浏览器中打开,然后创建一个同名文件,最好连目录结构一起建好,这样后面改脚本比较容易。我是直接建在了/etc/ros/建了相应的目录。
本文提供了对应的文件,百度网盘:https://pan.baidu.com/s/14bQbLQ6v-j9SfrHPfCu5Nw 提取码:hy4o,下载后解压到/etc/ros目录下。需要超级权限。
b.修改20-default.list脚本文件,需要超级权限。可以跟前面的脚本内容做下对比。

# os-specific listings first
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
yaml file:///etc/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
#gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
 
yaml file:///etc/ros/rosdistro/master/rosdep/base.yaml
yaml file:///etc/ros/rosdistro/master/rosdep/python.yaml
yaml file:///etc/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro file:///etc/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

退出保存后,执行rosdep update
在更新过程中,还有部分配置信息会从raw.githubusercontent.com上下载,但是反复几次,基本上就可以成功了。
(3)经过上面两步,还是失败,请继续往下看。
sudo 打开/usr/lib/python2.7/dist-packages/rosdistro/__init__.py这个文件,按照下面的代码进行修改。

# index information
 
#DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
DEFAULT_INDEX_URL = 'file:///etc/ros/rosdistro/master/index-v4.yaml'

保存后,执行rosdep update。如果一次不成功,再执行个一两次,应该就会出现下面成功完成的这些打印。
(4)如果执行到第3步还是报错
可能是本机的DNS服务被污染了,无法获得https://raw.githubusercontent.com这个网址的正确IP,导致连接失败。这时你需要更新一下DNS服务器设置,选择一个外部的DNS服务器。以ubuntu MATE 16.04为例,路径如下:
系统-->系统管理-->网络-->DNS,在这个界面下,先解锁,然后在DNS服务器栏,点击Add,在对话框中填上8.8.8.8(google的DNS服务器),把它放到一位(可以点着上下拖动),然后锁定,关闭。
回到terminal,执行rosdep update。这时应该就不会报错了,有可能会超时,主要是网速问题,尝试几次就应该出现下面成功的打印了。

reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit file:///etc/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/base.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/python.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/ruby.yaml
Hit file:///etc/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index file:///etc/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Add distro "foxy"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/xxxx/.ros/rosdep/sources.cache

② ROS环境配置

#For Ubuntu 16.04
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

注意:ROS的环境配置,使得你每次打开一个新的终端,ROS的环境变量都能够自动配置好,也就是添加到bash会话中,因为命令source/opt/ros/kinetic/setup.bash只在当前终端有作用,即具有单一时效性,要想每次新开一个终端都不用重新配置环境,就用echo语句将命令添加到bash会话中。
③ 安装rosinstall
rosinstall是ROS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就可以给某个ROS软件包下载很多源码树。在ubuntu上安装这个工具,请运行:

$ sudo apt-get install python-rosinstall

至此,ROS的安装就结束了,下面测试ROS能否正常运行。

4. 测试ROS

首先启动ROS,输入代码运行roscore:

$ roscore

如果出现下图所示,那么说明ROS正常启动了!
2021-06-01 Ubuntu 1604安装ROS+ ROS初始化失败的解决方案
接着我们测试ROS的吉祥物–小海龟,来简单的测试ROS运行是否正常,同时也来体验一下ROS的神奇与精彩!
启动roscore后,重新打开一个终端窗口,输入:

$ rosrun turtlesim turtlesim_node

你还看到一只萌萌的海龟出现在屏幕上,那么该怎么样来操纵这只小海龟呢?重新打开新的一个终端,输入:

$ rosrun turtlesim  turtle_teleop_key

将鼠标聚焦在第三个终端窗口上,然后通过键盘上的方向键,进行操作小海龟,如果小海龟正常移动,并且在屏幕上留下自己的移动轨迹,如下图。恭喜你,ROS已经成功的安装、配置并且运行!
2021-06-01 Ubuntu 1604安装ROS+ ROS初始化失败的解决方案
至此,ROS的安装、配置与测试就全部结束了,下面就正式开启ROS精彩的旅程!

上一篇:openssl建立证书,非常详细配置ssl+apache


下一篇:rosdep报错解决办法