MATLAB与ROS实现通信时将运行matlab的计算机当作一个ROS节点,同通过同一个局域网,实现与另一台运行有节点管理器的计算机建立通讯连接,从而实现与ROS网络中的所有节点的通讯连接。Ubuntu中用ifconfig查看IP,Windows中用ipconfig查看IP地址.注意虚拟机的话要训责桥接的网络模式,才可以在局域网中有个不冲突的IP
下面是步骤:
-
在Ubuntu的终端中输入以下命令打开~/.bashrc文件
sudo gedit ~/.bashrc
-
在打开的.bashrc文件的末尾增加下面的命令
export ROS_IP=192.168.1.117 (该IP是Ubuntu系统的IP)
-
在Windows的Matlab的命令窗口输入以下命令
setenv(\'ROS_MASTER_URI\',\'http://192.168.1.117:11311\') (该IP还是上述的Ubuntu系统的IP,最后的数字11311是端口号,是固定的这个值,不用改)
-
在Ubuntu中运行roscore命令,然后在Matlab中运行rosinit命令,此时就因该可以和Master主节点建立通讯.
-
可以运行简单的例子来测验一下,在Ubuntu中运行小乌龟,如下.
rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key
-
然后在matlab中输入以下命令,等待ROS传回消息.
rostopic echo /turtle1/pose
-
此时再在ROS平台上用键盘操控小乌龟的走向就可以将位置信息传回给matlab了,matlab会自动不断显示位置信息.
-
上面两个步骤是ROS操控传回消息到Matlab,下面通过在matlab上运行命令,实时操作ROS上的小乌龟.同样现在ROS上运行roscore,再打开小乌龟节点.
-
在matlab建立如下的脚本文件,并运行,就可以看到ROS平台上的小乌龟的运动了.
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)
上述的步骤中实现了matlab到ROS的通信,和ROS到matlab的双向通信问题.
注意:在每次运行Matlab后都要在命令窗口之中运行下面两句命令
setenv(\'ROS_MASTER_URI\',\'http://192.168.1.117:11311\')
rosinit
请发表评论