首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

去热爱一件事——学习记录之Matlab与ROS通信

做一些想做的事情,遇到一些坑,去填,去改变思路,去解决,收获技能点。

科研文章这东西真的会令人烦躁,因此这段时间暂时放下自己的研究方向,尝试着将Simulink里实现的算法在ROS小车实现。首先想到了使用(除了生孩子不会,啥都会)Simulink在局域网中与ROS话题进行通信(归根结底是进行数据间的传输),然后了解到Simulink能自动生成ROS框架的代码以直接部署进小车,然后踩了一些坑,初步实现。

Simulink与ROS通信

Matlab的方便之处就是拥有Simulink这个强大的功能,可以模块化,可拖拽实现所需的算法。仔细浏览Simulink的模块库,会惊喜地发现Simulink里包含ROS的大多模块,可以通过这些模块与同一局域网的ROS-MASTER进行通信。

首先确定搭建局域网的方式(这里用两台电脑(带有Matlab的和Ubuntu的)连接同一个热点)。首先开启roscore,确定Ubuntu端ROS的ip地址。

根据获得的ip地址,在Matalb的命令行窗口输入下述两个命令:setenv('ROS_MASTER_URI','ip');

rosinit;

命令行不出现报错,一般连接成功,在Ubuntu端开启小乌龟进一步验证。

到此便可以实现Matlab与Ros的通信,观察话题的结构是否可以订阅消息,发布消息等等(ROS的相关知识)。从列出的话题看,带有cmd_vel一般可以实现控制,即本例子中/turtle1/cmd_vel,下面由这个话题出发让小乌龟运动。

首先,要有一个逻辑框架,控制乌龟运动需要三个要素:怎样运动(接收的数据格式);如何传输(发布);怎样通信(已解决)。这些在Simulink中都有现成的模块,第一个要素便对应着Blank Message模块,第二个要素便对应着Publish模块。

对于BlankMessage模块,需要做的是选择数据格式,然后利用Bus Assigment(Simulink的总线模块之一)解析输入输出。Matlab已经连接上ROS,可以直接在命令行中(rostopic info /turtle1/cmd_vel)查看话题所需要的格式。

双击Blank Message模块,设定数据格式,连接Bus Assignment选择要输入的信号。

geometry_msgs/Twist消息解释如下:

对于本例中,仅使用线速度的X方向,角速度的Z方向,来控制Ubuntu端的小乌龟进行圆周运动。在Publish模块选择对应的话题,本例中即/turtle1/cmd_vel。

最后连接好模块,输入数值,进行测试,便能实现控制Ubuntu端的小乌龟运动。

但这种方式会存在通信延迟,因此将代码部署到目标客户端更优越。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OvhENKyxB3bVCVpftAh9XMGA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券