GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: bindings/python/crocoddyl/multibody/actuations/multicopter-base.cpp Lines: 25 26 96.2 %
Date: 2024-02-13 11:12:33 Branches: 21 42 50.0 %

Line Branch Exec Source
1
///////////////////////////////////////////////////////////////////////////////
2
// BSD 3-Clause License
3
//
4
// Copyright (C) 2019-2023, LAAS-CNRS, University of Edinburgh, IRI: CSIC-UPC
5
//                          Heriot-Watt University
6
// Copyright note valid unless otherwise stated in individual files.
7
// All rights reserved.
8
///////////////////////////////////////////////////////////////////////////////
9
10
#include "crocoddyl/multibody/actuations/multicopter-base.hpp"
11
12
#include "python/crocoddyl/multibody/multibody.hpp"
13
#include "python/crocoddyl/utils/copyable.hpp"
14
15
namespace crocoddyl {
16
namespace python {
17
18
10
void exposeActuationModelMultiCopterBase() {
19
  bp::register_ptr_to_python<
20
10
      boost::shared_ptr<crocoddyl::ActuationModelMultiCopterBase> >();
21
22
10
  bp::class_<ActuationModelMultiCopterBase, bp::bases<ActuationModelAbstract> >(
23
      "ActuationModelMultiCopterBase",
24
      "Actuation models with base actuated by several propellers (e.g. aerial "
25
      "manipulators).",
26
10
      bp::init<boost::shared_ptr<StateMultibody>,
27
               Eigen::Matrix<double, 6, Eigen::Dynamic> >(
28
20
          bp::args("self", "state", "tau_f"),
29
          "Initialize the full actuation model.\n\n"
30
          ":param state: state of multibody system\n"
31
          ":param tau_f: matrix that maps rotors thrust to generalized torque "
32
          "of the flying base."))
33
10
      .def(bp::init<boost::shared_ptr<StateMultibody>, std::size_t,
34
                    Eigen::Matrix<double, 6, Eigen::Dynamic> >(
35
20
          bp::args("self", "state", "nrotors", "tau_f"),
36
          "Initialize the full actuation model.\n\n"
37
          ":param state: state of multibody system, \n"
38
          ":param nrotors: number of rotors of the flying base, \n"
39
          ":param tau_f: matrix that maps rotors thrust to generalized torque "
40
10
          "of the flying base."))
41
      .def<void (ActuationModelMultiCopterBase::*)(
42
          const boost::shared_ptr<ActuationDataAbstract>&,
43
          const Eigen::Ref<const Eigen::VectorXd>&,
44
          const Eigen::Ref<const Eigen::VectorXd>&)>(
45
          "calc", &ActuationModelMultiCopterBase::calc,
46
20
          bp::args("self", "data", "x", "u"),
47
          "Compute the actuation signal and actuation set from the joint "
48
          "torque input u.\n\n"
49
          ":param data: multicopter-base actuation data\n"
50
          ":param x: state point (dim. state.nx)\n"
51
10
          ":param u: joint torque input (dim. nu)")
52
      .def("calcDiff", &ActuationModelMultiCopterBase::calcDiff,
53
20
           bp::args("self", "data", "x", "u"),
54
           "Compute the derivatives of the actuation model.\n\n"
55
           "It computes the partial derivatives of the full actuation. It "
56
           "assumes that calc\n"
57
           "has been run first. The reason is that the derivatives are "
58
           "constant and\n"
59
           "defined in createData. The Hessian is constant, so we don't write "
60
           "again this value.\n"
61
           ":param data: multicopter-base actuation data\n"
62
           ":param x: state point (dim. state.nx)\n"
63
10
           ":param u: joint torque input (dim. nu)")
64
      .def("commands", &ActuationModelMultiCopterBase::commands,
65
20
           bp::args("self", "data", "x", "tau"),
66
           "Compute the joint torque commands from the generalized torques.\n\n"
67
           "It stores the results in data.u.\n"
68
           ":param data: actuation data\n"
69
           ":param x: state point (dim. state.nx)\n"
70
10
           ":param tau: generalized torques (dim state.nv)")
71
      .def("torqueTransform", &ActuationModelMultiCopterBase::torqueTransform,
72
20
           bp::args("self", "data", "x", "tau"),
73
           "Compute the torque transform from generalized torques to joint "
74
           "torque inputs.\n\n"
75
           "It stores the results in data.Mtau.\n"
76
           ":param data: actuation data\n"
77
           ":param x: state point (dim. state.nx)\n"
78
10
           ":param tau: generalized torques (dim state.nv)")
79
      .def("createData", &ActuationModelMultiCopterBase::createData,
80
20
           bp::args("self"),
81
           "Create the multicopter-base actuation data.\n\n"
82
           "Each actuation model (AM) has its own data that needs to be "
83
           "allocated.\n"
84
           "This function returns the allocated data for a predefined AM.\n"
85
10
           ":return AM data.")
86
      .add_property(
87
          "nrotors",
88
20
          bp::make_function(&ActuationModelMultiCopterBase::get_nrotors),
89
10
          "Number of rotors in the flying base")
90
      .add_property(
91
          "tauf",
92
10
          bp::make_function(&ActuationModelMultiCopterBase::get_tauf,
93
                            bp::return_value_policy<bp::return_by_value>()),
94
20
          bp::make_function(&ActuationModelMultiCopterBase::set_tauf),
95
10
          "Matrix mapping from thrusts to body torque")
96
10
      .def(CopyableVisitor<ActuationModelMultiCopterBase>());
97
10
}
98
99
}  // namespace python
100
}  // namespace crocoddyl