ubuntu15.04 + ROS jade

众所周知,一个萝卜一个坑,一个Ubuntu一种ROS。Ubuntu15.04应该已经停止维护了吧,像以往那种脑残式安装ROS一般是不可能的了,没办法,自己编译咯!! 虽然找不到大神关于这方面的帖子  (╯﹏╰)  ,但哥们儿不能轻易放弃!!!

开始的开始,交代一些很重要的东西,由于这个鬼东西已经停止维护了,所以需要修改源,不然你 apt 不上任何东西(改成阿里源也没用 ╮(╯▽╰)╭)

编辑原来的源文件 /etc/apt/sources.list ,将原来的 http://ports.ubuntu.com/ubuntu-ports 全部替换为 http://old-releases.ubuntu.com/ubuntu/,然后保存并 sudo apt-get update

我们的方法是下载 ROS 的包,然后在自己板子上编译。废话不多说,上平台:

硬件:firefly RK3128 (不得不喷一下!!!!官网上竟然只有15.04一个版本,想想都来气,售后技术支持我就不说了)

软件:ROS jade

先给出 ROS 官网地址,虽然报错一大堆,但还是要看(尤其是搞别人没搞过的东西)。

懒得看官网或见英文眼花的朋友,直接看下面 ↓

详细安装步骤(吐血历程,且行且珍惜):

1、安装 boost

我的板子是新的,所以首先要安装 boost,版本是 1 5 4。参考网页

首先安装依赖:

sudo apt-get install mpi-default-dev
sudo apt-get install libicu-dev
sudo apt-get install python-dev
sudo apt-get install libbz2-dev

然后将 boost_1_54_0.tar 拷贝到 /home,并进入,解压:

tar -zxvf boost_1_54_0.tar.gz

进入 boost_1_54_0

sudo ./bootstrap.sh

sudo ./b2

sudo ./b2 install

测试:

新建文件 test.cpp,内容为:
#include<iostream>
#include<boost/lexical_cast.hpp>
int main()
{
int a = boost::lexical_cast<int>("123456");
std::cout << a <<std::endl;
return 0;
}

编译:
g++ test.cpp -o test
运行test,输出 "123456" 表示安装成功。

2、ROS jade 源码包下载

ROS 的下载和安装不是通过 git 啥的下载包,也不是通过 cmake 指令安装,虽然看不懂,不过没关系照着做就行了。

首先这样(为啥?别问我,不知道。):

sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX

添加源(官方源好像用不了,这个是镜像):
sudo sh -c 'echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ vivid main" > /etc/apt/sources.list.d/ros-latest.list'

配置秘钥:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

安装依赖:

apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall python-empy python-nose 

然后:

sudo rosdep init

rosdep update

然后要下载 ROS 包了,我们下载到 ros_catkin_ws 下(应该哪里都可以):

mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws

先下载下载工具:

rosinstall_generator desktop_full --rosdistro jade --deps --wet-only --tar > jade-desktop-full-wet.rosinstall

之后会出现一个 jade-desktop-full-wet.rosinstall 脚本。我们下载的是 ROS 豪华版(全家桶。。可能需要10G多??):

wstool init -j8 src jade-desktop-full-wet.rosinstall

板子存储空间没那么大的话就装个桌面版好了:

rosinstall_generator desktop --rosdistro jade --deps --wet-only --tar > jade-desktop-wet.rosinstall

wstool init -j8 src jade-desktop-wet.rosinstall

全家桶225个包,桌面版189个,,,,如果空间还是不够,那就装个没有GUI工具(rviz等)的吧,这个只有50个包:

rosinstall_generator ros_comm --rosdistro jade --deps --wet-only --tar > jade-ros_comm-wet.rosinstall

wstool init -j8 src jade-ros_comm-wet.rosinstall

时间有一会儿,之后后出现一个 src 文件夹,里面是下载好的源码。然后安装依赖:

rosdep install --from-paths src --ignore-src --rosdistro jade -y

3、ROS jade 编译

真正的编译过程那叫个惨不忍睹,为了亲们不重蹈覆辙,我们先安装一些东西。

首先安装个简单点儿的小东西,poco 库:

sudo apt-get install libpoco-dev libgtest-dev libfltk1.3-dev 

然后编译 boost,有没有人说前面不是已经编译安装过了吗?没毛病,前面是编译过了,而且默认安装在 /usr/local 下,但是进入 /usr/local/lib ,你会发现没有 libboost_thread 开头的几个包。

放心,这次编译我们只编译 libboost_thread 这部分,跟前面也不冲突,进入 boost_1_54_0:

sudo ./b2 --with-thread stage cxxflags="-std=c++11"

然后把 stage/lib 下 libboost_thread 开头的几个包拷贝到 /usr/local/lib 下。

如果没有把这个搞好,后面编译时会出现找不到 libboost_thread 库的问题。

接下来,还是 boost,这次需要改源码:

编辑 /usr/local/include/boost/atomic/atomic.hpp,添加 #include<stdint.h>

否则可能报错:
“/usr/local/include/boost/atomic/atomic.hpp:202:43: error: invalid type in declaration before ';' token typedef atomic<uintptr_t> atomic_uintptr_t;”

然后嘞,下载 console_bridge,编译过程需要,进入 /usr/local 下载:

git clone https://github.com/ros/console_bridge.git

然后编译:

cd console_bridge
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo make install

会安装到 /usr/lcoal 下,但是呢,我们安装的这个东西还需要修改一哈:

编辑 /usr/local/include/console_bridge/console.h

将里面的 CONSOLE_BRIDGE_log 替换为 log  (替换时一定要把 Match case 打上对勾,意思是区分大小写),好像一共替换了 5、6、7、8个吧,不多。

这样是把 CONSOLE_BRIDGE_logWarn 等函数变为 logWarn,与 ROS 源码对应。否则编译 class-loader 时会报错说函数 logWarn 等函数未定义。 

终于,可以编译了:

cd ~/ros_catkin_ws

./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release

编译 225 个包,慢慢等吧    嘿 嘿   !!

编译std_srve时,可能会报错:
Please submit a full bug report, with preprocessed source if appropriate.
原因为内存不足,增加虚拟内存(增加 64 * 16 M):
sudo dd if=/dev/zero of=/home/swap bs=64M count=16
sudo mkswap /home/swap
sudo swapon /home/swap
继续编译:
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
编译完后就可以关掉虚拟内存了:
sudo swapoff /home/swap
sudo rm /home/swap

编译成功后,设置环境变量:
source ~/ros_catkin_ws/install_isolated/setup.bash

不就是那几个问题吗?!库没装,库版本不对,安装位置不对,顶多就是改几行源码,有什么嘞 ╮(╯▽╰)╭(我,,我就吹个NB。。。。编译这个废了不知道多长时间 )努力努力再努力 哈哈

原文地址:https://www.cnblogs.com/hxzkh/p/9193379.html