Matlab:强大的数据处理,可视化绘图,成熟的算法函数,Simulink控制系统设计。
ROS:标准化机器人系统软件框架。可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务。
(1)系统配置
ROS系统(Ubuntu),主机host,ip: 192.168.1.101 (ifconfig)。
matlab2015(Windows),从机,ip: 192.168.1.101 (ipconfig)。
(2) WINDOWS与Ubuntu是否通讯
为保证Matlab的Robotics System Toolbox与Ubuntu下ROS通信并工作,首先要创建局域网,将两主机置于同一子网内,用PING检测网络可达性。
(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文件中添加:
1 |
export ROS_IP=192.168.1.101 |
保存退出,重开终端,运行master:
1 |
roscore |
运行一个简单的turtle例程。
1 |
rosrun turtlesim turtlesim_node |
在从机上,打开mablab,进行环境变量设置。在命令窗口输入:
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列表
1 |
rostopic list |
会出现以下显示
1 |
/rosout |
2 |
/rosout_agg |
3 |
/turtle1/cmd_vel |
4 |
/turtle1/color_sensor |
5 |
/turtle1/pose |
在matlab下显示topic内容
1 |
rostopic echo /turtle1/pose |
若果出现以下内容,恭喜你!数据已经读到matlab里了。
1 |
X : 5.544444561 |
2 |
Y : 5.544444561 |
3 |
Theta : 0 |
4 |
LinearVelocity : 0 |
5 |
AngularVelocity : 0 |
6 |
|
7 |
--- |
注意,以上显示会刷屏,按ctrl+c停止显示。
查看topic数据类型等信息:
1 |
rostopic info /turtle1/cmd_vel |
显示:
1 |
Type: geometry_msgs/Twist |
2 |
|
3 |
Publishers: |
4 |
|
5 |
Subscribers: |
6 |
* /turtlesim (http: //192.168.1.101:37723/) |
接下来我们尝试下在matlab里发送消息给小海龟。
首先设置消息类型为geometry_msgs/Twist
01 |
cmdpub = rospublisher( '/turtle1/cmd_vel' ,rostype.geometry_msgs_Twist) |
02 |
pause(3) % Wait to ensure publisher is setup |
03 |
cmdmsg = rosmessage(cmdpub); |
04 |
cmdmsg.Linear.X = 10; |
05 |
cmdmsg.Angular.Z = 15; |
06 |
send(cmdpub,cmdmsg) |
07 |
chatterpub = rospublisher( '/chatter' ,rostype.std_msgs_String) |
08 |
pause(3) % Wait to ensure publisher is setup |
09 |
chattermsg = rosmessage(chatterpub); |
10 |
chattermsg.Data = 'hello world' |
11 |
send(chatterpub,chattermsg) |
12 |
pause(5) |
看到小海龟动了没?
当然也可以发布其他topic
6. 在simulink下控制ROS小海龟
文件:testControlTurtle.slx
接下来我们设计一个小控制器,来控制小海龟平滑地运动到指定位置。
首先按照上一节的步奏,启动ROS节点,并检查连通性。
运行testControlTurtle.slx
并设置小海龟的期望位置x,y(可在线修改,范围1~15)
速度是一个简单的比例控制器控制运动速度Linear.X
航向控制通过计算小海龟与目标连线的角度(Line of sight)控制转动速度Angular.Z
Enjoy it!