树莓派上安装 ROS Kinetic

ROS系统对Ubuntu系统最友好,好像可以直接安装一样,但我找不到可用的,只好在树莓派的原生系统Raspbian上安装和使用ROS系统。我测试的树莓派是 3B, 1G内存,我要去买个4B 8G的。

准备

当然首先是按照raspberry PI 的要求安装好派的系统,并正常运行。如果没有,去https://www.raspberrypi.org/software/ 。

有个中文教程强调一定要装好opencv,我也就照办了,树莓派上安装python 的 opencv(非编译方式)。官方的教程没看到这个要求。

查看os 的版本:
cat /etc/os-release     # OS版本资讯

设置ROS库

设置与版本有点关系。

Raspbian Stretch::

除了需要安装dirmngr外,其他与:Raspbian Jessie:一样。

$ sudo apt-get install dirmngr

Raspbian Buster: 与Raspbian Jessie:一样。

Raspbian Jessie: 

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新:

$ sudo apt-get update
$ sudo apt-get upgrade

安装Bootstrap依赖项

按下面安装:

$ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

初始化 Rosdep

$ sudo rosdep init
$ rosdep update

 安装

创建catkin 工作区

$ mkdir -p ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

接下来,将要获取核心软件包。 为此使用wstool。 根据安装的特定要求,选择wstool命令,这里只是二选一安装一个:

ROS-Comm: (官方推荐)ROS 包, build, 和通讯库,.没 GUI 工具.

$ rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
$ wstool init src kinetic-ros_comm-wet.rosinstall

桌面型:ROS, rqtrviz, 和robot 库:

$ rosinstall_generator desktop --rosdistro kinetic --deps --wet-only --tar > kinetic-desktop-wet.rosinstall
$ wstool init src kinetic-desktop-wet.rosinstall

这将在给定的要求中添加所有的catkin或wet软件包,然后将源提取到〜/ ros_catkin_ws / src目录中。 该命令将花费几分钟的时间将所有核心ROS软件包下载到src文件夹中。 -j8选项并行下载8个软件包,原文这么说,这里没看到这个命令。 

下面这是可选的,只是做个例子,你可以下载更多的:

$ rosinstall_generator robot --rosdistro kinetic --deps --wet-only --tar > kinetic-robot-wet.rosinstall
$ wstool init src kinetic-robot-wet.rosinstall

 如果中间出现错误,可以下面继续,应该说是保证要编译的源是完整的。

wstool update -j4 -t src

解决依赖库 

在构建Catkin工作区之前,需要确保具有所有必需的依赖项。 我们为此使用rosdep工具,但是,存储库中有几个依赖项。 必须先手动构建它们。 

手工构建的:

如果编译collada_urdf失败,可以如下替代: 

mkdir -p ~/ros_catkin_ws/external_src
cd ~/ros_catkin_ws/external_src
wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip
unzip assimp-3.1.1_no_test_models.zip
cd assimp-3.1.1
cmake .
make
sudo make install

 用下面方法设置替换:

$ rosinstall_generator desktop --rosdistro kinetic --deps --wet-only --exclude collada_parser collada_urdf --tar > kinetic-desktop-wet.rosinstall

用rosdep 解决依赖库,这根据版本不一样,命令不一样:

Raspbian Stretch:

$ cd ~/ros_catkin_ws
$ rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:stretch

Raspbian Jessie:

$ cd ~/ros_catkin_ws
$ rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:jessie

 Raspbian Buster:

$ cd ~/ros_catkin_ws
$ rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:buster

 编译catkin 空间

一旦完成了软件包的下载并解决了依赖库,就可以编译catkin软件包了。

Invoke catkin_make_isolated:

注意:在Raspbian Buster上,编译可能会失败,并显示"'boost/tr1/unordered_set.hpp' file not found"。这是因为Kinetic中使用的rospack版本依赖于boost 1.58。要解决此错误,请尝试手动安装boost 1.58。

(注意:当使用GCC 8时,通过apt-get获得的libboost 1.58与librosconsole不兼容,解决方案是使用GCC 8从源代码构建boost 1.58,或者将ROS的早期版本用于整个ROS版本。同样,几乎所有Kinetic ROS软件包都使用libboost 1.58,并且无法使用较新版本的libboost进行构建,在catkin工作区中构建的任何内容上继续使用1.58)

(请注意:如果稍后通过apt-get安装libpcl(与rtabmap或其他点云软件包一起使用),它将作为依赖项安装最新的libboost 1.67。在/ usr / local / lib和在/ usr / lib中自动安装的libboost 1.67会导致rtabmap出现CloudViewer.cpp中的运行时错误,因此建议不要实际安装手动构建的libboost 1.58,而应由boost的cmake的BOOST_INCLUDEDIR和BOOST_LIBRARYDIR指向,boost的构建输出实际上向您展示了如何做。)

Raspbian Buster: 这个版本需要使用 gcc -5 的版本,需要如下操作,是不是其他也需要这样,没说,但我的就是这个版本。

$ sudo apt remove libboost1.67-dev
$ sudo apt autoremove
$ sudo apt install -y libboost1.58-dev libboost1.58-all-dev
$ sudo apt install -y g++-5 gcc-5
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20
$ sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
$ sudo update-alternatives --set cc /usr/bin/gcc
$ sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
$ sudo update-alternatives --set c++ /usr/bin/g++
$ sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

一般用下面的命令来编译:

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic

swap 设置 等解决 "internal compiler error"

对于1G的树莓派来说,肯定内存不够,这就要设置swap 内存为1G 来解决。参看:https://nebl.io/neblio-university/enabling-increasing-raspberry-pi-swap/

其实很简单,说明如下:

1:暂时关闭swap: 

sudo dphys-swapfile swapoff

2: 编辑 /etc/dphys-swapfile 文件:

sudo nano /etc/dphys-swapfile

找到 CONF_SWAPSIZE  并修改为1024(1G),然后保存并退出。

CONF_SWAPSIZE=1024

3: 初始化 swap

sudo dphys-swapfile setup

4:重启swap

sudo dphys-swapfile swapon

还有是用下面命令替代上面的编译命令:

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2

这里用了-j2 而缺省是-j4 ,4核的意思吧。

记得source

全部编译好后,应该安装好了,然后要 source:

$ source /opt/ros/kinetic/setup.bash

或者加入启动自动执行:

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

验证

运行 roscore

参考 :测试ROS安装是否成功

上面的安装过程参看了:

Raspbian安装ROS系统Kinectic|树莓派4B安装ros使用OpenCV(全流程)

Installing ROS Kinetic on the Raspberry Pi

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/114509093