1.ROS类似于机器人界的安卓
2.Node节点可类似于安卓中的app
3.Ros由不同功能的app构成,运行不同的app实现不同的效果,运行了gmapping节点的机器人就变成了一台扫描建图的机器人,运行了move_base的机器人就是一台能自主建图的机器人
4.安卓可以通过Google商店下载第三方的app,变成万能工具,ros也类似,可通过apt源和github下载软件包,相当于从应用商店下载app,除此之外,还能够想给安卓开发app一样,给ros开发新的功能包,不需要对整个程序重写,只需要按照相对应的接口规范,编写相应的节点即可
5.source指令可用于执行一个文本文件里的一连串指令,在Linux中经常会把一连串指令写到 .sh 文件中,然后用source指令运行
6. ~/.bashrc文件是终端启动脚本,每次运行终端时都会执行此脚本
7.apt源,ros的软件包应用商店
8.github中的软件包都是以源代码形式存在的,下载之后要编译之后才能运行
9.工作空间就是符合某种要求的目录结构,编译器会按照目录结构检索源代码进行编译
10.工作空间下的src目录,src就是source原始资料的意思,指的是程序源代码这类资源材料
11.scripts目录用来放置脚本文件和python程序,这些脚本文件用来完成一些使用频率不是很高的操作,比如安装依赖包,还有为实体机器人映射端口
12.使用脚本安装编译需要的依赖库,在终端中执行 ./(脚本文件名称),回车
13.运行节点之前要先把工作空间的环境参数加载到终端程序中,否则会提示找不到软件包
使用source指令载入工作空间的环境设置,通常会把设置工作空间环境参数的source指令添加到终端程序初始化的脚本 .bashrc 文件中
14.在使用ros时,是在使用某个或某一些节点,尽管不同的节点有着不同的功能,但每个节点在代码中的结构是遵循固定的套路的,有顺序,先后最后,都是实现安排好的,掌握固定的套路
15.ros机器人能够实现复杂的任务,实际上是一堆节点相互合作的结果
16.先熟悉节点的基本结构,然后再在这个结构中逐步装填其他功能
17.节点不能脱离包而存在
18.依赖项:通用的节点或资源,可以在cmake.list和package.xml中修改依赖项
19.roscd 在终端中进入指定软件包的文件地址
/opt/ros/noetic/share目录下存放的都是ros的package包
这些包与工作空间文件夹下的包区别:通过apt下载的软件包都是可执行文件,可直接运行
而工作空间下的软件包都是源码文件,需要编译之后才能运行
20.ros头文件报错,可以删除 .vscode中的c_cpp_properties.json文件
21. 代码编写流程
- 包含头文件
- Main主框架,删除const修饰
- 初始化ros节点,第三个参数是节点名称
- 创建节点句柄
- 编写while循环,while循环条件是ture是,节点的程序不会相应任何外部信号,可以将条件ture改为ros::ok()
- 修改cmake.list文件
add_executable(${PROJECT_NAME}_node src/ssr_pkg_node.cpp)为这个包添加一个可执行程序,也就是所创建的节点,文件
括号中第一项是可执行文件的名字,一般可执行文件与包名保持一致
第二项是指定从哪个代码文件进行编译
- 编译
- 运行node节点,先启动roscore
22.ros程序都是以这个结构框架为主体
23. topic话题是两个节点建立连接的关键
24.消息的格式会分为很多类型以满足不同的数据传输要求,在生成消息包时通常要指定消息类型
25.std_msgs消息包包含很多基础的消息类型,将它作为依赖项就可以使用它的消息类型来构建消息包
26.ros中的基础消息类型有限,其他各种各样复杂的消息类型实际上都是由有限的几个基础类型组合嵌套而成
27.消息类型是普通文字,就要找到能够装载这段文字的消息类型string(字符串)
28.发布者实现:第一要确定发布的话题名称,第二是要发布的消息类型
29.rate函数用于控制循环频率,
在main函数中,while循环外 ros::Rate 频率对象(自定义)(写入控制循环每秒执行的次数);
在while函数中,调用rate函数,(频率对象).sleep(); 此函数会在while循环中做一个短时间阻塞,以便让循环的执行频率与写入控制循环次数的参数对应上