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