Matlab与ROS(1/2)链接与入门(一)

news2024/11/28 19:47:35

0. 简介

Matlab作为广大学生以及算法工程师常用的软件,因其良好的可视化以及矩阵适应能力,使其得到了广泛的使用。同时ROS作为机器人、自动驾驶领域最常用的软件,其与Matlab结合在一起也是理所当然的。为此这一系列就是来带领读者熟悉并了解Matlab与ROS背后的使用关系

1. Matlab与ROS

机器人操作系统(ROS)是一种通信接口,使机器人系统的不同部分能够相互发现,并在它们之间发送和接收数据。MATLAB通过一个函数库支持ROS,使您能够与支持ROS的物理机器人或机器人模拟器(如Gazebo)交换数据。相比于之前我们讲过的Unity而言Matlab更偏向后端的运算,而不是仿真的操作。

ROS工具箱提供了一个接口,将MATLAB和Simulink与机器人操作系统(ROS和ROS 2)连接起来,使您能够创建一个ROS节点网络。工具箱包括MATLAB函数和Simulink块,用于导入、分析和回放记录在rosbag文件中的ROS数据。您还可以连接到活动的ROS网络以访问ROS消息。

该工具箱允许您通过桌面模拟和连接到外部机器人模拟器(如Gazebo)来验证ROS节点。同时ROS工具箱支持c++代码生成(使用Simulink Coder),使您能够从Simulink模型自动生成ROS节点并部署到模拟或物理硬件。对Simulink外部模式的支持使您可以在模型在硬件上运行时查看消息并更改参数。
在这里插入图片描述

1.1 ROS与Matlab基础使用

具体实现步骤如下:

  1. 初始化ROS网络
    使用 rosinit 去初始化ROS网络。默认情况下,rosinit 在MATLAB中创建一个ROS主节点,并启动一个连接到主节点的全局节点。全局节点被其他ROS功能自动使用。
rosinit

使用 rosnode list 查看ROS网络中的所有节点。注意,唯一可用的节点是 rosinit 创建的全局节点。

Launching ROS Core…
Done in 0.63966 seconds.
Initializing ROS master on http://172.29.195.13:50807.
Initializing global node /matlab_global_node_10681 with NodeURI http://dcc667538glnxa64:37939/ and MasterURI http://localhost:50807.

rosnode list

/matlab_global_node_10681

使用 exampleHelperROSCreateSampleNetwork 给ROS网络添加三个额外节点和示例发布者与订阅者。

exampleHelperROSCreateSampleNetwork

/matlab_global_node_12045
/node_1
/node_2
/node_3

图中显示了ROS网络的当前状态。MATLAB全局节点断开连接,因为它目前没有任何发布者、订阅者或服务。
在这里插入图片描述
如果需要关闭MATLAB中的ROS网络。可以使用下面的指令

rosshutdown

这将关闭由rosinit启动的ROS主节点,并删除全局节点。

1.2 ROS的Topic、Service和Message

使用 rostopic list 查看ROS网络中的可用话题。有四个话题:/pose, / roout, /scan和/tf。默认的话题:rosout和tf始终存在于ROS网络中。另外两个话题是作为示例网络的一部分创建的。

rostopic list

/pose
/rosout
/scan
/tf

下面的命令显示了两个服务(/add和/reply)以及所有节点的默认记录器服务。

rosservice list

/add
/matlab_global_node_10681/get_loggers
/matlab_global_node_10681/set_logger_level
/node_1/get_loggers
/node_1/set_logger_level
/node_2/get_loggers
/node_2/set_logger_level
/node_3/get_loggers
/node_3/set_logger_level
/reply

发布者、订阅者和服务使用 ROS messages 交换信息。每个ROS messages 都有一个相关的消息类型,该类型定义了 messages 中信息的数据类型和布局。这里使用rostopic type 查看话题使用的消息类型。下面的命令显示 /pose 话题使用类型为geometry_msgs/Twist的消息。

rostopic type /pose

geometry_msgs/Twist

2. 将ROS和Matlab链接

当使用ROS时,通常遵循以下步骤:

  1. 连接到ROS网络。要连接到ROS网络,可以在MATLAB中创建ROS主服务器或连接到现有的ROS主服务器。在这两种情况下,MATLAB还将创建自己的ROS节点(称为MATLAB全局节点)并向主节点注册。rosinit功能管理这个过程。
  2. 交换数据。一旦连接,MATLAB将通过发布者、订阅者和服务与其他ROS节点交换数据。
  3. 断开与ROS网络连接。调用rosshutdown函数来断开MATLAB与ROS网络的连接。

除了我们之前讲到的本主机连接以外,Matlab还支持连接到外部ROS主机。(例如在机器人或虚拟机上运行)。可以通过两种方式指定主服务器的地址:通过IP地址或运行主服务器的计算机的主机名。

值得注意的是,在每次调用rosinit之后,必须在使用不同的语法调用rosinit之前调用rosshutdown。为了简单起见,在这些示例中省略了对rosshutdown的这些调用。

'master_host’是一个示例主机名,'192.168.1.1’是外部ROS主机的一个示例IP地址。根据外部主机驻留在网络中的位置调整这些地址。如果在指定的地址没有找到主服务器,这些命令将失败。

rosinit('192.168.1.1')
rosinit('master_host')

对rosinit的两个调用都假设主服务器接受端口11311上的网络连接,这是标准的ROS主端口。如果主服务器运行在不同的端口上,则可以将其指定为第二个参数。要连接到在主机名master_host和端口12000上运行的ROS主机,使用以下命令:

rosinit('master_host',12000)

如果你知道主节点的整个统一资源标识符(URI),你可以创建全局节点并使用以下语法连接到主节点:

rosinit('http://192.168.1.1:12000')

如果是如下图所示的计算机可能连接到多个网络并具有多个IP地址。这幅图展示了一个例子。
在这里插入图片描述
左下角的计算机运行MATLAB并连接到两个不同的网络。其中一个子网的IP地址为73.195.120.50,另一个子网的IP地址为192.168.1.100。这台计算机想要连接到TurtleBot计算机上的ROS主机,IP地址为192.168.1.1。作为向主机注册的一部分,MATLAB全局节点必须指定其他ROS节点可以到达的IP地址或主机名。TurtleBot上的所有节点都将使用该地址将数据发送到MATLAB中的全局节点。

当使用主节点的IP地址调用rosinit时,它将尝试检测用于联系主节点的网络接口,并将其用作全局节点的IP地址。如果自动检测失败,您可以在rosinit调用中使用NodeHost的用户名-参数对显式指定IP地址或主机名。NodeHost的用户名-参数对可以与已经显示的任何其他语法一起使用。

rosinit('192.168.1.1','NodeHost','192.168.1.100')
rosinit('http://192.168.1.1:11311','NodeHost','192.168.1.100')
rosinit('master_host','NodeHost','192.168.1.100')

同样的作为ROS而言,其也可以通过标准ROS环境变量指定ROS主服务器的地址和所发布的节点地址。如果说我们没有对rosinit提供参数,该函数还将检查标准ROS环境变量的值。这些变量是ROS_MASTER_URI、ROS_HOSTNAME和ROS_IP。你可以使用getenv命令查看它们的当前值:

getenv('ROS_MASTER_URI')
getenv('ROS_HOSTNAME')
getenv('ROS_IP')

同样的可以使用setenv命令设置这些变量。在设置环境变量之后,不带参数地调用rosinit。ROS主服务器的地址由ROS_MASTER_URI指定,全局节点的通告地址由ROS_IP或ROS_HOSTNAME指定。如果您为rosinit指定了额外的参数,它们将覆盖环境变量中的值。

setenv('ROS_MASTER_URI','http://192.168.1.1:11311')
setenv('ROS_IP','192.168.1.100')
rosinit

3. ROS2与ROS1差异

3.1 节点差异

指令方面ROS2和ROS1大同小异,但是在链接方式上面有着比较大的差异,与ROS不同,ROS 2不需要在MATLAB中初始化。随着节点的创建,ROS 2网络自动启动。例如使用ros2node创建节点。

test1 = ros2node("/test1")

test1 =
ros2node with properties:
Name: ‘/test1’
ID: 0

同样关闭也很简单,即使用clear命令关闭ROS 2网络中的节点

clear test1

3.2 QOS质量评估

服务质量(QoS)策略选项更改发布者和订阅者处理和交换消息的方式。

  1. 使用History和Depth QoS策略根据要在处理队列中放置消息的方式确定通信对象的行为。指定历史记录作为这些选项之一。

    • " keepplast " -删除消息,只保留最新的信息。
    • “keepall” -将接收到的所有消息保存在队列中,直到它们被处理。
  2. 使用Reliability QoS策略确保将消息传递到订阅者。将可靠性指定为这些选项之一。

    • “reliable” -确保发布者不断向订阅者发送消息,直到订阅者确认收到消息为止。
    • " besteeffort " -允许发布者只发送一次消息。
  3. 使用带有深度输入的持久性QoS策略来控制晚加入连接的消息的持久性。指定持久性作为这些选项之一。

    • “transientlocal”——如果订阅者在发布者最初发送消息后加入网络,则发布者将持久消息发送给订阅者。
    • “volatile” -发布者在发送消息后不持久化消息。订阅者不向发布者请求持久消息。

3.3 DDS和RMW实现

当您在MATLAB®和Simulink®中使用ROS 2时,可以在RMW实现之间切换以使用数据分发服务(DDS)。要配置所需的RMW实现,请遵循以下步骤。

  1. 在MATLAB工具条的环境部分的Home选项卡下,打开Preferences。

  2. 在“ROS工具箱首选项”对话框中配置Python环境,并从“ROS中间件(RMW)实现”下拉列表中选择实现。默认实现是rmw_fastrtps_cpp。
    在这里插入图片描述

  3. 通过单击Configure和Switch to custom RMW implementation切换到自定义RMW实现,这将启动ROS Middleware Configuration对话框。

  4. 安装并构建自定义RMW实现包,以验证使用所选自定义RMW实现创建的ROS 2节点。

4. 不同域中创建ROS 2节点

要在非默认域中创建节点,需要显式地将域ID指定为ros2node的第二个输入参数。下面的newDomainNode是在ID为25的指定域中创建的

…详情请参照古月居

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

说说连接查询有哪些以及它们之间的区别?

一、左连接 -- 左连接 select t1.a,t2.b from (select 1 a from DUAL union ALL select 1 a from DUAL union ALL select 2 a from DUAL union ALL select 2 a from DUAL union ALL select 3 a from DUAL)t1 LEFT JOIN (select 1 b from DUAL union ALL select 2 b from DUAL …

【成为架构师课程系列】大数据技术体系精华总结【值得收藏!】

目录 大数据技术总结 #大纲 #概念 #应用 #难题 #技术栈 #大数据架构 #1. 数据收集

git报错大全,你将要踩的坑我都帮你踩了系列

使用git push -u origin master报下面的错: 使用git push -u origin master报下面的错: Updates were rejected because the remote contains work that you do not have locally,This is usually caused by another repository pushing to …

kubernetes基础

文章目录1.k8s1.概念2.特性3.核心组件1.k8s 1.概念 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极…

【刷题笔记】--验证二叉搜索树--min,max参与递归

题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例…

【大唐杯备考】——5G基站开通与调测(学习笔记)

📖 前言:本期介绍5G基站开通与调测。 目录🕒 1. 概述🕒 2. 5G基站开通与调测基础🕘 2.1 3.5GHz单模100MHz配置(S111)🕘 2.2 3.5GHz单模100MHz配置(S111111)&a…

车载以太网 - SomeIP - 杂项 - 09

SomeIP-SD Find Service Timing - 服务发现相关时间参数参数描述最小值标准值最大值T_Initial初始化时间0msNA1000msTTL生存时间NA5000msNAT_Cycle_Offer_Msg提供服务报文周期950ms1000ms1050msRepetition_Max最大重复次数NA3次NAInitial_dealy_Min初始化最小延迟NA90msNAIniti…

Spring、SpringMVC、Shiro、Maven

一、SpringSpring是一个为了解决企业应用程序开发复杂性而创建的开源框架,其核心是IOC–控制反转、AOP–面向切面编程。框架的主要优势之一就是其分层架构(WEB层(springMvc)、业务层(Ioc)、持久层&#xff…

面向对象的基本概念和方法

面向对象的开发方法在近几十年见得以广泛应用,我们常见的Java语言就是一种典型的面向对象的开发语言。然而,面向对象的概念较为复杂,知识点也很细碎,本文整理了面向对象的基本概念和方法,供大家参考。为了便于读者理解…

Java笔记-多线程高阶

目录一、多线程1.为什么使用多线程:2.多线程使用场景:3.使用多线程要考虑的因素:二、线程间竞争对象锁的过程三、synchronized关键字1.synchronized的作用:2.synchronized执行效率:3.synchronized实现原理:…

P14 PyTorch AutoGrad

前言:激活函数与loss的梯度PyTorch 提供了Auto Grad 功能,这里系统讲解一下torch.autograd.grad系统的工作原理,了解graph 结构目录:1: require_grad False2: require_grad True3: 多层bakcward 原理4: in…

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事,本文我们继续介绍YOLO-V4版本。YOLO的作者在发表完V3之后,发现YOLO产品被美国军方应用到了很多军事战争当中,这是他所不希望看见的,因此宣布不再继续研究。但历史和科技总是随时间不断…

(第五章)OpenGL超级宝典学习:统一变量(uniform variable)

统一变量 前言 本篇在讲什么 本篇记录对glsl中的变量uniform的认知和学习 本篇适合什么 适合初学Open的小白 适合想要学习OpenGL中uniform的人 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 …

设计模式-组合模式和建筑者模式详解

一. 组合模式1. 背景在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如&#xf…

spring注解的开端(@Component替代bean标签的使用)

目录 一、介绍 1.什么是注解开发? 2.Spring注解的版本 3.基于spring注解的应用 4. Component的细分注解 5.相关注解 二、简单例子讲解 1.类打注解 2.扫描注解放入工厂 3.总工厂取注解调用 4.运行结果 总结: 一、介绍 1.什么是注解开发&…

人工智能聊天工具ChatGPT为Delphi写的诗歌

现在每个人似乎都在谈论 ChatGPT,所以这里有一首关于我们最喜欢的开发工具Delphi的好诗,来自 ChatGPT 生成的 Embarcadero 的 Delphi。 Delphi,哦,Delphi! 作者:ChatGPT Delphi,哦,…

java面试题(十九) Mybatis

4.1 谈谈MyBatis和JPA的区别 参考答案 ORM映射不同: MyBatis是半自动的ORM框架,提供数据库与结果集的映射; JPA(默认采用Hibernate实现)是全自动的ORM框架,提供对象与数据库的映射。 可移植性不同&…

166_技巧_Power BI 窗口函数处理连续发生业务问题

166_技巧_Power BI 窗口函数处理连续发生业务问题 一、背景 在生产经营的数据监控中,会有一类指标需要监控是否连续发生,从而根据其在设定区间中的连续频次来评价业务。 例如: 员工连续迟到天数。销售金额连续上升或者下降。用户连续登陆…

卧槽!一个小时不到就把ChatGPT接入了微信!被问疯了~

大家好,我是鸟哥。一个半路出家的程序员。 最近ChatGPT又火了,一时兴起就把它接入我的微信机器人中。从账号注册到接入微信机器人,全程不到1个小时就搞定了!当然不是我牛逼而是Github上的人才太多了。 大家聊的还是很嗨的&#…

Hadoop自动安装JDK

目录 1、使用xftp工具 在opt目录下创建install和soft文件 ​2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 4、 运行 5、测试 1、使用xftp工具 在opt目…