【机器人操作系统】ROS文件结构
简要介绍ROS工作空间下的目录结构:build文件夹、devel文件夹、src文件夹。重点讲述了src文件夹目录,其中简要介绍了CMakeLists.txt文件和package.xml文件。
ROS文件结构

catkin_ws 工作空间
Catkin工作空间是创建、修改、编译catkin软件包的目录。catkin的工作空间,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。我们自己写的ROS代码通常就放在工作空间中。
build文件夹
catkin(CMake)的缓存信息和中间文件
devel文件夹
生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量
src文件夹
ROS的catkin软件包(源代码包)
package文件夹
package是catkin工作空间的基本单元。包含以下文件及文件夹:
-
CMakeLists.txt
- CMakeLists.txt简介:
- 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分
- 这个文件直接规定了这个package要依赖哪些package,要编译生成哪些目标,如何编译等等流程。所以CMakeLists.txt非常重要,它指定了由源码到目标文件的规则,catkin编译系统在工作时首先会找到每个package下的CMakeLists.txt,然后按照规则来编译构建。
- CMakeLists.txt写法:
- CMakeLists.txt的基本语法都还是按照CMake,而Catkin在其中加入了少量的宏:
- CMakeLists.txt简介:
| 宏 | 作用 |
|---|---|
| cmake_minimum_required() | #CMake的版本号 |
| project() | #项目名称 |
| find_package() | #找到编译需要的其他CMake/Catkin 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.xml简介:
package.xml也是一个catkin的package必备文件,它是这个软件包的描述文件,在较早的ROS版本(rosbuild编译系统)中,文件叫做manifest.xml,用于描述pacakge的基本信息。 -
package.xml作用:
- 1.pacakge.xml包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。
- 2.rospack find、rosdep等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个pacakge中的package.xml文件。
- 3.它为用户提供了快速了解一个pacakge的渠道。
-
package.xml写法:
pacakge.xml遵循xml标签文本的写法,在新版本中,包含的标签为:
标签名 作用 < pacakge > 根标记文件 < pacakge > 根标记文件 < name > 包名 < version > 版本号 < description > 内容描述 < maintainer > 维护者 < license > 软件许可证 < buildtool_depend > 编译构建工具,通常为catkin < depend > 指定依赖项为编译、导出、运行需要的依赖,最常用 < build_depend > 编译依赖项 < build_export_depend > 导出依赖项 < exec_depend > 运行依赖项 < test_depend > 测试用例依赖项 < doc_depend > 文档依赖项 -
-
scripts文件夹
存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)- *.py
- *.sh
-
include文件夹
存放C++源码对应的头文件- *.h
-
src文件夹
存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)- *.cpp
-
msg文件夹
存放自定义格式的消息(.msg)- *.msg
-
srv文件夹
存放自定义格式的服务(.srv)- *.srv
-
action文件夹
存放自定义格式的动作(.action)- *.action
-
launch文件夹
存放launch文件(.launch或.xml)- *.launch
更多推荐

所有评论(0)