本文记录了给一台树莓派4B配置ROS开发环境的全部操作过程,和在实际操作过程中遇到的各种问题的解决方法,希望对有相同需求的小伙伴们有帮助。
本文的目标是直接在树莓派上开发ROS,因而在安装时与目标相关的力求“装全套”;如果仅需使用树莓派作为机器人中控设备而安装ROS,请参考这篇文章。
下表中列出了本文中使用到的所有硬件和软件。
名称 | 备注 | |
硬件 | 树莓派4B | 8G RAM版本 |
SD卡 容量128G | 至少需要32G | |
显示器,键盘,鼠标 | (有些无线鼠标会出现延迟问题,解决方法后面会讲) |
|
网线(可选) | ||
软件 | 官方烧写软件 | 下载:Raspberry Pi Imager |
Ubuntu 系统镜像文件 | 下载:Ubuntu Server 20.04.03 LTS 64-bit (注意要选对版本) |
|
SD卡格式化软件(可选) | SD Card Formatter (移动到页面最底部,点击 Accept 即可下载) |
ROS目前的最新发行版为ROS Noetic,与其对应的系统则为Ubuntu 20 LTS,因此本次的安装思路非常明确:先安装Ubuntu 20.04 LTS,随后配置网络,更新,安装GNOME图形桌面,最后安装ROS。
如图1,打开SD卡格式化软件,选择“Quick format” -> 然后点击"Format"即可。
图1
首先,如图1,打开Ubuntu官网的下载页面,下载正确的系统版本,选择:“Install Ubuntu on a Raspberry Pi” -> “Download Ubuntu Server” -> "Ubuntu Server 20.04.3 LTS" -> "Download 64-bit"。如图2,左侧黄线标记处为正确的版本。
图2
下载完毕后,打开树莓派官方提供的烧录器,点击:“选择操作系统” -> “使用自定义镜像” -> 选择刚刚下载好的镜像文件;然后点击 "选择SD卡" -> 选择刚刚格式化过的SD卡;最后点击“烧录”,等待烧写完毕即可拔出SD卡。
图3
将烧录好的SD卡直接插入树莓派的卡槽中,然后插上鼠标、键盘、显示器,最后插上电源,等待系统自己启动。
初次登陆,默认的用户名和密码都是ubuntu,首次成功登录后,系统会提示用户修改密码。修改完成后,输入以下命令,设置root密码。
sudo passwd
接下来需要手动配置网络。
输入以下命令,打开网络配置文件,直接从结尾处添加个人wifi的配置信息,如图4。
sudo vim /etc/netplan/50-cloud-init.yaml
图4
此处简略说明vim的操作:
- 打开文件后,按“i”键,进入insert模式,然后可以通过方向键移动光标;
- 编辑完成后,先按下Esc键,退出insert模式,然后输入“:wq”,再按Enter键,即可保存退出;
- 未编辑时直接退出要输入“:q”,不保存修改强制退出要输入":q!"
在输入时,该yaml文件的格式需要特别注意:
- 不同层级间的缩进不同,相同层级的缩进要保持相同;
- 冒号如果不在行尾,则需要和后面的内容用空格隔开;
- 如果wifi名称存在空格,则必须加上双引号;但如果不存在空格,则不能加引号;
- 密码无论如何都要加上双引号。
编辑完成后,保存退出,然后输入以下命令检查是否有错误。
sudo netplan --debug try
如果出现任何错误,可以使用以下命令查看具体信息。
sudo netplan --debug generate
如果没有错误,则输入以下命令确认应用新配置。
sudo netplan --debug apply
然后,重启树莓派
sudo reboot
重启后,系统会自动连上网,如果联网失败,则需重复3.3步骤,检查配置是否正确。
如果一切正常,便可以输入以下命令,将所有安装的依赖库都更新到最新版本。
sudo apt update
sudo apt upgrade
初次更新,该过程会持续较长时间。更新完成后,即可输入以下命令安装GNOME图形界面。
sudo apt install ubuntu-desktop -y
该过程也会持续一段时间,安装结束后,再次重启树莓派。
sudo reboot
重启后,系统便会自动加载图形界面,用户只需输入密码进行登录即可。
进入桌面后,用户可以在屏幕的右上角找到“Settings”按钮,如图5,然后找到左侧栏目的最后一项“About”,查看系统版本等信息,如图6。
图5
图6
在安装完图形界面后,笔者还遇到了下列问题,此处一并记录之。
笔者使用的是无线鼠标,不论将鼠标插在树莓派上的哪个USB接口上都存在1秒左右的延迟。要解决该问题,需要修改如下的配置文件:
sudo vim /boot/firmware/cmdline.txt
如图7所示,在第一行的末尾添加上
usbhid.mousepoll=0
图7
保存文件后重启,鼠标延迟就会消失。
由于之前手动配置了文件,此时桌面右上角的WIFI图标显示找不到任何wifi信号,要解决此问题,需要在“/etc/netplan”目录下创建一个新文件:
sudo vim /etc/netplan/01-network-manager-all.yaml
然后输入如下内容:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
保存退出后,重启网络管理服务:
sudo service network-manager restart
再重启一下树莓派,即可解决此问题。
不知为何,在完成上述操作后,笔者发现在系统里竟然找不到Ubuntu的软件中心。不过没关系,输入以下命令安装一下即可。
sudo apt install gnome-software
关于系统语言,笔者强烈建议保持Ubuntu默认的英文环境,这样可以避免很多潜在的问题,比如路径无法识别之类的错误。当然,安装中文输入法还是可以的,详见这篇文章。
至此,Ubuntu系统安装完成!
在下载ROS时,如果身处国内,可能会因为网络问题导致下载失败。如果出现这种情况,则需要更换软件源,具体做法请参考这篇文章。笔者由于暂居国外,没有这方面的需要,此处不再赘述。
如图8所示,打开Ubuntu的"Software and Update",勾选前四项。
图8
如果前面一切都配置无误的话,安装ROS还是很简单的,直接按照官方教程操作即可。除此以外还有古月居的ROS安装教程,解释得很详细,此处仅罗列出所有的命令,小伙伴们按部就班地操作即可。
# 添加ros软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 如果没有安装curl
sudo apt install curl
# 设置密钥
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 更新软件源
sudo apt update
# 安装ros
sudo apt install ros-noetic-desktop-full
# 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
# 运行该脚本,让环境变量生效
source ~/.bashrc
# 安装开发ROS必要的package
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
# 初始化
sudo rosdep init
rosdep update
完成上述操作后,可输入以下命令验证ROS是否已安装成功:
roscore
如果命令行界面如图9所示,说明安装成功。此时可以按“Ctrl+C”退出。
图9
至此,ROS安装完成!
文章最后,笔者罗列了一些对学习ROS有帮助的网上资源,前路漫漫,愿与诸君共勉!
网址 | 备注 | |
---|---|---|
ROS官网 | ROS Wiki | ROS学习必看 |
古月居主页 | 古月居 - ROS机器人知识分享社区 | 很好ROS学习网站 |
古月居ROS入门21讲 | 【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩 | 对初学者很友好 |
官方推荐书籍 | ROS_Robot_Programming_English | 点击下载链接,提供中文版免费下载! |
其它推荐书籍 | Books - ROS Wiki |