From 976f3a5b6c97c7da4791f699e4e39baf480fe286 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Mon, 20 Mar 2023 08:58:42 +0100
Subject: [PATCH] bugfix: using "info (returned value)" inside lambda. Didn't
 know that this was even possible

---
 .../Component.cpp                             | 62 +++++++++++--------
 .../armarx/manipulation/skills/ReachGrasp.h   |  2 +-
 2 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/source/armarx/manipulation/components/articulated_object_augmented_visualization/Component.cpp b/source/armarx/manipulation/components/articulated_object_augmented_visualization/Component.cpp
index fc8fe6c3..dc1d5800 100644
--- a/source/armarx/manipulation/components/articulated_object_augmented_visualization/Component.cpp
+++ b/source/armarx/manipulation/components/articulated_object_augmented_visualization/Component.cpp
@@ -56,7 +56,6 @@
 #include "armarx/manipulation/core/types.h"
 #include "armarx/manipulation/geometric_planning/ArVizDrawer.h"
 
-
 namespace armarx::manipulation::components::articulated_object_augmented_visualization
 {
     Component::Component()
@@ -65,10 +64,8 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
         addPlugin(virtualRobotReaderPlugin);
     }
 
-
     const std::string Component::defaultName = "articulated_object_augmented_visualization";
 
-
     armarx::PropertyDefinitionsPtr
     Component::createPropertyDefinitions()
     {
@@ -81,13 +78,11 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
         return def;
     }
 
-
     void
     Component::onInitComponent()
     {
     }
 
-
     void
     Component::onConnectComponent()
     {
@@ -100,7 +95,7 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
             for (const auto& description : descriptions)
             {
                 ARMARX_IMPORTANT << "Loading robot `" << description.name << "` from "
-                               << description.xml;
+                                 << description.xml;
                 const auto robot = VirtualRobot::RobotIO::loadRobot(
                     description.xml.toSystemPath(),
                     VirtualRobot::RobotIO::RobotDescription::eStructure);
@@ -129,13 +124,11 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
         }
     }
 
-
     void
     Component::onDisconnectComponent()
     {
     }
 
-
     void
     Component::onExitComponent()
     {
@@ -208,7 +201,7 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
 
 
         ARMARX_VERBOSE << "Found " << articulatedObjectPoses.size()
-                    << " articulated objects in the scene";
+                       << " articulated objects in the scene";
 
         for (const auto& objectPose : articulatedObjectPoses)
         {
@@ -238,21 +231,18 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
         return articulatedObjects;
     }
 
-
     std::string
     Component::getDefaultName() const
     {
         return Component::defaultName;
     }
 
-
     std::string
     Component::GetDefaultName()
     {
         return Component::defaultName;
     }
 
-
     void
     Component::visualizeAllParametricPathsForNodes(const std::string& identifier)
     {
@@ -298,24 +288,37 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
 
             if (properties.drawGrasps)
             {
+                ARMARX_INFO << "Visualizing grasp for object "
+                            << articulatedObject->getType() + "/" + articulatedObject->getName();
+
                 auto layer = arviz.layer("grasps " + articulatedObject->getType() + "/" +
                                          articulatedObject->getName());
 
-                for (const auto& [node, graspSets] : simox::geometric_planning::allGraspSets(*articulatedObject))
+                for (const auto& [node, graspSets] :
+                     simox::geometric_planning::allGraspSets(*articulatedObject))
                 {
+                    ARMARX_CHECK_NOT_NULL(node);
+
                     if (not graspSets.empty())
                     {
                         ARMARX_VERBOSE << "Found grasp sets attached to node " << node->getName();
                         for (const auto& graspSet : graspSets)
                         {
+                            ARMARX_CHECK_NOT_NULL(graspSet);
+
                             for (const auto& grasp : graspSet->getGrasps())
                             {
                                 const std::string side = graspSet->getName();
 
                                 ARMARX_TRACE;
-                                ARMARX_VERBOSE << node->getName() << " " << graspSet->getName() <<  "- " << grasp->getName();
+                                ARMARX_CHECK_NOT_NULL(grasp);
+
+                                ARMARX_VERBOSE << node->getName() << " " << graspSet->getName()
+                                               << "- " << grasp->getName();
+
 
-                                const auto global_T_tcp = grasp->getTcpPoseGlobal(node->getGlobalPose());
+                                const auto global_T_tcp =
+                                    grasp->getTcpPoseGlobal(node->getGlobalPose());
 
                                 ARMARX_VERBOSE << "Grasp pose: " << global_T_tcp;
                                 drawGrasp(side, grasp, core::Pose(node->getGlobalPose()), layer);
@@ -374,6 +377,7 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
 
             const auto eefName = arm.getEndEffector();
             const auto eef = robot->getEndEffector(eefName);
+            ARMARX_CHECK_NOT_NULL(eef);
 
             ARMARX_VERBOSE << "preshape: " << grasp->getPreshapeName();
 
@@ -383,29 +387,34 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
             if (preshape != nullptr)
             {
                 jointValues = preshape->getRobotNodeJointValueMap();
-                ARMARX_VERBOSE << "preshape with joint values " << info.jointValues;
+                ARMARX_VERBOSE << "preshape with joint values " << jointValues;
             }
 
+            const auto tcpNode = robotArm.getTCP();
+            ARMARX_CHECK_NOT_NULL(tcpNode);
+            
+            const auto handRootNode = robot->getRobotNode(handRootNodeName);
+            ARMARX_CHECK_NOT_NULL(handRootNode);
+
             ARMARX_TRACE;
             const Eigen::Isometry3f tcp_T_hand_root(
-                robotArm.getTCP()->getPoseInRootFrame().inverse() *
-                robot->getRobotNode(handRootNodeName)->getPoseInRootFrame());
+                tcpNode->getPoseInRootFrame().inverse() *
+                handRootNode->getPoseInRootFrame());
 
-            return Info
-            {
-                .tcp_T_hand_root = tcp_T_hand_root,
-                .jointValues = jointValues,
-                .modelPackagePath = PackagePath(arm.getHandModelPackage(), arm.getHandModelPath())
-            };
+            return Info{.tcp_T_hand_root = tcp_T_hand_root,
+                        .jointValues = jointValues,
+                        .modelPackagePath =
+                            PackagePath(arm.getHandModelPackage(), arm.getHandModelPath())};
         }();
 
         ARMARX_TRACE;
 
-
+        ARMARX_VERBOSE << "Visualizing " << side + "/" + grasp->getName();
         ARMARX_TRACE;
         const auto vizElement =
             viz::Robot(side + "/" + grasp->getName())
-                .file(info.modelPackagePath.serialize().package, info.modelPackagePath.serialize().path)
+                .file(info.modelPackagePath.serialize().package,
+                      info.modelPackagePath.serialize().path)
                 .pose(Eigen::Matrix4f{(global_T_tcp * info.tcp_T_hand_root).matrix()})
                 .joints(info.jointValues)
                 .overrideColor(simox::Color::azure());
@@ -420,7 +429,6 @@ namespace armarx::manipulation::components::articulated_object_augmented_visuali
         // }
     }
 
-
     ARMARX_REGISTER_COMPONENT_EXECUTABLE(Component, Component::GetDefaultName());
 
 } // namespace armarx::manipulation::components::articulated_object_augmented_visualization
diff --git a/source/armarx/manipulation/skills/ReachGrasp.h b/source/armarx/manipulation/skills/ReachGrasp.h
index ebc12308..9d105501 100644
--- a/source/armarx/manipulation/skills/ReachGrasp.h
+++ b/source/armarx/manipulation/skills/ReachGrasp.h
@@ -122,7 +122,7 @@ namespace armarx::manipulation::skills
         std::map<std::string, armarx::armem::articulated_object::ArticulatedObject> environment;
 
 
-    private:
+    protected:
         VirtualRobot::RobotPtr object;
 
         VirtualRobot::GraspPtr grasp;
-- 
GitLab