ROS:订阅者Subscriber的编程实现(C++)

目录

  • 一、话题模型
  • 二、创建功能包
  • 三、创建Subscriber代码
  • 四、编译代码
  • 五、运行

一、话题模型

在这里插入图片描述
图中,我们使用ROS Master管理节点。
有两个主要节点:
Publisher,名为Turtle Velocity(即海龟的速度)
Subscriber,即海龟仿真器节点 /turtlesim
Publisher(Turtle Velocity),发布Message(即海龟的速度信息,以geometry_msgs::Twist的数据结构,包括线速度和角速度),通过Topic(/turtle1/cmd_vel)总线管道,将数据传输给Subscriber。Subscriber订阅得到的速度信息,来控制海龟发生运动。

“/turtle1/cmd_vel”这个topic是海归仿真器节点/turtlesim下自带的topic,可直接拿来用。

二、创建功能包

在ROS:发布者Publisher的编程实现(C++)中已经创建功能包

三、创建Subscriber代码

步骤:
初始化ROS节点
订阅需要的话题
循环等待话题消息,接收到消息后进入回调函数
在回调函数中完成消息处理

我们需要在src里创建C++的代码文件以输入代码,文件名称为:pose_subscriber.cpp

/**
 * 该例程将订阅/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,注册回调函数poseCallback
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);

    // 循环等待回调函数
    ros::spin();

    return 0;
}

四、编译代码

配置CMakeLists.txt中的编译规则:

设置需要编译的代码和生成的可执行文件
设置链接库

将下列代码拷贝至CMakeLists.txt中:

add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})

在这里插入图片描述
回到工作空间目录,执行编译.

cd ~/catkin_ws
catkin_make

五、运行

roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber

在这里插入图片描述

这时海龟的位置就会一直被pose_subscriber监听,现在因为海龟没动,所以x、y的坐标值是不会变的。
我们让海龟动起来,再建立一个之前用过的键盘控制节点:

rosrun turtlesim turtle_teleop_key

控制它移动,坐标就发生实时变化啦
在这里插入图片描述
参考视屏:古月居ROS入门21讲
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/26281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装kafka可视化管理工具 - Kafka Manager

说明&#xff1a;此处是在前面使用Docker安装kafka的基础之上&#xff0c;再来使用Docker安装kafka-manager 第一步&#xff1a;使用下述命令从Docker Hub查找镜像&#xff0c;此处我们要选择的是sheepkiller所构建的kafka-manager镜像 docker search kafka-manager 第二步&a…

aigc分享

AIGC技术分享 AIGC概述 AIGC的概念、应用场景和发展历程https://36kr.com/p/2135547607286144 ppt https://36kr.com/p/2243237713604482 机器学习基础 机器学习的基本概念、分类和常用算法&#xff0c;如线性回归、决策树、支持向量机、神经网络等。 深度学习基础 深度学…

设计模式之~组合模式

组合模式&#xff1a; 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 结构图&#xff1a; 实例&#xff1a; 透明方式&#xff1a; leaf中也有add和remove叫做透明方式&#xff0c;在component中声明所有用来管…

煤矿井下定位设备,实现特殊环境下人员安全管理

煤矿、金属矿山等地下作业场所的安全管理工作要求高、难度大&#xff0c;矿用人员定位系统通过实时定位等功能&#xff0c;可以帮助企业随时掌握作业人员的位置安全&#xff0c;提高生产和安全管理效率&#xff0c;并可在紧急情况时迅速采取措施&#xff0c;减少事故损失&#…

基于OA的采购系统和专业的招标采购管理系统区别

当前采购信息化百家争鸣&#xff0c;既有初级版的审批和记录电子化&#xff0c;也有中级版的业务全流程电子化&#xff0c;还有升级版的数智化创新形式&#xff08;如电商平台、智能评标、供应商风险评估、专家行为画像、大数据统计分析等&#xff09;。 近年来&#xff0c;招标…

EBU6304 Software Engineering 知识点总结_4 analysis, design, implementation, testing

analysis 仅仅从用户的需求来看得到的消息不全面&#xff0c;还需要分析。用户可能认为你明白了&#xff0c;或者他考虑不全面&#xff0c;觉得一些地方是不需要的。 因此我们需要分析来 Refining requirements。 gather requirements-analyse in real world context-develo…

Apache网页安全与安全优化--网页缓存、隐藏版本信息、Apache 防盗链

目录 --------网页缓存-------- 1.检查是否安装 mod_expires 模块 2.如果没有安装mod_expires 模块&#xff0c;重新编译安装 Apache 添加 mod_expires模块 3.配置 mod_expires 模块启用 4.检查安装情况&#xff0c;启动服务 5.测试缓存是否生效 --------隐藏版本信息--…

Nginx+Tomcat(多实例)实现动静分离和负载均衡四层、七层(总有些惊奇的际遇,比方说当我遇见你)

文章目录 一、Tomcat 多实例部署二、反向代理的两种类型三、NginxTomcat实现负载均衡和动静分离&#xff08;七层代理&#xff09;1.动静分离和负载均衡原理2.实现方法3.部署实例&#xff08;1&#xff09;部署Nginx负载均衡服务器&#xff08;2&#xff09;配置Tomcat多实例服…

web的基本漏洞--弱口令漏洞

目录 一、弱口令漏洞介绍 1.弱口令漏洞的原理 2.漏洞识别 3.攻击方式 4.漏洞的危害 5.漏洞防御 一、弱口令漏洞介绍 弱口令漏洞是指系统登录口令的设置强度不高&#xff0c;容易被攻击者猜到或破解。造成弱口令漏洞的主要原因是系统的运维人员、管理人员安全意识不足。 弱…

Java领域的序列化与反序列化,Java的对象如何传输,常用序列化技术

文章目录 一、引出问题&#xff1a;Java原生的序列化1、基于Socket传输对象案例2、什么是序列化3、Java 原生序列化4、serialVersionUID 的作用5、transient 关键字绕开 transient 机制的办法writeObject 和 readObject 原理 6、Java 序列化的一些简单总结 二、分布式架构下常见…

python基础知识(八):字典

目录 1. 字典及其创建2. 字典元素的获取3. 字典元素的删除与清空4. 字典元素的增加5. 字典元素的修改6. 字典的键、值和键值对的获取7. 字典元素的遍历8. 字典的特点9. 字典生成式 1. 字典及其创建 在Python中&#xff0c;字典是一系列键—值对。每个键都与一个值相关联&#…

0301依赖使用以及配置优先级-基础-springboot2.7.x系列

文章目录 1 依赖方式1.1 spring-boot-starter-parent依赖1.2 spring-boot-dependencies依赖1.3 对比 2 使用方式2.1 SpringbootApplication2.2 高度定制 3 springboot各种配置优先级顺序4 sprinboot配置文件解析顺序结语 1 依赖方式 这里项目以开源的renren和pig为例&#xff…

小学课后兴趣班选课平台的设计与实现(ASP.NET,SQLServer)

系统功能模块设计 中小学课后兴趣班选课平台包括前台功能模块和后台功能模块&#xff1a;前台功能模块是给会员使用的功能模块&#xff0c;在前台功能模块中会员可以实现在线注册&#xff0c;登录&#xff0c;查看发布的新闻资讯信息&#xff0c;查看教师&#xff0c;在线留言&…

SouapUI接口测试之创建性能测试

SouapUI也是一个能生动的体现一个系统&#xff08;项目&#xff09;性能状态的工具&#xff0c;本篇就来说说如何在SouapUI工具下创建性能测试 一、创建测试用例 由于在《SouapUI接口测试之使用Excel进行参数化》篇已经创建好了测试用例&#xff0c;本篇就不讲解如何创建测试…

360浏览器如何屏蔽某搜索网站的热搜

1.安装油猴&#xff08;Tampermonkey插件&#xff09; 下载油猴&#xff1a;官网油猴tampermonkey官网_油猴脚本手机版油猴插件下载 安装&#xff1a;360浏览器安装可以参考这边文章。 地址&#xff1a;http://www.xz7.com/article/86938.html 其实就是下载crx文件后&#xff…

6月6号软件资讯更新合集......

Yao 0.10.3 正式发布&#xff0c;拥抱 AIGC 时代&#xff01; ChatGPT 解锁了新的人机交互方式&#xff0c;人类可以与电脑直接交流了&#xff01;AIGC 时代已经到来&#xff0c;万千应用正在升级或重构&#xff0c;Yao 提供了一个开箱即用的解决方案&#xff0c;可以快速开发…

Spark SQL概述、数据帧与数据集

文章目录 一、准备工作1、准备数据文件2、启动Spark Shell 二、加载数据为Dataset1、读文件得数据集 三、给数据集添加元数据信息1、定义学生样例类2、导入隐式转换3、将数据集转换成学生数据集4、对学生数据集进行操作&#xff08;1&#xff09;显示数据集内容&#xff08;2&a…

Zabbix5通过脚本自定义Nginx监控

1、客户端配置 1.1、nginx开启nginx status 使用 zabbix 监控 nginx&#xff0c;首先 nginx 需要配置 ngx_status&#xff0c;nginx.conf加入以下配置&#xff0c;并重启Nginx或reload location /ngx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all…

【操作系统】03.内存管理

存储器的层级结构 程序的运行 现代操作系统使用的连接方式&#xff1a;运行时动态链接 对某些模块的链接推迟到程序执行时才进行 现代操作系统使用的装入方式&#xff1a;动态重定位 程序装入内存后&#xff0c;逻辑地址不会立即转换成物理地址&#xff0c;而是推迟到指令执行…

Linux 终端安装并使用tmux管理远程会话 tmux使用教程

文章目录 1 Tmux简介1.1 会话与窗口1.2 tmux功能 2 tmux安装2.1 源码安装2.2 命令行安装 3 基本用法&#xff08;命令行&#xff09;3.1 创建窗口3.2 分离会话 切换会话3.3 连接会话3.4 关闭会话并杀死进行对会话进行重命名 4 Tmux 的快捷键5 窗口操作与窗格操作参考 1 Tmux简介…
最新文章