• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS 与 MATLAB 通讯

人工智能 熊猫飞天 2148次浏览 0个评论

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

1 准备条件

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

<code class="prism language-cpp has-numbering"><span class="token function">license</span><span class="token punctuation">(</span><span class="token string">'checkout'</span><span class="token punctuation">,</span><span class="token string">'Robotics_System_Toolbox'</span><span class="token punctuation">)</span>
</code>

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

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 ”

<code class="prism language-cpp has-numbering">sudo vim <span class="token operator">/</span>etc<span class="token operator">/</span>hosts
</code>

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

<code class="prism language-cpp has-numbering">roscore
</code>

2.2 matlab端设置

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

<code class="prism language-cpp has-numbering"><span class="token function">setenv</span><span class="token punctuation">(</span><span class="token string">'ROS_MASTER_URI'</span><span class="token punctuation">,</span><span class="token string">'http://10.5.3.11:11311'</span><span class="token punctuation">)</span>
rosinit
</code>

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

<code class="prism language-cpp has-numbering">rostopic list
</code>

这时候就可以看大有一个‘/rosout’ 和‘/rosout_agg’的话题:
ROS 与 MATLAB 通讯   你可以在matlab端使用命令 “help robotics.ros” 来查看相关命令

<code class="prism language-cpp has-numbering">help robotics<span class="token punctuation">.</span>ros
</code>

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

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

3 用例测试

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

<code class="prism language-cpp has-numbering">roslaunch pr2_gazebo pr2_empty_world<span class="token punctuation">.</span>launch
</code>

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

<code class="prism language-cpp has-numbering"><span class="token function">setenv</span><span class="token punctuation">(</span><span class="token string">'ROS_MASTER_URI'</span><span class="token punctuation">,</span><span class="token string">'http://10.5.3.11:11311'</span><span class="token punctuation">)</span>
rosinit
rostopic list
</code>

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

<code class="prism language-bash has-numbering">rostopic list 
</code>

2)查看topic 信息

<code class="prism language-bash has-numbering">rostopic info /torso_lift_imu/data
</code>

3)打印topic 信息

<code class="prism language-bash has-numbering">rostopic <span class="token keyword">echo</span> /torso_lift_imu/data
</code>

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

<code class="prism language-bash has-numbering"><span class="token operator">>></span> laser <span class="token operator">=</span> rossubscriber<span class="token punctuation">(</span><span class="token string">'/base_scan'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">>></span> scandata <span class="token operator">=</span> receive<span class="token punctuation">(</span>laser,10<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">>></span> plot<span class="token punctuation">(</span>scandata<span class="token punctuation">)</span>
</code>

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

<code class="prism language-bash has-numbering">chatterpub <span class="token operator">=</span> rospublisher<span class="token punctuation">(</span><span class="token string">'/chatter'</span>,rostype.std_msgs_String<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code>

2)填充数据

<code class="prism language-bash has-numbering">chattermsg <span class="token operator">=</span> rosmessage<span class="token punctuation">(</span>chatterpub<span class="token punctuation">)</span><span class="token punctuation">;</span>
 chattermsg.Data <span class="token operator">=</span> <span class="token string">'hello world'</span><span class="token punctuation">;</span>
send<span class="token punctuation">(</span>chatterpub,chattermsg<span class="token punctuation">)</span>
</code>

ROS 与 MATLAB 通讯   3)我们在ROS主机上运行

<code class="prism language-bash has-numbering">rostopic <span class="token keyword">echo</span> /chatter
</code>

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

4、参考资料

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


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS 与 MATLAB 通讯
喜欢 (0)

您必须 登录 才能发表评论!

加载中……