学习资料主要源自http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

$ roscd beginner_tutorials/

$ mkdir -p src

$ cd src

$ gedit talker.cpp

1. 编写发布器节点 talker

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

int main(int argc, char **argv)

{//初始化ROS,名称重映射(唯一),必须为base name,不含/

ros::init(argc, argv, "talker");//为进程的节点创建一个句柄,第一个创建的NodeHandle初始化节点

ros::NodeHandle n;//告诉主机要在chatter topic上发布一个std_msgs消息//主机会订阅所有chatter topic节点,参数表示发布队列的大小(先进先出)

ros::Publisher chatter_pub = n.advertise<:string>("chatter", 1000);

ros::Rate loop_rate(10); //自循环频率

int count = 0;while(ros::ok())

{

std_msgs::String msg;

std::stringstream ss;

ss<< "hello world" <

msg.data=ss.str();//输出,用来替代prinf/cout

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

chatter_pub.publish(msg);

ros::spinOnce();//休眠,来使发布频率为10Hz

loop_rate.sleep();++count;

}return 0;

}

实现功能:

(1) 初始化ROS系统

(2) 在chatter topic上发布std_msgs/String消息

(3) 以每秒10次频率发布消息

2. 编写订阅器节点

#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;//告诉master需要订阅chatter topic消息

ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

ros::spin();//自循环

return 0;

}

实现功能:

(1) 初始化ROS系统

(2) 订阅chatter topic消息

(3) 进入自循环,等待消息到达

(4) 消息到达,调用chatterCallback()函数

3. src/ /CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)

project(beginner_tutorials)

## Find catkin and any catkin packages

find_package(catkin REQUIRED COMPONENTS

roscpp

rospy

std_msgs

message_generation

)

## Declare ROS messages and services

add_message_files(

FILES

Num.msg

)

add_service_files(

FILES

AddTwoInts.srv

)

## Declare a catkin package

catkin_package(

CATKIN_DEPENDS message_runtime

)

## Build talker and listener

include_directories(include

${catkin_INCLUDE_DIRS}

)

add_executable(talker src/talker.cpp)

target_link_libraries(talker ${catkin_LIBRARIES})

add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)

target_link_libraries(listener ${catkin_LIBRARIES})

add_dependencies(listener beginner_tutorials_generate_messages_cpp)

$ rosrun rqt_graph rqt_graph 或直接rqt_graph

注:如果遇到Couldn't find executable named talker below */src/beginner_tutorials

很有可能是工作空间初始化的问题。

参考

http://wiki.ros.org/ROS/Tutorials

ros 发布信息频率_ROS:消息发布器和订阅器(c++)相关推荐

  1. ros 发布信息频率_ROS 消息发布器和订阅器Publisher, Subscriber

    1.编写发布器节点 节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点("talker"),它将不断的在 ROS 网络中广播消息.切换到之前创建的 b ...

  2. ros 发布信息频率_ROS入门笔记二基础

    1.创建工作空间 1.什么是工作空间 工作空间(workspace)是一个存放工作开发相关文件的文件夹 src:代码空间(Source Space) build:编译空间(Build Space) d ...

  3. ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)

    ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++) 文章目录 01 导读 02 功能包的创建 03 功能包的源代码编写 3.1 编写发布器节点(talker.cpp) 3.2 编写订阅 ...

  4. ros订阅话题python_ROS入门教程 (写一个简单的消息发布器和订阅器 (Python))

    Note: This tutorial assumes that you have completed the previous tutorials: 创建ROS消息和ROS服务. Descripti ...

  5. ROS-写一个简单的消息发布器与订阅器(Python)(roswiki初级教程rospy部分翻译以及程序注释)

    Topic通信机制---编写简单的Publisher & Subscriber http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSub ...

  6. 12.写一个简单的发布器与订阅器(C++)

    写一个简单的发布器与订阅器(C++)(rawmeat:http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)) 注意 ...

  7. ros 发布信息频率_RouterOS中wifi自动频率选择及发射功率设置

    1. 在routeros中,wifi使用的频率设置说明 DFS的全称是Dynamic Frequency Selection,即自动频率选择,只有在DFS Mode设置为None时,Frequency ...

  8. java订阅发布模式_Spring Boot ActiveMQ发布/订阅消息模式原理解析

    本文在<Spring Boot基于Active MQ实现整合JMS>的基础上,介绍如何使用ActiveMQ的发布/订阅消息模式.发布/订阅消息模式是消息发送者发送消息到主题(topic), ...

  9. ROS之msg文件定义以及自定义发布主题消息类型

    一.创建msg文件(相当于一个结构体) 在catkin_ws/src: mkdir msg catkin_ws/src/msg: touch xxx.msg chmod 777 xxxx.msg 编辑 ...

最新文章

  1. 自定义注解实现日志脱敏
  2. Ubuntu 下获得root权限
  3. 上传和优化Magento 2中的产品图像和视频
  4. python—多进程之进程的创建(一)
  5. navicat连接mysql闪退_Navicat连接MySql8.0的各种问题及解决方法
  6. 阿里巴巴创新研究计划 AIR2018 正式发布 邀全球学者共创未来
  7. MySQL的常见存储引擎介绍与参数设置调优(转载)
  8. SpringAOP+自定义注解实现日志功能
  9. ie6,ie7兼容性总结(转)
  10. cocos2d-x学习记录3——CCTouch触摸响应
  11. 学习笔记:关于科学方法在社会科学中的局限性
  12. Linux 内核C -- 第02课:驱动中的指定初始化
  13. 计算机的编译原理pdf,计算机编译原理DK.pdf
  14. 《期权、期货及其他衍生产品》读书笔记(第七章:互换)
  15. 基于VUE+H5PLUS 实现app交互蓝牙打印机得功能
  16. 英特尔DSA-加速DPDK Vhost
  17. 解决笔记本装linux后触摸板无法用的问题
  18. excel怎么设置自动计算_超全8套工程测量计算Excel自动算量表,输入参数即可得出精准结果...
  19. iOS App名称和内容国际化
  20. iofod - 为攻城师们打造的低代码平台

热门文章

  1. Source Insight 4.0 序列号 license文件
  2. C# FileStream类:文件读写
  3. java 私有全局变量_java中的全局变量
  4. 打印机 “错误-正在打印”
  5. Linux之——UltraISO写入引导扇区时弹出“找到多于1个分区”解决方法
  6. 云计算运维工程师前景怎么样?
  7. 双系统下Deepin的安装和卸载(Deepin20.2+Win10)
  8. 宝塔界面为什么无法访问_宝塔面板登陆不上?宝塔面板打不开解决办法
  9. 输入码(外码),国标码,区位码,机内码,字型码的概念与关系
  10. 【剑指Offer】个人学习笔记_15_二进制中1的个数