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

转自: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

6.  在simulink下控制ROS小海龟

文件:testControlTurtle.slx

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

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

运行testControlTurtle.slx

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

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

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

Enjoy it!

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

ROS与Matlab系列:一个简单的运动控制的更多相关文章

  1. 利用matlab写一个简单的拉普拉斯变换提取图像边缘

    可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 ​ 其中,在 x 方向可近似为 ​ 同理,在 y 方向上可近似为 ​ 于是 我们得到满足以上三个 ...

  2. ROS学习笔记11-写一个简单的服务和客户端(C++版本)

    本文主要来源于:http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29 写一个服务节点.在创建消息和服务中,我们创建了一 ...

  3. ROS学习笔记10-写一个简单的订阅者和发布者(C++版本)

    本文档来源于:http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 写发布者节点如前所述,节点是连接到RO ...

  4. Python函数系列-一个简单的生成器的例子

    def consumer(): while True: x = yield print('处理了数据:',x) def producer(): pass c = consumer() #构建一个生成器 ...

  5. k8s系列----一个简单的例子

    本实验来自k8s权威指南 解决访问demo出错,关键是靠https://www.cnblogs.com/neutronman/p/8047547.html此链接下面的某个大神的评论 主要yaml文件 ...

  6. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  7. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  8. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  9. VS Extension+NVelocity系列(一)——构建一个简单的NVelocity解析环境

    一.前言 本节我们将实际实现一个简单的NVelocity解析环境,以便为以后的实例做一些基本工作,虽然NVelocity如何使用已经属于老掉牙的话题,但我只能专门挑出来一章来做铺垫.人生就是这样无奈啊 ...

随机推荐

  1. iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多

    iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况.同vmstat一样, ...

  2. iOS 检查指定日期是否在当前日期之前

    iOS检查指定日期是否在当前日期之前, 直接上代码: - (BOOL)checkProductDate: (NSString *)tempDate { NSDateFormatter *dateFor ...

  3. 【VS外接程序】利用T4模板生成模块代码

    引言 记得第一次做asp.net mvc项目时,可以用model直接生成Html的增删改查页面, 没什么特殊要求都可以不用修改直接用了, 觉得很神奇,效率太高了.后来在做客户端开发时,发现很多模块都是 ...

  4. JS循环遍历JSON数据的方法

    JSON数据如:{"options":"[{/"text/":/"王家湾/",/"value/":/" ...

  5. python 获取本机ip地址的方法(Unix 平台)

    #!/usr/bin/python import socket import fcntl import struct def get_ip_address(ifname): s = socket.so ...

  6. JSDoc 介绍

    什么是JSDoc JSDoc是一个根据javascript文件中注释信息,生成JavaScript应用程序或库.模块的API文档 的工具.你可以使用他记录如:命名空间,类,方法,方法参数等.类似Jav ...

  7. IntellJ IDEA快捷键汇总

    今天开始使用IDEA,各种不习惯,一会Eclipse一会IDEA来回切换,需要一个熟悉的过程,记录一下常用的快捷键. IDEA常用快捷键 Alt+回车 导入包,自动修正Ctrl+N  查找类Ctrl+ ...

  8. 洛谷【P1140】相似基因

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  9. 检测一个DLL文件是x64还是x86

    对于一个DLL,我们如何判定其是32位的还是64位的,或者是any cpu的platform? Visual Studio提供了一个很好的工具:corflags,这个是内嵌到Developer Com ...

  10. 蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值

      算法训练 6-1 递归求二项式系数值   时间限制:10.0s   内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据 ...