仅作学习笔记。
一、ROS文件系统级:
总体架构图:
1、catkin工作空间:catkin+工作空间
catkin:ROS定制的编译构建系统,是对Cmake的扩展
catkin工作空间其实就是组织管理功能包的文件夹,以catkin工具编译,对功能包进行修改、克隆等等。
如何建立工作空间:
2、下一步:
只有src是真正写代码的地方,关注点在于src文件。rosbuild是早期的编译系统,已经过时。
3、src
src里面存放功能包,功能包是catkin编译的基本单元。
4、package(功能包)
功能包(package)是构成ROS的基本单元。ROS应用程序是以功能包为单位开发的。功能包包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件。它还包含功能包所需的所有文件,如用于运行各种进程的ROS依赖库、数据集和配置文件等。
ROS软件的基本组织形式;catkin编译的基本单元;一个功能包可以包含多个可执行文件(节点)。
package的整体结构:
CMakelist.txt和package.xml是功能包的基本文件
CMakeList.txt:规定catkin的编译规则(例如:源文件、依赖项、目标文件)
package除了放代码文件还可以放自定义通讯格式(消息msg、服务srv、动作action)
package.xml:定义package的属性(例如:包名、版本号、作者、依赖等)
manifest.xml是老版rosbuild的,类似于package.xml。
·launch文件:使可以同时启动包里的多个可执行文件
5、管理功能包的常用指令
rospack:
查找某个pkg的地址
$rospack find package_name
列出本地所有pkg
$rospack list
roscd:
跳转到某个pkg路径下
$roscd package_name//比较常用
rosls:
列举某个pkg下的文件信息
$rosls package_name
rosed:
编辑pkg中的文件
$rosed package_name file_name
catkin_creat_pkg:
创建一个pkg`
$catkin_creat_pkg <pkg_name> [deps]
rosdep:
安装某个pkg所需的依赖
$rosdep install [pkg_name]//一般用于克隆的pkg
工作空间创建的实际例子:https://www.bilibili.com/video/av76568046?p=8
6、Metapackage(取代stack 软件包集或功能包集)
元功能包(metapackage)是一个具有共同目的的功能包的集合。例如,导航元功能包包含AMCL、DWA、EKF和map_server等10余个功能包。
作用:将具有相似功能的软件包给组织起来,虚包
常见的Metapackage
二、ROS通讯架构(及计算图级)
PR2机器人
1、master节点管理器
主节点是帮助节点之间的连接。主节点就像节点名称、话题和服务、动作名称、URI地址和端口以及参数们的名称服务器。换句话说,节点同时向主节点注册自己的信息,并从主节点获取其他节点希望通过主节点访问的节点的信息。然后,节点和节点直接连接进行消息通信。
·管理节点之间的通讯
启动master:
2、node
节点(node)是指在ROS中运行的最小处理器单元。可以把它看作一个可执行程序。在ROS中,建议为一个目的创建一个节点,建议设计时注重可重用性。例如,在移动机器人的情况下,为了驱动机器人,将每个程序细分化。也就是说,使用传感器驱动、传感器数据转换、障碍物判断、电机驱动、编码器输入和导航等多个细分节点。
节点在运行的同时,向主节点注册节点的名称,并且还注册发布者(publisher)、订阅者(subscriber)、服务服务器(service server)、服务客户端(service client)的名称,且注册消息形式、URI地址和端口。基于这些信息,每个节点可以使用话题和服务与其他节点交换消息。
·ROS的进程、pkg里的可执行文件(C++、py、shell)运行的实例
·rosrun:启动node的方法
$rosrun [pkg_name] [node_name]
·rosnode:管理节点
$rosnode list //列出当前运行的node的信息
$rosnode info [node_name] //显示某个node的详细信息
$rosnode kill [node_name] //结束某个node
·roslaunch:启动master和多个node
$roslaunch [pkg_name] [file_name.launch]
3、通讯方式:Topic、Service、Parameter Sevice、Actionlib
(1)Topic:
·ROS中的异步通讯方式(异步就是publish和subscribe不用同时,有消息就做处理)
·Node间通过piblish-subscribe机制通讯
·Topic是一个字符串,就是一个频道
·可以有多个发布和订阅
(2)Message:一种数据格式,类
·topic内容的数据类型,定义在*.msg文件中
相关的命令操作:
(3)Service:
·ROS中的同步通讯方式
·Node间可以通过request-reply方式通讯
需要的时候服务才会进行,不像topic一直发布
区别:
srv:Service通讯的数据格式,定义在*.srv文件中
srv例子:
自定义srv和msg都得在这两个文件中添加依赖:
srv相关命令:
4、Parameter Service参数服务器
相关操作:
5、Action
对应的文件
三、Client Library
四、urdf文件
五、地图