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

2023-11-17

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
end

visionpath = fullfile(rvcpath, 'vision');
if exist(visionpath,'dir')
    addpath(visionpath);
    tb = true;
    startup_mvtb
end

if tb
    addpath(fullfile(rvcpath, 'common'));
    addpath(fullfile(rvcpath, 'simulink'));
end

clear tb rvcpath robotpath visionpath

机械臂末端旋转到(0.5,1,1)的效果图:
图一 机械臂末端转到(0.5,1,1)
机械臂旋转至(1,0,0)的俯视图
机械臂旋转至(1,0,0)的俯视图
具体实现过程可联系本作者

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab实现三自由度机械臂旋转 的相关文章

  • Python中的包管理方法

    在Python开发中 包管理与依赖问题一直是开发者头疼的问题之一 随着项目规模的增大和复杂性的增加 管理各种依赖包和解决版本冲突变得尤为重要 本文将分享解决Python中的包管理与依赖问题的方法和工具 帮助开发者更好地管理项目中的依赖关系
  • 单片机c语言的指针,单片机C语言指针的指针

    指针的指针 一个指针变量内部可以存储一个值 这个值是另外一个对象的地址 所以我们说一个指针变量可以指向一个普通变量 同样这个指针变量也有一个地址 也就是 说有一个东西可以指向这个指针变量 然后再通过这个指针变量指向这个对象 那么如何来指向这

随机推荐

  • 右值引用 右值 左值和 左值引用

    首先注意lvalue 和rvalue 中的l r 不是 left和right 而是 l locator value 可以寻址的数据 明确一定是一个地址容纳一个数据 可以在该条语句后面再找到这个值 r read value 不可寻址数据或者用
  • FileZilla出现Failed to convert command to 8 bit charset 

    FileZilla这款FTP客户端软件 自从华哥使用以来 采用其默认的设置 一直用得很顺畅 没有出现过什么问题 但是今天碰到了一个问题 如图 错误信息为 Failed to convert command to 8 bit charset
  • linux 常用指令

    发布java jar程序 后台运行 输出日志文件 nohup java jar jar gt log log 列出后台执行的作业 jobs 列出作业 fg 123 将编号为123的作业调回前台 查看端口占用的线程的pid netstat n
  • Android MediaPlayer播放本地音频

    reference Android 第一行代码 MediaPlayer类常用的方法 setDataSource 设置要播放的音频文件的路径 prepare 开始播放之前调用这个方法完成准备工作 start 开始或继续播放 pause 暂停播
  • 基于SSM的图书馆借阅管理系统

    全网粉丝20W csdn特邀作者 博客专家 CSDN新星计划导师 java领域优质创作者 博客之星 掘金 华为云 阿里云 InfoQ等平台优质作者 专注于Java技术领域和毕业项目实战 文末获取项目下载方式 一 项目背景介绍 随着社会的发展
  • 重新梳理DeepFaceLab(DeepFake)最近动态:简要且全面的信息

    DeepFaceLab相关文章 一 简单介绍DeepFaceLab DeepFake 的使用以及容易被忽略的事项 二 继续聊聊DeepFaceLab DeepFake 不断演进的2 0版本 三 如何翻译DeepFaceLab DeepFak
  • 外置USB供电与内置锂电池供电自动切换电路

    外置USB供电与内置锂电池供电自动切换电路 便携电子设备常用 经典电路必须掌握 本文要分析的电路 很多内置有锂电池的便携电子设备 比如手机 通常采用这样的供电方式 1 没有插入USB电源时 使用内置的锂电池供电 2 当插入USB电源时 切换
  • JAVA体系书籍大全

    二哥 能不能给一套 Java 电子书的链接啊 最好是成体系的 我现在就想好好的学习 感觉和公司的一些同事差距有点大 想追赶上 纸质书有点沉 天天带在手边很不方便 尤其是上下班坐地铁的时候 都感觉看纸质书不太好意思 电子书不仅携带方便 还能不
  • 安装Tensorflow教程

    安装Tensorflow教程 1 环境要求 pychon3 5 可以在cmd下查看python3版本号 要求必须是3 5以及以上 python3 version Python 3 9 8 2 anaconda安装 打开anaconda en
  • Pyqt5 在线/离线安装教程

    在线安装 在线安装很简单 两行命令搞定 pip3 install PyQt5 pip install PyQt5 tools 如果访问外网不是很顺畅建议使用豆瓣的镜像下载 pip install PyQt5 i https pypi dou
  • window.open完美替代window.showModalDialog

    var url http www baidu com var name 百度 var iWidth 1100 弹窗宽度 var iHeight 700 弹窗高度 var iTop window screen availHeight 30 i
  • 组件化学习-3-源码分析ARouter

    之前我们学习了Arouter的使用 今天分析下源码实现原理 主要分3步 生成路由表 加载路由表 使用路由表 生成路由表 RouteProcessor负责生产路由表 ARouter框架使用编译时注解工具 Annotation Processi
  • 【项目:坦克大战】

    v1 25 新增功能 1 音效的处理 import pygame time random display pygame display COLOR BLACK pygame Color 0 0 0 COLOR RED pygame Colo
  • 华为OD机试 - 处理器问题(Java)

    题目描述 某公司研发了一款高性能AI处理器 每台物理设备具备8颗AI处理器 编号分别为0 1 2 3 4 5 6 7 编号0 3的处理器处于同一个链路中 编号4 7的处理器处于另外一个链路中 不通链路中的处理器不能通信 如下图所示 现给定服
  • msvcp140.dll丢失的详细修复教程

    打开电脑上的浏览器在顶部网址栏目输入 dll修复程序 site 然后按下键盘的回车键打开 电脑 dll中文简称动态链接库 把下载好的修复工具右键压缩文件进行解压操作 解压完成打开修复工具 修复工具中可以看到修复工具右侧中的检测与修复的项目
  • etcd 集群搭建及常用场景分析

    概述 etcd 是一个分布式一致性k v存储系统 可用于服务注册发现与共享配置 具有以下优点 简单 相比于晦涩难懂的paxos算法 etcd基于相对简单且易实现的raft算法实现一致性 并通过gRPC提供接口调用 安全 支持TLS通信 并可
  • 项目import其他class类失败,解决办法:清楚缓存

    如题 今天导入新的项目的时候遇到一些问题 这里记录一下 1 问题 所有的类都是 java文件而不是 class pom文件全部报错 maven 加载不进来 解决 一阵排查发现是加载项目的包目录加载错了 在最外层打开的导致找不到下级的目录 2
  • Too many open files的四种解决办法【转】

    摘要 Too many open files有四种可能 一 单个进程打开文件句柄数过多 二 操作系统打开的文件句柄数过多 三 systemd对该进程进行了限制 四 inotify达到上限 领导见了孔乙己 也每每这样问他 引人发笑 孔乙己自己
  • opencv-光流法

    import numpy as np import cv2 import sys cap cv2 VideoCapture video2 mp4 feature params dict maxCorners 100 qualityLevel
  • matlab实现三自由度机械臂旋转

    matlab实现三自由度的机械臂旋转 1 内容与要求 根据表一机械臂长度 以及图一机械臂配置为机械臂开发一个控制器 使其能够执行特定的任务 更具体地说 让机械臂的末端执行器移动到特定的点 项目要求 你的控制器应该能够控制一个3 自由度的机械