V-REP(Virtual Robot Experimentation Platform),是全球領先的機器人及模擬自動化軟件平台。V-REP讓使用者可以模擬整個機器人系統或其子系統(如感測器或機械結構),通過詳盡的應用程序接口(API),可以輕易的整合機器人的各項功能。V-REP可以被使用在遠程監控、硬件控制、快速原型驗證、控制算法開發與參數調整、安全性檢查、機器人教學、工廠自動化模擬及產品展示等各種領域。
之前用過多體動力學仿真軟件ADAMS,現在再來學V-rep感覺很不習慣,界面和操作方式都有很大的差異,畢竟ADAMS是一個成熟的商業軟件而V-rep只是一個開源軟件。但V-rep好在編程很方便,支持多種編程語言(lua,python,C/C++,MATLAB,java等),還可以和ROS連接。國內的V-rep用戶應該不是很多,網上關於V-rep的中文資料也幾乎為零,而官方的教程對我這種菜鳥來說又太過高級。所以先自己慢慢摸索吧,下面將自己的學習過程記錄下來,以免以后忘記...
先來研究一下V-rep中的轉動關節。為什么想先研究轉動關節呢(官方教程里一開始就是各種尋跡、機器人逆解...),可能還是受到ADAMS的影響吧。就像學一門編程語言第一步就是寫一個hello world程序一樣,ADAMS學習第一步就是建立一個連桿和轉動關節來進行運動學、動力學的方針。我一開始在V-rep中按ADAMS的操作方式試過好幾次,要么是連桿不轉動要么就是一仿真連桿就直接受重力影響直接掉下去。去網上查找解決問題的方法,發現大家討論的問題都比較高級,相關的細節很少有介紹的。那我就自己動手多試試...
講到轉動關節先要說一下V-rep中物體姿態角的定義方式。在ADAMS中用戶可以自定義姿態角繞坐標軸的旋轉順序,以及是按固定坐標系旋轉還是繞自身坐標系旋轉。在V-rep中物體姿態以X-Y-Z歐拉角的方式確定(以指定的參考系為初始姿態,然后按X-Y-Z的順序依次繞自身的坐標軸旋轉Alpha,Beta,Gamma角度后得到),參考坐標系有world和Parent frame之分,下面來看看這兩者有什么區別。
先建立一個Plane平面(下圖中灰色的正方形),將Plane的坐標系繞自身Z軸旋轉90°,然后添加一個Cuboid把它作為Plane的子對象。現在我們選中Cuboid打開其Object orientation對話框,可以看到當選擇相對Parent frame時其姿態角位(0,0,-90°),即以Plane的坐標系為基准,繞自身Z軸旋轉-90°得到;而選擇World時,姿態角位(0,0,0),即Cuboid的姿態與世界坐標系的姿態一致。下圖可以說明這一別。
打開V-rep的幫助找到Joint types and operation那一頁,里面寫道A joint is used to allow for a relative movement between its parent and its children,即joint是用於連接其父對象和子對象,並限制其父子對象相對運動的。按照ADAMS的方式先建立連桿,再講旋轉關節添加到連桿一端就可以開始愉快的仿真了,而V-rep這樣的話連桿會直接掉下去。后來看了一下軟件自帶的一個齒輪的例子(gearMechanism.ttt),發現V-rep中需要顯式的建立一個機架(即為機構上靜止不動的部件),而ADAMS默認旋轉關節是連着Ground的。下面添加一個平面作為機架,並在dynamic properties對話框中去掉Body is dynamic選項(when enabled, then the shape's position and orientation will be influenced in a dynamic simulation,由於機架固定不動,因此需要去掉該選項)。將連桿和旋轉關節建立好放在合適的位置(下圖中將旋轉關節放在連桿的最左端。如果放在中間且不添加關節驅動力,在重力作用下連桿不會發生轉動)。將Joint設為Torque/force mode,在動力學特性對話框中如果勾選Motor enabled,則關節將帶動連桿按指定規律運動;如果沒有勾選Motor enabled,則關節成為一個自由關節,連桿受重力作用會繞着關節往復擺動。
另外需要注意的是,根據官方文檔:"Non-static shapes will fall (i.e. be influenced by gravity) if they are not otherwise constrained. Dynamic constraints between shapes can be set-up by attaching two shapes together with a dynamically enabled joint. Dynamically enabled joints are joints that are in force or torque mode or that operate in hybrid fashion, and that have a shape as parent object and exactly one child object which must be a non-static shape." 即如果關節沒有設置成動力學模式(Torque/force mode)或着在非動力學模式下沒有勾選Hybrid operation選項,連桿將不會被約束住,在重力作用下會墜落。
下面調整視角,添加一個Graph記錄連桿在驅動作用下的旋轉角度。打開Graph的對話框在Add new data stream to record中添加要測的數據。注意這里要選擇absolute gamma-orientation,因為連桿是繞着自身的Z軸在旋轉,測量物體選擇Cuboid。關節角速度為30°/s,仿真2s后停止,到達60°的位置,Graph記錄了連桿轉角隨時間的變化。
關節在Torque/force模式下可以設置目標角速度,需要注意的一點是:The target velocity will be instantaneously reached if the maximum torque/force is high enough; otherwise the target velocity is gradually approached. 即如果關節力矩過小,目標速度可能要緩慢才能達到。下面兩幅圖說明了這種情況。
參考:
1. V-REP User Manual