Linux 流畅安装 ROS2

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」mp.weixin.qq.com/s/YVfdF7fkn...

环境准备

Linux 在国内运用得很广泛,尤其在嵌入式领域,而嵌入式在机器人开发方向用的比较多的还是基于 Ubuntu 发行版,虽然一般需要裁剪掉冗余的功能,而写作的时候主流版本集中在 16、18 这两个版本上。本文系统平台以 Ubuntu 18.04 x64 为例。

多亏了交叉编译器,开发的过程不需要依赖调试板,可以直接用虚拟机安装桌面版的 Ubuntu 并在其中编译调试程序,不建议物理主机安装多系统,因为容易弄坏主系统。我这里使用 VMware Workstation Payer,八戒介绍给大家的都是安全可靠的,关于版权问题无需担心,个人用户可以免费注册使用这套软件。

在虚拟机安装好 Ubuntu 系统之后,登录系统后先不要随意安装软件或者更新系统,有些软件版本可能和下面要安装的 ROS 系统有兼容性问题,为避免节外生枝,先搞定我们的 ROS2 安装过程,我们的目标是最大限度流畅体验!

切换安装源

在 Linux 生态下,有无数的个人和组织在贡献各种功能的软件,无论是源码或者可执行包,那么如此多的软件包,在用户端如何去下载使用和管理呢?

这需要有包管理系统的辅助,其中在 Ubuntu 这种基于 Debian 的 Linux 发行版或者直接就是 Debian 发行版,一般安装软件包都是倾向于使用包管理器 dpkg,而 apt 就是 dpkg 的前端命令行工具。为避免罗嗦,下面说的 apt 其实就是指 dpkg。

使用 apt 这类包管理系统下载或者更新已有软件包时,会从 apt 的服务器下载数据,官方 apt 服务器在墙外,由于众所周知的网络限制,相信墙内的小伙伴们都体验过跨墙的痛苦了。那么就有一批人为了墙内的同学们使用和学习方便,在墙内拷贝了一批 apt 服务器资源的镜像,镜像会定期从官方服务器拉取数据资源。当你的本地系统配置了包管理器的安装源为镜像源,那么使用包管理器安装软件包时,会自动改为从镜像源下载资源,免去了跨墙的网络阻滞。

而墙内使用率比较高的镜像源有清华大学镜像、阿里云镜像、中科大镜像等等。

经过以前的折腾(上一次是在本地安装 ROS1),最近项目需要切换到了 ROS2, 顺带摸清了使用包管理器可以最大化流畅安装 ROS2,但需要把包管理器的安装源切换到墙内的镜像。下面以清华的镜像源为例。

Ubuntu 的软件源配置文件是 /etc/apt/sources.list。先将系统自带的该文件做个备份,然后再将下面的内容覆盖原有文件内容,即可切换成功。

arduino 复制代码
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

安装

字符支持 UTF-8

在本地化字符信息配置中,ROS2 要求必须支持 UTF-8。如果你不确定自己的环境是否符合要求,可以用下面的指令来测试一下,并根据模板文件更新本地化字符信息

ini 复制代码
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

设置 ROS2 安装源

既然安装 ROS2 过程中选择使用包管理器 apt,那么需要将 apt 的 ROS2 的安装源路径添加到系统中。要做到这一点,首先为 apt 添加授权 ROS2 仓库的 GPG 密钥

arduino 复制代码
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 -

关于第二条指令中需要访问域名 raw.githubusercontent.com,在墙内极有可能会失败,那么你可以在公众号后台回复关键词【ros.asc】,我已经帮你上传到云端,这样你就可以大概率地快速获取到文件 ros.asc。下载好该文件,存放到当前目录,可以把第二条指令改为

bash 复制代码
sudo apt-key add ./ros.asc

然后,把 ROS2 的仓库路径添加到 apt 的源列表中

less 复制代码
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

有的同学会发现安装源信息不是被写到 /etc/apt/sources.list 了,而是存到目录 /etc/apt/sources.list.d/ 中的新添加文件 ros2-latest.list。

/etc/apt/sources.list.d/ 这目录有什么用?一切都是为了避免所有的安装源配置信息都集中记录在同一个文件(/etc/apt/sources.list)里,这样确实比较难管理,于是在较新版本的系统中就有了这个文件夹,根据不同的软件分别有对应的文件记录各自的安装源,并存放在该文件夹下。

安装 ROS2 包

Ubuntu 18.04 能支持的 ROS2 最高版本是 crystal。下面以安装 ROS2 crystal 为例。为了方便后边的指令,先将版本信息 crystal 赋值到变量 CHOOSE_ROS_DISTRO

ini 复制代码
export CHOOSE_ROS_DISTRO=crystal

更新安装库缓存

sql 复制代码
sudo apt update

我这里安装桌面版,功能比较完整,其中包含了 ROS, RViz, demos, tutorials 等资源,和基础版的区别是多了 GUI 相关的模块

bash 复制代码
sudo apt install ros-$CHOOSE_ROS_DISTRO-desktop

如果你不想安装 GUI 相关的模块,可以换成下面这样,其中包含了通信组件、消息包和命令行工具等

bash 复制代码
sudo apt install ros-$CHOOSE_ROS_DISTRO-ros-base

到这里整个安装 ROS2 就完成了,过程大概率是不会再报错了,除非你的网络状态真的太烂!还有在我的公众号是可以拿到相当多资源的。

卸载

本文的主题是安装 ROS2,但是这里也略带介绍一下卸载的指令,以后有需要可以使用

arduino 复制代码
sudo apt remove ros-crystal-* && sudo apt autoremove

玩起来

启动环境

使用 ROS2 是通过指令 ros2 来操作,但是在打开命令行终端后,默认是找不到指令 ros2 的,需要先启动环境

bash 复制代码
source /opt/ros/crystal/setup.bash

如果你比较频繁依赖环境,可以把上面的操作追加到 ~/.bashrc 文件末尾,这样在当前用户打开命令行终端后就会自动启动环境。

bash 复制代码
echo "source /opt/ros/crystal/setup.bash" >> ~/.bashrc

试一下 demo 程序

ROS2 同时支持 C++ 和 Python,下面我们同时玩一下这两种语言的 demo,需要启动两个终端,分别运行 demo 程序,一个用于发送信息,另一个用于接收并显示信息。

启动 C++ 版本的 talker,发送信息

arduino 复制代码
ros2 run demo_nodes_cpp talker

启动 Python 版本的 listener,接收信息

arduino 复制代码
ros2 run demo_nodes_py listener
相关推荐
云空1 小时前
《解码机器人操作系统:从核心架构到未来趋势的深度解析》
架构·机器人
虾..2 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙2 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1234 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen5 小时前
Linux字符串处理
linux·string
张童瑶5 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1235 小时前
什么是SELinux
linux
石小千5 小时前
Linux安装OpenProject
linux·运维
柏木乃一5 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-30905 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu