2020/8/1 ROS深入介绍

第一部分:ROS package

创建工程: catkin_create_pkg package_name {dependencies}

推荐ROS工程组织结构:2020/8/1 ROS深入介绍_第1张图片

SRC存放源文件;
MSG存放节点之间进行通信的消息定义;
SRV存放节点之间进行服务通信的时候的服务定义;
CONFIG存放配置文件相关的信息;
INCLUDE存放头文件相关的信息;
Launch存放节点启动和它相关的节点之间的启动文件。

package.xml: 定义了可执行文件的需要的依赖库、还定义了软件版本、开发者信息的一些描述文件
2020/8/1 ROS深入介绍_第2张图片
CmakeLists.txt:基于ROS工程的另一些关键信息,包括怎么编译ros工程:Cmake版本、package name、头文件信息、指定了一些依赖库(与pakage.xml一一对应)
2020/8/1 ROS深入介绍_第3张图片

包含的内容:
1、指定Cmake的版本;
2、工程Package name;
3、工程的头文件信息;
4、指定所依赖的库,与在Package.xml里面所指定的依赖库是一一对应的;
5、install命令,将编译出来的临时文件放在指定的目录里。

**install命令:**使编译出来的临时产出放到指定的产出目录中,是用于部署到整个系统的一种方式2020/8/1 ROS深入介绍_第4张图片

第二部分 编译ROS基本工程(Eclipse)

建立工程步骤:
1.建立:catkin build package_name
2.使用默认配置信息,命令:catkin config
3.~/catkin_ws/build

提升编译效率:catkin build会对整个进行编译,指定package进行编译可以提高效率

在Eclipse中比编译:

步骤:
1.打开,设置workspace
2.导入工程
3.使用Eclipse的build、run工具调试>
2020/8/1 ROS深入介绍_第5张图片

第三部分:ROS的基本运行逻辑

示例:
2020/8/1 ROS深入介绍_第6张图片

一些说明:
init:引入ROS的一个基本环境,指定节点使用的node名字和一些参数信息;
NodeHandle:node和整个ROS框架进行通信所使用的一个句柄指针;
数据发送的频率:looprate(10)以10赫兹发送消息。
while循环以10赫兹的消息频率进行发送,同时进行计数。
Spinonce:有一帧消息就把这消息立马发送出去,同时进行下一轮的消息等待。

第四部分 ROS的日志系统

2020/8/1 ROS深入介绍_第7张图片

一些说明:
ROS_INFO:即ROS提供的日志系统
ROS的日志系统是分级的
日志系统提供了两种格式ROS_INFO与ROS_INFO_stream:

  • ROS_INFO:默认把信息打印到当时运行的屏幕上。
  • ROS_INFO_stream:它是流式数据,默认输出到后台这个节点所对应的日志文件。

第五部分 接收者与发送者的功能

接收者:
2020/8/1 ROS深入介绍_第8张图片
发送者:
2020/8/1 ROS深入介绍_第9张图片

两者区别:
1、回调函数:subscriber作为信息的接收方有一个回调函数,回调函数定义了它接收到的每一帧信息如何使用;上图listener回调函数比较简单,它接收到信息后只是进行了打印处理。Publisher没有回调函数,它不需要对消息进行处理。

2、声明的时候:subscriber把回调函数传入到对应的node初始化程序里面。publisher声明的时候只需要注册要往哪一个topic上去发信息,同时还设置队列长度。

3、Rosspin:在ROS构架里所有的回调函数都不是主动触发的。Rosspin是阻塞性的,声明Rosspin之后,就阻塞在此,程序不会退出,它会一直监听自己对应的队列里面是否有新消息的到达,若有新消息到达就会触发回调函数处理。

如果Subscriber的主程序里除了订阅消息之外还有其他的功能则可以采用rosspin once,对所有已达消息进行回调函数的处理。同时可以写一个while循环,rosspin once按照一定的频率去处理回调函数的消息。ROS提供Rosspin这两种方式,就是为了满足这两种场景。第一种是阻塞,只有一个回调函数进行处理,第二种是订阅回调函数消息以外,他还进行了一些封装和处置。

但是在实际的自动驾驶系统里面,所有的模块都不是简单的一个角色,是一个复杂交互的功能,甚至是用到很多数据融合或者是消息对齐

第六部分 Service与Param两种通信方式

Service: 服务
使用:启动service去注册一项服务;其他节点call service去使用改服务
相对于message的类似“广播”的松耦合通信方式,Service需要及时回应,Client向server去发送service请求的时候,需要实时等待一个response,根据响应做出下一步的行为指示。

Parameter: 借鉴了Service的原理,启动Parameter service(Parameter service是一个全局的服务器,各个节点在进行参数设置和获取的时候可以通过Parameter service的方式轻易完成)2020/8/1 ROS深入介绍_第10张图片
rosparam:ROS所使用的与Parameter对应的一套基本命令行工具;get和set:get是get某一个全局参数的值;set是设置某一个全局参数的值。2020/8/1 ROS深入介绍_第11张图片

说明:
上图展示的例子是通过node所提供的nodeHandler指针去调用它的getparam,得到某个参数的数值。当它进行一些运算之后,也可以通过setparam去设置参数的值。设置之后,整个系统参数服务器里面对应的这个参数就会被设置成对应的值,其他节点在得到这个值之后再作出相应的处理。

ROS的可视化工具RViz

2020/8/1 ROS深入介绍_第12张图片
RViz在整个ROS生态里可以看成是一个节点,它定义了整个拓扑结构;同时提供很多debug功能;

因为RViz也是一个普通的节点,所以在启动的时候可以通过rosrun命令的方式去启动RViz相关的功能。
2020/8/1 ROS深入介绍_第13张图片
RViz也提供了很多插件可以放到诸如eclipse这样的功能插件里面,在进行eclipse开发时可以通过eclipse的plugin去调取RViz的相关功能,进行可视化调试。

你可能感兴趣的:(智能驾驶笔记)