ROS在树莓派上的安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao_ke_xue/article/details/78771478
    ROS在树莓派上的安装
    本文是总结大佬的经验。

第一章

1.1本次安装我测试了3个平台,分别是
1.1.1:Raspbian-jessie
下载链接:树莓派官网
1.1.2:ubuntu-16.04-preinstalled-server-armhf+raspi3
下载链接: ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz
1.1.3:ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi
下载链接:
https://ubuntu-mate.org/raspberry-pi/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz.torrent
其中在Raspbian和ubuntu-16.04上安装的为ROS-Indigo,在ubuntu-mate-16.04上安装的是ROS-Kinetic
其中前两个平台都失败了,如果想要直接安装,请直接看第三个平台ubuntu-mate的教程。
关于树莓派的系统系统烧写教程有很多哦,这个经验还可以,大家看下
http://jingyan.baidu.com/article/b7001fe1b46bd50e7282ddc5.html
切记树莓派的镜像都是以.img后缀结尾的。安装这个需要有一定的linux基础,并且之后的安装有的需要很长时间下载,所以与一些需要耐心等待,有的需要好几个小时。

第二章:Raspbian-jessie准备安装

首先从第一个树莓派官方镜像说起

2.1添加ROS代码仓库
$ sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu jessie main” > /etc/apt/sources.list.d/ros-latest.list’
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
更新一下
sudoaptgetupdate sudo apt-get upgrade
2.2安装相关依赖包
sudoaptgetinstallpythonpippythonsetuptoolspythonyamlpythondistributepythondocutilspythondateutilpythonsix sudo pip install rosdep rosinstall_generator wstool rosinstall

2.3初始化rosdep
sudorosdepinit rosdep update

第三章:开始安装

3.1创建catkin工作空间用于编译ROS源码
mkdir /roscatkinws cd ~/ros_catkin_ws
接下来下载ROS源码,我们要安装的是完整版(Desktop)下载并产生package列表,耐心等待
rosinstallgeneratordesktoprosdistroindigodepswetonlyexcluderoslisptar>indigodesktopwet.rosinstall wstool init src indigo-desktop-wet.rosinstall
如果中途下载中断,可以使用下面的命令恢复下载,如果不确定是否完全下载也可以用下面的命令来检测
$ wstool update -t src
3.2解决依赖
这部分很重要,编译报错的原因大多数都是在这里,我在编译的过程中报错卡在”collada_parser”这里,这是因为”collada_parser”的依赖包”liburdfdom-headers-dev”在最近的几个版本都用使用C++11的std替换掉了boost组件,而”collada_parer”源码里面用的依旧是boost组件,所以我们不能直接安装最新版本(2.4)的”liburdfdom-headers-dev”,这里我们要安装的是1.0.0版本,但是1.0.0版本又缺少一个头文件utils.h,具体解决方法在下面。
由于libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev这5个依赖包不在Raspbian的软件源里面,不能直接通过apt-get安装,需要下载源码手动编译安装

创建一个新目录来存放这5个依赖包
mkdir /roscatkinws/externalsrc sudo apt-get install checkinstall cmake
$ sudo sh -c ‘echo “deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi” >> /etc/apt/sources.list’
sudoaptgetupdatelibconsolebridgedev: cd ~/ros_catkin_ws/external_src
sudoaptgetbuilddepconsolebridge apt-get source -b console-bridge
sudodpkgilibconsolebridge0.2.deblibconsolebridgedev.debliblz4dev: cd ~/ros_catkin_ws/external_src
sudoaptgetsourceblz4 sudo dpkg -i liblz4-*.deb
liburdfdom-headers-dev:
cd /roscatkinws/externalsrc git clone https://github.com/ros/urdfdom_headers.git
cd/urdfdomheaders git reset –hard 9aed725
cmake. sudo checkinstall make install
前面分析了编译过程可能出现”collada_parser”报错的原因,这里的’9aed725’就是将”liburdfdom-headers-dev”的安装版本变成我们需要的1.0.0版本。check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,就是会有一个出现很多选项的步骤,选择[2],将名字从”urdfdom-headers” 改为 “liburdfdom-headers-dev”,其余有[y]或[n]的问题都输入’n’按回车, 否则会编译出错。
安装检查安装软件checkinstall
sudocheckinstallmakeinstallliburdfdomheadersdev(utils.h)/usr/local/include/urdfmodel, cd /usr/local/include/urdf_model
$ sudo wget https://raw.githubusercontent.com/ros/urdfdom_headers/master/urdf_model/include/urdf_model/utils.h
liburdfdom-dev:
cd /roscatkinws/externalsrc sudo apt-get install libboost-test-dev libtinyxml-dev
git clone https://github.com/ros/urdfdom.git
cdurdfdom cmake .
$ sudo checkinstall make install
check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 “urdfdom”改为”liburdfdom-dev” ,其余有[y]或[n]的问题都输入’n’按回车, 否则会编译出错。

collada-dom-dev:
cd /roscatkinws/externalsrc sudo apt-get install libboost-filesystem-dev libxml2-dev
$ wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz
tarxzfcolladadom2.4.0.tgz cd collada-dom-2.4.0
cmake. sudo checkinstall make install
check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 “collada-dom”改为 “collada-dom-dev” ,其余有[y]或[n]的问题都输入’n’按回车, 否则会编译出错。

解决rosdep的依赖
cd /roscatkinws rosdep install –from-paths src –ignore-src –rosdistro indigo -y -r –os=debian:jessie

3.3编译catkin工作空间
$ nano ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp
修改 ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp文件,在最后一个#include(如果#include的下一行是#endif则放到#endif后)行后加入以下代码:

ifdef arm

include

endif

$ nano ~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp
修改~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp文件,在最后一个#include(如果#include的下一行是#endif则放到#endif后)行后加入以下代码:

ifdef arm

include

endif

修改交换空间大小

树莓派在编译的时候会消耗很多CPU和内存资源,可能会出现死机和编译器内部错误,为了防止这种情况发生,需修改系统交换空间大小。
sudonano/etc/dphysswapfileCONFSWAPSIZE=100CONFSWAPSIZE=1024 sudo reboot
正式编译和安装
cd /roscatkinws sudo ./src/catkin/bin/catkin_make_isolated –install -DCMAKE_BUILD_TYPE=Release –install-space /opt/ros/indigo
设置一下ROS的环境变量
source/opt/ros/indigo/setup.bashROSshellbash echo “source /opt/ros/indigo/setup.bash” >> ~/.bashrc
测试安装是否成功
$ roscore

第3章:问题分析

这个版本我没有安装成功,最后编译的时候一共要编译187个包最初是卡在了140的包的地方,会提示错误最后失败,经过解决会编译卡在179的那个地方,反复安装了有10边,都是编译不错去,到179包错误的时候提示collada-urdf包编译错误,我将collada-urdf包从编译目录里面移除来,但又会出现collada-parsers错误,每次移出一个报错的包,都会有下一个包报错,网上有分析说是因为有一些包在git上面更更新了,所以编译不过去,但是我下载了旧版本,依旧编译不过去,最后查了百度和google很多资料都没有解决方法,所以最后只能放弃。

第4章:ubuntu-16.04-preinstalled-server-armhf+raspi3安装

这个ubuntu镜像没有桌面进去还要安装raspi2/ppa和xubuntu桌面,大概会花费半天的时间安装。https://wiki.ubuntu.com/ARM/RaspberryPi#SSH_server这个链接是怎么在树莓派上安装ubuntu16.04
简单来说就几步:把ubuntu系统烧写进去,
sudo add-apt-repository ppa:ubuntu-raspi2/ppa
sudo apt-get update
sudo apt-get install xubuntu-desktop
运行以上几个命令,然后sudo reboot重启树莓派就可以了,这个系统初始的时候是没有桌面的,咱们上面的命令安装了一个桌面。
之后就可以正式开始安装了。

1.1:设置ROS源
sudoshcecho"debhttp://packages.ros.org/ros/ubuntu (lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

1.2:添加KEY
$ sudo apt-key adv –keyserver hkp://ha.pool.sks-keyservers.net –recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

1.3:更新软件
sudoaptgetupdate sudo apt-get upgrade

1.4:安装桌面版
sudo apt-get install ros-indigo-desktop

问题就出在这一步,当使用上述命令安装桌面版ros的时候,会报错,提示很多的依赖包没有安装,当使用sudo apt-get install ros-indigo-PACKAGE这个依赖包安装依赖时,又会提示当前这个依赖包缺乏依赖,再进行下级安装的时候,又会有提示下一级缺少安装包,所以没办法安装,我在git上面找到了缺少的依赖包,使用
Sudo git clone 命令下载下来后,
在使用命令
Sudo cmake .进行编译二进制包时,也会发生报错,网上根本没有任何解决方法,试了很多种编译的方法,都没办法安装成功,所以最后只能放弃。

第5章:ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi

这个版本现在ubuntu已经不维护了,现在ubuntu使用的arm开发系统为ubuntu core,很难用,不会用,抱着试试的心态使用了这个版本系统。

6.1:设置ROS源
sudoshcecho"debhttp://packages.ros.org/ros/ubuntu (lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

6.2:添加KEY
$ sudo apt-key adv –keyserver hkp://ha.pool.sks-keyservers.net –recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

6.3:更新软件
sudoaptgetupdate sudo apt-get upgrade
更新时间比较长,大概需要2个小时

6.4:安装桌面版
sudo apt-get install ros-kinetic-desktop-full
这个安装时间很长,差不多要4个小时,要耐心等待

6.5:初始化rosdep
sudo rosdep init
rosdep update

6.6:启用环境
source /opt/ros/kinetic/setup.bash

6.7:增加到.bashrc
$ echo “source /opt/ros/kinetic/setup.bash” >> ~/.bashrc

6.8:安装rosinstall
$ sudo apt-get install python-rosinstall

6.9:测试
测试这里要注意,首先需要安装一个键盘通信包,首先在根目录下使用命令
sudo git clone https://github.com/ros-drivers/joystick_drivers_tutorials.git
写入路径:
echo “export ROS_PACKAGE_PATH=~/ros_workspace: ROSPACKAGEPATH>> /.bashrcechoexportROSWORKSPACE= /rosworkspace>> /.bashrc. /.bashrc:echo ROS_PACKAGE_PATH
一般是opt/ros/Kinetic/share

把刚才下载的turtle_teleop包复制到/opt/ros/Kinetic/share下
检查包:
rospack find turtle_teleop
安装包:
rosmake turtle_teleop

之后就可以测试了:
1:打开新的终端,运行ROS核心
roscore
2:打开新的终端,运行小海龟界面
rosrun turtlesim turtlesim_node
3:打开新的终端,运行键盘控制程序
roscd turtle_teleop
roslaunch launch/turtle_keyboard.launch

之后选中键盘控制程序那个终端,如果可以控制小海龟走路,就证明ros安装成功了,之后就可以进一步学习Ros的各项功能了。

猜你喜欢

转载自blog.csdn.net/zhao_ke_xue/article/details/78771478