目录
1.创建发布者和发布话题
打开vscode——在左侧工作空间里找到ssr_pkg这个包——在src文件夹里找到chao_node.cpp——在之前的C++实现“Hello World”的代码的基础上———在节点初始化之后,定义一个NodeHandle对象,名字就命名为nh
ros::NodeHandle nh;
定义一个ROS的Publisher对象(可以简单理解为一个手机) 形式:nh.advertise(“话题名称”,缓存长度);(注意!:名称不能为中文)
ros::Publisher pub = nh.advertise<std_msgs::String>("话题名称",缓存长度);
这样就完成了一个话题的发布和一个发布者的创建!(可以简单理解为超声波节点让管家把有这个话题名称群聊的手机拿过来,它要开始刷屏了!这个pub就是管家拿来的手机)
2.发布消息
include字符串头文件
#include <std_msgs/String.h>
在循环里面写
printf("我要开始刷屏了!\n");
然后创建生成一个消息包
std_msgs::String msg;
然后给消息包赋值
msg.data="消息内容";
最后发布者发布消息
pub.publish(msg);
按下Crtl+s保存 这就完成了发布消息的操作!!!
3.编译节点
因为CMake里的Build内容前面已经复制粘贴过了,这里就不用再进行处理了
直接Crtl+Shift+B编译
4.运行新节点
打开终端——启动ros核心——分屏——运行节点——会发现群聊不能写中文 需要改一下——重启节点——OK!
①用命令行工具rostopic查看消息发送情况
在新终端输入rostopic list——会显示活跃的话题——输入rostopic echo/话题名称(查看话题具体内容)——在新终端中输入echo -e +复制上面的:后面的奇怪代码——就会显示消息包的内容——在新终端输入rostopic hz /话题名称———就会显示执行频率
②如何控制消息发送频率?
在循环前面先生成一个对象
ros::Rate loop_rate(10)
(括号中就是一秒执行循环的次数)
在循环中调用
loop_rate.sleep();
(这个函数会在循环内做一个短时间的阻塞,以便让循环的执行频率能和刚才给的参数对应上)
注意⚠️
1.要学会确定话题名称类型和消息类型
这里我们以文字消息为例,在std_msgs中观察有没有对应的消息类型,找到了string(字符串),就是我们要的消息类型
2.NodeHandle nd这个对象是节点和ROS通讯的关键,可以把NodeHandle理解为一位管家,ROS就是由这位管家打理的一所豪宅
3.对于定义Publisher对象时,初学阶段的话先不用管具体的原因,知道形式怎么写就行
4.缓存长度:新的消息来的时候,老的消息还没处理完,就会排队缓存,如果缓存位置不够了,最先到达的消息包就会被抛弃掉,so缓存长度可以看作排队的位置个数(目前阶段,一般情况下只要设置一个大于零的数就行,一般设10)
5.运行结果展示
6.如何复制节点node
选中节点文件——crtl c ——crtl v——在代码中修改节点名称,话题名称,以及消息内容——打开CMakeList文件——找到节点编译规则——复制修改 OK!