ROS文件系统(工程结构)

ROS文件系统

介绍catkin的编译系统,catkin工作空间的创建和结构,package软件包的创建和结构,介绍CMakeLists.txt文件,package.xml以及其他常见文件。

catkin工作空间

Catkin是ROS定制的编译构建系统,对Cmake的扩展 而Catkin工作空间是组织和管理功能包的文件夹,以Catkin工具编译

  1. 建立工作空间
mkdir -p ~/catkin_ws/src
  1. 编译
cd ~/catkin_ws/ #回到工作空间
catkin_make
source ~/catkin_ws/devel/setup.bash  #编译完后要source刷新环境

catkin workspace

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有比较突出的优点,主要是:

  • 操作更加简单
  • 一次配置,多次使用
  • 跨依赖项目编译
Package组成
  • ROS软件的基本组成形式
  • catkin编译的基本单元
  • 一个Package可以包含多个可执行文件(节点)

Package最精简结构 其中:

  • CMakelists.txt规定catkin编译的规则 例如:源文件、依赖项、目标文件
cmake_minimum_required() #指定Catkin最低版本
project() #指定软件包的名称
find_package() #指定编译时需要的依赖项
catkin_python_setup() #catkin新加宏,打开catkin的Python Module的支持
add_message_files() #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message() #catkin新加宏,生成不同语言版本的msg/srv/action接口
catkin_package() #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用
add_library() #生成库
add_executable() #生成可执行二进制文件
add_dependencies() #定义目标文件依赖于其他目标文件,确保其他目标已被构建
target_link_libraries() #链接
catkin_add_gtest() #catkin新加宏,生成测试
install() #生成可安装目标
  • Package.xml 定义package的属性 例如:包名、版本号、作者、依赖等
<pacakge> 根标记文件
    <name> 包名
    <version> 版本号
    <description> 内容描述
    <maintainer> 维护者
    <license> 软件许可证
    <buildtool_depend> 编译构建工具,通常为catkin
    <build_depend> 编译依赖项,与Catkin中的
    <run_depend> 运行依赖项
</pacakge> 

一般只需要修改<build_depend> 编译依赖项, <run_depend>运行依赖项

还可以在Package下放自定义的通信格式: 消息(msg) 服务(srv) 动作(action) 以及launch、配置文件 launch文件(launch)、配置文件(yaml)

Package基本组成结构

常用包管理指令

1.rospack 查找某个pkg的地址

rospack find package_name

2.roscd 跳转到某个pkg下

roscd package_name

3.rosls 列举某个pkg下的文件信息

rosls package_name

4.rosed 编辑pkg的文件

rosed package_name file_name

5.catkin_create_pkg 创建一个pkg

catkin_creat_pkg<pkg_name>[deps]

6.rosdep 安装某个pkg所需的依赖

rosdep install [pkg_name]
实操步骤

1.创建工作空间

mkdir -p catkin_practice/src
  1. 初始化工作空间
cd catkin_practice
catkin_make
  1. 创建功能包
cd src
catkin_create_pkg test1 //不带依赖项
catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs //带依赖项
  1. 设置环境变量
source devel/setup.bash`

通过设置环境变量,系统将知道功能包放在catkin_practice/devel下 该命令有一个弊端就是,设置的环境变量只会在当前终端下生效,重新打开一个终端将失效 解决方案是: 解决方法是将上述命令放在终端配置文件中。

vi ~/.bashrc
//将环境变量添加只终端设置最后一行
source ~/catkin_practice/devel/setup.bash

在新的终端中输入以下命令,让终端命令在当前终端生效

source ~/.bashrc

检查环境变量

echo $ROS_PACKAGE_PATH

Metapackage

在一些ROS的教学资料和博客里,你可能还会看到一个Stack(功能包集)的概念,它指的是将多个功能接近、甚至相互依赖的软件包的放到一个集合中去。但Stack这个概念在Hydro之后就取消了,取而代之的就是Metapackage。

以上列举了一些常见的功能包集,例如navigation、turtlebot,他们都是用于某一方面的功能,以navigation metapackage(官方介绍里仍然沿用stack的叫法)为例。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈本布衣

Spring基础篇——Spring的AOP切面编程

  AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊、解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下。原因很简单,别人的思想...

8100
来自专栏FREE SOLO

2019面试题:简单介绍下Ajax

首先Ajax是Asynchronous JavaScript and XML的全称,Asynchronous是异步的意思,这跟传统的web不同。Ajax是Web...

7200
来自专栏肖蕾的博客

Android 沉浸式适配 4.4+

15830
来自专栏Android 技术栈

Mybatis 框架实战(上)

(2)log4j.properties https://blog.csdn.net/sinat_30185177/article/details/735503...

11820
来自专栏Java学习录

Java定时任务解决方案

http://www.springframework.org/schema/taskhttp://www.springframework.org/schema...

31200
来自专栏业余草

手把手教你打造一个SpringBoot自定义的Starter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/detai...

48100
来自专栏ionic3+

spring boot 按需返回xml/json数据格式

spring boot中加了@RestController后默认返回json数据格式,但是某一项目和一厂商对接接口,对方使用xml格式,若每个接口都手写注解参数...

19000
来自专栏ionic3+

Android高版本http网络请求失败的Cordova配置处理

问题出现的原因是因为Android高版本(Android 6.0)以上默认使用TLS保护用户信息,详见以下文档: Transport Layer Securi...

1.9K20
来自专栏java高并发

《阿里感悟》如何在三年内成长为一名技术专家

工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在我们公司有些同学在前三年中就快速成为某一个领域的技术专家,有些...

12710
来自专栏用户1337634的专栏

Eureka快速体验

类似于Spring Cloud Config Server,Euraka Server的搭建也是非常简单

13620

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励