小白学习ROS(3)创建Publisher和Subscriber节点

创建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,运行结果如下图所示。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值