MATLABa+Robotics Toolbox v10.4,工具箱版本不同命令有差异。
本文持续更新。
参考:Robotics Toolbox官方文档
文章目录
1. 位姿描述1.1 二维空间位姿1.2 三维空间位姿 2. 运动学2.1 建立机器人模型2.2 运动学2.3 雅克比矩阵 3. 机器人轨迹规划3.1 关节空间3.2 笛卡尔空间 4. 动力学4.1 逆动力学4.2 动力学方程4.3 正向动力学1. 位姿描述
1.1 二维空间位姿
T = SE2(x, y, theta); % x、y为偏移量,theta为旋转角度trplot2(T);% 画出T坐标系T = transl2(x, y); % 纯平移变换
1.2 三维空间位姿
rotx(alpha), roty(beta), rotz(theta);% 绕xyz轴旋转的旋转矩阵(3x3)trplot(T);% 画出相应的旋转坐标系tranimate(T);% 旋转动画transl( [x, y, z] );% 平移变换(4x4)trotx(theta), troty(theta), trotz(theta);% 只有旋转的绕xyz轴旋转的齐次变换矩阵(4x4)
三维齐次变换矩阵还可以使用T = SE3()方法,在这里不多赘述。
2. 运动学
2.1 建立机器人模型
L(i) = Link( [theta, d, a, alpha, sigma] ) % 定义关节,DH参数:关节角、连杆偏距、连杆长度、连杆转角,sigma=1为移动副L(i).qlim = [ min, max ]% 关节角度限制Six_link = SerialLink( L, 'name', 'Sixlink' )% 将Link连接成一个机械臂Six_link.plot( [theta_1, theta_2, ..., theta_n] ) % 画出机械臂,theta为关节初始角度Six_link.display% 输出机械臂信息Six_link.teach% 机械臂操控交互界面
Link的参数:
运动学参数:
动力学参数:
电机参数:
2.2 运动学
Six_link.fkine( [theta_1, theta_2, ..., theta_n] );% 正运动学Six_link.ikine6s(T);% 逆运动学封闭解Six_link.ikine(T);% 逆运动学数值解
2.3 雅克比矩阵
% q是位姿Six_link.jacob0(q)% 对于基坐标系的雅克比矩阵Six_link.jacobn(q)% 对于末端坐标系的雅克比矩阵
3. 机器人轨迹规划
3.1 关节空间
[q, qd, qdd] = jtraj(q0, qf, m)% q0——初始位姿,qf——结束位姿,m——步数,q——位姿,qd——速度,qdd——加速度
3.2 笛卡尔空间
Tc = ctraj(T0, T1, n)% T0——初始齐次变换矩阵,T1——结束时齐次变换矩阵, n——步数
4. 动力学
% R是SerialLink类R.dyn% 输出动力学特性
4.1 逆动力学
R.rne(q, qd, qdd)% 逆向动力学(角度、角速度、角加速度——>力、力矩)R.rne(q, qd, qdd, grav, fext)% grav——重力加速度,fext——机械臂末端受力W=[Fx Fy Fz Mx My Mz]
4.2 动力学方程
R.gravload(q)% 计算重力载荷R.inertia(q)% 关节空间惯性矩阵R.coriolis(q, qd)% 科氏力和向心力的耦合矩阵R.payload(M, P)% 施加有效载荷:在P处施加质量M的载荷
4.3 正向动力学
[T2, q, qd] = R.fdyn(T1, torqfun)% 正向动力学 % 输入:T1——积分时间,torqfun——力矩函数% 输出:T2——时间,q——角度,qd——角速度
这里有点难理解,用一下官方文档的例子来说明
% 首先定义一个力矩函数(PD Controller)function tau = mytorqfun(t, q, qd, qstar, P, D)tau = P*(qstar-q) + D*qd;end% 再使用正向动力学函数[t,q] = robot.fdyn(10, @mytorqfun, qstar, P, D);