💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
文献来源:
摘要
本研究从控制角度探讨了重力补偿的主题。重力可以通过补偿机械系统或控制法则(如比例-微分(PD)加重力、滑模控制或计算力矩法)来平衡。在连续和离散时间域中,重力补偿项在线性和非线性最优控制中均缺失。控制系统的平衡点通常为零,这导致在所需条件未设置在原点或在其他情况下(其中控制系统的平衡点处重力向量不为零)无法进行调节。在这些情况下,系统需要稳态输入信号来补偿重力。本文介绍了基于非线性最优控制的重力补偿控制法则的稳定性证明及相应的最优性偏差。同样的概念也存在于离散时间控制中,因为它使用系统的模拟到数字转换,并包括系统的重力向量。模拟结果突出了两个重要例子,一个是机器人 manipulator,另一个是倾斜旋翼六旋翼飞行器,作为对所述理论陈述的应用。
重力补偿是机器人学和多体系统动力学中的一个重要课题,根据案例具体设计新型机械结构;或在文献中基于控制器的机制来解决[1, 2]。通常很难精确补偿力[3]。补偿的机械设计虽然增加了系统的总重量,但执行效率平衡了这种观点的成本效益。补偿机制被应用于抵消系统的恒定重量;然而,为了实际使用,由于运动机构会改变不同部件的质心,因此需要一种重量变化的机制 [4]。中本和松平提出了一个带有负载变化的重力补偿机制的协作型机械手 [5]。这个想法是利用关节驱动电机作为紧凑设计中的平衡配重。重力补偿机制的应用非常广泛,例如与机器人 manipulators 一起加工[6]、合作双臂机器人[7]、可展开的网格天线[8]等。Yun 等人研究了一个双臂协作机械手的补偿机制,由于机器人腰部变化或者系统的质心改变而导致受到可变重量的影响 [7]。Ugartemendia 等人研究了康复机器人学中的重力补偿 [9]。研究总结认为,在康复机械系统中,重力补偿对于让接受治疗的人们感受到中性运动是一项强制性功能。
一方面,由于空间限制、系统总重量的增加、设计的成本效益等原因,并非总是可能通过机械机制来补偿重力。另一方面,有些系统需要重力补偿,例如无人机(UAVs)、直升机、自主水下航行器(AUVs)等。对于这类系统,重力无法通过机械方式补偿;它需要额外的推力、力量或输入信号。因此,在这里研究了重力补偿,作为最佳输入法则中的一个控制观点。比例微分(PD)控制是独立控制执行器的一个成熟方法,是一种非基于模型的方法。该结构也很简单,恒定的控制增益负责调整所讨论的系统。对于受到重力影响的系统(如空间机械手),应用 PD 需要较高的增益来实现调节或轨迹追踪 [10]。传统的非线性方法 PD 加重力是解决这个问题的好方法,避免了高增益的选择 [11]。滑模控制(SMC) [12] 和反馈线性化(FL) [13, 14] 是带有重力补偿机制的非线性控制器,自然地嵌入在控制律中;尽管特定的方法也被引入来研究这个课题。De Luca 和 Panzieri 提出了一个迭代方案,为柔性连杆机械手补偿重力[15]。学习部分为建模不精确且末端执行器上的负载未知的情况找到了一个前馈项(用于重力补偿的信号)。相同的方法在输入饱和约束下进行了扩展 [16]。Bembli 等人在两自由度外骨骼肢体上应用了终端滑模控制,以获得在重力补偿中的鲁棒特性 [17]。
📚2 运行结果
2.1 六旋翼无人机离散
2.2 三自由度机械臂连续
2.3 三自由度机械臂离散
部分代码:
figure(1)
axesi=axes('Parent',figure(1),'FontWeight','bold',...
'FontSize',10,...
'FontName','Cambria');
hold(axesi,'all');
stairs(t,x(1,1:length(t)),'k','LineWidth',1.5)
stairs(t,x(2,1:length(t)),'--r','LineWidth',1.5)
stairs(t,x(3,1:length(t)),'-.b','LineWidth',1.5)
line([0,tf],[xdes(1),xdes(1)],'Color','magenta','LineStyle',':')
line([0,tf],[xdes(2),xdes(2)],'Color','magenta','LineStyle',':')
line([0,tf],[xdes(3),xdes(3)],'Color','magenta','LineStyle',':')
xlabel('t[k]','FontWeight','bold','FontSize',10,'FontName','Cambria')
ylabel('angle (rad)','FontWeight','bold','FontSize',10,'FontName','Cambria')
grid on
box on
xlim([0,tf])
set(gcf,'Position',afFigurePosition)
legend('\theta_1[k]','\theta_2[k]','\theta_3[k]')
figure(2)
axesi=axes('Parent',figure(2),'FontWeight','bold',...
'FontSize',10,...
'FontName','Cambria');
hold(axesi,'all');
stairs(t,x(4,1:length(t)),'k','LineWidth',1.5)
stairs(t,x(5,1:length(t)),'--r','LineWidth',1.5)
stairs(t,x(6,1:length(t)),'-.b','LineWidth',1.5)
xlabel('t[k]','FontWeight','bold','FontSize',10,'FontName','Cambria')
ylabel('angular velocity (rad/s)','FontWeight','bold','FontSize',10,'FontName','Cambria')
grid on
box on
xlim([0,tf])
set(gcf,'Position',afFigurePosition)
legend('\omega_1[k]','\omega_2[k]','\omega_3[k]')
figure(5)
axesi=axes('Parent',figure(5),'FontWeight','bold',...
'FontSize',10,...
'FontName','Cambria');
hold(axesi,'all');
stairs(t,U(1,1:length(t)),'k','LineWidth',1.5)
stairs(t,U(2,1:length(t)),'--r','LineWidth',1.5)
stairs(t,U(3,1:length(t)),'-.b','LineWidth',1.5)
xlabel('t[k]','FontWeight','bold','FontSize',10,'FontName','Cambria')
ylabel('input torque (N.m)','FontWeight','bold','FontSize',10,'FontName','Cambria')
grid on
box on
xlim([0,tf])
set(gcf,'Position',afFigurePosition)
legend('\tau_1[k]','\tau_2[k]','\tau_3[k]')
q1=x(1,:);
q2=x(2,:);
q3=x(3,:);
xe1=a1*cos(q1);
ye1=a1*sin(q1);
ze1=d1*ones(1,length(t));
xe2=cos(q1).*(a1+a2*cos(q2));
ye2=sin(q1).*(a1+a2*cos(q2));
ze2=d1-a2*sin(q2);
xe3=cos(q1).*(a1+a3*cos(q2+q3)+a2*cos(q2));
ye3=sin(q1).*(a1+a3*cos(q2+q3)+a2*cos(q2));
ze3=d1-a3*sin(q2+q3)-a2*sin(q2);
figure(10)
axes1=axes('Parent',figure(10),'FontSize',10,'FontName','Cambria','FontWeight','bold');
set(gcf,'Position',afFigurePosition);grid on;box('on');hold(axes1,'all');
axis equal
plot3(xi,yi,zi,'rsquare')
plot3(xf,yf,zf,'ro')
plot3(xe3,ye3,ze3,'k','LineWidth',1.5)
line([0;xe1(1)],[0;ye1(1)],[0;ze1(1)],'Color',[0.5 0.2 0])
for i=[1,round(N/3),N]
line([xe1(i);xe2(i)],[ye1(i);ye2(i)],[ze1(i);ze2(i)],'Color',[0 0.6 1])
line([xe2(i);xe3(i)],[ye2(i);ye3(i)],[ze2(i);ze3(i)],'Color',[0 0.2 0.5])
end
xlabel('X(m)','FontWeight','bold','FontSize',10,'FontName','Cambria')
ylabel('Y(m)','FontWeight','bold','FontSize',10,'FontName','Cambria')
zlabel('Z(m)','FontWeight','bold','FontSize',10,'FontName','Cambria')
legend('start point','end point','trajectory')
view(axes1,[73.8379902690523 4.91872699828262])
print(gcf,'Section_V_A_3DoF_Arm_Discrete.png','-dpng','-r600')
Error_mm=sqrt((xe3(length(t))-xf)^2+(ye3(length(t))-yf)^2+(ze3(length(t))-zf)^2)*1000
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、文章下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取