ROS和Matlab的简单联调

(1)系统配置

ROS系统(Ubuntu),主机host,ip: 192.168.1.1 (ifconfig)。

matlab2015(Windows),从机,ip: 192.168.1.101 (ipconfig)。

(2) WINDOWS与Ubuntu是否通讯

为保证Matlab的Robotics System Toolbox与Ubuntu下ROS通信并工作,首先要创建局域网,将两主机置于同一子网内,用PING检测网络可达性。注意虚拟机要用HOST虚拟网卡。

同时要检查好防火墙,确保不对Matlab拦截。

(3) 设置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:

roscore
运行一个简单的turtle例程。

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

rosrun turtlesim turtle_teleop_key %键盘控制

1
setenv(‘ROS_MASTER_URI’,’192.168.1.101′)
2
setenv(‘ROS_IP’,’192.168.1.100′)
初始化全局node:

1
rosinit()
(4)在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)

之后就可以看见小海龟的

    原文作者:王啟凡
    原文地址: https://www.jianshu.com/p/0b572b8095d7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞