Matlab与ROS(1/2)---发布者和订阅者数据通信(四)

2023-05-16

0. 简介

我们在前面一节介绍了Matlab与Message的通信,而我们这一节主要来介绍发布者和订阅者在Matlab中的操作。这部分我们主要来看一下ROS1和ROS2中分别是如何使用Topic的

1. ROS1的消息订阅与发布

在这里插入图片描述

1.1 ROS1的消息订阅

在Matlab中一般使用rossubscriber订阅/scan主题。如果主题已经存在于ROS网络中(就像这里的情况一样),rossubscriber会自动检测它的消息类型,因此不需要指定它。为了提高效率,使用struct格式的消息。

laser = rossubscriber("/scan","DataFormat","struct");
pause(2)

然后使用receive来等待新消息。(第二个参数是一个以秒为单位的超时。)输出丑闻包含接收到的消息数据。

scandata = receive(laser,10)

scandata = struct with fields:
MessageType: ‘sensor_msgs/LaserScan’
Header: [1x1 struct]
AngleMin: -0.5467
AngleMax: 0.5467
AngleIncrement: 0.0017
TimeIncrement: 0
ScanTime: 0.0330
RangeMin: 0.4500
RangeMax: 10
Ranges: [640x1 single]
Intensities: []

某些消息类型具有与之关联的可视化方法。例如LaserScan消息,可以使用rosPlot绘制扫描数据。其中MaximumRange名称-值对指定最大绘图范围。

figure
rosPlot(scandata,"MaximumRange",7)

在这里插入图片描述
同时对于订阅者来说同样可以设置一个callback函数来触发,因为这样的形式允许在订阅者等待新消息时执行其他MATLAB代码。如果要使用多个订阅者,回调是必不可少的。

robotpose = rossubscriber("/pose",@exampleHelperROSPoseCallback,"DataFormat","struct")

robotpose =
Subscriber with properties:
TopicName: ‘/pose’
LatestMessage: []
MessageType: ‘geometry_msgs/Twist’
BufferSize: 1
NewMessageFcn: @exampleHelperROSPoseCallback
DataFormat: ‘struct’

在主工作区和回调函数之间共享数据的一种方法是使用全局变量。定义两个全局变量pos和orient。

global pos
global orient

当在/pose主题上接收到新的消息数据时,全局变量pos和orient exampleHelperROSPoseCallback函数中被赋值。

一般的会等待几秒钟,以确保订阅者能够收到消息。

pause(2) 
pos

pos = 1×3
-0.0133 0.0488 -0.0462

如果想要关闭订阅者,一般的操作方法是通过清除订阅者变量停止姿势订阅者

clear robotpose

这里我们举个例子,首先会创建一个名为figureCallback的新文件。m并定义一个名为figureCallback的回调函数。回调函数处理用户在图形窗口中按下键时的动作。定义回调函数以接受两个输入参数:

  • src:使用第一个参数引用正在执行回调以查找图中绘制的Line对象的特定图形。
  • event:使用第二个参数访问关于按键用户操作的特定信息。如果按下的键是+,则增加该行的宽度,如果是-,则减少该行的宽度。
function figureCallback(src,event)
line = findobj(src,"Type","Line");
if event.Character == "+"
    line.LineWidth = line.LineWidth+1;
elseif event.Character == "-"
    line.LineWidth = max(line.LineWidth-1,0.5);
end
end

在命令窗口中,创建一个图对象。使用@操作符将函数句柄分配给图形的WindowKeyPressFcn属性。当用户在图形窗口中按下一个键时执行此回调。然后,在当前图中绘制一些数据。这类一般的是通用的函数,

f = figure(WindowKeyPressFcn=@figureCallback);
plot(1:10)

如果说我们还需要添加一些其他的参数作为输入,我们创建一个displayCoordinates函数以接受事件数据输入。
src:使用第一个参数引用正在执行回调的特定图形对象。
~:使用该字符表示输入未被使用。
ax:使用第二个参数访问鼠标指针在坐标轴上的位置。

function displayCoordinates(src,~,ax)
src.MarkerEdgeColor = rand(1,3);
disp(ax.CurrentPoint(1,1:2))
end

然后,您可以使用单元格数组指定ButtonDownFcn回调属性。数组的第一个元素是displayCoordinates函数的句柄,第二个元素是在源和事件参数之后传递给displayCoordinates函数的axes对象。

ax = axes;
x = randn(100,1);
y = randn(100,1);
scatter(x,y,"ButtonDownFcn",{@displayCoordinates,ax})
% scatter(x,y,"ButtonDownFcn",@(src,event)displayCoordinates(src,event,ax))
% scatter(x,y,"ButtonDownFcn",@(src,~)displayCoordinates(src,~,ax))% 外部引入的变量

1.2 ROS1的发布消息

创建一个向/chatter主题发送ROS字符串消息的发布者

chatterpub = rospublisher("/chatter","std_msgs/String","DataFormat","struct")

chatterpub =
Publisher with properties:
TopicName: ‘/chatter’
NumSubscribers: 0
IsLatching: 1
MessageType: ‘std_msgs/String’
DataFormat: ‘struct’

pause(2) % Wait to ensure publisher is registered

创建并填充一个ROS消息以发送到/chatter话题。

chattermsg = rosmessage(chatterpub);
chattermsg.Data = 'hello world'

chattermsg = struct with fields:
MessageType: ‘std_msgs/String’
Data: ‘hello world’

向/chatter主题发布一条消息。该字符串会等待订阅者回调。

send(chatterpub,chattermsg)
pause(2)

2. ROS2的消息订阅与发布

…详情请参照古月居

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab与ROS(1/2)---发布者和订阅者数据通信(四) 的相关文章

  • SVM深入理解&人脸特征提取

    目录 一 SVM深入理解1 SVM算法2 重做例子代码 二 人脸特征提取1 采集人脸信息 绘制68个特征点2 给人脸绘制一幅墨镜 三 总结四 参考文献 一 SVM深入理解 1 SVM算法 支持向量机 xff08 support vector
  • 传统优化方法:枚举法、启发式算法和搜索算法

    1 枚举法 枚举出可行解集合内的所有可行解 xff0c 以求出精确最优解 对于连续函数 xff0c 该方法要求先对其进行离散化处理 xff0c 这样就可能因离散处理而永远达不到最优解 当枚举空间比较大时 xff0c 该方法的求解效率比较低
  • Android图形系统的分析与移植--七、双缓冲framebuffer的实现

    1 实现原理 在基本的FrameBuffer已经实现的基础上 xff0c 需要实现的是与Android原本模拟器所使用的goldfish FrameBuffer之间的区别 比较一下不难发现 xff0c 从以下及方面着手 xff1a 1 修改
  • Qt 读写XML文件

    目录 1 常用方法 2 示例 2 1 写文件 2 2 读文件 Qt 对 XML 的读写操作 1 简介 使用XML模块 xff0c 在 pro文件中添加 QT 43 61 xml xff0c 并加如相应的头文件 include lt QtXm
  • 苏嵌15 16.11.16

    Makefile中常用的基本函数 1 subst subset 参数1 参数2 参数3 把参数3中的1替换成参数2 返回被替换的参数3 2 patsubst patsubset 模式参数 参数1 参数2 把参数2中复合模式参数的单词替换成参
  • 用自己的单目&双目相机在ROS 下实现双目ORB_SLAM2

    用自己的双目相机在ROS 下实现双目 ORB SLAM2 参考博客 ROS下单目 SLAM https blog csdn net goding learning article details 52950993 配置ROS 下的 ORB
  • 【Linux】Ubuntu 18.04安装aptitude命令

    在ubuntu18 04 下通过如下命令进行aptitude命令的安装 xff0c span class token function sudo span span class token function apt get span spa
  • 卡尔曼滤波(Kalman Filter)原理理解和测试

    Kalman Filter学原理学习 1 Kalman Filter 历史 Kalman滤波器的历史 xff0c 最早要追溯到17世纪 xff0c Roger Cotes开始研究最小均方问题 但由于缺少实际案例的支撑 xff08 那个时候哪
  • ROS与开发板入门教程-树莓派3源码安装Turtlebot(ubuntu mate 16.04+kinetic+Turtlebot)

    ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate 16 04 43 kinetic 43 Turtlebot ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate16 04 4
  • Linux下Node.js和NPM安装和配置

    目录 前言 1 安装Nodejs和NPM 2 NPM的配置 3 nodejs的基本使用 3 1 搭建简易后端服务器 4 npm的基本使用 4 1 搭建vue 2 0开发环境 前言 Nodejs简介 Node js是一个基于Chrome V8
  • 年轻人,你为什么要来阿里搞技术?

    阿里妹导读 xff1a 刚刚毕业的年轻技术人 xff0c 为何会选择阿里巴巴 xff1f 也许 xff0c 因为这里是学术和实践充分融合的实验场 xff0c 也许是因为在这里理论的确可以改变生活 xff0c 也许只是为了感受在西湖畔写代码的
  • C语言字符数组与字符串的使用及加结束符‘\0‘的问题

    1 字符数组的定义与初始化 字符数组的初始化 xff0c 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 61 I a m h a p p y 即把10个字符分别赋给str 0 到str 9 10个元素 如果花括号中提
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

    1 中断 xff0c 异常 xff0c 系统调用相同 xff1a CPU自动压入 xff1a ss 运行级别提升时需切换堆栈 xff0c 因此多压入用户态的栈段ss xff0c esp 运行级别提升时需切换堆栈 xff0c 因此多压入用户态
  • Pipeline 核心语法

    常用开发工具 选择任意pipeline类型的作业 xff0c 点击 流水线语法 即可进入pipeline开发工具页面 1 片段生成器 流水线代码片段生成器 xff0c 非常好用 xff0c 在这里可以找到每个插件以及Jenkins内置的方法
  • Pipeline Groovy 语法

    Groovy是一种功能强大 xff0c 可选类型和动态 语言 xff0c 支持Java平台 旨在提高开发人员的生产力得益于简洁 xff0c 熟悉且简单易学的语法 可以与任何Java程序顺利集成 xff0c 并立即为您的应用程序提供强大的功能
  • Jenkins 共享库应用

    1 创建一个共享库 1 xff09 创建共享库 可以直接在github中创建一个公开类型的仓库 xff0c 也可以创建私有类型的gitlab仓库 xff0c 需要提前配置好仓库的认证凭据 xff0c 这里使用gitlab创建了一个名为jen
  • Generic WebHookTrigger 自动触发

    1 安装配置 Generic WebHookTrigger 目的 xff1a 为Jenkins作业添加触发器 xff0c 便于其他系统调用 安装配置Generic WebHook xff0c 插件名称 xff1a Generic Webho
  • Jenkins 权限管理与凭据

    权限管理 安装插件 Role Based Strategy 可以对Jenkins用户进行权限管理 xff0c 如果在Jenkins控制台安装插件失败 xff0c 可以去Jenkins官网下载插件然后再上传 Role based Author
  • 部署Maven环境

    JDK xff1a 在maven3 3 以上的版本需要JDK版本1 7 43 xff0c 内存 xff1a 没有最低限制 磁盘 xff1a 1G 43 可用磁盘空间 操作系统 xff1a 没有限制 下载地址 xff1a Maven Down

随机推荐

  • Maven 集成

    先在执行节点上安装Maven xff1a 部署Maven环境 lovely nn的博客 CSDN博客 JDK xff1a 在maven3 3 以上的版本需要JDK版本1 7 43 xff0c 内存 xff1a 没有最低限制 磁盘 xff1a
  • 哪些技术好书值得一读再读?阿里大牛列了一份经典书单

    喜爱读书 xff0c 就等于把生活中寂寞无聊的时光换成巨大享受的时刻 有了书 xff0c 各个领域的智慧 xff0c 几乎触手可及 我们能有幸站在前辈 巨人的肩膀上 xff0c 看更远的风景 4月23日世界读书日 xff0c 阿里九位技术大
  • JDK 环境部署

    环境Centos 7 6 卸载旧的 查看旧的java版本 java version 查看jdk信息 rpm qa grep i jdk 卸载jdk rpm e nodeps jdk信息 安装新的 rpm安装1jdk rpm ivh jdk
  • Docker部署Gitlab

    这里用docker部署gitlab ce 14 0 0 ce 0版本 xff1a docker pull gitlab gitlab ce 14 0 0 ce 0 mkdir p gitlab1 config data logs docke
  • Pipeline 部署K8S应用

    概述 提前在K8S集群中部署jenkins和gitlab应用 xff0c gitlab用于存放应K8S的资源清单Yaml文件 xff0c Jenkins用于拉取gitlab上的Yaml文件并将其部署到K8S集群中 将所有Yaml文件放在Gi
  • curl https方式访问kubernetes集群API

    使用curl https方式访问kubernetes集群的api 认证方式需要用到token xff0c 这里使用变量赋予APISERVER 和TOKEN的值 apiserver xff1a APISERVER 61 kubectl con
  • Deployment 回滚

    更新Deployment资源时 xff0c pod状态为Pending xff0c 使用delete命令是删不掉Pending的pod的 xff0c 因为Deployment会无限创建 xff0c 这时候需要用到Deployment的回滚功
  • 在Pod中执行目录操作,提示Permission denied

    问题 xff1a 进入Pod执行创建文件的操作 xff0c 出现如下报错 kubectl exec it jenkins 5b688ddcc7 h72f2 n cicd bash touch test touch cannot touch
  • Copy宿主机文件到Docker容器中

    1 查找容器名 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 67686c68c78c keycloak v3 34 opt keycloak bin k 3
  • K8S中部署Grafana

    官方部署文档 xff1a Deploy Grafana on Kubernetes Grafana Labs 以下Yaml从官方copy下来的并做了些修改 xff0c Service使用Nodeport方式是为了便于本地访问 cat gra
  • 在 AlertManager 报警通知中展示监控图表

    参考原文档 xff1a 在 AlertManager 报警通知中展示监控图表 Promoter 是一个用于 AlertManager 通知的 Webhooks 实现 xff0c 支持在消息通知中展示实时报警图表 xff0c 也支持定制消息通
  • Github添加SSH keys

    问题 xff1a 在本地 xff08 linux系统 xff09 下载github仓库源代码时 xff0c 执行git clone 命令时出现以下报错 xff1a git clone git 64 github com hh hub pro
  • 阿里技术大牛最爱的“闲书”,你看过多少?

    在忙碌的写代码 修bug生活里 xff0c 你有多久没有闲下来 xff0c 读读 闲书 xff0c 取悦自己了呢 xff1f 正如梁文道所说 xff0c 读一些无用的书 xff0c 做一些无用的事 xff0c 花一些无用的时间 xff0c
  • blackbox_exporter 黑盒监测

    一 简介 blackbox exporter blackbox exporter是Prometheus 官方提供的 exporter 之一 xff0c 可以提供 http dns tcp icmp 的监控数据采集 xff0c blackbo
  • Python 与Django环境搭建

    系统 xff1a Windows 10 python环境搭建 1 python安装步骤 python包下载链接 xff1a https www python org downloads windows 下载版本 xff1a python 3
  • prometheus图

    Prometheus Server 框架图 xff0c 只要能提供对应的metrics接口 xff0c promehteus就能接入监控 xff0c prometheus会把抓取到的指标数据持久化到本地磁盘中 xff0c 跟其它数据库一样它
  • 经典文献阅读之--BEVDistill(BEV蒸馏)

    0 简介 之前作者前段时间在研究BEV的相关算法 xff0c 当时就觉得BEV算法好是好 xff0c 但是所需要的内存以及计算资源实在是太大了 xff0c 无法实时在真实场景中运行 我们知道多视图 xff08 multi view 三维目标
  • 经典文献阅读之--FastFlowNet(轻量光流估计)

    0 简介 密集的光流估计在许多机器人视觉任务中起着关键作用 随着深度学习的到来 xff0c 已经比传统方法以令人满意的精度预测了它 然而 xff0c 当前的网络经常占用大量参数并且需要沉重的计算成本 这些缺点阻碍了在功率或内存受限的移动设备
  • Matlab与ROS(1/2)---Message(三)

    0 简介 消息是ROS中交换数据的主要容器 主题和服务使用消息在节点之间传输数据 为了标识其数据结构 xff0c 每条消息都有一个消息类型 例如 xff0c 来自激光扫描仪的传感器数据通常以sensor msgs LaserScan类型的消
  • Matlab与ROS(1/2)---发布者和订阅者数据通信(四)

    0 简介 我们在前面一节介绍了Matlab与Message的通信 xff0c 而我们这一节主要来介绍发布者和订阅者在Matlab中的操作 这部分我们主要来看一下ROS1和ROS2中分别是如何使用Topic的 1 ROS1的消息订阅与发布 1