ROS 之 KUKA iiwa编程
目錄
?
背景介紹
ROS API說明
ROS環(huán)境搭建
背景介紹
目前,市面上大多數(shù)的拖動(dòng)試教機(jī)器人是UR的協(xié)作機(jī)器人和DLR-KUKA的iiwa機(jī)器人,相比于UR機(jī)器人,iiwa機(jī)器人在結(jié)構(gòu)上有一點(diǎn)重要的不同。
UR在每個(gè)關(guān)節(jié)上采取的是雙編碼器的方式,分別測(cè)量電機(jī)角度和連桿角度。而iiwa機(jī)器人在每個(gè)關(guān)節(jié)上還加入了一個(gè)單軸力矩傳感器(一般位于減速器輸出端與末端連桿間),用于測(cè)量每個(gè)關(guān)節(jié)的輸出力矩。如圖所示,iiwa在牽引拖動(dòng)時(shí)表現(xiàn)更好,同時(shí)iiwa機(jī)器人擁有更小的運(yùn)動(dòng)盲區(qū)。用戶可以施加更小的力就可以牽著機(jī)器人按其意圖運(yùn)動(dòng),而不會(huì)擔(dān)心機(jī)械臂運(yùn)動(dòng)受限。
?
ROS API說明
以iiwa為代表的七軸機(jī)械臂在高精度的工作中有著很重要的應(yīng)用,但是作為以java語言為驅(qū)動(dòng)的機(jī)械臂,相較于以python為驅(qū)動(dòng)的UR機(jī)械臂而言,其上手難度更高,難以去進(jìn)行二次開發(fā)。之前常用的開發(fā)主要通過SunriseWorkbench等軟件進(jìn)行的開發(fā)。難以滿足現(xiàn)有的分布式控制需求。為此也有很多人通過使用ROSjava來對(duì)iiwa機(jī)器人進(jìn)行開發(fā)。但是ROSjava已在幾年前停止了維護(hù)。為此本文嘗試通過TCP+ROS+Python的搭建方法來滿足機(jī)械臂的驅(qū)動(dòng)需求。本文為KUKA-iiwa 智能機(jī)器人提供了應(yīng)用程序編程接口(API)。來支持后續(xù)的iiwa開發(fā)工作。該API建立在KUKA iiwa內(nèi)核安全性的基礎(chǔ)上,可實(shí)現(xiàn)緊密的工作并與操作員進(jìn)行交互。它將功能引入了機(jī)器人操作系統(tǒng)(ROS),后者提供了一個(gè)分布式開發(fā)環(huán)境,同時(shí)允許多種新的設(shè)備形式輕松地進(jìn)行接口。
?
API架構(gòu)
開發(fā)的API設(shè)計(jì)得很簡單,通過TCP通訊建立出一套方便與ROS交互開發(fā)的平臺(tái)。API體系結(jié)構(gòu)側(cè)重于突破通常在Smartpad上運(yùn)行的KUKA Sunrise控制器中可用的功能。通過使用下圖所示的通用結(jié)構(gòu),可以看到該體系結(jié)構(gòu)擴(kuò)展了KUKA LBR iiwa的功能。API公開了在機(jī)器網(wǎng)絡(luò)上操作的接口。這允許在KUKA LBR iiwa的操作中輕松部署和利用不同的傳感方法和額外的計(jì)算資源。
?
KUKA-iiwa的守護(hù)程序還處理一些低級(jí)但通用和關(guān)鍵的控制任務(wù),例如碰撞檢測(cè)。這樣的操作可以給我們的二次開發(fā)提供基礎(chǔ)的安全保障。ROS-KUKA節(jié)點(diǎn)也以Python腳本語言實(shí)現(xiàn),通過訂閱ROS節(jié)點(diǎn)來使KUKA守護(hù)程序和ROS主節(jié)點(diǎn)之間起到中間接口的作用。通過python訂閱來自其他控制ROS節(jié)點(diǎn)的命令,并將它們傳遞給KUKA服務(wù)端。這樣可以實(shí)現(xiàn)良好的外部擴(kuò)展。同樣,它從KUKA服務(wù)端接收感官和狀態(tài)信息,并通過ROS將其其發(fā)布到python中。從而實(shí)現(xiàn)在計(jì)算機(jī)上不安裝KUKA Sunrise OS即可外部運(yùn)行此ROS-KUKA節(jié)點(diǎn),這意味著無需修改KUKA Sunrise Cabinet。因此,保留了KUKA提供的安全協(xié)議,并且添加了功能而不是對(duì)其進(jìn)行了更改。無需在Sunrise OS上安裝第三方軟件(例如ROS),只需使用基于標(biāo)準(zhǔn)Sunrise的應(yīng)用程序就可以設(shè)置KUKA iiwa ROS接口。
下表列出了可通過API調(diào)用的ROS主題以讀取KUKA-iiwa內(nèi)部的參數(shù)
| 訂閱主題名稱 | 描述 | 例子 |
| JointPosition [A1,A2,A3,A4,A5,A6,A7]time | 對(duì)應(yīng)了iiwa7個(gè)自由度 | JointPosition [0.0, 0.17, 0.0, 1.92, 0.0,0.35, 0.0] 1459253274.1 |
| ToolPosition [X, Y, Z, A, B, C] time | 工具末端的位置以及三個(gè)旋轉(zhuǎn)量 | ToolPosition [433.59711426170867,0.028881929589094864, 601.4449734558293,3.1414002368275726, 1.0471367465304213,3.141453681799645] 1459253274.11 |
| ToolForce [X, Y, Z] time | 力模式施加的力 | ToolForce [13.485958070668463,0.3785658886199012, 5.964988607372689] 1459253274.11’ |
| ToolTorque [A, B, C] time | 設(shè)置對(duì)應(yīng)的三個(gè)扭矩參數(shù) | ToolTorque [13.485958070668463, 0.3785658886199012, 5.964988607372689] 1459253274.11’ |
| JointAcceleration Float time | joint關(guān)節(jié)加速度值 | JointAcceleration 0.4 1459253274.11’ |
| JointVelocity Float time | joint關(guān)節(jié)速度值 | JointVelocity 1.0 1459253274.11’ |
| JointJerk Float time | 關(guān)節(jié)選取最優(yōu)的jerk | JointJerk 1.0 1459253274.11’ |
| isCompliance Boolean time | 判斷機(jī)器人狀態(tài)是否符合規(guī)范 | isCompliance off 1459253274.11’ |
| isReadyToMove Boolean time | 判斷機(jī)器人是否執(zhí)行完所有步驟 | isReadyToMove true 1459253274.11’ |
| isCollision Boolean time | 檢測(cè)是否碰撞 | isCollision false 1459253274.11’ |
| isMastered Boolean time | 是否為主程序 | isMastered true 1459253274.11’ |
| isJointOutOfRange Boolean time | 是否超出設(shè)定值范圍 | isJointOutOfRange false 1459253274.11’ |
另外一個(gè)表列出了可通過字符串調(diào)用的ROS主題以向KUKA-iiwa發(fā)送指令
| 訂閱主題名稱 | 描述 | 例子 |
| setJointAcceleration F | 設(shè)定/變更關(guān)節(jié)加速度值 | ’setJointAcceleration 0.4’ |
| setJointVelocity F | 設(shè)定/更改關(guān)節(jié)速度值 | ’setJointVelocity 1.0’ |
| setJointJerk F | 設(shè)置/更改關(guān)節(jié)Jerk速度值 | ’setJointJerk 1.0’ |
| setPosition A1 A2 A3 A4 A5 A6 A7 ptp/lin | 根據(jù)關(guān)節(jié)位置移動(dòng)機(jī)器人手臂。可以選擇點(diǎn)對(duì)點(diǎn)(ptp)或線性(lin)運(yùn)動(dòng)。float類型的角度值(以度為單位)可以在A1-7中替換。如果不需要移動(dòng)任何軸,可以使用-代替值。該示例為除A2不變的每個(gè)軸分配新位置。 | ’setPosition 0 21 0 -100 0 60 0 ptp’ |
| setPositionXYZABC X Y Z A B C ptp/lin | 在機(jī)器人笛卡爾空間中移動(dòng)機(jī)器人末端執(zhí)行器。可以選擇點(diǎn)對(duì)點(diǎn)(ptp)或線性(lin)運(yùn)動(dòng)。這會(huì)將機(jī)器人末端執(zhí)行器移動(dòng)到特定位置[x,y,z]方向[a,b,c](浮點(diǎn)中的值)。如果不需要更改任何參數(shù),可以使用-代替值。 | ’setPositionXYZABC 700 0 290 - 180 0 -180 lin’ |
| MoveXYZABC X Y Z A B C | 僅通過點(diǎn)對(duì)點(diǎn)(ptp)運(yùn)動(dòng)在機(jī)器人笛卡爾空間中移動(dòng)機(jī)器人末端執(zhí)行器。對(duì)于給定值(以毫米和度為單位),這會(huì)將機(jī)器人末端執(zhí)行器沿特定方向[x,y,z]和/或方向[a,b,c]移動(dòng)。 | MoveXYZABC 10 20 0 30 0 0 |
| MoveCirc X1 Y1 Z1 A1 B1 C1 X2 Y2 Z2 A2 B2 C2 BlendingOri | 以給定的混合值將機(jī)器人末端執(zhí)行器從第一個(gè)位置( [x1 y1 z1 a1 b1c1])的當(dāng)前位置以弧形/圓周運(yùn)動(dòng)從其當(dāng)前位置移動(dòng)到第二個(gè)位置([x2y2 z2 a2 b2 c2]) 。 | MoveCirc 700 0 290 -180 0 -180 710 0 300 -180 0 -180 0.1 |
| setCompliance X Y Z Z B C | 在每個(gè)x,y,z,a,b和c中具有特定剛度的情況下激活機(jī)器人的Compliance模式。給定的示例僅在x和y直角坐標(biāo)系中以非常低的剛度激活Compliance。 | ’setCompliance 10 10 5000 300 300 300’ |
| resetCompliance | 停用機(jī)器人的“合規(guī)性”模式 | ’resetCompliance’ |
| resetCollision | 如果檢測(cè)到任何碰撞,則重置碰撞 | ’resetCollision’ |
| forceStop | 停止機(jī)器人并刪除所有等待執(zhí)行的機(jī)器人運(yùn)動(dòng)隊(duì)列 | ’forceStop’ |
| setWorkspace xmin ymin zmin xmax ymax zmax | 定義工作區(qū)邊界 | ‘SetWorkspace 100 -300 0 600 300 500’ |
ROS環(huán)境搭建
.........詳情請(qǐng)參考古月居文章
總結(jié)
以上是生活随笔為你收集整理的ROS 之 KUKA iiwa编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用mindmanager总结的vb系统常
- 下一篇: [转]我泪长流:沉痛悼念清华水木BBS