ROS安装全流程
一 前言
笔者到目前为止,已经在不同版本的Ubuntu系统下反复安装了多次ROS软件包,考虑到每次重新安装ROS都需要在网络中查找大量的参考资料,非常麻烦,所以笔者决定结合自身过往的安装过程,将自身遇到的问题和对应的解决方法记录下来,不仅方便自己日后安装ROS,也能帮助其他尝试安装ROS的人少走一些弯路。具体安装流程如下所述,如果能够对各位看官老爷有所有所帮助的话,就麻烦各位看官老爷点赞、收藏加关注了。
二 配置Ubuntu系统软件源
2.1 安装环境
本文对应安装环境为DELL G16 7630 + Ubuntu 20.04.6
此时系统的软件源为默认的软件源,用户想要下载或更新软件就必须要访问国外的服务器,下载速度慢不说,甚至还有可能被拒绝访问,只有登录外网才能稳定下载软件和更新。幸好国内有许多业内顶尖团队开发出了高质量的免费镜像网站,通过它们我们就能够快速下载对应的软件以及更新了。
目前主流的镜像网站分为三种
第一种是阿里云推出的开源镜像站:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
第二种是中科大推出的开源镜像站:USTC Open Source Software Mirror
第三种是清华大学推出的开源镜像站:清华大学开源软件镜像站 | Tsinghua Open Source Mirror
在文章Ubuntu系统镜像下载,国内镜像站大全(山大/清华/阿里/浙大/中科大…)中记录了国内其他的一些开源镜像站,在此不进行赘述。
2.2 配置系统官方软件源
进入清华大学开源软件镜像站 | Tsinghua Open Source Mirror,在提供的镜像列表中找到ubuntu选项,如上图所示,点击那个问号,进入到使用帮助界面。
如上图所示,在该界面中调整Ubuntu的版本为Ubuntu20.04LTS(用户使用的系统版本),复制界面中的软件源配置内容
进入系统终端,输入以下命令
# 复制原有的软件源配置文件到桌面
cp /etc/apt/sources.list ~/Desktop
# 编辑系统当前的软件源配置文件
sudo gedit /etc/apt/sources.list
将sources.list文件中的内容替换为上文中复制的软件源配置内容,保存,此时ubuntu系统的官方软件源已经替换为清华镜像网站,用户可以自由下载Ubuntu系统所需要的软件和更新。但如果想要下载ROS软件包,还需要额外添加第三方软件源。
2.3 配置第三方(ROS)软件源
还是进入到清华大学开源软件镜像站 | Tsinghua Open Source Mirror,在提供的镜像列表中找到ros选项,如上图所示,点击那个问号,进入到使用帮助界面。
如上图所示,在ROS软件仓库镜像使用帮助界面中调整系统版本为Ubuntu20.04LTS(用户使用的系统版本),复制界面中的软件源配置内容,不必理会界面中提示你输入的命令。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ focal main
在替换成功之后的sources.list文件末尾添加ROS的软件源地址,此时sources.list文件内容如上所示,保存文件并退出。
sudo touch /etc/apt/sources.list.d/ros-latest.list
sudo gedit /etc/apt/sources.list.d/ros-latest.list
# 在文件中黏贴之前复制的ROS源,保存并退出
如果不希望直接在Ubuntu系统官方软件源文件(sources.list)中混入第三方软件源(ROS),那可以在sources.list.d文件夹中新建一个ROS的软件源配置文件ros-latest.list,并将清华镜像站中的ROS软件源存储到该文件中,不必在sources.list文件末尾添加ROS软件源。具体指令过程如上所示。
sudo apt update
成功配置好系统软件源之后,在终端中键入以上命令,更新系统软件包索引。
三 安装ROS
3.1 配置公钥
#生成公钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新软件包索引
sudo apt update
如果想要让系统安装ROS,就必须要先去公钥服务器生成公钥,更新系统的软件包索引,让系统信任ROS软件源,具体命令如上所示。如果成功生成公钥,终端内容如下所示。
user@user-Dell-3579:~/Desktop$ sudo apt-get update
Executing: /tmp/apt-key-gpghome.qZuk0VBa87/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
gpg: key F42ED6FBAB17C654: public key "Open Robotics <info@osrfoundation.org>" imported
gpg: Total number processed: 1
gpg: imported: 1
user@user-Dell-3579:~/Desktop$ sudo apt-get update
Hit:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease
Hit:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease
Hit:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done
3.2 ROS版本选取
ROS版本 | Ubuntu版本 |
---|---|
Noetic | Ubuntu 20.04 |
Melodic | Ubuntu 18.04 |
Kinetic | Ubuntu16.04 |
Indigo | Ubuntu14.04 |
ROS自诞生以来发布过很多个版本,分别对应着不同版本的Ubuntu系统,用户在安装前一定要先确认自身系统的版本,选择其对应的ROS软件包,一旦选错,安装过程肯定会出现问题,部分ROS与Ubuntu系统的版本对应关系如上所示。
笔者使用的系统为Ubuntu 20.04系统,对应的是ROS Noetic。ROS Noetic是ROS1中的最后一个版本,也是ROS1和ROS2之间的一个过渡版本。
3.3 二进制安装ROS
ROS软件包包含了许多的函数库和工具包,所以在二进制下载过程中,用户根据自身需要选择合适的方法下载ROS软件包,截至目前有四种不同的安装方式。
第一种 桌面完整版安装
sudo apt install ros-noetic-desktop-full
使用该安装方式能够安装ROS及其附带的所有库,包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能,安装时间会长一些,大概用了3、4个G,笔者就是使用上述命令安装的ROS桌面完整版。
第二种 桌面版安装
sudo apt install ros-noetic-desktop
使用该安装方式能够安装ROS、rqt、rviz、通用机器人函数库。
第三种 基础版安装
sudo apt install ros-noetic-ros-base
仅仅只包含ROS核心软件包、构建工具、通信相关的程序库,无GUI工具,不过安装速度很快,也不占用太大的空间
第四种 指定软件包安装
sudo apt install ros-noetic-ros-PACKAGE
用户使用该安装方式能够安装指定的ROS软件包,上述指令中的PACKAGE指代的是用户想要安装的软件包的名称。如果不太清楚软件包的具体名称,用户可以使用如下命令查找可用的ROS包。
apt-cache search ros-noetic
四 ROS相关配置
4.1 初始化rosdep
sudo apt install python3-rosdep
rosdep是ROS软件包运行的基础,一些ROS核心组件的运行都需要用到它,并且它还能在用户编译ROS源码时自动检查和安装对应的依赖。在终端输入以上命令,用户能够成功安装rosdep了。
sudo rosdep init && rosdep update
接下来我们需要初始化并更新rosdep,对应的终端指令如上,这一步经常会出现问题,网络中关于这个问题的解决方法也有很多,我之前也遇到过几次,但是不知道为什么我这次使用命令反而很顺利,一次性就成功了,成功时终端界面内容如下图所示。
user@user-Dell-3579:~/Desktop$ sudo rosdep init && rosdep update
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Skip end-of-life distro "foxy"
Skip end-of-life distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Add distro "iron"
Skip end-of-life distro "jade"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Skip end-of-life distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/fly/.ros/rosdep/sources.cache
如果各位在这一步出现了问题的话,可以看看文章末尾关于这个问题的解决方法。事实上,根据笔者自身的实际体验,即使不进行这一步也不会影响ROS的正常使用。
4.2 安装依赖工具包
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
截至目前,ROS 的核心程序包已经安装成功,但是为了更好地构建和管理开发者自己的 ROS 工作空间,我们需要再额外安装一些 ROS 依赖的工具包,比如rosinstall和wstool,具体安装指令如上所示。部分版本的ROS安装这些工具包时,可能需要将上述软件包名称中的python3替换为python。
4.3 配置ROS环境变量
此时ROS的安装工作都已经完成,但是如果想要在以普通用户的权限使用ROS就需要.bashrc内添加ROS相关的环境变量,否则会提示你找不到该命令。
# 导入ROS环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
# 立即刷新终端当前的环境
source ~/.bashrc
在终端中输入以上命令,就能够彻底将ROS嵌入到系统中,第一行命令本质上是在 .bashrc 文件末尾添加 source /opt/ros/noetic/setup.bash这一行命令,以便每次启动终端时都会默认激活ROS。
至此,ROS的安装工作已经完成,为确保ROS安装过程中没有出现问题,我们需要对ROS进行一些简单的测试。
五 ROS测试
5.1 查看ROS版本
rosversion -d
在终端中输入以上命令,如果ROS成功安装,那么会显示系统当前安装的ROS版本(比如noetic)。
5.2 运行turtlesim
第一步,启动roscore
roscore
在终端中输入以上命令,如果ROS成功安装,那么终端会显示以下内容
... logging to /home/fly/.ros/log/209d0f14-2f6e-11ee-97dc-8787e7df2d53/roslaunch-fly-Dell-G16-7630-33464.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://fly-Dell-G16-7630:34131/
ros_comm version 1.16.0
SUMMARY
========
PARAMETERS
* /rosdistro: noetic
* /rosversion: 1.16.0
NODES
auto-starting new master
process[master]: started with pid [33477]
ROS_MASTER_URI=http://fly-Dell-G16-7630:11311/
setting /run_id to 209d0f14-2f6e-11ee-97dc-8787e7df2d53
process[rosout-1]: started with pid [33487]
started core service [/rosout]
第二步,运行turtlesim结点
rosrun turtlesim turtlesim_node
另开一个终端,在其中输入以上命令,正常情况下会显示以下信息。
[ INFO] [1690878977.127981832]: Starting turtlesim with node name /turtlesim
[ INFO] [1690878977.130397796]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
与此同时,会弹出一个窗口,窗口如下所示,背景为蓝色,中心处是一个静止不动的海龟(海龟的类型可能不一样)。
第三步,运行turtlesim键盘控制结点
rosrun turtlesim turtle_teleop_key
再开启一个终端,在其中输入以上命令,终端会显示以下信息。用户可在终端内输入方向键,控制窗口中的海龟向对应方向运动。
Reading from keyboard
---------------------------
Use arrow keys to move the turtle. 'q' to quit.
5.3 测试成功
如果上述步骤执行没有遇到任何问题,那么恭喜你,ROS已经安装完成,如果你在安装过程中遇到了什么问题的话,可以看看下一届的内容,其中包含了笔者之前遇到的一些问题以及对应的解决方法。
最后,如果这篇文章能够对各位有所帮助的话,麻烦各位点赞、收藏加关注了。
六 安装过程中出现的问题
6.1 安装ROS的过程中出现了无法定位软件包的问题
user@user-Dell-3579:~/Desktop$ sudo apt install ros-noetic-desktop-full
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ros-noetic-desktop-full
出现上述问题的原因是用户没有将ROS的软件源添加到系统的软件源配置文件中,想要解决该问题,可以参考2.3 配置第三方(ROS)软件源 这一小节的内容,将ROS软件源加入到系统中。
6.2 初始化rosdep时出现错误
user@user-Dell-3579:~/Desktop$ sudo rosdep init && rosdep update
sudo: rosdep: command not found
上述问题的出现是因为没有安装rosdep,运行以下命令就能解决这个问题
sudo apt install python3-rosdep
有些文章可能会让你安装python-rosdep或者python3-rosdep2,如果是在ubuntu20.04系统安装ROS的用户可以直接忽略这些文章,前者已经被废弃了,后者千万不要安装,一旦安装就会删除掉大量的ROS库,想要恢复就只能重装ROS了。
6.3 roscore运行出错
user@user-Dell-3579:~/Desktop$ roscore
Command ‘roscore’ not found,but can be installed with:
sudo apt install python-roslaunch
当你尝试使用roscore命令时,却突然报错并提示你安装python-roslaunch,此时你先去运行以下命令
gedit ~/.bashrc
查看该文件中是否有这么一段话“source /opt/ros/noetic/setup.bash”,如果没有,请跳转到这一节,重新配置系统的环境变量;如果有这句话,但是被注释掉了,那么你可以在.bashrc文件中删除这句话开头的"#"号,保存并退出后重新开启一个终端,再次输入roscore指令进行测试。
如果.bashrc文件中有“source /opt/ros/noetic/setup.bash”,又或者在完成上述操作之后仍旧无法使用roscore,那么可以尝试运行如下命令
sudo apt install python-roslaunch
安装成功之后,再次开启一个终端,在这个新终端中输入roscore,查看是否能够成功运行。
6.4 rosdep update 报错
这个问题出现的主要原因在于请求的raw.githubusercontent.com网站在国内不能用了,如果不在科学上网的情况下直接使用该命令往往就会报timed out的问题。目前网络中的主流解决方法是修改 /etc/ros/rosdep/sources.list.d/20-default.list 的请求地址,关于这方面的相关指令可以参考这个网站中的内容。