上周,小柯在虚拟机上用Ubuntu18.04配置了ROS Melodic(详见博客Ubuntu18.04 + ROS Melodic 环境配置笔记)。怎奈电脑比较低级,带不动虚拟机,于是我又只能寻求在树莓派上配置 ROS 的方法。再次整理成笔记,给大家分享。
从树莓派官网操作系统下载地址我了解到,Ubuntu 有专门用于树莓派的操作系统。Ubuntu 官网也有对应的教程。
从Ubuntu 官网了解到,给树莓派安装 Ubuntu 操作系统需要准备以下硬件:
这里的硬件需求不同于安装 Raspberry Pi OS。后者开机时,可以没有键盘鼠标,可以直接通过SSH协议登陆树莓派,进行后续配置。我之前也试了这种方法,结果失败了。无奈,只能给我的树莓派配齐各种外设。
Ubuntu 官网目前只给出了Ubuntu Desktop 21.04,我之前也试了一下,配置完ROS专用源之后,卡在了 sudo apt-get update 上。
从下图可见,系统没法找到相应的源地址:
究其原因,在于 Ubuntu21 版本过新,ROS暂时不支持。我们对比一下 Ubuntu20和21的update指令,可以发现,Ubuntu20 用的是 ‘focal’,但是Ubuntu21 用的是 ‘hirsute’。下图为 Ubuntu20 上运行 sudo apt-get update 的结果。
当我全网寻找 Ubuntu20 Desktop 版本系统时,我一个救星同学告诉我,Ubuntu20 Mate 是专门为树莓派开发的系统,可以一试。所以我就拿 Ubuntu20 Mate 完成了后续的配置。
直接用搜索引擎搜索“Ubuntu 20 Mate"字样,我找到了 Ubuntu Mate 官网。点击页面上的"Download"标签进入其下载地址。从下图可见,它有专门为 Raspberry Pi 开发的版本。
由于 Raspberry Pi 4B 是 ARM64 结构,故选择64-bit版本下载。在此附上一个下载链接https://releases.ubuntu-mate.org/focal/arm64/ubuntu-mate-20.04.1-desktop-arm64+raspi.img.xz
下载完成后解压,用Raspberry Pi Imager烧录系统。在系统选择时选择最后一项(Use Custom),然后选择刚刚解压的 .img 系统镜像烧录。
在树莓派上插入刚刚烧录了系统的 Micro SD 卡,并接入屏幕、鼠标、键盘等各种外设,最后插入 USB Type-C 电源线,系统开始启动。
启动时,我们需要根据提示配置语言、地区,如果没有网线,则需要连接 WiFi。这些操作都比较简单,我也不再赘述。
如果启动成功,系统会弹出如下欢迎框:
不过,小柯运气没有那么好,系统卡在了下面这一步。
尽管,这张图是我后面重演时截的,但是反映了同一个问题:”Waiting for unattended-upgr to exit"。出现这个问题的原因在于系统已经有一个线程在运行安装软件等操作,已经抢占了对应的互斥量。系统会确保同时只有一个线程进行软件安装操作。不过此处我们系统刚刚启动,不应该有另外的线程占用。所以这个问题出的很玄学。
好在这个弹窗旁边有一个 “Cancel” 或 “Stop” 按钮强制退出等待,而且,系统也可以在不安装任何其他软件的情况下顺利开机。小柯点了一次取消之后,系统就成功启动了。
不出所料地是,后面我在更新软件时又卡在了这里。(这就诞生了上面那张截图)好在CSDN中,已经有前人帮忙探过路了,小柯根据ubuntu 卡在waiting for unattended-upgr to exit的解决中介绍的方法,强行删除了三个文件,成功解决了这一问题。
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
至此,我们的系统就启动成功了。
在前一篇博客Ubuntu18.04 + ROS Melodic 环境配置笔记中,小柯写到,我们需要更换本地软件源。
但是,Ubuntu20 会自动帮我们从最优的服务器下载软件,所以就不需要进行这一步操作了。但后面几步需要逐一进行。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt install ros-noetic-desktop-full
对应的添加模组的方法可以参考先前的文章。
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
在用原来的方法安装依赖环境时,系统给我报了错。
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
原因在于它找不到相应软件。
通过一定尝试,我发现新的 ROS 依赖环境都是基于 Python3 编写,而之前的依赖环境基于 Python2。所以,我们只需要在上面指令中的每一个 python 后面跟上数字3即可。
sudo apt install python3 python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
最后,我们还是用同样的方法初始化 rosdep 和 catkin 工作目录。
详见Ubuntu18.04 + ROS Melodic 环境配置笔记中3.7和3.8部分。至此,我们就完成了所有配置。