About controller or planning tool DART provides

DART has applications in robotics and computer animation because it features a multibody dynamic simulator and various kinematic tools for control and motion planning.

I read this sentence on the DART main page. Can anybody give a more general summary of what control tools and motion planning tools that DART provides?

Currently i found your tutorials on OSController and PD controller, maybe there are more functionalities that still not be mentioned?

There is also an inverse kinematics tool which can be useful for planning. The dart::simulation::World class can be used for very easy collision checking, which is also useful for planning.

There used to be an RRT-based planning library that came with DART, but it’s been removed because it was a bit too simplistic, and there are significantly stronger choices out there for planning libraries, like OMPL.

I think it’s hard to overstate the value that inverse dynamics has for writing a controller, so the Operational Space controller example is (IMO) a very strong illustration of how DART can be used as a tool for control.

Sorry,I dont quite understand what you said.
You means i should try some planning libraries like OMPL, taking information from DART as input and feed to that planning libraries?

Well, what’s that in DART?

You means i should try some planning libraries like OMPL, taking information from DART as input and feed to that planning libraries?

Yes, that would be an option if you want to use a planning library and also want to integrate it with DART. I believe OMPL uses abstract interface classes that you could create DART-based implementations for.

Well, what’s that in DART?

dart/dynamics/InverseKinematics.hpp

Really Helpful,Thanks, grey

Hello, grey

I wanna to control the skeleton through controlling joints but i do not know quite clear on how to do this.

Currently, i’ve read through your Manipulator tutorials about PD control and i wish to do a simple PD control based on information from one joint, or further, on multiple joints.

Now a simple case can be described as follows: two bodyNode connected with a revolute joint, i wanna to maintain the first bodyNode at certain pose(position+rotation) through controlling the revolute joint.

I’ve noticed that joint class also have getVelocities , getPositions , setForces functionalities.

So i may ask how to use the getVelocities , getPositions , setForces , setCommands correctly in the context of joint, since a joint may have actuator types which may pose some constraints on these variables?

A further question would be how to control multiple joints in a PD scheme ?

These are very complicated topics related to controls and kinematics that can’t be adequately addressed over a forum. I would recommend reading books, taking classes in controls, or getting advice from a colleague to learn the techniques that you need to know to accomplish what you’re trying to do.

If you have a control technique/algorithm in mind, I’m happy to explain how DART’s API can be used to facilitate it, but I don’t really have the means to teach anyone controls and kinematics over a forum.

Hello,grey
Thanks to your advice.
I’ve read through some tutorials on Operational Space Control.
And i run some tests on the dart manipulator implementation and have some questions.

Q1: Is operational space control only limited on the case of robot arm? Can we set EndEffector as another bodyNode instead of the last bodyNode of the manipulator?

After reading the tutorial, i thought the answer maybe yes. So i did some tests which raises the second question.
In tutorialDominoes-Finished.cpp

mForces = M * (pinv_J * Kp * de + pinv_dJ * Kp * e) - Kd * dq + Kd * pinv_J * Kp * e + Cg + f

I found the getWorldJacobian() returns a Jacobian with dimension 6 x dof_under_current _joint_Tree, not 6 x dof_wholeSkeletonTree. However getMassMatrix returns a matrix of dof_wholeSkeletonTree*dof_wholeSkeletonTree.

So when i use another bodyNode as endeffector, the matrix multiplication fails because of dimension mismatch.

Q2: To make it work, how to currently get the jacobian of any bodyNode at the skeleton which is of dimension 6 x dof_wholeSkeletonTree?