1. 程式人生 > >【ROS學習】Solidworks模型轉化為URDF檔案格式+三連桿機械臂示例+逆運動學

【ROS學習】Solidworks模型轉化為URDF檔案格式+三連桿機械臂示例+逆運動學

URDF(Universal Robot Description Format)——通用機器人描述格式,它是ROS裡邊使用的一種機器人的描述檔案,包含的內容有:連桿、關節,運動學和動力學引數、視覺化模型、碰撞檢測模型等。

到目前為止,本文的主要內容有兩個:(1)將solidworks裡繪製的三連桿機械臂的三維模型轉化為URDF檔案,並在rviz中開啟;(2)在rviz中測試該模型的逆運動學。

一, 將Solidworks模型轉化為URDF檔案

這裡寫圖片描述

下載sw_urdf_exporter外掛:

下載ROS提供的solidworks轉urdf的外掛安裝檔案(連結)—sw2urdfSetup.exe,安裝之後再開啟solidworks(如果你的solidworks版本無法載入外掛的話,多試幾個版本,本人使用的是2014版本

)後會在選單欄上的自定義選項旁邊箭頭下找到“外掛”,並點選,如下圖所示:
這裡寫圖片描述

載入外掛:

進入如下介面,選擇“SW2URDF”外掛並選擇,點選確定載入,如下圖:
這裡寫圖片描述

繪製機械臂的簡易模型:

本文要研究的是平面三連桿構型的機械臂,一般我們習慣將關節的軸設為Z軸,故在繪製機械臂模型的時候,注意將各個關節的軸的座標定義準確,如下一步驟和圖片所示。

新增座標系和轉軸:

在繪製各個連桿的零件圖的時候,新增各自的座標系和轉軸(其實就是下一個連桿的關節軸),點選選單欄中的“插入”->“參考幾何體”->“座標系”,“基準軸”,5個連桿的座標系和轉軸如下圖所示,從左至右連桿的名稱分別為:base_link(coordinate0,axis0),link1(coordinate1,axis1),link2(coordinate2,axis2),link3(coordinate3,axis3),gripper(coordinate_gripper)。
這裡寫圖片描述

在URDF介面設定座標系和轉軸:

開啟要轉換的模型的裝配體,如下圖所示,在工具欄上出現file選項,點擊出現Export to URDF,左邊會出現URDF Exportor的屬性介面:
這裡寫圖片描述
下面是分別對各個連桿的座標系和轉軸進行設定,使用了前面新增的座標系和軸,具體來說就是:
link1的座標系為coordinate1,繞axis0旋轉,關節型別:revolute;
link2的座標系為coordinate2,繞axis1旋轉,關節型別:revolute;
link3的座標系為coordinate3,繞axis2旋轉,關節型別:revolute;
gripper的座標系為coordinate_gripper,繞axis3,它是固定(fixed)關節。
然後點選“preview and export”:
這裡寫圖片描述

設定關節極限

需要在紅框處填寫上界和下界,否則在執行的時候會出錯,然後點選“finish”,會生成package檔案,注意預設生成的名字帶有後綴.SLDASM,需要將其改成不帶下標點並且全都為小寫字母的名稱,否則編譯會出錯。
這裡寫圖片描述

生成package檔案

生成的package檔案如下圖所示:
這裡寫圖片描述
可以在urdf資料夾裡找到生成的urdf檔案。

修正package檔案內容

我在測試的時候發現生成的package檔案裡有些是錯誤的,直接編譯是無法通過的,需要修正的地方有三個:(1)package.xml裡的的作者郵箱;(2)將urdf資料夾的名字改為robots;(3)將display.launch裡的一個引數改成“True”。

如下所示,預設生成的package.xml裡的email是不合法的,只要改成合法的email就可以了。

  </description>
  <author>me</author>
  <maintainer email="me2email.com" /> //改為合法的email
  <license>BSD</license>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roslaunch</build_depend>

如下所示,display.launch檔案裡的裡的False改為True,否則無法開啟Joint State Publish工具。

<launch>
  <arg
    name="model" />
  <arg
    name="gui"
    default="False" />//將False改為True
  <param
    name="robot_description"
    textfile="$(find manipulator34)/robots/manipulator34.urdf" />

ROS下測試

通過roslaunch 命令啟動display.launch以後,在rviz的介面中將Global Options下的Fixed Frame 由map改為base_link(自己定義的基座的名字),最終效果如下圖所示:
這裡寫圖片描述
這裡寫圖片描述

二, 在rviz中進行逆運動學測試

本部分的內容是使用Moveit提供的setup_assistant來配置機械臂的package檔案,需要使用到上一部分生成的URDF檔案。
使用命令

roslaunch moveit_setup_assistant setup_assistant.launch

開啟setup_assistant:

這裡寫圖片描述

點選Create New Moveit Configuration Package 匯入URDF檔案(在上一部分已經生成的檔案中找到URDF檔案)

這裡寫圖片描述

設定Self-Collision,點選Generate Default Collsion Matrix :

這裡寫圖片描述
設定Virtual Joints,Parent Frame Name應設為world_frame:
這裡寫圖片描述
Planning Groups設定名稱,選擇運動學求解器,然後點選Add Kin. Chain:
這裡寫圖片描述
把base_link設定為Base Link,把gripper設定為Tip Link:
這裡寫圖片描述
設定一個Robot Pose:
這裡寫圖片描述
End Effectors 和Passive Joints 沒有設定,暫時不知道這兩項有什麼用。
作者資訊的郵箱的格式一定要準確:
這裡寫圖片描述
然後生成配置檔案,選擇目錄和package的名稱。
這裡寫圖片描述
執行package 的demo.launch,在rviz中點選機械臂末端的小球和箭頭,隨著末端位置的變化,機械臂的構型會逐漸變化,這就是求解逆運動學的過程。
這裡寫圖片描述
還可以給定一個起始位置和終點位置,使用OMPL提供的規劃器進行運動規劃:
這裡寫圖片描述
暫時還不知道如何在rviz中新增障礙物,以後慢慢琢磨。