【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真
前記:
之前學(xué)習(xí)了很多關(guān)于ROS的知識(shí),現(xiàn)在想自己制作一個(gè)四軸器械臂來(lái)練練手。所以就定為arm0.1版本,使用MG90s舵機(jī)來(lái)搭建一個(gè)四軸機(jī)械臂。arm0.1版本的目標(biāo)是對(duì)不同顏色的方塊進(jìn)行分類并在Gazebo中模擬出來(lái)。
在未來(lái)計(jì)劃的arm1.0版本中,計(jì)劃使用步進(jìn)電機(jī)來(lái)搭建六軸機(jī)械臂,使用上RL,實(shí)現(xiàn)人機(jī)交互,希望能在下個(gè)學(xué)期完成它。
一、模型制作
1.實(shí)際模型制作
首先是實(shí)際模型的制作,就使用3d打印機(jī)制作了。我使用的是ANYCUBIC的一款打印機(jī),主要是因?yàn)閮r(jià)格便宜,性價(jià)比比較高,而且安裝也不用太花時(shí)間,使用下來(lái)穩(wěn)定性還不錯(cuò)。
四軸機(jī)械手網(wǎng)上的模型挺多的,我這里采用https://www.thingiverse.com/thing:34829提供的模型,這個(gè)模型設(shè)計(jì)中有考慮誤差,所以打印基本一次成型。
以下是網(wǎng)站中提供的圖片。
實(shí)際模型打印出如下圖。比較需要注意的夾爪部分的齒輪,打印出來(lái)的尺寸和模型給出來(lái)的尺寸還是有區(qū)別的。因?yàn)槭驱X輪結(jié)構(gòu),對(duì)精準(zhǔn)度要求比較高,需要打印幾次才能成功。
舵機(jī)我采用MG90s,畢竟我手頭只有這個(gè)版本的舵機(jī)。舵機(jī)控制使用16路舵機(jī)驅(qū)動(dòng)控制模塊PCA9685:
用arduino UNO控制,接線如圖所示:
圖片來(lái)源見(jiàn)水印,關(guān)于PCA9685模塊的使用可以參考相關(guān)博客:Arduino uno使用PCA9685模塊實(shí)現(xiàn)16路舵機(jī)控制。
以上是這個(gè)項(xiàng)目目前的框圖,有很多細(xì)節(jié)沒(méi)有標(biāo)清楚,只標(biāo)出了硬件部分,其它的在未來(lái)會(huì)慢慢補(bǔ)全。
全程使用VM虛擬機(jī),在未來(lái)arm1.0版本中可能使用Raspberry pi來(lái)控制,只把圖像處理和模擬部分放在PC上。
然后測(cè)試了我所使用的這個(gè)USB攝像頭,發(fā)現(xiàn)其好像無(wú)法接到虛擬機(jī)中。然后考慮到價(jià)格問(wèn)題,還是覺(jué)得沒(méi)有必要買個(gè)新的攝像頭,要實(shí)現(xiàn)對(duì)不同顏色的方塊進(jìn)行分類,完全可以在gazebo中模擬出來(lái)。arduino和虛擬機(jī)的連接是沒(méi)有問(wèn)題的,可以正常使用虛擬機(jī)進(jìn)行下載程序。關(guān)于arduino如何與ros進(jìn)行連接,將在以后的博文中進(jìn)行說(shuō)明。
2.Solidworks模型制作
Solidworks使用的是2017版本。因?yàn)橹疤峁┠P偷木W(wǎng)站只提供stl文件,stl導(dǎo)入solidworks中的文件基本無(wú)法使用,所以就決定自己畫(huà)了。因?yàn)槭悄M,所以精度不是太高。只是簡(jiǎn)單的制作了其結(jié)構(gòu),夾爪部分感覺(jué)比較麻煩,也沒(méi)有制作。最后使用了Solidworks自帶的渲染工具,其效果如下圖。
模型建好了就可以使用相關(guān)插件導(dǎo)出到urdf了。
二、Solidworks文件轉(zhuǎn)urdf
URDF(Universal Robot Description Format)——通用機(jī)器人描述格式,它是ROS里邊使用的一種機(jī)器人的描述文件,包含的內(nèi)容有:連桿、關(guān)節(jié),運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)參數(shù)、可視化模型、碰撞檢測(cè)模型等。
1.sw_urdf_exporter插件
要將arm.SLDASM文件導(dǎo)出為urdf文件,sw_urdf_exporter插件是必不可少的。
1.5.1版本中提供了exe文件,下載完成后直接安裝就可以了。之后就可以在插件欄找到它。
我的2017版本的solidworks的導(dǎo)出urdf選項(xiàng)在:工具–>File -->Export as urdf。
我當(dāng)時(shí)一度以為該選項(xiàng)在文件選項(xiàng)欄,試了各種方法找不到導(dǎo)出選項(xiàng),最后發(fā)現(xiàn)它在工具選項(xiàng)欄…真的是白白浪費(fèi)了我?guī)讉€(gè)小時(shí)的時(shí)間
2. 添加坐標(biāo)系和轉(zhuǎn)軸
導(dǎo)出urdf文件的插件沒(méi)有問(wèn)題后,接下來(lái)就要為導(dǎo)出urdf文件做準(zhǔn)備了,首先是為我們的模型添加坐標(biāo)系和轉(zhuǎn)軸。
轉(zhuǎn)軸添加比較簡(jiǎn)單,有很多添加方法。我使用的是選擇某一個(gè)圓柱面添加。
坐標(biāo)系是需要確定坐標(biāo)系原點(diǎn),在選擇x,y,z的方向。
所以一個(gè)建議是首先確定axis0-3,再確定coordinate0-4。
3.導(dǎo)出urdf文件
在主界面打開(kāi),工具–>File -->Export as urdf,按照我圖片中給出的順序進(jìn)行操作。注意不要選到別的地方,在點(diǎn)擊Export之前,所有操作都不會(huì)保存。我嘗試了幾次才正確的導(dǎo)出的。
點(diǎn)擊Rreview and Export之后,出現(xiàn)以下窗口,記得填寫(xiě)limit部分。
導(dǎo)出后,生成文件如下:
其中文件作用如下:
? scripts (python 可執(zhí)行文件)
? src (C++ source files)
? msg (for custom message definitions)
? srv (for service message definitions)
? include -> 需要作為依賴項(xiàng)的頭/庫(kù)
? config -> 配置文件
? launch -> 提供更自動(dòng)化的啟動(dòng)節(jié)點(diǎn)方式
? urdf (通用機(jī)器人描述文件)
? meshes (CAD文件.dae (Collada)或.stl (STereoLithography)格式)
? worlds (用于Gazebo模擬環(huán)境的類似XML的文件)
4.參考博客
導(dǎo)出urdf文件我參考了以下博客,
1.【ROS學(xué)習(xí)】Solidworks模型轉(zhuǎn)化為URDF文件格式+三連桿機(jī)械臂示例+逆運(yùn)動(dòng)學(xué)
2. ROS Wiki sw_urdf_exporter
三、rivz仿真
1.rivz仿真
將導(dǎo)出的文件復(fù)制到~/catkin_ws/src目錄下.
修改display.launch文件,其在launch文件夾下。
將default的值從False改為T(mén)rue,否則無(wú)法打開(kāi)Joint State Publish工具。
<argname="gui"default="False" />//將False改為T(mén)rue
...
運(yùn)行命令打開(kāi)文件
cd ~/catkin_ws
source devel/setup.bash
catkin_make
roslaunch arm0 display.launch
之后我們就可以打開(kāi)RViz了,但是現(xiàn)在沒(méi)有任何模型加載。
解決方法是,首先在Fixed Frame欄中選中自己定義的鏈接名稱。
之后點(diǎn)擊左下角的“Add”來(lái)添加我們的模型。
選擇RobotModel,然后點(diǎn)擊‘OK’。
之后模型就可以加載出來(lái)了,然后移動(dòng)鼠標(biāo)經(jīng)行縮放移動(dòng),或者可以使用Joint State Publish來(lái)調(diào)整關(guān)節(jié)角度。
注意Joint State Publish的調(diào)整范圍是根據(jù)之前設(shè)定的limit。
2.借助MoveIt!在rviz中進(jìn)行逆運(yùn)動(dòng)學(xué)測(cè)試
使用Moveit!提供的setup_assistant來(lái)配置機(jī)械臂的package文件,需要使用到上一部分生成的URDF文件。
使用命令
roslaunch moveit_setup_assistant setup_assistant.launch
打開(kāi)assistant后點(diǎn)擊Create New Moveit Configuration Package 導(dǎo)入U(xiǎn)RDF文件,我的urdf文件路徑如圖片所示
設(shè)置Self-Collision,點(diǎn)擊Generate Collsion Matrix :
設(shè)置Virtual Joints,Parent Frame Name設(shè)為world_frame,save完成后如下圖所示。相關(guān)名稱可以參考圖片中的名稱。
設(shè)置Planning Groups名稱
選擇運(yùn)動(dòng)學(xué)求解器,然后點(diǎn)擊Add Kin. Chain。然后把base_link設(shè)置為Base Link,把link4設(shè)置為T(mén)ip Link:
設(shè)置Robot Pose,和作者郵箱。
然后設(shè)置保存路徑,如下圖所示。點(diǎn)擊Generate Package。
文件如下圖所示:
運(yùn)行命令
cd ~/catkin_ws/src/config/launch/
roslaunch demo.launch
運(yùn)行如下圖所示。
例如,我們可以通過(guò)調(diào)整紅框中的部分來(lái)進(jìn)行逆運(yùn)動(dòng)學(xué)模擬。
總結(jié)
以上是生活随笔為你收集整理的【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Udacity机器人软件工程师课程笔记(
- 下一篇: 【从零开始的ROS四轴机械臂控制】(二)