新建   文章列表   相册  后台  网摘
 

Kreos

Kreos 无所不能

古月-Matlab与ROS连接(学习笔记)

 

收录于 · 古月居
123 人赞同了该文章

众所周知,Matlab是一款强大的数据处理工具,在科研、教学、商业领域广泛应用。Matlab有一个工具箱,几乎和哆啦A梦的口袋差不多,可以提供丰富而强大的扩展功能,其中就包含robotics工具箱,提供许多机器人开发工具,当然也包括ROS相关的功能,这就为ROS和Matlab的联合使用提供了强有力的支持。

一、ROS-MATLAB是什么

Matlab中的robotics system toolbox提供了ROS的大部分功能,可以通过Matlab启动ROS Master、创建ROS节点、发布ROS消息/服务、查看ROS话题数据、控制ROS机器人等,更重要的是可以结合Matlab强大的功能,实现机器人算法设计,然后接入ROS系统,配合gazebo或者V-REP完成仿真。我们将这个Matlab中的ROS工具包简称为ROS-MATLAB。

下图是ROS-MATLAB和机器人系统的通信框架,从中可以看到,Matlab拥有强大而丰富的算法功能包(视觉处理、控制系统、信号处理等);通过ROS-MATLAB可以获取机器人的数据,处理之后再将控制指令发送给机器人。简而言之,ROS-MATLAB让Matlab成为了机器人强大的计算后台。

ROS-MATLAB在Matlab2013之后的版本才有,而且需要Matlab安装robotics systemtoolbox,可以在官网下载安装。

二、ROS-MATLAB可以做什么

那么ROS-MATLAB到底可以实现哪些ROS的功能?在Matlab的命令窗口中,输入以下帮助命令:

>> help robotics.ros

如果工具箱安装没有问题的话,可以看到如下图所示的命令列表,每个命令后边都有相应功能的说明。

可以看到,ROS-MATLAB 提供了ROS大部分的命令。我们首先通过一个简单的例程对ROS-MATLAB有个大致的了解。

运行例程的第一步是什么?当然是把ROS Master跑起来,在Ubuntu系统中我们使用的是roscore命令,而在Matlab里需要使用rosinit命令:

>> rosinit

运行成功会看到日志信息:

然后使用以下命令运行例程 exampleHelperROSCreateSampleNetwork:

>> exampleHelperROSCreateSampleNetwork

稍等片刻后例程就会启动,使用rosnode、rostopic命令可以看到节点和话题信息:

是不是有一种在Ubuntu系统下的穿越感,仿佛是一个运行在Windows下的虚拟机。

三、连接Matlab和ROS

上小节的例程在Matlab中运行了ROS Master和node,在实际使用中,我们还需要将Matlab连接到ROS系统的网络中。

1. 确定IP地址

首先需要确定运行Matlab和ROS的两台计算机的IP地址(必须在同一网络下)。笔者运行Matlab的计算机操作系统是Windows 7,使用ipconfig命令,可以找到如下图所示的IP地址。

ROS运行在笔者Windows 7下的Ubuntu虚拟机中,通过bridge桥接的方式联网,在Ubuntu系统中使用ifconfig命令,可以找到如下所示的IP地址。

2. 在Matlab中设置IP

然后,在Ubuntu中运行roscore命令,并在Matlab中设置ROS Master的路径,类似于多计算机运行ROS系统时的配置:

>> setenv('ROS_MASTER_URI','http://192.168.0.10:11311')
>> rosinit

3. ROS --> Matlab

路径配置完成后,检查通信是否建立。先在Ubuntu中启动一个talker:

$ rosrun roscpp_tutorials talker

接着在Matlab中查看话题和节点列表:

>> rosnodelist
>> rostopiclist

Matlab已经找到talker发布的话题了,可以使用rostopic echo命令查看具体的消息数据。

4. Matlab --> ROS

在Matlab中同样可以编写节点并发布数据,一个简单的talker节点实现如下:

>> chatpub = rospublisher('/talker', 'std_msgs/String');
>> msg = rosmessage(chatpub);
>> msg.Data = 'Hello, From Matlab';
>> send(chatpub,msg);
>> latchpub =rospublisher('/talker', 'IsLatching', true);

如果使用.m文件保存以上代码,可以将所有命令保存到一个.m文件中,例如matlab_ros/talker.m:

%Setting ROS_MASTER_URI
setenv('ROS_MASTER_URI','http://192.168.1.202:11311')
%Starting ROS MASTER
rosinit

%Creating ROS publisher handle
chatpub = rospublisher('/talker', 'std_msgs/String');
%This is to create the message definition
msg = rosmessage(chatpub);
%Inserting data to message
msg.Data = 'Hello, From Matlab';
%Sending message to topic
send(chatpub,msg);
%Latching the message on topic
latchpub = rospublisher('/talker', 'IsLatching', true);

然后在Matlab中打开该文件,点击菜单栏中的Run即可运行:

在Ubuntu中,查看话题列表和消息内容,可以看到如下打印信息:

至此,我们大概了解了ROS-MATLAB的概念和使用方法,又打开了一扇新世界的大门。


更多内容可关注微信公众号:古月居 (guyue_home)
或访问古月居网站:

 

发布于 2018-07-24 19:06
 

posted on 2026-03-27 13:47  前沿风暴  阅读(1)  评论(0)    收藏  举报

导航


校内网 © 2004-2026

京公网安备 33010602011771号 京ICP备2021040463号-3