filter_utilities.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, 2015, 2016, Charles River Analytics, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following
13  * disclaimer in the documentation and/or other materials provided
14  * with the distribution.
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
35 
36 #include <string>
37 #include <vector>
38 
39 std::ostream& operator<<(std::ostream& os, const Eigen::MatrixXd &mat)
40 {
41  os << "[";
42 
43  int rowCount = static_cast<int>(mat.rows());
44 
45  for (int row = 0; row < rowCount; ++row)
46  {
47  if (row > 0)
48  {
49  os << " ";
50  }
51 
52  for (int col = 0; col < mat.cols(); ++col)
53  {
54  os << std::setiosflags(std::ios::left) << std::setw(12) << std::setprecision(5) << mat(row, col);
55  }
56 
57  if (row < rowCount - 1)
58  {
59  os << "\n";
60  }
61  }
62 
63  os << "]\n";
64 
65  return os;
66 }
67 
68 std::ostream& operator<<(std::ostream& os, const Eigen::VectorXd &vec)
69 {
70  os << "[";
71  for (int dim = 0; dim < vec.rows(); ++dim)
72  {
73  os << std::setiosflags(std::ios::left) << std::setw(12) << std::setprecision(5) << vec(dim);
74  }
75  os << "]\n";
76 
77  return os;
78 }
79 
80 std::ostream& operator<<(std::ostream& os, const std::vector<size_t> &vec)
81 {
82  os << "[";
83  for (size_t dim = 0; dim < vec.size(); ++dim)
84  {
85  os << std::setiosflags(std::ios::left) << std::setw(12) << std::setprecision(5) << vec[dim];
86  }
87  os << "]\n";
88 
89  return os;
90 }
91 
92 std::ostream& operator<<(std::ostream& os, const std::vector<int> &vec)
93 {
94  os << "[";
95  for (size_t dim = 0; dim < vec.size(); ++dim)
96  {
97  os << std::setiosflags(std::ios::left) << std::setw(3) << (vec[dim] ? "t" : "f");
98  }
99  os << "]\n";
100 
101  return os;
102 }
103 
104 namespace RobotLocalization
105 {
106 
107 namespace FilterUtilities
108 {
109  void appendPrefix(std::string tfPrefix, std::string &frameId)
110  {
111  // Strip all leading slashes for tf2 compliance
112  if (!frameId.empty() && frameId.at(0) == '/')
113  {
114  frameId = frameId.substr(1);
115  }
116 
117  if (!tfPrefix.empty() && tfPrefix.at(0) == '/')
118  {
119  tfPrefix = tfPrefix.substr(1);
120  }
121 
122  // If we do have a tf prefix, then put a slash in between
123  if (!tfPrefix.empty())
124  {
125  frameId = tfPrefix + "/" + frameId;
126  }
127  }
128 
129  double clampRotation(double rotation)
130  {
131  while (rotation > PI)
132  {
133  rotation -= TAU;
134  }
135 
136  while (rotation < -PI)
137  {
138  rotation += TAU;
139  }
140 
141  return rotation;
142  }
143 
144 } // namespace FilterUtilities
145 
146 } // namespace RobotLocalization
void appendPrefix(std::string tfPrefix, std::string &frameId)
Utility method for appending tf2 prefixes cleanly.
std::ostream & operator<<(std::ostream &os, const Eigen::MatrixXd &mat)
const double TAU
Definition: filter_common.h:92
double clampRotation(double rotation)
Utility method keeping RPY angles in the range [-pi, pi].
const double PI
Common variables.
Definition: filter_common.h:91


robot_localization
Author(s): Tom Moore
autogenerated on Wed Feb 3 2021 03:34:02