节点和管理器
=========================================
节点【node】 -- 执行单元
执行具体任务的进程、独立运行可执行文件
不同节点可使用不同的编程语言,可分布式运行在不同的主机
节点在系统中名称必须唯一的
节点管理器【ROS Master】 --控制中心
为节点提供命名和注册服务
跟踪和记录话题/服务通信,辅助节点相互查找、建立连接
提供参数服务器,节点使用此服务器存储和检索运行时的参数
话题通信
=========================================
话题【topic】 -- 异步通信机制
节点用来传输数据的重要总线
使用发布/订阅模型,数据由发布者传输到订阅者,同一话题的订阅者或发布者可以不唯一
消息【Message】 -- 话题数据
具有一定的类型和数据结构,包括ROS提供的标准类型和用户的自定义类型
使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件
消息发布代码流程
1、ROS初始化
2、ROS创建节点句柄
在节点初始化和关闭一节中,使用ros::NodeHandle管理节点的内部引用,使启动和关闭一个节点变得简单.
在创建时,如果一个内部节点没有被启动,节点句柄将启动该节点.一旦所有的节点句柄实例被销毁,那么节点将被自动关闭.
3、定义发布者
4、设置循环频率
5、循环
定义消息类型
发布消息
执行睡眠时间(频率延时)
服务通信
=========================================
服务【Service】 -- 同步通信机制
使用客户端/服务端(c/s)模型,客户发送请求数据,服务器完成处理后返回数据
使用编程语言无关的.srv文件请求和应答数据结构,编译过程中生成对应的戴拿文件
参数
=========================================
参数【parameter】 -- 全局共享字典
可通过网络访问的共享、多变量字典
节点使用此服务来存储和检索运行时的参数
适合存储静态、非二进制的配置参数,不适合存储动态配置的数据
文件系统
=========================================
功能包【Package】
ROS软件中的基本单元,包含节点源码、配置文件、数据定义等
功能包清单【Package manifest】
记录包的基本信息,包含作者、许可信息、依赖信息、依赖选项、编译标志等
元功能包【Meta Packages】
组织多个用于同一目的的功能包
工作空间
--------------------------------------------------
工作空间(workspace)是一个存放工程开发相关文件的文件夹
src 代码空间 (source space)
build 编译空间 (build space)
devel 开发空间 (development space)
install 安装空间 (install space)
创建工作空间
mkdir -p ~/空间名称/src
cd ~/空间名称/src
catkin_init_workspace //初始化工作空间cd
编译工作空间
cd ~/空间名称/
catkin_make //产品build 和 devel 文件夹
catkin_make install //添加install文件夹
设置环境变量
source devel/setup.bash
检查环境变量
echo $ROS_PACKAGE_PATH
创建功能包
--------------------------------------------------
cd ~/空间名称/src
catkin_create_pkg test_pkg std_msgs rospy roscpp //创建 test_pkg 的功能包 依赖于 rosspy roscpp
CMakeLists.txt # 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分
package.xml # 描述package的包名、版本号、作者、依赖等信息,是package不可少的成分
src/ # 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)
include/ # 存放C++源码对应的头文件
scripts/ # 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)
msg/ # 存放自定义格式的消息(.msg)
srv/ # 存放自定义格式的服务(.srv)
models/ # 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)
urdf/ # 存放机器人的模型描述(.urdf或.xacro)
launch/ # 存放launch文件(.launch或.xml)
编译功能包
cd ~/空间名称
catkin_make
source ~/空间名称/devel/setup.bash
echo $ROS_PACKAGE_PATH
创建服务
--------------------------------------------------
1、.srv文件的创建 # 向功能包添加自定义服务文件(.srv)
2、功能包CMakeLists.txt # 修改CMarkLists.txt
3、catkin_make # 编译功能包
4、创建服务节点 # 在功能包的src文件夹下面创建service 和client 的源码文件
5、修改CMakeLists.txt文件 # 将服务注入到CmarkLists.txt
6、rosrun 服务