999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Bullet物理引擎的機器人仿真實驗平臺設計

2022-02-20 10:25:54黃弢汪迪萬晨暉馬瑞啟
實驗室研究與探索 2022年11期
關鍵詞:物理實驗

黃弢,汪迪,萬晨暉,馬瑞啟,許 洋

(華中科技大學機械科學與工程學院,武漢 430074)

0 引言

實驗教學是高校創新實踐人才培養的重要手段[1],機器人教學是工程類實驗教學中重要的組成部分[2],在實驗教學中,受限于現場條件和傳統工業機器人的價格,可用的實驗資源往往有限,學習成本較高。借助計算機仿真技術,可在軟件中集成虛擬仿真模塊,自定義仿真場景[3]。

目前,國內外比較通用的機器人仿真軟件有VREP、Gazebo和Webots 等[4]。V-REP是一款靈活的通用機器人仿真器,支持嵌入式腳本,插件和ROS 節點[6],自2019 年后改名為CoppeliaSim,V-REP已經停止更新。Gazebo可構建機器人運動仿真模型,支持傳感器數據的仿真[7],主要配合ROS 仿真在Linux 平臺使用。Webots自帶眾多不同種類傳感器和驅動器[8],近年來在四足類機器人仿真上應用廣泛[9]。現有平臺的不足之處在于,它們只是一個仿真工具,而非一個實驗工具,為完成實驗往往需要多個軟件相互配合,學習成本高,開發一款具備機器人仿真功能與實驗設計的平臺則具有較大意義。

工業機器人中應用較為廣泛的是示教編程,即通過示教器控制機器人移動,在運動過程中記錄相應的關節位置,完成示教操作。這種示教方式過于簡單和低效,并不適用于機器人學科教學。一種較好的方式是類似于Matlab 腳本化、交互式編程,既可通過類的方式封裝簡易調用函數,也可以賦予用戶自己實現算法的能力。

為使機器人仿真實驗平臺更具靈活性和可擴展性,采用以Bullet為仿真引擎,以Lua 為交互式操作語言、Qt為圖形框架和節點圖和數據流驅動為實驗系統的技術方案。體架構設計如圖1 所示。

圖1 基于Bullet引擎的機器人仿真實驗平臺整體架構

其中,仿真層為機器人仿真的核心實現,由OpenGL提供場景管理與視圖管理,Bullet 提供物理運算,如碰撞檢測、運動學運算和動力學運算等。操縱層面向用戶,以函數和功能節點的方式向用戶提供對仿真層的功能訪問。

1 基于Bullet引擎的機器人仿真

1.1 Bullet與OpenGL的關聯

Bullet是一種應用廣泛的物理引擎,支持多個平臺[10]。作為一款物理引擎,它并沒有提供可視化對象的方法,為可視化Bullet對象,還需要使用OpenGL,它的接口與圖形卡硬件非常接近,處理底層命令,尤其是圖形應用程序,是一項煩瑣的任務,例如Glut、FreeGlut、Glfw庫可以用來簡化工作,這類庫通??煞Q為包裝器,另外它還負責應用程序的啟動、控制和輸入處理[13]。

物理計算方面由Bullet 提供的相關接口實現,主要涉及的核心對象有世界對象、碰撞配置、碰撞檢測、約束解算器和碰撞調度器等多種。物理和圖形部分需要進行運動狀態綁定和幾何更新,以便根據物理引擎計算的位姿變換矩陣更新幾何顯示。采用物理和圖形分離的架構能降低程序耦合,便于功能擴展[14]。

圖2 渲染場景的一般流程

在創建OpenGL上下文之后,將解析OpenGL函數指針,即調用硬件平臺的函數實現,所有OpenGL命令都會用來改變當前上下文的狀態信息,OpenGL 根據上下文的狀態信息進行渲染工作。

1.2 Bullet與OpenGL的綁定

Bullet保持其核心組件的相同模塊化設計,甚至包括單個物理對象。這使得可通過隨意互換或替換物理對象的組件來定制它們。在Bullet中構建物理對象需要3 個組件:

(1)碰撞形狀(Collision Shape)。定義物體的體積和形狀,可以是長方體、球體、圓柱體或其他更為復雜的形狀,決定了物體與其他物體在碰撞時的響應方式。

(2)運動狀態(Motion State)。跟蹤物體的運動狀態,運動狀態的工作是記錄對象的當前位置和方向。

(3)碰撞對象(Collision Object)。作為對象的主控制器,管理前面提到的組件和對象的物理屬性。碰撞物體是物理物體的基本組成部分,因為它們保持了物體的物理屬性。

文獻[19]顯示,當模型的水平范圍為8~10倍隧道直徑時,即可獲得較高的計算精度。本文建立了二維彈塑性動力有限元模型,模型水平方向為80 m,豎直方向為60 m,盾構隧道直徑為6 m。

從創建Bullet對象,配置相應的物理參數,到步進模擬,場景渲染基本流程如圖3 所示。

圖3 場景渲染、基本流程

在創建Bullet對象之后,在OpenGL中同步創建幾何形狀,其關鍵在于運動狀態的綁定,這一步驟是通過指針方式設定運動狀態。既當物理模型中的運動狀態更新時,用于描述運動狀態的變量值會同步更新,當渲染場景時,通過指針來訪問描述運動狀態的變量,此時即可實現狀態的同步更新。

2 基于Lua的交互式編程

Lua 是一種嵌入式腳本語言,擴展性好,容易與C/C++語言結合。Lua的目標是僅提供一些很有限但卻很強大的語言機制[11]。Lua 是基于關聯數組和擴展性語法結構設計的語言,支持動態定義類型,內存自動回收機制,常被用于嵌入其他宿主語言[12]。

將Bullet相關功能封裝為C ++接口,即可實現基于C++語言的機器人仿真,但C ++程序需要編譯,無法脫離開發環境存在,不便于用在實際的教學環境。Lua語言提供了一種在Lua中調用C++函數的機制。

2.1 C ++接口的綁定

Lua與C/C++語言之間的通信,主要是通過一個虛擬堆棧進行。Lua 給C ++語言提供了API 來對堆棧進行操作,這些API 就好比兩者之間通信的協議。C++與Lua的常規綁定方法如下:

(1)在C++中提供具體的函數

(2)在C++中按照指定格式提供回調函數,調用具體的函數

(3)在C++中注冊回調函數

可見,對于每一個需要在Lua 中調用的C ++函數,都需要一系列較為繁瑣的綁定過程。對于Qt環境而言,使用QtLua 庫可以大大簡化這一過程。它提供了有用的C++包裝器類,以使Lua 和C ++都可訪問C++和Lua 對象。利用Qt 元對象系統的優勢將QObject成員公開給Lua腳本。其特點如下:

(1)不公開基于Lua 堆棧的CAPI,僅從C ++代碼操縱QtLua::State和QtLua::Value 之類的C ++對象。

(2)通過繼承QtLua::UserData類,可將C++對象作為用戶數據值提供給Lua??赏ㄟ^覆蓋虛擬函數來重新定義所有Lua 元操作,包括對來自Lua 的userdata對象的迭代。

(3)可以將QtLua::Function 類子類化,以輕松定義可從Lua 調用的C ++函數對象。使用QtLua 綁定Lua與C++的基本流程如圖4 所示。

圖4 在C++中綁定Lua的基本流程

創造LuaState,用于儲存Lua 變量值的虛擬堆棧,啟用Lua的標準庫,注冊自定義對象。如自定義變量(屬性)、自定義函數對象和自定義類對象。然后就可以通過state執行Lua語句,Lua中注冊的C ++對象均可通過Lua語句來調用或賦值。

2.2 基于節點圖的圖形化編程

基于節點圖的控制方式是對基于Lua控制方式的一層封裝,實現了以事件驅動的方式來調用Lua,并將設備和功能塊抽象為節點,節點之間的數據傳遞方式通過連線來定義。

在現有基于Lua 腳本的控制模式下,已可進行構建機器人仿真場景,分析仿真結果等操作。在復雜的機器人場景中,往往需要多臺機器人相互協作共同完成實驗任務,為實現靈活的機器人運動控制,可根據不同實驗場景進行機器人組態[16]。本平臺設計了一種基于事件驅動的圖形節點編程工具。

節點編輯工具在建模類工具中應用廣泛,如Blender的材質編輯和模型渲染節點圖。其基本流程為事先定義數據模型并將其注冊到數據模型注冊表,構造節點并與對應的數據模型進行綁定,用戶操作信號或者定時器信號、通信信號等將觸發模型計算,計算結果將傳播到輸出連接,每個新連接都會獲取可用的數據并進一步傳播,數據節點的組成如圖5 所示。

圖5 數據節點的組成

數據節點采用數據模型和圖形節點分離的設計模式,數據模型負責定義端口、數據輸入、輸出和數據運算等,而圖形節點則定義了圖形的外觀樣式、幾何形狀和連接狀態等。

本平臺將圖形節點和Lua 腳本融合,實現一種形如Simulink中Matlab Function的效果。在節點從構造到數據輸入、輸出的不同階段,將執行不同的函數。Lua腳本節點生命周期中所執行的函數如圖6 所示。

圖6 Lua腳本節點生命周期中所執行的函數

其中構造函數和初始化函數只執行一遍,而數據輸入觸發的運算類函數將在每次輸入數據時執行。在Lua函數中通過調用獲取節點數據函數,將數據從C++環境中拷貝到Lua 環境,編寫相應的處理邏輯,調用輸出節點數據函數,將數據節點數據傳播到下個節點。

3 實驗驗證

3.1 Scara機器人解析G代碼繪圖

節點圖的典型優勢在于基于數據流驅動的控制邏輯,避免了循環掃描指令的CPU 負荷,同時圖形化交互和事件驅動方式符合人的控制直覺??蓪⒌湫偷墓δ軌K封裝為圖形節點,用戶只需要考慮輸入和輸出,而不用關注內部的實現細節。節點之間具有低耦合的特性,可根據實際的邏輯將不同的節點進行連接和組合。

圖7 是一個G代碼解析并控制Scara機器人繪圖的一個案例,Gcoder 模塊負責G 代碼的解析,將解析得到的點位通過輸出端口輸出,連接到一個散點圖模塊和機器人“反解驅動”模塊,“反解驅動”模塊的輸出端口輸出機器人實際末端軌跡。

圖7 Scara機器人繪圖案例

Scara機器人繪圖實驗流程如圖8 所示。

圖8 Scara機器人繪圖流程

通過Gcoder模塊導入G代碼文件并解析,將開啟一段定時循環,不斷輸出點位數據,虛線框中的內容在“反解驅動”節點中實現。G代碼解析并執行完畢后,運行效果如圖9 所示。

圖9 Scara機器人繪圖效果

發現最終運動得到的路徑與期望路徑基本一致,達到預期的實驗目的,如圖10 所示。

圖10 機器人末端理論軌跡與實際軌跡

3.2 Scara機器人抓取物體

本實驗平臺支持多種實驗場景,通過導入不同機器人模型可進行不同的實驗。得益于Bullet的碰撞檢測功能,能在機器人場景中模擬抓取實驗。Scara機器人抓取案例腳本實驗界面如圖11 所示。

圖11 Scara機器人抓取案例腳本

游戲手柄是一種典型的輸入設備,通過操縱按鈕和搖桿可以向計算機發送相應的觸發信號和鍵值,是一種典型的事件發生裝置。在實驗平臺中,游戲手柄作為輸入設備被定義為功能節點,它的按鍵信號被映射到節點的輸出端口,并與后續的邏輯處理節點相連接。當按下或松開手柄的某一個鍵時,對應的端口將發射一個數據更新信號,并將數據傳遞到下一個節點。

手柄的前后左右搖桿來控制Scara 機器人末端的平面移動方向,上下鍵來控制機器人升降。而B、A功能鍵用于控制末端執行器——卡爪的開合,Scara機器人抓取效果如圖12 所示。

圖12 Scara機器人抓取效果

由Scara機器人解析G代碼繪圖和抓取物體實驗中可見,本平臺能夠快速搭建仿真實驗,并對結果進行實時可視化分析。機器人功能的節點化使得實驗平臺具有較高的可重構性和可擴展性,能適應機器人實驗的多樣化。

4 結語

基于Bullet 設計了一種機器人仿真實驗平臺,具備運動學解算、碰撞檢測與軌跡可視化功能。通過使用數據流節點圖作為邏輯手段,將計算模塊和通信模塊封裝為功能節點,大大降低了實驗搭建的難度。通過圖形連接定義運算邏輯的方式,便于用戶快速理解實驗架構。應用實例表明,該平臺功能完善,可擴展性強,兼具腳本語言的靈活性與圖形化語言的便捷性,適用機器人的多種實驗場景。

猜你喜歡
物理實驗
記一次有趣的實驗
只因是物理
井岡教育(2022年2期)2022-10-14 03:11:44
微型實驗里看“燃燒”
如何打造高效物理復習課——以“壓強”復習課為例
處處留心皆物理
做個怪怪長實驗
我心中的物理
三腳插頭上的物理知識
NO與NO2相互轉化實驗的改進
實踐十號上的19項實驗
太空探索(2016年5期)2016-07-12 15:17:55
主站蜘蛛池模板: 亚洲第一视频网| 国产精品99久久久久久董美香| 成年人福利视频| 国产青青草视频| 日韩精品专区免费无码aⅴ| 免费A级毛片无码免费视频| 午夜欧美理论2019理论| 免费无码在线观看| 国产大片喷水在线在线视频| 午夜国产不卡在线观看视频| 99福利视频导航| 尤物特级无码毛片免费| 中文国产成人精品久久| 免费毛片视频| 亚洲中文字幕av无码区| 婷婷色狠狠干| 91亚洲视频下载| 国产精品性| 狠狠色噜噜狠狠狠狠色综合久| 国内精品九九久久久精品| 精品国产Ⅴ无码大片在线观看81 | 青草视频免费在线观看| 国产另类视频| 国产特级毛片aaaaaa| 欧美亚洲国产视频| 97免费在线观看视频| 国产在线视频导航| 亚洲第一视频网| 国产Av无码精品色午夜| 91国语视频| 亚洲国产成人久久77| 国产美女精品一区二区| 成人午夜免费视频| 成人国产一区二区三区| 伊人91视频| 九九热精品视频在线| 成人中文在线| 99久久精品免费看国产电影| 四虎精品免费久久| 97亚洲色综久久精品| 伊人久综合| 日韩区欧美国产区在线观看| 国产成人免费| 亚洲动漫h| 9啪在线视频| 成人国产小视频| 噜噜噜久久| 在线观看亚洲天堂| 亚洲中文字幕在线一区播放| 曰AV在线无码| 国产免费羞羞视频| 亚洲欧美国产高清va在线播放| 国产精品第一区在线观看| 女人18毛片久久| 国产啪在线91| a色毛片免费视频| 亚洲最猛黑人xxxx黑人猛交| 免费精品一区二区h| 久久综合九九亚洲一区| 国产91无毒不卡在线观看| 亚洲免费成人网| 四虎在线高清无码| a免费毛片在线播放| a毛片在线播放| 午夜啪啪网| 国产爽妇精品| 97se亚洲综合在线| 久久99国产乱子伦精品免| 国产特级毛片aaaaaa| 免费观看成人久久网免费观看| 四虎国产成人免费观看| 国产成人久久777777| 人妻无码AⅤ中文字| 国产亚洲欧美另类一区二区| 日韩亚洲高清一区二区| 免费视频在线2021入口| 国产天天射| 九九线精品视频在线观看| 高清不卡一区二区三区香蕉| 亚洲综合中文字幕国产精品欧美| 中文字幕无码制服中字| 人妻一区二区三区无码精品一区|