创建Publisher和Subscriber节点进行通讯
1.前言
在创建Publisher和Subscriber节点之前,先给介绍一个创建ROS包以及程序编写非常方便的一个ide,真的特别方便,尤其是对小白来说,那是相当的友好,它就是RoboWare Studio,大家可以去官网直接下载链接: http://www.roboware.me/#/home。今天主要是通过创建Publisher和Subscriber节点,来更进一步的了解ROS中节点之间通过话题的发布与订阅来通讯。
1.Publisher节点的建立
1.直接打开终端输入roboware-studio
打开RoboWare Studio;
2.点击新建工作区,或者打开一个已有的工作区。点击release,再进行build,
3.在工作区的src下添加ROS包命名为Publisher,根据自己的要求为ROS包添加依赖,一般添加roscpp, rospy, std_msgs。
4.回到工作区source资源,在终端输入source devel/setup.bash
然后输入catkin_make进行编译。
5.在Publisher包中添加src文件夹,并且新建talker.cpp文件。
新建的talker.cpp
文件。
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "sstream"
int main(int argc, char **argv)
{
//初始化节点 //第三个参数不能为空,最好和节点名相同.
ros::init(argc, argv, "talker");
//创建句柄
ros::NodeHandle n;
//创建一个Publisher,发布chatterl的tpoic消息类型std_msgs::String
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
//设置循环频率
ros::Rate loop_rate(10);
int count=0;
while (ros::ok())
{
//初始化String msg类型的消息
std_msgs::String msg;
std::stringstream ss;
ss << "ni hao!zhoumo" << count;
msg.data = ss.str();
//发布消息
ROS_INFO("%s",msg.data.c_str());
chatter_pub.publish(msg);
//循环等待回调函数
ros::spinOnce();
// 按照循环频率延时
loop_rate.sleep();
++count;
}
return 0;
}
6.节点的代码已经写好,C++在运行之前是需要先编译成可执行文件的,如过是python则不需要这一步。如过是采用RoboWare Studio直接编译就可以了,它直接帮助我们配置好了,直接编译一下就行了,如果不是,则需要对功能包中的CMakeLists.txt文件进行修改。详见古月居21讲链接: https://blog.csdn.net/qq_44284082/article/details/113895781.
2.Subscriber节点的建立
前面的建立过程跟Publisher一样,最后新建listern.cpp文件。
新建listern.cpp文件如下所示: listern.cpp
。
#include "ros/ros.h"
#include "std_msgs/String.h"
//接收到订阅的消息后,会进入消息回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
//将接收到的信息打印出来
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
//初始化节点 //第三个参数不能为空,最好和节点名相同.
ros::init(argc, argv, "listener");
//创建句柄
ros::NodeHandle n;
//创建一个Subscriber,订阅名为chatterl的的话题,注册回调函数chatterCallback
ros::Subscriber sub = n.subscribe("chatter", 1000,chatterCallback);
//循环等待回调函数
ros::spin();
return 0;
}
3.运行Publisher和Subscriber节点
1.打开一个终端输入roscore
打开节点管理中心ROS Master,这是节点能运行的前提。
2.启动Publisher,首先打开工作空间,在终端输入source devel/setup.bash
来source资源,然后运行节点rosrun publisher talker
,运行结果如下图所示。
3.启动Subscriber,首先打开工作空间,在终端输入source devel/setup.bash
来source资源,然后运行节点rosrun subscriber listerner
,运行结果如下图所示。