18 #ifndef __tsid_python_contact_two_frames_hpp__
19 #define __tsid_python_contact_two_frames_hpp__
23 #include "tsid/contacts/contact-two-frames.hpp"
33 template <
typename ContactTwoFrames>
35 :
public boost::python::def_visitor<
36 ContactTwoFramesPythonVisitor<ContactTwoFrames> > {
37 template <
class PyClass>
42 std::string,
double,
double>(
43 (bp::arg(
"name"), bp::arg(
"robot"), bp::arg(
"framename1"),
44 bp::arg(
"framename2"), bp::arg(
"minForce"), bp::arg(
"maxForce")),
45 "Default Constructor"))
46 .add_property(
"n_motion", &ContactTwoFrames::n_motion,
47 "return number of motion")
48 .add_property(
"n_force", &ContactTwoFrames::n_force,
49 "return number of force")
52 .def(
"computeMotionTask",
54 bp::args(
"t",
"q",
"v",
"data"))
55 .def(
"computeForceTask",
57 bp::args(
"t",
"q",
"v",
"data"))
58 .def(
"computeForceRegularizationTask",
60 bp::args(
"t",
"q",
"v",
"data"))
63 "getForceGeneratorMatrix",
66 bp::return_value_policy<bp::copy_const_reference>()))
70 .add_property(
"getMinNormalForce", &ContactTwoFrames::getMinNormalForce)
71 .add_property(
"getMaxNormalForce", &ContactTwoFrames::getMaxNormalForce)
76 bp::return_value_policy<bp::copy_const_reference>()))
80 bp::return_value_policy<bp::copy_const_reference>()))
85 bp::arg(
"local_frame"))
87 .def(
"setContactNormal",
89 .def(
"setFrictionCoefficient",
91 bp::args(
"friction_coeff"))
92 .def(
"setMinNormalForce",
94 bp::args(
"min_force"))
95 .def(
"setMaxNormalForce",
97 bp::args(
"max_force"))
100 .def(
"setForceReference",
103 .def(
"setRegularizationTaskWeightVector",
107 static std::string
name(ContactTwoFrames&
self) {
108 std::string
name =
self.name();
114 const Eigen::VectorXd&
q,
115 const Eigen::VectorXd&
v,
117 self.computeMotionTask(
t,
q,
v,
data);
119 self.getMotionConstraint().matrix(),
120 self.getMotionConstraint().
vector());
124 ContactTwoFrames&
self,
const double t,
const Eigen::VectorXd&
q,
126 self.computeForceTask(
t,
q,
v,
data);
128 self.getForceConstraint().matrix(),
129 self.getForceConstraint().lowerBound(),
130 self.getForceConstraint().upperBound());
134 ContactTwoFrames&
self,
const double t,
const Eigen::VectorXd&
q,
136 self.computeForceRegularizationTask(
t,
q,
v,
data);
138 self.getForceRegularizationTask().matrix(),
139 self.getForceRegularizationTask().
vector());
144 self.useLocalFrame(local_frame);
147 ContactTwoFrames&
self) {
148 return self.getForceGeneratorMatrix();
150 static const Eigen::VectorXd&
Kp(ContactTwoFrames&
self) {
return self.Kp(); }
151 static const Eigen::VectorXd&
Kd(ContactTwoFrames&
self) {
return self.Kd(); }
152 static void setKp(ContactTwoFrames&
self, const ::Eigen::VectorXd
Kp) {
155 static void setKd(ContactTwoFrames&
self, const ::Eigen::VectorXd
Kd) {
159 const ::Eigen::MatrixXd ContactTwoFramess) {
160 return self.setContactTwoFramess(ContactTwoFramess);
167 const double frictionCoefficient) {
168 return self.setFrictionCoefficient(frictionCoefficient);
171 const double minNormalForce) {
172 return self.setMinNormalForce(minNormalForce);
175 const double maxNormalForce) {
176 return self.setMaxNormalForce(maxNormalForce);
179 self.setReference(
ref);
182 const ::Eigen::VectorXd f_ref) {
183 self.setForceReference(f_ref);
186 const ::Eigen::VectorXd w) {
187 self.setRegularizationTaskWeightVector(
w);
190 return self.getNormalForce(
f);
193 static void expose(
const std::string& class_name) {
194 std::string doc =
"ContactTwoFrames info.";
195 bp::class_<ContactTwoFrames>(
class_name.c_str(), doc.c_str(), bp::no_init)
202 #endif // ifndef __tsid_python_contact_two_frames_hpp__