打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ROS+MATLAB连接配置

转自:http://blog.163.com/myfzh@126/blog/static/35048490201642732142416/

我在美帝大农村读博搬砖,学着一个奇怪的专业,生物系统工程,搞生物的?不不不不,搞拖拉机的,农业机器人方向(拖拉机维修与制造)。上个月偶尔从老板教的一门课中得知一个听起来特别高贵的平台ROS(RobotOperating System),正巧又从老板手中抢了一个淘宝款的雷达(别问我外导是怎么搞到淘宝雷达的)来玩,作为他课程的期末设计作业。

 

看了下这款叫做RPLIDAR的雷达官网,SDK主要有三块,Arduino的驱动程序,C++SDK,和ROSSDK。我和小伙伴三人想着用这个雷达和实验室的一辆小卡车做一个扫描地图并且壁障到达某目标点的项目,本着从简到难试的方法先搞了Arduino,但是小单片机的处理能力实在不足够支撑每秒2000点数据的雷达,C++可以搞定数据,可是实现其可视化不是那么直接,我还是心心念着最最方面和熟悉的MATLAB

 

MATLAB在它的Robotic tool box 中已经支持ROSROS能很有效的管理机器人的各个部分,而MATLAB又是数据可视化和快速开发的利器,正好趁此机会,学习一下怎么将这两个整合到一起使用,在摸索的过程中发现目前中文有关此的资料较少,因此将我的探索过程记下,一来能够给自己做个归档,二来也希望能够帮助到更多人。

 

本文主要涉及:

ROSMATLAB中的基本配置

ROSLINUX下的基本配置

MATLAB ROSLINUX下的ROS的连接

 

系统配置:

Windows 10 装有 MATLAB以及VMware

VMware 中的Ubuntu 14.04 ROSIndigo.

(Indigo 不支持Ubuntu 16.04,最新出的ROSKinect支持)

如果在不支持的Ubuntu版本上装ROS会浪费你大概1小时时间

(嗯,别问我怎么知道的)

 

好的,我们开始

Matlab:

MATLABROS相关的材料在该网页中,特别的详细,可以一步步照着做,有坑的地方我会在下面提及。

http://www.mathworks.com/help/robotics/robot-operating-system-ros.html

MATLAB 中输入

         rosinit

便可以启动ROS,需要注意的是很多Academic 版本LicenseMATLAB并不包含  Robotic tool box 的许可,即使你安装了这个工具包,在输入上述命令的时候它也会提示你找不到变量。因此请核实是否有该TOOLBOX的许可。

 

Linux ROS:

ROS 的官网也提供了非常详细的ROS介绍,和相关的教程,浏览对学习ROS非常有帮助。http://wiki.ros.org/

根据以下步骤,完成ROSUbuntu上的安装

http://wiki.ros.org/ROS/Installation

ROS主要的概念涉及到,

主机Master: 负责全面的管理节点之间的通讯和地址,一个ROS网络一般只有一个MASTER

节点 Nodes : 这个是ROS中最重要的概念,所有的传感器和机器人部件都被虚拟化成节点,一个ROS网络可以有很多节点,一台HOST可以创建多个节点,包括创建MasterHOST

通讯方式有两种:

1、  PublisherReceiver 节点通过topic进行通讯

2、  Service完成通讯


一旦网络建立完成,节点和节点之间可以不通过Master进行连接。

 

关于ROS的相关知识,我也在努力学习中,大家可以进一步通过它官网的WIKI进行学习。本文主要要讲的是怎么进行它与MATLAB的连接,通过虚拟机。

 

1、  首先,检查网络配置

http://wiki.ros.org/ROS/NetworkSetup

ROS官网上有关于网络配置的教程,但是检查网络配置中的netcat并不支持windows系统。

因此请先检查虚拟机中的Ubuntu是否能够ping成功主机。

主机是否能够ping到虚拟机。

我采用的是虚拟机有两块虚拟网卡的方法,一块通过NAT进行互联网连接,另一块通过host-only进行和主机之间的连接(应该只有NAT也能够正常连接主机)

Ubuntu下用ifconfig找到它的IP地址

 

Windows下用ipconfig确定ip地址

 

 

确保能够相互ping成功。

 

2、                 检查防火墙!确定防火墙没有对MATLAB的行为进行拦截。

如果防火墙有拦截,很有可能你能够相互Pingt通,并且甚至能够让MATLABROS连接上UbuntuROS,但是一点数据都收不到,然后又一个下午浪费在这里(也别问我怎么知道的),如果之后连接不成功又不确定是不是防火墙的问题,可以先关了整个防火墙试试。

 

 

3、   非常重要的一步,设置ROS的主机名称

ROS默认会用你电脑的局域网名称来进行相互的连接,通常来说在一个有DHCP设置好的局域网中是没有问题的,但是往往情况并不是这样。在这种没法解析电脑名称的情况下,用IP地址连接,最为可靠。

ROS有三个重要的名称

'ROS_MASTER_URI'ROS 将要连接的 Master主机的名称地址
'ROS_HOSTNAME':本机ROS的名称地址
'ROS_IP':本机ROSIP,也是一个名称,在存在HOSTNAME的情况下略过
 

MATLAB中可以通过getenv

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

来查看,并且通过来设置setenv

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

 

Ubuntu下,可以通过echo 来查看

echo ROS_HOSTNAME

并且通过赋值来更改

export ROS_HOSTNAME=10.0.0.1 # Correct the fact that artoo doesn't know its name

特别注意:

Bash下的赋值,仅对改工作的terminal有效,在另外的terminalROS_HOSTNAME值依然为默认,因此你需要在每个将要进行roscorerosrun操作的terminal中对其进行赋值。

 

我采用的配置:

Ubuntu下:

export ROS_MASTER_URI=http://192.168.80.129:11311
export ROS_HOSTNAME=192.168.80.129
roscore #启动ROS

 

MATLAB下:

setenv('ROS_MASTER_URI','http://192.168.80.129:11311')
setenv('ROS_IP','192.168.80.1')
rosinit('http://192.168.80.129:11311') #启动ROS

本例中,Ubuntu ROS开启MasterMATLAB连接到UbuntuROS中,你也可以反过来做,但是记住一个ROS网络只能有一个ROSMaster.

启动之后,理论上你已经能够通过任何一个ROS中的

rosnode list

 看到两台ROSnodes

rosnode list
/matlab_global_node_33333 #nodematlab创建
/rosout #nodeubuntu ros创建

分别在两个ROS中,使用

rosnode info 对 方 node

如果一切都没问题的话,你能够看到对方node的相关信息,和网络地址,并且没有错误提示。

Example:

 

 

如果发现连接错误,并且Node的地址中包含主机名的话,很可能是你名称设置部分没有做好。
                至此,连接全部完成。

 

我们来看一个获取数据的例子:

Ubuntu ROS下建立基本教程中的乌龟node,并且利用键盘控制它行动(具体参见ROSWIKI最初教程)

$ rosrun turtlesim turtlesim_node
 
$ rosrun turtlesim turtle_teleop_key #用键盘控制

MATLAB下:

rostopic echo /turtle1/cmd_vel

接下来,每当你在Ubuntu中用方向键控制小乌龟,MATLAB中都获取到你的指令信息

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ubuntu搭建云平台
Ubuntu Server 16.04修改IP、DNS、hosts
ubuntu部署puppet详细步骤(转载请注明出处)
app.use() 实现referer请求头 图片防盗链
电脑与Linux开发板搭建NFS文件系统——网线直连
zookeeper适用场景:分布式锁实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服