ARCOS KDL

pipeline status

Our implementation of a very simple Kinematic Dynamic Library. For more information go to the official documentation. Because this is still in development you will need to generate the documentation yourself. Go to the documentation section for that.

For the API documentation visit this page.

Building

Execute:

cargo build --lib

Testing

Execute:

cargo test

Documentation

Execute:

cargo doc

For testing a default chain was created. To compare against orocos-kdl, it can be created with:

```python from PyKDL import Frame, FrameVel, Rotation, Vector, Segment from PyKDL import Chain, JntArray, Joint, JntArrayVel from PyKDL import ChainFkSolverPosrecursive, ChainFkSolverVelrecursive

def createsegment(x, y, z, roll, pitch, yaw, jointtype=Joint.RotZ): return Segment(Joint(joint_type), Frame(Rotation.RPY(roll, pitch, yaw), Vector(x,y,z)))

def createangles(anglelist): jointarray = JntArray(len(anglelist)) for index,angle in enumerate(anglelist): jointarray[index] = angle return joint_array

Define the segments

segments = [ createsegment(0.1, -0.2, 0.3, -0.1, -0.2, 0.3, Joint.None), createsegment(0.2, 0.5, 0.1, 0.58, -1.2, 2.3), createsegment(0.02, 0.3, -0.81, 3.0, -1.7, 1.3), createsegment(0.4, -0.27, 0.19, 1.57 ,-1.57, 0.0), createsegment(0.24, -0.18, 0.16, 0.01, 0.0, -0.01), createsegment(1.0, -0.5, -0.01, 0.05, -1.02, 0.34), createsegment(0.02, 0.58, -0.87, 0.95, -1.74, 0.68), createsegment(0.2, 0.1, -0.1, -0.76, -0.94, 0.25) ]

Create the chain

chain = Chain() for segment in segments: chain.addSegment(segment)

Create the solver

solver = ChainFkSolverPosrecursive(chain) diffsolver = ChainFkSolverVel_recursive(chain)

Get the result

result = Frame() diffresult = FrameVel() jointarray = createangles([0.1, -0.95, 0.57, 0.68, -0.27, 0.39, 0.47]) qdotsarray = createangles([1.0, -0.65, 0.87, 0.01, -0.41, -0.98, 0.24]) solver.JntToCart(jointarray, result) diffsolver.JntToCart(JntArrayVel(jointarray, qdotsarray), diffresult) print(result) print(diff_result.deriv()) ```