当前位置: 首页 > news >正文

matlab机器人工具箱基础使用

资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665

用vscode直接看工具箱api代码比较方便,代码说明很多

一、模型设置

1、基础效果

%采用机器人工具箱进行正逆运动学验证
a=[0,-0.3,-0.3,0,0,0];%DH参数
d=[0.05,0,0,0.06,0.05,0.04];
alp=[pi/2,0,0,pi/2,-pi/2,0];
%机器人工具箱模型,每一个L建立一个连杆,输入DH参数即可,offset是连杆的初始偏移量,此处为0
L(1) = Link('d', d(1), 'a', a(1), 'alpha', alp(1));
L(2) = Link('d', d(2), 'a', a(2), 'alpha', alp(2), 'offset', 0 );
L(3) = Link('d', d(3), 'a', a(3), 'alpha', alp(3), 'offset', 0 );
L(4) = Link('d', d(4), 'a', a(4), 'alpha', alp(4), 'offset',0);
L(5) = Link('d', d(5), 'a', a(5), 'alpha', alp(5));
L(6) = Link('d', d(6), 'a', a(6), 'alpha', alp(6));
bot = SerialLink(L,'name','rbt');%将六个连杆组合起来 
figure(1)
bot.display();%显示机器人模型
view(3)
bot.teach;

2、link的常用属性

运动学参数
%  theta        kinematic: joint angle   关节角度
%  d            kinematic: link offset   
%  a            kinematic: link length
%  alpha        kinematic: link twist   %  jointtype    kinematic: 'R' if revolute, 'P' if prismatic    关节类型
%  mdh          kinematic: 0 if standard D&H, else 1                参数类型(标准/改进)
%  offset       kinematic: joint variable offset                            关节变量偏移量(设置新零点)
%  qlim         kinematic: joint variable limits [min max]       关节变量限制范围
动力学参数
%  m            dynamic: link mass   连杆质量
%  r            dynamic: link COG wrt link coordinate frame 3x1   质心
%  I            dynamic: link inertia matrix, symmetric 3x3, about link COG.  惯性张量
%  B            dynamic: link viscous friction (motor referred)     连杆粘性摩擦
%  Tc           dynamic: link Coulomb friction                   连杆库仑摩擦
%-
%  G            actuator: gear ratio                减速比
%  Jm           actuator: motor inertia (motor referred)    电机惯量

二、运动学

1、正逆运动学

q=[1,-1,1,-1,1,1];%给定初始角度
T_rbt = bot.fkine(q);%采用机器人工具箱函数求正运动学
q_rbt = bot.ikine(T_rbt,'q0',q)%采用RTB的逆运动学计算上边得到的齐次矩阵对应的关节角度,给定初始值可以更快的收敛到给定的角度

2、雅各比矩阵

bot.jacob0()   关于绝对坐标系的雅各比矩阵
bot.jacobn()  关于工作坐标系的雅各比矩阵

三、动力学

1、查看动力学参数

bot.dyn()

2、正逆动力学

bot.nofriction()                                                     //无摩擦力动力学模型
bot.accel(角度,角速度,外力矩阵)              //计算关节加速度bot.fdyn(时间,外力矩阵)                                                                               //正动力学
bot.rne(角度,角速度,角加速度,重力加速度,输出动力要求)    //逆动力学

3、计算动力学方程

bot.gravload()    //G
bot.inertia()       //M
bot.coriolis()     //V
bot.payload()    //有效载荷

四、例子:二自由度平面机械臂

syms Ix1 Iy1 Iz1 Ix2 Iy2 Iz2
syms q1 q2 m1 m2 L1 L2
syms qd1 qd2 g 
%%%%%%%%%%%%%%%%%%%1、设置运动学参数%%%%%%%%%%%%%%%%%%%
a=[0,L1,L2];%DH参数
d=[0,0,0];
alp=[0,0,0];q = [q1,q2,0];
qd = [qd1,qd2,0];L(1) = Link('d', d(1), 'a', a(1), 'alpha', alp(1),'modified');        %'modified'代表使用改进dh法
L(2) = Link('d', d(2), 'a', a(2), 'alpha', alp(2),'modified');
L(3) = Link('d', d(3), 'a', a(3), 'alpha', alp(3),'modified');
bot = SerialLink(L,'name','rbt');                                                       %将三个连杆组合起来,形成机器人 
%%%%%%%%%%%%%%%%%%%2、设置动力学参数%%%%%%%%%%%%%%%%%%%
%质量
bot.links(1).m=m1;
bot.links(2).m=m2;
bot.links(3).m=0;
%质心
bot.links(1).r=[L1/2,0,0];
bot.links(2).r=[L2/2,0,0];
bot.links(3).r=[0,0,0];
%转动惯量
bot.links(1).I = [Ix1, Iy1, Iz1, 0, 0,0];
bot.links(2).I= [Ix2, Iy2, Iz2,0, 0,0];
bot.links(3).I = [0, 0, 0, 0, 0,0];
%重力
bot.gravity=[0;0;-g];bot.dyn();    %显示所有杆的动力学参数
%%%%%%%%%%%%%%%%%%%3、计算运动学参数%%%%%%%%%%%%%%%%%%%
T = bot.fkine(q);            %机器人正运动学,输入关节角度,输出T_e^0
J = bot.jacob0(q);         %计算雅各比矩阵,基于世界坐标的
%%%%%%%%%%%%%%%%%%%4、计算动力学参数%%%%%%%%%%%%%%%%%%%
M = bot.inertia(q);             %关节空间质量矩阵
V = bot.coriolis(q,qd);      %计算离心力和科氏力矢量,注意这里给出的是矩阵V,V*qd才等于计算出的向量V(qd)
G = bot.gravload(q);         %重力矢量
%%%%%%%%%%%%%%%%%%%5、正逆运动学%%%%%%%%%%%%%%%%%%%
%逆运动学,角度(不是微分运动学)
theta1 = bot.ikine(T,'mask',[1,1,1,0,0,0],'q0',[0,0,0]);   %T代表的是工作点的位姿,输出各个关节角度,q0是基座坐标,mask是关节小于6个时选择开启的
theta2 = bot.ikunc(T); 
%%正逆微分运动学
%%%%%%%%%%%%%%%%%%%6、正逆动力学%%%%%%%%%%%%%%%%%%%
bot_nf=bot.nofriction();   %设置没有摩擦力  %其实就是根据关节力矩和作用力矩+初始q和qd算qdd,再根据qdd更新q和qd
%句柄那里不可以用[1,2,3,4,5,6]这样赋值了,可以直接给[]就是不给力
%0.4是时间间隔,@函数句柄(函数需要特别设置,因为要解算方程),第一个qz是q0,第二个qz是qd0,5和1就是函数句柄的参数
%输出就是一系列t、q、qd[t q qd] = p560.nofriction().fdyn(0.4, @test1, qz,qz,5,1);torqfun = [0,30,6];                %设定一组关节力
qdd = bot_nf.accel(q(i,:),qd(i,:),torqfun);  %获得中间量的办法,fdyn应该调用了accelfprintf("-----------------------")
%逆动力学
tau = bot.rne(q, qd, qdd, 'gravity',[0,9.8,0],'fext',[0,0,0,0,0,0]);%fext是外力

test1.m

function tau = test1(t,q,qd,qstar,P,D)
tau=P*(qstar-q) + D*qd;
tau =[0,0,0,0,0,0];
end

相关文章:

matlab机器人工具箱基础使用

资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665 用vscode直接看工具箱api代码比较方便,代码说明很多 一、模型设置 1、基础效果 %采用机器人工具箱进行正逆运动学验证 a[0,-0.3,-0.3,0,0,0];%DH参数 d[0.05,0,0,0.06,0.05,…...

利用WonderLeak进行内存泄露检测【一】

1、下载地址: WonderLeak - Visual Studio Marketplace https://www.relyze.com/ 2、WonderLeak支持vs2017 2019扩展,或者单独启动 3、https://www.relyze.com/docs/wonderleak/help/w/overview/msvc_extension1.png 4、对于二进制程序来说支持以下…...

二刷LeetCode--155. 最小栈(C++版本),思维题

思路:本题需要使用两个栈,一个就是正常栈,执行出入操作,另一个栈只负责将对应的最小值进行保存即可.每次入栈的时候,最小值栈的栈顶也需要入栈元素,不过这个元素是最小值,那么就需要进行比较,因此在getmin()的时候只需要将最小值栈的栈顶元素弹出即可.初始化的时候只需要将最小…...

进程的状态与转换

进程在其生命周期内,由于系统中各进程之间的相互制约及系统的运行环境的变化,使得进程的状态也在不断地发生变化。通常进程有以下5种状态,前三种是基础讷航的基本状态 1)运行态。进程正在处理机上运行。在单处理机机中&#xff0…...

用MariaDB创建数据库,SQL练习,MarialDB安装和使用

前言:MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQ…...

【Docker】 使用Docker-Compose 搭建基于 WordPress 的博客网站

引 本文将使用流行的博客搭建工具 WordPress 搭建一个私人博客站点。部署过程中使用到了 Docker 、MySQL 。站点搭建完成后经行了发布文章的体验。 WordPress WordPress 是一个广泛使用的开源内容管理系统(CMS),用于构建和管理网站、博客和…...

Hlang社区-前端社区宣传首页实现

文章目录 前言页面结构固定钉头部轮播JS特效完整代码总结前言 这里的话,博主其实也是今年参与考研的大军之一,所以的话,是抽空去完成这个项目的,当然这个项目的肯定是可以在较短的时间内完成的。 那么废话不多说,昨天也是干到1点多,把这个首页写出来了。先看看看效果吧:…...

【LeetCode-Medium】833. 字符串中的查找与替换

题目链接 833. 字符串中的查找与替换 标签 字符串 步骤 Step1. 初始化 ans[]&#xff1a; for (int i 0; i < s.length(); i) { // 初始化ansans[i] s[i]; }Step2. 根据 index, source, target 查找&#xff1b;如果找到&#xff0c;那么将 ans[i] 更改为 target&am…...

数据结构中公式前中后缀表达式-二叉树应用

目录 数据结构中公式前中后缀表达式-二叉树应用 数据结构中公式前中后缀表达式-二叉树应用 什么是前缀表达式、中缀表达式、后缀表达式 前缀表达式、中缀表达式、后缀表达式&#xff0c;是通过树来存储和计算表达式的三种不同方式 以如下公式为例 通过树来存储该公式&#x…...

Visual Studio 2022连接远程系统进行C/C++开发

Visual Studio被称为是宇宙最强IDE&#xff0c;以前开发Linux C/C服务器程序&#xff0c;基本上都是在Windows上使用VS编写跨平台的C/C代码&#xff0c;然后先在VS中编译、链接、调试&#xff0c;然后在Linux下编译、链接&#xff0c;再针对Linux下的特定代码进行调试。后面Vis…...

TiDB数据库从入门到精通系列之二:TiDB数据库的简介

TiDB数据库从入门到精通系列之二&#xff1a;TiDB数据库的简介 一、TiDB数据库的简介二、五大核心特性三、四大核心应用场景四、TiDB数据库与MySQL数据库的兼容性 一、TiDB数据库的简介 TiDB是开源分布式关系型数据库&#xff0c;是一款同时支持在线事务处理与在线分析处理 (H…...

opencv视频截取每一帧并保存为图片python代码CV2实现练习

当涉及到视频处理时&#xff0c;Python中的OpenCV库提供了强大的功能&#xff0c;可以方便地从视频中截取每一帧并将其保存为图片。这是一个很有趣的练习&#xff0c;可以让你更深入地了解图像处理和多媒体操作。 使用OpenCV库&#xff0c;你可以轻松地读取视频文件&#xff0…...

虹科方案 | 汽车总线协议转换解决方案(二)

上期说到&#xff0c;虹科的PCAN-LIN网关在CAN、LIN总线转换方面有显著的作用&#xff0c;尤其是为BMS电池通信的测试提供了优秀的解决方案。假如您感兴趣&#xff0c;可以点击文末相关链接进行回顾&#xff01; 而今天&#xff0c;虹科将继续给大家带来Router系列在各个领域的…...

[Android] 通过JNI 让 JAVA 调用 android native 接口

前言&#xff1a; JNI (java native interface) 是一个库&#xff0c;可以让 java 代码和其他语言互动&#xff0c;比如 java 通过 JNI 调用融合了 jni库的 c/c 代码&#xff0c;注意&#xff0c;这里要求 c/c代码中必须通过链接 jni 库并按照 JNI 规范定义一套可供 JAVA 调用…...

MySQL高可用MHA

目录 前言 一、概述 二、配置免密、组从复制 三、MHA配置 四、测试 总结 前言 MySQL高可用管理工具&#xff08;MHA&#xff0c;Master High Availability&#xff09;是一个用于自动管理MySQL主从复制的工具&#xff0c;它可以提供高可用性和自动故障转移。MHA由原版的MHA工具…...

DoIP学习笔记系列:(五)“安全认证”的.dll从何而来?

文章目录 1. “安全认证”的.dll从何而来?1.1 .dll文件base1.2 增加客户需求算法传送门 DoIP学习笔记系列:导航篇 1. “安全认证”的.dll从何而来? 无论是用CANoe还是VFlash,亦或是编辑cdd文件,都需要加载一个与$27服务相关的.dll(Windows的动态库文件),这个文件是从哪…...

205、仿真-51单片机直流数字电流表多档位切换Proteus仿真设计(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源…...

服务器如何防止cc攻击

对于搭载网站运行的服务器来说&#xff0c;cc攻击应该并不陌生&#xff0c;特别是cc攻击的攻击门槛非常低&#xff0c;有个代理IP工具&#xff0c;有个cc攻击软件就可以轻易对任何网站发起攻击&#xff0c;那么服务器如何防止cc攻击?请看下面的介绍。 服务器如何防止cc攻击&a…...

解读注解@Value占位符替换过程

之前写过一篇关于介绍Spring占位符替换原理的博客&#xff0c;传送门 &#xff1a;Spring的占位符是怎么工作的 在这篇文章基础上&#xff0c;再介绍一下Value替换原理&#xff0c;两篇文章有一定的相关性。 继续以上一篇的工程为例&#xff0c;项目结构一样&#xff0c;这里就…...

浅谈5G技术会给视频监控行业带来的一些变革情况

5G是第五代移动通信技术&#xff0c;能够提供更高的带宽和更快的传输速度&#xff0c;这将为视频技术的发展带来大量机会。随着5G技术的逐步普及与商用&#xff0c;人们将能够享受到更加流畅的高清视频体验&#xff0c;并且5G技术还拥有更低的延迟和更高的网络容量。这些优势不…...

第二十八章 字符串与数字

第二十八章 字符串与数字 计算机程序完全就是和数据打交道。很多编程问题需要使用字符串和数字这种更小的数据来解决。 参数扩展 第七章,已经接触过参数扩展,但未进行详细说明,大多数参数扩展并不用于命令行,而是出现在脚本文件中。 如果没有什么特殊原因,把参数扩展放…...

TCP相关问题 第一篇

TCP相关问题1 1.TCP主动断开连接方为什么需要等待2MSL 如上图所示:在被动链接方调用close&#xff0c;发送FIN时进入LAST_ACK状态&#xff0c;但未收到主动连接方的ack确认&#xff0c;需要被动连接方重新发送一个FIN&#xff0c;而为什么是2MSL&#xff0c;一般认为丢失ack在…...

OpenCV 图像通道的分离与合并

一、知识点 1、一张彩色图像可以由R、G、B三个通道的灰度图合并而成。 2、void split(InputArray m, OutputArrayOfArrays mv); (1)、将多通道阵列划分为几个单通道阵列。 (2)、参数说明: m: 要分离的多通道阵列。 mv: 输出的vector容器&#xff0c;每个元素都…...

整数的字典序怎么算

在Python中&#xff0c;字典序&#xff08;lexicographical order&#xff09;通常指的是按照字符串的字典顺序进行比较或排序。对于整数来说&#xff0c;字典序可以理解为将整数转换为字符串后进行比较的顺序。 计算整数的字典序 要计算整数的字典序&#xff0c;可以按照以下…...

解决pycharm同一个文件夹下from *** import***仍显示No module named

1、&#xff0c;from ***import *&#xff0c;同文件夹中已有.py文件但是仍然报错No module named 原因是因为pycharm没有把文件夹设置为根目录&#xff0c;只需要在文件夹的上一级设置为根目录即可&#xff0c;测试过如果仅仅将当前的文件夹设置仍然报错&#xff0c;如果把最上…...

使用 Redisson 实现分布式锁—解决方案详解

Redisson 是 Redis 官方推荐的 Java 客户端&#xff0c;提供了一系列分布式服务实现&#xff0c;其中分布式锁是其核心功能之一。本文将深入解析 Redisson 分布式锁的实现原理、高级特性和最佳实践。 一、Redisson 分布式锁的优势 与传统实现的对比 特性手动实现Redisson 实现…...

Linux 系统中的算法技巧与性能优化

引言​ Linux 系统以其开源、稳定和高度可定制的特性&#xff0c;在服务器端、嵌入式设备以及开发环境中得到了极为广泛的应用。对于开发者而言&#xff0c;不仅要掌握在 Linux 环境下实现各类算法的方法&#xff0c;更要知晓如何利用系统特性对算法进行优化&#xff0c;以提升…...

从零开始制作小程序简单概述

以下是结合案例的“从零制作小红书风格小程序”的全流程指南&#xff0c;采用小红书爆款笔记的结构呈现&#xff0c;并附CSDN参考资源&#x1f447;&#xff1a; 一、核心开发步骤&#xff08;附工具推荐&#xff09; 账号与定位 ✅ 注册类型选择&#xff1a;个人店&#xff08…...

一.设计模式的基本概念

一.核心概念 对软件设计中重复出现问题的成熟解决方案&#xff0c;提供代码可重用性、可维护性和扩展性保障。核心原则包括: 1.1. 单一职责原则‌ ‌定义‌&#xff1a;一个类只承担一个职责&#xff0c;避免因职责过多导致的代码耦合。 1.2. 开闭原则‌ ‌定义‌&#xf…...

web端rtmp推拉流测试、抽帧识别计数,一键式生成巡检报告

本文旨在实现无人机城市交通智慧巡检中的一个模块——无人机视频实时推拉流以及识别流并在前端展示&#xff0c;同时&#xff0c;统计目标数量以及违停数量&#xff0c;生成结果评估&#xff0c;一并发送到前端展示。对于本文任何技术上的空缺&#xff0c;可在博主主页前面博客…...