基於Matlab+Ros/Gazebo聯合仿真:9自由度串並聯機器人冗餘運動(1)

  1. Matlab與Ros簡介

衆所周知:Matlab擁有強大的數據處理、可視化繪圖能力以及衆多成熟的算法函數,非常適合算法開發。而ROS系統,則是一種新的標準化機器人系統軟件框架。通過ROS,你可以使用大量的示例代碼和開源程序輕鬆地完成機器人編程和控制任務。

那麼:

如何利用matlat和ROS不同的優勢,協同進行機器人設計與仿真?

如何用matlat程序通過ROS直接控制物理世界中的機器人?

以下內容摘自:古月居博客
ROS探索總結(三十五)——Matlab中的ROS

(相關參考:ROS與Matlab系列:一個簡單的運動控制

答案是利用Matlab提供的tool box(工具箱)。Matlab有一個吊炸天的工具箱,幾乎和哆啦A夢的口袋差不多,可以提供豐富而強大的擴展功能,其中有一個robotics工具箱,提供了一些機器人需要用到的工具,當然也包括ROS相關的工具。

在Matlab中的robotics system toolbox提供了ROS的大部分功能,我們可以通過Matlab啓動rosmaster,創建ROS節點,發佈ROS消息/服務,查看ROS話題數據,控制ROS機器人等,更重要的是可以結合Matlab強大的功能,實現機器人算法設計和實現,直接接入ROS系統,結合gazebo或者V-REP完成仿真。
在這裏插入圖片描述

上邊這張框圖就是ROS-MATLAB和機器人系統的通信框架,可以看到,Matlab擁有強大而豐富的算法功能包(視覺處理、控制系統、信號處理等等),通過ROS-MATLAB可以獲取機器人的數據,在處理之後再將控制指令發送到機器人。簡而言之,ROS-MATLAB讓Matlab成爲了機器人強大的計算後臺。

需要注意的是,ROS-MATLAB在Matlab2013之後的版本纔有,而且需要Matlab安裝robotics system toolbox,可以登錄官網鏈接下載安裝。

Matlab中的robotics system toolbox到底可以實現哪些ROS的功能?我們還是打開Matlab看一下。

在Matlab的命令窗口中,輸入“help robotics.ros”,如果工具箱沒有問題的話,可以看到如下命令列表,每個命令後邊都進行了相應功能的說明:
在這裏插入圖片描述

我們首先通過一個簡單的例子對ROS-MATLAB有個大致的概念。

運行例程的第一步是什麼?當然是把roscore跑起來,在ubuntu裏我們使用的是roscore命令,而在Matlab裏邊,我們需要使用rosinit命令。
在這裏插入圖片描述
運行成功會有上圖的提示。

然後我們來運行例程 exampleHelperROSCreateSampleNetwork,輸入命令後稍等一下例程就會啓動,使用rosnode、rostopic命令我們就可以查看節點和消息。

在這裏插入圖片描述
是不是有一種在ubuntu下的穿越感,彷彿是一個運行在windows下的虛擬機一般。

2.Ubuntu16.04 下的Matlab+Ros/Gazebo聯合仿真
關於 Matlab與Ros的通信,網絡上常見的教程是,在兩個不同的操作系統平臺下Matlab(Windows)+Ros(Ubuntu)的通信,這個過程需要配置兩臺計算機的IP地址,如下所示:
( 同樣摘自:古月居博客
ROS探索總結(三十五)——Matlab中的ROS )
在這裏插入圖片描述
但是,如果只是做簡單的運動仿真的話,無需像上述這麼麻煩,需要兩臺計算機並進行復雜的配置操作,因爲在Ubuntu下已有Matlab軟件可以使用,這樣就無需進行IP配置的操作,如本人所做的9自由度串並聯機器人冗餘運動的仿真。
在這裏插入圖片描述
仿真的步驟如下:

1)在MATLAB軟件中寫好運動仿真計算程序和話題發佈程序

(機器人運動學計算腳本)
在這裏插入圖片描述
(Ros話題發佈腳本)
在這裏插入圖片描述

2)用URDF文件建立在Gazebo中仿真的機器人模型和相關的launch啓動文件
在這裏插入圖片描述

3)通過啓動launch文件運行Ros core和Gazebo,加載進機器人模型
在這裏插入圖片描述

在這裏插入圖片描述

4)再在Matlab的命令行窗口輸入以下命令,建立Matlab與Ros的通信連接

rosinit

在這裏插入圖片描述

  • 最後運行Matlab下的Ros話題發佈腳本,將每一時刻的機器人關節運動量發佈到對應的關節控制器中
    在這裏插入圖片描述

3 存在問題:Matlab 話題發佈腳本編程注意事項

在Matlab的Robotics System Toolbox下進行話題發佈的命令爲rospublisher
在這裏插入圖片描述
個人之前發佈話題的方法時將話題發佈寫成一個Matlab的函數腳本文件(function.m),然後在程序的循環體語句中調用它,結果出現兩種情況:

  • Matlab報錯奔潰的現象在這裏插入圖片描述

在終端中查看話題發佈的消息數據的頻率很低(3s左右),和話題腳本程序運行全程中Gazebo中模型無明顯運動現象。

在這裏插入圖片描述
分析原因在於:編程邏輯錯誤,導致程序運行低效

具體原因爲:用Matlab中Robotics System Toolbox下進行話題發佈的命令rospublisher來初始聲明話題名稱和消息類型時,將其放入一個函數腳本文件中,然後在話題發佈腳本程序中的循環體中調用該函數腳本,導致每循環一次都要進行一次話題的初始化聲明,這將極大的耗費時間,從而導致話題的發佈頻率極低

在這裏插入圖片描述
在這裏插入圖片描述

正確的做法是:將rospublisher來初始聲明話題名稱和消息類型的程序語句放置到話題發佈腳本程序的循環體之前,讓其只執行一次,即可。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章