【ROS】實現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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM