列出当前所有的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实时回传,这个回传是多次的