ROS笔记--主题发布节点和主题订阅节点

本文详细介绍如何在ROS环境中创建主题发布和订阅节点,包括工作空间的建立、功能包的创建、代码编写与编译过程,以及最终运行效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS笔记–主题发布节点和主题订阅节点

节点是连接ROS网络的可执行文件。我们将创建一个主题发布者节点,该节点将连续广播一条消息。

一、创建工作空间

  创建新文件夹,名字自定义,路径也根据自己设定。
 

mkdir mywork
创建好后,就需要将次路径添加到ROS_PACKAGE_PATH中。

查看目前ROS的工作空间
echo $ROS_PACKAGE_PATH
一般显示如下:
 /opt/ros/kinetic/share
下面将路径添加到~/.bashrc中
echo "export ROS_PACKAGE_PATH=~/mywork:${ROS_PACKAGE_PATH}" >> ~/.bashrc

再次查看ROS正在使用的空间,确保路径正确添加。

二、创建ROS功能包

  打开ROS工作目录:
  

cd ~/mywork

 在该目录下创建功能包:
 

roscreate-pkg beginner std_msgs roscpp

功能包文件夹下一般包括Makefile、manifest.xml、CMakeLists.txt、mainpage.dox等文件。
  std_msgs  包含常见等消息类型
  roscpp    cpp库
运行命令,查看功能包是否创建

rospack find beginner

三、编写代码

  1、主题发布节点

  在功能包中创建src/talker.cpp,并添加代码:
  

#include <ros/ros.h>
#include "std_msgs/String.h"
#include <iostream>
#include <sstream>

int main(int argc,char **argv)
{
    ros::init(argc,argv,"talker");   //ros系统初始化,通过命令对名字进行重映射,节点名字在一个运行的系统中必须是唯一的
    ros::NodeHandle n;//创建一个句柄,并自动初始化

    ros::Publisher pub = n.advertise<std_msgs::String>("chatter",1000); //将std_msgs::String类型的消息发布给话题chatter,参数1000是消息队列的长度
    //ros::Publisher pub1 = n.advertise<std_msgs::String>("mytest",1000); 

    ros::Rate rate(10);//指定自循环的频率  1/10
    int count = 0;
    //int mycount=0;
    while(ros::ok())  //当按下Ctrl+c命令时,返回false
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss<< "Hello ROS!           "<<count;
        msg.data =ss.str();

        ROS_INFO("%s",msg.data.c_str());
        pub.publish(msg);

        // ss<< "Hello my world!this is a test!"<<count;
        // msg.data =ss.str();
        // ROS_INFO("%s",msg.data.c_str());
        // pub1.publish(msg);

        ros::spinOnce();
        rate.sleep();
        ++count;
    }
    return 0;
}

2、主题订阅节点

  在功能包中创建src/listener.cpp,并添加代码:
  

#include <ros/ros.h>
#include "std_msgs/String.h"

void chatcallback(const std_msgs::String::ConstPtr& msg)//回调函数
{
    ROS_INFO("I heared :[%s]",msg->data.c_str());
}
int main(int argc,char **argv)
{
    ros::init(argc,argv,"listener");
    ros::NodeHandle nh;

    ros::Subscriber sub = nh.subscribe("chatter",1000,chatcallback);
   // sub = nh.subscribe("mytest",1000,chatcallback);
    ros::spin();
    return 0;
}

四、编译节点

  编辑CMakeLists.txt文件,在末尾处添加如下代码:
  

rosbuild_add_executable(talker src/talker.cpp)
rosbuild_add_executable(listener src/listener.cpp)

rosmake工具进行编译:

rosmake beginner

五、运行功能包

  在运行功能包前,请确认节点管理器已经打开。使用下面的命令运行:
 

roscore

 运行主题发布和主题订阅

rosrun beginner talker
rosrun beginner listener

运行效果截图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值