作为
ROS1
系列教程中的第一篇文章,本文介绍了如何安装ROS1
ROS1教程 1:ROS1安装
作为ROS1系列教程的第一篇文章,本文就将介绍如何在自己的电脑上安装ROS1
。
1. 安装
注意,前面一篇文章中介绍了
ROS1
和ROS2
的区别,ROS1
最终的版本是noetic
,对应的Ubuntu
系统版本为20.04
,Ubuntu 22.04
及以后的版本都仅支持ROS2
。
ROS1
系列教程文章都将在Ubuntu 20.04
上编写、验证。
1.1 介绍
ROS1
安装大致的步骤如下:
- 添加
ROS1
安装源 - 设置
key
- 下载、安装
ROS1
- 配置
ROS1
环境变量
注意,本文适用于在Ubuntu 20.04 LTS
上安装ROS1 Noetic
版本。ROS1
发行版通常是和Ubuntu
发行版绑定的,例如在Ubuntu 18.04
上只能安装ROS1 Melodic
版本,而在Ubuntu 20.04
上只能安装ROS1 Noetic
版本。所以,如果要在其他版本的Ubuntu
上安装其他版本的ROS1
的话,大体流程和原理是相通的,但具体还得你根据自己的平台和安装的版本进行修改
1.2 添加ROS1
安装源
我们平时在手机上下载一个应用程序的时候,一般都是首先需要下载一个应用商城,然后我们就能够在应用商城内下载我们需要的软件。虽然说现在一般都是买到手机之后内置了一个应用商城,但并不影响我们举这个例子去理解。
一个应用商城中不可能有所有的软件,例如在VIVO
应用商城中没有Gmail
,如果我们想要安装Gmail
,我们就得安装Google
应用商城。
同样的道理,Ubuntu
中使用的APT
这个“软件商城”(术语:包管理器
)中并不是所有软件都会有的,有的时候我们需要向其中添加软件源,这样APT
包管理器才能知道去哪下载我们要安装的软件。
ROS1
本质上还是一个框架,因此我们依旧使用APT
进行下载。但是ROS1
并不在APT
默认的下载源中,因此我们首先需要使用下面的命令添加ROS1
的下载地址(术语:安装源
)到APT
中:
sudo sh -c 'echo "deb http://packages.ROS1.org/ROS1/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ROS1-latest.list'
但是注意,上面的命令是添加官方的安装源,但是由于官方的服务器在国外,所以在国内下载就会很慢,因此国内更加推荐使用国内的镜像源。所谓镜像源指的其实就是国内的人花费比较长的时间从国外下载了之后上传到国内的服务器中供大家下载,并且保持和国外同步更新,从而加速了国内的下载。
国内可以使用清华源来安装:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ROS1/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ROS1-latest.list'
也可以使用中科大源来安装:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ROS1/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ROS1-latest.list'
我这里就直接用了清华源:
1.3 添加Apt-Key
单纯添加软件的下载地址(安装源)可不行,因为网络上的攻击者可能会通过篡改地址、重定向等等技术来进行攻击,从而导致用户以为从安装源中下载的软件是ROS1
,但是实际下载、安装的却是病毒。
因此,为了避免这种情况,在添加了安装源之后还需要安装源进行验证,以避免安装源指向的服务器被黑客篡改。具体验证的原理用官方发布的官方服务器的秘钥和本地添加的服务器(安装源)的秘钥进行比对、验证。
运行如下的命令:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
这里因为我是已经添加、验证过了,所以显示的Unchanged
1.4 下载、安装ROS1
设置完了安装源之后,接下来就要下载、安装ROS1
了。
首先更新一下
sudo apt update
然后安装ROS1
sudo apt install ROS1-noetic-desktop-full
同样因为我已经安装过了,所以这里没有任何显示。一般正常情况安装可能需要30分钟左右。
1.5 配置环境变量
最后,需要配置一下ROS1
相关的环境变量,这样我们后面在编译程序的时候,能够找到ROS1
的库。
对于Bash
用户,使用下面的命令来添加环境变量
echo "source /opt/ROS1/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
对于Zsh
用户,使用下面的命令来添加环境变量
echo "source /opt/ROS1/noetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc
1.6 配置ROS1依赖
因为ROS1
包含了非常多的软件包,而我们上面在下载的时候只是下载了ROS1
最基础的组件,还有更多的组件是我们用到了才会去下载,例如我们的机器人中有激光雷达的话,我们才会去下载激光雷达相关的组件。因此,这一步就是先配置ROS1各个组件之间的依赖关系。
ROS1
中专门有一个rosdep
,来配置ROS1
的各种组件之间的依赖关系。
首先安装构建依赖的相关工具:
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
然后安装rosdep
sudo apt install python3-rosdep
安装完了rosdep
之后,利用rosdep
来初始化依赖
sudo rosdep init
rosdep update
配置成功的话,会显示下面的信息
但是上面这两步经常出错,因为这两步都会从Github
去下载配置信息,所以很容易失败
为此,要么科学上网,然后给命令行挂代理,从而避免下载失败,要么就用rosdepc
。
rosdepc
的原理就是,因为rosdep
是从Github
上去下载配置信息。所以如果我们能够在国内建立一个镜像源,然后让rosdep
从国内的镜像源中下载依赖就可以解决问题了。
所以我们就可以使用rosdepc
这个使用国内镜像源的依赖工具。
首先安装rosdepc
sudo pip install rosdepc
sudo pip3 install rosdepc
然后使用rosdepc
来更新依赖
sudo rosdepc init
rosdepc update
2. 测试
安装完了之后我们要测试一下ROS1
是否能够正常运行。为此,我们运行ROS1
内置的程序
下面的命令要使用三个命令行来运行,因为一个机器人,想要正常运行的话,肯定是需要多个不同的进程相互配合的,例如:有的进程负责视觉,有的进程负责运动,有的进程负责定位和导航。而ROS1
就是负责统一去管理这些进程的框架。
ROS1
中将每个进程抽象为一个节点,而将各个进程之间的数据交互和配合视为节点之间的链接。从而实现了用节点图来描述机器人的正常运行状态。
我们这里没有真实的机器人,所以我们主要测试看看我们安装的ROS1
能否正常运行启动多个节点,构成节点图。开三个终端,分别运行下面的命令:
roscore # 启动ROS1管理器
rosrun turtlesim turtlesim_node # 启动第一个节点,GUI节点
rosrun turtlesim turtle_teleop_key # 启动第二个节点,键盘监听节点
事实上启动了GUI
节点之后,就会显示GUI界面了,但是此时我们没有办法控制窗口中的乌龟。直到我们启动了键盘监听节点之后,我们才能够控制乌龟。
在启动了GUI
节点和键盘监听节点后,我们要使用鼠标点击键盘监听结点的窗口,即聚焦到键盘监听结点窗口上,而后按下键盘上下左右键来控制乌龟运动