在学习机器人动力学相关内容时看到MATLAB论坛上一个有意思的仿真项目Impedance Control for a 2-Link Robot Arm - User-interactive,一个用MATLAB实现的平面二连杆机械臂阻抗控制仿真。用户可以点击并拖拽鼠标来实时改变机械臂的目标位置,在控制力矩作用下机械臂会跟随目标点运动。按空格键可以切换控制模式,此时拖拽鼠标用来给末端施加一个扰动力,由于阻抗控制的作用末端表现得像弹簧阻尼器一样,扰动力消失后末端回复到目标位置。

让我们来关注一下实现的细节。如下图所示,连杆1和连杆2在XY平面上通过旋转关节串联构成一个二自由度的机械臂(忽略关节摩擦等因素),重力加速度$g$沿着Y轴负方向(向量形式可写为$\mathbf{g}=[0,-g,0]^T$)。机械臂关节$a$固定在坐标原点,末端为$e$,F为作用在末端的力。$c_1$与$c_2$分别为两个连杆的质心,杆长分别为$l_1$、$l_2$,杆的质量分别为$m_1$、$m_2$,质心到关节的距离分别为$d_1$、$d_2$。$\theta_1$为与Y轴正方向的夹角($\theta_1=\theta_2=0$时机器人保持竖直状态),$\theta_2$为连杆2与连杆1之间的夹角,是一个相对角度。

定义上述变量后根据理论力学等知识开始一系列计算。首先计算连杆上各点的位置坐标:

连杆1与连杆2在坐标系中的方向向量与角度$\theta_1$、$\theta_2$相关,其中连杆1的方向向量为$\mathbf{er_1}=\begin{bmatrix}-sin\theta_1\\ \cos\theta_1\\0\end{bmatrix}$,连杆2的方向向量为$\mathbf{er_2}=\begin{bmatrix}-sin(\theta_1+\theta_2)\\ \cos(\theta_1+\theta_2)\\0\end{bmatrix}$

$\mathbf{r_{ac_1}}=d_1 \cdot \mathbf{er_1}\\ \mathbf{r_{bc_2}}=d_2 \cdot\mathbf{er_2}\\ \mathbf{r_{be}}=l_2 \cdot\mathbf{er_2}\\ \mathbf{r_{ab}}=l_1 \cdot\mathbf{er_1}\\ \mathbf{r_{ac_2}}=\mathbf{r_{ab}}+\mathbf{r_{bc_2}}\\ \boxed{\mathbf{r_{ae}}=\mathbf{r_{ab}}+\mathbf{r_{be}}}$

然后计算各点速度:连杆1上线速度的方向向量为$\mathbf{ev_1}=\begin{bmatrix}-cos\theta_1\\ -\sin\theta_1\\0\end{bmatrix}$,连杆2上线速度的方向向量为$\mathbf{ev_2}=\begin{bmatrix}-cos(\theta_1+\theta_2)\\ -\sin(\theta_1+\theta_2)\\0\end{bmatrix}$

$\mathbf{v_{c_1}}=d_1 \cdot \dot{\theta_1} \cdot\mathbf{ev_1}\\ \mathbf{v_b}=l_1 \cdot \dot{\theta_1}\cdot \mathbf{ev_1}\\ \mathbf{v_{c_2}}=\mathbf{v_b} + d_2 \cdot (\dot{\theta_1}+\dot{\theta_2})\cdot \mathbf{ev_2}\\ \boxed{\mathbf{v_e}=\mathbf{v_b} + l_2 \cdot (\dot{\theta_1}+\dot{\theta_2})\cdot \mathbf{ev_2}}$

接着对速度求导计算各点加速度:

$\begin{align*}&\mathbf{a_{c_1}}=\dot{\mathbf{v_{c_1}}} = d_1 \cdot \ddot{\theta_1} \cdot\mathbf{ev_1} - d_1 \cdot \dot{\theta_1}^2 \cdot \mathbf{er_1}\\&\mathbf{a_b}=\dot{\mathbf{v_b}} = l_1 \cdot \ddot{\theta_1} \cdot\mathbf{ev_1} - l_1 \cdot \dot{\theta_1}^2 \cdot \mathbf{er_1}\\&\mathbf{a_{c_2}}=\dot{\mathbf{v_{c_2}}} = d_2 \cdot (\ddot{\theta_1}+\ddot{\theta_2}) \cdot\mathbf{ev_2} - d_2 \cdot (\dot{\theta_1}+\dot{\theta_2})^2 \cdot \mathbf{er_2} + \mathbf{a_b}\end{align*}$

根据受力情况可计算出关节处的力矩,对于关节$b$来说出除了电机力矩$\mathbf{\tau_2}$外,杆件2自身重量以及末端上的作用力$\mathbf{F}$都会对$b$点产生力矩,因此$b$点的合力矩为:

$\mathbf{M_b}=(\mathbf{r_{bc_2}}\times m_2 \mathbf{g}) + (\mathbf{r_{be}}\times  \mathbf{F}) +\mathbf{\tau_2}$

根据动量矩定理,杆2对$b$点的动量矩变化率$\boxed{\frac{d\mathbf{L_2}}{dt} =\mathbf{M_b} }$,$\frac{d\mathbf{L_2}}{dt} =I_2(\mathbf{\ddot{\theta_1}}+\mathbf{\ddot{\theta_2}})+ \mathbf{r_{bc_2}} \times m_2 \mathbf{a_{c_2}}$,其中$I_2$为杆2绕其质心$c_2$的转动惯量,$I_2=\frac{1}{12}m_2{l_2}^2$。根据动量矩定理可得到角加速度$\ddot{\theta_2}$与力矩$\mathbf{M_b}$的关系式。

对于关节$a$,外力的合力矩为:

$\begin{align*}\mathbf{M_a}&=(\mathbf{r_{ac_2}}\times m_2 \mathbf{g}) +(\mathbf{r_{ac_1}}\times m_1 \mathbf{g}) + (\mathbf{r_{ae}}\times  \mathbf{F}) +\mathbf{\tau_1}\\ \frac{d\mathbf{L_1}}{dt}&=I_2(\mathbf{\ddot{\theta_1}}+\mathbf{\ddot{\theta_2}})+I_1\mathbf{\ddot{\theta_1}}+ (\mathbf{r_{ac_2}} \times m_2 \mathbf{a_{c_2}}) + (\mathbf{r_{ac_1}} \times m_1 \mathbf{a_{c_1}})\end{align*}$

其中$I_1$为杆1绕其质心$c_1$的转动惯量,$I_1=\frac{1}{12}m_1{l_1}^2$。根据动量矩定理$\boxed{\frac{d\mathbf{L_1}}{dt} =\mathbf{M_a} }$可得到角加速度$\ddot{\theta_1}$与力矩$\mathbf{M_a}$的关系式。

通常可将根据动量矩定理或牛顿-欧拉法推导出的等式写为如下形式:$$\boxed{\tau = M(\theta)\ddot{\theta}+C(\theta,\dot{\theta})+G(\theta)}$$

如果机械臂自由度为$n$,$M(\theta)$为$n\times n$阶正定对称矩阵,$M(\theta)\ddot{\theta}$代表惯性力项。$M(\theta)$中的主对角线元素表示各连杆本身的有效惯量,代表给定关节上的力矩与产生的角加速度之间的关系,非对角线元素表示连杆之间的耦合惯量,即是某连杆的加速运动对另一关节产生的耦合作用力矩的度量 ;$C(\theta,\dot{\theta})$为$n\times 1$阶向心力和科氏力项;$G(\theta)$为$n\times 1$阶的重力项,与机器人的形位$\theta$有关。

在纯位置控制下施加在机械臂末端的外力并不会影响末端的运动,因为这种情况可以认为机械臂是完全刚性的。而如果要实现主动柔顺控制,即使机械臂表现出一定的柔性就需要考虑其与环境之间的相互作用。这时关节驱动力矩可写为:$$\boxed{\tau = M(\theta)\ddot{\theta}+C(\theta,\dot{\theta})+G(\theta)+J^T(\theta)F_{tip}}$$

上面等式中,$F_{tip}$为机械臂末端与外界环境之间的交互力,$J$为机械臂的雅可比矩阵,用于将关节空间速度映射到操作空间:$v=J\dot{\theta}$,雅可比矩阵的转置也可将操作空间中的力映射到关节空间中:$\tau=J^TF$。对于本例,机器人雅可比矩阵可用MATLAB中的函数

机械臂与环境交互产生的力矩可写为$\tau_{ext}=J^T(\theta)F_{tip}=\underline{J^T(\theta)[M(\ddot{x_d}-\ddot{x})+D(\dot{x_d}-\dot{x})+K(x_d-x)]}$,$x_d$和$x$分别代表目标位置和实际位置,$\dot{x_d}$和$\dot{x}$分别代表目标速度和实际速度。矩阵$K$和$D$代表与环境交互的刚度和阻尼。机械臂末端的加速度$\ddot{x}$一般难以测量,如果直接对速度进行微分又会产生大量噪声。通常对于协作型机械臂,自身重量设计的较轻,因此可以忽略其惯性,即令$M=0$。

下面开始对动力学系统进行迭代计算,按照仿真步长对求解出的角加速度进行积分,更新机器人的关节位置和速度,并在图形界面中动态显示。

改变刚度和阻尼系数后(Kp=100, Kd=10),明显可以看出机器人刚性变大,在末端施加力只产生很小的形变,而且控制末端运动到目标位置时更迅速。

参考:

原文:https://www.cnblogs.com/21207-iHome/p/12148726.html

二关节机械臂matlab控制,二连杆机械臂阻抗控制模拟(一)相关推荐

  1. matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟初来乍到,现在需要用matlaB绘制二次B样条曲面,现在已知信息: 小弟做这个已经一个星期了,现在无任何进展,现在是万分着急,希望高手们给小弟指点一二 ...

  2. 二维对流方程matlab求解,二维对流扩散方程的有限元计算方法

    冯立伟+张成+屈福志 " " " 摘要:针对二维对流扩散方程边值问题,采用三角形剖分,使用二维线性有限元进行计算分析.采用matlab编写了计算程序,使用算例进行了数值实 ...

  3. matlab 二维高斯分布绘图,matlab:画二维高斯分布密度函数图

    首先,把二维正态分布密度函数的公式贴这里 这只图好大啊~~ 但是上面的那个是多维正态分布的密度函数的通式,那个n阶是对称正定方阵叫做协方差矩阵,其中的x,pi,u都是向量形式.虽然这个式子很酷,但是用 ...

  4. 二维方向图matlab程序,二维点源阵方向图,阵因子matlab

    10x10点源天线阵方向图的MATLAB程序 dx=0.01;%点源间距 f=1e10;%周期 c0=3e8;%波速 lam=c0/f; M=10; Theta=0:0.01*pi:pi; Phi=0 ...

  5. matlab二维信号卷积,matlab的二维卷积操作

    Boost.Python简介 Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 以下内 ...

  6. 【控制control】机器人运动控制器----基于模型的控制方法(关节控制--阻抗控制)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.设计基于模型泛型控制器的步骤 二.机械臂控制科普 1.工业机械臂 ...

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

      本文是对文献 [1] 的复现. 文章目录 更新日志 关于阻抗控制 离散化阻抗控制控制器的实现 基于阻抗控制的工业机器人轨迹跟踪系统仿真 ■ 环境说明 ■ 系统说明 ■ 结果展示 后记 项目开源 参 ...

  8. 用matlab和RTB做二连杆机械臂动力学建模

    文章目录 写在前面 二连杆机械臂 RTB建模 仿真与验证 源代码 写在前面 本文使用的工具为matlab以及Peter Corke的RTB(Robotics Toolbox).基于RTB 10.3.1 ...

  9. ADAMS的二连杆机械臂PID控制

    这里利用ADAMS 2014,来完成如下方法. 1 二连杆平面臂初始状态呈直线 图1 二连杆平面臂呈直线时三维模型 不计重力,忽略摩擦.在xy平面,连杆1和连杆2长度分别为300mm,100mm,其宽 ...

最新文章

  1. webservice(二)简单实例
  2. 围观一下tp的游戏保护 一
  3. ASP.NET MVC 4 过滤器(Authorize)
  4. 【送书活动】机器学习项目开发实战
  5. 吞吐量-Corda的故事
  6. c# 去除转义符号_c#语法
  7. Mendix:低代码平台四大常见用例开发
  8. 4 PP配置-组织架构-定义MRP控制者
  9. 《JavaScript高效图形编程(修订版)》——6.7 画布绘制基础
  10. 将动态路由、布局和RouteViews添加到Blazor应用程序组件
  11. centos 5.4 nfs服务器搭建
  12. 人间真实:程序员的 60 个崩溃瞬间!
  13. php order不管用,php – WooCommerce – get_order()不起作用,它返回零
  14. 转贴:Google Reader:信息背后的信息,无可替代的伟大
  15. 简析三星新专利,语音识别技术的新方法
  16. 开放式耳机哪个品牌好?南卡、韶音、索尼、Oladance开放式耳机推荐
  17. 是非人生 — 一个菜鸟程序员的5年职场路 第8节
  18. java程序员微信群,欢迎准java行业人员加入,会一直更新
  19. linux工作原理fiq,笔记:linux中实现fiq模式(关于arm中断,唤醒中断)
  20. Trunk链路的配置

热门文章

  1. 10 款最佳剪贴板管理器
  2. IT项目管理痛点和应对方法总结
  3. 生字癖用计算机,那些因为太复杂没被收录的生僻字,终于被录入电脑
  4. mysql 鼠标右键无法使用_笔记本电脑鼠标右键无反应怎么办
  5. 與网络故障专家的對話
  6. 华为如何分屏_3199元起!华为MatePad 5G发布:麒麟820芯片
  7. 正式对标苹果,小米 12 系列三箭齐发,MIUI 欲成为跨设备操作系统!
  8. VS运行变得异常卡顿的记录及其解决
  9. 携程CEO孙洁:17年后的红色警报
  10. 如何把ppt转换成word文档