pinocchio 4.1.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Loading...
Searching...
No Matches
model.hpp
1//
2// Copyright (c) 2021-2025 INRIA
3//
4
5#pragma once
6
7#include <eigenpy/eigen-to-python.hpp>
8#include <eigenpy/copyable.hpp>
9
10#include "pinocchio/multibody/pool.hpp"
11
12#include <boost/python/overloads.hpp>
13#include <eigenpy/memory.hpp>
14#include <eigenpy/exception.hpp>
15
16#include "pinocchio/algorithm/check.hpp"
17#include "pinocchio/bindings/python/utils/std-vector.hpp"
18
19namespace pinocchio
20{
21 namespace python
22 {
23 namespace bp = boost::python;
24
25 template<typename ModelPool>
26 struct ModelPoolPythonVisitor : public bp::def_visitor<ModelPoolPythonVisitor<ModelPool>>
27 {
28
29 typedef typename ModelPool::Model Model;
30 typedef typename ModelPool::Data Data;
31 typedef typename ModelPool::ModelVector ModelVector;
32 typedef typename ModelPool::DataVector DataVector;
33
34 /* --- Exposing C++ API to python through the handler ----------------- */
35 template<class PyClass>
36 void visit(PyClass & cl) const
37 {
38 cl.def(
39 bp::init<const Model &, bp::optional<size_t>>(
40 bp::args("self", "model", "size"), "Default constructor."))
41 .def(bp::init<const ModelPool &>(bp::args("self", "other"), "Copy constructor."))
42
43 .def(
44 "getModel", (Model & (ModelPool::*)(const size_t)) & ModelPool::getModel,
45 bp::args("self", "index"), "Return a specific model.",
46 bp::return_internal_reference<>())
47 .def(
48 "getModels", (ModelVector & (ModelPool::*)()) & ModelPool::getModels, bp::arg("self"),
49 "Returns the model vectors.", bp::return_internal_reference<>())
50
51 .def(
52 "getData", (Data & (ModelPool::*)(const size_t)) & ModelPool::getData,
53 bp::args("self", "index"), "Return a specific data.", bp::return_internal_reference<>())
54 .def(
55 "getDatas", (DataVector & (ModelPool::*)()) & ModelPool::getDatas, bp::arg("self"),
56 "Returns the data vectors.", bp::return_internal_reference<>())
57
58 .def("size", &ModelPool::size, bp::arg("self"), "Returns the size of the pool.")
59 .def("resize", &ModelPool::resize, bp::args("self", "new_size"), "Resize the pool.")
60
61 .def(
62 "update", (void (ModelPool::*)(const Data &))&ModelPool::update,
63 bp::args("self", "data"), "Update all the datas with the input data value.");
64 }
65
66 static void expose()
67 {
68
69 bp::class_<ModelPool>(
70 "ModelPool", "Pool containing a model and several datas for parallel computations",
71 bp::no_init)
73 .def(::eigenpy::CopyableVisitor<ModelPool>());
74
75 StdVectorPythonVisitor<ModelVector>::expose("StdVec_Model");
76 StdVectorPythonVisitor<DataVector>::expose("StdVec_Data");
77 }
78 };
79 } // namespace python
80} // namespace pinocchio
Main pinocchio namespace.
Definition treeview.dox:11