ROS之通信小白学习笔记-快速入门

列出当前所有的topic
rostopic list

显示某个topic的属性信息
rostopic info/topic_name

显示某个topic的内容
rostopic echo/topic_name

向某个topic发布内容
rostopic pub /topic_name

rosmsg:
列出系统上所有msg
rosmsg list
rosmsg show /msg_name


Service通信
 ROS中的同步通信方式
 Node间可以通过request-reply
 
          Request
  NodeA   -------> /Service --->NodeB
 (Client) <------  /Service --->(Server)
           Reply
    注:没有人调用就不会执行,有人调用才会执行,从而减少消耗计算机资源
    
                               Topic  VS  Service
              Topic                                           Service
通信方式     异步通信                                         同步通信
实现原理     TCP/IP                                           TCP/IP
通信模型     Publish-Subscribe                                Request-Reply
             Publish-Subscriber(多对多)                       Client-Server(多对一)
             接收者收到数据会回调                             远程过程调用(RPC)服务器端的服务(相当于这个进程调用另一个进程的函数)
应用场景     连续、高频的数据发布                             偶尔调用的功能/具体的任务
举例         激光雷达、里程计发布数据                         开关传感器、拍照、逆解计算

    
 srv                          类比话题中的msg
Service通信的数据格式
定义在*.srv

#定义srv例子

node         Request
  NodeA   -------> /pose --->NodeB
 (Client) <------  /pose --->(Server)
           Reply

文件路径:
my_pkg/srv/DetectHuaman.srv    路径
代码实现:
bool start_detect
---                
my_pkg/HumanPose[] pose_data        #回传一个数组HumanPose[]是一个.msg格式,不能嵌套srv文件

###注:中间的---是严格的文件格式,上面代表请求,下面代表响应,一问一答,其中响应中还有嵌套.msg文件,其内容如下
文件路径:
my_pkg/msg/HumanPose.msg
代码实现:
std_msgs/Header header
string uuid
int32 number_of_joints
my_pkg/JointPos[] joint_data

###下面的.msg还嵌套了下面的内容
文件路径:my_pkg/msg/JointPos.msg
代码实现;
string joint_name
geometry_msgs/Pose pose
float32 confidence

###写完记得修改package.xml(添加依赖)和修改CMakeList(添加文件),比如生成头文件的一些东东

rosservice
列出当前所有活跃的service
rosservice list

显示某个service的属性信息
rosservice info service_name

调用某个service
rosservice call service_name args

rossrv:
列出系统上所有的srv
rossrv list
显示某个srv内容
rossrv show srv_name

Parameter Server

roscore 启动时
Parameter server
rosout
master

Parameter Server
存储各种参数的字典
可用命令行,launch文件和node(API)读写

字典的意思就是说在参数服务器中,一个key对应yi个value
rosparam

列出当前所有参数
rosparam list

显示某个参数的值
rosparam get param_key

设置某个参数的值
rosparam set param_key param_value

保存参数到文件
rosparam dump file_name

从文件中读取参数
rosparam load file_name

删除参数参数
rosparam delete param_key

.yaml格式举例,类似字典
name:'dhy'
age:21
...

在launch文件中经常看到<param> <rosparam>标签
其中,<param>经常有一个name,一个value
rosparam 常用于类似命令行所列出的功能。一般是.yaml文件

 Action通信
类似Service,带有状态反馈的通信方式
通常用在长时间、可抢占的任务中

Action Interface

                  ROS Topics

Action ----->        goal                 Action
Client ----->        cancel               Server      
               
                     status               <-------
                     results              <-------
                     feedback             <-------


action
action通信的数据格式
定义在*.action文件中

举例
文件路径:action/DoDishes.action
#Define the goal
uint32 dishwasher_id
#Specify which dishwasher we want to use
---
#Define the result
uint32 total_dishes_cleaned
---
#Define a feedback message
float32 percent_complete

总结:action分三段,第一段是client的目标,第二段是sever返回的结果,是一次的,第三段是sever实时回传,这个回传是多次的

猜你喜欢

转载自blog.csdn.net/mr_dhy/article/details/81270275