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

来源:互联网 发布:螺栓连接计算软件 编辑:程序博客网 时间:2024/06/06 07:43

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 talkerrosrun beginner listener

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

原创粉丝点击