蹄牛操作系统TINIUX
ROS中文社区
查看: 7368|回复: 7

[跟我学ROS]4.编译ROS系统中的功能包

[复制链接]
发表于 2013-5-13 21:05:22 | 显示全部楼层 |阅读模式
Turtlebot2
本帖最后由 时飞 于 2013-5-13 21:27 编辑

描述:这篇教程主要介绍编译功能包的工具链;


1、编译功能包

只要功能包的依赖项都已经安装完毕,我们就可以编译新的功能包了;

在开始之前,务必通过source指令设置运行的环境,在Ubuntu系统中可以执行如下指令;
[Bash shell] 纯文本查看 复制代码
$ source /opt/ros/groovy/setup.bash

1.1 使用catkin_make

catkin_make是一个命令行工具,这个工具集成了一些标准catkin的工作流程;可以认为catkin_make在Cmake执行中联合调用了cmake和make;

用法:
[Bash shell] 纯文本查看 复制代码
# In a catkin workspace
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]


对于不很熟悉Cmake标准工作流程的朋友,可以参考如下所示,下面的代码只是演示CMake的标准流程,不可执行;
[Bash shell] 纯文本查看 复制代码
# In a CMake project
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install  # (optionally)


每一个CMake工程是单独编译的,而在一个workspace里的catkin工程是可以一起编译,一起编译时可以参考如下流程进行:
[Bash shell] 纯文本查看 复制代码
# In a catkin workspace
$ catkin_make
$ catkin_make install  # (optionally)

上面的命令会编译在src文件夹里的任何一个catkin工程,如果你的代码在别的位置,比如my_src,则应当如下调用catkin_make命令(因为示例的my_src可能不存在,下面的指令不一定能编译成功):
[Bash shell] 纯文本查看 复制代码
# In a catkin workspace
$ catkin_make --source my_src
$ catkin_make install --source my_src  # (optionally)

2、 编译你自己的功能包

我们已经创建了一个catkin workspace和一个名字为beginner_tutorials的catkin功能包,改变路径到catkin workspace中查看一下src文件夹:
[Bash shell] 纯文本查看 复制代码
$ cd ~/catkin_ws/
$ ls src

•        beginner_tutorials/  CMakeLists.txt@  

你应当看到一个名字为beginner_tutorials的文件夹,现在我们利用catkin_make编译这个功能包:
[Bash shell] 纯文本查看 复制代码
$ catkin_make

你应当看到源自cmake及make的输出信息,大致如下所示:
•        Base path: /home/user/catkin_ws
•        Source space: /home/user/catkin_ws/src
•        Build space: /home/user/catkin_ws/build
•        Devel space: /home/user/catkin_ws/devel
•        Install space: /home/user/catkin_ws/install
•        ####
•        #### Running command: "cmake /home/user/catkin_ws/src
•        -DCATKIN_DEVEL_PREFIX=/home/user/catkin_ws/devel
•        -DCMAKE_INSTALL_PREFIX=/home/user/catkin_ws/install" in "/home/user/catkin_ws/build"
•        ####
•        -- The C compiler identification is GNU 4.2.1
•        -- The CXX compiler identification is Clang 4.0.0
•        -- Checking whether C compiler has -isysroot
•        -- Checking whether C compiler has -isysroot - yes
•        -- Checking whether C compiler supports OSX deployment target flag
•        -- Checking whether C compiler supports OSX deployment target flag - yes
•        -- Check for working C compiler: /usr/bin/gcc
•        -- Check for working C compiler: /usr/bin/gcc -- works
•        -- Detecting C compiler ABI info
•        -- Detecting C compiler ABI info - done
•        -- Check for working CXX compiler: /usr/bin/c++
•        -- Check for working CXX compiler: /usr/bin/c++ -- works
•        -- Detecting CXX compiler ABI info
•        -- Detecting CXX compiler ABI info - done
•        -- Using CATKIN_DEVEL_PREFIX: /tmp/catkin_ws/devel
•        -- Using CMAKE_PREFIX_PATH: /opt/ros/groovy
•        -- This workspace overlays: /opt/ros/groovy
•        -- Found PythonInterp: /usr/bin/python (found version "2.7.1")
•        -- Found PY_em: /usr/lib/python2.7/dist-packages/em.pyc
•        -- Found gtest: gtests will be built
•        -- catkin 0.5.51
•        -- BUILD_SHARED_LIBS is on
•        -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
•        -- ~~  traversing packages in topological order:
•        -- ~~  - beginner_tutorials
•        -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
•        -- +++ add_subdirectory(beginner_tutorials)
•        -- Configuring done
•        -- Generating done
•        -- Build files have been written to: /home/user/catkin_ws/build
•        ####
•        #### Running command: "make -j4" in "/home/user/catkin_ws/build"
•        ####

注意catkin_make首先显示出每个‘space’使用的路径,因为采用的默认参数,编译后会产生几个文件夹,可以通过ls查看:
[Bash shell] 纯文本查看 复制代码
$ ls

•        build
•        devel
•        src

build文件夹是编译时的默认位置,这里保存有cmake和make配置及编译信息的相关文件,devel文件夹是编译后保存编译结果的,编译后的可执行文件及依赖库保存在这个位置;

英文文档位置: http://www.ros.org/wiki/ROS/Tutorials/BuildingPackages
注:欢迎你转载本篇文章,时飞提醒你转载时请注明出处!



回复

使用道具 举报

小嵌操作系统AIOS
发表于 2015-7-31 15:15:18 | 显示全部楼层
MakeBlock
请问Running command: "make -j4" in "/home/user/catkin_ws/build"这行是什么意思啊,它做了什么工作呢?
回复 支持 反对

使用道具 举报

发表于 2015-7-31 18:59:41 | 显示全部楼层
SeeedStudio
精灵要加油 发表于 2015-7-31 15:15
请问Running command: "make -j4" in "/home/user/catkin_ws/build"这行是什么意思啊,它做了什么工作呢? ...

这句话本身就是在注释里面,字面含义是在/home/user/catkin_ws/build文件夹下运行make -j4指令,具体做什么工作可以通过help指令查看一下。
回复 支持 反对

使用道具 举报

发表于 2015-12-28 18:36:56 | 显示全部楼层
精灵要加油 发表于 2015-7-31 15:15
请问Running command: "make -j4" in "/home/user/catkin_ws/build"这行是什么意思啊,它做了什么工作呢? ...

在/home/user/catkin_ws/build路径下make,不过加上 -j 4表示你充分利用你的cpu数目来加快编译速度
回复 支持 反对

使用道具 举报

发表于 2016-2-15 11:27:05 | 显示全部楼层
别的指令也能加-j 4么?
回复 支持 反对

使用道具 举报

发表于 2016-8-12 16:12:38 | 显示全部楼层
thanks a lot
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|智能硬件开发社区 ( 京ICP备14010787号 )

GMT+8, 2018-1-21 18:14 , Processed in 0.060271 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表