【ROS1-Noetic】学习笔记03-发布和订阅

一、Topic和Message

1.两个节点通过话题的名称进行建立通讯连接

2.话题中通讯的数据叫做Message

二、Publisher和Subscriber

(一)Publisher

1.生成ros句柄

ros::NodeHandle nh;

2.创建一个发布者pub并确定消息类型和话题名

ros::Publisher pub = nh.advertise<消息类型>("话题名",队列长度)
//话题名只能是字母、数字、下划线,不能有空格
eg.ros::Publisher pub = nh.advertise<std_msgs::String>("topicname",10); 

 注意消息类型要在头文件声明,比如

#include <std_msgs/String.h>

3.声明一个消息包msg

<消息类型> msg; 
eg.std_msgs::String msg; 

4.将要发布的消息赋值

msg.data = "要发送的消息"; 
//一般为data

5.发布

pub.publish(msg);

 发布者把消息msg发布到话题中

(二)Subscriber

1.生成ros句柄nh

2.建立publisher sub(名字可以自定义

ros::Subscriber sub = nh.subscribe<消息类型>("话题名", 缓存区长度 ,话题的回调函数);

eg. ros::Subscriber sub = nh.subscribe<消息类型>("topicname", 10 ,chao_callback);

注意消息类型要在头文件声明

3.在主函数前写一个回调函数(每接收到一次消息包就调用一次)

void 回调函数名(消息类型 消息名称)
{
    
}
eg.
void chao_callback(std_msgs::String msg)
{
    printf(msg.data.c_str());
}

4.在主函数的while循环中加上ros::spinOnce();

ros::spinOnce();

这样程序在while循环中,执行到这里的时候就会检查一下有没有消息包,这样接收到的话才会去调用回调函数

三、其他工具

(一)rostopic

1.rostopic list

查看当前活跃着的话题

2.rostopic echo /话题名

查看当前正在运行的该话题发布的消息

3. echo -e 中文字符乱码(Unicode编码)

转换中文字符的Unicode编码

4.rostopic hz /话题名称

查看当前话题发送的频率

(二)控制循环频率的指令

ros::Rate <name>(频率);
eg.ros::Rate loop_rate(10);    //一秒执行十次

while()
{
    loop_rate.sleep();        //使循环休眠到符合我们要求的频率
}

可以控制消息发送的频率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值