话题中的Publisher和Subscriber
先运行乌龟程序
用如下命令查看例程节点关系图
$ rqt_graph
1.创建Publisher
Publisher主要作用是针对指定话题发布特定数据类型消息。接下来使用代码实现一个节点,节点中创建一个Publisher并发布字符串“Hello World”,源码learning_communication/src/talker.cpp如下
(源码的分析可以从其他博主空间里查找)
#include <sstream>
#include"ros/ros.h"
#include"std_msgs/String.h"
int main(int argc, char **argv)
{ros::init(argc, argv, "Talker");ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);ros::Rate loop_rate(10);int count = 0;while (ros::ok()){std_msgs::String msg;std::stringstream ss;ss<< "hello world"<< count;msg.data = ss.str();ROS_INFO("%s", msg.data.c_str());chatter_pub.publish(msg);ros::spinOnce();loop_rate.sleep();++count;}return 0;
}
- 建立Subscriber
创建一个Subscriber以订阅Publisher节点发布的“Hello World”字符串,实现源码learning_communication/src/listener.cpp如下
(源码的分析可以从其他博主空间里查找)
#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;ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);ros::spin();return 0;
}
- 编译代码包
打开CMakelLists.txt文件去掉注释,进行如下配置
include_directories(
include${catkin_INCLUDE_DIRS}
)
add_executable(Talker src/Talker.cpp)
target_link_libraries(Talker ${catkin_LIBRARIES} )
add_dependencies(Talker ${PROJECT_NAME}_generate_messages_cpp)
add_executable(Listener src/Listener.cpp)
target_link_libraries(Listener ${catkin_LIBRARIES} )
add_dependencies(Listener ${PROJECT_NAME}_generate_messages_cpp)
然后进行编译,编译会生成两个Talker、Listener,放在工作空间的~/catkin_ws/devel/lib/
修改完成后,进行编译
$ cd ~/catkin_ws
$ catkin_make
3.出现的问题
编译时会出现以下问题(笔者 出现的问题,但解决了)
出现这些问题时也找了一些办法但是都未解决,后来发现是同一工作空间目录下的文件夹中的文件有同名的“talker、listener”文件,因此去到learning_communication/src目录下,将talker与listener文件重命名,我就改成了“Talker、Listener”,但是也要记住要去,.cpp文件中把大小写改过来,同时CMakeLists.txt文件中也要改过来。
然后就行了。当然还可能遇到其他问题,这只是我遇到的问题解决方法。
- 运行Publisher与Subscriber
在运行前,先要进行环境变量的设置
$ cd ~/catkin_ws
$ source ./devel/setup.bash
环境变量设置成功后
先启动roscore
$ roscore
再启动Publisher
$ rosrun learning_communication Talker
然后启动Subscriber
$ rosrun learning_communication Listener
5.自定义话题服务消息
在learning_communication/msg目录下建立Person.msg文件
源码如下
string name
uint8 sex
uint8 ageuint8 unknown = 0
uint8 male = 1
uint8 female = 2
此时打开learning_communication的package.xml确保文件中设置了以下编译与运行依赖
(此处或许有两种运行依赖)我的如下:
<exec_depend>std_msgs</exec_depend>
<exec_depend>message_runtime</exec_depend>
很多的博文和教材里显示的第二句代码是
<run_depend>message_runtime</run_depend>
但是我运行时产生了报错,让我把exec代替了run 所以我的是这样。
完成添加后,再打开CMakelLists.txt文件,在find_package中添加消息生成依赖功能包message——generation。
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)
catkin依赖设置如下:
catkin_package(
INCLUDE_DIRS include
LIBRARIES learning_communication
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
DEPENDS system_lib
)
最后设置编译的.msg文件
add_service_files(
FILES
AddTwoInts.srv
)
generate_messages(
DEPENDENCIES
std_msgs
)
完成以上配置后,回到工作空间路径下用catkin_make进行编译,再用如下命令看Person消息
$ rosmsg show Person
话题中的Publisher和Subscriber相关推荐
- ROS1学习笔记:话题中的Publisher与Subscriber(ubuntu20.04)
参考B站古月居ROS入门21讲: 发布者Publisher的编程实现 订阅者Subscriber的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一.乌龟例程中 ...
- ROS的学习(二十)rosserial中的Publisher和Subscriber中的编程步骤
1.在一个话题上发布消息. 可以使用ros::Publisher类创建一个句柄来在一个话题上发布消息,应该首先创建一个publisher将要使用的消息,然后在setup函数中调用advertise.整 ...
- 【ROS入门学习05|自定义话题消息,并且编程实现publisher和subscriber】
这里是学习ROS第一次涉及到代码的部分.主要根据古月居视频教程整理出来的干货.本人是干货爱好者. 文章目录 前言 一.话题模型 二.自定义话题消息 1.定义msg文件 2.在功能包(learning_ ...
- ROS教程中Publisher和Subscriber (Python)的说明
Publisher和Subscriber[Python]的说明 1.编写发布节点 2.编写订阅节点 3.编译现在的节点 1.编写发布节点 $ roscd beginner_tutorials #切换到 ...
- ROS学习----Publisher与Subscriber
1.Publisher(发布者)与subscriber(订阅者)关系. Publisher的主要作用是对于指定话题发布特定数据类型的消息. 下面是利用代码实现一个节点,节点创建一个Publisher并 ...
- 小白学习ROS(3)创建Publisher和Subscriber节点
创建Publisher和Subscriber节点进行通讯 1.前言 在创建Publisher和Subscriber节点之前,先给介绍一个创建ROS包以及程序编写非常方便的一个ide,真的特别方便,尤其 ...
- (三)工作空间与功能包、Publisher、Subscriber
目录 一.创建工作空间与功能包 1.工作空间 2.创建功能包 3.编译新的功能包 4. 环境变量 5.功能包中的两个重要文件 二.发布者Publisher的编程实现 (一)C++版本 (二)Pytho ...
- ROS: Publisher and Subscriber
通过上一节编写ROS的第一个程序hello_world,我们对ROS的整个编程开发过程有了基本的了解,现在我们就来编写真正意义上的使用ROS进行节点间通信的程序.由于之前已经建好了catkin_ws这 ...
- Reactor的Publisher与Subscriber
Project Reactor介绍 在计算机中,响应式变成或者反应式编程(Reactive Programming)是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地变大静态或动态 ...
最新文章
- 个人管理:简单,我微博中的一句话,总有你喜欢的
- 一个DirectX使用的例子
- C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)
- opencv之retina滤波器---Retina_create
- 中控考勤软件sqlserver数据库建立办法
- Solidworks CAM入门教程,简单生成雕刻机刀路,经验分享
- ETL开发工具Kettle下载安装环境搭建及使用教程
- matlab实现单峰物体复原--光栅投影-多频外差
- 南师大GIS考研数据库2019年第五题
- 基于GIS的二次开发
- loss下降auc下降_从基本原理到梯度下降算法:零基础也能看懂的神经网络教程...
- 高次osu(重邮第13届ACM程序设计大赛-网络赛)
- office2016专业增强版语言包 VOL
- Linux mint 双硬盘,记一次装机——笔记本UEFI双硬盘(SSD+机械)双系统(Win10+Linux Mint)...
- 关于学程序需不需要学习英语的忠告
- 《云计算核心技术剖析》迷你书连载三 – 云计算的商业模式
- C#程序崩溃捕获与自动重启方法(简洁有效)
- 中序表达式转其他顺序 - 表达式加括号法
- 02 推荐算法-(01) Model-Based 协同过滤算法
- 关于正定矩阵和非正定矩阵
热门文章
- 自然语言处理中的Character Embedding技术
- xcode打包mac桌面程序
- 解决photoshop cs5每次打开都输入序列号的问题 (至少我好用 win7 64位)
- wangyi3-数据挖掘研究员
- Ubuntu还需要做什么才能替代Windows
- 【高中数学】频率分布表和频率分布直方图
- 单片机 STM32 HAL IO扩展 PCA9555
- 用duilib制作仿QQ2013动态背景登录器
- 【CXY】JAVA应用 之 快捷工具托盘
- 极路由b70路由器虚拟服务器,极路由B70刷固件详细步骤说明(整合其它坛友经验)-少走弯路,造福坛友...