ROS:消息发布器和订阅器(c++)
学习资料主要源自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++)的更多相关文章
- SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)
一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...
- ROS 消息发布器和订阅器Publisher, Subscriber
博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...
- 用C++编写发布器和订阅器节点
1.转移到之前教程在catkin工作空间所创建的package路径下: $ roscd package_name/ 例子:$ roscd practice/2.在package路径下创建src目录: ...
- ROS手动编写消息发布器和订阅器topic demo(C++)
1.首先创建 package cd ~/catkin_ws/src catkin_create_pkg topic_demo roscpp rospy std_msgs 2. 编写 msg 文件 cd ...
- ROS教程2 编写简单的消息发布器和订阅器 (C++ catkin)
创建工作环境 创建文件夹,创建包 mkdir -p ~/catkin_arduino_ros/src catkin_create_pkg test1_pub_sub std_msgs rospy ro ...
- [转]RoboWare Studio的使用和发布器/订阅器的编写与测试
原文地址:https://blog.csdn.net/han_l/article/details/77772352,转载主要方便随时查阅,如有版权要求,请及时联系. 开始ROS学习之前,先按照官网教程 ...
- 6.Ray-消息订阅器编写
消息订阅器: Ray是基于Event Sourcing设计的ES/Actor框架,消息发布后需要订阅处理,订阅器主要有以下两类: CoreHandler消息订阅器=RabbitSub+SubHandl ...
- Ros学习——Python发布器publisher和订阅器subscriber
1.编写发布器 初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息 以每秒 10 次的频率在 chatter 上发布消息 在 ...
随机推荐
- 解决:sql server无法在C盘下创建database/操作系统错误5(拒绝访问)
问题: ——无法在C盘的任何位置创建数据库文件 ——在非系统盘的F盘可以创建数据库文件 解决方法1:禁用“以管理员批准模式运行所有管理员" 解决方法2:打开C盘对Users用户的完全控制权限 ...
- WEB H5 JS QRCode二维码快速自动生成
万能的GITHUB: https://github.com/davidshimjs/qrcodejs HTML: <div class="col-xs-10 col-xs-offset ...
- Linux安装yum的痛苦路程(失败,慎入)
1,在网上下载了一个yum 的 rpm文件(yum-3.2.29-81.el6.centos.noarch.rpm),我在 http://www.rpmfind.net/linux/rpm2html/ ...
- 记一次在CentOS系统搭建python3环境
首先,查看linux系统类型和版本:参考:查看linux系统类型和版本 默认Centos7中是有python安装的,但是是2.7版本,实际上这几个文件之间是有依赖关系的.在ls 后面加个 -al参数, ...
- iphone 自学常用网址
https://www.gitbook.com/book/numbbbbb/-the-swift-programming-language-/details https://github.com/ip ...
- multiprocess(上)
仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的 ...
- python 之 比较哪个数据大小
#定义一个字典info={}#定义比较的人数n=int(input("请输入你要比较的人数"))#循环while(n): #输入a,b 两个数据 ,分别代表学号 和分数 # 把输入 ...
- P1273 有线电视网(树形dp)
P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. ...
- P4842 城市旅行
题目链接 题意分析 首先存在树上的删边连边操作 所以我们使用\(LCT\)维护 然后考虑怎么维护答案 可以发现 对于一条链 我们编号为\(1,2,3,...,n\) 那么期望就是 \[\frac{a_ ...
- 【3】JMicro微服务-服务超时,重试,重试间隔
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 接下来的内容都基于[2]JMicro微服务-Hello World做Demo 微服务中,超时和重试是一个最基本问题下面Dem ...