Tesseract 0.28.4
Loading...
Searching...
No Matches
factory_utils_unit.cpp File Reference

Unit tests for the shared kinematics plugin-factory YAML helpers. More...

#include <tesseract/common/macros.h>
#include <gtest/gtest.h>
#include <cmath>
#include <memory>
#include <yaml-cpp/yaml.h>
#include <tesseract/kinematics/factory_utils.h>
#include <tesseract/scene_graph/graph.h>
#include <tesseract/scene_graph/joint.h>
#include <tesseract/scene_graph/link.h>

Functions

void TESSERACT_COMMON_IGNORE_WARNINGS_POP::addJoint (tesseract::scene_graph::SceneGraph &sg, const std::string &name, const std::string &parent, const std::string &child, double lower, double upper)
 Append a revolute joint name limited to [lower, upper], linking two new links.
 
std::unique_ptr< tesseract::scene_graph::SceneGraph > TESSERACT_COMMON_IGNORE_WARNINGS_POP::buildSceneGraph ()
 Minimal scene graph: base -> j1 -> l1, with j1 limited to [-1, 1].
 
void TESSERACT_COMMON_IGNORE_WARNINGS_POP::addSecondJoint (tesseract::scene_graph::SceneGraph &sg)
 Extends buildSceneGraph() with l1 -> j2 -> l2, where j2 is limited to [-2, 2].
 
tesseract::kinematics::SampleGridConfig TESSERACT_COMMON_IGNORE_WARNINGS_POP::parse (const tesseract::scene_graph::SceneGraph &sg, const std::string &yaml, const std::vector< tesseract::common::JointId > &joint_ids={ "j1" })
 Parse yaml against the fixture graph and reorder it onto joint_ids.
 
 ASSERT_EQ (grid.resolution.size(), 1)
 
 ASSERT_EQ (grid.range.rows(), 1)
 
 EXPECT_DOUBLE_EQ (grid.resolution(0), 0.1)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 0), -1.0)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 1), 1.0)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 0), -0.5)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 1), 0.5)
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1, min: -2.0 }"), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1, max: 2.0 }"), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1, min: 0.5, max: -0.5 }"), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { value: 0.1 }"), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { name: j1 }"), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { name: no_such_joint, value: 0.1 }"), std::runtime_error)
 
 std::const_pointer_cast< tesseract::scene_graph::Joint > (sg->getJoint("j1")) -> limits=nullptr
 
 EXPECT_DOUBLE_EQ (grid.range(0, 0), -M_PI)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 1), M_PI)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 0), -5.0)
 
 EXPECT_DOUBLE_EQ (grid.range(0, 1), 5.0)
 
 EXPECT_NO_THROW (parse(*sg, "- { name: j1, value: 0.1 }"))
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1, min: 1.0, max: -1.0 }"), std::runtime_error)
 
 EXPECT_EQ (grid.resolution.size(), 0)
 
 EXPECT_EQ (grid.range.rows(), 0)
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1 }", { "j1", "j2" }), std::runtime_error)
 
 EXPECT_THROW (parse(*sg, "- { name: j1, value: 0.1 }", { "other" }), std::runtime_error)
 
 ASSERT_EQ (grid.resolution.size(), 2)
 
 EXPECT_DOUBLE_EQ (grid.resolution(1), 0.2)
 
 EXPECT_DOUBLE_EQ (grid.range(1, 0), -2.0)
 
int main (int argc, char **argv)
 

Variables

const auto grid = parse(*sg, "- { name: j1, value: 0.1 }")
 
auto j1 = std::const_pointer_cast<tesseract::scene_graph::Joint>(sg->getJoint("j1"))
 
j1 type = tesseract::scene_graph::JointType::CONTINUOUS
 
j1 limits lower = 0.0
 
j1 limits upper = 0.0
 
j1 limits = nullptr
 
addSecondJoint * sg
 

Detailed Description

Unit tests for the shared kinematics plugin-factory YAML helpers.

These helpers are exercised indirectly by the RTP factory tests, but those route through a full plugin load (URDF fixture, YAML schema, inner solver plugins), so a failure there does not localise to the parsing logic. These tests call the helpers directly against a two-link scene graph.

Variable Documentation

◆ sg

tesseract::scene_graph::SceneGraph::Ptr sg
Initial value:
{
auto sg = buildSceneGraph()