22#include " simple-mpc/mpc.hpp"
33#include " simple-mpc/ocp-handler.hpp"
44#include " simple-mpc/robot-handler.hpp"
5+ #include < pinocchio/algorithm/model.hpp>
56#include < pinocchio/fwd.hpp>
67#include < pinocchio/parsers/srdf.hpp>
78#include < pinocchio/parsers/urdf.hpp>
@@ -19,13 +20,13 @@ using simple_mpc::OCPHandler;
1920int main ()
2021{
2122 // Load pinocchio model from example robot data
22- pinocchio::Model model ;
23+ pinocchio::Model modelFull ;
2324 std::string urdf_path = EXAMPLE_ROBOT_DATA_MODEL_DIR " /talos_data/robots/talos_reduced.urdf" ;
2425 std::string srdf_path = EXAMPLE_ROBOT_DATA_MODEL_DIR " /talos_data/srdf/talos.srdf" ;
2526
26- pinocchio::urdf::buildModel (urdf_path, pinocchio::JointModelFreeFlyer (), model );
27- pinocchio::srdf::loadReferenceConfigurations (model , srdf_path, false );
28- pinocchio::srdf::loadRotorParameters (model , srdf_path, false );
27+ pinocchio::urdf::buildModel (urdf_path, pinocchio::JointModelFreeFlyer (), modelFull );
28+ pinocchio::srdf::loadReferenceConfigurations (modelFull , srdf_path, false );
29+ pinocchio::srdf::loadRotorParameters (modelFull , srdf_path, false );
2930
3031 // Lock joint list
3132 const std::vector<std::string> controlled_joints_names{
@@ -36,7 +37,8 @@ int main()
3637 " arm_right_1_joint" , " arm_right_2_joint" , " arm_right_3_joint" , " arm_right_4_joint" ,
3738 };
3839
39- std::vector<std::string> locked_joints_names{model.names };
40+ std::vector<std::string> locked_joints_names{modelFull.names };
41+ std::vector<pinocchio::JointIndex> controlled_joints_ids;
4042 locked_joints_names.erase (
4143 std::remove_if (
4244 locked_joints_names.begin (), locked_joints_names.end (),
@@ -46,9 +48,28 @@ int main()
4648 }),
4749 locked_joints_names.end ());
4850
51+ // Construct controlled and locked joints ids list
52+ pinocchio::Model model;
53+ std::vector<unsigned long > locked_joint_ids;
54+ for (size_t i = 1 ; i < modelFull.names .size (); i++)
55+ {
56+ const std::string joint_name = modelFull.names .at (i);
57+ if (count (locked_joints_names.begin (), locked_joints_names.end (), joint_name) == 0 )
58+ {
59+ controlled_joints_ids.push_back (modelFull.getJointId (joint_name));
60+ }
61+ else
62+ {
63+ locked_joint_ids.push_back (modelFull.getJointId (joint_name));
64+ }
65+ }
66+
67+ // Build reduced model with locked joints
68+ pinocchio::buildReducedModel (modelFull, locked_joint_ids, modelFull.referenceConfigurations [" half_sitting" ], model);
69+
4970 // Actually create handler
5071 std::string base_joint = " root_joint" ;
51- RobotModelHandler model_handler (model, " half_sitting" , base_joint, locked_joints_names );
72+ RobotModelHandler model_handler (model, " half_sitting" , base_joint);
5273
5374 // Add feet
5475 model_handler.addFoot (
0 commit comments