matlab实现三自由度的机械臂旋转

1 内容与要求

根据表一机械臂长度,以及图一机械臂配置为机械臂开发一个控制器,使其能够执行特定的任务。更具体地说,让机械臂的末端执行器移动到特定的点。项目要求:
① 你的控制器应该能够控制一个3 自由度的机械臂到达给定的目的地。
② 你的代码应该要有足够的注释来解释它是怎么工作的。
③你的代码应该包括控制过程的可视化,这表示我们希望你的机械臂在3D
图形环境中移动。
④独立完成,按时提交,有特殊情况请提前说明。

三自由度的机械臂长度如下:

机械臂相关配置如下:

matlab源代码robot_hand.m:

startup_rvc
clear;clc;
syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 theta3 alpha3 a3 d3 d;%参数变量
%三个方程,三个齐次方程组
A1=[cos(theta1),-sin(theta1)*cos(alpha1),sin(theta1)*sin(alpha1),a1*cos(theta1);sin(theta1),cos(theta1)*cos(alpha1),-cos(theta1)*sin(alpha1),a1*sin(theta1);0,          sin(alpha1),             cos(alpha1),            d1            ;0,          0,                       0,                       1           ];A2=[cos(theta2),-sin(theta2)*cos(alpha2),sin(theta2)*sin(alpha2),a2*cos(theta2);sin(theta2),cos(theta2)*cos(alpha2),-cos(theta2)*sin(alpha2),a2*sin(theta2);0,          sin(alpha2),            cos(alpha2),             d2            ;0,          0,                      0,                        1           ];A3=[cos(theta3),-sin(theta3)*cos(alpha3),sin(theta3)*sin(alpha3),a3*cos(theta3);sin(theta3),cos(theta3)*cos(alpha3),-cos(theta3)*sin(alpha3),a3*sin(theta3);0,          sin(alpha3),            cos(alpha3),             d3            ;0,          0,                       0,                       1           ];
%给变量赋值
a1=sym(0.5);alpha1=sym(pi/2);d1=sym(0);
a2=sym(1);alpha2=sym(-pi/2);d2=sym(0);
a3=sym(1);alpha3=sym(0);d3=sym(0);
T=eval(A1*A2*A3)%前三个自由度其次矩阵相乘,得到T(0,3),即末端执行器相对于原点的坐标
%矩阵最右边一列,为末端执行器的X,Y,Z坐标
X_axis=T(1,4)%末端执行器的X坐标
Y_axis=T(2,4)%末端执行器的Y坐标
Z_axis=T(3,4)%末端执行器的Z坐标%给定末端执行器的终点,没有加约束条件,会得到复数的解,后期需要修改。
[sola,solu,solv]=solve(X_axis==1,Y_axis==0,Z_axis==0,theta1,theta2,theta3)
%求到一共有4组解,即四组转动的角度,我们只用第一组的解
solutions=[sola,solu,solv]double_x=double(sign(real(solutions(1,1)))*abs(solutions(1,1)))%原类型为syms,转变为double类型,x坐标,会出现复数的解
double_y=double(sign(real(solutions(1,2)))*abs(solutions(1,2)))%原类型为syms,转变为double类型,y坐标,会出现复数的解
double_z=double(sign(real(solutions(1,3)))*abs(solutions(1,3)))%原类型为syms,转变为double类型,z坐标,会出现复数的解%D-H参数
L1=Link('d',0,'a',0.5,'alpha',pi/2);%Link类函数
L2=Link('d',0,'a',1,'alpha',-pi/2);
L3=Link('d',0,'a',1,'alpha',0);
robot=SerialLink([L1,L2,L3]);%SerialLink类函数,创建机器人可视化模型
robot.name='旋转的机械臂';%机械臂名字
%robot.manuf='xxxxxxx';%制造商名init_ang=[0 0 0];%起始的角度
targ_ang=[double_x,double_y,double_z];%结束时转过的角度,我们取齐次方程组的第一组解
step=80;%时间矢量长度T
[q,qd,qdd] = jtraj(init_ang,targ_ang,step);%jtraj函数:计算两点之间一个关节的空间轨迹,利用5阶quintic多项式来表示速度和加速度。%q为空间轨迹,qd为速度,qdd为加速度
grid on
T=robot.fkine(q);%根据插值,求得末端执行器的位姿
plot3(squeeze(T(1,4,:)),squeeze(T(2,4,:)),squeeze(T(3,4,:)));%画出末端轨迹
hold on
robot.plot(q,'tilesize',2);%动画演示

可能用到的文件robot_tool.m:

disp('Robotics, Vision & Control: (c) Peter Corke 1992-2011 http://www.petercorke.com')if verLessThan('matlab', '7.0')warning('You are running a very old (and unsupported) version of MATLAB.  You will very likely encounter significant problems using the toolboxes but you are on your own with this');
end
tb = false;
rvcpath = fileparts( mfilename('fullpath') );robotpath = fullfile(rvcpath, 'robot');
if exist(robotpath,'dir')addpath(robotpath);tb = true;startup_rtb
endvisionpath = fullfile(rvcpath, 'vision');
if exist(visionpath,'dir')addpath(visionpath);tb = true;startup_mvtb
endif tbaddpath(fullfile(rvcpath, 'common'));addpath(fullfile(rvcpath, 'simulink'));
endclear tb rvcpath robotpath visionpath

机械臂末端旋转到(0.5,1,1)的效果图:

机械臂旋转至(1,0,0)的俯视图

具体实现过程可联系本作者

matlab实现三自由度机械臂旋转相关推荐

  1. 基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计

    基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计(报告+ppt) 摘 要:本文的研究对象为EEZYbotARM MK2三自由度机械臂,分析了其机械结构,建立D-H参数表,同时在MATLA ...

  2. 【详细讲解 附全部代码】【openmv控制三自由度机械臂抓取物品】硬件+软件

    前言: 这份代码很难得的是纯自己写的,虽然openmv梯子都搭成这样了也没什么大技术含量,只有一丢丢细小的逻辑.. 整体代码放在最后了,有需要的自取吧 实现功能 机械臂抓取一定范围内任意位置的物品,将 ...

  3. 三自由度机械臂连续轨迹控制Simulink仿真

    博客搬家到自己搭建的 主页(wonghaotian.com) 啦q(≧▽≦q),大家快来逛逛鸭! 提供完整文件下载(Click to SAVE) DEMO 控制要求 机械臂初始时刻姿态自行确定,经过5 ...

  4. 三自由度机械臂的轨迹规划实例

    一.轨迹规划简介 机械臂的轨迹规划有两种形式,一种是笛卡尔空间轨迹规划,一种是关节空间轨迹规划.笛卡尔空间轨迹规划相比较关节空间轨迹规划而言,更加直观.两种方法本质上没有差别,仅仅是变量选取稍微有些不 ...

  5. MATLAB Robotics toolbox工具建立三自由度机械臂 借鉴了各个博客主

    clear; clc; %建立机器人模型 %定义连杆的D-H参数 %       theta    d        a        alpha     offset L1=Link([0     ...

  6. 多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试

    多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试 ) DH建模法可以参考这个博客: 还有<机器人>这本书,一定要理论实践相结合,理解后可以用几何法建模也可以用 ...

  7. 五自由度机械臂正逆运动学算法(C语言+Matlab)

    五自由度机械臂建模 学习代码都记录在个人github上,欢迎关注~ Matlab机器人工具箱版本9.10 机械臂还是原来的机械臂,之前用ROS做底层驱动,不需要写正逆运动学和相关算法就能得到一些简单的 ...

  8. 机器人学之动力学笔记【10】—— 双旋转自由度机械臂

    机器人学之动力学笔记[10]-- 双旋转自由度机械臂 1. conditions 2. Velocity and acceleration propagations(上行运算) 2.1 计算第一杆件 ...

  9. Matlab机器人工具箱(3-1):五自由度机械臂(正逆运动学)

    01 正运动学:DH表示法 1955年, Denavit和Hartenberg在"ASME Journal of Applied Mechanic"发表了一篇论文,这篇论文介绍了一 ...

最新文章

  1. maven配置阿里云镜像后Eclipse不生效解决办法
  2. 啊,我南非时间上午10点看成了。。
  3. drill apache_使用Apache Drill REST API通过Node构建ASCII仪表盘
  4. 云生态战略首次曝光,牵手精诚中国和神州光大共建云生态
  5. Node.js 入门详解 (三)
  6. Java io流---拷贝文件夹下的所有文件和目录
  7. linux系统中安装python_2. Linux 下安装python
  8. python--迭代,生成
  9. 11 JVM 垃圾回收(上)
  10. 解决flex打包成exe之后不能升级的问题
  11. python练手经典100例-20个Python练手经典案例,能全做对的人确实很少!
  12. python sklearn 梯度下降法_Python- sklearn之梯度下降算法原理
  13. 改变风格(css)的四种方法
  14. adb命令刷机vivox20_vivo手机锁屏密码忘了怎么办?vivo手机强制解锁的三种方法
  15. 成都拓嘉启远:拼多多下单后地址错误能改吗
  16. layer UI学习
  17. java使用drawtext重叠_DrawText的使用
  18. postman断言—Chai.js语法总结
  19. Could not resolve
  20. 真实版“删库跑路”?程序员蓄意破坏线上生产环境

热门文章

  1. 配置思科3550三层交换机用TELNET方式登录
  2. 计算机二级Python 真题(基础题)
  3. Linux基本功常见问题:二、Linux基本命令
  4. 索尼爱立信W705评测:音乐+wifi无线上网
  5. 计算机网络实验3--IP静态路由搭建
  6. 第22章 事件驱动架构软件测试
  7. html简单垂直时间轴,简单的响应式垂直时间轴效果
  8. Floquet port激励及主从边界设置
  9. 关于高考志愿填报的小贴士
  10. Qt入门教程-Qt介绍-01