通过rigidBodyTree对象作为参数在仿真软件MATLAB函数块万博1manbetx

23日视图(30天)
你好,
我想通过在MATLAB功能块rigidBodyTree对象(模型),这样th函数看起来像下面的:万博1manbetx
函数= fcn (var1 q0,机器人)
“‘
....
“‘
T = getTransform(机器人q0机器人。BodyNames{}结束,robot.BaseName);
“‘
....
“‘
结束
我定义了机器人在Matlab工作区
我曾试图改变块的探索 范围 的机器人 参数 。但我仍然会错误
表达“机器人”初始值的数据 “机器人” 必须评估逻辑或者支持数值类型。万博1manbetx
我应该做什么?
如果这是不可能的,我怎么能创建一个Matlab功能块,将参数从工作区
从机器人系统作为前进动力的块工具箱?

答案(2)

弗朗西斯科·Ciriello
弗朗西斯科·Ciriello 2021年8月29日
一个简单的方法来做一个rigidBodyTree与codegen兼容,所以它可以使用仿真软件MATLAB功能块,是运行万博1manbetx writeAsFunction 函数的rigidBodyTree命令窗口:
writeAsFunction (myRigidBodyTree“rbtForCodegen”)
这在当前目录中创建一个函数调用 rbtForCodegen
然后可以调用 rbtForCodegen 在MATLAB函数加载你的机器人功能块,例如,
函数tform = myGetTransform(配置)% # codegen
% codegenable函数,计算正运动学
% rigidBodyTree。
持续的机器人configState
%设置加载RBT
如果isempty(机器人)
机器人= rbtForCodegen ();
configState = robot.homeConfiguration;
结束
i = 1:长度(configState)
configState(我)。JointPosition =配置(i);
结束
linkNumber = 5;% robot.BodyNames链接的索引
tform = getTransform(机器人、configState robot.BodyNames {linkNumber});
结束
您可以使用其他功能的机器人系统工具箱以类似的方式。

Shravista卡
Shravista卡 2020年7月18日
我尝试和你做的一样,是通过rigidBodyTree对象。但是,我们不能通过rigidBodyTree对象,原因有很多,因为它不是由仿真软件支持的数据类型。万博1manbetx万博1manbetx检查数据类型所支持的仿真软件,检查这个URL。万博1manbetx万博1manbetx//www.tianjin-qmedu.com/help/万博1manbetxsimulink/ug/d万博1manbetxata-types-supported-by-simulink.html
我们甚至不能加载这个rigidBodyTree .mat类型文件。甚至我们不能使用口罩通过这样的争论。原因是一样的,这个不支持的数据类型。万博1manbetx同样的理由给输入MATLAB函数块。指定的数据类型,可以通过模型浏览器,在上面的URL指定的是相同的。除此之外,我们可以指定总线对象和枚举。但是,问题。
解决这个问题的一个方法是使用MATLAB系统对象。用这种方法,你可以使用类依赖于MATLAB。系统和其他系统对象。请参阅//www.tianjin-qmedu.com/help/sim万博1manbetxulink/ug/system-design-in-simulink-using-system-objects.html。在仿真万博1manbetx软件中,使用MATLAB系统块这是可能的。
我将展示我如何采用这方法传递rigidBodyTree对象类。但是,请记住,这些都是进口的,处理类。
看到这,我采用了实现功能。
但请记住, 仿真不能运行此代码,代码生成 。如果你需要模拟代码生成,那么你可能需要其他方法不进口处理的类不能使用代码生成。否则员工从MathWorks可以帮助我们。
classdefderivativeJacobian < matlab。系统& matlab.system.mixin.Propagates
% derivativeJacobian块计算雅可比矩阵的时间导数
% 2018年版权MathWorks公司。
% # codegen
属性(Nontunable)
%的机器人——刚体树
机器人= 0;
结束
方法
.......................................................
结束
方法(访问=保护)
函数setupImpl (obj)
% setupImpl执行一次性计算,如计算常数
%分配机器人内部属性的实例化结构
obj.robot。DataFormat =“列”;
结束
函数Jdt = stepImpl (obj q qdt)
Tf =细胞(7,1);
pos = 0 (3、7);
i1 = 1:7
Tf {i1} = obj.robot.getTransform (q, obj.robot.BodyNames {i1});
pos (:, i1) = {i1}特遣部队(1:3,4);
结束
...........................
结束
.......................................
结束
方法(静态访问=保护)
函数头= getHeaderImpl
.........................................
结束
结束

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!