ros学习记录3 通信架构

3. 通信架构

3.1 master 和 node

  • master

    每个node启动时都要向master注册

    管理node之间的通信

  • roscore

    启动roscore:

    roscore

    master: 节点管理器

    rosout:日志输出

    parameter server: 参数服务器

  • node

    ros的进程

    pkg里的可执行文件运行的实例

  • rosrun

    启动一个node

    rosrun [pkg_name] [node_name]

  • rosnode

    列出当前运行的node信息:

    rosnode list

    显示某个node的详细信息:

    rosnode info [node_name]

    结束某个node

    rosnode kill [node_name]

  • roslaunch

    启动master和多个node

    roslaunch [pkg_name] [file_name.launch]

    自动启动master ,launch文件规定各个节点的启动规则

  • launch 文件

    在这里插入图片描述
    launch文件照着模板改就行了。

3.2 通信方式

  • topic

  • Service

  • Parameter Service

  • Action

3.2.1 Topic

节点间通过node通信,一个发,一个收

是ros中的异步通信方式,node间通过publish-subscribe机制通信

在这里插入图片描述
异步通信:发送之后不用返回信息,没有阻塞现象

多个node可以往同一个/topic发消息,多个node也可以订阅同一个/topic
在这里插入图片描述

3.2.2 Messasge

  • topic内容的数据格式(类,结构体),是一种格式规范,每一条消息的数据格式

  • Message相当于类 /topic里面具体publish的消息就是对象

  • 会被用来生成不同语言的源代码。

  • 定义在pkg/msg/*.msg文件中

  • msg文件实际上就是每行声明一个数据类型和变量名,可以使用的数据类型如下:

    基本msg包括:

    bool,int8,int16,int32,int64,uint

    float32,float64,string

    time,duration,header

    可变长数组:array[] (相当于vector)

    固定长度数组array[C]

  • 具体message例子
    在这里插入图片描述

  • 在ROS中有一个特殊的数据类型: Header,它含有时间戳和坐标系信息。在msg文件
    的第一行经常可以看到Header header的声明。 下面是一个msg文件的样例,它使用了Header, string,和其他另外两个消息类型。

  • Header header
    string child_frame_id
    geometry_msgs/PoseWithCovariance pose
    geometry_msgs/TwistWithCovariance twist
    
  • 有时候消息是这样的:

    • topic_demo/gps
    • 应该是package_name/msg_name

3.2.3 相关命令1

在这里插入图片描述

查看/topic间的关系图:rqt_graph

3.2.4 Service

topcic是publish和subscribe的单向模式,有时候可能满足不了我们的要求

是ros中的同步通信方式,node间通过request-reply方式通信

在这里插入图片描述
同步:nodeA request请求后,会一直等待结果,可能会发生阻塞.
在这里插入图片描述
topic:接收信息后,会调用Callback函数对数据进行处理

3.2.5 srv

srv定义Service通信的数据格式,定义在*.srv文件中

相当于topic的message
在这里插入图片描述

bool start_detect              # request的格式
---
my_pkg/HumanPose[] pose_data	# reply的格式
								# srv只能嵌套msg,不能嵌套srv

3.2.6 相关命令2在这里插入图片描述

3.2.7 自定义格式需要额外添加的

  • 要确保msg文件被转换成为C++, Python和其他语言的源代码,就必须确保package.xml包含以下两条语句。

    • <build_depend>message_generation</build_depend>
    • <run_depend>message_runtime</run_depend> [run->exec]
    • <package> 不要有format=2.0
  • 在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。
    在这里插入图片描述

3.2.8 Parameter Server

在这里插入图片描述

  • 用命令行读写参数服务器
    在这里插入图片描述

  • launch文件读写参数服务器
    在这里插入图片描述

  • node方式读写

    后面roscpp,rospy再学

3.2.9 Action

类似Service,带有状态反馈的通信方式

通常用在长时间、可抢占的任务中
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33993729/article/details/106723428
今日推荐