Matlab与ROS(1/2)---Simulink(二)
创始人
2025-05-28 21:11:40
0次

0. 简介

在上一章中我们详细介绍了ROS与Matlab链接的基础用法。这一章我们将来学习如何使用Matlab当中的Simulink来完成。Simulink对机器人操作系统(ROS)的支持使我们能够创建与ROS网络一起工作的Simulink模型。ROS是一个通信层,允许机器人系统的不同组件以消息的形式交换信息。组件通过将消息发布到特定的主题(如/odometry)来发送消息。其他组件通过订阅该主题来接收消息。本文内容基于慕羽★大佬文章进行了增删。同时由于Simulink的使用在ROS1和ROS2中没有太多的改动,所以我们就仅对ROS1完成了介绍

对ROS的Simulink支持包括一个Simulink块库,用于为指定的主题发送和接收消息。当您模拟模型时,Simulink连接到ROS网络,该网络可以与Simulink在同一台机器上运行,也可以在远程系统上运行。一旦建立了这个连接,Simulink就会与ROS网络交换消息,直到模拟结束。如果安装了Simulink Coder,还可以从Simulink模型为独立ROS组件或节点生成c++代码。

同时ROS1的Simulink和ROS2的Simulink支持不太一样。ROS工具箱不支持Simulink中的以下ROS功能:ROSService服务端、ROS的行为以及TF树。

如果应用程序需要这些特性,就需要使用MATLAB的ROS功能。您可以使用MATLAB编写ROS节点,该节点可以将Service服务端、行为以及TF树作为ROS消息发布到主题。然后,Simulink可以订阅该主题来处理这些消息。在MATLAB中使用以下函数来处理这些特征:

ROS服务服务器:rosservice、rosvcserver
ROS动作:rosaction, rosactionclient
转换树:rostf, transform, getTransform

对于ROS 2, Simulink只支持发布和订阅这两个功能

要查看Simulink中ROS支持的完整列表,请参见Simulink-ROS。

1. 初始化ROS并创立链接

  1. 在终端输入以下命令查看本机地址
ifconfig 

在这里插入图片描述
2. 将本机IP写入到.bashrc文件。打开home文件夹,按Ctrl+h显示隐藏的文件,选择.bashrc并打开打开后在最后加入以下命令(后面的IP改为你的电脑的IP),然后保存退出

export ROS_IP=192.168.3.128

在这里插入图片描述
3. 启动roscore,并获取ROS输出的IP。 在终端输入roscore启动,可以发现此时roscore会输出一个IP如下图所示:
在这里插入图片描述
4. 打开MATLAB,建立与ROS的连接。 在MATLAB的命令行窗口输入以下语句,后半部分就是我们上一步得到的ROS输出的IP

setenv('ROS_MASTER_URI','http://jzx-virtual-machine:11311') 
rosinit

在这里插入图片描述

2. 创建一个Publisher

配置一个block,并向/location的节点发送一条geometry_msgs/Point类型的消息。需要做到以下几个步骤

  1. 在MATLAB工具条中,选择Home>Simulink来打开Simulink的起始页。
  2. 在Simulink开始页,单击空白模型创建并打开一个新的Simulink模型。
  3. 在Simulink工具条中,选择Simulation > Library Browser打开Simulink库浏览器。单击ROS工具箱选项卡(也可以在MATLAB命令窗口中输入roslib)。选择ROS库。
    在这里插入图片描述
  4. 将Publish块拖到模型中。双击该块以配置主题和消息类型。
  5. 为Topic源选择Specify your own,并在Topic中输入/location。
  6. 单击 Message type后的Select 按钮。将出现一个弹出窗口。选择geometry_msgs/Point,单击OK关闭弹出窗口。
    在这里插入图片描述

3. 创建一个Message

创建一个空白ROS消息,并用机器人路径的X和Y位置填充它。然后将更新后的ROS消息发布到ROS网络。

简单介绍一下Blank Message模块的作用:Blank Message模块用指定的消息或服务类型创建一个空白消息。Msg块的输出是一个空白的ROS消息(总线信号)。设置Class参数来选择ROS消息、服务请求和服务响应消息。这里我们使用的是ROS消息(总线信号)。可以使用总线分配块来修改总线信号中的特定字段。总线信号被初始化为零值(接地)。

在这里插入图片描述
具体操作如下:

  1. 在库浏览器中单击ROS工具箱选项卡,或在MATLAB命令行中键入roslib,选择ROS库。

  2. 将Blank Message块拖到模型中。双击该块以打开block的信息。

  3. 单击Message类型框旁边的Select,并从结果弹出窗口中选择geometry_msgs/Twist。
    在这里插入图片描述

  4. 我们想要发布信息还需要Publish模块,双击打开后按下图所示,因为我们是要发布给/turtle1/cmd_vel去控制小乌龟运动,所以这里选择/turtle1/cmd_vel话题
    在这里插入图片描述

  5. 上面的我们提到了Blank Message输出是一个空白的ROS消息(总线信号)我们可以使用总线分配块(Bus Assignment)来修改总线信号中的特定字段。所以我们还需要一个Bus Assignment模块,具体需要选择Simulink > Signal Routing库中拖出一个Bus Assignment模块。
    在这里插入图片描述

  6. 将空白消息块Blank Message的输出端口连接到总线分配块Bus Assignment的总线输入端口。然后将Bus Assignment块的输出端口连接到ROS Publish块的输入端口。双击总线分配块。您应该看到message信息,总线分配块允许总线中的元素被分配新的值。左边的列表框显示了输入总线中的元素。使用选择按钮来选择要分配的元素。使用向上、向下或移除按钮重新排列选择。 这里选择我们需要的X轴线速度和Z轴角速度,按下图所示操作:
    在这里插入图片描述

  7. 按下图所示连接,这里我们将线速度设置为常数10和角速度设定为常数7
    在这里插入图片描述

  8. 同样要把仿真时间改为inf
    在这里插入图片描述

  9. 单击Run开始模拟。Simulink为模型创建了一个专用的ROS节点,并创建了一个与Publish块相对应的ROS发布者。在模拟运行时,在MATLAB命令窗口中输入rosnode list。这列出了ROS网络中所有可用的节点,并包括一个名称为/untitled_81473的节点(模型的名称加上一个随机数,使其具有唯一性)。在模拟运行时,在MATLAB命令窗口中输入rostopic list。这列出了ROS网络中可用的所有主题,其中包括/location。
    在这里插入图片描述

4. 创建一个订阅者

  1. 从Library Browser中的ROS Toolbox选项卡中,将Subscribe块拖到模型中。双击该块

…详情请参照古月居

相关内容

热门资讯

带你了解!浙江茶苑辅助器功能方... 带你了解!浙江茶苑辅助器功能方法,浙江茶苑好像有辅助器方法浙江茶苑脚本下载中分为三种模型:浙江茶苑挂...
每日必看!同城约战透视挂功能软... 每日必看!同城约战透视挂功能软件,同城约战真是真的是有透视挂软件1.同城约战 选牌创建新账号,点击进...
普及知识!全民内蒙古麻将辅助器... 普及知识!全民内蒙古麻将辅助器功能方法,全民内蒙古麻将竟然真的有辅助器方法1)全民内蒙古麻将辅助插件...
揭秘攻略!经典比鸡透视挂功能工... 揭秘攻略!经典比鸡透视挂功能工具,经典比鸡果然真的是有透视挂工具1、完成经典比鸡辅助器v3.3的残局...
每日必看!英豪娱乐城开挂功能插... 每日必看!英豪娱乐城开挂功能插件,英豪娱乐城一直真的是有开挂插件1、英豪娱乐城免费脚本咨询教程、英豪...
推荐一款!决胜麻将胡易透视功能... 推荐一款!决胜麻将胡易透视功能软件,决胜麻将胡易总是存在有透视软件一、决胜麻将胡易游戏安装教程牌型概...
揭秘真相!同乐网游开挂功能方法... 揭秘真相!同乐网游开挂功能方法,同乐网游真是有开挂方法1、同乐网游脚本辅助下载、同乐网游免费透视脚本...
推荐十款!河洛杠次透视功能攻略... 推荐十款!河洛杠次透视功能攻略,河洛杠次其实真的是有透视攻略所有人都在同一条线上,像星星一样排成一排...
实测分享!五喜休闲辅助功能技巧... 实测分享!五喜休闲辅助功能技巧,五喜休闲好像真的有辅助技巧1、完成五喜休闲有辅助插件,帮助玩家取得所...
解密关于!微玩体育开挂功能软件... 解密关于!微玩体育开挂功能软件,微玩体育本来是真的有开挂软件1、微玩体育模拟器是什么优化,微玩体育俱...