將機器人3維模型導入至V-rep仿真軟件的方法小結

相關博客

  • 在V-rep中通過D-H參數自動生成機械臂模型:https://blog.csdn.net/DoctorSRn/article/details/106852312

前言

首先介紹本篇博客的背景:要進行雙臂機器人的規劃和協作控制方法的仿真,但是雙臂機器人的機械結構可能會發生變化,爲了實現調整機械臂結構後仍可以方便快捷的進行算法仿真的要求,打算使用描述性文件對機械臂結構進行建模,然後通過描述性文件將機械臂模型導入至V-rep軟件。
具體來說機器人3維模型導入至V-rep仿真軟件的過程如下圖所示:
在這裏插入圖片描述
(這裏假設機器人的機械結構圖是由Solidworks繪製)
所以,爲了較方便的實現調整機器人機械結構的需求,從結構圖到導入至V-rep仿真軟件中可以有兩種方法:

  • 從Solidworks中的3D裝配結構圖先導出成STL網格文件,STL網格文件可以使用Magics軟件改變其形狀,從而實現快速調整機械結構,然後根據STL文件編寫機器人的XACRO/URDF文件,再將URDF文件導入V-rep即可。每次直接使用Magics調整STL文件,然後重新導入V-rep,就可實現調整機器人機械結構的需求;
  • 使用Solidworks的URDF插件,可以實現直接從機器人3D裝配結構圖直接生成URDF文件,然後將URDF文件可以導入V-rep中。每次直接在Solidworks中調整機器人裝配結構圖,然後重新導出URDF文件,再導入至V-rep中,就可實現調整機器人機械結構的需求。

下面詳細介紹整個導入過程,以及每個步驟中遇到的一些問題和解決辦法。主要內容包括以下幾部分:

PS:

  1. 博客內容可能會出現在自己之後的論文中,不知道論文查重會不會和博客內容進行比對,爲了防止之後出現這種情況,博客內容儘量簡寫了。
  2. 使用環境爲:windows 8.1 + V-rep 3.6.1,最新版本的V-rep爲3.6.2,之後的V-rep將停止更新,該公司將開放新的仿真平臺,聽說完全兼容V-rep,還挺期待的。

1.從Solidworks導出STL文件和URDF文件

機器人的機械結構圖通常使用SolidWorks或者其他的3維製圖軟件進行繪製,繪製好的工程通常包括零件文件和裝配體文件,3維製圖軟件提供了將原始結構圖文件轉換爲其他文件的功能。

1.1 從solidworks中導出機器人的STL文件

在仿真軟件中導入的機器人模型主要包含機器人的結構參數、動力學參數和外形等屬性。而SolidWorks中的裝配結構圖文件細節較多、文件較大,需要經過簡化後才能導入仿真軟件,最終使仿真軟件中的計算效率和速度更快。
通常將裝配結構圖導出成STL文件或者DAE文件來表徵機器人的外形,STL文件相對原始的裝配結構圖是經過簡化的,也就說STL文件在外形方面的信息丟失比較多,所以通常從裝配結構圖可以導出至STL文件,但是從STL文件反向得到裝配圖是比較困難的。
在SolidWorks導出STL文件可以直接進行,具體細節就不講了。

1.2 從solidworks中導出URDF文件

SolidWorks提供了URDF插件,可以直接將裝配結構圖導出成URDF文件,導出的文件結構如下:
在這裏插入圖片描述
urdf文件夾下就是urdf源文件,在meshes文件夾下是導出的包絡圖文件,通常是STL文件或者DEA文件。

2.使用Magics軟件直接編輯STL文件

前面講到設置好機器人的STL文件並編寫好對應的URDF文件後,只需要通過修改STL文件就可以實現快速的對機器人機械進行調整。STL文件的調整可以使用Magics軟件,該軟件可以非常方便的對STL文件中的形狀進行編輯,包括拉伸、剪切、布爾操作等等。

3.使用URDF文件描述機器人機械結構

URDF是常用的通過描述性文件對機器人的結構進行建模的方法,通過便籤化的文本文件來描述機器人的機械結構、動力學參數、外形和顏色等特徵。而xacro是URDF的升級版,可以在xacro中使用各種宏,利用xacro可以簡化urdf文件,使urdf文件變得可讀性強且優雅。但在使用時都是將xacro文件先解析爲urdf文件後再使用,從SolidWorks直接導出的URDF文件其實是以xacro形式導出的。所以這裏需要先解決xacro到urdf的轉換問題。
從xacro到urdf的轉換有兩種方法:

  • 藉助ROS中的xacro包實現轉換。不推薦這種方法,因爲需要安裝ROS環境,比較麻煩。3.1章節主要是記錄了自己在使用這種方法過程中的一些嘗試,所以3.1章節可以跳過。
  • 使用可以獨立運行的xacro2urdf解析器實現xacro轉換爲urdf

將xacro文件轉換爲urdf文件,一種方式使用ROS的工具包進行,需要安裝ROS和相關的軟件包;另一種方式藉助開源xacro轉urdf代碼實現

3.1 藉助ROS將xacro文件轉換爲urdf文件

需要使用的工具運行在Linux環境,方便起見,使用騰訊的Cloud Studio作爲Linux環境(版本爲Ubuntu 16.04.5 LTS)。

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
# 完整版ROS,接近2G
# sudo apt-get install ros-kinetic-desktop

# 核心版ROS,不到1G
sudo apt-get install ros-kinetic-ros-base

sudo rosdep init
rosdep update
#echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
#source ~/.bashrc
# Cloud studio使用zsh
echo "source /opt/ros/kinetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt-get install python-catkin-pkg
sudo apt-get install liburdfdom-tools

檢查urdf文件是否語法合法:check_urdf xxxx.urdf

  • 安裝xacro包:
    手動安裝xacro包:
    1. 將xacro包clone至本地git clone https://github.com/ros/xacro.git
    2. 進入xacro根目錄,進行安裝sudo python setup.py install
      自動安裝:
      sudo apt-get install ros-kinetic-xacro

3.2 使用可以獨立運行的xacro2urdf解析器實現xacro轉換爲urdf

xacro2urdf解析器是自己在另一個開源轉換代碼xacro的基礎上遷移過來的,而開源轉換代碼xacro是從ROS軟件包中抽離出來可以單獨運行的xacro解析器。

  • 由於該代碼使用python2編寫,當前環境爲python3,所以需要先將代碼遷移爲Python3。主要修改print,sort和異常處理等幾部分。可以邊運行test_xacro.py邊根據報錯來修改。
  • 如果python test_xacro.py可以成功運行,則說明代碼修改完成。
  • 然後就可以使用xacro.py進行xacro到urdf的轉換。使用方法示例:python xacro.py -o ./test_abb_4600.urdf urdf/irb4600_60_205.xacro。可以直接運行python xacro.py獲取幫助信息。
  • 要將xacro.py代碼和urdf文件夾放置於同一目錄

更多信息歡迎訪問xacro2urdf解析器的代碼倉庫,在代碼倉庫中提供了一個將ABB 4600型機械臂的XACRO文件解析爲URDF文件的例子。

4.將機器人通過URDF文件導入至V-rep仿真軟件中

URDF相關的知識這裏不打算細講,相關的知識可以在一下網站進行學習:

  • 古月居:http://www.guyuehome.com/372
  • urdf語法規範(非常重要):http://wiki.ros.org/urdf/XML
  • urdf官方教程:http://wiki.ros.org/urdf/Tutorials
  • DH2URDF:https://github.com/AdoHaha/DH2URDF
  • 在線URDF對應機器人3D模型展示:https://mymodelrobot.appspot.com/5629499534213120
  • URDF基本知識:https://blog.csdn.net/sunbibei/article/details/52297524

V-rep中提供了通過URDF導入機器人模型的插件。

4.1 urdf文件導入V-rep例子1

嘗試導入一個小車的urdf描述文件,小車urdf文件來自該博客,小車的URDF文件爲:

<robot name="test_robot">  
  <link name="base_link">  
    <visual>  
       <geometry>  
         <box size="0.2 .3 .1"/>  
       </geometry>  
       <origin rpy="0 0 0" xyz="0 0 0.05"/>  
       <material name="white">  
         <color rgba="1 1 1 1"/>  
       </material>  
    </visual>  
  </link>  
  
  <link name="wheel_1">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  
  </link>  
  
  <link name="wheel_2">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_3">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_4">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <joint name="joint_base_wheel1" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_1"/>  
  </joint>  
  
  <joint name="joint_base_wheel2" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_2"/>  
  </joint>  
  
  <joint name="joint_base_wheel3" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_3"/>  
  </joint>  
  
  <joint name="joint_base_wheel4" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_4"/>  
  </joint>  
</robot> 

將上面的小車URDF文件保存在本地,然後使用V-rep的URDF插件導入後如下圖:
在這裏插入圖片描述

  • 發現只有wheel1是黑色,其他輪子的顏色不對,這是因爲wheel1的<material>是完全的,其他三個輪子的<material>屬性沒有寫全,當嚴格按照wheel1的格式來寫時,其他輪子的顏色就正常了。而在ROS下,這種寫法是可以的。這可能是因爲V-rep的URDF解析器沒有把情況考慮周全。當然也可以導入URDF後在V-REP中設置模型的顏色。
  • 另外還有一些ERROR,但是導入的模型是符合urdf文件描述的。
  • urdf文件中<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>rpy表示繞軸x,y,zx,y,z分別旋轉的角度(弧度制),這裏的1.5表示繞y軸旋轉差不多90°90\degree
  • 關節<joint>屬性<type>fixed,導入V-rep後是用於連接剛性物體的力傳感器模塊。
  • 導入的所有模型沒有使能動力學屬性。

4.2 urdf文件導入V-rep例子2–導入有STL文件構成的URDF文件

https://github.com/doctorsrn/xacro2urdf/blob/master/abb_irb4600_support/urdf/test_abb_4600_voxel1.urdf
3.2節介紹了xacro2urdf解析器,並給出了一個ABB 4600機械臂URDF文件導出的例子,而V-rep仿真軟件中內置了ABB 4600機械臂模型,所以我們將通過URDF導入的機械臂和內置的機械臂模型進行一個簡答的對比。
首先在xacro2urdf解析器代碼倉庫中可找到導出的ABB 4600機械臂的URDF文件test_abb_4600.urdf,使用URDF插件導入V-rep,
導入ABB 4600型機械臂和V-rep中內置的模型對比如下圖:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9XVMKKgM-1592535862447)(./urdf_pics/4_pics.png)]
左邊是V-rep內置的ABB 4600機械臂模型,右邊是通過URDF文件導入的機械臂模型。可以看到從外形上看區別不大,內置的模型細節更多一些。其他方面的差異:

  • 通過URDF直接導入的模型,各個零部件的名字比較長且混亂,需要通過手動修改簡化;
  • URDF文件中零件顏色的設置存在一些問題,導致導入的模型顏色有時會不正常;
  • 其他問題。。

4.3 urdf文件導入V-rep例子3–導入有URDF內置幾何形狀的模型文件

4.2中導入的ABB 4600機械臂它的<collision><visual >標籤屬性均有外部的STL文件或DEA文件來定義,如果不使用外部文件,直接使用URDF默認支持的長方體、圓柱體和球體等形狀來定義也是可以的。在xacro2urdf解析器代碼倉庫中提供了使用URDF內置幾何體表徵<collision><visual >標籤屬性的模型文件test_abb_4600_voxel*.urdf,具體實現是簡單粗暴的直接把<collision><visual >標籤屬性中的STL部分替換成內置的幾何體,導入至V-rep中,對比的效果如下:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eajY7gxL-1592535862449)(./urdf_pics/5_pics.png)]
左邊是使用URDF內置幾何體的機械臂模型,右邊是通過STL文件定義<collision><visual >標籤屬性的模型,雖然使用幾何體基本可以表徵機械臂的<collision><visual >標籤屬性,但是不太美觀。所以這種方式只是一種嘗試。

PS: V-rep在windows下的URDF中設置<mesh>屬性時路徑的設置問題:需要使用絕對路徑,示例:

 <link name="right_leg">
     <visual>
       <geometry>
         <mesh filename="c://users//Srn//Desktop//w1.stl"/>
       </geometry>
       <material name="blue"/>
       <origin rpy="0 0 0" xyz="0 0 0"/>
     </visual>
   </link>

4.4 urdf相關知識

  1. ABB公司常用機械臂資料
  • 機械臂URDF模型:https://github.com/ros-industrial/abb
  • 更全的URDF模型:https://github.com/ros-industrial/abb_experimental
  • 不同機械臂型號:https://new.abb.com/products/robotics/zh/industrial-robots
  1. 小知識點
  • urdf中模型位姿默認是豎直向上,旋轉和平移變換時都是先旋轉再平移
  • urdf中的box,cylinder,sphere默認的<origin>是其幾何中心
  • urdf中對導入的mesh進行縮放的寫法是:<mesh filename="package://dual_arm/meshes/xjt/collision/base_link.stl" scale="0.1 0.1 0.1"/>
  • meshlab軟件可用來查看3D結構,實現stl和dea文件的轉換。
  • 導入模型中包含dea或stl等3維模型,如果3D模型較大,導入時就會很慢甚至程序卡死。
  • URDF座標系定義、V-rep座標系定義以及D-H參數座標系定義都存在差異,注意這個點的一些坑。
  1. 其他相關
  • 常用物體3D模型和URDF文件:http://www.ycbbenchmarks.org/

5.其他的一些嘗試

5.1 通過修改D-H參數來達到快速調整機械臂機械臂結構的需求

D-H參數是表徵機械臂機械結構的參數,通過修改D-H參數的確可以表徵不同結構的機械臂,但是通過修改D-H參數來達到快速調整機械臂機械臂結構的需求,這種想法在邏輯上是不太合適的,因爲通常是先根據性能需求設計好機械臂,然後才能得到機械臂的D-H參數,而不是先設計好D-H參數,再生成機械臂。
不過D-H參數和URDF中的幾何參數之間從原理上的確是可以相互轉換的,也就是說理論上,只要知道了機械臂的D-H參數,這個機械臂的骨架結構是可以繪製出來的,但是更多的外形信息是無法知道的。從D-H參數生成機器人的URDF文件,這方面的研究在網上主要找到以下兩個:

5.2 通過D-H參數快速導入機械臂模型至V-rep中

該部分內容請看博客通過D-H參數快速導入機械臂模型至V-rep中

------The End------------


寫在最後,本篇博客主要是記錄自己在將機器人3維模型導入至V-rep仿真軟件過程中的各種嘗試,由於是各種嘗試,所以內容會看起比較雜亂,因爲這篇博客並不是所謂的教程,只是一篇筆記。此外,以上所有內容主要是講如何導入模型至V-rep中,而想要使用導入的模型進行仿真,還需要對導入的模型進行相關屬性的設置,包括各種仿真參數的設置等等,以及一些控制腳本的編寫等,這些之後有時間再去寫。歡迎針對博客中的內容進行交流~

模型導入V-rep後的後續處理

參考博客:

  • https://blog.csdn.net/weixin_34378045/article/details/85881945
  • https://blog.csdn.net/weixin_34218579/article/details/85882238
  1. 形狀的設置問題
    導入後模型默認爲Compound convex shapes:
    在這裏插入圖片描述
    這種形狀不適合快速進行動力學仿真,可以通過[Menu bar --> Edit -->Morph Selection into convex shapes]將其轉化爲convex shapes來提高仿真計算速度。
    如果是符合形狀,可以使用[Menu bar --> Edit -->Morph Selection into its convex decomposition shapes] 將其轉化爲Compound convex shape來提高仿真計算速度。
    不同形狀的速度參考官方文檔
    將原始形狀可以作爲visual層用於可視化,將生成的convex形狀用於動力學仿真,並可以隱藏。通常將用於動力學仿真的convex形狀的dynamic屬性先設置爲Body is respondable,但Body is dynamic先不勾選,在需要動力學仿真時再勾選。
    注意: 用於可視化的形狀和用於動力學仿真的convex形狀在文件結構上屬於同一層,且convex形狀通常是父節點。

  2. 設置response形狀的屬性爲dynamic,並且把基座設置爲"Set to dynamic if gets parent"

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