A-A+

ROS与Matlab系列:一个简单的运动控制

2016年06月14日 ROS 评论 20 条 阅读 9,218 次

Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务。

如何利用matlat和ROS不同的优势,协同进行机器人设计与仿真?

如何用matlat程序通过ROS直接控制物理世界中的机器人?

我们进行了初步的尝试,并在这里把设计过程中遇到的一些问题及解决方案与大家分享!

1.  系统配置

VM虚拟机运行Ubuntu和ROS系统,称为主机,假设ip地址为192.168.1.101。

Windows主机运行matlab2015以上版本,称为从机,假设ip地址为192.168.1.100。

2.  虚拟机网络设置

首先检查虚拟的网络设置,设置为“桥接模式”并勾选下面的“复制主机连接状态”。

windows主机联网后,DHCP给自动为主机和虚拟机分配ip地址。如果没有网络的话,一个简单的做法是可以通过手机开一个热点(无需连接internet),主机连上热点后会自动分配好ip地址。

虚拟机下输入ifconfig命令,获取ip地址,比如192.168.1.101。

windows下输入ipconfig命令,获取ip地址,比如192.168.1.100。

 

3.  检查WINDOWS与Ubuntu网络是否联通

Matlab的Robotics System Toolbox与Ubuntu下的ROS通信并工作,首先必须保证WIN主机与UBUNTU主机的网络可达性。通常我们通过创建局域网,将两主机置于同一子网内。主机网络设置好后可通过PING工具检测网络可达性。

注意!windows需关闭防火墙

4.  设置ROS环境变量(此处是重点!)

Master以及两主机间的各node之间的正确通信必须设置相应的环境变量,以保证node能找到master进行注册等操作,以及node使用正确的地址发布TOPIC和宣告SERVICE。所以需要在没有运行master的主机设置ROS_MASTER_URI变量,并在两主机上设置ROS_IP环境变量。

注意这里应使用ROS_IP而非ROS_HOSTNAME,是因为WINDOWS常常不能将计算机名解析成IP地址以致连接失败。两台机器都是Linux主机用ROS_HOSTNAME是木有问题的。

ROS_MASTER_URI:若roscore在其他机器上运行,则需要将ROS_MASTER_URI设置为运行roscore主机的ip,node就能以此与master建立连接进行通信及数据交互。

ROS_IP:变量对所运行的主机上的node起作用,node的TOPIC与SERVICE都发布到此地址上。

操作:

在主机上,在~/.bashrc文件中添加:

export ROS_IP=192.168.1.101

保存退出,重开终端,运行master(ROS环境变量脚本已经source):

roscore

运行一个简单的turtle例程。

rosrun turtlesim turtlesim_node

在从机上,打开mablab,进行环境变量设置。在命令窗口输入:

setenv('ROS_MASTER_URI','http://192.168.1.101:11311')

setenv('ROS_IP','192.168.1.100')

初始化全局node:

rosinit()

5.  在matlab下操作ROS

文件:testROS.m

在matlab查阅下topic列表

rostopic list

会出现以下显示

/rosout

/rosout_agg

/turtle1/cmd_vel

/turtle1/color_sensor

/turtle1/pose

在matlab下显示topic内容

rostopic echo /turtle1/pose

若果出现以下内容,恭喜你!数据已经读到matlab里了。

X               :  5.544444561

Y               :  5.544444561

Theta           :  0

LinearVelocity  :  0

AngularVelocity :  0

 

---

注意,以上显示会刷屏,按ctrl+c停止显示。

查看topic数据类型等信息:

rostopic info /turtle1/cmd_vel

显示:

Type: geometry_msgs/Twist

 

Publishers:

 

Subscribers:

* /turtlesim (http://192.168.1.101:37723/)

接下来我们尝试下在matlab里发送消息给小海龟。

首先设置消息类型为geometry_msgs/Twist

cmdpub = rospublisher('/turtle1/cmd_vel',rostype.geometry_msgs_Twist)

pause(3) % Wait to ensure publisher is setup

cmdmsg = rosmessage(cmdpub);

cmdmsg.Linear.X = 10;

cmdmsg.Angular.Z = 15;

send(cmdpub,cmdmsg)

chatterpub = rospublisher('/chatter',rostype.std_msgs_String)

pause(3) % Wait to ensure publisher is setup

chattermsg = rosmessage(chatterpub);

chattermsg.Data = 'hello world'

send(chatterpub,chattermsg)

pause(5)

看到小海龟动了没?

当然也可以发布其他topic

1

6.  在simulink下控制ROS小海龟

文件:testControlTurtle.slx

2

接下来我们设计一个小控制器,来控制小海龟平滑地运动到指定位置。

首先按照上一节的步奏,启动ROS节点,并检查连通性。

运行testControlTurtle.slx

并设置小海龟的期望位置x,y(可在线修改,范围1~15)

3

速度是一个简单的比例控制器控制运动速度Linear.X

航向控制通过计算小海龟与目标连线的角度(Line of sight)控制转动速度Angular.Z

Enjoy it!

4

文件下载链接:http://pan.baidu.com/s/1sl8C01n

 

下一篇:ROS与Matlab系列:vrep仿真器中的无人机视觉控制

更多详细参考:见Matlab帮助

Robot Operating System (ROS)

Connecting to a ROS Network

Communicating with the TurtleBot

 

作者:Top Liu
感谢poyoten解决网络通信问题
转载请注明出处exbot.net

 

标签:

20 条留言  访客:19 条  博主:0 条   引用: 1 条

  1. rosbee

    参考本文做的,加入了实时的部分:http://pan.baidu.com/s/1hrK1rH6

    • top

      哇,好棒,我研究下

  2. rosbee

    仿照做了一个:http://pan.baidu.com/s/1hseekVq

  3. 蒋梓

    请问网盘链接能再发一次吗,对这方面很感兴趣,也希望能认真学习一下,期待回复

  4. Julian

    您好,百度网盘的连接失效了,帮忙更新下好吗?很喜欢您的东西,拜读一下

  5. 彼得

    您好!我们是新加坡科促会,我们对你在Matalab与ROS的应用方面的实践非常感兴趣。想委托您做一些这方面的试验。酬劳从优。如果可以请回复。谢谢。 -- 彼得

  6. heat

    很赞!谢谢博主!想请教一下给的demo中对与y和z的控制是不是不必要的?2维的turtle只需要两个控制量(x和angle.z)

  7. ansong

    您好,请问下matlab版本要求是什么,ros的话exbot的镜像可以吗

  8. tom

    我用matlab 2015a打不开testControlTurtle.slx这个文件啊?lz能帮忙给个可以用的吗?

    • top

      2015b 2016a可用

      • 独钓寒江雪

        你好,就是我想问一下,我按照你的方法试了,但是在MATLAB中一直无法连接到ros的主机,但是在虚拟机中是可以实现的,不知道是哪里出了问题,两个主机都可以互相ping 通。两个主机的ip地址是10.54.5.98 10.54.5.195 他们在同一个网段中。

  9. opan08

    为什么需要这样做?是因为运行ros的主机并没有足够的资源运行matlab吗?求解答,谢谢!

  10. 空中机器人

    你好,有个问题跟您请教下。我用来两台电脑,一台装ubuntu14.04,一台运行matlab,按照您的方法,可以实现对turtle的控制。但是matlab程序能显示topic的名称和信息,用echo显示topic的数据时,matlab就没有反应了,我看网络链接里,网络数据也没有变化。您遇到过吗

    • poyoten

      对照第4点,确认ubuntu的ROS_IP设置,一定要重开终端让.bashrc执行。

      • rosmeme

        我也遇到了相同的问题,互相ping ip都是通的,rosnode info 对方信息也是对的,就是在matlab用rostopic echo没有反应啊。

    • top

      windows关闭防火墙

  11. zhangrelay

    好优美的弧线

    • cyy

      网盘链接失效了,能麻烦更新一下吗?

    • cyy

      网盘链接失效了,请问是有新的链接文件吗?

来自外部的引用: 1 条

  • ROS与Matlab系列2:连接vrep仿真器 | ExBot易科机器人实验室

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: