COPP C++ API
C++ interface for COPP trajectory optimization
Loading...
Searching...
No Matches
eigen.hpp
Go to the documentation of this file.
1#pragma once
2
3#ifndef COPP_CPP_WITH_EIGEN
4#define COPP_CPP_WITH_EIGEN 1
5#endif
6
7#if !COPP_CPP_WITH_EIGEN
8#error "copp/eigen.hpp requires COPP_CPP_WITH_EIGEN=1"
9#endif
10
11#include <Eigen/Core>
12
13#include "copp/core.hpp"
14
15namespace copp::eigen
16{
17
19 using ColMajorMatrix = Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>;
21 using RowMajorMatrix = Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
23 using Vector = Eigen::Matrix<double, Eigen::Dynamic, 1>;
24
35 inline MatrixView matrix_view(const Eigen::Ref<const ColMajorMatrix> &matrix)
36 {
37 if (matrix.innerStride() != 1)
38 {
39 throw Error(Status::invalid_input, "Eigen column-major MatrixView requires innerStride == 1");
40 }
42 matrix.data(),
43 static_cast<std::size_t>(matrix.rows()),
44 static_cast<std::size_t>(matrix.cols()),
45 static_cast<std::size_t>(matrix.outerStride()));
46 }
47
53 inline MatrixView matrix_view(const Eigen::Ref<const RowMajorMatrix> &matrix)
54 {
55 if (matrix.innerStride() != 1)
56 {
57 throw Error(Status::invalid_input, "Eigen row-major MatrixView requires innerStride == 1");
58 }
59 return MatrixView(
60 matrix.data(),
61 static_cast<std::size_t>(matrix.rows()),
62 static_cast<std::size_t>(matrix.cols()),
64 static_cast<std::size_t>(matrix.outerStride()));
65 }
66
68 inline Span<const double> span(const Eigen::Ref<const Vector> &vector)
69 {
70 if (vector.innerStride() != 1)
71 {
72 throw Error(Status::invalid_input, "Eigen vector Span requires innerStride == 1");
73 }
74 return Span<const double>(vector.data(), static_cast<std::size_t>(vector.size()));
75 }
76
81 inline Eigen::Map<ColMajorMatrix> map(Matrix &matrix)
82 {
83 return Eigen::Map<ColMajorMatrix>(
84 matrix.data(),
85 static_cast<Eigen::Index>(matrix.rows()),
86 static_cast<Eigen::Index>(matrix.cols()));
87 }
88
90 inline Eigen::Map<const ColMajorMatrix> map(const Matrix &matrix)
91 {
92 return Eigen::Map<const ColMajorMatrix>(
93 matrix.data(),
94 static_cast<Eigen::Index>(matrix.rows()),
95 static_cast<Eigen::Index>(matrix.cols()));
96 }
97
99 inline ColMajorMatrix copy(const Matrix &matrix)
100 {
101 return map(matrix);
102 }
103
104} // namespace copp::eigen
Lightweight owned column-major matrix.
Definition core.hpp:352
std::size_t cols() const noexcept
Definition core.hpp:467
std::size_t rows() const noexcept
Definition core.hpp:466
double * data() noexcept
Definition core.hpp:471
Non-owning view of a two-dimensional double matrix.
Definition core.hpp:205
static constexpr MatrixView strided_column_major(const double *data, std::size_t rows, std::size_t cols, std::size_t leading_dim) noexcept
Definition core.hpp:225
Non-owning view of a contiguous one-dimensional array.
Definition core.hpp:139
Optional Eigen adapters that convert Eigen objects to COPP matrix views or map COPP-owned matrices wi...
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > ColMajorMatrix
Dynamic column-major Eigen matrix type matching copp::Matrix storage.
Definition eigen.hpp:19
ColMajorMatrix copy(const Matrix &matrix)
Copy a COPP matrix into an owning Eigen column-major matrix.
Definition eigen.hpp:99
Eigen::Matrix< double, Eigen::Dynamic, 1 > Vector
Dynamic Eigen vector accepted by Span adapters.
Definition eigen.hpp:23
Eigen::Map< ColMajorMatrix > map(Matrix &matrix)
Map a mutable COPP matrix into Eigen without copying.
Definition eigen.hpp:81
Span< const double > span(const Eigen::Ref< const Vector > &vector)
Borrow a contiguous Eigen vector as Span<const double>.
Definition eigen.hpp:68
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > RowMajorMatrix
Dynamic row-major Eigen matrix accepted by input adapters.
Definition eigen.hpp:21
MatrixView matrix_view(const Eigen::Ref< const ColMajorMatrix > &matrix)
Borrow a column-major Eigen matrix as a COPP matrix view.
Definition eigen.hpp:35
@ invalid_input
Definition core.hpp:37
@ Error
Throw copp::Error when any query sample is outside [s_min, s_max].
Definition path.hpp:299