Matlab 机器人工具箱 例程:运动学+动力学+路径规划+可视化

文章目录

  • 1 创建机器人
  • 2 机器人显示
  • 3 机器人示教
  • 4 机器人路径规划:给定关节角路径
  • 5 机器人路径规划:给定末端位姿,求关节角路径
  • 6 工作空间可视化
  • 参考链接

1 创建机器人

clc;clear;close all;
deg = pi/180;L1= Revolute('d', 0, 'a', 0, 'alpha', 0,'modified', ...'I', [0.1183 -0.0001 0.0001;-0.0001 0.1182 0.0001;0.0001 0.0001 0.0140], ...'r', [0.0002 0.0002 0.1264], ...'m', 5.6431, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 1.48e-3, ...'Tc', [0.395 -0.435], ...'qlim', [-180 180]*deg );L2 = Revolute('d', 0.06, 'a', 0, 'alpha', -pi/2,'modified', ...'I', [0.0723,0.0000,-0.0051;0.0000,0.0784,0.0000;-0.0051,0.0000,0.0169;], ...'r', [-0.0062,0.0001,0.1080], ...'m', 5.0478, ...'Jm', 2.2e-4, ...'G', 121, ...'B', .817e-3, ...'Tc', [0.126 -0.071], ...'qlim', [-105 105]*deg );
L3 = Revolute('d', -0.004, 'a', 0.332, 'alpha', 0, 'modified', ...'I', [0.4263,0.0000,-0.0072;0.0000,0.4334,0.0001;-0.0072,0.0001,0.0191], ...'r', [-0.0131,0.0001,0.2402], ...'m', 5.7542, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 1.38e-3, ...'Tc', [0.132, -0.105], ...'qlim', [-225 45]*deg );L4 = Revolute('d', -0.056, 'a', 0, 'alpha', pi/2, 'modified', ...'I', [0.0821,0.0000,-0.0314;0.0000,0.1257,0.0001;-0.0314,0.0001,0.0451], ...'r', [-0.0850,0.0003,0.1540], ...'m', 3.0870, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 71.2e-6, ...'Tc', [11.2e-3, -16.9e-3], ...'qlim', [-110 110]*deg);
L5 = Revolute('d', 0.050, 'a', 0, 'alpha', -pi/2, 'modified', ...'I', [0.0235,0.0000,-0.0002;0.0000,0.0253,0.0000;-0.0002,0.0000,0.0045], ...'r', [0.0001,0.0002,0.0982], ...'m', 2.0459, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 82.6e-6, ...'Tc', [9.26e-3, -14.5e-3], ...'qlim', [-115 115]*deg );
L6 = Revolute('d', -0.050, 'a', 0, 'alpha', pi/2, 'modified', ...'I', [0.0684,0.0000,0.0001;0.0000,0.0696,-0.0001;0.0001,-0.0001,0.0047], ...'r', [-0.0111,-0.0003,0.1366], ...'m', 2.6317, ...'Jm', 2.2e-4, ...'G', 51, ...'B', 36.7e-6, ...'Tc', [3.96e-3, -10.5e-3], ...'qlim', [-180 180]*deg );
% SerialLink类函数
robot=SerialLink([L1,L2,L3,L4,L5,L6],'name','VIPER7','comment','LL');
% Link类函数,显示建立机器人DH参数 
robot.display();

输出:

robot = 
VIPER7:: 6 axis, RRRRRR, modDH, slowRNE                          - LL;                                                           
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|          0|          0|
|  2|         q2|       0.06|          0|    -1.5708|          0|
|  3|         q3|     -0.004|      0.332|          0|          0|
|  4|         q4|     -0.056|          0|     1.5708|          0|
|  5|         q5|       0.05|          0|    -1.5708|          0|
|  6|         q6|      -0.05|          0|     1.5708|          0|
+---+-----------+-----------+-----------+-----------+-----------+

2 机器人显示

%通过手动输入各个连杆转角,模型会自动运动到相应位置
theta1=[0 -pi/2 -pi/2 0 0 0];
% SerialLink类函数,显示机器人图像
robot.plot(theta1);
title('机器人plot显示')

在这里插入图片描述

3 机器人示教

robot.teach();
title('机器人teach示教')

在这里插入图片描述

4 机器人路径规划:给定关节角路径

% 初始角
theta1=[0 -pi/2 -pi/2 0 0 0];
% 目标关节角
theta2=[-pi/2 0 -pi/4 -pi/3 pi/4 pi/2];
% 时间
t=[0:0.01:2];
% 关节空间路径规划
% 相当于具有tpoly插值的mtraj,但是对多轴情况进行了优化,还允许使用额外参数设置初始和最终速度
g=jtraj(theta1,theta2,t);
% 通过可选的输出参数,获得随时间变化的关节速度加速度向量
[q,qd,qdd]=jtraj(theta1,theta2,t);
figure
i=1:6;
%绘制动画
subplot(2,3,1);
robot.plot(g)
%绘制每个关节位置
subplot(2,3,2);
qplot(q(:,i));
grid on;title('位置');
%绘制每个关节速度
subplot(2,3,3);
qplot(qd(:,i));
grid on;title('速度');
%绘制每个关节加速度
subplot(2,3,4);
qplot(qdd(:,i));
grid on;title('加速度');
% 获得每个时间点所需要的关节力矩
Q = robot.rne(q,qd,qdd);
%绘制每个关节的力矩
subplot(2,3,5)
qplot(t,Q);
grid on;title('关节力矩');

在这里插入图片描述

5 机器人路径规划:给定末端位姿,求关节角路径

%% 已知机械臂初始和目标的关节角度,利用五次多项式进行轨迹规划
T1=transl(0.3,0.1,0);						%根据给定起始点,得到起始点位姿
T2=transl(0,0.3,0.1);						%根据给定终止点,得到终止点位姿
init_ang=robot.ikine(T1);				%根据起始点位姿,得到起始点关节角
targ_ang=robot.ikine(T2);				%根据终止点位姿,得到终止点关节角
step = 20;%轨迹规划方法
figure
%关节空间轨迹规划
%五次多项式轨迹,得到关节角度,角速度,角加速度,20为采样点个数
[q, qd, qdd]=jtraj(init_ang,targ_ang,step); 
grid on
%根据插值,得到末端执行器位姿
T=robot.fkine(q);		
% 
nT=T.T;
%输出末端轨迹
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));
title('根据运动学求正解得到目标轨迹');
%动画演示 
robot.plot(q);	
%robot.plot(q,'trail','b');  %运行后在命令行窗口再复制运行一次,trail轨迹,b蓝色

在这里插入图片描述

%% 求解上述运行过程中的位置、速度、加速度的变化曲线
figure
subplot(3,2,[1,3]); 					%subplot 对画面分区 三行两列 占用1到3的位置
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
robot.plot(q);							%动画演示subplot(3, 2, 2);
i = 1:6;
plot(q(:,i));
title('位置');
grid on;subplot(3, 2, 4);
i = 1:6;
plot(qd(:,i));
title('速度');
grid on;subplot(3, 2, 6);
i = 1:6;
plot(qdd(:,i));
title('加速度');
grid on;

在这里插入图片描述

6 工作空间可视化

figure
num = 30000;
p = zeros(num,3);%先声明0矩阵可加快运行速度
for i=1:numq1 = L1.qlim(1) + rand * (L1.qlim(2) - L1.qlim(1));q2 = L2.qlim(1) + rand * (L2.qlim(2) - L2.qlim(1));q3 = L3.qlim(1) + rand * (L3.qlim(2) - L3.qlim(1));q4 = L4.qlim(1) + rand * (L4.qlim(2) - L4.qlim(1));q5 = L5.qlim(1) + rand * (L5.qlim(2) - L5.qlim(1));q6 = L6.qlim(1) + rand * (L6.qlim(2) - L6.qlim(1));q = [q1 q2 q3 q4 q5 q6];Ts = robot.fkine(q);  % SerialLink.fkine正向运动学, 给一个关节变量,可以求出变换矩阵P(i,:) = transl(Ts);
end
plot3( P(:,1), P(:,2), P(:,3),'b.','markersize',1); %在三维空间内绘制30000个点hold on; %添加新绘图的时候保留当前绘图
grid on; %在画图的时候添加网格线view([45 45]);
robot.plot([0 0 0 0 0 0]);

在这里插入图片描述

参考链接

Matlab机械臂建模:机器人工具箱的使用&&导入自己的机械臂模型
Matlab机器人工具箱——动力学
MATLAB机器人工具箱学习(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/271163.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lazada本土店与跨境店区别,附店铺防关联攻略

许多新手商家在初入跨境电商时,对于平台账号类别并不清楚。Lazada是最大的东南亚在线购物平台之一,如果你的跨境目标正指向东南亚,那么Lazada一定是是你的首选平台。那么接下来让小编带大家认识Lazada本土店与跨境店的区别! 一、本…

部署运维 防火墙,进程 常用命令

防火墙: 1. 查看是否安装了firewalld sudo systemctl status firewalld 查看防火墙状态或者sudo systemctl is-active firewalld 查看防火墙是否是开启状态 2. 开放6379port sudo firewall-cmd --add-port6379/tcp --permanent 刷新防火墙 sudo firewall-cmd --reload 3…

经验分享:水牛社怎么做?

本人也就是通过他慢慢学习成长起来的。还是一个网友推荐的,现在他对我来说算是大佬了,已经单飞了,好久都没有联系了,呵呵,真是人往高处走,水往低处流啊。 做网赚会经常和一些网络小白聊天,聊着…

使用Matlab计算IGRAv2探空站的Tm和PWV

1. 探空站IGRAv2数据 探空站的Tm常作为真值,去检验Tm线性公式或者ERA5 Tm等的精度 。 探空站PWV常作为真值,去检验GNSS PWV等的精度 2. Tm 的计算方法 Tm 的计算方法有两种在前面的文章有讲,这里用 使用水汽压和温度计算Tm。 ei和 Ti 表示…

【OpenCV】仿 IOS 锁屏时钟

OpenCV 是一个开源的计算机视觉(Computer Vision)与机器学习软件库,提供了多种图像处理算法与接口。在图像处理中,按位运算是一类重要的运算,可以用于提取图像的重要部分。本文主要记录如何使用 OpenCV-Python 绘制仿 …

docker的简单使用

在一些进行使用靶场或者工具的时候,我们可以用docker在线拉取,就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取,所以拉取经常速度很慢或者失败,我们先要进行一下配置,让他优…

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Frida-Hook-Native层操作大全

前期准备 使用 jadx 进行逆向工程的基础知识。能够理解 Java 代码。能够编写简短的 JavaScript 代码片段。熟悉 adb。已 root 的设备。对 x86/ARM64 汇编和逆向工程有基础了解。 1、Hook Native层中调用的函数并且读取传入的参数 对于Native层的函数Hook,我们使用…

2024.3.7

1、基于UDP的网络聊天室 服务器&#xff1a; #include<myhead.h>//定义一个结构体存储成员信息 typedef struct Node {struct sockaddr_in cin;struct Node *next; }*Linklist;//定义一个结构体表示消息类型 typedef struct _msg {char code; //L:登录&#xff0c;C…

vue3+element plus 实现百度地图显示路径

添加依赖 <!-- index.html --><script type"text/javascript" src"//api.map.baidu.com/getscript?v3.0&akyI6kBeC9G4LntEWXklE2iNHwRUrmFEQc"></script><script type"text/javascript" src"//api.map.baidu.co…

利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…

【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

ospf虚链路实验简述

1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁&#xff0c;通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…

模拟实现std::string类(包含完整、分文件程序)

std库中的string是一个类&#xff0c;对string的模拟实现&#xff0c;既可以复习类的特性&#xff0c;也可以加深对std::string的理解。 &#x1f308;一、搭建框架 ☀️1.新命名空间 本质上string是一个储存在库std里面的类&#xff0c;现在需要模拟实现一个string类&#…

python基础——入门必备知识

&#x1f4dd;前言&#xff1a; 本文为专栏python入门基础的第一篇&#xff0c;主要带大家先初步学习一下python中的一些基本知识&#xff0c;认识&#xff0c;了解一下python中的一些专有名词&#xff0c;为日后的学习打下良好的基础,。本文主要讲解以下的python中的基本语法&…

力扣706:设计哈希映射

题目&#xff1a; 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实现 MyHashMap 类&#xff1a; MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中&#x…

tcpdump使用pcap-filter抓Vxlan包内数据

目录 1. 背景2. 参考3. 概念4. 环境5. 用法5.1 抓vxlan通讯中的icmp包5.2 tcpdump抓包命令解析5.2.1 tcpdump命令说明5.2.2 Vxlan协议报文解析 5.3 其他抓包例子5.3.1 抓包示例15.3.2 抓包示例2 1. 背景 看vxlan协议时&#xff0c;发现可以使用tcpdump高级用法&#xff08;pca…

Unity Samples和帧动画的问题

拖动序列帧图片和自己创建clip的帧率不同 我今天在创建帧动画的时候用了两种方式第一种是直接拖动序列帧图片到Hierachy&#xff0c;然后生成的第二种是这样我发现两者播放的动画速率不一样最后查了半天查不到原因。最后发现是Samples的原因&#xff0c;而且Unity把Samples这个…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码&#xff08;1&#xff09;保存&#xff08;2&#xff09;加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…