Directory: | ./ |
---|---|
File: | bindings/python/crocoddyl/multibody/contact-base.hpp |
Date: | 2025-03-26 19:23:43 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 4 | 27 | 14.8% |
Branches: | 2 | 54 | 3.7% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /////////////////////////////////////////////////////////////////////////////// | ||
2 | // BSD 3-Clause License | ||
3 | // | ||
4 | // Copyright (C) 2019-2025, LAAS-CNRS, University of Edinburgh, | ||
5 | // Heriot-Watt University | ||
6 | // Copyright note valid unless otherwise stated in individual files. | ||
7 | // All rights reserved. | ||
8 | /////////////////////////////////////////////////////////////////////////////// | ||
9 | |||
10 | #ifndef BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_ | ||
11 | #define BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_ | ||
12 | |||
13 | #include "crocoddyl/multibody/contact-base.hpp" | ||
14 | #include "python/crocoddyl/multibody/multibody.hpp" | ||
15 | |||
16 | namespace crocoddyl { | ||
17 | namespace python { | ||
18 | |||
19 | template <typename Scalar> | ||
20 | class ContactModelAbstractTpl_wrap | ||
21 | : public ContactModelAbstractTpl<Scalar>, | ||
22 | public bp::wrapper<ContactModelAbstractTpl<Scalar>> { | ||
23 | public: | ||
24 | EIGEN_MAKE_ALIGNED_OPERATOR_NEW | ||
25 | ✗ | CROCODDYL_DERIVED_CAST(ContactModelBase, ContactModelAbstractTpl_wrap) | |
26 | |||
27 | typedef typename crocoddyl::ContactModelAbstractTpl<Scalar> ContactModel; | ||
28 | typedef typename crocoddyl::ContactDataAbstractTpl<Scalar> ContactData; | ||
29 | typedef typename ContactModel::VectorXs VectorXs; | ||
30 | typedef typename ContactModel::StateMultibody State; | ||
31 | using ContactModel::nc_; | ||
32 | using ContactModel::nu_; | ||
33 | using ContactModel::state_; | ||
34 | using ContactModel::type_; | ||
35 | |||
36 | 2 | ContactModelAbstractTpl_wrap(std::shared_ptr<State> state, | |
37 | const pinocchio::ReferenceFrame type, | ||
38 | std::size_t nc, std::size_t nu) | ||
39 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | : ContactModel(state, type, nc, nu) {} |
40 | 9 | ContactModelAbstractTpl_wrap(std::shared_ptr<State> state, | |
41 | const pinocchio::ReferenceFrame type, | ||
42 | std::size_t nc) | ||
43 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
18 | : ContactModel(state, type, nc) {} |
44 | |||
45 | ✗ | void calc(const std::shared_ptr<ContactData>& data, | |
46 | const Eigen::Ref<const VectorXs>& x) override { | ||
47 | ✗ | assert_pretty(static_cast<std::size_t>(x.size()) == state_->get_nx(), | |
48 | "x has wrong dimension"); | ||
49 | ✗ | return bp::call<void>(this->get_override("calc").ptr(), data, (VectorXs)x); | |
50 | } | ||
51 | |||
52 | ✗ | void calcDiff(const std::shared_ptr<ContactData>& data, | |
53 | const Eigen::Ref<const VectorXs>& x) override { | ||
54 | ✗ | assert_pretty(static_cast<std::size_t>(x.size()) == state_->get_nx(), | |
55 | "x has wrong dimension"); | ||
56 | ✗ | return bp::call<void>(this->get_override("calcDiff").ptr(), data, | |
57 | ✗ | (VectorXs)x); | |
58 | } | ||
59 | |||
60 | ✗ | void updateForce(const std::shared_ptr<ContactData>& data, | |
61 | const VectorXs& force) override { | ||
62 | ✗ | assert_pretty(static_cast<std::size_t>(force.size()) == nc_, | |
63 | "force has wrong dimension"); | ||
64 | ✗ | return bp::call<void>(this->get_override("updateForce").ptr(), data, force); | |
65 | } | ||
66 | |||
67 | ✗ | std::shared_ptr<ContactData> createData( | |
68 | pinocchio::DataTpl<Scalar>* const data) override { | ||
69 | ✗ | enableMultithreading() = false; | |
70 | ✗ | if (boost::python::override createData = this->get_override("createData")) { | |
71 | return bp::call<std::shared_ptr<ContactData>>(createData.ptr(), | ||
72 | ✗ | boost::ref(data)); | |
73 | } | ||
74 | ✗ | return ContactModel::createData(data); | |
75 | } | ||
76 | |||
77 | ✗ | std::shared_ptr<ContactData> default_createData( | |
78 | pinocchio::DataTpl<Scalar>* const data) { | ||
79 | ✗ | return this->ContactModel::createData(data); | |
80 | } | ||
81 | |||
82 | template <typename NewScalar> | ||
83 | ✗ | ContactModelAbstractTpl_wrap<NewScalar> cast() const { | |
84 | typedef ContactModelAbstractTpl_wrap<NewScalar> ReturnType; | ||
85 | typedef StateMultibodyTpl<NewScalar> StateType; | ||
86 | ✗ | ReturnType ret( | |
87 | ✗ | std::make_shared<StateType>(state_->template cast<NewScalar>()), type_, | |
88 | ✗ | nc_, nu_); | |
89 | ✗ | return ret; | |
90 | } | ||
91 | }; | ||
92 | |||
93 | } // namespace python | ||
94 | } // namespace crocoddyl | ||
95 | |||
96 | #endif // BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_ | ||
97 |