ROS学习之发布消息——Publisher_代码分析

//一个非常详细的版本:
//本文件名字为: publisher.cpp

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

//使用命名空间,省的每次都需要ros::
using namespace ros;
//这里使用cout进行打印输出
using namespace std;

int main(int argc, char** argv){
    //使用句柄之前必须初始化节点 //第三个参数不能为空,最好和节点名相同,我试过,和节点名不同也没事
    init(argc, argv, "publisher_Node");    
    NodeHandle n;

    //广播的消息类型为:std_msgs::String,并把消息放入话题“topic_m” 中可以试着使用rostopic list打印出该话题 
    //不同软件包下的话题可以同名,但是在ros只允许同时运行一个,所以这里最好是独一无二的消息名称
    Publisher pub = n.advertise<std_msgs::String>("topic_m",1000);

    //发送消息的频率为2Hz, 1秒发2个,周期为500ms
    Rate loop_rate(2);
    while(ok()){
         //定义一个msg,往msg中装入需要广播的消息
         std_msgs::String msg;

         //打印输出hello
	 cout<<"print from cout: Hello wanzew..."<<endl;

         //将需要广播的字符串装入msg中
	 msg.data = "Hello wanzew!";

         //使用ROS_INFO打印提醒消息
	 ROS_INFO("%s",msg.data.c_str());
        
         //把std_msgs::String类型的消息msg
	 pub.publish(msg);

         //发布消息时可以不写spinOnce(),但订阅某个消息时必须要写spin()函数
	 //spinOnce();
         //靠sleep()函数保证连续两个消息之间的时间恰好为一个周期
	 loop_rate.sleep();
    }
    return 0;
}
//一个更加简洁的版本
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <iostream> 

using namespace ros;
using namespace std;

int main(int argc, char** argv){
    init(argc, argv, "publisher_Node"); 
    NodeHandle n;
    Publisher pub = n.advertise<std_msgs::String>("topic_m",1000);
    Rate loop_rate(2);

    while(ok()){
     std_msgs::String msg;
	 msg.data = "Hello wanzew!";
	 pub.publish(msg);
	 loop_rate.sleep();
     cout<<"print from cout: Hello wanzew..."<<endl;
    }
    return 0;
}

对应的 CMakeList.txt 文件内容如下:

cmake_minimum_required(VERSION 2.8.3)

project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

catkin_package(
# 下面注释部分可打开-->
# INCLUDE_DIRS include
# LIBRARIES my_package
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
)

include_directories(
#  include
  ${catkin_INCLUDE_DIRS}
)

# publisher_Node在ros中是独一无二的,不能和其它节点名字重复
add_executable(publisher_Node src/publisher.cpp)
target_link_libraries(publisher_Node ${catkin_LIBRARIES})
下篇: ROS学习之订阅消息——Subscriber_代码分析


  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值