机器人仿真技术学习笔记(二)

2023-11-30 05:38

本文主要是介绍机器人仿真技术学习笔记(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器人的动力学和多项式路径规划

机器人工具箱用的是robot-9.10的MATLAB机器人工具箱

MATLAB机器人工具箱网址

用的书籍是《机器人仿真与编程技术》清华大学出版社2018年2月第1版。
电子书密码是love

1.刚体机器人加速度

​ 设有坐标系 { A } \{A\} {A} { B } \{B\} {B},坐标系 { B } \{B\} {B}固连与刚体上,该刚体相对 { A } \{A\} {A}有一个运动 Q B Q^B QB { B } \{B\} {B}相对于 { A } \{A\} {A}的位置用位置矢量和旋转矩阵 P B O R G A , R B A P_{BORG}^A,R_B^A PBORGARBA来描述, Q Q Q { A } \{A\} {A}中的线速度:
V Q A = V B R O G A + R B A V Q B V_Q^A=V^A_{BROG}+R^A_BV^B_Q VQA=VBROGA+RBAVQB
{ B } \{B\} {B}相对于 { A } \{A\} {A}的旋转角速度为 Ω B A \Omega_B^A ΩBA。而加速度可以描述为:
a Q A = a B R O G A + Ω B A × ( Ω B A × R B A Q B ) + Ω B A × R B A × Q B a^A_Q=a_{BROG}^A+{\Omega}^A_B\times(\Omega^A_B \times R^A_BQ^B)+\Omega_B^A\times R_B^A \times Q^B aQA=aBROGA+ΩBA×(ΩBA×RBAQB)+ΩBA×RBA×QB
角速度关系:
Ω C A = Ω B A + R B A Ω C B \Omega^A_C = \Omega_B^A+R_B^A\Omega_C^B ΩCA=ΩBA+RBAΩCB
求导后得到:
α C A = α B A + R B A α C B + Ω B A × R B A Ω C B \alpha_C^A=\alpha_B^A+R_B^A\alpha_C^B+\Omega_B^A\times R_B^A\Omega_C^B αCA=αBA+RBAαCB+ΩBA×RBAΩCB

2.机器人刚体的质量分布

​ 对于转动关节的机械臂,在一个刚体绕任意轴旋转时候,惯性张量表示机器人的质量分布,在 { A } \{A\} {A}上的惯性张量:
I A = ( I x x − I x y − I x z − I x y I y y − I y z − I x z − I y z I z z ) I_A=\begin{pmatrix} I_{xx}&-I_{xy}&-I_{xz}\\ -I_{xy}&I_{yy}&-I_{yz}\\ -I_{xz}&-I_{yz}&I_{zz} \end{pmatrix} IA=IxxIxyIxzIxyIyyIyzIxzIyzIzz
其中:
I x x = ∫ ∫ ∫ V ( y 2 + z 2 ) ρ d v ( 同 理 I y y , I z z 也 类 似 ) I x y = ∫ ∫ ∫ V x y ρ d v ( 同 理 I y z , I x z 也 类 似 ) I_{xx}=\int\int\int_V(y^2+z^2)\rho dv(同理I_{yy},I_{zz}也类似)\\ I_{xy} = \int\int\int_V xy\rho dv(同理I_{yz},I_{xz}也类似) Ixx=V(y2+z2)ρdv(Iyy,Izz)Ixy=Vxyρdv(Iyz,Ixz)

3.牛顿欧拉递推动力学方程

先对机器人的每个刚体求出每个连杆的质心位置和惯性张量。

质心运动定律,作用于机器人连杆质心上的作用力为 F F F,与刚体的速度 v c v_c vc有以下关系:
F ⃗ = m v c ˙ ⃗ \vec{F}=m\vec{\dot{v_c}} F =mvc˙
对于一个转动的刚体,引起刚体转动的力矩为 N N N欧拉方程用来表示作用在刚体上的力矩与角速度和角加速度之间的关系,其中 I C I^C IC为惯性张量,但是刚体的质心位置要在坐标原点:
N = I C ω ˙ + ω × I C ω N=I^C\dot{\omega}+\omega\times I^C\omega N=ICω˙+ω×ICω
​ 以上的方程只是为了得到已知关节位姿,速度和加速度为别为 q , q ˙ , q ¨ q,\dot{q},\ddot{q} q,q˙,q¨时,求出驱动力和驱动力矩

​ 以下是迭代步骤:

S t e p 1 : Step1: Step1:已知连杆位置 q q q,从连杆 1 1 1递推到 n n n,计算连杆的速度 q ˙ \dot{q} q˙和加速度 q ¨ \ddot{q} q¨,再对所有连杆用上述两个方程,得到连杆质心上的力和力矩。对于转动关节:
ω i + 1 ( i + 1 ) = R i i + 1 ω i ( i ) + θ ˙ i + 1 Z i + 1 \omega_{i+1}^{(i+1)}=R_i^{i+1}\omega _i^{(i)}+\dot{\theta}_{i+1}Z_{i+1}\\ ωi+1(i+1)=Rii+1ωi(i)+θ˙i+1Zi+1
由于太过复杂,故公式如下:
在这里插入图片描述

S t e p 2 : Step2: Step2:计算关节力矩(是驱动器施加在机器人上的力矩或作用在机器人上使其运动的外力)
在这里插入图片描述

其中,角速度,角加速度和线加速度的初值分别是:
ω 0 0 = ( 0 , 0 , 0 ) T ω ˙ 0 0 = ( 0 , 0 , 0 ) T v 0 ˙ = ( − g , 0 , 0 ) T \omega_0^{0}=(0 ,0 ,0)^T\\ \dot{\omega}_0^{0}=(0 ,0 ,0)^T\\ \dot{v_0} = (-g,0,0)^T ω00=(0,0,0)Tω˙00=(0,0,0)Tv0˙=(g,0,0)T

拉格朗日方程建立机器人动力学方程的方法省去。

4.状态空间方程

1.定义

不考虑一切摩擦因素的状态空间方程如下:
M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) + F ( q ˙ ) + J ( q ) T f = τ M(q)\ddot{q}+C(q,\dot{q})\dot{q}+G(q)+F(\dot{q})+J(q)^Tf = \tau M(q)q¨+C(q,q˙)q˙+G(q)+F(q˙)+J(q)Tf=τ
其中, q ∈ R n q \in R^n qRn,关节偏移量, M ( q ) ∈ n × n M(q) \in n \times n M(q)n×n,机器人惯性矩阵角对称矩阵,里面非零元素的大小取决于 q ( θ 1 , θ 2 , . . . θ n ) q(\theta_1,\theta_2,...\theta_n) q(θ1,θ2,...θn), M ( q ) ( ¨ q ) M(q)\ddot(q) M(q)(¨q)表示惯性力的大小。 C ( q , q ˙ ) q ˙ ∈ R n C(q,\dot{q})\dot{q}\in R^n C(q,q˙)q˙Rn科里奥利矩阵,表示科里奥利力和离心力。 G ( q ) ∈ R n G(q)\in R^n G(q)Rn表示重力矩阵, F ( q ˙ ) F(\dot{q}) F(q˙)为摩擦力矩, J ( q ) T f J(q)^Tf J(q)Tf表示关节力, J J J是雅可比矩阵, τ ∈ R n \tau \in R^n τRn,是与关节位移量 q q q有关的广义驱动力向量。

2. P u m a 560 Puma560 Puma560参数的获取

Matlab工具箱可提取部分机器人的模型的动力参数。以 p u m a 560 puma560 puma560为例子,对函数说明。

(1)运动学和动力学参数
>> mdl_puma560
>> p560.links(6).dyntheta=q, d=          0, a=          0, alpha=          0, offset=          0 (R,stdDH)m    =        0.09r    =           0           0       0.032I    = |     0.00015           0           0 ||           0     0.00015           0 ||           0           0       4e-05 |Jm   =     3.3e-05Bm   =    3.67e-05Tc   =     0.00396(+)     -0.0105(-)G    =       76.69qlim = -4.642576 to 4.642576

可以求得第 6 6 6个连杆的 D H DH DH参数,连杆质量,质心坐标,惯性矩阵,电机转动惯量,电机摩擦力,库仑力和齿轮传动比。

(2)惯性矩阵

​ 当机器人关节为 q q q时,获取惯性矩阵的函数为:
S e r i a l L i n k . i n e r t i a ( q ) SerialLink.inertia(q) SerialLink.inertia(q)

>> p560.inertia([0 0 0 0 0 pi/2])
(3)科里奥利矩阵

​ 机器人关节角为 q q q,关节角速度为 q ˙ \dot{q} q˙,获取科里奥利矩阵的函数:
S e r i a l L i n k . c o r i o l i s ( q , q ˙ ) SerialLink.coriolis(q,\dot{q}) SerialLink.coriolis(q,q˙)

>> q = [0 0 0 0 0 0];
>> qd = [pi/6 pi/6 pi/6 pi/6 pi/6 pi/6];
>> p560.coriolis(q,qd)
(4)重力矩阵

当机器人关节角为 q q q时,获取重力矩阵的函数为:
S e r i a l L i n k . g r a v l o a d ( q ) SerialLink.gravload(q) SerialLink.gravload(q)

>> q = [0 0 0 0 0 pi/2];
>> p560.gravload(q)
(5)摩擦矩阵

p 560. l i n k s ( 6 ) . d y n p560.links(6).dyn p560.links(6).dyn这个函数中有说明。

>> p560.links(6).Tc
(6)逆向动力学的求解

τ \tau τ:不同关节的驱动力矩,函数为:
τ = p 560. r n e ( q , q ˙ , q ¨ , g r a v ) \tau = p560.rne(q,\dot{q},\ddot{q},grav) τ=p560.rne(q,q˙,q¨,grav)
例如,用该函数计算机器人沿一条轨迹运动时的每个时刻的驱动力矩:

mdl_puma560;
T1 = transl(0.3,0.1,0.2)*trotx(pi/2);
q_1 = p560.ikine6s(T1);
T2 = transl(0.2,0.4,0)*trotx(pi)/2;
q_2 = p560.ikine6s(T2);
t = [0:0.1:1]';
[q,qd,qdd] = jtraj(q_1,q_2,t);
%tranimate(T1,T2);
tu = p560.rne(q,qd,qdd);
plot(t,tu(:,1),'r');
hold on
plot(t,tu(:,1),'r');
plot(t,tu(:,2),'g');
plot(t,tu(:,3),'b');
plot(t,tu(:,4),'c');
plot(t,tu(:,5),'m');
plot(t,tu(:,6),'y');
xlabel('时间/s');
ylabel('驱动力矩/N.mm^2');
title('求驱动力矩图');

在这里插入图片描述

5.正向动力学问题

1.正动力学计算方法

有机器人系统的状态空间方程可知其加速度为:
q ¨ = M ( q ) − 1 ( τ − C ( q , q ˙ ) q ˙ − G ( q ) + F ( q ˙ ) ) \ddot{q} = M(q)^{-1}(\tau-C(q,\dot{q})\dot{q}-G(q)+F(\dot{q})) q¨=M(q)1(τC(q,q˙)q˙G(q)+F(q˙))
如果我们从 t = 0 t=0 t=0时刻开始计算。设 q ( 0 ) = q 0 , q ˙ ( 0 ) = 0 : q(0)=q_0,\dot{q}(0)=0: q(0)=q0,q˙(0)=0:

当经过 Δ t 时 \Delta t时 Δt,机械臂的速度为:
q ˙ ( t + Δ t ) = q ˙ ( t ) + q ¨ ( t ) Δ t \dot{q}(t+\Delta t) = \dot{q}(t)+\ddot{q}(t)\Delta t q˙(t+Δt)=q˙(t)+q¨(t)Δt
此时,机械臂的位置是:
q ( t + Δ t ) = q ( t ) + q ˙ ( t ) Δ t + 1 2 q ¨ ( t ) Δ t 2 q(t+\Delta t) = q(t)+\dot{q}(t)\Delta t +\frac{1}{2}\ddot{q}(t)\Delta t^2 q(t+Δt)=q(t)+q˙(t)Δt+21q¨(t)Δt2
若将 q = q ( t + Δ t ) , q ˙ = q ˙ ( t + Δ t ) q = q(t+\Delta t ),\dot{q} = \dot{q}(t+\Delta t) q=q(t+Δt),q˙=q˙(t+Δt)带入上面第一个方程,就可以求得 q ¨ = q ¨ ( t + Δ t ) \ddot{q} = \ddot{q}(t+\Delta t) q¨=q¨(t+Δt)。这样就可以求出其对应的 q , q ˙ , q ¨ q,\dot{q},\ddot{q} q,q˙,q¨

相应的数值积分方法就不多说了。

2. M a t l a b Matlab Matlab代码

如果我们 T T T为采样时间(时间间隔), t o r q f u n torqfun torqfun表示给定的力矩函数, q , q d q,qd q,qd分别指代 q , q ˙ q,\dot{q} q,q˙
[ T , q , q d ] = S e r i a l L i n k . f d y n ( T , t o r q f u n ) [T,q,qd] = SerialLink.fdyn(T,torqfun) [T,q,qd]=SerialLink.fdyn(T,torqfun)
​ 如果要计算角加速度 q ¨ \ddot{q} q¨ τ \tau τ为驱动力矩。可以做如下函数计算:
q d d = S e r i a l L i n k . a c c e l ( q , q d , τ ) qdd = SerialLink.accel(q,qd,\tau) qdd=SerialLink.accel(q,qd,τ)

mdl_puma560;
q = [0 0 0 0 0 0];
qd = [0 0 0 0 0 0];
tor = [1 1 1 1 1 1];
qdd = p560.accel(q,qd,tor);>> qddqdd =0.0471-8.53724.18545.19525.88415.1508 

6. S e r i a l L i n k SerialLink SerialLink 类的函数说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.机器人运动轨迹问题

1.运动轨迹五项式插值

​ 已知路径段的起始点和终止点的位置,速度和加速度:
θ ( t ) = a 0 + a 1 t + a 2 t 2 + a 3 t 3 + a 4 t 4 + a 5 t 5 \theta(t) = a_0+a_1t+a_2t^2+a_3t^3+a_4t^4+a_5t^5 θ(t)=a0+a1t+a2t2+a3t3+a4t4+a5t5
​ 约束条件为:
θ 0 = a 0 θ f = a 0 + a 1 t f + a 2 t f 2 + a 3 t f 3 + a 4 t f 4 + a 5 t f 5 θ 0 ˙ = a 1 θ f ˙ = a 1 + 2 a 2 t f + 3 a 3 t f 2 + 4 a 4 t f 3 + 5 a 5 t f 4 θ 0 ¨ = 2 a 2 θ f ¨ = 2 a 2 + 6 a 3 t f + 12 a 4 t f 2 + 20 a 5 t f 3 \theta_0 = a_0\\ \theta_f = a_0+a_1t_f+a_2t_f^2+a_3t_f^3+a_4t_f^4+a_5t_f^5\\ \dot{\theta_0} = a_1\\ \dot{\theta_f} = a_1+2a_2t_f+3a_3t_f^2+4a_4t_f^3+5a_5t_f^4\\ \ddot{\theta_0} = 2a_2\\ \ddot{\theta_f} = 2a_2+6a_3t_f+12a_4t_f^2+20a_5t_f^3 θ0=a0θf=a0+a1tf+a2tf2+a3tf3+a4tf4+a5tf5θ0˙=a1θf˙=a1+2a2tf+3a3tf2+4a4tf3+5a5tf4θ0¨=2a2θf¨=2a2+6a3tf+12a4tf2+20a5tf3
​ 解得最终的解:
a 0 = θ 0 a 1 = θ 0 ˙ a 2 = θ 0 ¨ 2 a 3 = 20 θ f − 20 θ 0 − ( 8 θ f ˙ + 20 θ 0 ˙ ) t f − ( 3 θ 0 ¨ − θ f ¨ ) t f 2 2 t f 3 a 4 = 30 θ 0 − 30 θ f − ( 14 θ f ˙ + 16 θ 0 ˙ ) t f + ( 3 θ 0 ¨ − 2 θ f ¨ ) t f 2 2 t f 4 a 5 = 12 θ f − 12 θ 0 − ( 6 θ f ˙ + 6 θ 0 ˙ ) t f − ( θ 0 ¨ − θ f ¨ ) t f 2 2 t f 5 a_0 = \theta_0\\ a_1 = \dot{\theta_0}\\ a_2 = \frac{\ddot{\theta_0}}{2}\\ a_3 = \frac{20\theta_f-20\theta_0-(8\dot{\theta_f}+20\dot{\theta_0})t_f-(3\ddot{\theta_0}-\ddot{\theta_f})t_f^2}{2t_f^3}\\ a_4 = \frac{30\theta_0-30\theta_f-(14\dot{\theta_f}+16\dot{\theta_0})t_f+(3\ddot{\theta_0}-2\ddot{\theta_f})t_f^2}{2t_f^4}\\ a_5 = \frac{12\theta_f-12\theta_0-(6\dot{\theta_f}+6\dot{\theta_0})t_f-(\ddot{\theta_0}-\ddot{\theta_f})t_f^2}{2t_f^5} a0=θ0a1=θ0˙a2=2θ0¨a3=2tf320θf20θ0(8θf˙+20θ0˙)tf(3θ0¨θf¨)tf2a4=2tf430θ030θf(14θf˙+16θ0˙)tf+(3θ0¨2θf¨)tf2a5=2tf512θf12θ0(6θf˙+6θ0˙)tf(θ0¨θf¨)tf2

2. M a t l a b Matlab Matlab代码

​ 关节速度为 v v v,加速度为 a a a q q q m × n m \times n m×n的变化过程中的角度, m m m为采样点, n n n为自由度:
[ q , v , a ] = j t r a j ( q 1 , q 2 , t ) [q,v,a] = jtraj(q_1,q_2,t) [q,v,a]=jtraj(q1,q2,t)

mdl_puma560
T1 = transl(0.3,0.1,0)*trotx(pi);
T2 = transl(0.3,0.3,0)*transl(0.3,0.1,0)*trotx(pi);
t = 0:0.1:10;
q = jtraj(p560.ikine6s(T1),p560.ikine6s(T2),t);%移动
p560.plot(q) %显示动画
%绘制笛卡尔空间的轨迹
T3 = p560.fkine(q);
p = transl(T3);
plot(p(:,1),p(:,2));

在这里插入图片描述

这篇关于机器人仿真技术学习笔记(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/435837

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件