本文介绍了在树莓派4B上安装Ubuntu和ROS的方法。已配置好的系统镜像可在公众号“汽车软件杂谈”后台回复“rpi4b img”获取。扫码关注:
最近想在树莓派上装个ROS用来学习,但我的树莓派内存只有2G,有点捉急,前前后后试了好多种方法,终于找到一个能用的,在这里总结一下,供大家参考。
1.尝试1 —— Ubuntu Desktop:因为对ROS支持得最好的Linux版本就是Ubuntu,所以最开始就是想着直接装个官方的带桌面的Ubuntu版本,也没多想就刷了,结果直接开不了机,仔细看了一下,Ubuntu Desktop版只推荐4G和8G的树莓派安装,这才知道要考虑内存的大小。所以如果是4G或8G版的树莓派,这种方法应该还是首选,毕竟简单方便,支持也好。
系统镜像下载链接:
https://ubuntu.com/download/raspberry-pi
2.尝试2 —— Ubuntu Server:Server版本要比Desktop版节省很多资源,但因为ROS有一些图形化开发环境,还是需要有桌面,但可以装好Ubuntu Server后,自己选择一个资源占用小的桌面版本,我试了Xfce,这款桌面据说是资源占用最小的了,安装方法也比较简单:
① 更换国内源:
Linux的国外软件源下载速度很慢,所以要更换成国内的一些镜像源网站。换源的方法网上有很多,我这里介绍一个简单的批量替换指令,不需要一个个手动替换:
sudo sed -i "s#ports.ubuntu.com#mirrors.ustc.edu.cn#g" sources.list
这个指令就可以把前面的网址替换成后面中科大的镜像源网址,当然也可以选择清华等其他国内镜像,方法一样。
② 更新应用:
sudo apt-get update
sudo apt-get upgrade
以上两步是新安装一个Linux系统的必要操作,完事后再安装其他应用程序会快很多,问题也会少。
③ 安装Xfce:
sudo apt install xfce4
安装好后重启就可以进入桌面,但在我的树莓派上还是贼卡,无奈也放弃了。
3.尝试3 —— 树莓派原生系统直接安装ROS:Ubuntu尝试失败后,只能换回树莓派原生的Raspbian系统,这个系统是基于Debian的,尽管都说它对ROS的支持不如Ubuntu好,但它内存占用真的是小,桌面版才不到200M。在Raspbian上安装ROS的方法在ROS官网上有:
http://wiki.ros.org/ROSberryPi
虽然教程比较详细,但实际安装的时候会出现各种各样的问题,我在初始化ROS的时候总是报timeout错误,尝试了网上所有的办法,还是没能解决,这条路又走不通了。
4.尝试4 —— Ubuntu Mate:Ubuntu Mate是一个轻量版的桌面Ubuntu系统,在网上找了很多办法后才发现Ubuntu Mate也有专门针对树莓派的版本,下载链接在下面。我先尝试了arm64版本,启动后内存占用在1G以上,虽然可以运行了,但稍微开点进程就卡死了,最后试了armhf版,这是专门针对低性能树莓派开发的,资源占用少,开启后内存占用大概在500M,总算是勉强能用了!
https://ubuntu-mate.org/raspberry-pi/
成功安装后界面如下:
ROS的安装方法可以在官网上找到:
http://wiki.ros.org/
因为Ubuntu的版本已经更新到了20.04,所以选择了官方推荐的与这个版本最匹配的ROS Noetic Ninjemys版本。在Ubuntu上安装ROS过程相当顺利,按照教程一步步来即可,我装了好几次都没出过任何问题,想想当时在Raspbian上装ROS的艰难困苦真是想哭。。需要注意的一点就是安装源可以选一个国内的,在教程中也给了相关的说明:
通常在使用树莓派的时候并不会给它直接连接一个屏幕,而是在PC端远程操控。实现方法有两种,一种是VNC,在树莓派上安装VNCServer,在PC端用VNCViewer进行连接控制。第二种是安装Xrdp,在PC端用远程桌面控制。我选择的是第二种,因为经过对比发现Xrdp内存占用略小。安装方法如下:
1.安装:
sudo apt install xrdp
2.重启Xrdp服务器:
sudo service xrdp restart
3.查看服务运行状态:
sudo service xrdp status
如果状态像下图一样是Active就可以了:
4.设置开启自动启动:
sudo update-rc.d xrdp defaults
5.以上步骤完成后,即可用PC端的远程桌面连接树莓派,先查看树莓派IP地址:
ifconfig
然后在远程桌面直接输入树莓派IP地址进行连接。
6.如果用PC端的远程桌面连接时出现灰屏现象,就需要再进行以下设置:
① 创建一个配置文件:
sudo touch ~/.xsession
② 进入文件编辑:
sudo nano ~/.xsession
③ 复制以下内容到文件:
unset DBUS_SESSION_BUS_ADDRESS
mate-session
TZ='Asia/Shanghai'; export TZ
④ ctrl+x退出编辑,提示是否保存的时候选择Y,再回车即可保存。
⑤ 重启树莓派,再次连接的时候即可进入桌面。
连接时界面:
输入安装Ubuntu Mate时设置的用户密码,即可进入桌面,连接成功后:
如果不设置静态IP,每次重启树莓派它的IP地址都会变,需要重新查询IP地址。这里先介绍一个查询树莓派IP地址的方法,当树莓派不能连接显示器无法直接查询IP地址时,可以在PC上用下面的方法进行查询:
Linux:
arp -na | grep -i "b8:27:eb"
或:
arp -na | grep -i "dc:a6:32"
Windows:
运行cmd,输入以下指令:
arp -a | findstr b8-27-eb
或:
arp -a | findstr dc-a6-32
如果树莓派成功连接WIFI,就可以查询到IP地址:
如果我们设置了静态IP,就不需要每次都查询了,Ubuntu Mate的设置方法如下:
1.查询IP地址等信息,点击网络连接信息,记下红框中的IP地址等内容,一会要填写。
2. 按下图中的方法,修改IP地址获取方式为手动,在第4步中添加刚刚查询到的IP地址等信息。
这里有可能是不可编辑的状态,这个时候编辑一下/etc/network/interfaces这个文件,网上有一些教程是编辑这个文件来实现静态IP的,但我编辑完之后就直接连不上网了,但上图中的编辑栏变成了可编辑状态,再把interfaces的内容恢复,这里也会维持可编辑状态,就可以进行手动获取IP的设置了。具体原因我也没有深究。
有个系统资源监视小插件很好用,推荐给大家:indicator-sysmonitor
安装步骤如下:
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor
indicator-sysmonitor &
安装完成后可以设置开机自启:
可以编辑要显示的内容和更新时间:
完成后的状态如图:
买了个小风扇,用一段Python脚本来控制它根据CPU温度自动开启、关闭和调速,脚本如下:
import RPi.GPIO as GPIO #引入函数库
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD) #设置引脚编号规则
GPIO.setup(7, GPIO.OUT) #风扇控制引脚为7号,设置成输出模式
pwm=GPIO.PWM(7, 10)
GPIO.output(7, 0)
pwm.start(0)
while True:
# 获取CPU温度
tmpFile = open( '/sys/class/thermal/thermal_zone0/temp' )
cpu_temp_raw = tmpFile.read()
tmpFile.close()
cpu_temp = round(float(cpu_temp_raw)/1000, 1)
# print ("te,p = %f" % cpu_temp)
if cpu_temp >= 58 :
pwm.ChangeDutyCycle(cpu_temp-10)
if cpu_temp <= 50 :
pwm.ChangeDutyCycle(0)
time.sleep(10)
注意,这个脚本需要用到rpi.gpio库,如果还没有安装过需要用下面的指令进行安装:
sudo apt-get -y install python3-rpi.gpio
然后设置这个脚本为开机自动运行:
#!/bin/sh
### BEGIN INIT INFO
# Provides: fanStartup.sh
# Required-start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the svnd.sh daemon
# Description: starts svnd.sh using start-stop-daemon
### END INIT INFO
#任务脚本
#取得root权限,'123456'为密码,不用加引号,'ls'无实际作用
echo 123456|sudo -S ls
#用python3执行执行脚本~/桌面/python/SmartFan.py,sudo -S需要加上
sudo -S python3 ~/桌面/python/SmartFan.py
装完系统配置好之后,最好记得备份一下系统以防系统损坏,这里推荐一篇博客,里面例举了常见的系统备份方法:
https://post.smzdm.com/p/apzkgne7/
我是用第3个gparted这种方法备份成功的,其它几个脚本我试了试都容易出问题。我的系统还把UbuntuMate自带的Firefox浏览器换成了Chromium,占用资源更小。可在下方公众号后台回复“rpi4b img”获取系统镜像,以及刷写和备份工具。镜像刷写进树莓派的方法很简单,用imager工具选好镜像和树莓派SD卡,一键写入。