MATLAB Answers

Converting double array to struct array for generalized inverse kinematics

27 views (last 30 days)
Joo Lee
Joo Lee on 12 Oct 2018
Answered: Sebastian Castro on 4 Nov 2018
q0 = robot.homeConfiguration.JointPosition;
numWaypoints = 5;
qWaypoints = repmat(q0, numWaypoints, 1);
gik = robotics.GeneralizedInverseKinematics;
gik.RigidBodyTree = robot;
gik.ConstraintInputs = {'position'};
posTgt = robotics.PositionTarget(ee);
posTgt.TargetPosition = [1 1 1];
qWaypoints(1,:)= q0;
for k = 2:numWaypoints
[qWaypoints(k,:),solutionInfo] = gik(qWaypoints(:,k-1), posTgt);
above is the code that I am working with. The error ouccurs at "gik(qWaypoints(:,k-1), posTgt)". So basically I need to convert the qWaypoints to struct array (currently it is an array of doubles). Is there an easy and simple way for this conversion ?

Sign in to comment.

Answers (1)

Sebastian Castro
Sebastian Castro on 4 Nov 2018
Instead of converting back and forth, it's easier to stick to a consistent format -- either all structs or all numeric.
If you do either of the following,
robot.DataFormat = 'row';
robot.DataFormat = 'column';
then the robot configuration, including the solution of gik, will be a numeric row/column instead of a struct.
As an alternative, as you said, you can keep everything as a struct. You can simply your first line to
q0 = robot.homeConfiguration
Then, repmat should handle the rest for initializing the array to be of structs rather than numeric.
Finally, your loop contents should become something like:
[qWaypoints(k),solutionInfo] = gik(qWaypoints(k-1), posTgt);
- Sebastian

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!