浅析ros下修改订阅话题

2023-05-16

通过rostopic list 可以查看发布的话题,可以看到有/tag_detections和/tf话题,那麽我们先编写订阅/tag_detections,然后根据此模板订阅成/tf
在这里插入图片描述

1,首先原始话题是订阅/tag_detections
通过rostopic info /tag_detections 查看话题的发布者和类型如下:
在这里插入图片描述
2,已知话题的发布者和类型,这时候我们编写订阅节点
2.1,首先我们看到这里的类型后,我们要找到这个类型在msg文件/srv文件下,从而进行头文件定义,这里我们看到很明显的在msg文件下的AprilTagDetectionArray.msg文件下,msg消息和srv服务文件编译后都会变成程序的头文件,所以这里写成,来引入此话题类型

#include "apriltags2_ros/AprilTagDetectionArray.h"

在这里插入图片描述

2.2 编写订阅话题的类Localizer
这里的编写,我是根据之前看到话题一种类的格式来修改的,当然我们可以用官网上那种把所有部分都写在main函数的形式,但是那样不便于后来程序阅读和拓展,所以我选择这种形式,现在我们分析下下面的具体实现
对象声明:
ros::Subscriber ar_sub_;这句话定义了一个话题订阅对象ar_sub_

apriltags2_ros::AprilTagDetectionArrayConstPtr last_msg_;定义了一个 实参对象last_msg_
至于这里为什么加ConstPtr,这是一个疑问点,不懂,从下面网址看到:
另一个是::ConstPtr,它是boost::shared_ptr。通过将const指针传递到回调,我们避免了复制。网址:https://blog.csdn.net/kantswang/article/details/82947669

void number_callback(const apriltags2_ros::AprilTagDetectionArray::ConstPtr& msg)定义回调函数,里面是调用话题类型的形参对象,函数内实现了形参向实参的赋值。

ar_sub_ = nh.subscribe<apriltags2_ros::AprilTagDetectionArray>(“tag_detections”, 1,
&Localizer::number_callback, this);
<apriltags2_ros::AprilTagDetectionArray>订阅话题的类型
“tag_detections”,订阅的话题
1 缓存队列空间大小,通常订阅和发布缓存大小是一致。被取走的消息存放入了Subscriber的消息队列中,等待被Callback执行。如果Callback执行很慢,消息越堆越多,最老的消息会逐渐被顶替。参考网址:https://blog.csdn.net/handsome_for_kill/article/details/81984428

&Localizer::number_callback 回调函数的引用

this 不懂,固定格式,可能跟指针有关

main函数Localizer localizer(node_obj);对节点对象的实例化,从而实现订阅

ros::spin()函数一般不会出现在循环中,因为程序执行到spin()后就不调用其他语句了,也就是说该循环没有任何意义,还有就是spin()函数后面一定不能有其他语句(return 0 除外),有也是白搭,不会执行的。
下面是我们订阅/tag_detections的节点

#include "ros/ros.h"
#include "apriltags2_ros/AprilTagDetectionArray.h"
#include <iostream>
class Localizer
{
public:
  Localizer(ros::NodeHandle& nh)
  {
      ar_sub_ = nh.subscribe<apriltags2_ros::AprilTagDetectionArray>("tf", 1,
      &Localizer::number_callback, this);    
  }
  void number_callback(const apriltags2_ros::AprilTagDetectionArray::ConstPtr& msg)
  {
       last_msg_ = msg;
       ROS_INFO_STREAM(last_msg_->detections[0].pose.pose.pose);
  }
ros::Subscriber ar_sub_;
apriltags2_ros::AprilTagDetectionArrayConstPtr last_msg_;
};
int main(int argc, char **argv)
{
    int i=0;
    ros::init(argc, argv,"apriltag_detector_subscriber");
    ros::NodeHandle node_obj;
    Localizer localizer(node_obj);
    ROS_INFO("Vision node starting");
    ros::spin();
}

根据上面订阅/tag_detections的节点,我编写了订阅/tf的话题节点,可以看到只是修改了相关的部分,这里只是应用还是有一定规律。这里我们可以试着任意想订阅的话题节点了

#include "ros/ros.h"
#include "tf2_msgs/TFMessage.h"
#include <iostream>
class Localizer
{
public:
  Localizer(ros::NodeHandle& nh)
  {
      ar_sub_ = nh.subscribe<tf2_msgs::TFMessage>("tf", 1,
      &Localizer::number_callback, this);    
  }
  void number_callback(const tf2_msgs::TFMessage::ConstPtr& msg)
  {
       last_msg_ = msg;
       ROS_INFO_STREAM(last_msg_->transforms[0].transform);
  }
ros::Subscriber ar_sub_;
tf2_msgs::TFMessageConstPtr last_msg_;
};
int main(int argc, char **argv)
{
    int i=0;
    ros::init(argc, argv,"apriltag_detector_subscriber");
    ros::NodeHandle node_obj;
    Localizer localizer(node_obj);
    ROS_INFO("Vision node starting");
    ros::spin();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅析ros下修改订阅话题 的相关文章

  • ros 样例代码和教程

    中国大学MOOC 机器人操作系统入门 课程代码示例 代码 https github com DroidAITech ROS Academy for Beginners 书 https legacy gitbook com book sych
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • 1-如何安装ROS

    如何安装ROS 大家好 我是如何 今天尝试在Ubantu下安装ROS Robot Operating System 测试环境 虚拟机VMware Ubantu20 04 准备步骤 添加ROS软件源 sudo sh c echo deb ht
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • Raspberry Pi 上 ROS 服务器/客户端通过GPIO 驱动硬件

    ROS 服务 现在 想象一下你在你的电脑后面 你想从这个服务中获取天气 你 在你身边 被认为是客户端 在线天气服务是服务器 您将能够通过带有 URL 的 HTTP 请求访问服务器 将 HTTP URL 视为 ROS 服务 首先 您的计算机将
  • Ubuntu安装ROS

    原文链接 https blog csdn net qq 44830040 article details 106049992 这也是我在ubuntu里面安装ROS的第N次 以前每次安装过程都忘记总结了 导致每次安装ROS都浪费了很多的时间用
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • 如何将从 rospy.Subscriber 数据获得的数据输入到变量中?

    我写了一个示例订阅者 我想将从 rospy Subscriber 获得的数据提供给另一个变量 以便稍后在程序中使用它进行处理 目前 我可以看到订阅者正在运行 因为当我使用 rospy loginfo 函数时 我可以看到打印的订阅值 虽然我不
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 如何使用 PyQT5 连接和分离外部应用程序或对接外部应用程序?

    我正在使用 ROS 为多机器人系统开发 GUI 但我对界面中最不想做的事情感到困惑 在我的应用程序中嵌入 RVIZ GMAPPING 或其他屏幕 我已经在界面中放置了一个终端 但我无法解决如何向我的应用程序添加外部应用程序窗口的问题 我知道
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS

随机推荐

  • 分享篇--esp32直连天猫精灵

    今天给大家分享怎么用ESP32直连天猫精灵 启明云端ESP32开发板直连天猫精灵 第一步 xff1a 环境搭建 1 阿里物联网 SDK https github com espressif esp ali smartliving https
  • CentOS7部署FTP

    文章目录 1 安装FTP2 配置FTP3 创建登录用户4 修改 etc pam d vsftpd 文件5 新建系统用户vsftpd xff0c 用户目录为 home vsftpd6 建立虚拟用户个人配置文件7 重启 1 安装FTP 0 关闭
  • Ceph-Quincy-17.2.1版本集群部署

    文章目录 1 环境准备1 1 关闭防火墙1 2 关闭Selinux1 3 配置yum源1 4 时间同步1 5 cephadm下载 2 部署2 1 环境依赖2 2 cephadm部署集群2 3 扩容节点2 4 添加OSD服务2 5 创建一个文
  • Ceph文件存储-挂载文件系统

    文章目录 1 创建文件系统1 1 方法11 2 方法2 2 挂载文件系统3 卸载 1 创建文件系统 1 1 方法1 span class token number 1 span 创建存储池 ceph osd pool create tgmf
  • sshd: Cloudn‘t open /dev/null : permission denied

    1 问题 在通过 MobaXterm 链接节点时 xff0c 报错如下 xff1a Remote side unexpectedly closed network connection systemctl restart sshd 重启 s
  • CentOS8联网部署Ceph-Quincy集群

    文章目录 1 环境准备1 1 关闭selinux1 2 关闭防火墙1 3 配置免密1 4 设置yum源1 5 安装依赖1 6 设置时间同步1 7 安装docker 2 安装Ceph2 1 安装cephadm2 2 部署ceph集群2 3 集
  • 有时间细读这些书

    1 Windows程序设计 第5版 珍藏版 xff1a 这是很经典的一本介绍Win32 API编程的书了 xff0c 基本介绍到了大多数关于Windows程序设计的基本内容 2 Windows程序设计 王艳平版 xff1a 这本和上一本的区
  • reStructuredText(.rst)语法规则快速入门

    reStructuredText是一种轻量级的文本标记语言 xff0c 直译为 xff1a 重构建的文本 xff0c 为Python中Docutils项目的一部分 其一般保存的文件以 rst为后缀 在必要的时候 xff0c rst文件可以被
  • VHDL移位操作

    通过SLL实现五比特数的移动 xff0c 另外常见的还有 SRL 逻辑右移 实现数据右移 xff0c 左端补0 xff1b SLA 算术左移 实现数据左移 xff0c 同时复制最右端的位 xff0c 填充在右端空出的位置 xff1b SRA
  • 过孔----通孔,盲孔,埋孔

    过孔 xff08 via xff09 是多层 PCB 的重要组成部分之一 xff0c 钻孔的费用通常占 PCB 制板费用的 30 40 简单的来说 xff0c PCB 上的每一个孔都可以称之为过孔 从作用上看 xff0c 过孔可以分成两类
  • RS-422与RS-485传输线上的匹配

    对RS 422与RS 485总线网络一般要使用终接电阻进行匹配 但在短距离与低速率下可以不用考虑终端匹配 那么在什么情况下不用考虑匹配呢 xff1f 理论上 xff0c 在每个接收数据信号的中点进行采样时 xff0c 只要反射信号在开始采样
  • 小明分享:SSD201/202系统烧录篇,多种烧录方式,小明都做了分享,有需要的小伙伴拿走不谢哈!更多资料需求可以关注我,我是启明云端的小明MM!

    一 ISP 烧录 当 flash 没有烧过系统或系统损坏时 xff0c 可以先通过 ISP 烧录 boot xff0c 然后再通过 eth usb 或 sd 烧录完整的系统 下载并解压 tools ssd201 ISP 5 0 15 rar
  • CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • 终端电阻对CAN总线的作用和影响

    在CAN总线测试中 xff0c 会遇到找不出原因的错误 xff0c 那你可能忽略了一个解决异常的利器 终端电阻 究竟终端电阻对CAN总线有什么重要作用和影响呢 xff1f 电信号在电缆中的传播与光相似 xff0c 光从空气射入水中会发生光的
  • CAN总线

    最近在看stm32的通讯部分由于can总线在工业上的应用 xff0c 我选择以can总线为突破口进行学习 实际上在串口通讯所有的协议中 xff0c can总线也是我认为最复杂的一个协议 看了几天 xff0c 为了能够更加通俗的理解can的原
  • 「过孔盖油」、「过孔塞油」

    作为刚接触PCB板的新手 xff0c 是否有遇到过这样的疑问 xff1a 过孔盖油和过孔塞油听起来差不多 xff0c 是不是同一种东西 xff1f 确实两者听起来很像 xff0c 但实际上这是两个完全不一样的的制作要求 过孔盖油的专业解释是
  • 【转】过孔

    在一个高速印刷电路板 PCB 中 xff0c 通孔在降低信号完整性性能方面一直饱受诟病 然而 xff0c 过孔的使用是不可避免的 在标准的电路板上 xff0c 元器件被放置在顶层 xff0c 而差分对的走线在内层 内层的电磁辐射和对与对之间
  • HDC2021技术分论坛:OpenHarmony驱动框架解读和开发实践

    转自 xff1a OpenAtom OpenHarmony 作者 xff1a yuanbo xff0c 华为高级工程师 在IoT时代下 xff0c 终端设备差异较大 形态各异 尺寸各异 交互方式各异 xff0c 解决设备适配问题无疑是实现万
  • UR5+robotiq_85_gripper GAZEBO模拟视觉抓取平台仿真-2

    6 视觉算法 这里我以OpenCv中的SIFT描述子检测目标物体相对于相机的位姿 这里有个开源的包 find object 2d是ROS平台下一个功能强大的识别物体的功能包 由于对于纯颜色物体具有很少的特征 xff0c 所以我决定把另外两个
  • 浅析ros下修改订阅话题

    通过rostopic list 可以查看发布的话题 xff0c 可以看到有 tag detections和 tf话题 xff0c 那麽我们先编写订阅 tag detections xff0c 然后根据此模板订阅成 tf 1 xff0c 首先