%lesson 2 rigidBodyTree
% 刚体树是刚体与关节连接性的一种表示。使用这个类在MATLAB?中建立机器人机械手模型。如果您有一个使用统一机器人描述格式(URDF)指定的机器人模型,请使用importrobot来导入您的机器人模型。
% 刚体树模型由刚体作为刚体对象组成。每个刚体都有一个与之相关的rigidBodyJoint对象,该对象定义了如何相对于其父体进行移动。使用setFixedTransform来定义关节的框架与相邻物体的框架之间的固定转换。
% 您可以使用RigidBodyTree类的方法从模型中添加、替换或删除刚体。
% 机器人动力学计算也是可能的。指定机器人模型中每个刚体的质量、重心和惯性特性。你可以计算有或没有外力的正向和反向动力学,并计算给定机器人关节运动和关节输入的动力学量。
% 要使用与动态相关的函数,请将DataFormat属性设置为“row”或“column”。
% 对于给定的刚体树模型,还可以使用机器人逆运动学算法使用机器人模型计算所需末端执行器位置的关节角。当使用逆运动学或广义逆运动学时,指定你的刚体树模型。
% 显示方法支持体网格的可视化。网格被指定为.stl文件,可以使用addVisual添加到单独的刚体中。另外,默认情况下,importrobot函数将加载URDF机器人模型中指定的所有可访问的.stl文件。
% 创建一个树形结构的机器人对象。使用addBody添加刚体。
% robot = rigidBodyTree("MaxNumBodies",N,"DataFormat", DataFormat)指定在生成代码时机器人允许的body数量的上限。您还必须将DataFormat属性指定为名称-值对。% 例程
% 在刚体树中加入刚体和相应的关节。每个rigidBody对象都包含一个rigidBodyJoint对象,必须使用addBody将其添加到rigidBodyTree中。
% 更改现有的rigidBodyTree对象。你可以在刚体树中替换关节,物体和子树。加载lesson1示例机器人作为rigidBodyTree对象。
% 获取一个特定的主体来检查属性。L3体的唯一子元素是L4体。您也可以复制特定的主体。
clear
load exampleRobots.mat
showdetails(puma1)
% 获取rigidtree中名字为L3刚体句柄
body3 = getBody(puma1,'L3');
% 获取一个特定的主体来检查属性。L3体的唯一子元素是L4体。您也可以复制特定的主体。
childBody = body3.Children{1}
body3Copy = copy(body3) %虽然是复制L3但是不复制他的子父属性
% 更换L3的关节属性不改变其他。您必须创建一个新的关节对象,并使用replaceJoint来确保下游的人体几何形状不受影响。
% 如果需要定义主体之间的转换而不是使用默认的标识矩阵,可以调用setFixedTransform。
newJoint = rigidBodyJoint('prismatic');%移动关节
replaceJoint(puma1,'L3',newJoint);%替换L3的关节为新关节showdetails(puma1)
%删除整个body并使用removeBody获得结果子树。删除的主体包含在子树中。
subtree = removeBody(puma1,'L4')%移除修改后的L3刚体。将原始复制的L3刚体添加到L2刚体,然后返回子树。
%机器人模型保持不变。通过showdetails查看详细的比较。
removeBody(puma1,'L3');
addBody(puma1,body3Copy,'L2')%L2是父
addSubtree(puma1,'L3',subtree)%加载之前子树,父是L3showdetails(puma1)% 指定刚体树的动力学特性
% 要使用动力学函数来计算关节扭矩和加速度,请指定rigidBodyTree对象和rigidBody的动力学特性。
% 创建一个刚体树模型。创造两个刚体附着在它上面。
clear
robot = rigidBodyTree('DataFormat','row');
body1 = rigidBody('body1');
body2 = rigidBody('body2');
% 指定连接到主体上的关节。将body2的固定转换设置为body1。这个变换在x方向上是1m。
joint1 = rigidBodyJoint('joint1','revolute');
joint2 = rigidBodyJoint('joint2');
setFixedTransform(joint2,trvec2tform([1 0 0]))
body1.Joint = joint1;
body2.Joint = joint2;
% 指定两个物体的动力学特性。将身体添加到机器人模型中。
% 对于本例,给出了带有附加球形质量(body2)的杆(body1)的基本值。body1.Mass = 2;
body1.CenterOfMass = [0.5 0 0];
body1.Inertia = [0.167 0.001 0.167 0 0 0];body2.Mass = 1;
body2.CenterOfMass = [0 0 0];
body2.Inertia = 0.0001*[4 4 4 0 0 0];addBody(robot,body1,'base');
addBody(robot,body2,'body1');%计算整个机器人的质心位置。画出机器人的位置。将视图移动到xy平面。
comPos = centerOfMass(robot);show(robot);
hold on
plot(comPos(1),comPos(2),'or')
view(2)%改变第二个物体的质量。注意重心的变化。
body2.Mass = 20;
replaceBody(robot,'body2',body2) %注意这里是直接替换刚体comPos2 = centerOfMass(robot);
plot(comPos2(1),comPos2(2),'*g')
hold off%在刚体树模型上计算由于外力引起的正向动力学(已知力矩求位置)
%一个扳手被应用到一个特定的身体与重力是指定为整个机器人。加载预定义的KUKA LBR机器人模型,该模型指定为RigidBodyTree对象。
clear
load exampleRobots.mat lbr
lbr.DataFormat = 'row';
lbr.Gravity = [0 0 -9.81];
q = homeConfiguration(lbr);
q(2)=pi/4
% 指定表示机器人所经历的外力的扳手向量。利用外力函数生成外力矩阵。
% 指定机器人模型、体验扳手的末端执行器、扳手矢量和当前机器人配置。
% 扳手是相对于“tool0”车身框架给出的,也就是在tool0坐标系施加的,它要求你指定机器人的配置,q。
wrench = [0 0 0.5 0 0 0.3];
%externalForce(robot,bodyname,wrench)组成了外力矩阵,您可以使用该矩阵作为反向动力学和正向动力学的输入,
%向bodyname指定的刚体施加一个外力扳手。假定扳手输入在基础框架内,力矩阵fext在基坐标系中给出。
% 施加在物体上的力矩和力,指定为[Tx Ty Tz Fx Fy Fz]矢量。扳手的前三个要素对应于xyz轴周围的力矩。
% 最后三个元素是沿同一轴的线性力。除非你指定了机器人的配置,第四个元素q,否则扳手力矩是相对于base。
fext = externalForce(lbr,'tool0',wrench,q);
% 计算当lbr处于主构型时,末端执行器“tool0”所受的外力在重力作用下产生的关节加速度。
% 假设关节速度和关节力矩为零(输入为空向量[])。
qddot = forwardDynamics(lbr,q,[],[],fext);%计算关节扭矩以对抗外力
% 利用外力函数生成力矩阵,应用于刚体树模型。力矩阵是一个m×6的向量,对于机器人上的每个关节都有一行来应用一个六元扳手。
% 使用外力函数,指定末端执行器,正确地将扳手分配到矩阵的正确行。你可以将多个力矩阵加在一起来对一个机器人施加多个力。
% 要计算抵消这些外力的关节扭矩,可以使用反动力学函数。
% 加载一个预定义的KUKA LBR机器人模型,它被指定为RigidBodyTree
clear
load exampleRobots.mat lbr
lbr.DataFormat = 'row';
lbr.Gravity = [0 0 -9.81];
q = homeConfiguration(lbr);
%在link1上设置外力。输入的扳手向量在基坐标系中表示。
fext1 = externalForce(lbr,'link_1',[0 0 0.0 0.1 0 0]);
%在末端执行器上设置外力,tool0。输入的扳手向量在tool0中表示。
fext2 = externalForce(lbr,'tool0',[0 0 0.0 0.1 0 0],q);
%fext1 fext2返回基于全局坐标系的力,然后显示是哪个坐标系中的力作用,数值是基于全局的。
%计算平衡外力所需的关节力矩。要组合这些力,将力矩阵相加。假设关节速度和加速度为零(输入为[])。
tau = inverseDynamics(lbr,q,[],[],fext1+fext2);
%jointTorq = inverseDynamics(robot) 反动力学(机器人)计算机器人在不施加外力的情况下静止保持自身结构所需的关节力矩。

创建一个urdf机器人_Matlab官方机器人工具箱Robotics System Toolbox官网翻译教程2相关推荐

  1. [并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(1)

    Arranged By Zhonglihao @ 2018 **请确认Matlab安装时点选了并行计算工具箱 第一章:parfor循环并行计算 parfor循环介绍 parfor循环是Matlab并行 ...

  2. Robotics System Toolbox中的机器人运动(7)--RRT规划避障路径

    CSDN话题挑战赛第2期 参赛话题:学习笔记 1.前记 传统机器人通过人工示教的方式编写机器人的运动程序,在结构化的环境中应用广泛,但对非专业机器人工程师,机器人编程有很大的难度.机器人的路径规划问题 ...

  3. 创建一个urdf机器人_ROS学习笔记十一:创建URDF 文件并在RVIZ中查看模型

    Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.创建第一个URDF文件 ...

  4. MATLAB Robotics System Toolbox学习笔记(一):一步一步建造一个机械臂

    本文参考 MathWorks 中 Help Center 的 Build a Robot Step by Step ,并加以自己的理解 原网址:https://ww2.mathworks.cn/hel ...

  5. 一个简单的网站设计与实现(HTML+CSS)---钻戒官网(5页浮动布局)

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 ...

  6. 创建一个urdf机器人_ROS机械臂开发:创建机器人URDF模型

    1. URDF建模原理 URDF是一种使用XML格式描述的机器人模型文件 Links:坐标系与几何关系 Joints:Links之间的关系 标签 描述机器人某个刚体部分的外观和物理属性: 描述连杆尺寸 ...

  7. 为Steemit创建一个免费的开源投票机器人

    您知道bot这个词的意思,但是FOSSbot呢? FOSS代表免费的开源软件. @personz创建的这个Steem投票机器人是免费和开源的. 几天前,我刚刚部署了FOSSbot,并希望与您共享这一不 ...

  8. 利用discord创建一个自己的discord bot机器人

    最近应一疯狂热爱NIKE的朋友需求,接触了discord开发,利用discord bot实现了很多有意思的事情. 1.Discord是什么? Discord 是一款适用于游戏玩家一体化语音和文字聊天的 ...

  9. Robotics system toolbox 工具箱使用案例

    文章目录 使用案例 工具箱单位 动力学属性 动力学方程 使用案例 以艾利特EC66机器人为例,基本的运动学及动力学计算函数的使用如下: clear,clc,close all% 导入机器人 robot ...

最新文章

  1. Gartner预计2018年全球人工智能商业价值将达到1.2万亿美元
  2. vuepress侧边栏配置_vuepress的侧边栏怎么动态生成
  3. 【HTML】 HTML基础知识 表单
  4. 【转载】关于测试人员的职业发展
  5. C语言 | 二维数组
  6. Python 第三方模块之 beautifulsoup(bs4)- 解析 HTML
  7. 2018-2019-2 网络对抗技术 20165318 Exp 9 Web安全基础
  8. java 读写分离 mvc_spring MVC、mybatis配置读写分离
  9. pil python 安装_Python实现识别人脸特征并打印出来!
  10. pyqt5——QImage与QPixmap
  11. 陈强教授《机器学习及R应用》课程 第十二章作业
  12. 通过TCP网络协议实现控制台多人聊天功能,另附私聊@功能。(java)
  13. 微信网页授权(OAuth2.0) PHP 源码简单实现
  14. C++Pollard_rho分解质因数及其例题—————Prime Test
  15. Java实现Google的S2算法工具类
  16. Dilated conv扩张卷积的理解(一看就会)
  17. 解决虚拟机ubuntu20.04不能连外网问题
  18. 2.2 数据管理 之 数据加权
  19. Android自定义ImageView圆角
  20. 高数下|级数6|手写笔记(幂级数求和)

热门文章

  1. intelliJ idea 激活和配置
  2. WIN7(VISTA)系统无法上网问题排查方法
  3. Nokia Imaging SDK滤镜使用入门
  4. ant中调用外部ant任务的两种方法
  5. ArcIMS9.2新增地图服务时check your map file's layers and data source connections解决
  6. linux系统下装windows双系统,LINUX下安装WINDOWS双系统
  7. mitmproxy安装证书_在 macOS 上使用 mitmproxy 透明代理进行网络抓包
  8. javascript option 菜单图标_善用 CSS,不用 JavaScript 也能写出这些元素
  9. Linux编译、运行多个java文件
  10. Android Framebuffer设置分辨率