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.hqwc.cn/news/509551.html

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

相关文章

托管服务器常见的问题有哪些(常见托管问题解决)

​  对于我们来说,选择一个合适的服务器托管提供商只是建立和管理自己所属网站的第一步。相对来说,真正的挑战在于解决管理网站运行时可能出现的各种问题。就像有时,有些常见的服务器托管问题是不可避免的,但通过主动监控、定期…

我国数据管理机构陆续完善,推动数据安全产业提速

据国家公务员局消息,2024年2月25日,国家数据局综合司、政策规划司、数据资源司进行了拟招录工作人员的面试。国家数据局下设的五个司局名称目前已经正式确定为:综合司、政策规划司、数据资源司、数字经济司、数字科技和基础设施建设司。 自国…

【AI Agent系列】【MetaGPT多智能体学习】4. 基于MetaGPT的Team组件开发你的第一个智能体团队

本系列文章跟随《MetaGPT多智能体课程》(https://github.com/datawhalechina/hugging-multi-agent),深入理解并实践多智能体系统的开发。 本文为该课程的第四章(多智能体开发)的第二篇笔记。主要是对MetaGPT中Team组件…

docker安装使用基础

一、镜像安装 我的docker安装在centos7虚拟机上(关于虚拟机网络设置此前已有总结VMware 搭建centos虚拟机网络设置_vmware centos 网络配置-CSDN博客),现在默认操作系统和网络已就位。 1、安装工具包 # 安装操作一般都需要管理员权限&…

基于Keil的RTE(run time environment)配置GD32开发环境,移植FreeRTOS

前言: 10多年前就用STM32了,最近从STM32转到GD32,感觉国产的芯片发展是真的快,不但更便宜,还更快更好用了(是在是受不了STM32 I2C BUSY的那个BUG)。 先说下,实际上STM32的程序可以…

2024 CHINASHOP丨悠络客AI应用亮点抢鲜看,还有价值百元门票免费送哦!

3月13日-15日,备受国内外关注的第二十四届中国零售业博览会(2024 CHINASHOP)将在上海国家会展中心正式开展!悠络客作为深耕智慧门店15年的公有云人工智能企业,也将带着全新AI产品和智慧门店解决方案亮相展会&#xff0…

【C\C++】C\C++内存管理

目录 一、C\C内存分配 1、栈区 2、堆区 3、全局(静态)区 4、常量区 5、代码段 二、C语言内存管理方式 1、malloc 2、calloc 3、relloc 4、free 三、C内存管理方式 一、C\C内存分配 C\C内存分区示意图如下: 1、栈区 栈区由编译器自动分配释放&#xff0…

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1)常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2)形参指定默…

Linux系统Docker部署RStudio Server

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问…

配置资源管理

目录 1 Secret1.1 Secret 的类型1.2 Secret 使用方式1.3 示例1.3.1 创建 Secret 示例1.3.2 使用 Secret 示例 2 ConfigMap2.1 示例2.1.1 创建 ConfigMap 示例2.1.2 Pod 中使用 ConfigMap2.1.3 ConfigMap 的热更新2.1.4 ConfigMap 更新后滚动更新 Pod 1 Secret Secret 是用来保…

PaddleOCR基于PPOCRv4的垂类场景模型微调——手写文字识别

PaddleOCR手写文字识别 一. 项目背景二. 环境配置三. 数据构造四. 模型微调五. 串联推理六. 注意事项七. 参考文献 光学字符识别(Optical Character Recognition, OCR),ORC是指对包含文本资料的图像文件进行分析识别处理,获取文字…

HTML+CSS+BootStrap景区官网

一、技术栈 支持pc、pad、手机访问,页面自适应!! html5cssbootstrapjs 二、项目截图 接受项目定制,站内联系博主!!!