ROS理论与实践(以移动机器人为例)连载(一) ——认识ROS

Author: XFFer_

参考:

  1. http://wiki.ros.org/
  2. https://www.guyuehome.com/
  3. 《ROS机器人开发实践》胡春旭


ROS架构

节点(Node) ——执行单元

  • 执行具体任务的进程、独立运行的可执行文件
  • 不同节点是松耦合的,可以用不同的编程语言,可以在不同的PC端运行
  • 节点的名称是唯一的huati

节点管理器(ROS Master) ——控制中心

  • 为节点提供 命名和注册(Registration) 服务
  • 通过远程控制调用(RPC) 跟踪记录话题/服务通信,辅助节点相互查找和连接
  • 提供参数服务器,节点使用该服务器存储和检索运行时的参数

话题(Topic) ——异步通信机制(asynchronous communication)

  • 异步通信: (简单讲)发送端想啥时间发就发,但是要在消息前后做个标记,方便接收端接受
  • 节点间用来传输数据的总线
  • 使用发布/订阅模型,数据由发布者(publisher)传给订阅者(subscriber)

消息(Message) ——话题数据

  • 具有一定的类型和数据结构(ROS提供的标准类型和自定义类型)
  • 使用编程语言无关的 .msg 文件定义,编译过程中生成代码文件

服务(Service) ——同步通信机制

  • 使用 客户端/服务器(C/S) 模型,也就是Client/Server,客户端发送 请求 ,服务器完成处理后返回 应答 数据。这里返回数据还是由话题的方式
  • 使用编程语言无关的 .srv文件定义请求和应答数据结构,编译过程中生成代码文件
Data
Request
Registration
Registration
Camera
Camera Node
Image Process Node
/image_data Message
ROS Master节点管理器
话题 服务
同步性 异步(很像发邮件,不知道对方收到了没有) 同步(像打电话,实时得知对方的状态)
通信模型 发布/订阅 服务器/客户端
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
反馈机制
缓冲区
实时性
节点关系 多对多 一对多
适用场景 数据传输 逻辑处理

参数(Parameter) ——全局共享字典

  • 可通过网络访问的共享、多变量字典
  • 节点使用此服务器存储和检索运行时的参数
  • 适合存储静态、非二进制的配置参数,不适合动态配置参数
foo:1
getParam foo
setParam foo:1
ROS Master
listener
talker

kinetic

文件系统
元功能包
组织用于统一目的的功能包, 如: 建模, 定位
功能包
功能包清单
package.xml
作者信息, 许可信息, 依赖选项
消息类型
服务类型
代码
其他

.xml文件可以参考之前我写的这个cmake的末尾部分。

小海龟仿真分析(经典)

$ roscore

roscore

$ rosrun turtlesim turtlesim_node

在这里插入图片描述

$ rosrun turtlesim turtle_teleop_key

在这里插入图片描述
我们可以使用rqt_graph可视化工具查看系统中运行的计算图
在这里插入图片描述

查看话题列表

$ rosnode list

在这里插入图片描述
发布话题消息

  • 打印海龟的位置信息
$ rostopic echo /turtle1/pose

在这里插入图片描述

  • 发布海龟运动消息
    • 用tab键补全
    • 一次发布之后执行运动一次
    • -r代表频率信息,10就是10Hz,每秒发布十次
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
	x: 1.0
	y: 0.0
	z: 0.0
angular:
	x: 0.0
	y: 0.0
	z: 1.0"

发布服务请求

  • 叫第二只海龟陪玩,会返回turtle2是服务返回的response
rosservice call /spawn "x: 5.0
y: 5.0
theta: 0.0
name: ‘turtle2'"

在这里插入图片描述

发布了27 篇原创文章 · 获赞 60 · 访问量 6579

猜你喜欢

转载自blog.csdn.net/qq_44455588/article/details/104588659