ROS技術點滴 —— Matlab中的ROS
來自專欄古月居40 人贊了文章
眾所周知,Matlab是一款強大的數據處理工具,在科研、教學、商業領域廣泛應用。Matlab有一個工具箱,幾乎和哆啦A夢的口袋差不多,可以提供豐富而強大的擴展功能,其中就包含robotics工具箱,提供許多機器人開發工具,當然也包括ROS相關的功能,這就為ROS和Matlab的聯合使用提供了強有力的支持。
一、ROS-MATLAB是什麼
Matlab中的robotics system toolbox提供了ROS的大部分功能,可以通過Matlab啟動ROS Master、創建ROS節點、發布ROS消息/服務、查看ROS話題數據、控制ROS機器人等,更重要的是可以結合Matlab強大的功能,實現機器人演算法設計,然後接入ROS系統,配合gazebo或者V-REP完成模擬。我們將這個Matlab中的ROS工具包簡稱為ROS-MATLAB。
下圖是ROS-MATLAB和機器人系統的通信框架,從中可以看到,Matlab擁有強大而豐富的演算法功能包(視覺處理、控制系統、信號處理等);通過ROS-MATLAB可以獲取機器人的數據,處理之後再將控制指令發送給機器人。簡而言之,ROS-MATLAB讓Matlab成為了機器人強大的計算後台。
ROS-MATLAB在Matlab2013之後的版本才有,而且需要Matlab安裝robotics systemtoolbox,可以在官網下載安裝。
二、ROS-MATLAB可以做什麼
那麼ROS-MATLAB到底可以實現哪些ROS的功能?在Matlab的命令窗口中,輸入以下幫助命令:
>> help robotics.ros
如果工具箱安裝沒有問題的話,可以看到如下圖所示的命令列表,每個命令後邊都有相應功能的說明。
可以看到,ROS-MATLAB 提供了ROS大部分的命令。我們首先通過一個簡單的常式對ROS-MATLAB有個大致的了解。
運行常式的第一步是什麼?當然是把ROS Master跑起來,在Ubuntu系統中我們使用的是roscore命令,而在Matlab里需要使用rosinit命令:
>> rosinit
運行成功會看到日誌信息:
然後使用以下命令運行常式 exampleHelperROSCreateSampleNetwork:
>> exampleHelperROSCreateSampleNetwork
稍等片刻後常式就會啟動,使用rosnode、rostopic命令可以看到節點和話題信息:
是不是有一種在Ubuntu系統下的穿越感,彷彿是一個運行在Windows下的虛擬機。
三、連接Matlab和ROS
上小節的常式在Matlab中運行了ROS Master和node,在實際使用中,我們還需要將Matlab連接到ROS系統的網路中。
1. 確定IP地址
首先需要確定運行Matlab和ROS的兩台計算機的IP地址(必須在同一網路下)。筆者運行Matlab的計算機操作系統是Windows 7,使用ipconfig命令,可以找到如下圖所示的IP地址。
ROS運行在筆者Windows 7下的Ubuntu虛擬機中,通過bridge橋接的方式聯網,在Ubuntu系統中使用ifconfig命令,可以找到如下所示的IP地址。
2. 在Matlab中設置IP
然後,在Ubuntu中運行roscore命令,並在Matlab中設置ROS Master的路徑,類似於多計算機運行ROS系統時的配置:
>> setenv(ROS_MASTER_URI,http://192.168.0.10:11311)>> rosinit
3. ROS --> Matlab
路徑配置完成後,檢查通信是否建立。先在Ubuntu中啟動一個talker:
$ rosrun roscpp_tutorials talker
接著在Matlab中查看話題和節點列表:
>> rosnodelist>> rostopiclist
Matlab已經找到talker發布的話題了,可以使用rostopic echo命令查看具體的消息數據。
4. Matlab --> ROS
在Matlab中同樣可以編寫節點並發布數據,一個簡單的talker節點實現如下:
>> chatpub = rospublisher(/talker, std_msgs/String);>> msg = rosmessage(chatpub);>> msg.Data = Hello, From Matlab;>> send(chatpub,msg);>> latchpub =rospublisher(/talker, IsLatching, true);
如果使用.m文件保存以上代碼,可以將所有命令保存到一個.m文件中,例如matlab_ros/talker.m:
%Setting ROS_MASTER_URIsetenv(ROS_MASTER_URI,http://192.168.1.202:11311)%Starting ROS MASTERrosinit%Creating ROS publisher handlechatpub = rospublisher(/talker, std_msgs/String);%This is to create the message definitionmsg = rosmessage(chatpub);%Inserting data to messagemsg.Data = Hello, From Matlab;%Sending message to topicsend(chatpub,msg);%Latching the message on topiclatchpub = rospublisher(/talker, IsLatching, true);
然後在Matlab中打開該文件,點擊菜單欄中的Run即可運行:
在Ubuntu中,查看話題列表和消息內容,可以看到如下列印信息:
至此,我們大概了解了ROS-MATLAB的概念和使用方法,又打開了一扇新世界的大門。
更多內容可關注微信公眾號:古月居 (guyue_home)
或訪問古月居網站:古月居 - 怕什麼真理無窮,進一寸有一寸的歡喜推薦閱讀:
※Matlab編程實踐(一)
※基於Mex混合編程的分子動力學模擬(MD)
※NumPy for MATLAB users (轉載)
※基於 SPM 對 FMRI 進行數據預處理
※第2節.超短脈衝在色散介質中的傳播模擬
TAG:機器人操作平台ROS | MATLAB |