| GCC Code Coverage Report | |||||||||||||||||||||
        
  | 
    |||||||||||||||||||||
| Line | Branch | Exec | Source | 
1  | 
    //  | 
    ||
2  | 
    // Copyright (c) 2018 CNRS  | 
    ||
3  | 
    //  | 
    ||
4  | 
    // This file is part of tsid  | 
    ||
5  | 
    // tsid is free software: you can redistribute it  | 
    ||
6  | 
    // and/or modify it under the terms of the GNU Lesser General Public  | 
    ||
7  | 
    // License as published by the Free Software Foundation, either version  | 
    ||
8  | 
    // 3 of the License, or (at your option) any later version.  | 
    ||
9  | 
    // tsid is distributed in the hope that it will be  | 
    ||
10  | 
    // useful, but WITHOUT ANY WARRANTY; without even the implied warranty  | 
    ||
11  | 
    // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  | 
    ||
12  | 
    // General Lesser Public License for more details. You should have  | 
    ||
13  | 
    // received a copy of the GNU Lesser General Public License along with  | 
    ||
14  | 
    // tsid If not, see  | 
    ||
15  | 
    // <http://www.gnu.org/licenses/>.  | 
    ||
16  | 
    //  | 
    ||
17  | 
    |||
18  | 
    #ifndef __tsid_python_robot_wrapper_hpp__  | 
    ||
19  | 
    #define __tsid_python_robot_wrapper_hpp__  | 
    ||
20  | 
    |||
21  | 
    #include "tsid/bindings/python/fwd.hpp"  | 
    ||
22  | 
    |||
23  | 
    #include "tsid/robots/robot-wrapper.hpp"  | 
    ||
24  | 
    |||
25  | 
    namespace tsid { | 
    ||
26  | 
    namespace python { | 
    ||
27  | 
    namespace bp = boost::python;  | 
    ||
28  | 
    |||
29  | 
    template <typename Robot>  | 
    ||
30  | 
    struct RobotPythonVisitor  | 
    ||
31  | 
        : public boost::python::def_visitor<RobotPythonVisitor<Robot> > { | 
    ||
32  | 
    typedef std::vector<std::string> std_vec;  | 
    ||
33  | 
    typedef Eigen::Matrix<double, 3, Eigen::Dynamic> Matrix3x;  | 
    ||
34  | 
    |||
35  | 
    template <class PyClass>  | 
    ||
36  | 
    |||
37  | 
    7  | 
      void visit(PyClass &cl) const { | 
    |
38  | 
    ✓✗ | 7  | 
    cl  | 
    
39  | 
    .def(bp::init<std::string, std_vec, bool>(  | 
    ||
40  | 
                (bp::arg("filename"), bp::arg("package_dir"), bp::arg("verbose")), | 
    ||
41  | 
    "Default constructor without RootJoint."))  | 
    ||
42  | 
    ✓✗✓✗ ✓✗✓✗ ✓✗✓✗  | 
    14  | 
    .def(bp::init<std::string, std_vec, pinocchio::JointModelVariant &,  | 
    
43  | 
                          bool>((bp::arg("filename"), bp::arg("package_dir"), | 
    ||
44  | 
                                 bp::arg("roottype"), bp::arg("verbose")), | 
    ||
45  | 
    "Default constructor with RootJoint."))  | 
    ||
46  | 
    ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗  | 
    14  | 
    .def(bp::init<pinocchio::Model, bool>(  | 
    
47  | 
                (bp::arg("Pinocchio Model"), bp::arg("verbose")), | 
    ||
48  | 
    "Default constructor from pinocchio model without RootJoint."))  | 
    ||
49  | 
    ✓✗✓✗ ✓✗✓✗ ✓✗  | 
    14  | 
    .def(bp::init<pinocchio::Model, robots::RobotWrapper::RootJointType,  | 
    
50  | 
    bool>(  | 
    ||
51  | 
                (bp::arg("Pinocchio Model"), bp::arg("rootJoint"), | 
    ||
52  | 
                 bp::arg("verbose")), | 
    ||
53  | 
    "Default constructor from pinocchio model with RootJoint."))  | 
    ||
54  | 
    ✓✗✓✗ ✓✗✓✗ ✓✗✓✗ ✓✗  | 
    14  | 
            .def("__init__", | 
    
55  | 
    bp::make_constructor(RobotPythonVisitor<Robot>::makeClass))  | 
    ||
56  | 
    ✓✗✓✗ | 
    14  | 
            .add_property("nq", &Robot::nq) | 
    
57  | 
    14  | 
            .add_property("nv", &Robot::nv) | 
    |
58  | 
    ✓✗ | 7  | 
            .add_property("na", &Robot::na) | 
    
59  | 
    ✓✗ | 7  | 
            .add_property("nq_actuated", &Robot::nq_actuated) | 
    
60  | 
    ✓✗ | 7  | 
            .add_property("is_fixed_base", &Robot::is_fixed_base) | 
    
61  | 
    |||
62  | 
    ✓✗ | 7  | 
            .def("model", &RobotPythonVisitor::model) | 
    
63  | 
    ✓✗✓✗ | 
    7  | 
            .def("data", &RobotPythonVisitor::data) | 
    
64  | 
    |||
65  | 
    ✓✗ | 7  | 
            .add_property("rotor_inertias", &RobotPythonVisitor::rotor_inertias) | 
    
66  | 
    ✓✗ | 7  | 
            .add_property("gear_ratios", &RobotPythonVisitor::gear_ratios) | 
    
67  | 
    ✓✗ | 7  | 
            .def("set_rotor_inertias", &RobotPythonVisitor::set_rotor_inertias, | 
    
68  | 
                 bp::arg("inertia vector")) | 
    ||
69  | 
    ✓✗✓✗ | 
    14  | 
            .def("set_gear_ratios", &RobotPythonVisitor::set_gear_ratios, | 
    
70  | 
                 bp::arg("gear ratio vector")) | 
    ||
71  | 
    |||
72  | 
    ✓✗✓✗ | 
    14  | 
            .def("computeAllTerms", &RobotPythonVisitor::computeAllTerms, | 
    
73  | 
                 bp::args("data", "q", "v"), "compute all dynamics") | 
    ||
74  | 
    ✓✗✓✗ | 
    14  | 
            .def("com", &RobotPythonVisitor::com, bp::arg("data")) | 
    
75  | 
    ✓✗✓✗ | 
    14  | 
            .def("com_vel", &RobotPythonVisitor::com_vel, bp::arg("data")) | 
    
76  | 
    ✓✗✓✗ | 
    14  | 
            .def("com_acc", &RobotPythonVisitor::com_acc, bp::arg("data")) | 
    
77  | 
    ✓✗✓✗ | 
    14  | 
            .def("Jcom", &RobotPythonVisitor::Jcom, bp::arg("data")) | 
    
78  | 
    ✓✗✓✗ | 
    14  | 
            .def("mass", &RobotPythonVisitor::mass, bp::arg("data")) | 
    
79  | 
    ✓✗✓✗ | 
    14  | 
            .def("nonLinearEffect", &RobotPythonVisitor::nonLinearEffects, | 
    
80  | 
                 bp::arg("data")) | 
    ||
81  | 
    ✓✗✓✗ | 
    14  | 
            .def("position", &RobotPythonVisitor::position, | 
    
82  | 
                 bp::args("data", "index")) | 
    ||
83  | 
    ✓✗✓✗ | 
    14  | 
            .def("velocity", &RobotPythonVisitor::velocity, | 
    
84  | 
                 bp::args("data", "index")) | 
    ||
85  | 
    ✓✗✓✗ | 
    14  | 
            .def("acceleration", &RobotPythonVisitor::acceleration, | 
    
86  | 
                 bp::args("data", "index")) | 
    ||
87  | 
    |||
88  | 
    ✓✗✓✗ | 
    14  | 
            .def("framePosition", &RobotPythonVisitor::framePosition, | 
    
89  | 
                 bp::args("data", "index")) | 
    ||
90  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameVelocity", &RobotPythonVisitor::frameVelocity, | 
    
91  | 
                 bp::args("data", "index")) | 
    ||
92  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameAcceleration", &RobotPythonVisitor::frameAcceleration, | 
    
93  | 
                 bp::args("data", "index")) | 
    ||
94  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameClassicAcceleration", | 
    
95  | 
    &RobotPythonVisitor::frameClassicAcceleration,  | 
    ||
96  | 
                 bp::args("data", "index")) | 
    ||
97  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameVelocityWorldOriented", | 
    
98  | 
    &RobotPythonVisitor::frameVelocityWorldOriented,  | 
    ||
99  | 
                 bp::args("data", "index")) | 
    ||
100  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameAccelerationWorldOriented", | 
    
101  | 
    &RobotPythonVisitor::frameAccelerationWorldOriented,  | 
    ||
102  | 
                 bp::args("data", "index")) | 
    ||
103  | 
    ✓✗✓✗ | 
    14  | 
            .def("frameClassicAccelerationWorldOriented", | 
    
104  | 
    &RobotPythonVisitor::frameClassicAccelerationWorldOriented,  | 
    ||
105  | 
                 bp::args("data", "index")) | 
    ||
106  | 
    ✓✗✓✗ | 
    14  | 
            .def("angularMomentumTimeVariation", | 
    
107  | 
                 &RobotPythonVisitor::angularMomentumTimeVariation, bp::arg("data")) | 
    ||
108  | 
    ✓✗✓✗ ✓✗  | 
    14  | 
            .def("setGravity", &RobotPythonVisitor::setGravity, bp::arg("gravity")); | 
    
109  | 
    7  | 
    }  | 
    |
110  | 
    |||
111  | 
    5  | 
    static boost::shared_ptr<Robot> makeClass(  | 
    |
112  | 
    const std::string &filename, const std::vector<std::string> &stdvec,  | 
    ||
113  | 
          bp::object &bpObject, bool verbose) { | 
    ||
114  | 
    5  | 
    pinocchio::JointModelFreeFlyer root_joint =  | 
    |
115  | 
    ✓✗✓✗ ✓✗  | 
    5  | 
    bp::extract<pinocchio::JointModelFreeFlyer>(bpObject)();  | 
    
116  | 
    ✓✗✓✗ | 
    10  | 
    boost::shared_ptr<Robot> p(  | 
    
117  | 
    ✓✗✓✗ | 
    5  | 
    new tsid::robots::RobotWrapper(filename, stdvec, root_joint, verbose));  | 
    
118  | 
    10  | 
    return p;  | 
    |
119  | 
    }  | 
    ||
120  | 
    |||
121  | 
    1012  | 
      static pinocchio::Model model(const Robot &self) { return self.model(); } | 
    |
122  | 
    1004  | 
      static pinocchio::Data data(const Robot &self) { | 
    |
123  | 
    1004  | 
    pinocchio::Data data(self.model());  | 
    |
124  | 
    1004  | 
    return data;  | 
    |
125  | 
    }  | 
    ||
126  | 
      static Eigen::VectorXd rotor_inertias(const Robot &self) { | 
    ||
127  | 
    return self.rotor_inertias();  | 
    ||
128  | 
    }  | 
    ||
129  | 
      static Eigen::VectorXd gear_ratios(const Robot &self) { | 
    ||
130  | 
    return self.gear_ratios();  | 
    ||
131  | 
    }  | 
    ||
132  | 
      static bool set_rotor_inertias(Robot &self, Eigen::VectorXd &rotor_inertias) { | 
    ||
133  | 
    return self.rotor_inertias(rotor_inertias);  | 
    ||
134  | 
    }  | 
    ||
135  | 
      static bool set_gear_ratios(Robot &self, Eigen::VectorXd &gear_ratios) { | 
    ||
136  | 
    return self.gear_ratios(gear_ratios);  | 
    ||
137  | 
    }  | 
    ||
138  | 
    |||
139  | 
    3  | 
      static Eigen::Vector3d com(const Robot &self, const pinocchio::Data &data) { | 
    |
140  | 
    3  | 
    return self.com(data);  | 
    |
141  | 
    }  | 
    ||
142  | 
    static Eigen::Vector3d com_vel(const Robot &self,  | 
    ||
143  | 
                                     const pinocchio::Data &data) { | 
    ||
144  | 
    return self.com_vel(data);  | 
    ||
145  | 
    }  | 
    ||
146  | 
    static Eigen::Vector3d com_acc(const Robot &self,  | 
    ||
147  | 
                                     const pinocchio::Data &data) { | 
    ||
148  | 
    return self.com_acc(data);  | 
    ||
149  | 
    }  | 
    ||
150  | 
      static Matrix3x Jcom(const Robot &self, const pinocchio::Data &data) { | 
    ||
151  | 
    return self.Jcom(data);  | 
    ||
152  | 
    }  | 
    ||
153  | 
    6001  | 
    static void computeAllTerms(const Robot &self, pinocchio::Data &data,  | 
    |
154  | 
    const Eigen::VectorXd &q,  | 
    ||
155  | 
                                  const Eigen::VectorXd &v) { | 
    ||
156  | 
    6001  | 
    self.computeAllTerms(data, q, v);  | 
    |
157  | 
    6001  | 
    }  | 
    |
158  | 
      static Eigen::MatrixXd mass(Robot &self, pinocchio::Data &data) { | 
    ||
159  | 
    return self.mass(data);  | 
    ||
160  | 
    }  | 
    ||
161  | 
    static Eigen::VectorXd nonLinearEffects(const Robot &self,  | 
    ||
162  | 
                                              const pinocchio::Data &data) { | 
    ||
163  | 
    return self.nonLinearEffects(data);  | 
    ||
164  | 
    }  | 
    ||
165  | 
    3  | 
    static pinocchio::SE3 position(const Robot &self, const pinocchio::Data &data,  | 
    |
166  | 
                                     const pinocchio::Model::JointIndex &index) { | 
    ||
167  | 
    3  | 
    return self.position(data, index);  | 
    |
168  | 
    }  | 
    ||
169  | 
    static pinocchio::Motion velocity(const Robot &self,  | 
    ||
170  | 
    const pinocchio::Data &data,  | 
    ||
171  | 
                                        const pinocchio::Model::JointIndex &index) { | 
    ||
172  | 
    return self.velocity(data, index);  | 
    ||
173  | 
    }  | 
    ||
174  | 
    static pinocchio::Motion acceleration(  | 
    ||
175  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
176  | 
          const pinocchio::Model::JointIndex &index) { | 
    ||
177  | 
    return self.acceleration(data, index);  | 
    ||
178  | 
    }  | 
    ||
179  | 
    static pinocchio::SE3 framePosition(  | 
    ||
180  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
181  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
182  | 
    return self.framePosition(data, index);  | 
    ||
183  | 
    }  | 
    ||
184  | 
    static pinocchio::Motion frameVelocity(  | 
    ||
185  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
186  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
187  | 
    return self.frameVelocity(data, index);  | 
    ||
188  | 
    }  | 
    ||
189  | 
    static pinocchio::Motion frameAcceleration(  | 
    ||
190  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
191  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
192  | 
    return self.frameAcceleration(data, index);  | 
    ||
193  | 
    }  | 
    ||
194  | 
    static pinocchio::Motion frameClassicAcceleration(  | 
    ||
195  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
196  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
197  | 
    return self.frameClassicAcceleration(data, index);  | 
    ||
198  | 
    }  | 
    ||
199  | 
    static pinocchio::Motion frameVelocityWorldOriented(  | 
    ||
200  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
201  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
202  | 
    return self.frameVelocityWorldOriented(data, index);  | 
    ||
203  | 
    }  | 
    ||
204  | 
    static pinocchio::Motion frameAccelerationWorldOriented(  | 
    ||
205  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
206  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
207  | 
    return self.frameAccelerationWorldOriented(data, index);  | 
    ||
208  | 
    }  | 
    ||
209  | 
    static pinocchio::Motion frameClassicAccelerationWorldOriented(  | 
    ||
210  | 
    const Robot &self, const pinocchio::Data &data,  | 
    ||
211  | 
          const pinocchio::Model::FrameIndex &index) { | 
    ||
212  | 
    return self.frameClassicAccelerationWorldOriented(data, index);  | 
    ||
213  | 
    }  | 
    ||
214  | 
    static Eigen::Vector3d angularMomentumTimeVariation(  | 
    ||
215  | 
          const Robot &self, const pinocchio::Data &data) { | 
    ||
216  | 
    return self.angularMomentumTimeVariation(data);  | 
    ||
217  | 
    }  | 
    ||
218  | 
    1  | 
      static void setGravity(Robot &self, const pinocchio::Motion &gravity) { | 
    |
219  | 
    1  | 
    return self.setGravity(gravity);  | 
    |
220  | 
    }  | 
    ||
221  | 
    7  | 
      static void expose(const std::string &class_name) { | 
    |
222  | 
    ✓✗ | 7  | 
    std::string doc = "Robot Wrapper info.";  | 
    
223  | 
    ✓✗✓✗ | 
    7  | 
    bp::class_<Robot>(class_name.c_str(), doc.c_str(), bp::no_init)  | 
    
224  | 
    .def(RobotPythonVisitor<Robot>());  | 
    ||
225  | 
    ;  | 
    ||
226  | 
        bp::enum_<robots::RobotWrapper::RootJointType>("RootJointType") | 
    ||
227  | 
    ✓✗✓✗ | 
    14  | 
            .value("FIXED_BASE_SYSTEM", robots::RobotWrapper::FIXED_BASE_SYSTEM) | 
    
228  | 
    ✓✗ | 7  | 
            .value("FLOATING_BASE_SYSTEM", | 
    
229  | 
    robots::RobotWrapper::FLOATING_BASE_SYSTEM)  | 
    ||
230  | 
    ✓✗ | 7  | 
    .export_values();  | 
    
231  | 
    7  | 
    }  | 
    |
232  | 
    };  | 
    ||
233  | 
    } // namespace python  | 
    ||
234  | 
    } // namespace tsid  | 
    ||
235  | 
    |||
236  | 
    #endif // ifndef __tsid_python_robot_wrapper_hpp__  | 
    
| Generated by: GCOVR (Version 4.2) |