rosonarm--rk3066上本地编译rosgroovy(代码片段)

sununs11 sununs11     2023-02-25     459

关键词:

1. 开源机器人操作系统ROS(Robot Operating System)简介

ROS(Robot Operating System)是一个开源的为机器人软件开发设计的软件框架,在异构计算机集群中提供类似操作系统的功能。它并不是一个计算机的操作系统,而是机器人的操作系统,或者称为元级操作系统(Meta Operating System)。据目前唯一一本比较官方的关于ROS的书《ROS By Example Volume 1》介绍,“The primary goal of ROS (pronounced "Ross") is to provide a unified and open source programming framework for controlling robots in a variety of real world and simulated environments.”,ROS的原始目的就是为了在一系列真实和模拟的环境中控制机器人提供一个统一的开源编程框架。为了实现这一目标,ROS架构中有三个层次的概念:文件系统级(Filesystem Level),计算图级(Computation Graph Level)和社区级(Community Level)。 具体可以查阅维基百科官网wiki,这里就不过多介绍了。

2. ROS Groovy Galapagos

ROS Groovy Galapagos是2012年12月31日发布的ROS最新版本,主要支持Ubuntu 11.10、Ubuntu 12.04和Ubuntu 12.10。提到这个版本的原因是它采用了新的构建系统——catkin,准备逐渐取代之前的rosbuild。它解决了rosbuild当中的几个问题,让ROS可以持续发展和扩大规模,相对于rosbuild更符合文件系统层次结构标准(Filesystem Hierarchy Standard,FHS),使在其它操作系统和架构上发布ROS包更加容易。正是这个原因让我在MK802 IIIS上编译ROS的时候轻松很多,如果编译之前的版本(比如fuerte)将会遇到更多问题。

因为catkin的引入,ROS文件系统级的Stacks概念被移除了,原因是Package和Stack之间依赖性跟踪出现的问题,取代的是元包(metapackage)的概念。

3. Ubuntu on ARM

ARM版Ubuntu的软件源是在http://ports.ubuntu.com/上,和桌面版的略有区别,我遇到的一个问题就是桌面版python-*的包ARM版几乎都没有,解决办法是使用python的包管理工具pip安装,比如桌面版上apt-get install python-PACKAGENAME,用pip install PACKAGENAME替代。据说easy_install的维护不够好,所以应该尽量用pip。

我使用的是RK3066上的Picuntu,关于Picuntu请看前一篇文章

4. 编译ROS for ARM

从前为ARM编译一般都需要在x86的上位机上交叉编译,有一个叫做EROS的项目,但是似乎文档不全,个人觉得用它成功编译的人应该也不多。近几年ARM性能足够强了,在ARM运行的操作系统上直接编译也不是什么问题。所以完全可以参考官网从源码编译的教程,官网还特别搞了一个在树莓派上编译的教程。

当然,树莓派的内存只有512MB,而且是ARM 11,使用ROS会受到很大的限制,既然它都可以编译ROS Groovy,那么双核A9的RK3066,1G内存就更不是问题了。

下面一步步按照官网上从源码编译的wiki来:

4.1 安装基础依赖包

操作系统相关的:

sudo apt-get install build-essential git python-pip 

ROS Common(或者叫ROS Base,Base Bones什么的)依赖的:

sudo apt-get install libtinyxml-dev libgtest-dev  liblog4cxx10-dev

注意这里只是在Picuntu RC2 上需要额外安装的库,可能你还会遇到其它库的问题。desktop或者desktop-full依赖的库更多,所以更难解决。

还有一些重要的工具:

sudo pip install wstool rospkg rosdep

可能会遇到很多python-*的包缺少的问题,需要用sudo pip install PACKAGENAME安装

安装完rosdep以后初始化一下:

sudo rosdep init
rosdep update

4.2 构建catkin包

上面提到过,ROS Galapagos采用了新的构建工具catkin代替rosbuild,但并不是所有的包都转换成了catkin的版本,所以先构建ROS的核心包(使用catkin),然后再构建其余的使用rosbuild的部分。

4.2.1 创建catkin工作空间

mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws

下一步是下载核心包的源码并构建它们,你有三种选择:

Desktop-Full Install: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception

wstool init -j8 src http://packages.ros.org/web/rosinstall/generate/raw/groovy/desktop-full

Desktop Install : ROS, rqt, rviz, and robot-generic libraries

wstool init -j8 src http://packages.ros.org/web/rosinstall/generate/raw/groovy/desktop-full

ROS-Comm: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.

wstool init src -j8 http://packages.ros.org/web/rosinstall/generate/raw/groovy/ros_comm

这个操作是下载catkin包的代码到~/ros_catkin_ws/src目录下,-j8是指并行下载8个包,在RK3066上是无压力的,如果是树莓派可能需要减少。

注意,在后面解决依赖关系和构建的时候很多包依赖的库可能会缺,你可以根据错误提示自行安装所缺的库。我在MK802 IIIS上只成功编译了ROS-Comm,Desktop编译失败了,而Desktop full在官网wiki中说还有问题:There are build errors in desktop-full (gazebo simulator) at the moment, so the desktop variant is suggested at this time. See: https://code.ros.org/trac/ros-pkg/ticket/5595

还可以安装其它的包,如robot:

wstool init -j8 http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/robot

更多的可以在REP 131中查阅。

4.2.2 解决依赖关系

在构建包之前你必须确保你解决了所有的依赖关系

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

--from-paths选项表示我们想要安装某个文件夹下的所有包,这里是src文件夹。--ignore-src选项表示rosdep不应该从包管理器安装任何src文件夹的包,因为我们现在做的就是构建它。--rosdistro选项之所以需要是因为我们没有设置好ROS的环境,所以我们必须指明我们构建的是ROS的哪个版本。最后,-y选项表示出现的提示选择都选择yes

另外如果你在安装某些包出现错误的情况下仍想安装其它所有可以安装的包,你可以使用-r选项,也就是rosdep install --from-paths src --ignore-src --rosdistro groovy -yr

4.2.3 构建catkin工作空间

调用catkin_make_isolated:

./src/catkin/bin/catkin_make_isolated --install

默认安装在~/ros_catkin_ws/install_isolated下,如果要安装到其它地方,比如/opt/ros/groovy,可以使用--install-space /opt/ros/groovy

如果编译过程中出现错误提示缺少库,需要自行安装解决。

如果构建完成了,再执行:

source ~/ros_catkin_ws/install_isolated/setup.bash

如果你只需要ROS Common那么就结束了。可以测试一下在终端里输入roscore,我运行的时候报错了,后来注释掉了一个python文件里的几行就跑起来了,具体是哪个文件也忘了,根据报错的信息修改就可以了。


4.3 构建rosbuild包

只构建ROS Common(Bare Bones)是不需要这一步的,在上一步我也没有成功编译desktop, 如果你成功了可以继续下面的步骤:

4.3.1 创建rosbuild工作空间

mkdir ~/ros_ws
cd ~/ros_ws
rosws init . ~/ros_catkin_ws/install_isolated

4.3.2 下载ROS Stacks

Desktop-Full Install: 2d/3d simulators, navigation, robot models and several tutorial stacks

rosws merge http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/desktop-full

Desktop Install: ROS, rqt, rviz, and robot-generic libraries

rosws merge http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/desktop

Desktop-Full仍然有问题:There are build errors in desktop-full (gazebo simulator) at the moment, so the desktop variant is suggested at this time. See: https://code.ros.org/trac/ros-pkg/ticket/5595

rosws update -j8

4.3.3 构建ROS Stacks

下载完后:

source ~/ros_ws/setup.bash
rosmake -a

5. 其它

如果你不满足于ROS Common,而且跟我一样没有成功编译desktop的话,可以试试单独编译其它组件,比如OpenCV和PCL。

OpenCV 2.4.3的编译非常顺利,几乎没有遇到什么障碍,有GTK+2.0,highgui库都可以正常使用。


PCL在我去掉少数几个编译选项以后也成功了,pcl_viewer正常工作。//另外我还安装了OpenNI和Kinect驱动


我编译PCL时的CMakeCache.txt在https://gist.github.com/4689753

参考资料

  1. http://en.wikipedia.org/wiki/ROS_(Robot_Operating_System)
  2. http://www.ros.org/wiki/
  3. R. Patrick Goebel,ROS By Example Volume 1
  4. http://www.ros.org/news/2012/12/ros-groovy-galapagos-released.html
  5. http://ros.org/wiki/groovy/Installation/Source
  6. http://answers.ros.org/question/10716/ros-on-arm/
  7. http://ros.org/wiki/groovy/Installation/Raspbian/Source

如何编译 Dalvik 以在 Linux 上本地运行它?

】如何编译Dalvik以在Linux上本地运行它?【英文标题】:HowcanIcompileDalviktorunitlocallyonLinux?【发布时间】:2011-04-0207:39:35【问题描述】:在Linux上编译和运行Dalvik虚拟机所需的最少步骤(包括检索源代码)是什么?【问题讨论】:... 查看详情

交叉编译,为什么需要交叉编译

本地编译本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:比如,我们在x86平台上,编写程序并编译成可执行程序。这种方式下,我们使用x86平... 查看详情

交叉编译详解

...什么作用?在解释什么是交叉编译之前,先要明白什么是本地编译。本地编译本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:比如,我们在x86... 查看详情

交叉编译和交叉工具链

一、交叉编译简介1、什么是交叉编译1.1本地编译    解释什么是交叉编译之前,先要明白一个概念:本地编译    我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出... 查看详情

p3066[usaco12dec]逃跑的barnrunningawayfrom(代码片段)

目录题目思路错误&&注意代码题目luoguP3066思路虽说这个题目有多种做法,但左偏树算法:我们发现这个合并的时候并不好合并,因为存的值不是固定的那我们是不是可以lazy数组呢因为是两个颗树合并,显然是步阔以的那就... 查看详情

[luogu3066][usaco12dec]逃跑的barnrunningawayfrom…

题面题目描述给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个。输入格式:Line1:2integers,NandL(1<=N<=200,000,1<=L<=10^18)Lines2..N:Theithlinecontainstwointegersp_iandl_i.p_i(1<=p_i<i)isthefirstpastureonthe 查看详情

adoblecoldfusion反序列化漏洞(cve-2017-3066)(代码片段)

文章目录一、介绍1.1漏洞介绍1.2影响版本二、漏洞复现三、防御一、介绍1.1漏洞介绍  AdobleColdFusion是一个动态Web服务器,其运行的CFML(ColdFusionMarkupLanguage)针对Web应用的一种脚本语言。文件以*.cfm为文件名,在... 查看详情

Cuda - 本地编译并远程运行

】Cuda-本地编译并远程运行【英文标题】:Cuda-compilelocalandrunremote【发布时间】:2015-06-0209:41:40【问题描述】:我想在本地编译我的程序,然后在服务器上运行,因为我没有支持cuda的显卡。我的电脑:Kubuntu12.04x32Nvidia显示驱动程... 查看详情

在windows上一键编译各种版本的protobuf

...,并且源码都采用cmake来构建,所以我们可以把源码下载到本地,然后了利用cmake构建本地工程,然后编译.步骤一:下载源码  复制以下代码,保存到 download_protobuf_source. 查看详情

在windows上一键编译各种版本的protobuf

...,并且源码都采用cmake来构建,所以我们可以把源码下载到本地,然后了利用cmake构建本地工程,然后编译.步骤一:下载源码  复制以下代码,保存到 download_protobuf_source. 查看详情

Info.plist 和 Base 本地化:项目未编译

】Info.plist和Base本地化:项目未编译【英文标题】:Info.plistandBaselocalization:Projectnotcompiling【发布时间】:2016-02-1008:34:29【问题描述】:在Info.plist上启用Base定位后,Xcodebailedonme。此后,它拒绝编译项目,声明couldnotreaddatafrom\'/Users... 查看详情

jni_2

JNI开发的流程①交叉编译的概念Java调用C/C++C/C++本地语言特点平台相关性强windows上编写能在linux上运行的本地代码交叉编译在一个平台上编译出另一个平台可以执行的本地代码平台CPU平台X86(IntelAMD)ARM(高通骁龙华为海思麒麟三星MT... 查看详情

如何在编译期间强制犰狳库链接到本地​​ OpenBLAS

】如何在编译期间强制犰狳库链接到本地​​OpenBLAS【英文标题】:HowtoforcearmadillolibrarytolinktolocalOpenBLASduringcompilation【发布时间】:2015-05-0516:32:04【问题描述】:我需要将犰狳(当前版本为5.100.1)作为$HOME(集群应用程序,不能... 查看详情

柴油机编译挂在 Lightsail 上

...持的Rust应用程序。它使用ORM板条箱Diesel。它可以在我的本地(Arch)Linux机器上顺利编译。为了远程编译应用程序,我通过SSH连接到LightsailDebianVM。安装Rust、 查看详情

本地文件系统上的 Gradle 存储

】本地文件系统上的Gradle存储【英文标题】:Gradlestoreonlocalfilesystem【发布时间】:2012-06-0517:46:14【问题描述】:Gradle如何将下载的jar文件存储在本地文件系统中?Maven将它们存储在USER_HOME下的.m2目录中,但是Gradle将它们存储在哪... 查看详情

rake assets:precompile 在本地编译时不起作用

】rakeassets:precompile在本地编译时不起作用【英文标题】:rakeassets:precompiledoesnotworkcompilinglocally【发布时间】:2014-03-2617:39:03【问题描述】:我刚刚在我的QA和生产服务器上运行了它,它运行得很完美。rakeassets:precompile但是当我在... 查看详情

搭建树莓派交叉编译环境

...拟机Linux环境2.烧录树莓派系统3.在虚拟机linux环境中搭建本地开发与编译环境4.在虚拟机linux上搭建交叉编译环境5.开发一段简单的程序,通过本地编译后,再进行交叉编译。之后将编译好的程序放到树莓派上执行进行测试。 查看详情

搭建树莓派交叉编译环境

...拟机linux环境2.烧录树莓派系统3.在虚拟机linux环境中搭建本地开发与编译环境4.在虚拟机linux上搭建交叉编译环境5.开发一段简单的程序,通过本地编译后,再进行交叉编译。之后将编译好的程序放到树莓派上执行进行测试。 查看详情