相關博客
- 在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:
- 博客內容可能會出現在自己之後的論文中,不知道論文查重會不會和博客內容進行比對,爲了防止之後出現這種情況,博客內容儘量簡寫了。
- 使用環境爲: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)。
- 在Cloud Studio中安裝ROS Kinetic:
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
- 在Cloud Studio中安裝相關的軟件包:xacro,依賴包catkin_pkg,urdf檢查工具urdf_check
sudo apt-get install python-catkin-pkg
sudo apt-get install liburdfdom-tools
檢查urdf文件是否語法合法:check_urdf xxxx.urdf
- 安裝xacro包:
手動安裝xacro包:- 將xacro包clone至本地
git clone https://github.com/ros/xacro.git
- 進入xacro根目錄,進行安裝
sudo python setup.py install
自動安裝:
sudo apt-get install ros-kinetic-xacro
- 將xacro包clone至本地
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
表示繞軸分別旋轉的角度(弧度制),這裏的1.5表示繞y軸旋轉差不多。 - 關節
<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相關知識
- 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
- 小知識點
- 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參數座標系定義都存在差異,注意這個點的一些坑。
- 其他相關
- 常用物體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文件,這方面的研究在網上主要找到以下兩個:
- URDF Generator for Manipulator Robot:2019年的一篇介紹從D-H參數生成URDF文件的論文
- 開源項目DH2URDF,提供了在線實現D-H參數到URDF文件的轉換功能,同時提供了在線URDF文件可視化的功能,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
-
形狀的設置問題
導入後模型默認爲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形狀通常是父節點。 -
設置response形狀的屬性爲dynamic,並且把基座設置爲"Set to dynamic if gets parent"