三維可視化系統的建立依賴于三維圖形平臺, 如 OpenGL、VTK、OGRE、OSG等, 傳統的方法多采用OpenGL進行底層編程,即對其特有的函數進行定量操作, 需要開發人員熟悉相關函數, 從而造成了開發難度大、 周期長等問題。VTK、 ORGE、OSG等平臺使用封裝更好的函數簡化了開發過程。下面將使用Python與VTK進行機器人上位機監控界面的快速原型開發。
完整的上位機程序需要有三維顯示模塊、機器人信息監測模塊(位置/角度/速度/電量/溫度/錯誤信息...)、通信模塊(串口/USB/WIFI/藍牙...)、控制模塊等功能模塊。三維顯示模塊主要用于實時顯示機器人的姿態(或位置)信息。比如機器人上肢手臂抬起,程序界面中的虛擬機器人也會同時進行同樣的動作。三維顯示模塊也可以用于對機器人進行控制,實現良好的人機交互。比如在三維圖像界面中可以點擊拾取機器人某一關節,拖拽部件(肢體)控制真實的機器人完成同樣的運動。Aldebaran Robotics的圖形化編程軟件Choregraphe可以完成上述的一些功能對NAO機器人進行控制。

對于簡單的模型可以自己編寫函數進行創建,但這種方法做出來的模型過于簡單不夠逼真。因此可以先在SolidWorks、Blender、3DMax、Maya、Rhino等三維設計軟件中建立好模型,然后導出為通用的三維文件格式,再使用VTK將其讀入并進行渲染。
在SolidWorks等三維設計軟件中設計好機器人的大臂(upperarm)和小臂(forearm),然后創建裝配體如下圖所示。在將裝配體導出為STL文件前需要注意幾點:
1. 當從外界讀入STL類型的模型時,其會按照它內部的坐標位置進行顯示,因此它的位置和大小是確定的。為了以后的定位以及移動、旋轉等操作的方便,需要先在SolidWorks中創建一個坐標系。如下圖所示,坐標系建立在大臂關節中心點。
2. 如果將裝配體整體輸出為一個STL文件,則導入VTK后無法控制零部件進行相對運動。因此,需要將裝配體各可動部件分別導出。

在SolidWorks的另存為STL對話框中,點開輸出選項卡,如下圖所示。注意之前提到的幾點:如果勾選“在單一文件中保存裝配體的所有零部件”則會將整個裝配體導出為一個STL文件,否則就是分別命名的兩個STL文件;輸出坐標系下拉列表中選擇之前創建的坐標系1,并勾選“不要轉換STL輸出數據到正的坐標空間”。

下面的Python代碼簡單實現了一個2自由度機械臂的三維仿真,可以拖動滑塊或按鍵盤上的方向鍵控制肩關節或肘關節運動。當然程序還存在一些問題有待完善...
新聞熱點
疑難解答