报错报告如下:

simulink图如下:

删了其中一个模块后:

被删的模块代码:

调用的computeIK代码:
function q = computeIK(T1, T2)
persistent robot
if ~isequal(size(T1), [4 4]) || ~isequal(size(T2), [4 4])
q = zeros(1, 6);
warning('T1或T2不是4x4矩阵,使用默认关节角。');
return;
end
if isempty(robot)
% 定义DH参数
L1 = Link('d', 0.62588, 'a', 0, 'alpha', 0);
L2 = Link('d', 0, 'a', 0, 'alpha', pi/2);
L3 = Link('d', 0, 'a', 0.43288, 'alpha', 0);
L4 = Link('d', 0, 'a', 0, 'alpha', -pi/2);
L5 = Link('d', 0.43202, 'a', 0, 'alpha', pi/2);
L6 = Link('d', 0, 'a', 0, 'alpha', -pi/2);
robot = SerialLink([L1 L2 L3 L4 L5 L6], 'name', 'robot');
end
% 计算目标位姿
if isempty(T2) || any(size(T2) ~= [4 4])
T3 = eye(4);
elseif T2(1,4) < 0.001 && T2(2,4) < 0.001 && T2(3,4) < 0.001
T3 = [1 0 0 0.01; 0 1 0 0.01; 0 0 1 0.01; 0 0 0 1];
else
T3 = T2;
end
T_desired = T3 * inv(T1);
% 求解逆运动学并处理空结果
q = robot.ikine(T_desired, 'q0', zeros(1,6), 'tol', 1e-5, 'ilimit', 10000);
if isempty(q)
q = zeros(1,6); % 返回默认值避免索引错误
else
q = q(:)'; % 确保为行向量
end
end
删了模块后报“-- WARN: Using default handle!--”的模块(就是中间那个最大的MF模块)的代码:
function [selectedHandle, releaseSignal, completeFlag] = TargetSelector(enable, gripperStatus, distMatrix, blockHandles, targetHandles, threshold)
persistent currentIndex processFlag releasedFlags completeFlagPersist
%% 初始化所有持久变量(统一使用int32类型)
if isempty(currentIndex)
currentIndex = int32(1); % 修改1:统一使用有符号int32
processFlag = false;
releasedFlags = false(size(blockHandles));
completeFlagPersist = 0;
disp('-- Persistent vars initialized --');
end
%% 初始化输出默认值
completeFlag = completeFlagPersist;
selectedHandle = int32(-1); % 修改2:保持整数类型
releaseSignal = 0;
%% 状态机主逻辑
if enable == 1 && ~processFlag
processFlag = true;
completeFlagPersist = 0;
currentIndex = int32(1); % 修改3:保持类型一致
releasedFlags(:) = false;
disp('-- StateMachine: START --');
end
if processFlag
% 修改4:添加显式类型转换
disp(sprintf('-- Processing Index %d --', currentIndex));
currentDist = norm(distMatrix(:,currentIndex));
if currentDist > threshold
if gripperStatus == 0
% 修改5:双重类型保护
selectedHandle = int32(blockHandles(currentIndex));
disp(sprintf(' Block Selected: %d', selectedHandle));
else
selectedHandle = int32(targetHandles(currentIndex));
disp(sprintf(' Target Selected: %d', selectedHandle));
end
releaseSignal = 0;
else
if gripperStatus == 1
releaseSignal = 1;
releasedFlags(currentIndex) = true;
% 修改6:确保索引类型
disp(sprintf(' Release Signal @ %d', currentIndex));
else
releaseSignal = 0;
end
% 修改7:保持整数运算
currentIndex = mod(currentIndex-1, int32(numel(blockHandles))) + int32(1);
end
%% 更新完成标志
if all(releasedFlags) && all(vecnorm(distMatrix) <= threshold)
completeFlagPersist = 1;
completeFlag = 1;
processFlag = false;
disp('-- Mission Complete!--');
else
completeFlagPersist = 0;
completeFlag = 0;
disp('-- Task Ongoing... --');
end
else
completeFlagPersist = completeFlag;
end
%% 添加默认句柄保护
if selectedHandle == -1
% 修改8:默认值类型转换
selectedHandle = int32(blockHandles(1));
disp('-- WARN: Using default handle!--');
end

simulink图如下:

删了其中一个模块后:

被删的模块代码:

调用的computeIK代码:
function q = computeIK(T1, T2)
persistent robot
if ~isequal(size(T1), [4 4]) || ~isequal(size(T2), [4 4])
q = zeros(1, 6);
warning('T1或T2不是4x4矩阵,使用默认关节角。');
return;
end
if isempty(robot)
% 定义DH参数
L1 = Link('d', 0.62588, 'a', 0, 'alpha', 0);
L2 = Link('d', 0, 'a', 0, 'alpha', pi/2);
L3 = Link('d', 0, 'a', 0.43288, 'alpha', 0);
L4 = Link('d', 0, 'a', 0, 'alpha', -pi/2);
L5 = Link('d', 0.43202, 'a', 0, 'alpha', pi/2);
L6 = Link('d', 0, 'a', 0, 'alpha', -pi/2);
robot = SerialLink([L1 L2 L3 L4 L5 L6], 'name', 'robot');
end
% 计算目标位姿
if isempty(T2) || any(size(T2) ~= [4 4])
T3 = eye(4);
elseif T2(1,4) < 0.001 && T2(2,4) < 0.001 && T2(3,4) < 0.001
T3 = [1 0 0 0.01; 0 1 0 0.01; 0 0 1 0.01; 0 0 0 1];
else
T3 = T2;
end
T_desired = T3 * inv(T1);
% 求解逆运动学并处理空结果
q = robot.ikine(T_desired, 'q0', zeros(1,6), 'tol', 1e-5, 'ilimit', 10000);
if isempty(q)
q = zeros(1,6); % 返回默认值避免索引错误
else
q = q(:)'; % 确保为行向量
end
end
删了模块后报“-- WARN: Using default handle!--”的模块(就是中间那个最大的MF模块)的代码:
function [selectedHandle, releaseSignal, completeFlag] = TargetSelector(enable, gripperStatus, distMatrix, blockHandles, targetHandles, threshold)
persistent currentIndex processFlag releasedFlags completeFlagPersist
%% 初始化所有持久变量(统一使用int32类型)
if isempty(currentIndex)
currentIndex = int32(1); % 修改1:统一使用有符号int32
processFlag = false;
releasedFlags = false(size(blockHandles));
completeFlagPersist = 0;
disp('-- Persistent vars initialized --');
end
%% 初始化输出默认值
completeFlag = completeFlagPersist;
selectedHandle = int32(-1); % 修改2:保持整数类型
releaseSignal = 0;
%% 状态机主逻辑
if enable == 1 && ~processFlag
processFlag = true;
completeFlagPersist = 0;
currentIndex = int32(1); % 修改3:保持类型一致
releasedFlags(:) = false;
disp('-- StateMachine: START --');
end
if processFlag
% 修改4:添加显式类型转换
disp(sprintf('-- Processing Index %d --', currentIndex));
currentDist = norm(distMatrix(:,currentIndex));
if currentDist > threshold
if gripperStatus == 0
% 修改5:双重类型保护
selectedHandle = int32(blockHandles(currentIndex));
disp(sprintf(' Block Selected: %d', selectedHandle));
else
selectedHandle = int32(targetHandles(currentIndex));
disp(sprintf(' Target Selected: %d', selectedHandle));
end
releaseSignal = 0;
else
if gripperStatus == 1
releaseSignal = 1;
releasedFlags(currentIndex) = true;
% 修改6:确保索引类型
disp(sprintf(' Release Signal @ %d', currentIndex));
else
releaseSignal = 0;
end
% 修改7:保持整数运算
currentIndex = mod(currentIndex-1, int32(numel(blockHandles))) + int32(1);
end
%% 更新完成标志
if all(releasedFlags) && all(vecnorm(distMatrix) <= threshold)
completeFlagPersist = 1;
completeFlag = 1;
processFlag = false;
disp('-- Mission Complete!--');
else
completeFlagPersist = 0;
completeFlag = 0;
disp('-- Task Ongoing... --');
end
else
completeFlagPersist = completeFlag;
end
%% 添加默认句柄保护
if selectedHandle == -1
% 修改8:默认值类型转换
selectedHandle = int32(blockHandles(1));
disp('-- WARN: Using default handle!--');
end