• 02-ROS的工程结构


    一、ROS的工程结构(文件系统级)

    1.1 catkin工作空间

    Catkin是ROS定制的编译构建系统,对CMake的扩展,编写原则和CMake很像。

    --》Catkin是用来编译ROS程序的

    --》Catkin就是一个文件夹,用来组织和管理ROS功能包。对它的创建,修改,克隆都在这里面。

    Catkin_make命令

    ---帮助初始化catkin工作空间(catkin workspace

    1. #创建工作空间
    2. mkdir -p ~/catkin_ws/src
    3. cd ./catkin_ws
    4. catkin_make

    ---编译--》一般编写好代码需要进行catkin_make,系统帮我们自动构建,生成我们的目标文件。 

    1. cd ./catkin_ws
    2. catkin_make #编译
    3. source ~/catkin_ws/devel/setup.bash #编译完成后要source刷新环境

     

    初学者一定要注意的地方

    1.catkin_make之前一定要回到catkin_workspace,在其他目录下进行catkin_make会失败的。

    2.在catkin_make后应source一下工作空间里面的setup.bash(将刚刚编译完的workspace刷新到环境变量里面去,这样系统才会知道我们生成的ROS可执行文件放在哪里,然后才能运行)

    初始化catkin工作空间后,会多出两个文件夹(build和devel),其中build里面放的是cmake&catkin缓存信息和中间文件、devel放的是生成的目标文件(头文件,动态链接库,静态链接库,可执行文件)。

    src文件夹里是真正写代码的地方

    Rosbuild是ROS早期采用的编译系统,目前主流的ROS项目已不采用;catkin是为了取代rosbuild。

    package是catkin编译的基本单元,catkin编译的对象就是一个又一个的package。catkin编译系统在编译的时候会在src目录下递归地查找每一个package,可以将几个package放到一个文件夹下。

    package

    package是ROS软件的基本组织形式(ROS就是由一个个package组成的,package就是ROS的细胞)

    package是catkin编译的基本单元,catkin编译的对象就是一个又一个的package。编译系统会一个个寻找package,然后生成目标文件。

    多个可执行文件

    一个package可以包含多个可执行文件(节点)

    一个软件包如果想被catkin编译系统认定为是一个package,至少包含CMakeLists.txt,package.xml文件。

    CMakeLists.txt:规定了catkin编译规则(告诉编译系统怎样编译package里面的代码,要编译哪些文件,需要哪些依赖,生成哪些可执行目标,怎样链接等);编译出现了什么问题,就与CMakeList.txt有关

     package.xml:定义了package的属性(包名,版本号,作者,依赖项等)

    manifest.xml:比较老的package.xml写法,是rosbuild编译系统采用的包信息清单。

    有了CMakeList.txt和manifest.xml文件就构成了一个精简的package:

    note:

    * 实现节点的语言可以不同

    代码文件

    ROS里面可执行程序有两种来源,一种是可执行脚本(Linux的shell脚本,python脚本),二种是C++文件(头文件,源文件)。

    在package下:

     (1)建一个scripts路径用来放可执行脚本*.py和*.sh脚本

     (2)建一个include和src路径分别放C++头文和源文件

     (3)src里面也可以放置Python源文件

     package下还可以放一些我们自定义的通信格式,如:消息(message),服务(service),动作(action)

     package里面还可以放置launch以及配置文件config:launch文件(*.launch)和配置文件(*.yaml)

    如果有多个可执行文件要同时 运行,直接把他们组织到一个launch文件里就可以的。

    Launch文件就是启动文件

    launch作用就是可以一次性运行多个可执行文件

  • 相关阅读:
    搭建Windows11下yolov5环境
    离线数仓(五)【数据仓库建模】
    yolov8 模型部署--TensorRT部署-c++服务化部署
    IP地址定位的基本原理
    SpringBoot第49讲:SpringBoot定时任务 - 基础quartz实现方式
    使用WPS自动化转换办公文档: 将Word, PowerPoint和Excel文件转换为PDF
    常用Python中文分词工具的使用方法
    【Linux】第十四站:进程优先级
    Redis实现布隆过滤器(上)
    Linux学习笔记4 - 基础命令
  • 原文地址:https://blog.csdn.net/peng_258/article/details/126922731