From 7b4a83fd830672b0971cd6304d819aac4356eb75 Mon Sep 17 00:00:00 2001 From: jean_patrick_mathes <uomnk@student.kit.edu> Date: Fri, 23 Jun 2023 11:15:33 +0200 Subject: [PATCH] Fixes that there are no lines in the RobotViewer where the new joints are used by checking the distance instead of relying on the local transformation of the nodes --- VirtualRobot/Nodes/RobotNode.cpp | 24 +++++++++++++++++++++--- VirtualRobot/SceneObject.cpp | 1 - 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/VirtualRobot/Nodes/RobotNode.cpp b/VirtualRobot/Nodes/RobotNode.cpp index 077b2d7ab..34e6fe2e1 100644 --- a/VirtualRobot/Nodes/RobotNode.cpp +++ b/VirtualRobot/Nodes/RobotNode.cpp @@ -826,7 +826,6 @@ namespace VirtualRobot { VisualizationNodePtr visualizationNode1; - if (parRN && parRN->getVisualization()) { // add to parent node (pre joint trafo moves with parent!) @@ -837,7 +836,7 @@ namespace VirtualRobot if (visualizationNode1) { - parRN->getVisualization()->attachVisualization(attachName1, visualizationNode1); + //parRN->getVisualization()->attachVisualization(attachName1, visualizationNode1); } } else @@ -848,10 +847,29 @@ namespace VirtualRobot if (visualizationNode1) { - visualizationModel->attachVisualization(attachName1, visualizationNode1); + //visualizationModel->attachVisualization(attachName1, visualizationNode1); } } } + else if (Eigen::Vector3f parPos = parRN + ? parRN->getPositionInFrame(getRobot()->getRobotNode(this->getName())) + : Eigen::Vector3f::Zero() + ; parPos.norm() > 0.01) + { + // Some nodes (e.g. the Revolute and FourBar) offset their position by values that are not reflected in the local transformation. + // Check RobotNodeFourBar::updateTransformationMatrices and RobotNodeRevolute::updateTransformationMatrices. + // There the global pose is set to parent * local * tmp, where tmp is important but not part of + // This code catches these cases by checking the actual distance between the current node and its parent. + + VisualizationNodePtr visualizationNode1 = visualizationFactory->createLine(Eigen::Vector3f::Zero(), parPos); + + if (visualizationNode1) + { + visualizationModel->attachVisualization(attachName1, visualizationNode1); + } + + std::cout << "VERY IMPORTANT MARKER FROM " << getName() << std::endl; + } VisualizationNodePtr visualizationNode2 = visualizationFactory->createSphere(5.0f); diff --git a/VirtualRobot/SceneObject.cpp b/VirtualRobot/SceneObject.cpp index 969a50897..a4ba5970c 100644 --- a/VirtualRobot/SceneObject.cpp +++ b/VirtualRobot/SceneObject.cpp @@ -216,7 +216,6 @@ namespace VirtualRobot return true; } - VisualizationFactoryPtr visualizationFactory; if (visualizationType == "") -- GitLab