学习资料主要源自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 <sstream>
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<std_msgs::String>("chatter", );
ros::Rate loop_rate(); // 自循环频率
int count = ;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
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 ;
}

实现功能:

(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", , chatterCallback);
ros::spin(); // 自循环
return ;
}

实现功能:

(1) 初始化ROS系统

(2) 订阅chatter topic消息

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

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

3. src/<package_name> /CMakeLists.txt

cmake_minimum_required(VERSION 2.8.)
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

转载请注明http://www.cnblogs.com/lizhongpingchn/p/5543013.html

ROS:消息发布器和订阅器(c++)的更多相关文章

  1. SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  2. ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)

    一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...

  3. ROS 消息发布器和订阅器Publisher, Subscriber

    博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...

  4. 用C++编写发布器和订阅器节点

    1.转移到之前教程在catkin工作空间所创建的package路径下: $ roscd package_name/ 例子:$ roscd practice/2.在package路径下创建src目录: ...

  5. ROS手动编写消息发布器和订阅器topic demo(C++)

    1.首先创建 package cd ~/catkin_ws/src catkin_create_pkg topic_demo roscpp rospy std_msgs 2. 编写 msg 文件 cd ...

  6. ROS教程2 编写简单的消息发布器和订阅器 (C++ catkin)

    创建工作环境 创建文件夹,创建包 mkdir -p ~/catkin_arduino_ros/src catkin_create_pkg test1_pub_sub std_msgs rospy ro ...

  7. [转]RoboWare Studio的使用和发布器/订阅器的编写与测试

    原文地址:https://blog.csdn.net/han_l/article/details/77772352,转载主要方便随时查阅,如有版权要求,请及时联系. 开始ROS学习之前,先按照官网教程 ...

  8. 6.Ray-消息订阅器编写

    消息订阅器: Ray是基于Event Sourcing设计的ES/Actor框架,消息发布后需要订阅处理,订阅器主要有以下两类: CoreHandler消息订阅器=RabbitSub+SubHandl ...

  9. Ros学习——Python发布器publisher和订阅器subscriber

    1.编写发布器 初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息 以每秒 10 次的频率在 chatter 上发布消息 在 ...

随机推荐

  1. npm start时报错 npm ERR!Windows_NT 6.1.7601

    练习webpack 时 输入 npm start就报这样的错.百度了一圈,都没有找到答案.于是,我开始看错误信息......................................../手动黑 ...

  2. 面向对象之ajax

    1.Ajax发送请求的几个步骤 1. 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest();//IE6 使用var xhr= new ActiveXO ...

  3. CentOS6.5下samba服务

    为减少错误已提前关掉了SELinux,防火墙. 安装rpm包: samba-3.6.9-164.el6.x86_64.rpm 启动检测:samba服务可以正常启动!(证明RPM安装正常) 配置文件位置 ...

  4. CentOS+uwsgi+django+nginx 环境部署及分析

    写在部署前 在线上部署django项目时,比较成熟的方案是:nginx + uWSGI + Django. nginx和Django 都比较熟悉了,uWSGI是什么呢?WSGI是一个协议,python ...

  5. java的应用,SVN客户端的安装教程

    1.先注册一个百度云账号,然后打开https://console.bce.baidu.com 这个网站,按照下面的图形点击 !!!!请注意这是要收钱的,但能学习到那用微信打开你的网站也是值得的. 2. ...

  6. 题目1004:Median(查找中位数)

    问题来源 http://ac.jobdu.com/problem.php?pid=1004 问题描述 给你两个非降序序列,让你求中位数.中位数为第(n+1)/2个数(从0开始计算). 问题分析 这个问 ...

  7. C#-WebForm-★ASP.NET中的母版页★

    何为母版页,顾名思义母版就是模版,就像在PPT里面的板式或主题一样,大框架已经有了,我们的任务就是向里面添加具体的内容.这样我们制作的所有幻灯片的外观大体都是一样的. 在ASP.NET中母版页有两种作 ...

  8. IntelliJ IDEA 2018.3(Ultimate Edition)激活方法

    本因博主Windos10系统上IDEA 2017会出现自带输入法候选框不跟随光标的问题,故更新了IntelliJ IDEA 2018,当时官方发布虽然还是Beta版本,但是迫于输入中文累死眼睛的窘态下 ...

  9. 可以修改类不用重启Tomcat加载整个项目

    修改类不重启Tomcat(不用手动重启) 修改tomcat  conf目录下的server.xml <Context path="/struts2" docBase=&quo ...

  10. docker 磁盘清理 相关

    用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响. 本文先对 Docker 的空间分析与清理进行说明,然后对 ...