分享好友 编程语言首页 频道列表

ROS与Matlab系列:一个简单的运动控制 基于matlab的运动控制系统

matlab  2023-02-10 10:300
转自:http://blog.exbot.net/archives/2594

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

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

6.  在simulink下控制ROS小海龟

文件:testControlTurtle.slx

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

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

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

运行testControlTurtle.slx

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

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

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

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

Enjoy it!

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

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

查看更多关于【matlab】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
如何在Abaqus的python中调用Matlab程序
目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误

0评论2023-03-16608

matlab 遍历结构体struc的成员
MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。表4.3.1 结构数组的操作函数函数名             功能描述 deal                 把输入处

0评论2023-02-09712

matlab编程如何换行 matlab怎么换行
空格+三个点+逗号

0评论2023-02-09691

C/C++中调用matlab引擎计算 matlab转c
原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的

0评论2023-02-09451

matlab几何纠正,间接法,双线性内插
超简洁,超级快,两个文件datapre.m文件代码:global X;global Y;global A;global l;global i;global I;global m;global n;global k;global dx;  A=[];l=[];i=0;m=[];n=[];dx=[]; fig=figure;subplot(1,2,1);I=imread('编程实习2-待纠正图像.bmp');imshow(I

0评论2023-02-09482

Matlab 根号的输入
二次根号:sqrt(a)或a^0.5三次根号:x^(1/3)或者x.^(1/3)根据x的数据结构类型矩阵、数组需要.^

0评论2023-02-09969

命令视频Matlab下查看摄像头设备信息
时间紧张,先记一笔,后续优化与完善。    应用如下2个命令:         info = imaqhwinfo('winvideo')    每日一道理 俄国作家契诃夫说:“有大狗,有小狗,小狗不该因为大狗的存在而心慌意乱。所有的狗都应该叫,就让他各自用上帝给他的声音

0评论2023-02-09957

How to use the HMM toolbox (Matlab)
一、离散输出的隐马尔科夫模型(DHMM,HMM with discrete outputs)最大似然参数估计EM(Baum Welch算法)The script dhmm_em_demo.m gives an example of how to learn an HMM with discrete outputs. Let there be Q=2 states and O=3 output symbols. We c

0评论2023-02-09459

permutation 随机置换检验的Matlab程序
假定a为某指标在10个样本中的值,5个一组,看以两组均值的差为例(统计量),随机置换检验程序 example: a: 230 -1350 -1580 -400 -760 970 110 -50 -190 -200v1=sum(a(1:5))/5;v2=sum(a(6:10))/5;T=abs(v1-v2);x=perms(a);      %矩阵a的全排列(随机全

0评论2023-02-09662

MATLAB学习1 之画图函数
ezplot适用条件“ezplot”命令可以用于显函数、隐函数和参数方程作图。不同函数的使用格式显函数y=f(x),ezplot函数的调用格式为ezplot(f, [xmin xmax]);              例:ezplot(\'sin(10*pi*x)/x\',[1 2]);%画出函数曲线隐函数f(x,y)=0,ezplot函数的

0评论2023-02-09591

Matlab 之 数据元素访问
Matlab的含义是矩阵实验室,其特征之一就是数据的向量化操作,借此提升软件运行效率。那么,必然会涉及数据元素的访问。Matlab主要支持下面一些形式的访问:(1)array-inde: A(i)(2)cell-index: C{i}(3)struct field: S.fieldname不同的访问方式,效

0评论2023-02-09994

matlab遍历文件夹下所有图片和遍历所有子文件夹下图片
做图像处理实验,经常需要遍历当前文件下所有图片。matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的。函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文件的目的了。具体实现见下面程序:imgPath = 'E:/ima

0评论2023-02-09630

更多推荐