加快机器人与代码生成算法
您可以生成代码来选择机器人系统工具箱™算法加速执行。建立支持代码生成的算法作为一个单独的函数,您可以插入万博1manbetx您的工作流。使用代码生成,你必须有一个MATLAB®编码器™许可证。代码生成的列表支持机器人系统工具箱,明白了万博1manbetx函数支持代码生成万博1manbetx。
对于这个示例,使用inverseKinematics
对象与一个rigidBodyTree
机器人模型来求解机器人末端执行器配置,实现所需的位置。
创建单独的函数算法
创建一个单独的函数,ikCodegen
的逆运动学算法。创建inverseKinematics
对象和构建rigidBodyTree
在函数模型。指定% # codegen
内部函数来确定它作为代码生成一个函数。
函数qConfig = ikCodegen (endEffectorName tform,重量、initialGuess)% # codegen机器人= rigidBodyTree (“MaxNumBodies”3,“DataFormat”,“行”);body1 = rigidBody (“界面”);界面。联合= rigidBodyJoint (“jnt1”,“转动”);body2 = rigidBody (“body2”);jnt2 = rigidBodyJoint (“jnt2”,“转动”);setFixedTransform (jnt2 trvec2tform ((1 0 0))) body2。联合= jnt2;body3 = rigidBody (“工具”);jnt3 = rigidBodyJoint (“jnt3”,“转动”);setFixedTransform (jnt3 trvec2tform ((1 0 0))) body3。联合= jnt3;addBody(机器人,界面,“基地”)addBody (body2的机器人“界面”)addBody (body3的机器人“body2”)本土知识= inverseKinematics (“RigidBodyTree”,机器人);本土知识[qConfig ~] = (endEffectorName tform,重量、initialGuess);结束
在当前文件夹保存功能。
执行代码生成算法
您可以使用codegen
(MATLAB编码器)函数或MATLAB编码器(MATLAB编码器)应用程序来生成代码。在本例中,生成一个墨西哥人文件通过调用codegen
MATLAB命令行上。为每个输入指定样本输入参数函数使用arg游戏
输入参数
为输入参数指定样本值。
endEffectorName =“工具”;tform = trvec2tform (0.7 - -0.7 [0]);重量= (0.25 0.25 0.25 1 1 1);initialGuess = (0 0 0);
调用codegen
功能和指定单元阵列的输入参数。这个函数创建一个单独的ikCodegen_mex
函数使用。你也可以生成C代码通过使用选项
输入参数。
codegenikCodegenarg游戏{endEffectorName tform,重量,initialGuess}
如果你的输入可以来自适应可变长度,通过使用指定的规范类型输入coder.typeof
(定点设计师)与codegen
(MATLAB编码器)函数。
检查生成的代码的性能
比较生成的墨西哥人的时间函数通过使用原始的时间函数时间
。
时间时间= (@ ()ikCodegen (endEffectorName tform,重量、initialGuess)) mexTime时间= (@ ()ikCodegen_mex (endEffectorName tform,重量、initialGuess))
时间= 0.0425 mexTime = 0.0011
墨西哥人函数运行超过30倍。结果可能在您的系统不同。
替换算法函数与墨西哥人
打开运行机器人工作流的主要功能。取代本土知识
对象调用与墨西哥人函数创建使用代码生成。对于这个示例,使用简单的二维路径跟踪的例子。
打开二维路径跟踪与逆运动学的例子。
openExample (“机器人/ TwoDInverseKinematicsExampleExample”)
修改示例代码使用新的ikCodegen_mex
函数。接下来的代码是一个副本的例子修改使用新墨西哥人的功能。定义机器人模型是在函数内部,所以跳过构建机器人部分。
定义轨迹
t = (0:0.2:10)”;%的时间数=长度(t);中心= (0.3 - 0.1 0);半径= 0.15;θ= t *(2 *π/ t(结束));点=中心+半径* (cos(θ)sin(θ)0(大小(θ))];
逆运动学解
预先分配的配置解决方案作为一个矩阵,万博 尤文图斯qs
。为末端执行器指定权重转换和末端执行器的名字。
q0 = (0 0 0);ndof =长度(q0);q = 0(计数,ndof);重量= [0,0,0,1,1,0];endEffector =“工具”;
循环的轨迹点跟踪循环。取代本土知识
对象调用的ikCodegen_mex
函数。计算每个点的解决方案生成联合配置,实现末端执行器的位置。存储配置使用。
qInitial = q0处;%使用国内配置作为初始猜测为i = 1:计数%求出满足所需的终端执行器的配置%的位置点=点(我:);qSol = ikCodegen_mex (endEffector trvec2tform(点)、重量、qInitial);%存储配置qs(我:)= qSol;%从之前的解决方案qInitial = qSol;结束
动画解决方案
现在,所有的解决方案已经生成。万博 尤文图斯有生命的结果。你必须重新创建机器人,因为它最初是在函数中定义的。遍历所有的解决方案。万博 尤文图斯
机器人= rigidBodyTree (MaxNumBodies, 15日“DataFormat”,“行”);body1 = rigidBody(界面);界面。联合= rigidBodyJoint (“jnt1”、“转动”);body2 = rigidBody (“body2”);jnt2 = rigidBodyJoint (“jnt2”、“转动”);setFixedTransform (jnt2 trvec2tform ([0.3 0 0])) body2。联合= jnt2;body3 = rigidBody(“工具”);jnt3 = rigidBodyJoint (“jnt3”、“转动”);setFixedTransform (jnt3 trvec2tform ([0.3 0 0])) body3。联合= jnt3; addBody(robot,body1,'base') addBody(robot,body2,'body1') addBody(robot,body3,'body2') % Show first solution and set view. figure show(robot,qs(1,:)); view(2) ax = gca; ax.Projection = 'orthographic'; hold on plot(points(:,1),points(:,2),'k') axis([-0.1 0.7 -0.3 0.5]) % Iterate through the solutions framesPerSecond = 15; r = rateControl(framesPerSecond); for i = 1:count show(robot,qs(i,:),'PreservePlot',false); drawnow waitfor(r); end
这个例子向您展示了如何为特定的算法生成代码或功能来提高他们的速度和简单地用生成的墨西哥人工作流功能。
另请参阅
codegen
(MATLAB编码器)|时间
|inverseKinematics
相关的话题
- 二维路径跟踪与逆运动学
- 函数支持代码生成万博1manbetx
- 在命令行生成C代码(MATLAB编码器)
- 通过使用MATLAB编码器应用生成C代码(MATLAB编码器)