1、前记:可能用Robotics Toolbox建立的机器人模型与实际机器人在外观上存在天壤之别吧,直接将CAD软件(UG、SolidWorks、CATIA、Proe等)做好的3D模型导入MATLAB中是一个很好的选择。

下面记录MATLAB官网上的如何显示具有可视几何图形的机器人建模。

1)导入具有.stl文件的机器人与统一的机器人描述格式 (URDF) 文件相关联, 以描述机器人的视觉几何。每个刚体都有一个单独的视觉几何特征。importrobot函数对 URDF 文件进行解析, 得到机器人模型和视觉几何。使用show功能可视化的机器人模型显示在一个figure图框中。然后, 您可以通过单击组件来检查它们并右键单击以切换可见性来与模型进行交互。

将机器人模型作为 URDF 文件导入。此 URDF 中必须正确指定.stl文件位置。要将其他.stl文件添加到单个刚性体, 请参见 addVisual .如:iiwa的URDF描述文件中的<geometry.....geometry>部分。

 

在命令窗输入代码:

robot = importrobot('iiwa14.urdf');

用相关的视觉模型可视化机器人。单击 "正文" 或 "框架" 进行检查。右键单击 "正文" 可切换每个可视几何图形的可见性。

代码:show(robot);%机器人显示如下

   

2)如此,在具有机器人的URDF文件和对应的stl文件条件下运行以上两行代码即可显示具有几何特征的可视化机器人模型。

如下:ABB机器人的IRB120

和ABB机器人的YUMI

2、仿真

     机器人可视化到MATLAB环境下后,就可以做仿真了。在MATLAB的实例中可以直接学习到一些思路,代码和结果如下:

具有多个约束的轨迹规划---->

%% Plan a Reaching Trajectory With Multiple Kinematic Constraints
%% Introduction
% This example shows how to use generalized inverse kinematics to plan a
% joint-space trajectory for a robotic manipulator. It combines multiple
% constraints to generate a trajectory that guides the gripper to a cup
% resting on a table. These constraints ensure that the gripper approaches
% the cup in a straight line and that the gripper remains at a safe
% distance from the table, without requiring the poses of the gripper to be
% determined in advance.%   Copyright 2016 The MathWorks, Inc.%% Set Up the Robot Model
% This example uses a model of the KUKA LBR iiwa, a 7 degree-of-freedom
% robot manipulator. |<docid:robotics_ref.bvlvwcs-1 importrobot>| generates
% a |<docid:robotics_ref.bvan8uq-1 robotics.RigidBodyTree>| model from a
% description stored in a Unified Robot Description Format (URDF) file.
lbr = importrobot('iiwa14.urdf'); % 14 kg payload version
lbr.DataFormat = 'row';
gripper = 'iiwa_link_ee_kuka';%%
% Define dimensions for the cup.
cupHeight = 0.2;
cupRadius = 0.05;
cupPosition = [-0.5, 0.5, cupHeight/2];
%%
% Add a fixed body to the robot model representing the center of the cup.
body = robotics.RigidBody('cupFrame');
setFixedTransform(body.Joint, trvec2tform(cupPosition))
addBody(lbr, body, lbr.BaseName);
%% Define the Planning Problem
% The goal of this example is to generate a sequence of robot
% configurations that satisfy the following criteria:
%
% * Start in the home configuration
% * No abrupt changes in robot configuration
% * Keep the gripper at least 5 cm above the "table" (z = 0)
% * The gripper should be aligned with the cup as it approaches
% * Finish with the gripper 5 cm from the center of the cup
%
% This example utilizes constraint objects to generate robot configurations
% that satisfy these criteria. The generated trajectory consists of five
% configuration waypoints. The first waypoint, |q0|, is set as the home
% configuration. Pre-allocate the rest of the configurations in
% |qWaypoints| using |repmat|.
numWaypoints = 5;
q0 = homeConfiguration(lbr);
qWaypoints = repmat(q0, numWaypoints, 1);
%%
% Create a |<docid:robotics_ref.bvlvs3d-1
% robotics.GeneralizedInverseKinematics>| solver that accepts the following
% constraint inputs:
%
% * Cartesian bounds - Limits the height of the gripper
% * A position target - Specifies the position of the cup relative to the
% gripper.
% * An aiming constraint - Aligns the gripper with the cup axis
% * An orientation target - Maintains a fixed orientation for the gripper
% while approaching the cup
% * Joint position bounds - Limits the change in joint positions between waypoints.
gik = robotics.GeneralizedInverseKinematics('RigidBodyTree', lbr, ...'ConstraintInputs', {'cartesian','position','aiming','orientation','joint'})
%% Create Constraint Objects
% Create the constraint objects that are passed as inputs to the solver.
% These object contain the parameters needed for each constraint. Modify
% these parameters between calls to the solver as necessary.
%%
% Create a Cartesian bounds constraint that requires the gripper to be at
% least 5 cm above the table (negative z direction). All other values are
% given as |inf| or |-inf|.
heightAboveTable = robotics.CartesianBounds(gripper);
heightAboveTable.Bounds = [-inf, inf; ...-inf, inf; ...0.05, inf]
%%
% Create a constraint on the position of the cup relative to the gripper,
% with a tolerance of 5 mm.
distanceFromCup = robotics.PositionTarget('cupFrame');
distanceFromCup.ReferenceBody = gripper;
distanceFromCup.PositionTolerance = 0.005
%%
% Create an aiming constraint that requires the z-axis of the
% |iiwa_link_ee| frame to be approximately vertical, by placing the target
% far above the robot. The |iiwa_link_ee| frame is oriented such that this
% constraint aligns the gripper with the axis of the cup.
alignWithCup = robotics.AimingConstraint('iiwa_link_ee');
alignWithCup.TargetPoint = [0, 0, 100]
%%
% Create a joint position bounds constraint. Set the |Bounds| property of
% this constraint based on the previous configuration to limit the change
% in joint positions.
limitJointChange = robotics.JointPositionBounds(lbr)
%%
% Create an orientation constraint for the gripper with a tolerance of one
% degree. This constraint requires the orientation of the gripper to match
% the value specified by the |TargetOrientation| property. Use this
% constraint to fix the orientation of the gripper during the final
% approach to the cup.
fixOrientation = robotics.OrientationTarget(gripper);
fixOrientation.OrientationTolerance = deg2rad(1)
%% Find a Configuration That Points at the Cup
% This configuration should place the gripper at a distance from the cup,
% so that the final approach can be made with the gripper properly aligned.
intermediateDistance = 0.3;
%%
% Constraint objects have a |Weights| property which determines how the
% solver treats conflicting constraints. Setting the weights of a
% constraint to zero disables the constraint. For this configuration,
% disable the joint position bounds and orientation constraint.
limitJointChange.Weights = zeros(size(limitJointChange.Weights));
fixOrientation.Weights = 0;
%%
% Set the target position for the cup in the gripper frame. The cup should
% lie on the z-axis of the gripper at the specified distance.
distanceFromCup.TargetPosition = [0,0,intermediateDistance];
%%
% Solve for the robot configuration that satisfies the input constraints
% using the |gik| solver. You must specify all the input constraints. Set
% that configuration as the second waypoint.
[qWaypoints(2,:),solutionInfo] = gik(q0, heightAboveTable, ...distanceFromCup, alignWithCup, fixOrientation, ...limitJointChange);
%% Find Configurations That Move Gripper to the Cup Along a Straight Line
% Re-enable the joint position bound and orientation constraints.
limitJointChange.Weights = ones(size(limitJointChange.Weights));
fixOrientation.Weights = 1;
%%
% Disable the align-with-cup constraint, as the orientation constraint
% makes it redundant.
alignWithCup.Weights = 0;
%%
% Set the orientation constraint to hold the orientation based on the
% previous configuration (|qWaypoints(2,:)|). Get the transformation from
% the gripper to the base of the robot model. Convert the homogeneous
% transformation to a quaternion.
fixOrientation.TargetOrientation = ...tform2quat(getTransform(lbr,qWaypoints(2,:),gripper));
%%
% Define the distance between the cup and gripper for each waypoint
finalDistanceFromCup = 0.05;
distanceFromCupValues = linspace(intermediateDistance, finalDistanceFromCup, numWaypoints-1);
%%
% Define the maximum allowed change in joint positions between each
% waypoint.
maxJointChange = deg2rad(10);
%%
% Call the solver for each remaining waypoint.
for k = 3:numWaypoints% Update the target position.distanceFromCup.TargetPosition(3) = distanceFromCupValues(k-1);% Restrict the joint positions to lie close to their previous values.limitJointChange.Bounds = [qWaypoints(k-1,:)' - maxJointChange, ...qWaypoints(k-1,:)' + maxJointChange];% Solve for a configuration and add it to the waypoints array.[qWaypoints(k,:),solutionInfo] = gik(qWaypoints(k-1,:), ...heightAboveTable, ...distanceFromCup, alignWithCup, ...fixOrientation, limitJointChange);
end
%% Visualize the Generated Trajectory
% Interpolate between the waypoints to generate a smooth trajectory. Use
% |<docid:matlab_ref.bvjbxbd pchip>| to avoid overshoots, which might
% violate the joint limits of the robot.
framerate = 15;
r = robotics.Rate(framerate);
tFinal = 10;
tWaypoints = [0,linspace(tFinal/2,tFinal,size(qWaypoints,1)-1)];
numFrames = tFinal*framerate;
qInterp = pchip(tWaypoints,qWaypoints',linspace(0,tFinal,numFrames))';
%%
% Compute the gripper position for each interpolated configuration.
gripperPosition = zeros(numFrames,3);
for k = 1:numFramesgripperPosition(k,:) = tform2trvec(getTransform(lbr,qInterp(k,:), ...gripper));
end
%%
% Show the robot in its initial configuration along with the table and cup
figure;
show(lbr, qWaypoints(1,:), 'PreservePlot', false);
hold on
exampleHelperPlotCupAndTable(cupHeight, cupRadius, cupPosition);
p = plot3(gripperPosition(1,1), gripperPosition(1,2), gripperPosition(1,3));
%%
% Animate the manipulator and plot the gripper position.
hold on
for k = 1:size(qInterp,1)show(lbr, qInterp(k,:), 'PreservePlot', false);p.XData(k) = gripperPosition(k,1);p.YData(k) = gripperPosition(k,2);p.ZData(k) = gripperPosition(k,3);waitfor(r);
end
hold off
%%
% If you want to save the generated configurations to a MAT-file for later
% use, execute the following:
%
% |>> save('lbr_trajectory.mat', 'tWaypoints', 'qWaypoints');|
displayEndOfDemoMessage(mfilename)

           

3、后记:MATLAB机器人可视化的方法很多,对于URDF自己写太麻烦,可以利用SolidWorks设计出三维模型后中的插件功能直接生成。有些可以利用xml文件生成,simulink中有示例,也可查看Simscape   Simscape Multibody  Simulink 3D Animation          Simulink Control Design 等网上资源。

如:Simscape Multibody中的一个如何将STEP文件导入的方法。

4、根据上面的solid 文件from的选项我尝试了下从Robotstudio中保存机器人各部件到MATLAB目录下然后使其可视化从Robotstudiox下保存个部件参考----->一种从Robotstudio环境中导出机器人模型并在MATLAB下使其可视化的研究记录。结果表明还是可行的,但是运行会出现错误,需要自己定义坐标的转换关系和各部件的质量等。。。如下:

参看网址:https://ww2.mathworks.cn/help/robotics/ref/robotics.rigidbodytree-class.html

http://www.ilovematlab.cn/thread-504445-1-1.html

https://www.zhihu.com/question/56559082/answer/150314069

https://www.zhihu.com/question/58793939/answer/343951305

https://blog.csdn.net/weixin_37719670/article/details/79027035#commentBox

https://www.zhihu.com/question/40801341/answer/134010201

https://blog.csdn.net/sunbibei/article/details/52297524

https://blog.csdn.net/weixin_39090239/article/details/80557032

https://www.youtube.com/watch?v=F2kE2vGY8_A&t=11s

https://ww2.mathworks.cn/help/physmod/sm/rigid-bodies-1.html

MATLAB机器人可视化相关推荐

  1. matlab机器人,MATLAB机器人可视化

    1.前记:可能用Robotics Toolbox建立的机器人模型与实际机器人在外观上存在天壤之别吧,直接将CAD软件(UG.SolidWorks.CATIA.Proe等)做好的3D模型导入MATLAB ...

  2. MATLAB下机器人可视化与控制---simulink篇(1)

    1.前记:按照一定的套路,在开篇之前先如下方式开车---自行车(自己学习的总结). 在之前的博客中写到了一些MATLAB环境下使机器人可视化,并做控制.如: MATLAB机器人可视化. 一种从Robo ...

  3. MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇

    MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇 摘要: 一 导入机器人URDF模型 二 建立关节电机控制的物理模型 三 仿真结果 1-整体物理模型 2-各关节电机PID位 ...

  4. 强大的MATLAB机器人工具箱Matlab_Robotic_Toolbox_v9.8及教程

    强大的MATLAB机器人工具箱Matlab_Robotic_Toolbox_v9.8及教程 Matlab_Robotic_Toolbox_v9.8是一个功能强大的机器人工具箱,包含了机器人正.逆向运动 ...

  5. MATLAB机器人工具箱(一 机器人运动学)

    目录 一.三维空间位姿表示与坐标变换方法 三维空间的位置与姿态表示 位置描述 姿态描述 旋转矩阵 坐标系绘制 坐标变换 平移坐标变换 旋转变换 二.机器人运动学 D-H参数法 创建一个连杆对象 创建一 ...

  6. Matlab机器人工具箱(0)——旋转与平移变换

    Matlab机器人工具箱(0)--旋转与平移变换 前言 旋转变换 旋转矩阵与可视化 欧拉角 RPY角 角轴 单位四元数 平移与旋转组合 总结 参考资料 前言 本文主要介绍如何使用matlab工具箱对旋 ...

  7. MATLAB机器人工具箱 机械臂仿真

    MATLAB机器人工具箱 机械臂仿真 学习自B站:Nino_FM 采用 Standard DH 建模法 旋转算子 R = rotx(pi/2) R = 1.0000 0 00 0.9996 -0.02 ...

  8. Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学

    Matlab机器人工具箱(1)--机器人的建立.绘制与正逆运动学 前言 rtbdemo 机器人的建立 代码解析 单个Link的解释 建立机器人整体的解释 绘制 正运动学 逆运动学 微分运动学(求雅克比 ...

  9. matlab机器人工具箱的使用(4)

    学习目标: matlab机器人工具箱的使用(4) 学习内容: 1.工作空间可视化 学习记录: 思路: 随机生成一个关节变量-----fkine------>变换矩阵------transl--- ...

最新文章

  1. dom4j读写xml文件
  2. 【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
  3. 关于git的ssh-key:解决本地多个ssh-key的问题
  4. 重庆python就业工资待遇-重庆python培训多少钱?
  5. STM32开发 -- Secure CRT 自动记录日志和时间戳功能配置
  6. Python 学习第三部分函数——第一章函数基础
  7. 【深度学习】有效防止过拟合
  8. cfar matlab,雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)
  9. Apollo阿波罗配置中心基本概述
  10. ZY Player 2.3.5 中文版 (全网视频播放器)
  11. 交换机SNMP V3版本配置
  12. Docker 安装ElasticSearch 启动项目出现 [{#transport#-1}{WW73fQYgSq-vd8jQXTmdIw}{192.168.11.134}{192.168.11.13
  13. php 采集 过滤,dedecms采集过滤规则 万能采集过滤代码 常用过滤
  14. 【SpringBoot应用篇】SpringBoot+Redis实现接口幂等性校验
  15. retrofit设置单个请求的超时
  16. Opencv配置VS2010,配置成功后如何成功使用完成vs调用opencv库
  17. word文档参考文献如何自动编号
  18. mt6572 flash tool 下载报错
  19. 中小学课程新增计算机教育,教育部通知:中小学将新增这门课?家长:真辅导不了……...
  20. [Transformer]TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation

热门文章

  1. On the Opportunities and Risks of Foundation Models- APPLICATIONS
  2. 如何将一串数字用函数的方法倒过来(C语言)
  3. Ubuntu 找不到wifi适配器
  4. 海外游戏广告投放渠道
  5. ABAP基本语法(一)附带思维导图学习材料等
  6. 原神申鹤四星武器选哪个
  7. python实现简单的多人聊天功能
  8. 近期研究方向 (内部参考)
  9. 苹果 CEO 为什么选中了何同学?
  10. 如何做到精准引流获客?