[ROS] ROS基础,创建工作空间,创建功能包,ros功能包相关命令,Catkin编译系统,catkin

您所在的位置:网站首页 ROS清除实验有哪些 [ROS] ROS基础,创建工作空间,创建功能包,ros功能包相关命令,Catkin编译系统,catkin

[ROS] ROS基础,创建工作空间,创建功能包,ros功能包相关命令,Catkin编译系统,catkin

#[ROS] ROS基础,创建工作空间,创建功能包,ros功能包相关命令,Catkin编译系统,catkin| 来源: 网络整理| 查看: 265

1.工作空间

工作空间(work space)是ROS系统中存放工程开发相关的文件夹,其目录结构如下:

src:代码空间(Source Space),用于存放开发代码

build:编译空间(Build Space),catkin(CMake)的缓存信息和中间文件

devel:开发空间(Development Space),生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环

境变量

install:安装空间(Install Space)

一个最小的项目结构如图所示

后两个路径由 catkin 系统自动生成、管理,我们日常的开发一般不会去涉及,而主要用到的是src文件夹,我们写的 ROS 程序、网上下载的 ROS 源代码包都存放在这里。 在编译时,catkin 编译系统会递归的查找和编译 src/ 下的每一个源代码包。因此你也可以把几个源代码包放到同一个文件夹下,如下图所示:

 

更加详细的目录结构如下: 

 

1.1 如何创建并编译一个工作空间

创建工作空间

在根目录下创建一个叫catkin_ws的工作空间,并进入到src目录下进行初始化

$ source /opt/ros/kinetic/setup.bash $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace

编译工作空间

catkin_make相当于cmake编译器,ROS对其进行改造(加入CMakeLists.txt进行功能包索引)。一般在修改了src下的程序代码或配置文件后需要进行编译。

$ cd ~/catkin_ws $ catkin_make 

设置环境变量 

在这里记住一点,但凡编译过工作空间,一定要重新source环境变量,否则代码不会更新。

这里使用的是setup.bash,还有两个文件为setup.sh和setup.zsh,要source哪个文件取决于你的默认解释程序(echo $SHELL)

$ souce ~/catkiin_ws/devel/setup.bash

 

补充:工作空间的覆盖

ROS系统中工作空间存在Overlaying机制,即工作空间覆盖机制,catkin支持包的逐层覆盖, 当前最高,其它依据source的顺序逐层变高, 高层可覆盖低层. ,符合以下规则:

1)工作空间的路径记录在ROS_PACKAGE_PATH环境变量中

2)新设置的路径(source后)会放在ROS_PACKAGE_PATH变量的最前端

3)运行程序时,ROS会优先在靠近前端的工作空间中查找指定的功能包

4)只有当前端工作空间不存在该功能包时才向后查找

如图所示

可以观察到source当前工作空间后,将当前工作空间的绝对路径放到了系统工作空间之前

 

2.功能包 1.Ros功能包简介   ROS中的package的定义更加具体,它不仅是Linux上的软件包,更是catkin编译的基本单元,我们调用 catkin_make 编译的对象就是一个个ROS的package,也就是说任何ROS程序只有组织成package才能编译 。所以 package 也是 ROS 源代码存放的地方,任何 ROS 的代码无论是 C++ 还是Python 都要放到 package 中,这样才能正常的编译和运行。   一个 package 可以编译出来多个目标文件( ROS 可执行程序、动态静态库、头文件等等)。

 

2.功能包创建方式

ROS里的功能包用于区分某个文件夹下代码的功能,如机器人有移动,导航,视觉等功能,我们为整个机器人创建工作空间,也可称为一个项目,接来要开发它的各个功能,于是我们使用功能包来分隔一类别代码。下面是创建功能包的方式:

下面命令创建了一个叫做test1个功能包,导入了rospy roscpp依赖包,ROS支持python和c++开发,所以导入这两个依赖包让功能包可以通过这两种语言开发。

创建完功能包后需要catkin_make进行编译,编译后需要source当前工作空间,这样就完成了功能包的创建

$ cd ~/catkin_ws/src $ catkin_create_pkg test1 rospy roscpp $ cd ~/catkin_ws $ catkin_make $ source devel/setup.bash

补充:如果是第三方下载的,如需进行catkin_create_pkg,直接执行catkin_make编译即可

 

2.ros功能包的目录结构

如果所示,一个功能包的目录结构如下,CmakeLists.txt和package.xml是必须的,分别定义编译规则和描述信息。

其他类似src、include、scripts这些目录命名都是约定俗成的,并未明确定义,但是ros默认会去这些目录下找相关文件,所以为了标准化,请规范命名

更加详细的描述如下   CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package 不可少的成分 package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成 分src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py) include/: 存放C++源码对应的头文件 scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py) msg/: 存放自定义格式的消息(.msg) srv/: 存放自定义格式的服务(.srv) models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等) urdf/: 存放机器人的模型描述(.urdf或.xacro) launch/: 存放launch文件(.launch或.xml)

 

注意:同一个工作空间不能存在相同名称的功能包,不同工作空间可以存在相同名称的功能包 

 

3.功能包相关命令rospack

rospack 是对 package 管理的工具,命令的用法如下:   rospack list :列出本机所有package rospack depends [package] :显示package的依赖包 rospack find [package] :定位某个package rospack profile :刷新所有package的位置记录

 

4.功能包相关命令roscd

roscd 命令类似与 Linux 系统的 cd ,改进之处在于 roscd 可以直接 cd 到 ROS 的软件包。   roscd [package]:cd到ROS Package的目录

补充:使用前必须source空间

 

5.功能包相关命令

rosdep 是用于管理ROS package依赖项的命令行工具,用法如下:

  rosdep check [pacakge] :检查package的依赖是否满足 rosdep install [pacakge] :安装pacakge的依赖 rosdep db :生成和显示依赖数据库 rosdep init :初始化/etc/ros/rosdep中的源 rosdep keys :检查package的依赖是否满足 rosdep update :更新本地的rosdep数据库   一个较常使用的命令是 rosdep install --from-paths src --ignore-src --rosdistro=kinetic - y , 用于安装工作空间中 src 路径下所有 package 的依赖项(由 pacakge.xml 文件指定)   使用方式形如: rosdep install --from-paths /home/user/catkin_ws/src --ignore-src --rosdistro=kinetic - y

 

3.Catkin编译系统

1.两个文件

一个 Catkin 的软件包( package )必须要包括两个文件:   package.xml: 包括了package的描述信息,例如name, description, version, maintainer(s), licenseCMakeLists.txt: 构建package所需的CMake文件,作用为:调用Catkin的函数/宏,解析 package.xml ,找到其他依赖的catkin软件包,将本软件包添加到环境变量

2.catkin编译的工作流程

1. 首先在工作空间 catkin_ws/src/ 下递归的查找其中每一个ROS的package。 2. package中会有 package.xml 和 CMakeLists.txt 文件,Catkin(CMake)编译系统依据 CMakeLists.txt 文件,从而生成 makefiles (放在 catkin_ws/build/ )。 3. 然后 make 刚刚生成的 makefiles 等文件,编译链接生成可执行文件(放在 catkin_ws/devel )。 也就是说, Catkin就是将 cmake 与 make 指令做了一个封装从而完成整个编译过程的工具 。 catkin有比较突出的优点,主要是操作更加简单、一次配置,多次使用 、跨依赖项目编译   3.使用方式   要用 catkin 编译一个工程或软件包,只需要用 catkin_make 指令。一般当我们写完代码,执行一次 catkin_make 进行编译 , 调用系统自动完成编译和链接过程,构建生成目标文件。编译的一般性流程如下:   $ cd ~/catkin_ws #进入工作空间,catkin_make必须在工作空间下执行 $ catkin_make #开始编译 $ source ~/catkin_ws/devel/setup.bash #刷新坏境

编译之后,catkin_make运行后终端输出文件部分解析

#基本路径

Base path: /home/user/catkin_ws

Source space: /home/user/catkin_ws/src  --SOURCE SPACE 源空间

Build space: /home/user/catkin_ws/build  --BUILD SPACE 编译空间

Devel space: /home/user/catkin_ws/devel  --DEVEL SPACE 开发空间

Install space: /home/user/catkin_ws/install --INSTALL SPACE 安装空间

注意: catkin编译之前需要回到工作空间目录, catkin_make 在其他路径下编译不会成功。编译完成后,如果有新的目标文件产生(原来没有),那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件。这个细节比较容易遗漏,致使后面出现可执行文件无法打开等错误

 

4.catkin_make可选参数

用ninja或nmake方式编译

--use-ninja :用ninja取代make--use-nmake:用nmake取'make --force-cmake 强制cmake,即使已经cmake过

指定源码位置,如果源码不在当前工作空间的src下

--source my_src  :my_src为指定的src路径(默认为'workspace_base/src')--build BUILD :build的路径 ,指定编译后build文件存放的位置(默认为'workspace_base/build') 仅编译指定的功能包 catkin_make -DCATKIN_WHITELIST_PACKAGES="package1":编译指定的包,仅编译package1

编译所有包

catkin_make -DCATKIN_WHITELIST_PACKAGES="":在双引号内不填代表编译所有包 使用install模式   catkin_make install :使用install模式,编译后的可执行文件将存放在install目录中     5.install与devel   devel模式通常用于代码编写与调试阶段,若是希望上线使用,应使用install模式,且删除devel目录。在source时应source install目录下的setup文件。   使用install模式的原因是devel包含源码,而install模式为可执行代码,从而保护了代码安全       下一篇文章: [ROS]CmakeLists.txt 与 Package.xml


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3