43 #include <sensor_msgs/msg/joint_state.hpp>
44 #include <visualization_msgs/msg/marker_array.hpp>
45 #include <std_msgs/msg/color_rgba.hpp>
46 #include <geometry_msgs/msg/twist.hpp>
49 #include <rclcpp/duration.hpp>
68 typedef std::function<bool(RobotState* robot_state,
const JointModelGroup* joint_group,
69 const double* joint_group_variable_values)>
94 RobotState(
const RobotModelConstPtr& robot_model);
112 return robot_model_->getVariableCount();
118 return robot_model_->getVariableNames();
124 return robot_model_->getLinkModel(link);
130 return robot_model_->getJointModel(joint);
136 return robot_model_->getJointModelGroup(group);
149 return position_.data();
156 return position_.data();
169 assert(robot_model_->getVariableCount() <= position.size());
180 std::vector<std::string>& missing_variables);
185 const std::vector<double>& variable_position);
197 position_[index] = value;
198 const JointModel* jm = robot_model_->getJointOfVariable(index);
201 markDirtyJointTransforms(jm);
202 updateMimicJoint(jm);
209 return position_[robot_model_->getVariableIndex(variable)];
217 return position_[index];
231 return has_velocity_;
239 return velocity_.data();
246 return velocity_.data();
255 has_velocity_ =
true;
257 memcpy(velocity_.data(), velocity, robot_model_->getVariableCount() *
sizeof(
double));
263 assert(robot_model_->getVariableCount() <= velocity.size());
274 std::vector<std::string>& missing_variables);
279 const std::vector<double>& variable_velocity);
292 velocity_[index] = value;
298 return velocity_[robot_model_->getVariableIndex(variable)];
306 return velocity_[index];
324 return has_acceleration_;
333 return effort_or_acceleration_.data();
340 return effort_or_acceleration_.data();
350 has_acceleration_ =
true;
354 memcpy(effort_or_acceleration_.data(), acceleration, robot_model_->getVariableCount() *
sizeof(
double));
361 assert(robot_model_->getVariableCount() <= acceleration.size());
373 std::vector<std::string>& missing_variables);
378 const std::vector<double>& variable_acceleration);
391 effort_or_acceleration_[index] = value;
397 return effort_or_acceleration_[robot_model_->getVariableIndex(variable)];
405 return effort_or_acceleration_[index];
431 return effort_or_acceleration_.data();
438 return effort_or_acceleration_.data();
448 has_acceleration_ =
false;
450 memcpy(effort_or_acceleration_.data(), effort, robot_model_->getVariableCount() *
sizeof(
double));
456 assert(robot_model_->getVariableCount() <= effort.size());
465 void setVariableEffort(
const std::map<std::string, double>& variable_map, std::vector<std::string>& missing_variables);
469 const std::vector<double>& variable_acceleration);
482 effort_or_acceleration_[index] = value;
488 return effort_or_acceleration_[robot_model_->getVariableIndex(variable)];
496 return effort_or_acceleration_[index];
585 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
594 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
618 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
640 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
658 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
671 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
684 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
708 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
728 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
737 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
757 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
771 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
784 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
808 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
828 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
837 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
857 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
871 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
884 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
908 const JointModelGroup* jmg = robot_model_->getJointModelGroup(joint_group_name);
978 const std::vector<double>& consistency_limits,
double timeout = 0.0,
993 const std::vector<std::string>& tips,
double timeout = 0.0,
1009 const std::vector<std::string>& tips,
const std::vector<std::vector<double>>& consistency_limits,
1023 const std::vector<std::string>& tips,
1024 const std::vector<std::vector<double>>& consistency_limits,
double timeout = 0.0,
1058 Eigen::MatrixXd& jacobian,
bool use_quaternion_representation =
false)
const;
1070 Eigen::MatrixXd& jacobian,
bool use_quaternion_representation =
false)
1073 return static_cast<const RobotState*
>(
this)->
getJacobian(group, link, reference_point_position, jacobian,
1074 use_quaternion_representation);
1127 if (!msg.position.empty())
1129 if (!msg.velocity.empty())
1176 random_numbers::RandomNumberGenerator& rng);
1186 const std::vector<double>& distances);
1194 const std::vector<double>& distances, random_numbers::RandomNumberGenerator& rng);
1211 void update(
bool force =
false);
1272 assert(checkLinkTransforms());
1304 assert(checkCollisionTransforms());
1322 assert(checkJointTransforms(joint));
1333 return dirty_link_transforms_;
1338 return dirty_link_transforms_ || dirty_collision_body_transforms_;
1439 std::pair<double, const JointModel*>
1466 void attachBody(std::unique_ptr<AttachedBody> attached_body);
1485 void attachBody(
const std::string&
id,
const Eigen::Isometry3d& pose,
1486 const std::vector<shapes::ShapeConstPtr>&
shapes,
const EigenSTL::vector_Isometry3d& shape_poses,
1487 const std::set<std::string>& touch_links,
const std::string& link_name,
1488 const trajectory_msgs::msg::JointTrajectory& detach_posture = trajectory_msgs::msg::JointTrajectory(),
1508 void attachBody(
const std::string&
id,
const Eigen::Isometry3d& pose,
1509 const std::vector<shapes::ShapeConstPtr>&
shapes,
const EigenSTL::vector_Isometry3d& shape_poses,
1510 const std::vector<std::string>& touch_links,
const std::string& link_name,
1511 const trajectory_msgs::msg::JointTrajectory& detach_posture = trajectory_msgs::msg::JointTrajectory(),
1514 std::set<std::string> touch_links_set(touch_links.begin(), touch_links.end());
1515 attachBody(
id, pose,
shapes, shape_poses, touch_links_set, link_name, detach_posture, subframe_poses);
1519 void getAttachedBodies(std::vector<const AttachedBody*>& attached_bodies)
const;
1551 void computeAABB(std::vector<double>& aabb)
const;
1565 rng_ = std::make_unique<random_numbers::RandomNumberGenerator>();
1574 const Eigen::Isometry3d&
getFrameTransform(
const std::string& frame_id,
bool* frame_found =
nullptr);
1581 const Eigen::Isometry3d&
getFrameTransform(
const std::string& frame_id,
bool* frame_found =
nullptr)
const;
1590 bool& frame_found)
const;
1602 void getRobotMarkers(visualization_msgs::msg::MarkerArray& arr,
const std::vector<std::string>& link_names,
1603 const std_msgs::msg::ColorRGBA& color,
const std::string& ns,
const rclcpp::Duration& dur,
1604 bool include_attached =
false)
const;
1613 void getRobotMarkers(visualization_msgs::msg::MarkerArray& arr,
const std::vector<std::string>& link_names,
1614 const std_msgs::msg::ColorRGBA& color,
const std::string& ns,
const rclcpp::Duration& dur,
1615 bool include_attached =
false)
1625 void getRobotMarkers(visualization_msgs::msg::MarkerArray& arr,
const std::vector<std::string>& link_names,
1626 bool include_attached =
false)
const;
1632 void getRobotMarkers(visualization_msgs::msg::MarkerArray& arr,
const std::vector<std::string>& link_names,
1633 bool include_attached =
false)
1648 void printTransform(
const Eigen::Isometry3d& transform, std::ostream& out = std::cout)
const;
1660 bool setToIKSolverFrame(Eigen::Isometry3d& pose,
const kinematics::KinematicsBaseConstPtr& solver);
1675 void markDirtyJointTransforms(
const JointModel* joint)
1678 dirty_link_transforms_ =
1679 dirty_link_transforms_ ==
nullptr ? joint : robot_model_->getCommonRoot(dirty_link_transforms_, joint);
1685 dirty_joint_transforms_[jm->getJointIndex()] = 1;
1686 dirty_link_transforms_ = dirty_link_transforms_ ==
nullptr ?
1688 robot_model_->getCommonRoot(dirty_link_transforms_, group->
getCommonRoot());
1691 void markVelocity();
1692 void markAcceleration();
1695 void updateMimicJoint(
const JointModel* joint);
1698 void updateMimicJoints(
const JointModelGroup* group);
1700 void updateLinkTransformsInternal(
const JointModel* start);
1702 void getMissingKeys(
const std::map<std::string, double>& variable_map,
1703 std::vector<std::string>& missing_variables)
const;
1704 void getStateTreeJointString(std::ostream& ss,
const JointModel* jm,
const std::string& pfx0,
bool last)
const;
1707 bool checkJointTransforms(
const JointModel* joint)
const;
1710 bool checkLinkTransforms()
const;
1713 bool checkCollisionTransforms()
const;
1715 RobotModelConstPtr robot_model_;
1717 std::vector<double> position_;
1718 std::vector<double> velocity_;
1719 std::vector<double> effort_or_acceleration_;
1720 bool has_velocity_ =
false;
1721 bool has_acceleration_ =
false;
1722 bool has_effort_ =
false;
1724 const JointModel* dirty_link_transforms_ =
nullptr;
1725 const JointModel* dirty_collision_body_transforms_ =
nullptr;
1730 std::vector<Eigen::Isometry3d> variable_joint_transforms_;
1731 std::vector<Eigen::Isometry3d> global_link_transforms_;
1732 std::vector<Eigen::Isometry3d> global_collision_body_transforms_;
1734 std::vector<unsigned char> dirty_joint_transforms_;
1737 std::map<std::string, std::unique_ptr<AttachedBody>> attached_body_map_;
1747 std::unique_ptr<random_numbers::RandomNumberGenerator> rng_;
1751 std::ostream&
operator<<(std::ostream& out,
const RobotState& s);
std::function< double(const geometry_msgs::msg::Pose &, const moveit::core::RobotState &, const moveit::core::JointModelGroup *, const std::vector< double > &)> IKCostFn
Signature for a cost function used to evaluate IK solutions.
This may be thrown if unrecoverable errors occur.
Object defining bodies that can be attached to robot links.
const std::vector< const JointModel * > & getActiveJointModels() const
Get the active joints in this group (that have controllable DOF). This does not include mimic joints.
const JointModel * getCommonRoot() const
Get the common root of all joint roots; not necessarily part of this group.
unsigned int getVariableCount() const
Get the number of variables that describe this joint group. This includes variables necessary for mim...
unsigned int getActiveVariableCount() const
Get the number of variables that describe the active joints in this joint group. This excludes variab...
A joint from the robot. Models the transform that this joint applies in the kinematic chain....
bool satisfiesVelocityBounds(const double *values, double margin=0.0) const
Check if the set of velocities for the variables of this joint are within bounds.
size_t getJointIndex() const
Get the index of this joint within the robot model.
bool satisfiesPositionBounds(const double *values, double margin=0.0) const
Check if the set of values for the variables of this joint are within bounds.
A link from the robot. Contains the constant transform applied to the link and its geometry.
int getFirstCollisionBodyTransformIndex() const
size_t getLinkIndex() const
The index of this joint when traversing the kinematic tree in depth first fashion.
Representation of a robot's state. This includes position, velocity, acceleration and effort.
void setJointGroupActivePositions(const std::string &joint_group_name, const std::vector< double > &gstate)
Given positions for the variables of active joints that make up a group, in the order found in the gr...
void setVariablePositions(const double *position)
It is assumed positions is an array containing the new positions for all variables in this state....
void setVariableAcceleration(const std::string &variable, double value)
Set the acceleration of a variable. If an unknown variable name is specified, an exception is thrown.
void zeroVelocities()
Set all velocities to 0.0.
const Eigen::Isometry3d & getCollisionBodyTransform(const std::string &link_name, std::size_t index) const
RobotState & operator=(const RobotState &other)
Copy operator.
double getVariableVelocity(int index) const
Get the velocity of a particular variable. The variable is specified by its index....
void setVariableAcceleration(int index, double value)
Set the acceleration of a single variable. The variable is specified by its index (a value associated...
void copyJointGroupVelocities(const std::string &joint_group_name, Eigen::VectorXd &values) const
For a given group, copy the velocity values of the variables that make up the group into another loca...
void setJointEfforts(const JointModel *joint, const double *effort)
void attachBody(const std::string &id, const Eigen::Isometry3d &pose, const std::vector< shapes::ShapeConstPtr > &shapes, const EigenSTL::vector_Isometry3d &shape_poses, const std::vector< std::string > &touch_links, const std::string &link_name, const trajectory_msgs::msg::JointTrajectory &detach_posture=trajectory_msgs::msg::JointTrajectory(), const moveit::core::FixedTransformsMap &subframe_poses=moveit::core::FixedTransformsMap())
Add an attached body to a link.
void enforceBounds(const JointModel *joint)
double getVariableEffort(const std::string &variable) const
Get the effort of a particular variable. An exception is thrown if the variable is not known.
bool satisfiesVelocityBounds(const JointModel *joint, double margin=0.0) const
void setAttachedBodyUpdateCallback(const AttachedBodyCallback &callback)
void setVariableAccelerations(const std::vector< double > &acceleration)
Given an array with acceleration values for all variables, set those values as the accelerations in t...
void setJointGroupAccelerations(const std::string &joint_group_name, const std::vector< double > &gstate)
Given accelerations for the variables that make up a group, in the order found in the group (includin...
void setJointVelocities(const JointModel *joint, const double *velocity)
double getVariableAcceleration(const std::string &variable) const
Get the acceleration of a particular variable. An exception is thrown if the variable is not known.
double getVariableAcceleration(int index) const
Get the acceleration of a particular variable. The variable is specified by its index....
void printTransforms(std::ostream &out=std::cout) const
void setVariableEffort(const std::string &variable, double value)
Set the effort of a variable. If an unknown variable name is specified, an exception is thrown.
const Eigen::Isometry3d & getCollisionBodyTransform(const std::string &link_name, std::size_t index)
Get the link transform w.r.t. the root link (model frame) of the RobotModel. This is typically the ro...
void printTransform(const Eigen::Isometry3d &transform, std::ostream &out=std::cout) const
const double * getVariableEffort() const
Get const raw access to the effort of the variables that make up this state. The values are in the sa...
const double * getJointEffort(const std::string &joint_name) const
void setJointGroupAccelerations(const std::string &joint_group_name, const Eigen::VectorXd &values)
Given accelerations for the variables that make up a group, in the order found in the group (includin...
const LinkModel * getLinkModel(const std::string &link) const
Get the model of a particular link.
void copyJointGroupPositions(const std::string &joint_group_name, double *gstate) const
For a given group, copy the position values of the variables that make up the group into another loca...
void copyJointGroupAccelerations(const std::string &joint_group_name, double *gstate) const
For a given group, copy the acceleration values of the variables that make up the group into another ...
void attachBody(std::unique_ptr< AttachedBody > attached_body)
Add an attached body to this state.
const Eigen::Isometry3d & getGlobalLinkTransform(const std::string &link_name)
Get the link transform w.r.t. the root link (model frame) of the RobotModel. This is typically the ro...
void updateStateWithLinkAt(const std::string &link_name, const Eigen::Isometry3d &transform, bool backward=false)
Update the state after setting a particular link to the input global transform pose.
void copyJointGroupVelocities(const std::string &joint_group_name, double *gstate) const
For a given group, copy the velocity values of the variables that make up the group into another loca...
bool getJacobian(const JointModelGroup *group, const LinkModel *link, const Eigen::Vector3d &reference_point_position, Eigen::MatrixXd &jacobian, bool use_quaternion_representation=false) const
Compute the Jacobian with reference to a particular point on a given link, for a specified group.
bool getJacobian(const JointModelGroup *group, const LinkModel *link, const Eigen::Vector3d &reference_point_position, Eigen::MatrixXd &jacobian, bool use_quaternion_representation=false)
Compute the Jacobian with reference to a particular point on a given link, for a specified group.
const double * getJointPositions(const std::string &joint_name) const
double getVariablePosition(int index) const
Get the position of a particular variable. The variable is specified by its index....
std::pair< double, const JointModel * > getMinDistanceToPositionBounds() const
Get the minimm distance from this state to the bounds. The minimum distance and the joint for which t...
void copyJointGroupVelocities(const std::string &joint_group_name, std::vector< double > &gstate) const
For a given group, copy the velocity values of the variables that make up the group into another loca...
void setVariablePosition(int index, double value)
Set the position of a single variable. The variable is specified by its index (a value associated by ...
bool hasVelocities() const
By default, if velocities are never set or initialized, the state remembers that there are no velocit...
void getRobotMarkers(visualization_msgs::msg::MarkerArray &arr, const std::vector< std::string > &link_names, const std_msgs::msg::ColorRGBA &color, const std::string &ns, const rclcpp::Duration &dur, bool include_attached=false)
Get a MarkerArray that fully describes the robot markers for a given robot. Update the state first.
void setVariableEffort(int index, double value)
Set the effort of a single variable. The variable is specified by its index (a value associated by th...
void setVariableEffort(const std::vector< double > &effort)
Given an array with effort values for all variables, set those values as the effort in this state.
void copyJointGroupVelocities(const JointModelGroup *group, std::vector< double > &gstate) const
For a given group, copy the velocity values of the variables that make up the group into another loca...
void setVariableVelocity(const std::string &variable, double value)
Set the velocity of a variable. If an unknown variable name is specified, an exception is thrown.
double getVariableVelocity(const std::string &variable) const
Get the velocity of a particular variable. An exception is thrown if the variable is not known.
void getAttachedBodies(std::vector< const AttachedBody * > &attached_bodies) const
Get all bodies attached to the model corresponding to this state.
const JointModel * getJointModel(const std::string &joint) const
Get the model of a particular joint.
const Eigen::Isometry3d & getJointTransform(const std::string &joint_name)
void setJointGroupAccelerations(const std::string &joint_group_name, const double *gstate)
Given accelerations for the variables that make up a group, in the order found in the group (includin...
Eigen::MatrixXd getJacobian(const JointModelGroup *group, const Eigen::Vector3d &reference_point_position=Eigen::Vector3d(0.0, 0.0, 0.0))
Compute the Jacobian with reference to the last link of a specified group, and origin at the group ro...
void setJointGroupVelocities(const std::string &joint_group_name, const double *gstate)
Given velocities for the variables that make up a group, in the order found in the group (including v...
void computeVariableVelocity(const JointModelGroup *jmg, Eigen::VectorXd &qdot, const Eigen::VectorXd &twist, const LinkModel *tip) const
Given a twist for a particular link (tip), compute the corresponding velocity for every variable and ...
void getRobotMarkers(visualization_msgs::msg::MarkerArray &arr, const std::vector< std::string > &link_names, bool include_attached=false)
Get a MarkerArray that fully describes the robot markers for a given robot. Update the state first.
bool hasAccelerations() const
By default, if accelerations are never set or initialized, the state remembers that there are no acce...
void setVariablePosition(const std::string &variable, double value)
Set the position of a single variable. An exception is thrown if the variable name is not known.
void computeAABB(std::vector< double > &aabb) const
Compute an axis-aligned bounding box that contains the current state. The format for aabb is (minx,...
void setJointGroupPositions(const std::string &joint_group_name, const double *gstate)
Given positions for the variables that make up a group, in the order found in the group (including va...
void copyJointGroupPositions(const std::string &joint_group_name, std::vector< double > &gstate) const
For a given group, copy the position values of the variables that make up the group into another loca...
bool clearAttachedBody(const std::string &id)
Remove the attached body named id. Return false if the object was not found (and thus not removed)....
const RobotModelConstPtr & getRobotModel() const
Get the robot model this state is constructed for.
void harmonizePositions()
Call harmonizePosition() for all joints / all joints in group / given joint.
void setVariableVelocities(const double *velocity)
Given an array with velocity values for all variables, set those values as the velocities in this sta...
void setJointGroupVelocities(const std::string &joint_group_name, const Eigen::VectorXd &values)
Given velocities for the variables that make up a group, in the order found in the group (including v...
bool dirtyCollisionBodyTransforms() const
void zeroAccelerations()
Set all accelerations to 0.0.
bool isValidVelocityMove(const RobotState &other, const JointModelGroup *group, double dt) const
Check that the time to move between two waypoints is sufficient given velocity limits and time step.
const double * getVariablePositions() const
Get a raw pointer to the positions of the variables stored in this state.
const Eigen::Isometry3d & getGlobalLinkTransform(const std::string &link_name) const
bool setFromDiffIK(const JointModelGroup *group, const Eigen::VectorXd &twist, const std::string &tip, double dt, const GroupStateValidityCallbackFn &constraint=GroupStateValidityCallbackFn())
Set the joint values from a Cartesian velocity applied during a time dt.
double * getVariablePositions()
Get a raw pointer to the positions of the variables stored in this state. Use carefully....
void printStatePositionsWithJointLimits(const moveit::core::JointModelGroup *jmg, std::ostream &out=std::cout) const
Output to console the current state of the robot's joint limits.
const JointModelGroup * getJointModelGroup(const std::string &group) const
Get the model of a particular joint group.
void setVariableVelocity(int index, double value)
Set the velocity of a single variable. The variable is specified by its index (a value associated by ...
const double * getJointVelocities(const std::string &joint_name) const
void dropDynamics()
Reduce RobotState to kinematic information (remove velocity, acceleration and effort,...
bool dirtyJointTransform(const JointModel *joint) const
void setToRandomPositionsNearBy(const JointModelGroup *group, const RobotState &seed, double distance)
Set all joints in group to random values near the value in seed. distance is the maximum amount each ...
bool dirty() const
Returns true if anything in this state is dirty.
bool hasEffort() const
By default, if effort is never set or initialized, the state remembers that there is no effort set....
void updateLinkTransforms()
Update the reference frame transforms for links. This call is needed before using the transforms of l...
void setJointGroupActivePositions(const std::string &joint_group_name, const Eigen::VectorXd &values)
Given positions for the variables of active joints that make up a group, in the order found in the gr...
double * getVariableVelocities()
Get raw access to the velocities of the variables that make up this state. The values are in the same...
void copyJointGroupPositions(const std::string &joint_group_name, Eigen::VectorXd &values) const
For a given group, copy the position values of the variables that make up the group into another loca...
double * getVariableEffort()
Get raw access to the effort of the variables that make up this state. The values are in the same ord...
void interpolate(const RobotState &to, double t, RobotState &state) const
double distance(const RobotState &other) const
Return the sum of joint distances to "other" state. An L1 norm. Only considers active joints.
const Eigen::Isometry3d & getJointTransform(const std::string &joint_name) const
void setJointGroupAccelerations(const JointModelGroup *group, const std::vector< double > &gstate)
Given accelerations for the variables that make up a group, in the order found in the group (includin...
bool satisfiesPositionBounds(const JointModel *joint, double margin=0.0) const
std::string getStateTreeString() const
void copyJointGroupAccelerations(const JointModelGroup *group, std::vector< double > &gstate) const
For a given group, copy the acceleration values of the variables that make up the group into another ...
const Eigen::Isometry3d & getFrameTransform(const std::string &frame_id, bool *frame_found=nullptr)
Get the transformation matrix from the model frame (root of model) to the frame identified by frame_i...
void setVariablePositions(const std::vector< double > &position)
It is assumed positions is an array containing the new positions for all variables in this state....
void setToRandomPositions()
Set all joints to random values. Values will be within default bounds.
bool satisfiesBounds(double margin=0.0) const
void setVariableEffort(const double *effort)
Given an array with effort values for all variables, set those values as the effort in this state.
void setVariableVelocities(const std::vector< double > &velocity)
Given an array with velocity values for all variables, set those values as the velocities in this sta...
void setJointGroupVelocities(const JointModelGroup *group, const std::vector< double > &gstate)
Given velocities for the variables that make up a group, in the order found in the group (including v...
void setJointGroupActivePositions(const JointModelGroup *group, const std::vector< double > &gstate)
Given positions for the variables of active joints that make up a group, in the order found in the gr...
bool dirtyLinkTransforms() const
void printStateInfo(std::ostream &out=std::cout) const
double getVariablePosition(const std::string &variable) const
Get the position of a particular variable. An exception is thrown if the variable is not known.
void update(bool force=false)
Update all transforms.
void setJointGroupPositions(const std::string &joint_group_name, const std::vector< double > &gstate)
Given positions for the variables that make up a group, in the order found in the group (including va...
void dropAccelerations()
Remove accelerations from this state (this differs from setting them to zero)
const Eigen::Isometry3d & getGlobalLinkTransform(const LinkModel *link)
void getRobotMarkers(visualization_msgs::msg::MarkerArray &arr, const std::vector< std::string > &link_names, const std_msgs::msg::ColorRGBA &color, const std::string &ns, const rclcpp::Duration &dur, bool include_attached=false) const
Get a MarkerArray that fully describes the robot markers for a given robot.
void setJointGroupVelocities(const std::string &joint_group_name, const std::vector< double > &gstate)
Given velocities for the variables that make up a group, in the order found in the group (including v...
void setJointGroupPositions(const JointModelGroup *group, const std::vector< double > &gstate)
Given positions for the variables that make up a group, in the order found in the group (including va...
const AttachedBody * getAttachedBody(const std::string &name) const
Get the attached body named name. Return nullptr if not found.
bool setFromIKSubgroups(const JointModelGroup *group, const EigenSTL::vector_Isometry3d &poses, const std::vector< std::string > &tips, const std::vector< std::vector< double >> &consistency_limits, double timeout=0.0, const GroupStateValidityCallbackFn &constraint=GroupStateValidityCallbackFn(), const kinematics::KinematicsQueryOptions &options=kinematics::KinematicsQueryOptions())
setFromIK for multiple poses and tips (end effectors) when no solver exists for the jmg that can solv...
const double * getVariableAccelerations() const
Get const raw access to the accelerations of the variables that make up this state....
bool setToIKSolverFrame(Eigen::Isometry3d &pose, const kinematics::KinematicsBaseConstPtr &solver)
Transform pose from the robot model's base frame to the reference frame of the IK solver.
void setToDefaultValues()
Set all joints to their default positions. The default position is 0, or if that is not within bounds...
const Eigen::Isometry3d & getCollisionBodyTransform(const LinkModel *link, std::size_t index) const
void printStatePositions(std::ostream &out=std::cout) const
std::size_t getVariableCount() const
Get the number of variables that make up this state.
void printDirtyInfo(std::ostream &out=std::cout) const
void copyJointGroupPositions(const JointModelGroup *group, std::vector< double > &gstate) const
For a given group, copy the position values of the variables that make up the group into another loca...
void setVariableAccelerations(const double *acceleration)
Given an array with acceleration values for all variables, set those values as the accelerations in t...
double * getVariableAccelerations()
Get raw access to the accelerations of the variables that make up this state. The values are in the s...
void setJointPositions(const std::string &joint_name, const std::vector< double > &position)
void copyJointGroupAccelerations(const std::string &joint_group_name, std::vector< double > &gstate) const
For a given group, copy the acceleration values of the variables that make up the group into another ...
RobotState(const RobotModelConstPtr &robot_model)
A state can be constructed from a specified robot model. No values are initialized....
void dropEffort()
Remove effort values from this state (this differs from setting them to zero)
bool knowsFrameTransform(const std::string &frame_id) const
Check if a transformation matrix from the model frame (root of model) to frame frame_id is known.
bool integrateVariableVelocity(const JointModelGroup *jmg, const Eigen::VectorXd &qdot, double dt, const GroupStateValidityCallbackFn &constraint=GroupStateValidityCallbackFn())
Given the velocities for the variables in this group (qdot) and an amount of time (dt),...
const double * getJointAccelerations(const std::string &joint_name) const
bool setToDefaultValues(const std::string &group_name, const std::string &state_name)
const Eigen::Isometry3d & getGlobalLinkTransform(const LinkModel *link) const
double getVariableEffort(int index) const
Get the effort of a particular variable. The variable is specified by its index. No checks are perfor...
void computeAABB(std::vector< double > &aabb)
Compute an axis-aligned bounding box that contains the current state. The format for aabb is (minx,...
void setVariableValues(const sensor_msgs::msg::JointState &msg)
void enforcePositionBounds(const JointModel *joint)
bool hasAttachedBody(const std::string &id) const
Check if an attached body named id exists in this state.
void setJointPositions(const std::string &joint_name, const Eigen::Isometry3d &transform)
void copyJointGroupAccelerations(const std::string &joint_group_name, Eigen::VectorXd &values) const
For a given group, copy the acceleration values of the variables that make up the group into another ...
void enforceVelocityBounds(const JointModel *joint)
const Eigen::Isometry3d & getCollisionBodyTransform(const LinkModel *link, std::size_t index)
random_numbers::RandomNumberGenerator & getRandomNumberGenerator()
Return the instance of a random number generator.
void setJointGroupPositions(const std::string &joint_group_name, const Eigen::VectorXd &values)
Given positions for the variables that make up a group, in the order found in the group (including va...
void setJointPositions(const JointModel *joint, const std::vector< double > &position)
void invertVelocity()
Invert velocity if present.
const Eigen::Isometry3d & getFrameInfo(const std::string &frame_id, const LinkModel *&robot_link, bool &frame_found) const
Get the transformation matrix from the model frame (root of model) to the frame identified by frame_i...
void harmonizePosition(const JointModel *joint)
void clearAttachedBodies()
Clear all attached bodies. This calls delete on the AttachedBody instances, if needed.
void dropVelocities()
Remove velocities from this state (this differs from setting them to zero)
void zeroEffort()
Set all effort values to 0.0.
const moveit::core::LinkModel * getRigidlyConnectedParentLinkModel(const std::string &frame) const
Get the latest link upwards the kinematic tree which is only connected via fixed joints.
bool satisfiesBounds(const JointModel *joint, double margin=0.0) const
void updateCollisionBodyTransforms()
Update the transforms for the collision bodies. This call is needed before calling collision checking...
bool setFromIK(const JointModelGroup *group, const EigenSTL::vector_Isometry3d &poses, const std::vector< std::string > &tips, const std::vector< std::vector< double >> &consistency_limits, double timeout=0.0, const GroupStateValidityCallbackFn &constraint=GroupStateValidityCallbackFn(), const kinematics::KinematicsQueryOptions &options=kinematics::KinematicsQueryOptions(), const kinematics::KinematicsBase::IKCostFn &cost_function=kinematics::KinematicsBase::IKCostFn())
Warning: This function inefficiently copies all transforms around. If the group consists of a set of ...
bool setFromIK(const JointModelGroup *group, const geometry_msgs::msg::Pose &pose, double timeout=0.0, const GroupStateValidityCallbackFn &constraint=GroupStateValidityCallbackFn(), const kinematics::KinematicsQueryOptions &options=kinematics::KinematicsQueryOptions(), const kinematics::KinematicsBase::IKCostFn &cost_function=kinematics::KinematicsBase::IKCostFn())
If the group this state corresponds to is a chain and a solver is available, then the joint values ca...
void computeVariableVelocity(const JointModelGroup *jmg, Eigen::VectorXd &qdot, const Eigen::VectorXd &twist, const LinkModel *tip)
Given a twist for a particular link (tip), compute the corresponding velocity for every variable and ...
const std::vector< std::string > & getVariableNames() const
Get the names of the variables that make up this state, in the order they are stored in memory.
void setJointPositions(const std::string &joint_name, const double *position)
const Eigen::Isometry3d & getJointTransform(const JointModel *joint) const
const double * getVariableVelocities() const
Get const access to the velocities of the variables that make up this state. The values are in the sa...
Vec3fX< details::Vec3Data< double > > Vector3d
std::function< bool(RobotState *robot_state, const JointModelGroup *joint_group, const double *joint_group_variable_values)> GroupStateValidityCallbackFn
Signature for functions that can verify that if the group joint_group in robot_state is set to joint_...
MOVEIT_CLASS_FORWARD(JointModelGroup)
std::ostream & operator<<(std::ostream &out, const VariableBounds &b)
Operator overload for printing variable bounds to a stream.
std::map< std::string, Eigen::Isometry3d, std::less< std::string >, Eigen::aligned_allocator< std::pair< const std::string, Eigen::Isometry3d > > > FixedTransformsMap
Map frame names to the transformation matrix that can transform objects from the frame name to the pl...
std::function< void(AttachedBody *body, bool attached)> AttachedBodyCallback
Main namespace for MoveIt.
A set of options for the kinematics solver.