知识点笔记
约 1873 个字 预计阅读时间 7 分钟
总笔记链接:https://book.guyuehome.com/
思维导图:¶



快捷键:¶
打开终端:Ctrl + alt + T
停止运行:Ctrl + C
显示隐藏文件: Ctrl + H
ROS2 命令行操作:¶
cd
- 语法:cd < 目录路径 >
- 功能:改变工作目录。若没有指定“目录路径”,则回到用户的主目录
pwd
- 语法:pwd
- 功能:此命令显示出当前工作目录的绝对路径
mkdir
- 语法:mkdir [ 选项 ] < 目录名称 >
- 功能:创建一个目录 / 文件夹
ls
- 语法:ls [ 选项 ] [ 目录名称…]
- 功能:列出目录 / 文件夹中的文件列表
gedit
- 语法:gedit < 文件名称 >
- 功能:打开 gedit 编辑器编辑文件,若没有此文件则会新建
mv
- 语法:mv [ 选项 ] < 源文件或目录 > < 目地文件或目录 >
- 功能:为文件或目录改名或将文件由一个目录移入另一个目录中
cp
- 语法:cp [ 选项 ] < 源文件名称或目录名称 > < 目的文件名称或目录名称 >
- 功能:把一个文件或目录拷贝到另一文件或目录中,或者把多个源文件复制到目标目录中
rm
- 语法:rm [ 选项 ] < 文件名称或目录名称…>
- 功能:该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变
sudo
- 语法:sudo [ 选项 ] [ 指令 ]
- 功能:以系统管理员权限来执行指令
核心概念:¶
工作空间:¶
src , install , build , install
设置环境变量:
$ source install/local_setup.sh # 仅在当前终端生效
$ echo " source /dev_ws/install/local_setup.sh">> /.bashrc # 所有终端均生效(慎用)
$ colcon build # 进行工作空间下代码的编译
功能包:¶
功能包就是这个原理,我们把不同功能的代码划分到不同的功能包中,尽量降低他们之间的耦合关系,当需要在 ROS 社区中分享给别人的时候,只需要说明这个功能包该如何使用,别人很快就可以用起来了。
节点:¶
节点在机器人系统中的职责就是执行某些具体的任务,从计算机操作系统的角度来看,也叫做进程;
每个节点都是一个可以独立运行的可执行文件,比如执行某一个 python 程序,或者执行 C++ 编译生成的结果,都算是运行了一个节点;
创建节点流程
- 编程接口初始化
- 创建节点并初始化
- 实现节点功能
- 销毁节点并关闭接口
面向过程 / 对象
set up. py 里面要把接口写清楚
话题:¶
节点间数据传输的桥梁
此时从节点 A 到节点 B 传递图像数据的方式,在 ROS 中,我们就称之为话题,它作为一个桥梁,实现了节点之间某一个方向上的数据传输。
在 ROS 中,话题通信数据的描述格式称之为消息,对应编程语言中数据结构的概念。比如这里的一个图像数据,就会包含图像的长宽像素值、每个像素的 RGB 等等,在 ROS 中都有标准定义。
消息是 ROS 中的一种接口定义方式
发布者代码框架:
- 编程接口初始化
- 创建节点并初始化
- 创建发布者对象
- 创建并填充话题消息
- 发布话题消息
- 销毁节点并关闭接口
订阅者代码框架:
- 编程接口初始化
- 创建节点并初始化
- 创建订阅者对象
- 回调函数处理话题数据
- 销毁节点并关闭接口

服务:
节点间的你问我答
客户端:
- 编程接口初始化
- 创建节点并初始化
- 创建客户端对象
- 创建并发送请求数据
- 等待服务器端应答数据
- 销毁节点并关闭接口
服务端 :
- 编程接口初始化
- 创建节点并初始化
- 创建服务器端对象
- 通过回调函数处进行服务
- 向客户端反馈应答结果
- 销毁节点并关闭接口
三种常用的通讯机制:话题 .msg,服务 .srv,动作 .action
通信接口 : ¶
接口,它是一种相互关系,只有彼此匹配,才能建立连接。
动作:¶
这种通信机制的目的就是便于对机器人某一完整行为的流程进行管理。动作和服务类似,使用的也是客户端和服务器模型,客户端发送动作的目标,想让机器人干什么,服务器端执行动作过程, 控制机器人达到运动的目标,同时周期反馈动作执行过程中的状态。底层是基于话题和服务实现的

用到两个服务一个话题
参数:¶
类似 C++ 编程中的全局变量,可以便于在多个程序中共享某些数据,参数是 ROS 机器人系统中的全局字典,可以运行多个节点中共享数据。
在 ROS2 中,参数的特性非常丰富,比如某一个节点共享了一个参数,其他节点都可以访问,如果某一个节点对参数进行了修改,其他节点也有办法立刻知道,从而获取最新的数值。这在参数的高级编程中,大家都可能会用到。
分布式系统:¶
分布式系统,可以实现多计算平台上的任务分配。机器人功能是由各种节点组成的,这些节点可能位于不同的计算机中,这种结构可以将原本资源消耗较多的任务,分配到不同的平台上,减轻计算压力,这就是分布式通信框架的典型应用之一。

机器人体积比较小,不适合放一个笔记本电脑在上边,于是采用树莓派作为控制器,主要实现传感器驱动和电机控制等功能,不过视觉处理和应用功能就不适合在树莓派里运行了,我们放在另外一个性能更强的笔记本电脑中,此外我们还需要在电脑上监控机器人的传感器信息,并且远程控制机器人运动。
不需要修改代码即可直接联通,非常方便。
DDS:¶
话题、服务、动作,他们底层通信的具体实现过程,都是靠 DDS 来完成的,它相当于是ROS 机器人系统中的神经网络。
DDS 的核心是通信,能够实现通信的模型和软件框架非常多,这里我们列出常用的四种模型。

以数据为中心的 DDS 模型,这种模型与广播模型有些类似,所有节点都可以在 DataBus 上发布和订阅消息。但它的先进之处在于,通信中包含了很多并行的通路,每个节点可以只关心自己感兴趣的消息,忽略不感兴趣的消息,有点像是一个旋转火锅,各种好吃的都在这个 DataBus 传送,我们只需要拿自己想吃的就行,其他的和我们没有关系。
DDS 的全称是Data Distribution Service,也就是数据分发服务,2004 年由对象管理组织 OMG发布和维护,是一套专门为实时系统设计的数据分发 / 订阅标准

常用工具:¶
Launch:¶
Launch 启动文件,它是 ROS 系统中多节点启动与配置的一种脚本。