机器人操作系统入门(二)ROS文件系统

参考资料:

https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012  //中国大学MOOC

https://www.bilibili.com/video/av23401751  //B站

《ROS操作系统入门讲义》PDF下载

链接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ 
提取码:mziy

第二章 ROS文件系统

1. Catkin编译系统(Groovy版本后投入使用)  //早期的ROS编译系统是rosbuild

(1)特点

Catkin沿用了包管理的传统像 find_package() 基础结构, pkg-config;扩展了CMake,例如

  • 软件包编译后无需安装就可使用
  • 自动生成 find_package() 代码, pkg-config 文件
  • 解决了多个软件包构建顺序问题

一个Catkin的软件包(package)必须要包括两个文件:

  • package.xml:包括了package的描述信息
  1. name, description, version, maintainer(s), license
  2. opt. authors, url's, dependencies, plugins, etc...
  • CMakeLists.txt:构建package所需的CMake文件
  1. 调用Catkin的函数/宏
  2. 解析 package.xml
  3. 找到其他依赖的catkin软件包
  4. 将本软件包添加到环境变量

(2)工作原理

catkin编译的工作流程如下:  //相当于封装了cmake和make

  • 首先在工作空间 catkin_ws/src/ 下递归的查找其中每一个ROS的package
  • package中会有 package.xml 和 CMakeLists.txt 文件,Catkin(CMake)编译系统依据 CMakeLists.txt 文件,从而生成 makefiles (放在 catkin_ws/build/ )
  • 然后 make 刚刚生成的 makefiles 等文件,编译链接生成可执行文件(放在 catkin_ws/devel )

注:要用catkin编译一个工程或软件包,只需要用 catkin_make 指令  //catkin编译之前需要回到工作空间目录, catkin_make 在其他路径下编译不会成功,如果有新的目标文件产生需要紧接着“source刷新环境

2. Catkin工作空间

(1)初始化

1 $ mkdir -p ~/catkin_ws/src  
2 $ cd ~/catkin_ws/
3 $ catkin_make #初始化工作空间
  • catkin_make命令必须位于工作空间目录catkin_ws下运行
  • 原先的初始化命令catkin_init_workspace在src目录下运行

(2)结构介绍  //用 tree 命令查看

1 $ cd ~/catkin_ws
2 $ sudo apt install tree
3 $ tree

默认包含三个文件夹:

  • src/: ROS的catkin软件包(源代码包)
  • build/: catkin(CMake)的缓存信息和中间文件
  • devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量

编译流程如下:

注:yaml文件一般存储了ROS需要加载的参数信息,一些属性的配置。通常在launch文件或程序中读取.yaml文件,把参数加载到参数服务器上。

3. package软件包  //catkin编译的基本单元

(1)结构

一个package下常见的文件、路径有

其中CMakeLists.txt和package.xml定义了整个package(必不可少

  • CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则
  • package.xml: 描述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)

(2)package的创建:catkin_create_pkg 命令

用法:catkin_create_pkg 包名 依赖项  // 如catkin_create_pkg test_pkg roscpp rospy std_msgs

(3)相关命令


常用命令:rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y  //用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)

4. CMakeLists.txt:规定了package要依赖哪些package,要编译生成哪些目标,如何编译等等流程

 非常重要,它指定了由源码到目标文件的规则,catkin编译系统在工作时首先会找到每个package下的CMakeLists.txt,然后按照规则来编译构建。

(1)写法  //进一步的CMake语法可参考《CMake实践》:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf

总体的宏结构如下:

(2)示例(turtlesim包下的turtlesim/CMakeLists.txt)

5. package.xml:软件包的描述文件,描述包的基本信息

(1)作用

  • pacakge.xml 包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。
  • 实际上 rospack find 、 rosdep 等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个package中的 package.xml 文件为用户提供了快速了解一个package的渠道

(2)写法:遵循xml标签的写法

格式1(old):

其中,1-6为必备标签

格式2(new):

(3)示例(turtlesim/package)

老版本

新版本

6. Metapackage  //老版本里的概念为“功能包集”stack

作用:将一些相近的功能模块、软件包放到一起

(1)常见metapackage

其中,navigation metapackage包含以下软件包:

navigation就是一个简单的package,里面只有几个文件,但它依赖了其他所有的软件包

(2)写法  //metapackage为虚包,无具体的包文件

一般有且仅有两个文件:CMakeLists.txt 和 pacakge.xml

CMakeLists.txt 写法如下:

1 cmake_minimum_required(VERSION 2.8.3)
2 project(ros_academy_for_beginners)
3 find_package(catkin REQUIRED)
4 catkin_metapackage() #声明本软件包是一个metapacakge

package.xml 写法如下:

与普通package的不同之处

  • CMakeLists.txt :加入了catkin_metapackage()宏,指定本软件包为一个metapacakge
  • package.xml :标签将所有软件包列为依赖项,标签中添加标签声明。

 

转载于:https://www.cnblogs.com/hg-love-dfc/p/10333545.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio 单元测试一 第二章 ROS文件系统 Catkin编译系统 Catkin工作空间 Package软件包 CMakeLists.txt package.xml Metapacakge软件元包 其他常见文件类型 单元测试二 第三章 ROS通信架构(一) Node & Master Launch文件 Topic Msg 常见msg类型 单元测试三 第四章 ROS通信架构(二) Service Srv Parameter server 11.5.4 1.5.5 1.5.6 1.5.7 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.6.1 1.9.6.2 Action 常见srv类型 常见action类型 单元测试四 第五章 常用工具 Gazebo RViz Rqt Rosbag Rosbridge moveit! 单元测试五 第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与Time 第八章 TF与URDF 认识TF TF消息 tf in c++ tf in python 统一机器人描述格式 附录:TF数学基础 三维空间刚体运动---旋转矩阵 三维空间刚体运动---欧拉角 21.9.6.3 1.10 1.10.1 1.10.2 1.10.3 1.10.4 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.12.8 1.12.9 1.12.10 1.12.11 1.12.12 1.12.13 1.12.14 1.12.15 1.12.16 三维空间刚体运动---四元数 第九章 SLAM 地图 Gmapping Karto Hector 第十章 Navigation Navigation Stack move_base costmap Map_server & Amcl 附录:Navigation工具包说明 amcl local_base_planner carrot_planner clear_costmap_recovery costmap_2d dwa_local_planner fake_localization global_planner map_server move_base_msg move_base move_slow_and_clear navfn nav_core robot_pose_ekf rotate_recovery 3中国大学MOOC---《机器人操作系统入门》 课 程讲义

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值