ROS安装指南与填坑教程

1 Ubuntu install of ROS Noetic

注意:

ROS版本 与其对应的Ubuntu操作系统
kinetic ubuntu16
melodic ubuntu18
noetic ubuntu20

1.1 安装

1.1.1 配置您的 Ubuntu 存储库

什么是Ubuntu存储库

配置您的 Ubuntu 存储库以允许 “restricted,” “universe,” and “multiverse.”。您可以按照 Ubuntu 指南获取有关执行此操作的说明。

步骤:
livePath图标 -> Ubuntu 软件。
之后会更新用户配置。等它更新完就行了
在这里插入图片描述
可能会报的错误:
在这里插入图片描述
原因:
报这个错是因为Ubuntu桌面版预装了apport软件包,该软件包会自动收集crash信息,crash文件存放在/var/crash,呈现给用户并咨询是否发送给ubuntu

保存的crash文件只要不处理,每次启动都会提示,要么选择解决这个问题,要么选择把crash文件删掉或者点击don’t send, 毕竟绝大多数情况程序崩溃不是经常能够遇到。

解决方式:

# 关闭错误报告:
# 方式1:
sudo service apport stop  # 临时关闭

# 方式2:
/etc/default/apport  # 永久关闭
# set this to 0 to disable apport, or to 1 to enable it
# you can temporarily override this with
# sudo service apport start force_start=1:enabled=1

# 方式3:
sudo apt-get purge apport # 删除apport软件包

1.1.2 设置您的 sources.list

设置您的计算机以接受来自 packages.ros.org 的软件。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

除了上述方法,镜像网站debian软件包源也可用。详情见 Ubuntu 有关指南

1.1.3 设置您的密钥

sudo apt install curl # 如果你还没有安装 curl 
curl -s curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

第一个代码可能报的错误:

错误1:
在这里插入图片描述

curl : 依赖: libcurl4 (= 7.68.0-1ubuntu2) 但是 7.68.0-1ubuntu2.5 正要被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决方法:

安装红色框里的依赖即可:

sudo apt-get install libcurl3-gnutls=7.47.0-1ubuntu2

结果如下:
在这里插入图片描述

问题2:安装curl报错解决方案 : Depends: libcurl3-gnutls (= 7.47.0-1ubuntu2)
提示以下错误信息:

Depends: libcurl3-gnutls (= 7.47.0-1ubuntu2) but 7.47.0-1ubuntu2.7 is to be installed
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
curl : Depends: libcurl3-gnutls (= 7.47.0-1ubuntu2) but 7.47.0-1ubuntu2.7 is to be installed
E: Unable to correct problems, you have held broken packages.

解决方法:

首先: 先安装错误信息里指定版本的 libcurl3-gnutls

sudo apt-get install libcurl3-gnutls=7.47.0-1ubuntu2

在这里插入图片描述
备注: 如果在安装 libcurl3-gnutls 的时候, 也提示需要安装其他依赖包的话, 按照上述方式安装指定的版本即可

然后: 再执行 curl 安装命令

sudo apt-get update && sudo apt-get install curl

问题3:【Linux】Ubuntu安装curl报错:软件包有未满足的依赖关系: curl : 依赖: libcurl4 (= 7.58.0-2ubuntu3.10)

问题:

下列软件包有未满足的依赖关系:
 curl : 依赖: libcurl4 (= 7.58.0-2ubuntu3.10) 但是 7.68.0-1ubuntu2.1 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决:

# su切换root,再执行(方法:在终端输入 su):
apt-get purge libcurl4
apt-get install curl

第二个代码可能报的错误:
问题1:ubuntu20.04安装ROS2提示 gpg: 找不到有效的 OpenPGP 数据

添加ROS 2 apt存储库
使用以下类似的方法授权我们的GPG密钥:

sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

报错:

gpg: 找不到有效的 OpenPGP 数据。

这里主要原因就是raw.githubusercontent.com是外网地址(需要over墙)

解决办法:

通过浏览器出去(github有链接包,或者百度)打开https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc

  1. 下载密钥
    右键网页,选择另存为文本,命名为ros.asc
  2. 这是我从githubusercontent.com下载的证书,基本证书内容都一样,可以参考。
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFzvJpYBEADY8l1YvO7iYW5gUESyzsTGnMvVUmlV3XarBaJz9bGRmgPXh7jc
VFrQhE0L/HV7LOfoLI9H2GWYyHBqN5ERBlcA8XxG3ZvX7t9nAZPQT2Xxe3GT3tro
u5oCR+SyHN9xPnUwDuqUSvJ2eqMYb9B/Hph3OmtjG30jSNq9kOF5bBTk1hOTGPH4
K/AY0jzT6OpHfXU6ytlFsI47ZKsnTUhipGsKucQ1CXlyirndZ3V3k70YaooZ55rG
aIoAWlx2H0J7sAHmqS29N9jV9mo135d+d+TdLBXI0PXtiHzE9IPaX+ctdSUrPnp+
TwR99lxglpIG6hLuvOMAaxiqFBB/Jf3XJ8OBakfS6nHrWH2WqQxRbiITl0irkQoz
pwNEF2Bv0+Jvs1UFEdVGz5a8xexQHst/RmKrtHLct3iOCvBNqoAQRbvWvBhPjO/p
V5cYeUljZ5wpHyFkaEViClaVWqa6PIsyLqmyjsruPCWlURLsQoQxABcL8bwxX7UT
hM6CtH6tGlYZ85RIzRifIm2oudzV5l+8oRgFr9yVcwyOFT6JCioqkwldW52P1pk/
/SnuexC6LYqqDuHUs5NnokzzpfS6QaWfTY5P5tz4KHJfsjDIktly3mKVfY0fSPVV
okdGpcUzvz2hq1fqjxB6MlB/1vtk0bImfcsoxBmF7H+4E9ZN1sX/tSb0KQARAQAB
tCZPcGVuIFJvYm90aWNzIDxpbmZvQG9zcmZvdW5kYXRpb24ub3JnPokCVAQTAQoA
PhYhBMHPbjHmut6IaLFytPQu1vurF8ZUBQJc7yaWAhsDBQkDwmcABQsJCAcCBhUK
CQgLAgQWAgMBAh4BAheAAAoJEPQu1vurF8ZUkhIP/RbZY1ErvCEUy8iLJm9aSpLQ
nDZl5xILOxyZlzpg+Ml5bb0EkQDr92foCgcvLeANKARNCaGLyNIWkuyDovPV0xZJ
rEy0kgBrDNb3++NmdI/+GA92pkedMXXioQvqdsxUagXAIB/sNGByJEhs37F05AnF
vZbjUhceq3xTlvAMcrBWrgB4NwBivZY6IgLvl/CRQpVYwANShIQdbvHvZSxRonWh
NXr6v/Wcf8rsp7g2VqJ2N2AcWT84aa9BLQ3Oe/SgrNx4QEhA1y7rc3oaqPVu5ZXO
K+4O14JrpbEZ3Xs9YEjrcOuEDEpYktA8qqUDTdFyZrxb9S6BquUKrA6jZgT913kj
J4e7YAZobC4rH0w4u0PrqDgYOkXA9Mo7L601/7ZaDJob80UcK+Z12ZSw73IgBix6
DiJVfXuWkk5PM2zsFn6UOQXUNlZlDAOj5NC01V0fJ8P0v6GO9YOSSQx0j5UtkUbR
fp/4W7uCPFvwAatWEHJhlM3sQNiMNStJFegr56xQu1a/cbJH7GdbseMhG/f0BaKQ
qXCI3ffB5y5AOLc9Hw7PYiTFQsuY1ePRhE+J9mejgWRZxkjAH/FlAubqXkDgterC
h+sLkzGf+my2IbsMCuc+3aeNMJ5Ej/vlXefCH/MpPWAHCqpQhe2DET/jRSaM53US
AHNx8kw4MPUkxExgI7Sd
=4Ofr
-----END PGP PUBLIC KEY BLOCK-----

将上述密钥保存成ros.asc,放在主目录文件夹中就可以了(如果这地方不会,请看下面)。

在终端键入:

sudo apt-key add ros.asc

显示OK即可。
如何在Ubuntu里创建ros.asc文件呢?

  • 打开主目录
    根目录文件介绍,见Linux下Ubuntu根目录说明

    可用pwd命令查看,也可用 cd ~ 命令快速跳转到家目录
    
  • 创建ros.asc文件。
    一共有三种方式来创建文件。(这里直接用方法1就可以了)

    1. touch命令:touch 文件名.后缀
      在当前工作目录底下新建一个文件,如

      touch velocity_publisher.cpp
      
    2. gedit命令:gedit 文件名.后缀
      打开一个新的文件,如果没有输入内容直接关掉,该文件没有保存,输入了内容,才可以保存下来
      gedit命令必须修改文件权限。

      gedit velocity_publisher.cpp
      
    3. vim命令:vim 文件名.后缀
      我的系统提示要先安装Vim

      sudo apt install vim 
      

      查看帮助的方式:终端输入 vim , 敲击回车键(enter/return) ,进入 VIM , 键盘输入 :help

  • vim指令打开文件,并编辑文件信息。相关vim操作见 vim操作指令大全
    在 Linux 中使用 vim 时,输入 vim ros.asc,按下回车。就进入到文件中去了。 输入好文件内容之后:

    	按 ESC,左下角就可以进行输入
    	:w 保存但不退出
    	:wq 保存并退出
    	:q 退出
    	:q! 强制退出,不保存
    	:e! 放弃所有修改,从上次保存文件开始再编辑命令历史
    

    该步骤就完成了。

其实,在解决这个问题之前我是尝试了另外一种方法。但是,好像没用。这里我还是写一下吧。

问题1补充:docker:如果提示gpg: 找不到有效的 OpenPGP 数据。先添加pgp key

  1. 安装curl

  2. 获取并安装docker

    sudo curl -fsSL https://get.docker.com/| sh
    

    如果提示gpg: 找不到有效的 OpenPGP 数据。先添加pgp key

    sudocurl -fsSL https://get.docker.com/gpg | sudo apt-key add -
    

    再执行获取包的命令,在国内网络问题可能安装失败,因为已经添加过源列表,可以直接执行

    sudo apt-get update
    sudo apt-get install docker-engine
    
  3. 测试docker

    docker run hello-world
    

    这里如果出现下面的文字说明安装成功:

    hello-world from doker
    
  4. 相关问题
    如果出现这个错误:Cannot connect to the Docker daemon. Is the docker daemon running on this host?的解决方法:

    先执行命令docker daemon 看出现什么错误

    FATA[0000] Error starting daemon: Devices cgroup isn’t mounted

    该错误是因为我们系统未打开cgroup引起的(Cgroup: control group是将任意进程进行分组化管理的Linux内核功能,具体百度)

    解决方法:

    修改grub文件,打开cgroup,重启系统

    编辑/etc/default/grub:将GRUB_CMDLINE_LINUX设置为
    GRUB_CMDLINE_LINUX=“cgroup_enable=memory swapaccount=1”

    sudo update-grub
    reboot
    docker version
    

1.1.4 安装

首先,确保您的 Debian 软件包索引是最新的:

sudo apt update

现在选择您要安装什么类型的 ROS:

  1. Desktop-Full Install (Recommended):中的所有内容以及 2D/3D 模拟器和 2D/3D 感知包

    sudo apt install ros-noetic-desktop-full
    
  2. Desktop Install:在一切ROS-基地加工具,如RQT和rviz

    sudo apt 安装 ros-noetic-desktop
    
  3. ROS-Base(Bare Bones) : ROS 打包、构建和通信库。没有 GUI 工具。

    sudo apt install ros-noetic-ros-base
    

ROS 中还有更多可用的软件包。您始终可以直接安装特定的软件包。

sudo apt install ros-noetic-PACKAGE

例如

sudo apt install ros-noetic-slam-gmapping

要查找可用的软件包,请参阅ROS 索引或使用:

apt search ros-noetic

这地方可能会出现的问题:

问题1:安装ros报错:ros-kinetic-desktop-full : 依赖: ros-kinetic-desktop 但是它将不会被安装等
安装ros报错:

有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

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

解决方案:
这种解决方法其实不是很好,搞不好会直接导致系统重装。这里需要等待很长时间。我是两次执行下面的代码,才搞好的。如果不用此方法,可以查考这个解决方案:Ubuntu20.04安装ROS Neotic修复依赖问题过程记录。但是,个人尝试后发现好像没有效果。不过,可能是我软件更新器的问题。这里我还遇到一个问题:

	sudo apt-get install aptitude	
	sudo aptitude install ros-kinetic-desktop-full
	# 点击Y
	# 然后再次安装

问题2:GPG 错误:http://ppa.launchpad.net/git-core/ppa/ubuntu xenial InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY A17
错误如下:

GPG 错误:http://ppa.launchpad.net/git-core/ppa/ubuntu xenial InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY A1715D88E1DF1F24
W: 仓库 “http://ppa.launchpad.net/git-core/ppa/ubuntu xenial InRelease” 没有数字签名。

在这里插入图片描述

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A1715D88E1DF1F24

注意最后一串数字字母改成自己的那个失效的:NO_PUBKEY A1715D88E1DF1F24

运行结果如下:
在这里插入图片描述
最后就成功了:
在这里插入图片描述

1.1.5 环境设置

您必须在使用 ROS 的每个bash终端中获取此脚本。

source /opt/ros/noetic/setup.bash

每次启动新的 shell 时,自动获取此脚本的源代码会很方便。这些命令将为您执行此操作。

  1. Bash

如果您安装了多个 ROS 发行版,~/.bashrc必须只为您当前使用的版本提供setup.bash。

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

1.1.6 构建包的依赖项

到目前为止,您已经安装了运行核心 ROS 包所需的东西。要创建和管理您自己的 ROS 工作区,有各种单独分发的工具和要求。例如,rosinstall是一种常用的命令行工具,它使您可以通过一个命令轻松下载 ROS 包的许多源代码树。

要安装此工具和其他用于构建 ROS 包的依赖项,请运行:

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

初始化 rosdep
在您可以使用许多 ROS 工具之前,您需要初始化rosdep。rosdep使您可以轻松地为要编译的源安装系统依赖项,并且需要在 ROS 中运行一些核心组件。如果您尚未安装rosdep,请按以下步骤安装。

sudo apt install python3-rosdep

使用以下内容,您可以初始化rosdep。

sudo rosdep init
rosdep update

1.2 测试

1.2.1 测试环境配置

env | grep ROS  

在这里插入图片描述
完成完整的 ROS 安装之后,可以对安装做一个简单的测试。可以通过 roscoreturtlesim 来做测试。

接下来进行小乌龟测试;

注意 turtlesim 的运行依赖于 roscore 的运行,因此在测试 turtlesim 需要同时运行 roscore

1.2.2 小海龟测试

小海龟测试需要依次打开三个新的命令行窗口:

窗口1:打开新窗口快捷键:Ctrl + Alt +T

roscore

窗口2:此时会跳出一个TurtleSim 小乌龟的控制窗口

rosrun turtlesim turtlesim_node

窗口3:调用键盘控制。使用键盘方向键对小海龟进行控制。

切记,鼠标光标一定要聚焦在下方的3窗口中,方能通过键盘控制乌龟动起来哦。

rosrun turtlesim turtle_teleop_key

在这里插入图片描述

1.3 其他可能的问题

问题1:提示“下载软件仓库信息失败,检查您的internet连接”,手动检查更新
在这里插入图片描述
解决办法:

打开Ubuntu的终端,输入

sudo gedit /etc/apt/sources.list

删掉里边所有旧的内容,把新的源列表内容贴进去

再执行:

sudo apt-get update

就可以生效。

猜你喜欢

转载自blog.csdn.net/qq_51899357/article/details/120894240