ROS1教程 1:ROS1安装


ROS1安装后运行小乌龟例程

作为ROS1系列教程中的第一篇文章,本文介绍了如何安装ROS1

ROS1教程 1:ROS1安装

作为ROS1系列教程的第一篇文章,本文就将介绍如何在自己的电脑上安装ROS1

1. 安装

注意,前面一篇文章中介绍了ROS1ROS2的区别,ROS1最终的版本是noetic,对应的Ubuntu系统版本为20.04Ubuntu 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'

我这里就直接用了清华源:

添加ROS1清华镜像源

1.3 添加Apt-Key

单纯添加软件的下载地址(安装源)可不行,因为网络上的攻击者可能会通过篡改地址、重定向等等技术来进行攻击,从而导致用户以为从安装源中下载的软件是ROS1,但是实际下载、安装的却是病毒。

因此,为了避免这种情况,在添加了安装源之后还需要安装源进行验证,以避免安装源指向的服务器被黑客篡改。具体验证的原理用官方发布的官方服务器的秘钥和本地添加的服务器(安装源)的秘钥进行比对、验证。

运行如下的命令:

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

这里因为我是已经添加、验证过了,所以显示的Unchanged

image-20221223002829306

1.4 下载、安装ROS1

设置完了安装源之后,接下来就要下载、安装ROS1了。

首先更新一下

sudo apt update

然后安装ROS1

sudo apt install ROS1-noetic-desktop-full

同样因为我已经安装过了,所以这里没有任何显示。一般正常情况安装可能需要30分钟左右。

下载、安装ROS1

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去下载配置信息,所以很容易失败

img

为此,要么科学上网,然后给命令行挂代理,从而避免下载失败,要么就用rosdepc

rosdepc的原理就是,因为rosdep是从Github上去下载配置信息。所以如果我们能够在国内建立一个镜像源,然后让rosdep从国内的镜像源中下载依赖就可以解决问题了。

Github上的ROS1配置信息

所以我们就可以使用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界面了,但是此时我们没有办法控制窗口中的乌龟。直到我们启动了键盘监听节点之后,我们才能够控制乌龟。

image-20221223133452281

在启动了GUI节点和键盘监听节点后,我们要使用鼠标点击键盘监听结点的窗口,即聚焦到键盘监听结点窗口上,而后按下键盘上下左右键来控制乌龟运动

屏幕录制2022-12-23 下午1.50.16


文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录