如何使用带有系统对象的 MATLAB 函数作为 Simulink 中的输入之一?

问题描述

我正在设计一个 7 DoF 机械臂的反推控制,我在 MATLAB 中创建并导入它作为刚体树对象。考虑到控制律,有一个术语,所以我在知道我的机器人 q 和质量矩阵的当前配置的情况下实时计算科里奥利矩阵。考虑到来自顺序积分的数值数据,我通过 Christoffel 参数化做了它,但它非常慢。 作为查看它是否比前一个更轻的替代方法,我想使用 Corke 方法(RTB 的)来解决问题,该方法考虑计算由于和对积的单个术语(更多信息在这里)。我可以在 for 循环中定义一个包含逆动力学命令的外部 MATLAB 函数,而不是设置多个 Inverse Dynamics Simulink 和 MATLAB Function Blocks?我认为它应该更高效和优雅。换句话说,我如何在 Simulink 中使用下面的这个 MATLAB 函数? “解释的 MATLAB 函数”块是正确的块吗?

function C = computeCoriolisMatrix(q,dq,robot_free)
N = length(q);
C = zeros(N,N);
Csq = C;
    for j = 1:N
        QD = zeros(1,N);
        QD(j) = 1;
        tau = inverseDynamics(robot_free,q,QD);
        Csq(:,j) = Csq(:,j) + tau';
    end
    
    for j = 1:N
        for k = j+1:N
            % find a product term  qd_j * qd_k
            QD = zeros(1,N);
            QD(j) = 1;
            QD(k) = 1;
            tau = inverseDynamics(robot_free,QD);
            C(:,k) = C(:,k) + (tau' - Csq(:,k) - Csq(:,j)) * dq(j);
        end
    end
    C = C + Csq * diag(dq);
    
end

谢谢大家,V。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)