NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
polynomial_basis.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 
19 #ifndef TRAJ_OPT_PRO_POLYNOMIAL_BASIS_H_
20 #define TRAJ_OPT_PRO_POLYNOMIAL_BASIS_H_
21 
23 
24 #include <boost/make_shared.hpp>
25 #include <boost/math/special_functions/binomial.hpp>
26 #include <boost/math/tools/polynomial.hpp>
27 #include <cassert>
28 #include <cmath>
29 #include <memory>
30 #include <vector>
31 
32 namespace traj_opt {
33 
34 class PolyCalculusPro : public PolyCalculus {
35  public:
36  static Poly bernstein_polynomial(typename Poly::size_type n,
37  typename Poly::size_type i);
38  // see wikipedia page
39  static Poly chebyshev_polynomial(typename Poly::size_type);
40  // see wikipedia page
41  static Poly shifted_legendre(typename Poly::size_type n);
42  // shifted legensdre polynomial of order n
43 };
44 
45 // shifted Legendre bais
46 class LegendreBasis : public StandardBasis {
47  public:
48  LegendreBasis(uint n_p_, uint k_r_);
49  decimal_t innerproduct(uint i, uint j) const override;
50 };
51 // bezier basis
52 class BezierBasis : public StandardBasis {
53  public:
54  explicit BezierBasis(uint n_p_);
55 };
56 // basis specified by endpoint containers
57 class EndPointBasis : public StandardBasis {
58  public:
59  explicit EndPointBasis(uint n_p_);
60 };
61 // Chebyshevs
62 class ChebyshevBasis : public StandardBasis {
63  public:
64  explicit ChebyshevBasis(uint n_p_);
65 };
66 
67 class BasisBundlePro : public BasisBundle {
68  public:
69  BasisBundlePro(PolyType type, uint n_p_, uint k_r_);
70 };
71 
73  public:
74  BasisTransformer(boost::shared_ptr<StandardBasis> from,
75  int derr = 0); // default to standard basis
76  BasisTransformer(boost::shared_ptr<StandardBasis> from,
77  boost::shared_ptr<StandardBasis> to, int derr = 0);
79  const MatD &getLinearTransform(
80  decimal_t a,
81  decimal_t b); // transforms coefficents by p(at+b) assuming a \neq 0
82  private:
83  MatD basisbasis_, scaledtranform_;
84  MatD A, B, Ainv, Binv;
85  boost::shared_ptr<StandardBasis> to_, from_;
86  int n;
87 };
88 } // namespace traj_opt
89 #endif // TRAJ_OPT_PRO_POLYNOMIAL_BASIS_H_
traj_opt::BezierBasis::BezierBasis
BezierBasis(uint n_p_)
Definition: polynomial_basis.cpp:114
traj_opt::PolyType
PolyType
Definition: traj_data.h:27
traj_opt::MatD
Eigen::Matrix< decimal_t, Eigen::Dynamic, Eigen::Dynamic > MatD
Definition: types.h:51
traj_opt::ChebyshevBasis::ChebyshevBasis
ChebyshevBasis(uint n_p_)
Definition: polynomial_basis.cpp:120
traj_opt::EndPointBasis
Definition: polynomial_basis.h:57
traj_opt::BasisTransformer::getBasisBasisTransform
const MatD & getBasisBasisTransform()
Definition: polynomial_basis.cpp:229
traj_opt::StandardBasis
Definition: polynomial_basis.h:105
traj_opt::BasisBundle
Definition: polynomial_basis.h:71
traj_opt::EndPointBasis::EndPointBasis
EndPointBasis(uint n_p_)
Definition: polynomial_basis.cpp:131
traj_opt::decimal_t
double decimal_t
Definition: types.h:35
traj_opt::BasisTransformer::getLinearTransform
const MatD & getLinearTransform(decimal_t a, decimal_t b)
Definition: polynomial_basis.cpp:233
traj_opt::BasisBundlePro
Definition: polynomial_basis.h:67
traj_opt::PolyCalculusPro::chebyshev_polynomial
static Poly chebyshev_polynomial(typename Poly::size_type)
Definition: polynomial_basis.cpp:50
traj_opt::LegendreBasis::innerproduct
decimal_t innerproduct(uint i, uint j) const override
Definition: polynomial_basis.cpp:169
traj_opt::BasisBundlePro::BasisBundlePro
BasisBundlePro(PolyType type, uint n_p_, uint k_r_)
Definition: polynomial_basis.cpp:258
traj_opt
Definition: msg_traj.h:27
traj_opt::ChebyshevBasis
Definition: polynomial_basis.h:62
traj_opt::PolyCalculusPro
Definition: polynomial_basis.h:34
traj_opt::PolyCalculusPro::shifted_legendre
static Poly shifted_legendre(typename Poly::size_type n)
Definition: polynomial_basis.cpp:71
traj_opt::BezierBasis
Definition: polynomial_basis.h:52
traj_opt::PolyCalculusPro::bernstein_polynomial
static Poly bernstein_polynomial(typename Poly::size_type n, typename Poly::size_type i)
Definition: polynomial_basis.cpp:32
traj_opt::LegendreBasis::LegendreBasis
LegendreBasis(uint n_p_, uint k_r_)
Definition: polynomial_basis.cpp:90
traj_opt::LegendreBasis
Definition: polynomial_basis.h:46
traj_opt::PolyCalculus
Definition: polynomial_basis.h:63
traj_opt::BasisTransformer
Definition: polynomial_basis.h:72
traj_opt::Poly
boost::math::tools::polynomial< decimal_t > Poly
Definition: polynomial_basis.h:61
traj_opt::BasisTransformer::BasisTransformer
BasisTransformer(boost::shared_ptr< StandardBasis > from, int derr=0)
Definition: polynomial_basis.cpp:188
polynomial_basis.h