机械臂速成小指南(十五):线性规划
👨?🏫🥰🥳需要機械臂相關資源的同學可以在評論區中留言哦🤖😽🦄
指南目錄📖:
🎉🎉機械臂速成小指南(零點五):機械臂相關資源🎉🎉
機械臂速成小指南(零):指南主要內容及分析方法
機械臂速成小指南(一):機械臂發展概況
機械臂速成小指南(二):機械臂的應用
機械臂速成小指南(三):機械臂的機械結構
機械臂速成小指南(四):機械臂關鍵部件之減速機
機械臂速成小指南(五):末端執行器
機械臂速成小指南(六):步進電機驅動器
機械臂速成小指南(七):機械臂位姿的描述方法
機械臂速成小指南(八):運動學建模(標準DH法)
機械臂速成小指南(九):正運動學分析
機械臂速成小指南(十):可達工作空間
機械臂速成小指南(十一):坐標系的標準命名
機械臂速成小指南(十二):逆運動學分析
機械臂速成小指南(十三):軌跡規劃概述
機械臂速成小指南(十四):多項式插值軌跡規劃
機械臂速成小指南(十五):線性規劃
機械臂速成小指南(十六):帶拋物線過渡的線性規劃
機械臂速成小指南(十七):直線規劃?
機械臂速成小指南(十八):圓弧規劃
機械臂速成小指南(十九):機械臂的電路板抓取實驗?
🦾🌏🪐以下為正文🦾🌏🪐
? ? ? ? 上一章節中我們討論了多項式插值軌跡規劃,本章,我們討論一種更為簡單的關節空間軌跡規劃方法:線性規劃。
一、理論分析
? ? ? ? 顧名思義,線性規劃中的“線性”,指的是機械臂的關節變量以恒定的速率變化,即關節的角速度恒定,如下圖所示。
? ? ? ? 這種插值方法是在關節空間中簡單地插入一個經過起點(t_0,θ_0) 與終點(t_f,θ_f) 的線段。令t_0=0 ,該線段可表示為
二、程序仿真
????????我們使用MATLAB對線性插值的軌跡規劃方法進行仿真,并選取選擇空間中一點(-100, -100,300,0,0,0?)作為軌跡規劃的起點,而(200,-200,400,0,0,0)作為軌跡規劃的終點。
????????首先,定義六自由度機械臂的DH參數。
lim1_min = -170 * radian1; lim1_max = 170 * radian1; %關節1(-170,170) lim2_min = -132 * radian1; lim2_max = 0 * radian1; %關節2(-132,0) lim3_min = 1 * radian1; lim3_max = 141 * radian1; %關節3(1,141) lim4_min = -165 * radian1; lim4_max = 165 * radian1; %關節4(-165,165) lim5_min = -105 * radian1; lim5_max = 105 * radian1; %關節5(-105,105) lim6_min = -155 * radian1; lim6_max = 155 * radian1; %關節6(-155,155)lim1 = lim1_max - lim1_min; lim2 = lim2_max - lim2_min; lim3 = lim3_max - lim3_min; lim4 = lim4_max - lim4_min; lim5 = lim5_max - lim5_min; lim6 = lim6_max - lim6_min;theta1 = 0; d1 = 169.77; a1 = 64.2; alpha1 = -pi/2; offset1 = 0; theta2 = 0; d2 = 0; a2 = 305; alpha2 = 0; offset2 = 0; theta3 = 0; d3 = 0; a3 = 0; alpha3 = pi/2; offset3 = pi/2; theta4 = 0; d4 = -222.63; a4 = 0; alpha4 = -pi/2; offset4 = 0; theta5 = 0; d5 = 0; a5 = 0; alpha5 = pi/2; offset5 = 0; theta6 = 0; d6 = -36.25; a6 = 0; alpha6 = 0; offset6 = -pi;????????第二步,運動學建模。
L(1) = Link([theta1, d1, a1, alpha1, offset1], 'standard'); L(2) = Link([theta2, d2, a2, alpha2, offset2], 'standard'); L(3) = Link([theta3, d3, a3, alpha3, offset3], 'standard'); L(4) = Link([theta4, d4, a4, alpha4, offset4], 'standard'); L(5) = Link([theta5, d5, a5, alpha5, offset5], 'standard'); L(6) = Link([theta6, d6, a6, alpha6, offset6], 'standard'); % 定義關節范圍 L(1).qlim=[lim1_min,lim1_max]; L(2).qlim=[lim2_min,lim2_max]; L(3).qlim=[lim3_min,lim3_max]; L(4).qlim=[lim4_min,lim4_max]; L(5).qlim=[lim5_min,lim5_max]; L(6).qlim=[lim6_min,lim6_max]; robot = SerialLink(L,'name','AR3');????????第三步,定義起始點與終止點。
T1=transl(-100,-100,300); %齊次變換矩陣 T2=transl(200,-200,400); %齊次變換矩陣 init_ang=robot.ikine(T1); %運動學逆解 targ_ang=robot.ikine(T2); %運動學逆解? ? ? ? 第四步,定義儲存機械臂關節旋轉角度、角速度及角加速度的數組。
q = zeros(step,N); %初始化機械臂的位置 qd = zeros(step,N); %初始化機械臂的角速度 qdd = zeros(step,N); %初始化機械臂的角加速度????????第五步,按照上述原理進行線性插值。
step = 50 for t = 1:stepq(t,:) = (targ_ang-init_ang)/step * t + init_ang; %位置qd(t,:) = (targ_ang-init_ang)/step; %角速度qdd(t,:) = 0; %角加速度 endT=robot.fkine(q); %運動學正解 nT=T.T; %轉為齊次比那換矩陣 plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%輸出末端軌跡 title('線性插值軌跡'); robot.plot(q); %動畫演示????????不難發現,雖然各個關節是以恒定的角速度旋轉的,但末端執行器在空間中的軌跡并不是直線。
機械臂軌跡規劃之線性規劃matlab仿真程序https://download.csdn.net/download/m0_53966219/87521945?spm=1001.2014.3001.5503
三、編程實現
? ? ? ? 具體的代碼與多項式插值軌跡規劃那一章中的代碼類似,無非就是生成軌跡點的插值函數換成了這個線性的函數。
? ? ? ? ?這種軌跡規劃方法很簡便,但是存在一個問題:我們將機械臂在起始點與終止點處的速度視為零,這就導致了機械臂在這兩個位置會有速度的突變,則會對關節產生沖擊,不利于機械臂的作業精度以及其臂體的堅固性,這一點在機械臂作兩點間往復運動時尤為明顯。
? ? ? ? 因此,由拋物線過渡的線性規劃應運而生,我們會在下一章對其進行介紹。
總結
以上是生活随笔為你收集整理的机械臂速成小指南(十五):线性规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电视:名存实亡,NTSC 色域
- 下一篇: 常见数字芯片功能描述总结