zl程序教程

您现在的位置是:首页 >  其他

当前栏目

树莓派3B+ (ubuntu-mate-16.04.2)安装ROS Kinetic版本,已测试过

安装测试Ubuntu 版本 树莓 ros 16.04 Mate
2023-09-11 14:17:06 时间

 

树莓派先安装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 user@108.service
            88ms bluetooth.service
            86ms pppd-dns.service
            83ms ufw.service
            80ms systemd-remount-fs.service
            78ms user@1000.service
            73ms systemd-random-seed.service
            72ms systemd-sysctl.service
            66ms systemd-user-sessions.service
            60ms systemd-fsck@dev-mmcblk0p1.service
            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