ROS 与 MATLAB通信

2023-05-16

ros 与 matlab 通讯使用的是ros中的主从机策略。

1 准备条件

1、首先我们需要在matlab上安装 “Robotics_System_Toolbox” 工具箱,matlab2015B及以后自动安装有这个工具箱,但是可能由于激活的缘故,使得在输入rosinit 命令的时候会出现 “Undefined function or variable 'rosinit’ ”

这时候你可以使用如下命令检查你的license是否正确:

license('checkout','Robotics_System_Toolbox')
  • 1

如果出现以下的信息(返回信息为0),则说明你的license有问题,你需要重新激活。或者一个简单的方法就是 “重装MATLAB2016
在这里插入图片描述
我自己按卸载了matlab2015B 版本然后安装的2016B版本解决的;然后输入rosinit 命令,正常会输出以下信息
在这里插入图片描述

2、主从机通讯

首先确保运行matlab的电脑和运行Ubuntu的电脑连接在同一个局域网内。

2.1 Ubuntu 端设置

1、修改/etc/hosts文件 添加运行matlab端电脑的IP地址,比如说我的电脑名称为“DESKTOP-FS5A9TU”, IP 地址为10.5.3.219。 在etc/hosts文件中添加 "10.5.3.219 DESKTOP-FS5A9TU "

sudo vim /etc/hosts
  • 1

在这里插入图片描述
2、在Ubuntu端新开一个终端运行 roscore

roscore
  • 1

2.2 matlab端设置

在matlab端输入:(设置ROS主机的IP地址为Ubuntu端电脑的IP)

setenv('ROS_MASTER_URI','http://10.5.3.11:11311')
rosinit
  • 1
  • 2

然后再用rostopic list 命令查看话题名称:

rostopic list
  • 1

这时候就可以看大有一个‘/rosout’ 和‘/rosout_agg’的话题:
在这里插入图片描述

你可以在matlab端使用命令 “help robotics.ros” 来查看相关命令

help robotics.ros
  • 1

在这里插入图片描述
这里面有两个常用的命令是:

  • rosinit ——表示启动ROS
  • rosshutdown ——表示关闭ROS

3 用例测试

接下来我们在Ubuntu端启动一个pr2机器人,然后实现在MATLAB端接收显示pr2机器人的传感器数据,同时发布控制命令道/cmd_vel 话题上控制pr2机器人运行。
1、在Ubuntu端启动pr2机器人

roslaunch pr2_gazebo pr2_empty_world.launch
  • 1

在这里插入图片描述
2、matlab 端首先设置ROS主机为ubuntu 端的电脑,然后在matlab中初始化ros,最后利用rostopic list 查看主机上发布的话题。

setenv('ROS_MASTER_URI','http://10.5.3.11:11311')
rosinit
rostopic list
  • 1
  • 2
  • 3

启动以后我们可以看到matlab端已经可以正确显示pr2发布的topic了。
Alt
一些常用的topic命令都可直接在matlab中使用,如 rostopic list 、rostopic info 、 rostolic echo
1)列出topic列表

rostopic list 
  • 1

2)查看topic 信息

rostopic info /torso_lift_imu/data
  • 1

3)打印topic 信息

rostopic echo /torso_lift_imu/data
  • 1

3、接收消息

接下来我们接收并显示PR2发布的激光雷达数据。ROS 在matlab中接收一个topic的函数是 rossubscriber(topic_name,@function), 与ros中的接收函数不同,在matlab中我们不需要指定这个话题的数据类型,它会自动检测消息类型。function 表示回调函数,可以指定回调函数,也可以缺省。接下来我们在matlab命令窗口中输入:

>> laser = rossubscriber('/base_scan');
>> scandata = receive(laser,10);
>> plot(scandata)
  • 1
  • 2
  • 3

既可以看到如下效果:
在这里插入图片描述
4、发布消息
1)创建一个发布器

chatterpub = rospublisher('/chatter',rostype.std_msgs_String);
  • 1

2)填充数据

chattermsg = rosmessage(chatterpub);
 chattermsg.Data = 'hello world';
send(chatterpub,chattermsg)
  • 1
  • 2
  • 3

在这里插入图片描述
3)我们在ROS主机上运行

rostopic echo /chatter
  • 1

每当我们在matlab端调用一次 “send(chatterpub,chattermsg)” 函数,在ROS端就会打印一次 “hello world”
在这里插入图片描述
小结:到此我们在matlab上成功安装了ROS插件,并将matlab作为从机接收了ROS主机的话题上的数据,并在matlab端创建了一个新的话题,并将数据通过该话题发送到了ROS端。

4、参考资料

ROS探索总结(三十五)——Matlab中的ROS:http://www.guyuehome.com/1006

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

ROS 与 MATLAB通信 的相关文章

  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • MATLAB 变量传递和惰性赋值

    我知道在 Matlab 中 当将新变量分配给现有变量时 会进行 惰性 评估 例如 array1 ones 1 1e8 array2 array1 的价值array1不会被复制到array2除非元素array2被修改 由此我推测Matlab中
  • 2D 网格的纹理贴图

    我有一组点 x y meshgrid 1 N 1 M 在常规二维上定义 N x M网格 我还有另一组要点 u v 这是原始网格的一些变形 即 u v f x y 但是我没有实际的f导致变形 如何将纹理映射到由定义的 变形 网格u v 即 给
  • 图像处理方面的空间和时间表征有什么区别?

    我是学习图像处理的初学者 我对空间和时间表征的概念有点困惑 那么 对于空间表征来说 是不是像一张二维地图 包含了一些关于地图的统计信息呢 就时间特征而言 值是相对于时间的吗 这意味着什么以及我们为何关心 谢谢 当您在不同时间拍摄一系列图像时
  • 在 Python 上显示 Matlab mat 文件中的图像

    我目前正在尝试显示从此下载的 Mat 文件中的图像site http www rctn org bruno sparsenet 这是一个 mat 文件 所以我尝试使用 scipy io loadmat 函数加载它 但我似乎无法绘制图像 我究
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 如何使用最小生成树方法将边缘连接到图像中的节点

    我正在做我的手写图像图形匹配项目 我想在图形中表示给定的单词图像 我使用下面的算法 Algorithm input Binary image B Grid width w Grid height h Output Graph g V E w
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此
  • 如何调整x轴和y轴的大小

    如何调整 x 轴和 y 轴的大小 我想要什么 更具体 3900 60 30 0 60 120 180 3600 我做了什么 a 0 0 1 10000 plot a 我应该写什么才能按预期调整 x 和 y 轴的大小 EDIT 我不想 390
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整

随机推荐

  • 对于嵌入式初学者建议读的书

    刚加入了几个嵌入式群 xff0c 群里提问最多的是怎么能够快速入门 xff1f 对于这个问题 xff0c 一千人个人可能有一千个答案 我也在嵌入式行业里混了几年 xff0c 虽然说技术很水 xff0c 经 验不多 xff0c 但是比起没有入
  • matlab学习笔记二:plot画图怎么设置线条类型和颜色

    出处 xff1a https jingyan baidu com article 48b558e338aaa37f38c09a80 html matlab的绘图功能很强大 xff0c 因此它在科学实验和社会调研中被广泛应用 我们在 绘制图形
  • XModem协议

    出处 xff1a XModem协议 XModem协议介绍 xff1a XModem是一种在串口通信中广泛使用的异步文件传输协议 xff0c 分为XModem和1k XModem协议两种 xff0c 前者使用128字节的数据块 xff0c 后
  • 详解,N沟道MOS管和P沟道MOS管

    出处 xff1a P沟道mos管作为开关的条件 xff08 GS gt GS xff08 TH xff09 xff09 1 P沟道mos管作为开关 xff0c 栅源的阀值为 0 4V xff0c 当栅源的电压差为 0 4V就会使DS导通 x
  • python通过pip安装torch错误及解决办法ERROR: Could not find a version that satisfies the requirement torch

    错误代码 pip install torch 61 61 1 6 0 43 cu101 to rchvision 61 61 0 7 0 43 cu101 f https download pytorch org whl torch sta
  • 智能代码补全工具 tabnine

    安装方法链接 xff1a https www tabnine com install 亲测有效 xff1a tabnine vim Without Vundle Run git clone depth 1 https github com
  • ovsdb <7> OVSDB操作实践及各种机制的分析

    4 2OVSDB操作实践及各种机制的分析 在安装了上述的openvswitch和做了相应的配置之后 xff0c 下面对openvswitch中提供的各种ovsdb的工具 操作方式和工作机制做一些简单的说明 xff1a 1 Ovsdb ser
  • ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析

    4 6Ops cli结合ovsdb部分流程及接口分析 Ops中对于ovsdb的应用主要是基于上述的ovsdb的简单用法上的一个扩展和函数封装 xff0c 现在就其与之前不同的地方做补充说明并就各个函数的使用做相应的说明 根据前面的ovsdb
  • 项目管理:代码检查 pre-commit 使用详解

    Git钩子脚本对于在提交代码审查之前识别简单问题很有用 我们在每次提交时都运行钩子 xff0c 以自动指出代码中的问题 xff0c 例如缺少分号 xff0c 尾随空白和调试语句 通过在代码审阅之前指出这些问题 xff0c 代码审阅者可以专注
  • SOCAT详解

    概述 socat xff0c 是linux下的一个工具 xff0c 其功能与有 瑞士军刀 之称的netcat类似 xff0c 不过据说可以看做netcat的加强版 的确如此 xff0c 它有一些netcat所不具备却又很有需求的功能 xff
  • sonic 架构学习

    射人先射马 xff0c 擒贼先擒王 在我们学习sonic的过程中 xff0c 无疑了解sonic的架构是非常重要的 xff0c 然后再去了解各个模块的细节 xff0c 总分学习模式 下面是我自我学习并翻译的链接https github co
  • 以配置MTU 了解SONIC网络操作系统命令配置流程

    介绍 总览 本文档介绍了SONiC中的最大传输单元 xff08 MTU xff09 配置和行为 在计算机网络中 xff0c 层的通信协议的MTU定义了允许该层通过一个接口传输的最大协议数据单元的大小 xff08 以字节为单位 xff09 每
  • Mellanox CX4 offload 卸载功能介绍

    无状态功能卸载 cx4支持多种类型的无状态卸载 xff0c 如下面列表所示 Checksum OffloadLarge Send OffloadsReceive Side ScalingTransmit Side ScalingInterr
  • Mellanox cx4 驱动总结

    以下要点总结了基本的以太网驱动程序流程 xff1a 驱动加载 通过命令 QUERY HCA CAP 检查以太网卸载支持的设备功能建立发送rings 分配中断 xff0c 创建Event Queues 和 Completion Queues
  • 希腊符号读法大全

    是希腊字母 的古典写法 xff0c 读偏导数 xff0c 读round 1 alpha a lf 阿尔法 角度 xff1b 系数 2 beta bet 贝塔 磁通系数 xff1b 角度 xff1b 系数 3 gamma ga m 伽马 电导
  • 遍历ip开放的端口

    用于检测服务器上某个ip地址开放的端口 xff0c 查漏洞等 bin bash port range to check for i in 20 25 do echo now is i check open port and save to
  • Linux字符设备注册函数 register_chrdev详解

    Linux字符设备注册函数 register chrdev 详解 当我们需要注册字符设备的时候 xff0c 需要 module init 中调用 register chrdev 注册 下面主要介绍接口的实现过程与细节 内核函数前面添加 代表
  • phy基础知识总结 common register总结

    PHY篇 以太网PHY标准寄存器分析 PHY 是IEEE802 3中定义的一个标准模块 xff0c STA xff08 station management entity xff0c 管理实体 xff0c 一般为MAC或CPU xff09
  • linux 命令行下查看 html 和 pdf 文件方法

    1 xff1a 打开 html 文件 在linux 命令行 输入firefox help 显示信息 查看某个html 文件 xff0c 举例如下 xff0c 输入命令后 大概需要等3秒 xff0c firefox进程启动 xff0c 浏览器
  • ROS 与 MATLAB通信

    ros 与 matlab 通讯使用的是ros中的主从机策略 1 准备条件 1 首先我们需要在matlab上安装 Robotics System Toolbox 工具箱 xff0c matlab2015B及以后自动安装有这个工具箱 xff0c