中文路徑在英語中可能有兩種翻譯:
path
trajectory
首先告訴大家,我們所說的“路徑”的是后者——trajectory。我們看一下這兩種“路徑”在機(jī)械臂的世界里有什么區(qū)別。
設(shè)想機(jī)械臂的end-effector要從A點運動到B點:
從A到B叫path:
如果我們規(guī)定從A到B這個path,必須在特定的時間(t0–t6),經(jīng)過這7個點。
那么這7個點叫waypoints。路徑(trajectory)指的是通過這7個點的具體計劃(例如什么時間,以什么速度等等)。規(guī)劃我們?nèi)绾谓?jīng)過這7個點的算法,叫做路徑規(guī)劃(trajectoryplanning)算法。
上面這7個點,如果機(jī)械臂的end-effector在通過的時候,位置連續(xù)、速度連續(xù)、甚至加速度也是連續(xù)的,那么我們說這個 trajectory 是平滑的(smooth)。
機(jī)械臂中有幾種比較常見的trajectory:
Trapezoidal Trajectories(梯形路徑)
梯形路徑指的是:
end-effector在相鄰waypoints之間的速度是象梯形一樣,先線性加速,然后速度保持不變,在接近目標(biāo)后線性減速。梯形路徑的優(yōu)點是比較簡單實用,但是在每個waypoint會有停頓。下圖是一個機(jī)械臂走梯形路徑的樣例:在過waypoints的時候,會完全停止,所以走的是直線,速度和加速度肯定不連續(xù)。
Polynomial Trajectories(多項式路徑)
其中又分三次多項式和五次多項式。分別寫作:
三次多項式可以記錄end-effector的速度、位置的信息。五次多項式可以記錄end-effector的位置、速度、加速度的信息。下圖是一個五次多項式的例子,可以看到速度、加速度都是連續(xù)的。三次或者五次多項式的trajectory在通過waypoints的時候速度都是連續(xù)的,這和梯形路徑是不一樣的。
下圖是一個機(jī)械臂走五次多項式路徑的樣例:為了保證過waypoints的時候速度不停頓,走的是曲線。
B-splines(B樣條曲線)
B 樣條曲線將除了起始點和終點外,將其他的 waypoints 看成是控制點(controlpoints)。機(jī)械臂的end-effector并不會真正通過這些controlpoints,而在他們之間找一條平滑的曲線。這樣做的目的是在平滑加速度和曲線擬合的準(zhǔn)確性之間找一個折衷方法。
(圖片來自于Wikipedia)
如果一個trajectory只有這7個點,無論機(jī)械臂控制器的運動控制模塊如何強大,都無法保證做到“平滑”的運行。我們必須對路徑點進(jìn)行插值(interpolation)。
下圖的橙色點為插值點示意:
在了解插值后,我們來看一下路徑規(guī)劃出來的信息如何和傳遞到反向運動學(xué)(inversekinematics)。反向運動學(xué)模塊將確保end-effector按照規(guī)劃出來的路徑運行,即路徑跟隨(trajectoryfollowing)。
這里,我們按插值類型情況分兩種模式:
1. Trajectory interpolated in task space
在這種模式下,中間插值的點是在taskspace(即XYZ坐標(biāo)系,或者叫笛卡爾坐標(biāo)系)進(jìn)行插值。下圖表明了這一過程,這時候trajectorygeneration只需要做一次,產(chǎn)生所有的waypoints和interpolationpoints(插值點)。然后運動控制系統(tǒng)在每個控制周期都必須調(diào)用inversekinematics算法去做路徑跟隨(trajectoryfollowing)。
2.Trajectory interpolated in joint space
在這種模式下,中間插值點的點是在jointspace(即對關(guān)節(jié)角度插值)。下圖表明了這一過程。這時候trajectorygeneration也只需要做一次,但做的過程和taskspace的做法不同。即在每一個waypoint調(diào)用一次inversekinematics,然后對關(guān)節(jié)角度的進(jìn)行插值。Trajectoryfollowing模塊只需執(zhí)行插值后的角度指令。
角度方向插值(orientation interpolation)
我們剛才談到的插值,都是針對end-effector的位置(position,即XYZ的坐標(biāo))。我們不應(yīng)該忽略end-effector的角度方向(orientation)插值。我們看一段動畫來了解一下,什么是orientation的插值:
可以看到,隨著end-effector的移動,它的方向也在不斷做出平滑的調(diào)整,在end-effector運行到目標(biāo)位置后,它的方向也調(diào)整到位。當(dāng)然,有很多場合角度方向是不需要調(diào)整的。例如:噴漆機(jī)械臂,永遠(yuǎn)將end-effector指向噴漆作業(yè)面。
MATLAB 中的機(jī)械臂路徑規(guī)劃算法
在R2019a 發(fā)布后RoboticsSystemToolbox(RST)中多了幾個機(jī)械臂路徑規(guī)劃的MATLAB函數(shù)和Simulink模塊。
MATLAB函數(shù):
Simulink模塊:
不管是MATLAB函數(shù)還是類似Simulinkblock,大概這么幾項功能:
生成梯形或者多項式的位置 trajectory
生成角度方向的 trajectory
將上兩者合二為一的生成既包含位置,也包含角度方向(合稱pose)的trajectory——即基于homogeneoustransforms的posetrajectory。
讓我們寫幾行代碼,來產(chǎn)生一個三次多項式的trajectory:
可以看到,位置是連續(xù)的。如果我們將速度(qd)、加速度(qdd)畫出來,可以看到qdd是不連續(xù)的。
Simulink示例
在MATLABfileexchange里搜索“TrajectoryPlanningforRobotManipulators”,會找到一個用多種方式產(chǎn)生trajectory的例子。
用一張表格總結(jié)如下:
這里有兩點值得注意:
無論是MATLAB函數(shù)還是Simulinkblock,所有角度方向的插值都是基于SLERP(sphericallinearinterpolation)。這是一種基于四元數(shù)(quaternions)的插值法。不會造成下圖所示的“不走近路,繞遠(yuǎn)路”的問題。例如,角度要從0度轉(zhuǎn)到30度。因為圓周是360度,錯誤的方式是從0度轉(zhuǎn)到330度–雖然也能到達(dá)指定位置或者角度,但它是錯誤的。在manipJointTrajectory模型中,因為用到了基于jointspace(關(guān)節(jié)角度)的插值,讀者可以注意一下如何處理這個問題。
Time-scaling。在manipTransformTrajectoryTimeScaling模型中,如果不加timescaling這個模塊,那么所有的角度變化和位置變化都是基于線性插值。如果加入了“想要的”速度、加速度信息---即timescaling。我們可以使角度變化和位置變化按照我們想要的梯形或者多項式形式去調(diào)整。例如,我想讓角度一開始不變,然后快速變化,最后速度為0。
-
加速度
+關(guān)注
關(guān)注
0文章
87瀏覽量
20386 -
機(jī)械臂
+關(guān)注
關(guān)注
13文章
540瀏覽量
25153
發(fā)布評論請先 登錄
大象機(jī)器人攜手進(jìn)迭時空推出 RISC-V 全棧開源六軸機(jī)械臂產(chǎn)品
海康威視推出大模型機(jī)械臂防碰撞相機(jī)
如何使用PLC控制myCobot 320機(jī)械臂

使用myCobot 280機(jī)械臂結(jié)合ROS2系統(tǒng)搭建機(jī)械分揀站

深度解析!RK3568 加持機(jī)械臂是如何實現(xiàn)顏色識別與抓取的?

RK3568國產(chǎn)實驗箱+人工智能機(jī)械臂:跳舞、疊羅漢、夾方塊、積木搬運案例全解!

機(jī)械臂的高效運作,連接器起關(guān)鍵作用
【原創(chuàng)】 drawbot 平面機(jī)械臂scara寫字畫畫機(jī)器人DIY教程貼
OrangePi AIpro應(yīng)用:機(jī)械臂應(yīng)用開發(fā)指南

工業(yè)機(jī)器人和機(jī)械臂的設(shè)計、功能和應(yīng)用有哪些區(qū)別?
奧比中光推出2.0版大模型機(jī)械臂
大象機(jī)器人開源協(xié)作機(jī)械臂機(jī)械臂接入GPT4o大模型!

國產(chǎn)Cortex-A55人工智能教學(xué)實驗箱_基于Python機(jī)械臂跳舞實驗案例分享
基于六維力傳感器的機(jī)械臂自動裝配應(yīng)用

評論