【树莓派4B】Ubuntu Mate20.04系统配置与ROS Noetic安装全攻略:从烧录到远程桌面控制
1. 开篇:为什么选择树莓派4B与Ubuntu Mate 20.04?
如果你和我一样,是个喜欢折腾机器人、无人机或者各种智能硬件的爱好者,那你肯定对树莓派不陌生。这块小小的板子,简直就是我们这些创客的“瑞士军刀”。我当初为了做实验室的自主巡航SLAM项目,选来选去,最终还是锁定了树莓派4B。性能足够,接口丰富,最关键的是,社区生态好,踩了坑总能找到人问。
但官方系统Raspberry Pi OS(以前叫Raspbian)用久了,总觉得在开发一些更“正经”的机器人应用时,有点施展不开。很多机器人领域的软件包,尤其是ROS(Robot Operating System),对Ubuntu的支持是最好的。所以,我决定给树莓派4B换个“心脏”——安装Ubuntu Mate 20.04。Mate桌面环境比较轻量,对树莓派的硬件资源很友好,既能保证流畅的图形界面,又能为后续的ROS安装和运行留足算力。
最头疼的是,我手头没有多余的显示器、键盘和鼠标。总不能为了配置个系统,专门去买一套外设吧?我相信这也是很多朋友的常态:只有一台笔记本和一块树莓派板子。所以,这篇文章的核心,就是解决这个“无头”(Headless)安装和配置的问题。我会带你从一张空白的SD卡开始,一步步完成系统烧录、环境配置、ROS Noetic安装,并最终实现用你手头的Windows或Mac笔记本,像操作本地电脑一样远程控制树莓派的桌面。我踩过的坑,你就不用再踩了。
2. 第一步:系统烧录与基础准备
万事开头难,但把准备工作做足了,后面就顺了。这一部分,我们要把Ubuntu Mate 20.04系统“刻录”到SD卡里,并做好一些必要的设置,为后续的远程连接铺平道路。
2.1 工具与镜像下载:别下错了版本
工欲善其事,必先利其器。你需要准备以下几样东西:一张至少16GB的Micro SD卡(建议用Class 10或以上速度的,体验会好很多)、一个SD卡读卡器、你的电脑,以及下面这几个软件。
首先,是系统镜像。去Ubuntu Mate官网下载,这里有个小坑要注意。树莓派4B是ARM64架构的,所以我们要找对应的版本。在官网的下载页面,找到20.04 LTS版本,然后选择 ubuntu-mate-20.04.4-desktop-arm64+raspi.img.xz 这个镜像。我实测过,这个版本对树莓派4B的兼容性最好,驱动也比较全。直接下载这个压缩包就行,不需要解压里面的.img文件,烧录软件能直接识别。
其次,是烧录工具。在Windows上,我强烈推荐使用 Raspberry Pi Imager。这是树莓派官方出的工具,现在变得非常强大好用。你只需要从树莓派官网下载安装,打开后,第一步选择操作系统,它甚至内置了“Ubuntu Mate 20.04 LTS (Raspberry Pi 4/400)”这个选项,直接选就行,它会自动下载。如果你已经手动下载了上面说的.xz压缩包,在Raspberry Pi Imager里可以选择“使用自定义镜像”,然后找到你下载的文件。第二步选择你的SD卡驱动器,最后点击“烧录”即可。它比老牌的Win32DiskImager更智能,烧录完成后会自动校验,而且能帮你完成一些初始配置。
2.2 烧录与关键预配置:让树莓派“出生”就连上网
用Raspberry Pi Imager烧录时,别急着点“烧录”按钮。注意看,在右下角有一个齿轮图标,点击它,可以进行高级设置。这个功能太有用了,它能让我们在烧录阶段就完成几件关键事,实现真正的“无头启动”。
第一,启用SSH。这是远程控制的基石。在高级设置里,勾选“启用SSH”,并设置一个密码。你可以选择使用密码认证,也可以导入本地的SSH公钥。为了简单起见,我们先设置一个密码,比如raspberry(当然,正式用建议设复杂点)。
第二,配置Wi-Fi。在这里直接填入你家的Wi-Fi名称(SSID)和密码。这样,树莓派第一次开机,就会自动连接网络,我们就能通过IP地址找到它了。记得选择正确的国家代码(CN)。
第三,设置主机名、用户名和密码。主机名可以设为raspberrypi-ubuntu之类的,方便在网络上识别。用户名和密码就是你以后登录系统要用的,务必记住。我建议用户名不要用默认的ubuntu,自己起一个。
把这些都设置好,再点击“烧录”。整个过程大概10-20分钟,取决于你的SD卡速度和电脑性能。烧录完成后,软件可能会提示你SD卡需要格式化才能被Windows识别,这是因为Linux的ext4分区Windows不认识,千万不要点格式化!直接弹出SD卡,插到树莓派上,准备上电。
3. 第二步:首次启动与系统环境调优
给树莓派插上电源,看到绿灯闪烁,说明它已经开始启动了。第一次启动会进行系统初始化,时间会稍长一些,大概3-5分钟。这时候,我们不需要连接任何显示器,只需要在电脑上操作。
3.1 找到你的树莓派:获取IP地址的几种方法
树莓派启动并连上Wi-Fi后,我们需要知道它被分配了什么IP地址。这里有几种可靠的方法。
方法一:路由器后台查看。这是最准确的方法。登录你家路由器的管理后台(通常在浏览器输入192.168.1.1或192.168.31.1),在“连接设备”或“DHCP客户端列表”里,找你设置的主机名(比如raspberrypi-ubuntu)或者设备制造商为“Raspberry Pi”的设备,后面就是它的IP地址。
方法二:使用ARP命令扫描(Windows/Mac/Linux通用)。打开你电脑的命令行(Windows是CMD或PowerShell,Mac/Linux是终端)。确保你的电脑和树莓派连接在同一个Wi-Fi网络下。然后输入命令 arp -a。这会列出局域网内所有和你电脑通信过的设备IP和MAC地址。在一堆地址里,找那个看起来像192.168.x.x的,并且对应的MAC地址前三位通常是树莓派厂商代码dc:a6:32或b8:27:eb。找到的那个IP就是你的树莓派。
方法三:使用网络扫描工具。像Advanced IP Scanner(Windows)或Angry IP Scanner(跨平台)这类工具,可以快速扫描整个网段的活动主机,也很方便。
拿到IP地址后,比如是192.168.31.45,我们就可以进行下一步了。
3.2 首次SSH连接与基础配置
打开你电脑上的SSH客户端。Windows 10及以上版本,PowerShell或CMD已经内置了SSH命令。Mac和Linux系统终端自带SSH。在命令行里输入:
ssh 你的用户名@树莓派的IP地址
例如:ssh myuser@192.168.31.45。第一次连接会提示你确认主机密钥,输入yes。然后输入你烧录时设置的密码,就能成功登录到树莓派的命令行界面了!恭喜你,现在已经可以“隔空”操作树莓派了。
登录后第一件事,我建议先更新一下系统。但默认的软件源在国外,速度慢如蜗牛。所以我们必须先换源,换成国内的镜像站,速度会飞起。
备份原来的源列表:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
然后用nano编辑器打开源文件:
sudo nano /etc/apt/sources.list
把文件里所有的 archive.ubuntu.com 和 security.ubuntu.com 替换成 mirrors.aliyun.com。你可以用nano的搜索替换功能(Ctrl+\),也可以直接清空文件,粘贴以下阿里云的源(适用于Ubuntu 20.04 Focal):
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
编辑完成后,按Ctrl+O保存,再按Ctrl+X退出nano。
接着,更新软件列表并升级所有已安装的软件包:
sudo apt update
sudo apt upgrade -y
-y参数是为了自动确认升级,不然你要一直按Y。这个过程根据网络情况,可能需要十几到几十分钟。完成后,你的系统就已经是更新到最新状态,并且后续安装软件都会飞快。
4. 第三步:搭建远程桌面——xrdp与VNC双方案详解
命令行SSH虽然强大,但很多图形界面的操作和ROS的图形化工具(如Rviz)还是需要桌面环境。下面我分享两种最常用的远程桌面方案,你可以根据喜好选择。
4.1 方案一:使用xrdp(Windows远程桌面原生支持)
xrdp的最大好处是,在Windows电脑上不需要安装任何额外客户端,直接用系统自带的“远程桌面连接”就行,体验非常原生。
安装xrdp非常简单,一条命令:
sudo apt install xrdp -y
安装完成后,xrdp服务会自动启动。我们可以设置它开机自启,并检查状态:
sudo systemctl enable xrdp
sudo systemctl status xrdp
如果看到状态显示 active (running),说明服务运行正常。
接下来,我们需要配置一下xrdp使用的桌面环境。默认它可能调用的是Mate,但需要明确指定。编辑xrdp的启动配置文件:
sudo nano /etc/xrdp/startwm.sh
在这个文件的末尾,在 test -x /etc/X11/Xsession 这一行之前,添加一行:
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
然后,找到最后几行,大概在 fi 的后面,确保执行的是 mate-session 或者 startmate。通常配置文件最后会执行一个 session 变量对应的脚本,我们可以直接强制指定。一个更稳妥的方法是,在文件末尾的 fi 之后,添加一行:
exec /usr/bin/mate-session
这样就能确保xrdp启动的是Mate桌面。保存退出。
现在,回到你的Windows电脑。按下 Win + R,输入 mstsc 回车,打开“远程桌面连接”。在“计算机”栏输入你的树莓派IP地址,点击“连接”。会弹出登录窗口,会话类型选择“Xorg”,然后输入你树莓派的用户名和密码。点击“确定”,稍等片刻,你应该就能看到Ubuntu Mate的桌面了!
可能遇到的坑:如果你连接后只看到一个灰色屏幕或者蓝屏,然后很快断开,这通常是桌面环境配置问题。可以尝试修改上面提到的 startwm.sh 文件,或者安装一个更轻量的桌面环境如xfce4,然后让xrdp去调用它。安装xfce4:sudo apt install xfce4 -y,然后在xrdp登录时,会话类型选择“Xorg”,并在登录前点击“显示选项”,在“高级”选项卡里,将“使用我的远程计算机的默认设置”改为“体验”选项卡下的“低速宽带”,有时也能解决。
4.2 方案二:使用VNC(更流畅的跨平台选择)
VNC是另一种经典的远程桌面协议,在Mac和Linux上用起来也很方便。我推荐使用 x11vnc 这个服务端,它直接共享现有的物理桌面(虽然我们没接显示器,但它会虚拟一个),兼容性好。
安装x11vnc:
sudo apt install x11vnc -y
首次运行需要设置一个连接密码:
x11vnc -storepasswd
它会提示你输入密码并确认,密码文件会保存在你的家目录下(~/.vnc/passwd)。
现在,你可以手动启动一次VNC服务器来测试:
x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared
这条命令参数比较多,解释一下:-forever保持持久连接,-shared允许多个客户端连接,-rfbport 5900指定端口。运行后,服务会挂在终端上。
在电脑上,你需要一个VNC客户端。比如 RealVNC Viewer 或者 TigerVNC。下载安装后,新建一个连接,地址填 树莓派IP地址:5900(例如 192.168.31.45:5900),然后输入刚才设置的密码,就能连接成功了。画面流畅度通常比xrdp要好一些。
但手动启动不是长久之计。我们需要配置系统服务,让x11vnc开机自启。创建一个系统服务文件:
sudo nano /etc/systemd/system/x11vnc.service
写入以下内容:
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/你的用户名/.vnc/passwd -rfbport 5900 -shared
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
注意:把 /home/你的用户名/.vnc/passwd 替换成你实际的密码文件路径,比如 /home/myuser/.vnc/passwd。
保存退出后,启用并启动这个服务:
sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service
sudo systemctl status x11vnc.service
看到状态为 active (running) 就大功告成了。以后树莓派一开机,VNC服务就在后台运行了。
4.3 两种方案怎么选?我的个人经验
xrdp和VNC我都长期用过,说说我的感受。xrdp 集成度高,Windows用户零成本,设置相对简单,但有时会遇到画面卡顿、色彩异常或者连接不稳定的情况,对网络要求稍高。VNC 的画面传输效率更高,操作更跟手,跨平台支持极好,但需要额外安装客户端,并且服务端配置稍微复杂一丢丢。
我的建议是:如果你主要用Windows,且追求最快捷的接入方式,首选xrdp。如果你对远程桌面的流畅度有要求,或者需要在Mac/Linux/Windows多平台连接,那就选VNC。 事实上,你可以两个都安装,哪个顺手用哪个。我自己的树莓派上就同时运行着xrdp和x11vnc服务,端口不同(xrdp是3389,x11vnc是5900),互不干扰。
5. 第四步:安装ROS Noetic——机器人开发的灵魂
环境搭好了,远程桌面也通了,接下来就是重头戏:安装ROS Noetic。ROS是机器人开发的“操作系统”,提供了大量工具和库。Noetic是最后一个支持Ubuntu 20.04和Python3的ROS1版本,非常稳定。
5.1 配置ROS安装源与密钥
首先,将ROS的软件源添加到系统。这里我们使用中科大的镜像,速度非常快:
sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
接下来,添加ROS的GPG密钥,用于验证软件包的完整性:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
如果密钥服务器连接超时,可以尝试换一个,比如 hkp://pgp.mit.edu:80。
然后,更新软件包列表,确保能获取到ROS的源信息:
sudo apt update
5.2 安装ROS桌面完整版
ROS有多个版本,对于树莓派4B,我推荐安装 ros-noetic-desktop-full。这个版本包含了ROS核心、Rviz(3D可视化工具)、Gazebo(仿真环境)以及大量常用的机器人算法库和工具,非常适合学习和开发。
sudo apt install ros-noetic-desktop-full -y
这个安装过程会持续较长时间(半小时到一小时不等),因为它要下载和安装海量的软件包。泡杯茶,耐心等待。
安装完成后,一个非常关键且容易出错的步骤是初始化 rosdep。rosdep是ROS的一个工具,用于安装系统依赖。初始化它:
sudo rosdep init
rosdep update
sudo rosdep init 这一步可能会失败,报错“找不到命令”或者网络连接问题。如果遇到“找不到命令”,先安装它:sudo apt install python3-rosdep。如果遇到网络问题(这是最常见的),是因为它默认的源在国内访问不畅。我们可以修改它的配置文件,换用国内的镜像源。
备份并编辑rosdep的源文件:
sudo nano /etc/ros/rosdep/sources.list.d/20-default.list
将其中的 raw.githubusercontent.com 开头的URL,全部替换为 ghproxy.com 代理的地址,或者直接使用国内gitee的镜像。一个更彻底的方法是,在执行 rosdep init 前,设置环境变量使用国内的镜像。但最简单粗暴且有效的方法是,如果 rosdep init 失败,就直接跳过它。对于很多基础使用,不初始化rosdep也不影响。rosdep update 可以多试几次,或者切换手机热点网络。
5.3 配置环境变量与测试安装
为了让系统知道ROS命令在哪里,需要将ROS的环境变量添加到你的bash shell中:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
第一行命令将配置添加到你的 .bashrc 文件,这样每次打开新终端都会自动生效。第二行是让当前终端立即生效。
再安装一些构建ROS包常用的工具:
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y
现在,激动人心的测试时刻到了!打开三个终端窗口(通过SSH或者远程桌面里的终端都可以)。
- 在第一个终端,启动ROS核心主节点:
roscore
- 在第二个终端,启动小海龟仿真器节点:
rosrun turtlesim turtlesim_node
这时,你应该能在远程桌面上看到一个带有随机小海龟的图形窗口。 3. 在第三个终端,启动键盘控制节点:
rosrun turtlesim turtle_teleop_key
将光标聚焦在第三个终端,使用键盘的 上下左右方向键,看看第一只小海龟是不是听你的指挥开始移动了?如果能,那么恭喜你,ROS Noetic在树莓派4B上安装成功!这意味着你已经拥有了一个完整的机器人软件开发环境。
6. 进阶配置与性能优化建议
系统跑起来了,ROS也装好了,但为了让这个小家伙在机器人项目里更“扛造”,我们还需要做一些优化。
设置静态IP(可选但推荐):虽然我们可以通过路由器查看IP,但设置一个静态IP会更省心。编辑网络配置文件:
sudo nano /etc/netplan/01-network-manager-all.yaml
(注意,你的文件名可能略有不同,可能是50-cloud-init.yaml)。在文件中添加或修改为以下内容(根据你的网络情况调整):
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: no
addresses: [192.168.31.100/24]
gateway4: 192.168.31.1
nameservers:
addresses: [192.168.31.1, 8.8.8.8]
wifis:
wlan0:
dhcp4: no
addresses: [192.168.31.101/24]
gateway4: 192.168.31.1
nameservers:
addresses: [192.168.31.1, 8.8.8.8]
access-points:
"你的WiFi名称":
password: "你的WiFi密码"
这里我为有线网卡eth0设置了静态IP 192.168.31.100,为无线网卡wlan0设置了 192.168.31.101。/24是子网掩码255.255.255.0的简写。gateway4和nameservers填你的路由器网关地址。保存后,应用配置:sudo netplan apply。如果报错,可以尝试 sudo netplan --debug apply 查看详细错误信息。
关闭图形界面以节省资源:如果你的机器人项目后期不需要桌面,完全可以在无头模式下运行,通过SSH管理。这样可以释放出更多CPU和内存资源给ROS节点。使用系统命令切换运行级别:
sudo systemctl set-default multi-user.target
这条命令设置系统默认启动到命令行模式。重启后生效。如果想临时关闭图形界面,可以 sudo systemctl isolate multi-user.target。想恢复图形界面,就 sudo systemctl set-default graphical.target 并重启。
使用ZSH和Oh-My-ZSH(可选):对于长期在终端下工作的开发者,一个好用的shell能极大提升效率。安装ZSH:
sudo apt install zsh -y
chsh -s $(which zsh)
然后安装Oh-My-ZSH框架:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
重启终端后,你就会拥有一个高颜值、带语法高亮、自动补全的超级终端了。
监控树莓派状态:安装 htop 可以直观地查看CPU、内存使用情况:sudo apt install htop,然后运行 htop。安装 nvtop 可以监控GPU使用(如果用到):需要从源码编译,但对于一般应用,htop足够了。
经过以上这些步骤,你的树莓派4B已经从一个裸板,变身为一台功能强大、可通过网络远程桌面控制、并搭载了完整ROS Noetic开发环境的机器人专用计算机了。无论是做SLAM建图、视觉识别,还是控制机械臂,它都已经准备就绪。回想我当初折腾的日子,最深的体会就是:耐心和按步骤操作是关键,网上教程虽多,但环境差异大,照搬容易踩坑。希望这份结合了我亲身踩坑经验的超详细指南,能帮你一次成功,把更多时间花在有趣的机器人开发本身,而不是配置环境上。如果在实践中遇到任何问题,欢迎在评论区交流,我们一起解决。
更多推荐
所有评论(0)