class mrpt::kinematics::CKinematicChain

A open-loop kinematic chain model, suitable to robotic manipulators.

Each link is parameterized with standard Denavit-Hartenberg standard parameterization [theta, d, a, alpha].

The orientation of the first link can be modified with setOriginPose(), which defaults to standard XYZ axes with +Z pointing upwards.

See also:

CPose3D

#include <mrpt/kinematics/CKinematicChain.h>

class CKinematicChain: public mrpt::serialization::CSerializable
{
public:
    //
methods

    size_t size() const;
    void clear();
    void addLink(double theta, double d, double a, double alpha, bool is_prismatic);
    void removeLink(const size_t idx);
    const TKinematicLink& getLink(const size_t idx) const;
    TKinematicLink& getLinkRef(const size_t idx);
    void setOriginPose(const mrpt::poses::CPose3D& new_pose);
    const mrpt::poses::CPose3D& getOriginPose() const;

    template <class VECTOR>
    void getConfiguration(VECTOR& v) const;

    template <class VECTOR>
    void setConfiguration(const VECTOR& v);

    void getAs3DObject(mrpt::opengl::CSetOfObjects::Ptr& inout_gl_obj, std::vector<mrpt::poses::CPose3D>* out_all_poses = nullptr) const;
    void update3DObject(std::vector<mrpt::poses::CPose3D>* out_all_poses = nullptr) const;
    void recomputeAllPoses(std::vector<mrpt::poses::CPose3D>& poses, const mrpt::poses::CPose3D& pose0 = mrpt::poses::CPose3D()) const;
};

Methods

size_t size() const

Return the number of links.

void clear()

Erases all links and leave the robot arm empty.

void addLink(double theta, double d, double a, double alpha, bool is_prismatic)

Appends a new link to the robotic arm, with the given Denavit-Hartenberg parameters (see TKinematicLink for further details)

void removeLink(const size_t idx)

Removes one link from the kinematic chain (0<=idx<N)

const TKinematicLink& getLink(const size_t idx) const

Get a ref to a given link (read-only)

TKinematicLink& getLinkRef(const size_t idx)

Get a ref to a given link (read-write)

void setOriginPose(const mrpt::poses::CPose3D& new_pose)

Can be used to define a first degree of freedom along a +Z axis which does not coincide with the global +Z axis.

const mrpt::poses::CPose3D& getOriginPose() const

Returns the current pose of the first link.

template <class VECTOR>
void getConfiguration(VECTOR& v) const

Get all the DOFs of the arm at once, returning them in a vector with all the “q_i” values, which can be interpreted as rotations (radians) or displacements (meters) depending on links being “revolute” or “prismatic”.

The vector is automatically resized to the correct size (the number of links).

Parameters:

VECTOR

Can be any Eigen vector, mrpt::math::CVectorDouble, or std::vector<double>

template <class VECTOR>
void setConfiguration(const VECTOR& v)

Set all the DOFs of the arm at once, from a vector with all the “q_i” values, which are interpreted as rotations (radians) or displacements (meters) depending on links being “revolute” or “prismatic”.

Parameters:

std::exception

If the size of the vector doesn’t match the number of links.

VECTOR

Can be any Eigen vector, mrpt::math::CVectorDouble, or std::vector<double>

void getAs3DObject(mrpt::opengl::CSetOfObjects::Ptr& inout_gl_obj, std::vector<mrpt::poses::CPose3D>* out_all_poses = nullptr) const

Constructs a 3D representation of the kinematic chain, in its current state.

You can call update3DObject() to update the kinematic state of these OpenGL objects in the future, since an internal list of smart pointers to the constructed objects is kept internally. This is more efficient than calling this method again to build a new representation.

Parameters:

out_all_poses

Optional output vector, will contain the poses in the format of recomputeAllPoses()

See also:

update3DObject

void update3DObject(std::vector<mrpt::poses::CPose3D>* out_all_poses = nullptr) const

Read getAs3DObject() for a description.

Parameters:

out_all_poses

Optional output vector, will contain the poses in the format of recomputeAllPoses()

void recomputeAllPoses(std::vector<mrpt::poses::CPose3D>& poses, const mrpt::poses::CPose3D& pose0 = mrpt::poses::CPose3D()) const

Go thru all the links of the chain and compute the global pose of each link.

The “ground” link pose “pose0” defaults to the origin of coordinates, but anything else can be passed as the optional argument. The returned vector has N+1 elements (N=number of links), since [0] contains the base frame, [1] the pose after the first link, and so on.

The “ground” link pose “pose0” defaults to the origin of coordinates, but anything else can be passed as the optional argument.