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)
之后就可以看见小海龟的