robot_env_evaluator 1.0.1
Loading...
Searching...
No Matches
robot_presets.cpp
Go to the documentation of this file.
1
20#include <pinocchio/parsers/urdf.hpp>
21#include <pinocchio/parsers/srdf.hpp>
22#include <pinocchio/algorithm/model.hpp>
23
25#include "robot_env_evaluator/robot_env_evaluator_path.h"
26
27namespace robot_env_evaluator
28{
29 void FrankaEmikaPreset::getPresetRobot(pinocchio::Model &model,
30 std::string& ee_name,
31 std::vector<std::string>& joint_names,
32 pinocchio::GeometryModel &collision_model)
33 {
34 // get the robot path
35 const std::string robot_env_evaluator_path = ROBOT_ENV_EVALUATOR_PATH;
36 const std::string robot_path = robot_env_evaluator_path + "robots";
37 const std::string urdf_filename = robot_env_evaluator_path + "/robots/panda_description/urdf/panda.urdf";
38 const std::string srdf_filename = robot_env_evaluator_path + "/robots/panda_description/srdf/panda.srdf";
39
40 // model
41 pinocchio::Model model_original;
42 pinocchio::urdf::buildModel(urdf_filename, model_original, false);
43 std::vector<pinocchio::JointIndex> joints_to_lock = {8, 9};
44 Eigen::VectorXd lock_positions(9);
45 lock_positions << 0, 0, 0, 0, 0, 0, 0, 0.03, 0.03;
46 pinocchio::buildReducedModel(model_original, joints_to_lock, lock_positions, model);
47
48 // ee_name
49 ee_name = "panda_hand_tcp";
50 joint_names.clear();
51 joint_names.push_back("panda_joint1");
52 joint_names.push_back("panda_joint2");
53 joint_names.push_back("panda_joint3");
54 joint_names.push_back("panda_joint4");
55 joint_names.push_back("panda_joint5");
56 joint_names.push_back("panda_joint6");
57 joint_names.push_back("panda_joint7");
58
59 // collision_model
60 pinocchio::urdf::buildGeom(model, urdf_filename, pinocchio::COLLISION, collision_model, robot_env_evaluator_path);
61 collision_model.addAllCollisionPairs();
62 pinocchio::srdf::removeCollisionPairs(model, collision_model, srdf_filename);
63 collision_model.geometryObjects[0].disableCollision = true;
64 collision_model.geometryObjects[1].disableCollision = true;
65 collision_model.geometryObjects[2].disableCollision = true;
66 collision_model.geometryObjects[9].disableCollision = true;
67 collision_model.geometryObjects[10].disableCollision = true;
68 collision_model.geometryObjects[11].disableCollision = true;
69 collision_model.geometryObjects[12].disableCollision = true;
70 collision_model.geometryObjects[13].disableCollision = true;
71 collision_model.geometryObjects[14].disableCollision = true;
72 collision_model.geometryObjects[15].disableCollision = true;
73 collision_model.geometryObjects[16].disableCollision = true;
74 }
75
76 void FrankaEmikaNoHandPreset::getPresetRobot(pinocchio::Model &model,
77 std::string& ee_name,
78 std::vector<std::string>& joint_names,
79 pinocchio::GeometryModel &collision_model)
80 {
81 // get the robot path
82 const std::string robot_env_evaluator_path = ROBOT_ENV_EVALUATOR_PATH;
83 const std::string robot_path = robot_env_evaluator_path + "robots";
84 const std::string urdf_filename = robot_env_evaluator_path + "/robots/panda_description/urdf/panda.urdf";
85 const std::string srdf_filename = robot_env_evaluator_path + "/robots/panda_description/srdf/panda.srdf";
86
87 // model
88 pinocchio::Model model_original;
89 pinocchio::urdf::buildModel(urdf_filename, model_original, false);
90 std::vector<pinocchio::JointIndex> joints_to_lock = {8, 9};
91 Eigen::VectorXd lock_positions(9);
92 lock_positions << 0, 0, 0, 0, 0, 0, 0, 0.03, 0.03;
93 pinocchio::buildReducedModel(model_original, joints_to_lock, lock_positions, model);
94
95 // ee_name
96 ee_name = "panda_hand_tcp";
97 joint_names.clear();
98 joint_names.push_back("panda_joint1");
99 joint_names.push_back("panda_joint2");
100 joint_names.push_back("panda_joint3");
101 joint_names.push_back("panda_joint4");
102 joint_names.push_back("panda_joint5");
103 joint_names.push_back("panda_joint6");
104 joint_names.push_back("panda_joint7");
105
106 // collision_model
107 pinocchio::urdf::buildGeom(model, urdf_filename, pinocchio::COLLISION, collision_model, robot_env_evaluator_path);
108 collision_model.addAllCollisionPairs();
109 pinocchio::srdf::removeCollisionPairs(model, collision_model, srdf_filename);
110 collision_model.geometryObjects[0].disableCollision = true;
111 collision_model.geometryObjects[1].disableCollision = true;
112 collision_model.geometryObjects[2].disableCollision = true;
113 collision_model.geometryObjects[9].disableCollision = true;
114 collision_model.geometryObjects[10].disableCollision = true;
115 collision_model.geometryObjects[11].disableCollision = true;
116 collision_model.geometryObjects[12].disableCollision = true;
117 collision_model.geometryObjects[13].disableCollision = true;
118 collision_model.geometryObjects[14].disableCollision = true;
119 collision_model.geometryObjects[15].disableCollision = true;
120 collision_model.geometryObjects[16].disableCollision = true;
121
122 // remove another three collision meshes close to hand
123 collision_model.geometryObjects[6].disableCollision = true;
124 collision_model.geometryObjects[7].disableCollision = true;
125 collision_model.geometryObjects[8].disableCollision = true;
126 }
127
128 std::unique_ptr<RobotPresetInterface> RobotPresetFactory::createRobotPreset(const std::string &robot_name)
129 {
130 if(robot_name == "panda")
131 {
132 return std::make_unique<FrankaEmikaPreset>();
133 }
134 if(robot_name == "panda_no_hand")
135 {
136 return std::make_unique<FrankaEmikaNoHandPreset>();
137 }
138 else
139 {
140 return nullptr;
141 }
142 }
143}
void getPresetRobot(pinocchio::Model &model, std::string &ee_name, std::vector< std::string > &joint_names, pinocchio::GeometryModel &collision_model) override
Get the Preset Robot object.
void getPresetRobot(pinocchio::Model &model, std::string &ee_name, std::vector< std::string > &joint_names, pinocchio::GeometryModel &collision_model) override
Get the Preset Robot object.
static std::unique_ptr< RobotPresetInterface > createRobotPreset(const std::string &robot_name)
Create a robot preset instance.
Implementation of robot presets for the RobotEnvEvaluator class.