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。。。。编译这个废了不知道多长时间 )努力努力再努力 哈哈