最近用树莓派弄了一个 Ubuntu 20.04 desktop,用来做 ROS 的学习。

硬件:树莓派 4B 8G 版本

书本:《ROS机器人开发实践》和《ROS机器人开发实用案例分析》

树莓派搭建 Ubuntu 20.04 desktop

由于ROS没有正式支持Ubuntu 22.04 的版本,所以为了还是搭建了20.04的桌面来,配套 ROS Noetic来使用。

使用到的工具包括:树莓派主板,SD卡,读卡器。首先把SD卡插入读卡器之后连接电脑。

烧录 Ubuntu 20.04 LTS

在树莓派上配置 Ubuntu 20.04的桌面版本时,用到的是树莓派官方的烧录工具 Raspberry Pi Imager,使用的主要原因是官方烧录工具自带各版本的树莓派系统 img,不用再自己下载。官方工具下可以直接在官网上下载,我这里下载的是 Windows 版本,也有对应的 MacOS 或者 Linux 版本。下载后如图:

在 CHOOSE OS这里选择 Other general-purpose OS -> Ubuntu -> Ubuntu Server 20.04.4 LTS (我的是 arm64 architecture):

然后 CHOOSE STORAGE 处选择你的 SD 卡,就可以点击 WRITE 开始烧录。

也可以选择下载 img 文件后使用 balenaEtcher 等烧录。

安装 Ubuntu 20.04 Server

烧录完成后把SD卡取出,插入 Pi 4 的 SD 卡插口,给树莓派接上显示器 (MicroUSB to HDMI),然后接一个键盘,最后给树莓派插电。然后树莓派开始从SD卡启动,过一段时间后会出现登录界面:

账号和密码都是 ubuntu (密码输入没有任何显示,直接输入完成回车,如果感觉输入错了,多按几次backspace删掉)。

登录成功后会要求你马上修改密码:

这时候先输入 Current password 还是ubuntu,然后输入新密码,确认。就登录成功了

连接网络

如果你有有线,那么直接把网线接到树莓派网口,就可以跳到下一步了。需要连接无线的可以看这一部分的内容。

首先创建一个 configuration file:

sudo nano /etc/wpa_supplicant.conf

然后输入如下内容:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1
network={
ssid="WIFI名称"
scan_ssid=1
psk="WIFI 密码"
key_mgmt=WPA-PSK
}

WIFI名称和密码处填入你自己的WIFI名称和密码就行了,然后按 Ctrl+X 退出,按 Y (保存),最后 Enter (以当前名称覆盖)。

用以下命令来连接网络:

sudo wpa_supplicant -B iwlan0 -c/etc/wpa_supplicant.conf

然后给WIFI assign一个IP地址:

sudo dhclient -v

检测自己有没有连上网:

ping -c5 baidu.com

如果这个请求成功那么说明连上了网络。(连网线也可以用这个方法测试)

Ubuntu 20.04 desktop 配置

首先更新一下包:

sudo apt update

然后:

sudo apt upgrade

完成之后重启系统:

sudo systemctl reboot

重启成功之后通过如下命令来安装桌面:

$ sudo apt install ubuntu-desktop

需要确认安装,按Y然后回车。等待下载完成之后再重启系统:

$ sudo systemctl reboot

重启后变进入了桌面界面:

登录之后就可以正常使用20.04的桌面了。

ROS 安装

这里因为使用 Ubuntu 20.04, 因此安装对应的 ROS 版本 Noetic。这里全程科学上网,如果不能的话,有些地方可能会有问题,如果有我看到的解决方案的,也一并放在这里。

首先要确认一下系统的软件源。再Ubuntu的软件中心软件源配置界面看配置是否如图。

添加ROS软件源

$  sudo  sh  -c  'echo  "deb  http://packages.ros.org/ros/ubuntu $(lsb_release  -sc)  main"  >  /etc/apt/sources.list.d/ros-latest.list'

为了加快速度,可以用国内的镜像源,这里列的是中国科学技术大学的,也可以用中山大学或者清华大学的。

$ sudo sh -c '. /etc/lsb-release && echo "deb [trusted=yes] http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

添加密钥

$  sudo  apt-key  adv  --keyserver  hkp://ha.pool.sks-keyservers.net:80  --recv-key  421C365BD9FF1F717815A3895523BAEEB01FA116

安装ROS

首先运行:

sudo apt-get update

然后安装(这里建议安装完整版,不然之后还有一堆东西要装)

$ sudo apt-get install ros-noetic-desktop-full

初始化 rosdep

这个步骤如果没有科学上网,可能会出现很多问题,先说基本的,就是运行如下两个命令 :

$ sudo rosdep init
$ rosdep update

但是第一个命令就可能出现错误,网上有比较多的解决方法。参照其中一篇文章提到的解决方法,个人感觉里面最有效的是:

#打开hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133  raw.githubusercontent.com
#保存后退出再尝试
rosdep update

作者提到的手动修改20-default.list也很好用,但是如果改完之后直接运行 sudo rosdep init,还是会报错的,但是这时候其实这个list已经好了。

之后运行rosdep update 如果还是因为网络的原因报错,可以参考这篇文章,我墙内尝试了一下,可以解决问题。

设置环境变量

$ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

然后运行:

$ roscore

可以看到ROS已经可以成功运行。

安装一些功能包

$  sudo  apt-get  install  python3-rosinstall  python3-rosinstall-generator  python3-wstool  build-essential