ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

There are two different DH conventions, there is the original Denavit Hartenberg convention and the modified one published in Craig's Introduction to Robotics. KDL's chains are build up using Joints that can rotate about any axis, for DH you have to pick a rotation about the Z axis. For the offset between the current/previous and the next/current joint KDL uses plain homogeneous transformation matrices (Frame) since this is a lot more flexible, a Frame can easily be created from DH parameters, KDL supports both conventions, so if you want to build a chain using DH parameters you should do something like the following:

chain.addSegment(Segment(Joint(Joint::RotZ),Frame::DH(double a, double alpha, double d, double theta)));

or chain.addSegment(Segment(Joint(Joint::RotZ),Frame::DH_Craig1989(double a, double alpha, double d,double theta)

-- Ruben

There are two different DH conventions, there is the original Denavit Hartenberg convention and the modified one published in Craig's Introduction to Robotics. KDL's chains are build up using Joints that can rotate about any axis, for DH you have to pick a rotation about the Z axis. For the offset between the current/previous and the next/current joint KDL uses plain homogeneous transformation matrices (Frame) since this is a lot more flexible, a Frame can easily be created from DH parameters, KDL supports both conventions, so if you want to build a chain using DH parameters you should do something like the following:

chain.addSegment(Segment(Joint(Joint::RotZ),Frame::DH(double a, double alpha, double d, double theta)));

or or

chain.addSegment(Segment(Joint(Joint::RotZ),Frame::DH_Craig1989(double a, double alpha, double d,double theta)

theta)

-- Ruben