树莓派先安装ubuntu
下载ubuntu系统(ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz)
https://ubuntu-mate.org/raspberry-pi/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz
raspberry 官网:https://www.raspberrypi.org/
linux社区:https://wiki.ubuntu.com/ARM/RaspberryPi
一种安装方式是镜像,打开Win32Diskimager,找到你的.img文件,设备选择你的卡的盘符,点击写入(可能会提示写入物理设备会导致其不可使用,不用在意)
另一种安装方式是直接解压,使用raspberry官网推荐的noods安装系统,只需要将noods下载下来,让后解压到你的sd卡,然后将sd卡插入到树莓派,就可以了。
windows用户可以通过磁盘工具查看sd卡的状态,会发现你的sd卡被划分成了三个区域,空闲区域大约50M左右,fat区域(即boot盘)系统可以打开,还有一个ext4区域(系统的root盘)这个区域linux用户可以直接查看到;还有一个较大的空闲区域,你的系统最终会被安装到这个位置。如下图
Ubuntu mate镜像文件 的两个区:boot区和root区,前者的内容为驱动内容,包括raspberry的cpu驱动,kernel内核,启动项,配置文件等。看boot盘中的内容可以看到很多BCM开头的内容,这个是与你的raspberry的cpu型号相关的,你看一看这你的cpu型号来核查,这里是否包括你的raspberry的启动项,如果没有,那么启动时会出现彩虹屏,无法安装系统的问题。还有两个文件比较重要,就是cmdline.txt和config.txt这里面存放的是你的raspberry的系统设置。后者存放系统和用户数据等,类似Win下的C盘。见下图:
截止2018年09月05日 raspberry pi 3B+的三方镜像包还没有正式可以使用的,不过参考linux社区的连接,可以看到官方镜像说,对于3/3B+是可以使用2的镜像包的,只需要做出部分修改。
因为,早期的部分Ubuntu 16.04,是基于树莓派2制作的BootLoader,所以当在树莓派3上运行时,开机出现蓝红屏。此问题的解决方式是在制作完镜像文件后,更换其中system-boot分区的4个与启动引导相关的文件。可参考下文:
https://blog.csdn.net/SimileciWH/article/details/82453547
解决开机出现[Failed] Failed to start Load Kernel Modules. 的问题
这是因为默认加载的kernel,其实在路径中并不存在的问题,解决办法为:
sudo vim /etc/modules-load.d/cup*.conf
将文件中的内容全部注释掉,重启就可以了。如下:
# Parallel printer driver modules loading for cups
# LOAD_LP_MODULE was 'yes' in /etc/default/cups
# lp
# ppdev
# parport_pc
缩短开机时间
发现raspberry的开机时间很长,通过系统查看工具发现,startup需要2min多,这绝不是我们想要的,因此决定cut掉一些不用的service来加快开机时间。可以先安装一个sysv-rc-conf工具,它可以有效的帮助你决定什么启动项可以被cut,安装方法为:
sudo apt-get install sysv-rc-conf
#然后,启动命令
sudo sysv-rc-conf
用方向键移动光标,1,2,3,4,5,6,S是优先级等级,带交叉符号的为允许的启动项,可以通过空格可以关闭启动项。
通过指令,查看开机时间:
systemd-analyze time
通过指令systemd-analyze blame,查看有哪些服务参与了开机启动:
$ systemd-analyze blame
8.024s NetworkManager-wait-online.service
3.496s dev-mmcblk0p2.device
3.129s networking.service
2.732s motd-news.service
2.588s lightdm.service
2.450s snapd.service
2.396s hciuart.service
2.309s grub-common.service
2.246s triggerhappy.service
2.224s ondemand.service
2.175s speech-dispatcher.service
1.918s ModemManager.service
1.678s NetworkManager.service
1.290s accounts-daemon.service
715ms sshguard.service
614ms systemd-modules-load.service
563ms polkitd.service
519ms keyboard-setup.service
518ms console-setup.service
502ms systemd-logind.service
415ms systemd-udevd.service
403ms rsyslog.service
377ms avahi-daemon.service
372ms systemd-journald.service
363ms systemd-fsck-root.service
309ms systemd-tmpfiles-setup-dev.service
272ms systemd-udev-trigger.service
268ms sshdgenkeys.service
260ms ssh.service
249ms colord.service
236ms lm-sensors.service
217ms raspi-config.service
201ms systemd-journal-flush.service
182ms resolvconf.service
145ms sys-kernel-debug.mount
134ms wpa_supplicant.service
119ms dev-mqueue.mount
117ms plymouth-start.service
108ms rng-tools.service
107ms snapd.seeded.service
95ms binfmt-support.service
95ms alsa-restore.service
89ms apparmor.service
88ms [email protected]
88ms bluetooth.service
86ms pppd-dns.service
83ms ufw.service
80ms systemd-remount-fs.service
78ms [email protected]
73ms systemd-random-seed.service
72ms systemd-sysctl.service
66ms systemd-user-sessions.service
60ms [email protected]
55ms systemd-tmpfiles-setup.service
51ms rc-local.service
50ms hddtemp.service
47ms setvtrgb.service
46ms plymouth-read-write.service
42ms systemd-update-utmp.service
42ms systemd-timesyncd.service
40ms systemd-tmpfiles-clean.service
37ms ureadahead-stop.service
37ms prefer-timesyncd.service
36ms kmod-static-nodes.service
25ms proc-sys-fs-binfmt_misc.mount
25ms sys-kernel-config.mount
25ms boot.mount
21ms systemd-rfkill.service
20ms systemd-update-utmp-runlevel.service
11ms sys-fs-fuse-connections.mount
5ms plymouth-quit-wait.service
4ms snapd.socket
lines 50-72/72 (END)
命令行关闭/开启service的命令为:
sudo systemctl disable/enable xxxx.service
ubuntu安装完成后开始安装ROS
树莓派官方ROS下载地址及安装
安装ROS:
添加sources.list
sudo sh -c'echo“deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc)main”> /etc/apt/sources.list.d/ros-latest.list'
添加keys(如果您在连接密钥服务器时遇到问题,可以尝试在上一个命令中替换hkp://pgp.mit.edu:80或hkp://keyserver.ubuntu.com:80)
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
系统更新
sudo apt-get update && sudo apt-get upgrade
开始安装ros
安装Kinetic版本(ubuntu 16版本)
sudo apt-get install ros-kinetic-desktop-full ##完全版
sudo apt-get install ros-kinetic-desktop ##桌面版
sudo apt-get install ros-kinetic-ros-base ##基本版
基本版更适合树莓派,与桌面版相比,只是少了GUI。
配置ROS
初始化rosdep
sudo rosdep init && rosdep update
ROS的环境配置,使得你每次打开一个新的终端,ROS的环境变量都能够自动配置好,也就是添加到bash会话中,因为命令source /opt/ros/kinetic/setup.bash 只在当前终端有作用,即具有单一时效性,要想每次新开一个终端都不用重新配置环境,就用echo语句将命令添加到bash会话中。
#Ubuntu 16.04
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
rosinstall 是OS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就可以给某个ROS软件包下载很多源码树。在ubuntu上安装这个工具,请运行:
sudo apt-get install python-rosinstall
测试ROS能否正常运行(电脑重启!重启!)
roscore
如果无错误,则配置成功!
硬件接好之后,如果要按照教程,比如进行键盘控制的话,还需要执行如下指令
sudo apt-get install -y ros-kinetic-rosserial
sudo apt-get install -y ros-kinetic-navigation
sudo apt-get install -y ros-kinetic-teleop-twist-keyboard
sudo ln -s /dev/ttyUSB0 /dev/xrbase
如果要键盘控制小车运动的话,可以在终端执行
roslaunch xrrobot bringup.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
按照提示,按键盘的i,j,,,等按键,即可控制小车的运动。
ROS是支持分布式的,所以在同一个局域网下,我们可以设定一个主机作为主节点,运行roscore,其他的从机ROS_MASTER_URI地址只要与主机保持一致,就可以实现的分布式操作。举个例子,我用我的PC作为主节点,运行roscore,我的raspberry作为从机1号,运行一个节点,通过rostopic查看他们之间是否正常通信。参考自ROS官网,
http://wiki.ros.org/ROS/Tutorials/MultipleMachines
https://github.com/mktk1117/six_wheel_robot/wiki/Communication-between-Raspberry-Pi-and-PC-(ROS)
如果你有更多的从机,只需要:
1、将他们和你的主机连接到同一个局域网;
2、设置好主机的ROS_HOSTNAME,和ROS_MASTER_URI;
3、设置好从记得ROS_HOSTNAME(这个是每个从机都不相同的),和ROS_MASTER_URI(这个是每个从机都和主机相同)
参考文献:
http://wiki.ros.org/melodic/Installation/Ubuntu
https://blog.csdn.net/wxz3wxz/article/details/70226928
https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter1/1.1.html?q=
————————————————
版权声明:本文为CSDN博主「面-包」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40490238/article/details/82693922