ROS机器人操作系统——订阅者Subscriber的编程实现(五)
ROS机器人操作系统
文章目录
- ROS机器人操作系统
- 前言
- 一、话题模型
- 二、实现功能
- 1.创建订阅者C++
- 2.Python代码
- 3.配置订阅者代码编译规则
- 4.编译并运行订阅者
- 总结
前言
与发布者相对应的是ROS系统里的订阅者,也是ROS里经常使用的知识。
一、话题模型
二、实现功能
1.创建订阅者C++
如何实现一个订阅者
• 初始化ROS节点;
• 订阅需要的话题;
• 循环等待话题消息,接收到
消息后进入回调函数;
• 在回调函数中完成消息处理。
/*** 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose*/#include <ros/ros.h>
#include "turtlesim/Pose.h"// 接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{// 将接收到的消息打印出来ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}int main(int argc, char **argv)
{// 初始化ROS节点ros::init(argc, argv, "pose_subscriber");// 创建节点句柄ros::NodeHandle n;// 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallbackros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);// 循环等待回调函数ros::spin();return 0;
}
2.Python代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Poseimport rospy
from turtlesim.msg import Posedef poseCallback(msg):rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)def pose_subscriber():# ROS节点初始化rospy.init_node('pose_subscriber', anonymous=True)# 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallbackrospy.Subscriber("/turtle1/pose", Pose, poseCallback)# 循环等待回调函数rospy.spin()if __name__ == '__main__':pose_subscriber()
3.配置订阅者代码编译规则
配置CMakeLists.txt中的编译规则
• 设置需要编译的代码和生成的可执行文件;
• 设置链接库;
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
4.编译并运行订阅者
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher
小海龟是没有动的,可以看的坐标也是固定的,然后我们运行上一讲的发布者代码
可以看的坐标发生了变换,这就是订阅者的功能。
总结
如何实现一个订阅者
• 初始化ROS节点;
• 订阅需要的话题;
• 循环等待话题消息,接收到
消息后进入回调函数;
• 在回调函数中完成消息处理。
ROS机器人操作系统——订阅者Subscriber的编程实现(五)相关推荐
- ROS入门-9.订阅者Subscriber的编程实现
还是通过海龟仿真器去发布数据,要实现一个订阅者来订阅海龟的位置信息等,publisher是海龟仿真器,subcriber即为这次我们要实现的程序 数据传输为从publisher传向subscriber ...
- ros实验操作——订阅者Subscriber的编程实现
目录 创建小海龟位置订阅者 订阅者实现代码 发布者代码实现 代码编译 每文一语 创建小海龟位置订阅者 在启动小海龟仿真之后,ROS会默认发布一个名为"/turtle1/Pose"的 ...
- 【RK3399Pro学习笔记】七、ROS订阅者Subscriber的编程实现
目录 如何实现一个订阅者 C++ 编写程序 配置CMakeLists.txt 编译并运行发布者 python 创建并编写脚本 运行 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro ...
- ROS机器人操作系统学习笔记(三)ROS通信架构
ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...
- ROS机器人操作系统底层原理及代码剖析
0 目的 本文介绍ROS机器人操作系统(Robot Operating System)的实现原理,从最底层分析ROS代码是如何实现的. 1 序列化 把通信的内容(也就是消息message)序列化是通信 ...
- ros机器人操作系统简介
机器人操作系统 (Robot Operating System, 或简称 ROS),它可以帮助提高机器人软件的开发效率. ROS 系统的官方定义如下: ROS是面向机器人的开源的元操作系统(met ...
- ROS机器人操作系统学习笔记(一)--基本概念
ROS机器人操作系统学习教程(一)–基本概念 1. 基本概念 1.1 ROS背景 机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便.功 ...
- Windows使用ROS机器人操作系统全面资料汇总
0 摘要: 本文以Win10系统中安装使用ROS1Melodic和ROS2Dashing为基础,并通过开源硬件设备Arduino与ROS的通信为示例,具体介绍机器人操作系统ROS1和ROS2的细节.部 ...
- ROS机器人操作系统暑期学校总结和感悟
https://discourse.ros.org/t/ros-summer-school-in-china-2019-july-27-august-hefei/9494 中国ROS暑期学校将迎来五周 ...
- ROS 机器人操作系统进阶实战
ROS(Robot Operating System) 是一个开源的机器人操作系统,目的是提供开发平台.工具及生态给开发人员,可以让开发人员快速开发.本课程通过精心设计的案例,分析技术要点.理解运行原 ...
最新文章
- 生活随笔:人的追求和差异
- kmeans图像分割
- 企业日常选择网站制作公司大多从这三方面着手
- 『码蛋』Android 周刊第1期
- IDEA修改module的名字
- .net:Code First 创建或更新数据库
- Tomcat访问日志详细配置
- JS大小比较(>、<、>=、<=)运算符
- 注册表清除桌面垃圾图标
- 离心泵CAE_2_ICEM剖分网格_2_叶轮流道
- Android报错:The processing instruction target matching [xX][mM][lL] is not allowed.
- 什么是深度卷积神经网络,卷积神经网络怎么学
- 回归模型1:优化的灰色模型matlab实现
- 大数据和云计算有什么关系?
- mockjs java_GitHub - mikove3y/mockj: 生成mock数据的利器,mockjs的java实现。同时内置随机 random 一个对象的功能...
- Docker镜像常用命令
- Angular 的 ngOnInit 和 Constructor 的区别
- Python基础知识:数据类型--数值型
- 【Java】继承、多态、接口
- C/C++内存申请和释放(一)