Chassis v2.1.1
Chassisはロボコンでの足回り制御を行うためのC++ライブラリである。
Loading...
Searching...
No Matches
SteerDrive.h
Go to the documentation of this file.
1#ifndef CHASSIS_STEER_DRIVE_H_
2#define CHASSIS_STEER_DRIVE_H_
7#include <CoordinateUnit.h>
8
9#include <array>
10#include <cmath>
11#include <complex>
12#include <functional>
13#include <utility>
14
15namespace rct {
16
19
22template<int N>
23struct SteerDrive {
24 static_assert(N > 0, "template parameter N must be greater than 0");
25
29 template<class F>
30 SteerDrive(F&& f) : f_{std::forward<F>(f)} {}
31
34 static constexpr int size() noexcept {
35 return N;
36 }
37
41 void move(const Velocity& vel, float offset_rad = 0.0) {
42 std::array<std::complex<float>, N> vels;
43 const std::complex<float> rotate = std::polar<float>(vel.ang_rad, 0);
44 for(int i = 0; i < N; ++i) {
45 float ang = -offset_rad - M_PI / N * (2 * i + 1) + std::atan2(vel.y_milli, vel.x_milli);
46 const std::complex<float> vel_fix = std::polar<float>(std::hypot(vel.x_milli, vel.y_milli), ang);
47 vels[i] = vel_fix + rotate;
48 }
49 f_(std::move(vels));
50 }
51 private:
52 std::function<void(std::array<std::complex<float>, N>)> f_;
53};
54
56
57} // namespace rct
58
59#endif // CHASSIS_STEER_DRIVE_H_
座標、速度を表す構造体 CoordinateUnit を提供する。
robot control library
Definition Chassis.h:16
N輪オムニの制御を行うクラス。
Definition Omni.h:25
N輪独立ステアリング駆動機
Definition SteerDrive.h:23
void move(const Velocity &vel, float offset_rad=0.0)
モータへのPWM出力を計算する。その後callback関数にPWM出力を渡す。
Definition SteerDrive.h:41
SteerDrive(F &&f)
コンストラクタ。callback関数をセットする。
Definition SteerDrive.h:30
static constexpr int size() noexcept
モータ数を返す。
Definition SteerDrive.h:34