Skip to content

Commit 8eedcd9

Browse files
authored
Merge pull request #74 from Simple-Robotics/debugging
Fix base velocity in Inverse Dynamics
2 parents d353b53 + 9905c04 commit 8eedcd9

File tree

5 files changed

+16
-9
lines changed

5 files changed

+16
-9
lines changed

bindings/module.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ namespace simple_mpc::python
1515
void exposeCentroidalOcp();
1616
void exposeKinodynamicsOcp();
1717
void exposeMPC();
18-
void exposeIDSolver();
19-
void exposeIKIDSolver();
2018
void exposeInterpolator();
2119
void exposeFrictionCompensation();
2220
void exposeInverseDynamics();

examples/go2_kinodynamics.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,6 @@
289289
q_meas, v_meas = device.measureState()
290290
x_measured = np.concatenate([q_meas, v_meas])
291291

292-
mpc.getDataHandler().updateInternalData(x_measured, True)
293-
294292
kino_ID.setTarget(q_interp, v_interp, acc_interp, contact_states, force_interp)
295293
tau_cmd = kino_ID.solve(t, q_meas, v_meas)
296294

include/simple-mpc/fwd.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ namespace simple_mpc
3636
class KinodynamicsOCP;
3737
class CentroidalOCP;
3838
class OCPHandler;
39-
class IDSolver;
40-
class IKIDSolver;
4139
class FrictionCompensation;
4240

4341
/// EIGEN TYPEDEFS

include/simple-mpc/inverse-dynamics/kinodynamics-id.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ namespace simple_mpc
8585
tsid::solvers::HQPOutput last_solution_;
8686
tsid::trajectories::TrajectorySample samplePosture_;
8787
tsid::trajectories::TrajectorySample sampleBase_;
88+
pinocchio::Motion targetVelBase_;
89+
pinocchio::Motion targetAccBase_;
8890
};
8991

9092
} // namespace simple_mpc

src/inverse-dynamics/kinodynamics-id.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,11 @@ void KinodynamicsID::setTarget(
134134

135135
// Base task
136136
tsid::math::SE3ToVector(data_handler_.getBaseFramePose(), sampleBase_.pos);
137-
sampleBase_.setDerivative(v_target.head<6>());
138-
sampleBase_.setSecondDerivative(a_target.head<6>());
139-
baseTask_->setReference(sampleBase_);
137+
/* Velocity and acceleration not set here since the actual position of the robot is needed to transform from local to
138+
* world-aligned frame. Will be done in solve()
139+
*/
140+
targetVelBase_ = v_target.head<6>();
141+
targetAccBase_ = a_target.head<6>();
140142

141143
// Foot contacts
142144
for (std::size_t foot_nb = 0; foot_nb < model_handler_.getFeetNb(); foot_nb++)
@@ -214,6 +216,15 @@ void KinodynamicsID::solve(
214216
}
215217
}
216218

219+
// Convert robot base vel/acc from local to world-aligned frame using actual robot pose
220+
const pinocchio::SE3 oMb_rotation(data_handler_.getBaseFramePose().rotation(), Eigen::Vector3d::Zero());
221+
const pinocchio::Motion v_world_aligned{oMb_rotation.act(pinocchio::Motion(targetVelBase_))};
222+
const pinocchio::Motion a_world_aligned{oMb_rotation.act(pinocchio::Motion(targetAccBase_))};
223+
sampleBase_.setDerivative(v_world_aligned.toVector());
224+
sampleBase_.setDerivative(a_world_aligned.toVector());
225+
baseTask_->setReference(sampleBase_);
226+
227+
// Solve QP
217228
const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData(t, q_meas, v_meas);
218229
last_solution_ = solver_.solve(solver_data);
219230
assert(last_solution_.status == tsid::solvers::HQPStatus::HQP_STATUS_OPTIMAL);

0 commit comments

Comments
 (0)