matlab机器人,MATLAB机器人可视化
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描述文件中的部分。
在命令窗输入代码:
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. || generates
% a || 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 || 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
% || 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:numFrames
gripperPosition(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机器人,MATLAB机器人可视化相关推荐
- 一种从Robotstudio环境中导出机器人模型并在MATLAB下使其可视化的研究记录
1.前记:回到学校反而没时间记录了自己瞎折腾的东西了,允我长长的叹一口气 '_' // 先提一下,在这篇MATLAB机器人可视化博客中提到了如何使CAD模型的机器人在MATLAB环境下可视化的问题 ...
- 用MATLAB玩转机器人-第1章 认识MATLAB
文章目录 1.1 MATLAB简单介绍 1.2 机器人的简单介绍 1.3 机器人组成 1.3.1 机械部分 1.3.2 控制和传感部分 1.4 建模与仿真 1.4.1 简单的电路系统建模与仿真 1.4 ...
- 【Matlab 六自由度机器人】基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间(附MATLAB建模仿真完整代码)
[Matlab 六自由度机器人]基于蒙特卡洛法构建工作空间 往期回顾 前言 正文 一.蒙特卡洛方法及机器人工作空间的概述 1. 蒙特卡洛法 2. 机器人工作空间 二.rand函数的应用 1. rand ...
- 用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
文章目录 1. 概述 2. 仿真搭建 2.1 运动轨迹函数 2.2 机器人的机械仿真模型 2.3 机器人的电气仿真模型 2.3.1 直流电机部分 2.3.2 减速器与传动装置 2.4 PID 控制的仿 ...
- 四足机器人|机器狗|仿生机器人|多足机器人|MATLAB动画仿真|Simulink动画仿真
四足机器人|机器狗|仿生机器人|多足机器人|MATLAB动画仿真|Simulink动画仿真 四足机器人的连杆模型,利用机器人工具箱,行走规划是用的CPG,详情见 https://blog.csdn.n ...
- Arduino白泽四足机器人——matlab逆运动学求解
基于"白泽"四足机器人足端轨迹的插值方法 目录 1 应用背景 2 模型建立 3 MATLAB对足端轨迹进行拟合插值 4 结果与分析 5 matlab逆运动学程序 1 应用背景 近年 ...
- 【机器人学、机器人控视觉与控制】四足机器人MATLAB仿真
文章目录 [机器人学.机器人控视觉与控制]四足机器人MATLAB仿真 1 创建一条机器人腿 2 单腿运动 3 四腿运动 [机器人学.机器人控视觉与控制]四足机器人MATLAB仿真 我们的目标是创建一个 ...
- matlab仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
文章目录 1. 概述2. 仿真搭建2.1 运动轨迹函数2.2 机器人的机械仿真模型2.3 机器人的电气仿真模型2.3.1 直流电机部分2.3.2 减速器与传动装置 2.4 PID 控制的仿真模型2.4 ...
- 四足机器人—matlab机器人工具箱DH建模
目录 基于matlab机器人工具箱的四足机器人DH建模 模型展示 代码 参考博客 基于matlab机器人工具箱的四足机器人DH建模 模型展示 代码 %2021/10/28四足机器人DH建模 %碎弧的星 ...
最新文章
- 贪吃蛇计时器怎么编写java_java编写简易贪吃蛇游戏
- Codeforces-868C. Qualification Rounds(状压)
- 服务发现 注册中心 consul 的介绍、部署和使用
- 一个成熟的网站模板如何引起用户的注意?
- 快速了解什么是自然语言处理
- Python名称空间是什么?
- 点击事件为什么会失效_耐高温润滑油脂为什么会失效?
- how SAP UI5 Manifest.json is loaded
- 计算机网络安全顾问啊,【网络安全咨询顾问工作内容|工作职责|网络安全咨询顾问做什么】-看准网...
- ref绑定dom的三种写法
- 【例题+习题】【数值计算方法复习】【湘潭大学】(三)
- JAVA 简单综合题目 小型公司职工对象
- Airflow 中文文档:使用测试模式配置
- 面试官问你Java内存区域你用new创建对象来解释
- python运用maya_Mayapythonapi场景选择操作
- 对称矩阵可以分解为对称矩阵的乘积 对称矩阵开根
- 苹果电脑上几款不错的图片编辑工具
- 靠自己。linux manul手册入门
- 48-Elasticsearch-2(DSL查询_搜索结果处理_RestClient查询文档)
- Oracle 11g安装过程中提示先决条件检查不通过的解决方法
热门文章
- dell刀片服务器 重启 维护,已解决: dell 刀片服务器内网网络问题 - Dell Community
- 【面经】2021 中国农业银行 笔试编程题
- Java对base64编解码总结
- pandas用法小结
- 2022-2028年全球与中国老年手机行业发展趋势及竞争策略研究
- 软件设计师中级复习小总结
- RGB转换成Lab具体算法
- No application encryption key has been specified laravel
- 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)
- SpringBoot + MyBatis-Plus + Shiro授权认证