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

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

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

目录

树莓派搭建 Ubuntu 20.04 desktop

烧录 Ubuntu 20.04 LTS

安装 Ubuntu 20.04 Server

连接网络

Ubuntu 20.04 desktop 配置

ROS 安装

 添加ROS软件源

 添加密钥

 安装ROS

初始化 rosdep


树莓派搭建 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
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