基于阻抗控制的工业机器人轨迹跟踪系统 Simulink/Simscape 仿真

  本文是对文献 [1] 的复现。


更新日志

  • Github 仓库
    • 2021/02/03
      • 第一次上传
    • 2021/04/18
      • 修改贴图路径为相对路径
      • 在 Model Properties 中手动添加模型装配数据脚本回调函数,解决中文路径问题
      • 添加 2018a - 2020b 版本仿真模型文件
      • 添加参考文献文件
  • 文章本身
    • 2021/04/28
      • 读者 Q&A 更新

关于阻抗控制

  阻抗控制的提出可以追溯到 1984 年,Neville Hogan 在 American Control Conference 发表的 Impedance Control:An Approach to Manipulation ,次年,Hogan N. 又在 Journal of Dynamic Systems Measurement and Control-transactions of The Asme 发表了阻抗控制经典三部曲 —— Impedance Control:An Approach to Manipulation, Part I --Theory, Part II – Implementation, Part III – Applications

图为 2021/01/21 时博主做的组会 Presentation

  博主理解的阻抗控制,实际其控制的目标是调节机器人的末端位置(笛卡尔坐标空间)和末端作用力之间的动态关系,以保证机器人在适当的柔顺运动过程中进行轨迹跟踪,至于是更加柔顺还是更注重轨迹跟踪精度则是由阻抗控制模型(算法)式(1)进行调节的。为了更好的理解阻抗模型各项的作用,可以对该阻抗模型进行简化,例如 f e = k ( x d − x ) f_e =k(x_d-x) fe=k(xdx), 这个时候说明我们只考虑了控制机器人末端与环境之间的位置关系(由胡克定律,此时两者之间就像只有一个弹簧连接一样);同样地,我们让 f e = b ( x ˙ d − x ˙ ) + k ( x d − x ) f_e = b(\dot{x}_d -\dot{x}) + k(x_d-x) fe=b(x˙d

一、流程和代码 1. 建立机器人模型 使用Simscape Multibody建立机器人模型,包括机器人的几何结构、关节和执行器等组件。 ```matlab % Define robot geometry L1 = 0.5; L2 = 0.5; L3 = 0.2; % Create robot model robot = rigidBodyTree('DataFormat','column','MaxNumBodies',3); % Add base body body = rigidBody('base'); joint = rigidBodyJoint('base_joint','fixed'); setFixedTransform(joint,trvec2tform([0,0,0])); body.Joint = joint; addBody(robot,body,'base'); % Add first link body = rigidBody('link1'); joint = rigidBodyJoint('joint1','revolute'); setFixedTransform(joint,trvec2tform([0,0,0])); setJointAxis(joint,[0 0 1]); body.Joint = joint; addBody(robot,body,'base'); % Add second link body = rigidBody('link2'); joint = rigidBodyJoint('joint2','revolute'); setFixedTransform(joint,trvec2tform([L1,0,0])); setJointAxis(joint,[0 0 1]); body.Joint = joint; addBody(robot,body,'link1'); % Add third link body = rigidBody('link3'); joint = rigidBodyJoint('joint3','revolute'); setFixedTransform(joint,trvec2tform([L1+L2,0,0])); setJointAxis(joint,[0 0 1]); body.Joint = joint; addBody(robot,body,'link2'); % Define end-effector endeffector = rigidBody('endeffector'); setFixedTransform(endeffector.Joint,trvec2tform([L1+L2+L3,0,0])); addBody(robot,endeffector,'link3'); ``` 2. 定义机器人关节角度 使用模型参数窗口或Matlab脚本定义机器人各个关节的角度和运动范围。 ```matlab % Define joint angles and limits positions = zeros(3,1); positions(1) = deg2rad(45); positions(2) = deg2rad(-30); positions(3) = deg2rad(60); lowerLimits = [-pi/2 -pi/2 -pi/2]; upperLimits = [ pi/2 pi/2 pi/2]; ``` 3. 添加PID控制器 使用Simulink中的PID Controller模块添加PID控制器,包括比例、积分和微分三个控制参数。 4. 设计控制器输入信号 使用Simulink中的Sine Wave或Step模块设计控制器输入信号,包括关节位置、速度和加速度等。 二、最终实现结果 本研究所进行的并联机器人仿真主要包括位置控制和力控制两个部分。仿真结果显示,PID控制器能够有效地控制机器人的位置和力,实现精确的运动控制和力控制。此外,还进行了碰撞避免和轨迹跟踪仿真实验,结果表明设计控制系统能够有效地避免碰撞和实现精确的轨迹跟踪。具体实现结果可以通过Simulink模型中的Scope或To Workspace模块进行输出和分析。
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值