【ROS】实现ROS与MATLAB之间的相互通信

实现ROS与matlab之间的相互通信问题。

MATLAB与ROS实现通信时将运行matlab的计算机当作一个ROS节点,同通过同一个局域网,实现与另一台运行有节点管理器的计算机建立通讯连接,从而实现与ROS网络中的所有节点的通讯连接。Ubuntu中用ifconfig查看IP,Windows中用ipconfig查看IP地址.注意虚拟机的话要训责桥接的网络模式,才可以在局域网中有个不冲突的IP

下面是步骤:

  1. 在Ubuntu的终端中输入以下命令打开~/.bashrc文件

    sudo gedit ~/.bashrc
    
  2. 在打开的.bashrc文件的末尾增加下面的命令

    export ROS_IP=192.168.1.117 (该IP是Ubuntu系统的IP)
    
  3. 在Windows的Matlab的命令窗口输入以下命令

    setenv(\'ROS_MASTER_URI\',\'http://192.168.1.117:11311\')  (该IP还是上述的Ubuntu系统的IP,最后的数字11311是端口号,是固定的这个值,不用改)
    
  4. 在Ubuntu中运行roscore命令,然后在Matlab中运行rosinit命令,此时就因该可以和Master主节点建立通讯.

  5. 可以运行简单的例子来测验一下,在Ubuntu中运行小乌龟,如下.

    rosrun turtlesim turtlesim_node
    rosrun turtlesim turtle_teleop_key
    
  6. 然后在matlab中输入以下命令,等待ROS传回消息.

    rostopic echo /turtle1/pose
    
  7. 此时再在ROS平台上用键盘操控小乌龟的走向就可以将位置信息传回给matlab了,matlab会自动不断显示位置信息.

  8. 上面两个步骤是ROS操控传回消息到Matlab,下面通过在matlab上运行命令,实时操作ROS上的小乌龟.同样现在ROS上运行roscore,再打开小乌龟节点.

  9. 在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