Ros2入门21讲

个人理解 ros2——就是机器人各个节点间的通讯框架,在各个节点之间传递数据,使他们相互配合运行流程。 

编译下载源码包P6 ???

 工作空间:存放项目开发相关的文件夹,是开发过程的大本营(基地)

Dev-ws可以重复建立,比如dec-ws.a 等  

src代码空间 install安装空间 build 编译空间 log 日志空间(存放相关错误信息)

 节点:机器人的工作细胞(职责就是执行具体的工作进程,比如有电脑A、B,A和B当中的各个部件比如摇杆、摄像头等就是节点)。每一个节点都是一个可以独立执行的文件可以使用不用的编程语言,同时每个节点也可以分布运行在不同的主机上,可以通过节点名称进行管理

节点的编程步骤:编程接口初始化  创建节点并初始化 实现节点功能 销毁节点并关闭接口(面向过程编程,简单, 但是面对复杂的系统很难进行模块化的编程——面向对象编程C++/python)

 智能汽车竞赛

基本技能:底层运动控制 AI图像识别 自动驾驶技术

基础知识:编程知识(基础) 机器视觉(图像识别技术) 肉丝2(是一个通信框架)

单片机(控制)

 通信机制一:

节点间数据传递的桥梁——话题(个节点间联系最重要的方式)

发布数据的节点——发布者 接受数据的节点——订阅者 (存在多对多的特性,并不是唯一对应的)。存在异步通信机制,就是发布者发布数据,并不知道订阅者什么时候可以接收到,所以话题适用于周期发布的数据,当存在逻辑性较强的运转过程时,话题就不太适合使用了。因此节点之间需要统一话题通讯的数据的描述格式,通过.msg定义通信的消息结构。

话题发布者的发布流程:编程接口初始化 创建节点并初始化 创建发布者对象(声明每个消息的名称和类型) 创建并填充消息类型 发布话题消息 销毁节点并关闭接口

话题订阅者的订阅流程:编程接口初始化 创建节点并初始化 创建订阅者对象 回调函数处理话题数据  销毁节点并关闭接口

 图像识别代码运行P7、P8???操作识别口罩

 服务:节点间的你问我答

服务通信是什么?——客户端的发送一个需求,服务器接受到信息之后,返回所需要的页面数据。一般要求越快越好,即同步通信机制。同时,一个服务器可以对应多个客户端(例如古月居上面有许多用户)。 .srv文件

客户端发送请求数据,服务器在运行之后将结果数据返回给客户端实现应答。

计算加减法P9???

创建服务客户端的程序流程:编程接口初始化 创建节点并初始化(service?client?)  创建客户端对象(命名)创建并发送请求数据 等待服务器端应答数据 销毁节点并关闭接口

 话题(传感器等周期性单向传输数据)+服务(节点间相互回应 同步性要求较高的通讯数据)够了嘛?   软硬件较为复杂,许多时候标准接口不在满足需求,我们需要自己定义接口。

 通讯接口(解答之前不知什么是接口的疑惑):数据传递的标准结构

分类

硬件接口:插头 USB之类的

软件接口:例如使用的函数以及输入输出

接口必须要配套使用 才能行使功能 具象化——模块化的代码要配套使用才能形式功能

 通信机制三:

动作

.action文件

Ros2命令行学习 有哪些?怎么调用?

 动作:对某一套完整行为的流程管理

服务端唯一,客户端不唯一。同时也存在同步通信机制,.action文件定义通信接口的数据结构。

动作就是基于应用层的通信机制,其底层是通过话题和服务来实现的。

小海龟仿真...    

用动作的话,会有一个持续时间。并且在这段持续时间里会不断的feedback当前小乌龟的状态。——适合在应用层面对机器人的动作进行控制,

参数:机器人系统的全局字典

参数是什么???可以通过调整参数来调整功能

 分布式(Distribution)通信:多计算平台的任务分配

任务较大时,可以将任务分配到各个节点上

困难:虚拟机的网络配置无法更改为桥接模式 小海龟仿真(在树莓派端和PC端)

 通信的标准:DDS(数据分发服务)——机器人的神经网络(数据为中心模式:只选取自己需要的数据和信息)

所以不同的DDS都有细微的区别,ros2会尽量兼容各个DDS,使得上层的函数接口都是一样的。