ROS文件系统与通信架构

目录

注:此文章为开课吧平台学习笔记,仅供学习,禁止转载!

一、文件系统

1、二进制包和源码包

Linux系统中ROS包的基本安装形式和方法

  1. 二进制包:可下载直接安装
  2. 源码包:修改源程序;需要定制功能;基于源码进行修改
    ROS文件系统与通信架构

2、Catkin编译系统

ROS中的Catkin编译系统

ROS文件系统与通信架构

1. Cmake的扩展--Catkin--将cmake与make指令做了一个封装从而完成整个编译过程的工具。
2. Catkin出现之前,使用的是rosbuild。Groovy版本后被Catkin代替。

1. Catkin的优点:

1. 操作简单
2. 一次配置,多次使用
3. 跨依赖项目编译

2. 必要的两个文件

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

3. Catkin工作原理

1. 编译工作原理

  1. 在工作空间 catkin_ws/src/下递归查找其中每一个ROSpackage,读取package中相应的package.xmlCMakeLists.txt文件
  2. Catkin(CMake)编译系统依据CMakeLists.txt文件,从而生成makefiles(放在catkin_ws/build/
  3. 然后 make 刚刚生成的 makefiles 等文件,编译链接生成可执行文件(放在catkin_ws/devel

2.catkin_make 指令

  1. 执行一次 catkin_make进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。
$ cd ~/catkin_ws  #回到工作空间,catkin_make必须在工作空间下执行
$ catkin_make	#开始编译
$ source ~catkin_ws/devel/setup.bash   #刷新环境

注意

  1. 回到相应的工作空间中。
  2. 编译完成后,需要设置相应的环境变量,以保证系统能够找到生成的相应的可执行文件。

ROS文件系统与通信架构

4.Catkin工作空间

ROS文件系统与通信架构

3、Package软件包

  1. Linux上的软件包
  2. catkin编译的基本单元,catkin_make编译的对象
  3. 一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等)
  4. 定义方式
    1. CMakeLists.txt和package.xml。这两个文件是必须有的。

1. 文件夹结构

![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210608222501340.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0R1YXJ5,size_16,color_FFFFFF,t_70)
1. CMakeLists.txt:定义package的包名、依赖、源文件、目标文件等编译原则,是package不可少的部分。
2. package.xml:描述package的包名、版本号、作者、依赖等信息,是package不可少的成分。
3. src/:存放ROS的源代码,包括C++的源代码以及python的module。
4. include/:存放C++源码对应的头文件
5. scripts/:存放可执行的脚本,例如shell脚本、python脚本
6. msg/:存放自定义格式的信息(.msg)
7. srv/:存放自定义格式的服务(.srv)
8. models/:存放机器人或防战场景的3D模型
9. urdf/:存放机器人的模型描述
10. launch/:存放launch文件(.launch或.xml) 

ROS文件系统与通信架构

2. package创建

  1. catkin_creata_pkg package depends
    1. package 是包名
    2. depends 是以来的包名,可以依赖多个软件包
    3. 例如:catkin_create_pkg test_pkg roscpp rospy std_msg
  2. catkin_create_pkg完成了软件包的初始化,填充好了CMakeLists.txtpackage.xml,并且将依赖项放进了这两个文件中。

3. package相关命令

package通过解析package.xml文件执行相关操作。

ROS文件系统与通信架构

下图红框中的内容是当前ROS版本名,例如:melodic

ROS文件系统与通信架构

4. 其他类型文件

  1. launch 文件

launch文件一般以 .launch.xml 结尾,它对ORS需要运行程序进行了打包,通过一句命令来启动。一般 launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令。launch命令通常放在软件包的 launch/ 路径中。

  1. msg/srv/action 文件

ROS程序中有可能右一些自定义的信息/服务/动作问及那,为程序的作者所设计的数据结构,这类文件以 .msg, .srv, .action 结尾,通常放在 package的msg/, srv/ , action/ 路径下。

  1. urdf/xacro 文件

urdf/xacro 文件时机器人模型的描述文件,以 .urdf.xacro 结尾。它定义了机器人的连杆和关节的信息,以及它们之间的距离、角度等信息,通过urdf文件可以将机器人的物理连接信息表示出来,并在可视化调试和仿真中显示。

ROS文件系统与通信架构

二、通信架构

关于 XML

  1. XML 指可扩展标记语言
  2. XML 是一种标记语言,很类似HTML,但不是 HTML
  3. XML 的设计宗旨是传输数据,而非显示数据
  4. XML 标签没有被预定义,需要自行定义标签
  5. XML 被设计为具有自我描述性
    ROS文件系统与通信架构
  1. 运行小海龟的例子
    ROS文件系统与通信架构
    1. ROS Master:节点管理器
    2. ROS Node 1:节点1
  2. rosnode 命令:对节点的操作
    ROS文件系统与通信架构
  3. ROS的“发动机”---- launch 文件
    ROS文件系统与通信架构

1. Topic 主题(异步通信)

  1. topic通信方式是异步的,发送时调用 publish()方法,发送完成立即返回,不用等待反馈。
  2. subscriber 通过回调函数的方式来处理消息。
  3. topic 可以同时有多个subscribers,也可以同时有多个publishers。

ROS文件系统与通信架构
4. rostopic 命令
ROS文件系统与通信架构
5. 在 topic 中,很重要的文件就是msg文件,它定义了节点间消息传递的格式。
ROS文件系统与通信架构
ROS文件系统与通信架构
6. 常见的message
ROS文件系统与通信架构

2. Service 服务(同步通信)

  1. Service 是同步通信方式,所谓同步就是说,此时Node A发布请求后会在原地等待reply,知道 Node B 处理完了请求并且完成了reply, Node A 才会继续执行。Node A 等待过程中,是处于阻塞状态的通信。这样的通信模型没有频繁的消息传递,没有冲突与高系统资源占用,只有接受请求才执行服务,简单而且高效。
    ROS文件系统与通信架构

  2. rosservice命令
    ROS文件系统与通信架构

  3. topic 和 service 的区别
    ROS文件系统与通信架构

  4. 重要文件 srv 文件。srv 文件时用来描述服务(service)数据类型的,service通信的数据格式定义在 *.srv 中。它声明了一个服务,包括请求(request)和响应(reply)两部分。
    ROS文件系统与通信架构

  5. 定义完 msg、srv 文件,还有一个重要步骤就是修改 package.xml 和CMakeLists.txt 文件,这些文件需要添加一些必要的依赖等,例如:

<build_depend> message_generation</build_depend>
<run_depend>message_runtime</run_depend>
  1. 常见srv类型
    ROS文件系统与通信架构

3. 参数服务器和动作库(是一种通信架构)

1. 参数服务器

参数服务器,作为ROS中另外一种数据传输方式,有别与topic 和service,它更加的静态。参数服务器维护着一个数据字典,字典里存储着各种参数和配置。

2. 动作库

  1. Action规范文件的后缀名时 .action , 它的内容格式如下:
    ROS文件系统与通信架构

  2. 利用动作库进行请求响应,动作的内容格式包含三个部分:目标、反馈、结果

    1. 目标

    机器人执行一个动作,应该有明确的移动目标信息,包括一些参数的设定,方向、角度、速度等等。从而使机器人完成动作任务。

    1. 反馈

    在动作进行的过程中,应该有实时的状态信息反馈给服务器的实施者,告诉实施者动作完成的状态,可以使实施者作出准确的判断去修正命令。

    1. 结果

    当运动完成时,动作服务器把本次运动的结果数据发送到客户端,使客户端得到本次动作的全部信息,例如可能包含机器人的运动时长,最终姿势等等。

  3. 常见的 action 类型
    ROS文件系统与通信架构

上一篇:(已解决2019.8.8)Background on this error at: http://sqlalche.me/e/e3q8


下一篇:util-caleAge 计算年龄