主要内容

加快机器人与代码生成算法

您可以生成代码来选择机器人系统工具箱™算法加速执行。建立支持代码生成的算法作为一个单独的函数,您可以插入万博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编码器)应用程序来生成代码。在本例中,生成一个墨西哥人文件通过调用codegenMATLAB命令行上。为每个输入指定样本输入参数函数使用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

这个例子向您展示了如何为特定的算法生成代码或功能来提高他们的速度和简单地用生成的墨西哥人工作流功能。

另请参阅

(MATLAB编码器)||

相关的话题