kdl_state_solver.cpp
Go to the documentation of this file.
1 
28 #include <console_bridge/console.h>
30 
31 #include <tesseract_common/utils.h>
37 
38 namespace tesseract_scene_graph
39 {
40 using Eigen::MatrixXd;
41 using Eigen::VectorXd;
42 
43 // This is compared directory to the OFKT state solver results so disable code coverage
44 
45 // LCOV_EXCL_START
46 StateSolver::UPtr KDLStateSolver::clone() const { return std::make_unique<KDLStateSolver>(*this); }
47 
49 {
50  if (scene_graph.isEmpty())
51  throw std::runtime_error("Cannot create a state solver form empty scene!");
52 
54  processKDLData(scene_graph);
55 }
56 
58  : data_(std::move(data))
59 {
60  processKDLData(scene_graph);
61 }
62 
63 KDLStateSolver::KDLStateSolver(const KDLStateSolver& other) { *this = other; }
65 {
67  data_ = other.data_;
69  joint_qnr_ = other.joint_qnr_;
71  limits_ = other.limits_;
72  jac_solver_ = std::make_unique<KDL::TreeJntToJacSolver>(data_.tree);
73  return *this;
74 }
75 
76 void KDLStateSolver::setState(const Eigen::Ref<const Eigen::VectorXd>& joint_values,
77  const tesseract_common::TransformMap& /*floating_joint_values*/)
78 {
79  assert(static_cast<Eigen::Index>(data_.active_joint_names.size()) == joint_values.size());
80  for (auto i = 0U; i < data_.active_joint_names.size(); ++i)
81  {
83  current_state_.joints[data_.active_joint_names[i]] = joint_values[i];
84  }
85 
86  calculateTransforms(current_state_, kdl_jnt_array_, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
87 }
88 
89 void KDLStateSolver::setState(const std::unordered_map<std::string, double>& joint_values,
90  const tesseract_common::TransformMap& /*floating_joint_values*/)
91 {
92  for (const auto& joint : joint_values)
93  {
94  if (setJointValuesHelper(kdl_jnt_array_, joint.first, joint.second))
95  current_state_.joints[joint.first] = joint.second;
96  }
97 
98  calculateTransforms(current_state_, kdl_jnt_array_, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
99 }
100 
101 void KDLStateSolver::setState(const std::vector<std::string>& joint_names,
102  const Eigen::Ref<const Eigen::VectorXd>& joint_values,
103  const tesseract_common::TransformMap& /*floating_joint_values*/)
104 {
105  assert(static_cast<Eigen::Index>(joint_names.size()) == joint_values.size());
106  for (auto i = 0U; i < joint_names.size(); ++i)
107  {
108  if (setJointValuesHelper(kdl_jnt_array_, joint_names[i], joint_values[i]))
109  current_state_.joints[joint_names[i]] = joint_values[i];
110  }
111 
112  calculateTransforms(current_state_, kdl_jnt_array_, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
113 }
114 
115 void KDLStateSolver::setState(const tesseract_common::TransformMap& /*floating_joint_values*/)
116 {
117  throw std::runtime_error("KDLStateSolver, not supported!");
118 }
119 
120 SceneState KDLStateSolver::getState(const Eigen::Ref<const Eigen::VectorXd>& joint_values,
121  const tesseract_common::TransformMap& /*floating_joint_values*/) const
122 {
123  assert(static_cast<Eigen::Index>(data_.active_joint_names.size()) == joint_values.size());
124  SceneState state{ current_state_ };
125  KDL::JntArray jnt_array = kdl_jnt_array_;
126 
127  for (auto i = 0U; i < data_.active_joint_names.size(); ++i)
128  {
129  if (setJointValuesHelper(jnt_array, data_.active_joint_names[i], joint_values[i]))
130  state.joints[data_.active_joint_names[i]] = joint_values[i];
131  }
132 
133  calculateTransforms(state, jnt_array, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
134 
135  return state;
136 }
137 
138 SceneState KDLStateSolver::getState(const std::unordered_map<std::string, double>& joint_values,
139  const tesseract_common::TransformMap& /*floating_joint_values*/) const
140 {
141  SceneState state{ current_state_ };
142  KDL::JntArray jnt_array = kdl_jnt_array_;
143 
144  for (const auto& joint : joint_values)
145  {
146  if (setJointValuesHelper(jnt_array, joint.first, joint.second))
147  state.joints[joint.first] = joint.second;
148  }
149 
150  // NOLINTNEXTLINE(clang-analyzer-core.UndefinedBinaryOperatorResult)
151  calculateTransforms(state, jnt_array, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
152 
153  return state;
154 }
155 
156 SceneState KDLStateSolver::getState(const std::vector<std::string>& joint_names,
157  const Eigen::Ref<const Eigen::VectorXd>& joint_values,
158  const tesseract_common::TransformMap& /*floating_joint_values*/) const
159 {
160  SceneState state{ current_state_ };
161  KDL::JntArray jnt_array = kdl_jnt_array_;
162 
163  for (auto i = 0U; i < joint_names.size(); ++i)
164  {
165  if (setJointValuesHelper(jnt_array, joint_names[i], joint_values[i]))
166  state.joints[joint_names[i]] = joint_values[i];
167  }
168 
169  Eigen::Isometry3d parent_frame{ Eigen::Isometry3d::Identity() };
170  calculateTransforms(state, jnt_array, data_.tree.getRootSegment(), parent_frame); // NOLINT
171 
172  return state;
173 }
174 
176 {
177  throw std::runtime_error("KDLStateSolver, not supported!");
178 }
179 
181 
183 {
185  return getState(data_.active_joint_names, rs); // NOLINT
186 }
187 
188 Eigen::MatrixXd KDLStateSolver::getJacobian(const Eigen::Ref<const Eigen::VectorXd>& joint_values,
189  const std::string& link_name,
190  const tesseract_common::TransformMap& /*floating_joint_values*/) const
191 {
192  assert(joint_values.size() == data_.tree.getNrOfJoints());
193  KDL::JntArray kdl_joint_vals = getKDLJntArray(data_.active_joint_names, joint_values);
194  KDL::Jacobian kdl_jacobian;
195  if (calcJacobianHelper(kdl_jacobian, kdl_joint_vals, link_name))
196  return convert(kdl_jacobian, joint_qnr_);
197 
198  throw std::runtime_error("KDLStateSolver: Failed to calculate jacobian.");
199 }
200 
201 Eigen::MatrixXd KDLStateSolver::getJacobian(const std::unordered_map<std::string, double>& joint_values,
202  const std::string& link_name,
203  const tesseract_common::TransformMap& /*floating_joint_values*/) const
204 {
205  KDL::JntArray kdl_joint_vals = getKDLJntArray(joint_values);
206  KDL::Jacobian kdl_jacobian;
207  if (calcJacobianHelper(kdl_jacobian, kdl_joint_vals, link_name))
208  return convert(kdl_jacobian, joint_qnr_);
209 
210  throw std::runtime_error("KDLStateSolver: Failed to calculate jacobian.");
211 }
212 
213 Eigen::MatrixXd KDLStateSolver::getJacobian(const std::vector<std::string>& joint_names,
214  const Eigen::Ref<const Eigen::VectorXd>& joint_values,
215  const std::string& link_name,
216  const tesseract_common::TransformMap& /*floating_joint_values*/) const
217 {
218  KDL::JntArray kdl_joint_vals = getKDLJntArray(joint_names, joint_values);
219  KDL::Jacobian kdl_jacobian;
220  if (calcJacobianHelper(kdl_jacobian, kdl_joint_vals, link_name))
221  return convert(kdl_jacobian, joint_qnr_);
222 
223  throw std::runtime_error("KDLStateSolver: Failed to calculate jacobian.");
224 }
225 
226 std::vector<std::string> KDLStateSolver::getJointNames() const { return data_.joint_names; }
227 
228 std::vector<std::string> KDLStateSolver::getFloatingJointNames() const { return data_.floating_joint_names; }
229 
230 std::vector<std::string> KDLStateSolver::getActiveJointNames() const { return data_.active_joint_names; }
231 
232 std::string KDLStateSolver::getBaseLinkName() const { return data_.base_link_name; }
233 
234 std::vector<std::string> KDLStateSolver::getLinkNames() const { return data_.link_names; }
235 
236 std::vector<std::string> KDLStateSolver::getActiveLinkNames() const { return data_.active_link_names; }
237 
238 std::vector<std::string> KDLStateSolver::getStaticLinkNames() const { return data_.static_link_names; }
239 
240 bool KDLStateSolver::isActiveLinkName(const std::string& link_name) const
241 {
242  return (std::find(data_.active_link_names.begin(), data_.active_link_names.end(), link_name) !=
243  data_.active_link_names.end());
244 }
245 
246 bool KDLStateSolver::hasLinkName(const std::string& link_name) const
247 {
248  return (std::find(data_.link_names.begin(), data_.link_names.end(), link_name) != data_.link_names.end());
249 }
250 
252 {
254  link_tfs.reserve(current_state_.link_transforms.size());
255  for (const auto& link_name : data_.link_names)
256  link_tfs.push_back(current_state_.link_transforms.at(link_name));
257 
258  return link_tfs;
259 }
260 
261 Eigen::Isometry3d KDLStateSolver::getLinkTransform(const std::string& link_name) const
262 {
263  return current_state_.link_transforms.at(link_name);
264 }
265 
266 Eigen::Isometry3d KDLStateSolver::getRelativeLinkTransform(const std::string& from_link_name,
267  const std::string& to_link_name) const
268 {
269  return current_state_.link_transforms.at(from_link_name).inverse() * current_state_.link_transforms.at(to_link_name);
270 }
271 
273 
275 {
278  kdl_jnt_array_.resize(data_.tree.getNrOfJoints());
279  limits_.joint_limits.resize(static_cast<long int>(data_.tree.getNrOfJoints()), 2);
280  limits_.velocity_limits.resize(static_cast<long int>(data_.tree.getNrOfJoints()), 2);
281  limits_.acceleration_limits.resize(static_cast<long int>(data_.tree.getNrOfJoints()), 2);
282  limits_.jerk_limits.resize(static_cast<long int>(data_.tree.getNrOfJoints()), 2);
283  joint_qnr_.resize(data_.tree.getNrOfJoints());
284  joint_to_qnr_.clear();
285  size_t j = 0;
286  for (const auto& seg : data_.tree.getSegments())
287  {
288  const KDL::Joint& jnt = seg.second.segment.getJoint();
289 
290  if (jnt.getType() == KDL::Joint::None)
291  continue;
292 
293  joint_to_qnr_.insert(std::make_pair(jnt.getName(), seg.second.q_nr));
294  kdl_jnt_array_(seg.second.q_nr) = 0.0;
295  current_state_.joints.insert(std::make_pair(jnt.getName(), 0.0));
296  data_.active_joint_names[j] = jnt.getName();
297  joint_qnr_[j] = static_cast<int>(seg.second.q_nr);
298 
299  // Store joint limits.
300  const auto& sj = scene_graph.getJoint(jnt.getName());
301  limits_.joint_limits(static_cast<long>(j), 0) = sj->limits->lower;
302  limits_.joint_limits(static_cast<long>(j), 1) = sj->limits->upper;
303  limits_.velocity_limits(static_cast<long>(j), 0) = -sj->limits->velocity;
304  limits_.velocity_limits(static_cast<long>(j), 1) = sj->limits->velocity;
305  limits_.acceleration_limits(static_cast<long>(j), 0) = -sj->limits->acceleration;
306  limits_.acceleration_limits(static_cast<long>(j), 1) = sj->limits->acceleration;
307  limits_.jerk_limits(static_cast<long>(j), 0) = -sj->limits->jerk;
308  limits_.jerk_limits(static_cast<long>(j), 1) = sj->limits->jerk;
309 
310  j++;
311  }
312 
313  jac_solver_ = std::make_unique<KDL::TreeJntToJacSolver>(data_.tree);
314 
315  calculateTransforms(current_state_, kdl_jnt_array_, data_.tree.getRootSegment(), Eigen::Isometry3d::Identity());
316  return true;
317 }
318 
320  const std::string& joint_name,
321  const double& joint_value) const
322 {
323  auto qnr = joint_to_qnr_.find(joint_name);
324  if (qnr != joint_to_qnr_.end())
325  {
326  q(qnr->second) = joint_value;
327  return true;
328  }
329 
330  CONSOLE_BRIDGE_logError("Tried to set joint name %s which does not exist!", joint_name.c_str());
331  return false;
332 }
333 
335  const KDL::JntArray& q_in,
336  const KDL::SegmentMap::const_iterator& it,
337  const Eigen::Isometry3d& parent_frame) const
338 {
339  if (it != data_.tree.getSegments().end())
340  {
341  const KDL::TreeElementType& current_element = it->second;
342  KDL::Frame current_frame;
343  if (q_in.data.size() > 0)
344  current_frame = GetTreeElementSegment(current_element).pose(q_in(GetTreeElementQNr(current_element)));
345  else
346  current_frame = GetTreeElementSegment(current_element).pose(0);
347 
348  Eigen::Isometry3d local_frame = convert(current_frame);
349  Eigen::Isometry3d global_frame{ parent_frame * local_frame };
350  state.link_transforms[current_element.segment.getName()] = global_frame;
351  if (current_element.segment.getName() != data_.tree.getRootSegment()->first)
352  state.joint_transforms[current_element.segment.getJoint().getName()] = global_frame;
353 
354  for (const auto& child : current_element.children)
355  {
356  calculateTransformsHelper(state, q_in, child, global_frame); // NOLINT
357  }
358  }
359 }
360 
362  const KDL::JntArray& q_in,
363  const KDL::SegmentMap::const_iterator& it,
364  const Eigen::Isometry3d& parent_frame) const
365 {
366  std::lock_guard<std::mutex> guard(mutex_);
367  calculateTransformsHelper(state, q_in, it, parent_frame); // NOLINT
368 }
369 
370 bool KDLStateSolver::calcJacobianHelper(KDL::Jacobian& jacobian,
371  const KDL::JntArray& kdl_joints,
372  const std::string& link_name) const
373 {
374  jacobian.resize(static_cast<unsigned>(kdl_joints.data.size()));
375  if (jac_solver_->JntToJac(kdl_joints, jacobian, link_name) < 0)
376  {
377  CONSOLE_BRIDGE_logError("Failed to calculate jacobian");
378  return false;
379  }
380 
381  return true;
382 }
383 
384 KDL::JntArray KDLStateSolver::getKDLJntArray(const std::vector<std::string>& joint_names,
385  const Eigen::Ref<const Eigen::VectorXd>& joint_values) const
386 {
387  assert(data_.active_joint_names.size() == static_cast<unsigned>(joint_values.size()));
388 
389  KDL::JntArray kdl_joints(kdl_jnt_array_);
390  for (unsigned i = 0; i < joint_names.size(); ++i)
391  kdl_joints.data(joint_to_qnr_.at(joint_names[i])) = joint_values[i];
392 
393  return kdl_joints;
394 }
395 
396 KDL::JntArray KDLStateSolver::getKDLJntArray(const std::unordered_map<std::string, double>& joint_values) const
397 {
398  assert(data_.active_joint_names.size() == static_cast<unsigned>(joint_values.size()));
399 
400  KDL::JntArray kdl_joints(kdl_jnt_array_);
401  for (const auto& joint : joint_values)
402  kdl_joints.data(joint_to_qnr_.at(joint.first)) = joint.second;
403 
404  return kdl_joints;
405 }
406 // LCOV_EXCL_STOP
407 } // namespace tesseract_scene_graph
tesseract_common::VectorIsometry3d
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
tesseract_scene_graph::KDLStateSolver::getState
SceneState getState() const override final
Get the current state of the scene.
Definition: kdl_state_solver.cpp:180
tesseract_scene_graph::KDLStateSolver::calculateTransforms
void calculateTransforms(SceneState &state, const KDL::JntArray &q_in, const KDL::SegmentMap::const_iterator &it, const Eigen::Isometry3d &parent_frame) const
Definition: kdl_state_solver.cpp:361
graph.h
tesseract_scene_graph::SceneState::floating_joints
tesseract_common::TransformMap floating_joints
tesseract_scene_graph::KDLStateSolver::getLinkTransforms
tesseract_common::VectorIsometry3d getLinkTransforms() const override final
Get all of the links transforms.
Definition: kdl_state_solver.cpp:251
tesseract_scene_graph::KDLStateSolver::getLimits
tesseract_common::KinematicLimits getLimits() const override final
Getter for kinematic limits.
Definition: kdl_state_solver.cpp:272
tesseract_common::generateRandomNumber
Eigen::VectorXd generateRandomNumber(const Eigen::Ref< const Eigen::MatrixX2d > &limits)
tesseract_scene_graph::KDLStateSolver::mutex_
std::mutex mutex_
KDL is not thread safe due to mutable variables in Joint Class.
Definition: kdl_state_solver.h:131
tesseract_scene_graph::KDLStateSolver::setJointValuesHelper
bool setJointValuesHelper(KDL::JntArray &q, const std::string &joint_name, const double &joint_value) const
Definition: kdl_state_solver.cpp:319
tesseract_scene_graph::KDLStateSolver::getJacobian
Eigen::MatrixXd getJacobian(const Eigen::Ref< const Eigen::VectorXd > &joint_values, const std::string &link_name, const tesseract_common::TransformMap &floating_joint_values={}) const override final
Get the jacobian of the solver given the joint values.
Definition: kdl_state_solver.cpp:188
tesseract_scene_graph::KDLStateSolver::isActiveLinkName
bool isActiveLinkName(const std::string &link_name) const override final
Check if link is an active link.
Definition: kdl_state_solver.cpp:240
tesseract_scene_graph::KDLStateSolver::joint_qnr_
std::vector< int > joint_qnr_
Definition: kdl_state_solver.h:128
tesseract_scene_graph::KDLTreeData::active_joint_names
std::vector< std::string > active_joint_names
tesseract_scene_graph::KDLTreeData::static_link_names
std::vector< std::string > static_link_names
utils.h
tesseract_scene_graph::KDLStateSolver::hasLinkName
bool hasLinkName(const std::string &link_name) const override final
Check if link name exists.
Definition: kdl_state_solver.cpp:246
tesseract_scene_graph::KDLStateSolver::calculateTransformsHelper
void calculateTransformsHelper(SceneState &state, const KDL::JntArray &q_in, const KDL::SegmentMap::const_iterator &it, const Eigen::Isometry3d &parent_frame) const
Definition: kdl_state_solver.cpp:334
tesseract_common::KinematicLimits
tesseract_scene_graph::KDLStateSolver::getActiveLinkNames
std::vector< std::string > getActiveLinkNames() const override final
Get the vector of active link names.
Definition: kdl_state_solver.cpp:236
tesseract_common::TransformMap
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
tesseract_scene_graph::KDLStateSolver::getLinkTransform
Eigen::Isometry3d getLinkTransform(const std::string &link_name) const override final
Get the transform corresponding to the link.
Definition: kdl_state_solver.cpp:261
joint.h
tesseract_scene_graph::convert
KDL::Frame convert(const Eigen::Isometry3d &transform)
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_scene_graph::SceneGraph
tesseract_common::KinematicLimits::jerk_limits
Eigen::MatrixX2d jerk_limits
tesseract_scene_graph::KDLStateSolver::data_
KDLTreeData data_
Definition: kdl_state_solver.h:125
tesseract_scene_graph::KDLTreeData::link_names
std::vector< std::string > link_names
tesseract_scene_graph::parseSceneGraph
KDLTreeData parseSceneGraph(const SceneGraph &scene_graph)
tesseract_scene_graph::SceneState
tesseract_scene_graph::KDLStateSolver::current_state_
SceneState current_state_
Definition: kdl_state_solver.h:124
tesseract_scene_graph::KDLStateSolver::joint_to_qnr_
std::unordered_map< std::string, unsigned int > joint_to_qnr_
Definition: kdl_state_solver.h:127
kdl_parser.h
tesseract_scene_graph::KDLStateSolver::limits_
tesseract_common::KinematicLimits limits_
Definition: kdl_state_solver.h:130
tesseract_scene_graph::KDLTreeData::base_link_name
std::string base_link_name
tesseract_scene_graph::KDLStateSolver::getJointNames
std::vector< std::string > getJointNames() const override final
Get the vector of joint names.
Definition: kdl_state_solver.cpp:226
tesseract_scene_graph::KDLStateSolver::getBaseLinkName
std::string getBaseLinkName() const override final
Get the base link name.
Definition: kdl_state_solver.cpp:232
tesseract_scene_graph::KDLStateSolver
Definition: kdl_state_solver.h:44
tesseract_scene_graph::SceneState::joints
std::unordered_map< std::string, double > joints
tesseract_scene_graph::KDLStateSolver::getRandomState
SceneState getRandomState() const override final
Get the random state of the environment.
Definition: kdl_state_solver.cpp:182
tesseract_scene_graph::KDLTreeData::active_link_names
std::vector< std::string > active_link_names
tesseract_scene_graph::KDLStateSolver::getRelativeLinkTransform
Eigen::Isometry3d getRelativeLinkTransform(const std::string &from_link_name, const std::string &to_link_name) const override final
Get transform between two links using the current state.
Definition: kdl_state_solver.cpp:266
tesseract_scene_graph::KDLStateSolver::operator=
KDLStateSolver & operator=(const KDLStateSolver &other)
Definition: kdl_state_solver.cpp:64
tesseract_scene_graph::KDLTreeData::floating_joint_names
std::vector< std::string > floating_joint_names
tesseract_scene_graph::KDLStateSolver::KDLStateSolver
KDLStateSolver(const tesseract_scene_graph::SceneGraph &scene_graph)
Definition: kdl_state_solver.cpp:48
tesseract_scene_graph::KDLStateSolver::getFloatingJointNames
std::vector< std::string > getFloatingJointNames() const override final
Get the vector of floating joint names.
Definition: kdl_state_solver.cpp:228
tesseract_scene_graph::KDLTreeData
tesseract_scene_graph::StateSolver::UPtr
std::unique_ptr< StateSolver > UPtr
Definition: state_solver.h:50
tesseract_scene_graph::KDLTreeData::joint_names
std::vector< std::string > joint_names
tesseract_scene_graph::SceneState::joint_transforms
tesseract_common::TransformMap joint_transforms
tesseract_scene_graph::SceneGraph::isEmpty
bool isEmpty() const
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_scene_graph::KDLStateSolver::setState
void setState(const Eigen::Ref< const Eigen::VectorXd > &joint_values, const tesseract_common::TransformMap &floating_joint_values={}) override final
Set the current state of the solver.
Definition: kdl_state_solver.cpp:76
tesseract_scene_graph::SceneGraph::getJoint
std::shared_ptr< const Joint > getJoint(const std::string &name) const
tesseract_scene_graph::KDLTreeData::floating_joint_values
tesseract_common::TransformMap floating_joint_values
tesseract_common::KinematicLimits::acceleration_limits
Eigen::MatrixX2d acceleration_limits
tesseract_common::KinematicLimits::velocity_limits
Eigen::MatrixX2d velocity_limits
tesseract_scene_graph::KDLStateSolver::kdl_jnt_array_
KDL::JntArray kdl_jnt_array_
Definition: kdl_state_solver.h:129
tesseract_scene_graph::KDLStateSolver::clone
StateSolver::UPtr clone() const override
This should clone the object so it may be used in a multi threaded application where each thread woul...
Definition: kdl_state_solver.cpp:46
tesseract_scene_graph::KDLStateSolver::getActiveJointNames
std::vector< std::string > getActiveJointNames() const override final
Get the vector of joint names which align with the limits.
Definition: kdl_state_solver.cpp:230
tesseract_scene_graph::KDLStateSolver::calcJacobianHelper
bool calcJacobianHelper(KDL::Jacobian &jacobian, const KDL::JntArray &kdl_joints, const std::string &link_name) const
Definition: kdl_state_solver.cpp:370
tesseract_scene_graph::KDLStateSolver::getKDLJntArray
KDL::JntArray getKDLJntArray(const std::vector< std::string > &joint_names, const Eigen::Ref< const Eigen::VectorXd > &joint_values) const
Get an updated kdl joint array.
Definition: kdl_state_solver.cpp:384
tesseract_scene_graph::SceneState::link_transforms
tesseract_common::TransformMap link_transforms
macros.h
tesseract_scene_graph::KDLStateSolver::jac_solver_
std::unique_ptr< KDL::TreeJntToJacSolver > jac_solver_
Definition: kdl_state_solver.h:126
tesseract_scene_graph
tesseract_common::KinematicLimits::joint_limits
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::MatrixX2d joint_limits
tesseract_scene_graph::KDLStateSolver::getLinkNames
std::vector< std::string > getLinkNames() const override final
Get the vector of link names.
Definition: kdl_state_solver.cpp:234
tesseract_scene_graph::KDLTreeData::tree
EIGEN_MAKE_ALIGNED_OPERATOR_NEW KDL::Tree tree
tesseract_scene_graph::KDLStateSolver::getStaticLinkNames
std::vector< std::string > getStaticLinkNames() const override final
Get a vector of static link names in the environment.
Definition: kdl_state_solver.cpp:238
kdl_state_solver.h
Tesseract Scene Graph State Solver KDL Implementation.
tesseract_scene_graph::KDLStateSolver::processKDLData
bool processKDLData(const tesseract_scene_graph::SceneGraph &scene_graph)
Definition: kdl_state_solver.cpp:274


tesseract_state_solver
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:10