无人机项目外篇-在NanopiM1跟T3的debian8上移植ROS
来源:互联网 发布:伦铜库存数据 编辑:程序博客网 时间:2024/05/20 12:48
首先因为最近在做无人机项目,学以致用就想的在实际的项目中应用,
肯定得在实际的板子上进行移植,在移植过程中遇到非常多的问题,
也参考过官方的说明以及一大堆的帖子,总结一下经验
一、安装前准备
1.1.添加ROS源
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
1.2先更新一下,可以将缺少的包安装好,避免后面的问题,实际上只要添加了源都应该先apt-get update一次
$ sudo apt-get update$ sudo apt-get upgrade1.3.安装-ROS操作系统安装时所需要的工具
$ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-six$ sudo pip install rosdep rosinstall_generator wstool rosinstall1.4.初始化rosdep
$ sudo rosdep init$ rosdep update
二、开始安装
这边主要因为按照老师的indigo版本安装,而该版本官方的说明并不支持版本代号微 jessie 的debian 8,
所以我们只能采取源码编译的方式安装
2.1因为我们实际上是采源码编译的方式安装,所以先创建一个工作目录
$ mkdir ~/ros_catkin_ws$ cd ~/ros_catkin_ws
2.2下载ros源码,我们安装indigo 桌面完整版
$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall$ wstool init src indigo-desktop-wet.rosinstall
如果下载中断,就不可以在用wstool init 命令了,可以用以下命令继续
$ wstool update -t src
三、解决依赖问题
此部份是本帖最最重要的部份,我经过了很多天的反覆的编译过程,
发现了很多问题都是因为缺少包,因此这个部分一定要认认真真的跟著做,
否则会非常浪费时间
3.1先安装下面几个依赖
$ apt-get install liblz4-dev$ apt-get install libconsole-bridge-dev$ apt-get install liburdfdom-headers-dev$ apt-get install liburdfdom-dev
3.2还有一个collada-dom-dev因为更新源里没有需要自己编译安装
$ mkdir -p ~/ros_catkin_ws/ext_pkg$ cd ~/ros_catkin_ws/ext_pkg$ sudo apt-get install checkinstall cmake$ 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$ tar -xzf collada-dom-2.4.0.tgz$ cd collada-dom-2.4.0$ cmake .$ sudo checkinstall make installcheck-install 工具是一个安装管理工具,他会列出安装的选项,
请注意当有问你Y或N的问题时请一律回答N,然后胎会列出一堆选项,
请选择[2]修改安装包的名称,把名称从collada-dom改成collada-dom-dev
3.3解决rosdep的依赖
$ cd ~/ros_catkin_ws$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie3.4 ROS的源码中,有几个地方在ARM上编译会出错
3.4.1修改 ~/ros_catkin_ws/src/collada_urdf/collada_urdf/src/collada_urdf.cpp 文件
找到 最后一个 #include 的下一行(如果最后的#include下一行是#endif就放到#endif后面)加上
#ifdef __arm__ #include <strings.h>bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const { return !::strcasecmp(p1,p2); }#endif3.4.2修改 ~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp
找到 最后一个 #include 的下一行(如果最后的#include下一行是#endif就放到#endif后面)加上
#ifdef __arm__ #include <strings.h>bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const { return !::strcasecmp(p1,p2); }#endif
四、修改交换空间
因为编译的时候会消耗大量的内存,尤其多线程编译的时候,内存耗尽自动就会结束进程
经过测试如果使用4线程,至少得给予2G的交换空间,
$ mkdir -p /opt/temp$ dd if=/dev/zero of=/opt/temp/swap bs=1024 count=2048000这边的count=2048000 代表2G大家可以看自己的SD卡大小自行调整
$ mkswap /opt/temp/swap$ swapon /opt/temp/swap请注意这边是创建一个文件 /opt/temp/swap并且初始化该文件之后,
使用swapon命令启用交换空间,可以使用swapoff 命令卸载,
上述方法为一次性有效,下次重启并不会自动挂载swap分区,
如果用不到的话可以直接删除swap文件节省空间
五、编译安装
因为M1跟T3內核数不同,并且过大的进程数会导致资源耗尽,因此强烈建议 M1 (四核)使用 -j2 而T3(八核)使用-j4
$ cd ~/ros_catkin_ws$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2
编译总共约需3~4小时,请耐心等候
....
....
...
最后编译完成就可以愉快的使用ROS操作系统了~~~~
- 无人机项目外篇-在NanopiM1跟T3的debian8上移植ROS
- ROS在Zedboard上的移植
- 无人机学习:组合导航系统在四旋翼无人机上的实现
- ROS小实验1:A*算法在ROS上的移植
- UCOSii项目在NIOSii上的移植
- 无人机项目的打算
- 更改移植coco2dx在android上的项目图标
- 无人机项目1: Robot Operation System (ROS机器人操作系统)
- 在DEBIAN8.6上搭建Portia(可视化Scrapy)的注意事项
- ROS在ARM上的编译
- ROS在ARM上的编译
- ROS在ARM上的编译
- 4.ROS在Pcduino上的安装
- ROS在多机器人上的运行
- ROS在ARM上的编译
- ROS在NanoPi2上的源码编译
- Github上的机器人无人机
- 修改控制台的字体:跟编辑器字体在项目栏的一列上,如图
- 5.31模拟赛
- elclipse web.xml自动提示补全问题
- jq的选择元素
- Windows 安装 Scrapy
- 基于MapReduce的并行k-means聚类
- 无人机项目外篇-在NanopiM1跟T3的debian8上移植ROS
- Scrapy入门实例
- 云计算的概念及关键技术
- EWOULDBLOCK和EAGAIN
- CG中的几何学——与点和向量相关的计算方式【3】
- [李景山php] 销毁进程 wait 及 waitp 函数
- 生产者—消费者模型
- 每段时间Android开发10个知道(基础系列)-170527
- jq的操作