Chassis v2.1.1
Chassisはロボコンでの足回り制御を行うためのC++ライブラリである。
Loading...
Searching...
No Matches
Odom.h
Go to the documentation of this file.
1#ifndef CHASSIS_ODOM_H_
2#define CHASSIS_ODOM_H_
7#include <CoordinateUnit.h>
8
9#include <cmath>
10#include <utility>
11
12namespace rct {
13
17
20template<int N>
21struct Odom {
22 static_assert(N > 0, "template parameter N must be greater than 0");
23
26 Odom(const Coordinate& pos = {}) : pos_{pos} {}
29 static constexpr int size() noexcept {
30 return N;
31 }
32
35 void integrate(const int (&dif_val)[N]) {
36 constexpr float pi_N = M_PI / N;
37 const float tmp_rad = pos_.ang_rad;
38 for(int i = 0; i < N; ++i) {
39 pos_.x_milli += dif_val[i] * cos((2 * i + 1) * pi_N + tmp_rad);
40 pos_.y_milli += dif_val[i] * sin((2 * i + 1) * pi_N + tmp_rad);
41 pos_.ang_rad += dif_val[i];
42 }
43 }
44
49 return pos_;
50 }
51 Coordinate get() && noexcept {
52 return std::move(pos_);
53 }
55
58 void set(const Coordinate& pos) noexcept {
59 pos_ = pos;
60 }
61
62 private:
63 Coordinate pos_;
64};
65
67
68} // namespace rct
69
70#endif // CHASSIS_ODOM_H_
座標、速度を表す構造体 CoordinateUnit を提供する。
robot control library
Definition Chassis.h:16
float x_milli
x変位[mm]
float y_milli
y変位[mm]
float ang_rad
角変位[rad]
N個のエンコーダでオドメトリを行うクラス。
Definition Odom.h:21
Coordinate get() &&noexcept
推定された自己位置を返す。
Definition Odom.h:51
void set(const Coordinate &pos) noexcept
自己位置を更新する。
Definition Odom.h:58
static constexpr int size() noexcept
エンコーダ数を返す。
Definition Odom.h:29
void integrate(const int(&dif_val)[N])
エンコーダの変位の変化量を積分し、自己位置を計算する。
Definition Odom.h:35
Odom(const Coordinate &pos={})
コンストラクタ。現在位置を初期化する。
Definition Odom.h:26
const Coordinate & get() const &noexcept
推定された自己位置を返す。
Definition Odom.h:48
N輪オムニの制御を行うクラス。
Definition Omni.h:25