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在其中加入了少量的宏:
作用
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

【机器人操作系统】ROS文件结构相关推荐

  1. 计算机操作系统(OS)安装机器人操作系统(ROS)实现物联网功能

    博客中大量介绍了将Ubuntu等Linux系统借助机器人操作系统ROS实现机器人控制设计开发和物联网功能案例,并可基于OpenAI等实现人工智能相关训练. 这篇博文围绕windows系统展开,之前也写 ...

  2. 一文读懂自动驾驶中的机器人操作系统ROS

    一.什么是机器人操作系统ROS 1.ROS(Robot Operating System)是一个操作系统 ROS是对机器人的硬件进行了封装,不同的机器人.不同的传感器,在ROS里可以用相同的方式表示( ...

  3. 机器人操作系统ROS 编程开发--详细总结

    最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家. ROS基本介绍 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发 ...

  4. 机器人操作系统ROS(4)话题编程

    此节的前提是已经创建好工作空间,请参考 工作空间 一.话题通讯模型 二.话题编程实现 1. 实现发布者(Talker) a.在~/catkin_ws/src/learning_communicaton ...

  5. 从零打造一个机器人002【初识机器人操作系统--ROS】

    从零打造一个机器人002[初识机器人操作系统–ROS] 1.ROS是什么 ROS是一个适用于机器人的开源的元操作系统.其实它并不是一个真正的操作系统,其底层的任务调度.编译.寻址等任务还是由Linux ...

  6. 关于机器人操作系统(ROS)学习前须知二三

    ROS基础资料 1.什么是ROS? ROS(机器人操作系统,Robot Operating System),是专为机器人软体开发所设计出来的一套电脑作业系统架构.它是一个开源的元级操作系统(后操作系统 ...

  7. <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS

    <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS 前言 一.为什么需要ROS 二.ROS的总体设计 1.一个目标 2.五个特点 3.四位一体 三.ROS的系统实现--三个层次 ...

  8. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文:机器人操作系统ROS-深度相机+激光雷达实现vSLAM建图与导航_wx5d23599e462fa的技术博客_51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航. ...

  9. (二)安装机器人操作系统-ros

    总目录 (一)安装虚拟机,并虚拟Ubuntu系统 (二)安装机器人操作系统-ros 本文章推荐使用由小鱼所制作的工具箱,方便又快捷,一键安装网址如下 一行命令安装roshttps://fishros. ...

  10. 机器人操作系统ROS(1)

    ROS总体设计 ROS五个特点 点对点设计 一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系,如图2所示.虽然基于中心服务器的那些软件框架也 ...

最新文章

  1. Java反射到底慢在哪?
  2. python编程可以做什么工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  3. php限定时间内同一ip只能访问一次
  4. Angular下通过命令创建组件至指定文件夹下
  5. oracle v¥bh,【oracle笔记2】约束
  6. linux怎么打开pak文件怎么打开,在elementary OS系统中开启Flatpak应用程序支持
  7. 让携号转网不再难!但你得了解这几大限制
  8. aop springboot 传入参数_springboot用aop做参数校验
  9. 动画|经典的归并排序究竟怎么玩儿?
  10. java向mysql插入数据乱码问题解决
  11. 大数据求中位数(插值计算)
  12. 《计算复杂性与算法分析》和《计算复杂性》学习
  13. 禁用计算机中的u盘功能,怎样禁用U盘的写入功能 -电脑资料
  14. Android Car - 开机画面
  15. Python代码中的三大常见“愚形”,你中招了吗?
  16. krpano教程之字幕添加,配合语音解说滚动字幕
  17. 利用Python3开发一款小工具(环境配置)
  18. 每日启程——2019.12.11日(草木有本心,何求美人折)
  19. 一位领导写给研发部的邮件(本人用于告诫、提醒自己)
  20. 为U盘安装即插即用的kali(linux)操作系统(UEFI版)

热门文章

  1. linux学习笔记:vim编辑器的各种用法操作命令
  2. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题
  3. iframe重新加载与修改提交不关闭窗口属性页面
  4. eclipse安装反编译插件:jd-eclipse 查看源码
  5. 多个字段去重 多关联查
  6. mysql grant show_【汇总】mysql常用操作【grant,show】
  7. 计算机专业英语职高 试卷,职高对口高考英语模拟考试题.doc
  8. python异常处理_Python爬虫入门(5):URLError异常处理
  9. 根据生日计算年龄 java_Java 根据出生日期获得年龄
  10. groupadd r mysql_MySQL三种安装方式大揭秘