A\B求解将 B转换到 A 的坐标系中的变换
%% 将罐子附加到末端执行器
removeBody(robot,'leftWidgetFrame');
removeBody(robot,'rightWidgetFrame');
% 获取机器人手部的当前姿态
graspConfig = qInterpFROMinitialGOTOgrasp(end,:);
leftGripperFramePose = getTransform(robot,graspConfig,leftGripperFrame);
rightGripperFramePose = getTransform(robot,graspConfig,rightGripperFrame);
% 将罐子放置在末端执行器夹爪中。
setFixedTransform(leftbody.Joint, leftGripperFramePose\leftWidgetCollision.Pose);
setFixedTransform(rightbody.Joint, rightGripperFramePose\rightWidgetCollision.Pose);
addCollision(leftbody,leftWidgetCollision,inv(leftWidgetCollision.Pose));
addCollision(rightbody,rightWidgetCollision,inv(rightWidgetCollision.Pose));
% 将刚体添加到机器人模型中
addBody(robot, leftbody, leftGripperFrame);
addBody(robot, rightbody, rightGripperFrame);
% 从环境中移除物体。
env_home(6:7) = [];
envcheckcollison(6:7)=[];
求解将 B
转换到 A
的坐标系中的变换
在 MATLAB 中,A\B
这种符号表示的是矩阵的左除运算,即求解线性方程组 AX = B
的解 X
。在几何变换中,这个操作通常用于计算变换的逆,即求解将 B
转换到 A
的坐标系中的变换。
leftGripperFramePose\leftWidgetCollision.Pose
这个表达式表示你正在计算从 leftGripperFramePose
到 leftWidgetCollision.Pose
的变换。换句话说,你正在计算 leftWidgetCollision.Pose
在 leftGripperFramePose
坐标系下的表示。
具体来说,leftGripperFramePose
是左夹持器的当前姿态,leftWidgetCollision.Pose
是罐子的初始姿态。通过计算 leftGripperFramePose\leftWidgetCollision.Pose
,你可以得到罐子在夹持器坐标系中的相对位置和姿态。
这个操作的结果是用于设置一个新的固定变换,使罐子(leftWidgetCollision
)被放置在夹持器的特定位置,仿佛夹持器已经抓住了罐子。
总结
- 使用
leftGripperFramePose\leftWidgetCollision.Pose
是为了计算leftWidgetCollision.Pose
在leftGripperFramePose
局部坐标系下的相对位置和姿态,从而使罐子能够正确地定位在机械臂的夹持器中。
在 MATLAB 中,inv(X)
表示矩阵X
的逆矩阵。在几何变换中,inv(X)
通常用于计算一个刚体变换矩阵的逆变换。
解释 inv(rightWidgetCollision.Pose)
几何变换的背景
在机器人学中,一个刚体变换矩阵(通常是 4x4 的同构矩阵)表示了物体在空间中的位置和方向。矩阵的逆变换通常用于将一个点或物体从一个坐标系转换到另一个坐标系。
假设 rightWidgetCollision.Pose
是一个 4x4 的同构矩阵,表示 rightWidgetCollision
(比如罐子或其他物体)在某个全局坐标系中的位置和姿态。inv(rightWidgetCollision.Pose)
的作用是计算这个姿态的逆变换。
具体来说,inv(rightWidgetCollision.Pose)
会将全局坐标系中的坐标转换回 rightWidgetCollision.Pose
坐标系。这意味着,假如你有一个物体的位置在全局坐标系中,并希望知道它在 rightWidgetCollision.Pose
坐标系中的位置,你就需要用到这个逆变换。
addCollision(rightbody, rightWidgetCollision, inv(rightWidgetCollision.Pose));
这行代码的作用是将 rightWidgetCollision
添加到 rightbody
的碰撞体中,并且指定该物体在 rightbody
坐标系下的相对位置和姿态。
通过计算 inv(rightWidgetCollision.Pose)
,你可以确保 rightWidgetCollision
在 rightbody
的局部坐标系中正确地定位。这意味着,如果 rightWidgetCollision.Pose
是相对于某个全局坐标系的,而 rightbody
是另一个坐标系,那么你需要将 rightWidgetCollision.Pose
的位置和姿态逆变换到 rightbody
的局部坐标系中。
总结
inv(rightWidgetCollision.Pose)
的作用是计算 rightWidgetCollision.Pose
的逆变换矩阵,以便将罐子或物体从全局坐标系转换到rightbody
的局部坐标系,从而确保物体在夹持器中的正确定位和姿态。