树莓派搭建 Ubuntu ROS 环境

Linux 环境搭建

版本选择

给树莓派安装操作系统需要考虑到应用需求以及树莓派本身的硬件条件。树莓派自身支持包括Raspberry、Ubuntu、Apertis、RISC OS 在内的诸多操作系统(在民间大神的手中这个范围还可以扩一扩)。Raspberry 是树莓派官方支持的操作系统,专为树莓派硬件定制;Ubuntu 是一个基于 Debian 的开源 Linux 操作系统,有着丰富的软件生态支持以及良好的系统稳定性;Apertis 也是基于 linux 的开源操作系统,专为嵌入式系统和物联网设备设计;RISC OS 是以 RISC 架构的早期实现之一,早年曾普及于教育以及家庭计算机市场。

因为笔者需要在树莓派上运行 ROS 系统,所以在操作系统上选择了对 ROS 支持比较好的 ubuntu。另外,因为 ROS 与 Ubuntu 也需要考虑到版本兼容,这里选择 Ubuntu 20.04 LTS 与 ROS Noetic Ninjemys。Ubuntu 20.04 LTS 与 ROS Noetic Ninjemys 分别属于 Ubuntu 与 ROS1 的长期支持(LTS)版本,长期支持意味着该版本会具有较长时间的技术支持、更高的系统稳定性、广泛的软硬件支持等。Noetic Ninjemys 于 2020 年 5 月发布,它专为与 Ubuntu 20.04 LTS配合使用而设计。ubuntu 也可以分为 Desktop 或 server 版本,Desktop 版本的 ubuntu 支持图形化界面,也对一些硬件如打印机、摄像头等有着广泛支持,server 版本不支持图形化界面,不过对硬件资源的使用上比较高效。因为使用 ros 过程中往往需要在图形化界面上进行模拟,所以有限选择 Desktop 版本(对内存容量有要求,树莓派内存容量尽量大于等于 4G)。最后,ubuntu 的版本还分为 32bit 与 64bit,32位(32bit)和64位(64bit)指的是操作系统和处理器(CPU)的架构类型。这两个术语涉及到计算机如何存储和处理数据,尤其是与内存(RAM)的交互方式有关。树莓派4B搭载的Broadcom BCM2711 SoC是基于ARM Cortex-A72(64位)架构的四核处理器,这意味着它设计用于运行64位操作系统,并且可以充分利用处理器的性能,所以建议选择 64 位版本的 ubuntu。

结合以上,应该优先选择安装 Ubuntu Desktop 20.04 LTS(64-bit),但是由于笔者在系统烧录后, 该系统始终无法正常开机,多番努力无果后,退而求其次,选择了 Ubuntu Server 20.04 LTS(64-bit)。因为通过指令安装对 Server 版本安装桌面,所以问题不大。另外,Desktop 版本相比 Server 版本,除了比较有用的桌面以外,还夹杂了不少其它对 ROS 开发毫无用处的软件,通过安装Server 版本可以避免不必要软件带来的系统资源浪费,这对于资源比较紧缺的树莓派来说,可以说是蔡翁失马,焉知非福了。接下来也将基于 Server 对环境进行搭建。

系统烧录

系统烧录是环境搭建的第一步,系统烧录就是将 Ubuntu 镜像(操作系统软件)烧录(下载)到一张 SD 卡上。进行系统烧录需要先准备好树莓派 4b(内存大于等于 4G)、读卡器SD 卡(大于等于16G)、树莓派镜像烧录软件(官网下载链接Raspberry Pi OS – Raspberry Pi)。

你可以选择官方树莓派镜像烧录软件或其他第三方软件在树莓派上烧录系统。由于官方烧录软件通常更可靠,因此我更推荐推荐使用官方软件。下面是使用官方烧录软件的烧录流程:

  1. 将插有 SD 卡的读卡器连接电脑。
    1. 格式化 SD 卡为 FAT32 格式。SD 卡有众多格式,比如 FAT32、NTFS、exFAT 等等,不同的格式对应不同的储存需要,烧录镜像一般需要 FAT32 格式(FAT32 格式化教程sd卡格式化怎么成FAT32格式 ?- 知乎 (zhihu.com))。
    2. 弹出 SD 卡,再次连接电脑。

  1. 打开树莓派镜像烧录软件。
  2. 配置树莓派镜像烧录软件选项。中间的三个选项,从左向右依次为树莓派版本选择、操作系统选择与 SD 卡位置。
    1. 笔者手上的是树莓派4b,所以树莓派版本直接选择 Raspberry Pi 4。
    2. 操作系统选择栏不仅支许多常见操作系统流行版本的联网下载(有时比较慢),还可以通过这个选项选择本地的操作系统镜像。Ubuntu Server 20.04 LTS(64-bit)版本可以通过官网烧录软件联网下载,无需自己在网上寻找镜像文件,烧录该系统需要依次点击选择操作系统Other general-purpose OS→Ubuntu→Ubuntu Server 20.04 LTS(64-bit)
    3. 选择 SD 卡所在文件路径。

    1. Server 版本为了方便做一些基本配置,在第一次按下 NEXT 会出现上面配置操作系统的界面,询问是否通过默认设置进行烧录。笔者建议自己进行编辑,因为这些设置中的用户名、密码以及 WIFI 功能等都比较重要,使用默认设置难以达到自身需要。用户名与密码都设置为自己比较熟悉即可(Server 版本每次开机都需要在命令行终端输入用户名以及密码,Desktop 版本只需要输入密码,另外,Ubuntu 中的很多服务都需要输入密码进行身份验证,所以用户名和密码必须牢记),WIFI 配置决定树莓派主机首次开机联网对象(因为连接校园网一般需要进行学号验证,无法直连,所以不建议在这里填写校园网),勾选开启 SSH 服务以及对应的使用密码登录。

  1. 再次按下 NEXT,等待烧录完成。
  2. 烧录完成,拔出读卡器,将 SD 卡插入树莓派。

输出/入与网络连接

做完前面的工作,树莓派总算是有肉体(树莓派硬件)和灵魂(Ubuntu)了,但是现在的它没有输入输出,眼瞎又耳聋。需要给它连接一套键鼠、显示器,以及配置好网络,才能充分发挥它的本领。

连接输入/出设备

连接键鼠要注意键鼠与树莓派的 USB 接口协议要匹配,树莓派 4b 支持两个 USB3.0 和两个 USB2.0 接口,一般来说,现在的键鼠都是基于 USB3.0 协议,所以直接将键鼠的线连接到树莓派对应的 3.0 接口上就好。Server 版本不直接支持桌面系统,它与人的交互通过命令行界面完成,而要让命令行界面显示,也需要显示器!当然也有直接让树莓派通过局域网连接本地 PC,然后通过本地 PC 进行命令行操作,不过比较麻烦,所以笔者没有考虑,如果各位有兴趣,可以自己在网上找找教程。另外需要注意的是,有些操作系统并不支持热插拔,也就是在系统启动后再连接的硬件设备无法被有效识别。所以保险起见,最好在开机前就连接好所有的硬件设备。

网络连接

硬件设备连接好,我们就真正意义上有了一台微型电脑,不过这个电脑并不完美,它还缺少很多基础软件以及基本终端指令的支持,而获得这些最简单有效的途径就是通过网络下载,另外网络也是后续很多操作的基础,其重要性可见一斑。

网络连接分为广域网络连接以及局域网络连接,广域网络连接就是互联网,它可以让我们对网上的资源进行下载,而局域网络连接则是与本地的其它 PC 主机建立的通讯,通过局域网络连接可以实现远程控制以及文件互传。

广域网络连接

树莓派是通过 WIFI 连接互联网的,树莓派连接已有的 WIFI 主要有三种途径,一种就是前面在系统烧录过程中,通过官方软件的配置实现,这里不再赘述,第二种是通过修改系统网络配置文件 network-config,修改的步骤如下:

  1. 将已经固化好系统的 SD 卡插入电脑,在SD 卡 boot 主目录下找到 network-config 文件,并通过文本编辑软件(写字板或记事本等)打开。

  2. 修改树莓派所要连接的 WIFI 名(橙色框双引号内)与 WIFI 密码(蓝色框双引号内),如果文件内没有以下内容,直接对照下图编辑即可(行尾不要有空格!!!)。

其实第一种方法本质上就是官方烧录软件底层自主实现了第二种方法。第三种方法是通过添加网络配置文件 wpa_supplicant.conf 实现的,其具体步骤如下:

  1. 建立空白文件 wpa_supplicant.conf,向文件添加以下内容(蓝色框是待连接 WIFI 名以及密码)。

  1. 将已经固化好系统的 SD 卡插入电脑。
  2. 将修改好的 wpa_supplicant.conf 文件添加到 SD 卡 boot 主目录下。

第二种与第三种方法都是通过直接操作 Linux 中与网络相关的配置文件实现的,wpa_supplicant.conf 更多是对无线网络的底层配置,而 network-config 囊括的更加全面,它们在管理网络这个工作上,有相交,但更多的是互补,如果读者对这部分感兴趣,可以自行查阅相关内容,这里就不过多赘述。

通过以上配置就得到一个可以访问互联网的树莓派,为了稳妥起见,还是先验证一下。首先保证树莓派处于待连接 WIFI 信号覆盖下,然后打开树莓派,并向树莓派的命令行终端输入ping www.baidu.com。ping 命令是一个网络诊断工具,该命令会向目标网址发送请求消息(例中的目标网址是www.baidu.com,换成其它网址也可以),并等待回应,如果收到数据回应就说明网络配置成功,如果没有收到,还请检查一下以上配置过程是否正确。

因为有些固化的系统缺少一些基础的终端指令软件包,所以在树莓派连接互联网后,首先对软件包进行下载。向命令行终端输入sudo apt-get install net-tools下载网络软件包,sudo apt-get install是 Ubuntu 下进行软件安装的命令,net-tool中包含了网络相关的命令软件包。通过sudo apt-get install vim安装 Vim 文本编辑器,因为在Linux下经常涉及到对文本的修改,所以一个好用的文本编辑器十分重要,关于Vim的使用,请读者自行百度。另外建议读者在每次安装软件前执行sudo apt-get update更新软件列表,防止软件包索引导致软件安装或依赖出现问题。

局域网连接

为了实现 PC 端与树莓派进行文件互传与远程登录,往往需要通过局域网连接树莓派与 PC 端。用局域网连接树莓派与 PC 端比较简单,步骤如下:

  1. 局域网连接
    1. 通过一根网线连接 PC 主机与树莓派。
    2. 让 PC 主机与树莓派连接在同一无线网下
  1. 连接验证
    1. 在Ubuntu的终端上输入ifconfig(橙色框),得到树莓派 IP 地址(绿色框)。

    2. 打开 PC 端命令行,输入ping <树莓派IP地址>(绿色框),树莓派返回数据则代表局域网连接成功(紫色框是对返回数据的统计)。

必要服务

经过前面的不懈努力,终于让一个硬件疙瘩不仅拥有了灵魂(Ubuntu 系统),也具备了眼观六路耳听八方的能力(输入输出与网络连接),不过有了以上基础还不够,还需要搭建其它服务,才能让它在 ROS 开发的路上畅通无阻。

SSH

SSH 可以实现 PC 端远程登录和操作树莓派,这给我们的开发带来便利,开启和使用 SSH 服务的步骤如下:

  1. 开启树莓派 SSH 服务。
    1. 将已经烧录系统的 SD 插入电脑。
    2. 建立无后缀 ssh 空白文件,并将该文件拖入系统根目录下。

    3. 将 SD 卡插回树莓派,并开机。
  1. 建立 PC 主机与树莓派的局域网连接。
  2. 打开 PC 端具有 SSH 功能的软件 MobaXterm。(Mobaxterm 官方下载链接
  3. 依次点击以下选项,并填写树莓派 IP 地址(局域连接中获得的 IP 地址)。

  4. 输入用户名和密码就登录完成了。

FTP

FTP 是一种用于在网络上进行文件传输的标准网络协议,通过该协议,可以将一个主机上的文件传给另一个主机。通过使用 FTP 服务,实现 PC 主机与树莓派文件的互通,开启和使用 FTP 服务的步骤如下:

  1. 在 MobaXterm 通过 SSH 远程登录树莓派。
  2. 然后~就能直接使用 FTP 服务了。。。左下侧蓝色框是树莓派上 Ubuntu 系统的文件目录,可以通过拖动直接交换 PC 端与树莓派上的文件。左上侧提供了图形化的快捷操作方式,这就不一一介绍具体功能了,请读者自行去体验吧。

简直哭死,MobaXterm 不仅免费且功能强大(强推,打 call),整合了 SSH 与 FTP(旧版本没整合,建议去官网直接下载最新版),这样就不需要一个头两个转(其它软件仅支持其中一个协议,因此常常需要开两个软件)。

桌面

本次系统移植的最终目的是为了在 ROS 上做机器人相关的开发,ROS 平台开发机器人的好处不仅仅是其包含了诸多标准化的组件,而且可以对机器人的活动进行场景模拟,并通过图形化界面进行展示,这样极大的减轻了对于一些场景性代码的调试压力。我们前面安装的 Ubuntu 为 Server 版本,并没有桌面显示功能,为了更方便的开发 ROS 程序,我们需要为 Server 版本的 Ubuntu 安装桌面系统。

为 Server 版本安装桌面系统主要有两种途径,第一种就是传统意义上的桌面,在安装该桌面后,能通过直连显示器来显示图像,第二种是借助 VCN 服务,通过网络将桌面投影到 PC 端,然在 PC 端直接进行操作。通过查询资料,相比直连显示器,借助通过远程投影的方式,因为其涉及额外的数据处理以及网络传输,会消耗更多的系统资源(主要是 CPU),又由于树莓派本身各种资源并不充裕,所以选择直连显示器的方案。安装桌面的步骤如下:

  1. 通过 SSH 连接树莓派。
  2. 通过指令下载桌面系统。
    1. 在命令行输入sudo apt-get updatesudo apt-get upgrade,更新软件包列表与系统。
    2. 输入sudo apt-get install taskelsudo apt install ubuntu-desktop gnome-shell安装桌面.
    3. 漫长等待。。。
    4. 在命令行提示桌面安装完成后,连接树莓派与显示器,并重启树莓派。(在树莓派启动前,就连接好所有硬件)
    5. 输入密码,进入系统。

系统备份

经过前面的准备,我们已经具备移植 ROS 软件平台的基础,但是欲速则不达,我并不打算直接开始下一步。Linux 系统本身比较复杂,对于刚开始接触的人来讲,很容易因为错误的操作导致系统无法正常工作,造成无法挽回的结果,为此,我们不能祈祷这样的事情不会发生,而是尽可能保证,即使这样的事情发生了,也能将其造成的影响降到最低。对于上面提到的潜在风险,我们可以通过在某些关键节点做好系统备份来避免。

对树莓派上系统进行备份主要分为全卡备份与压缩备份两种方式,全卡备份是指将 SD 卡整体备份,而压缩备份仅仅是备份 SD 卡中有内容的分区,相比压缩备份,全卡备份会占用更大的储存空间,不过全卡备份操作起来更加简单。因为压缩备份过于繁琐且容易出错,所以直接选择全卡备份。进行全卡备份主要有 Win32DiskImager、SD Card Copier 或者动态命令这几种方法,其中 SD Card Copier 是官方专门为 Raspberry 系统准备的,Ubuntu 系统无法使用,而动态命令操作起来也比较麻烦,所以最终选择第三方软件 Win32DiskImager 来对系统进行备份,备份的过程如下:

  1. 备份系统镜像
    1. 创建以.img结尾的空白文件。

    2. 给 PC 主机插入含有待备份系统的 SD 卡。
    3. 打开 Win32DiskImager 工具,首先在映像文件栏选中所创建的空白.img文件(橙色框),在设备栏选择 SD 卡所在位置(蓝色框),然后点击写入,等待烧录完成。(Win32DiskImager 官方下载链接

    4. 烧录完成,这时候原本 0KB 的.img文件已经变成接近 32GB,全卡备份顾名思义就是将整个 SD 卡都进行拷贝,而笔者被备份的 SD 卡正是 32GB。

  1. 烧录备份镜像
    1. 给 PC 主机插入待烧录的 SD 卡,这里需要注意待烧录 SD 卡容量要大于等于被备份 SD 卡的容量,笔者前面备份的系统镜像为 32GB,所以这里依旧使用了 32GB 的存储器。
    2. 打开最开始提到的官方树莓派镜像烧录软件。最左栏依然选择树莓派 4b,中间栏通过依次点击选择操作系统Use custom来选择以本地镜像烧录,接着选择已备份系统.img文件的路径,最右边选择待烧录 SD 卡路径。最后按下 NEXT,等待烧录完成。

经过以上步骤就完成了一个系统的备份与备份系统的烧录,在结束烧录后,读者不妨将烧录好的 SD 卡插入树莓派进行验证。

ROS 平台搭建

关于 Ubuntu 下 ros 平台的搭建我们可以按照官网教程进行(ubuntu下noetic版本ROS官方教程地址),但是直接按照官方教程搭建会遇到诸多网络问题,所以笔者推荐哔站 up 主机器人工匠阿杰的ROS 快速入门系列视频第五节 ROS 系统安装(ROS 系统安装地址)。该系列视频对于没有 ROS 基础的同学来讲,是很好的入门扫盲教程。

小结

本篇内容主要讲解了如何在树莓派上搭建 Ubuntu Server 20.04 LTS(64-bit)环境以及 ROS Noetic 软件平台,为了方便后期对于 ROS 的学习,也拓展了一些必要服务的配置。笔者在学习过程中发现该部分网上资料分散、参差不齐,所以基于自身学习与实践过程做以汇总,旨在为读者提供一个整体的搭建思路。在具体的环境搭建过程中要注意底层硬件、系统以及基本软件平台间的兼容问题,尽管因为自身需要与条件限制,可能每位读者所使用的系统版本与本篇内容有所差异,但是百变不离其宗,相信本篇内容依然会给各位提供方向上的引导。

  • 46
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值