目录
注:此文章为开课吧平台学习笔记,仅供学习,禁止转载!
一、文件系统
1、二进制包和源码包
Linux系统中ROS包的基本安装形式和方法
- 二进制包:可下载直接安装
- 源码包:修改源程序;需要定制功能;基于源码进行修改
2、Catkin编译系统
ROS中的Catkin编译系统
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. 编译工作原理
- 在工作空间
catkin_ws/src/
下递归查找其中每一个ROS
的package
,读取package中相应的package.xml
和CMakeLists.txt
文件 -
Catkin(CMake)
编译系统依据CMakeLists.txt
文件,从而生成makefiles
(放在catkin_ws/build/
) - 然后
make
刚刚生成的makefiles
等文件,编译链接生成可执行文件(放在catkin_ws/devel
)
2.catkin_make
指令
- 执行一次
catkin_make
进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。
$ cd ~/catkin_ws #回到工作空间,catkin_make必须在工作空间下执行
$ catkin_make #开始编译
$ source ~catkin_ws/devel/setup.bash #刷新环境
注意
- 回到相应的工作空间中。
- 编译完成后,需要设置相应的环境变量,以保证系统能够找到生成的相应的可执行文件。
4.Catkin工作空间
3、Package软件包
- Linux上的软件包
- catkin编译的基本单元,catkin_make编译的对象
- 一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等)
- 定义方式
- 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)
2. package创建
-
catkin_creata_pkg package depends
- package 是包名
- depends 是以来的包名,可以依赖多个软件包
- 例如:
catkin_create_pkg test_pkg roscpp rospy std_msg
-
catkin_create_pkg
完成了软件包的初始化,填充好了CMakeLists.txt
和package.xml
,并且将依赖项放进了这两个文件中。
3. package相关命令
package通过解析package.xml文件执行相关操作。
下图红框中的内容是当前ROS版本名,例如:
melodic
4. 其他类型文件
- launch 文件
launch文件一般以
.launch
或.xml
结尾,它对ORS需要运行程序进行了打包,通过一句命令来启动。一般 launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令。launch命令通常放在软件包的launch/
路径中。
- msg/srv/action 文件
ROS程序中有可能右一些自定义的信息/服务/动作问及那,为程序的作者所设计的数据结构,这类文件以
.msg
,.srv
,.action
结尾,通常放在 package的msg/
,srv/
,action/
路径下。
- urdf/xacro 文件
urdf/xacro 文件时机器人模型的描述文件,以
.urdf
或.xacro
结尾。它定义了机器人的连杆和关节的信息,以及它们之间的距离、角度等信息,通过urdf文件可以将机器人的物理连接信息表示出来,并在可视化调试和仿真中显示。
二、通信架构
关于 XML
- XML 指可扩展标记语言
- XML 是一种标记语言,很类似HTML,但不是 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义,需要自行定义标签
- XML 被设计为具有自我描述性
- 运行小海龟的例子
- ROS Master:节点管理器
- ROS Node 1:节点1
- rosnode 命令:对节点的操作
- ROS的“发动机”---- launch 文件
1. Topic 主题(异步通信)
- topic通信方式是异步的,发送时调用 publish()方法,发送完成立即返回,不用等待反馈。
- subscriber 通过回调函数的方式来处理消息。
- topic 可以同时有多个subscribers,也可以同时有多个publishers。
4. rostopic 命令
5. 在 topic 中,很重要的文件就是msg文件,它定义了节点间消息传递的格式。
6. 常见的message
2. Service 服务(同步通信)
-
Service 是同步通信方式,所谓同步就是说,此时Node A发布请求后会在原地等待reply,知道 Node B 处理完了请求并且完成了reply, Node A 才会继续执行。Node A 等待过程中,是处于阻塞状态的通信。这样的通信模型没有频繁的消息传递,没有冲突与高系统资源占用,只有接受请求才执行服务,简单而且高效。
-
rosservice命令
-
topic 和 service 的区别
-
重要文件 srv 文件。srv 文件时用来描述服务(service)数据类型的,service通信的数据格式定义在 *.srv 中。它声明了一个服务,包括请求(request)和响应(reply)两部分。
-
定义完 msg、srv 文件,还有一个重要步骤就是修改 package.xml 和CMakeLists.txt 文件,这些文件需要添加一些必要的依赖等,例如:
<build_depend> message_generation</build_depend>
<run_depend>message_runtime</run_depend>
- 常见srv类型
3. 参数服务器和动作库(是一种通信架构)
1. 参数服务器
参数服务器,作为ROS中另外一种数据传输方式,有别与topic 和service,它更加的
静态
。参数服务器维护着一个数据字典
,字典里存储着各种参数和配置。
2. 动作库
-
Action规范文件的后缀名时 .action , 它的内容格式如下:
-
利用动作库进行请求响应,动作的内容格式包含三个部分:目标、反馈、结果
- 目标
机器人执行一个动作,应该有明确的移动目标信息,包括一些参数的设定,方向、角度、速度等等。从而使机器人完成动作任务。
- 反馈
在动作进行的过程中,应该有实时的状态信息反馈给服务器的实施者,告诉实施者动作完成的状态,可以使实施者作出准确的判断去修正命令。
- 结果
当运动完成时,动作服务器把本次运动的结果数据发送到客户端,使客户端得到本次动作的全部信息,例如可能包含机器人的运动时长,最终姿势等等。
-
常见的 action 类型