MicroMouse Control Module  v1.3.2-2-ge2c6882
trajectory.h
[詳解]
1 
8 #pragma once
9 
10 #include <ctrl/slalom/slalom.h>
11 
15 namespace ctrl {
16 
20 namespace slalom {
21 
27 class Trajectory {
28  public:
35  Trajectory(const Shape& shape, const bool mirror_x = false) : shape(shape) {
36  if (mirror_x) {
37  this->shape.curve = shape.curve.mirror_x();
38  this->shape.total = shape.total.mirror_x();
39  }
40  }
48  void reset(const float velocity, const float th_start = 0,
49  const float t_start = 0) {
50  this->velocity = velocity;
51  const float gain = velocity / shape.v_ref;
52  ad.reset(gain * gain * gain * shape.dddth_max, gain * gain * shape.ddth_max,
53  gain * shape.dth_max, 0, 0, shape.total.th, th_start, t_start);
54  }
63  void update(State& state, const float t, const float Ts,
64  const float k_slip = 0) const {
65  return Shape::integrate(ad, state, velocity, t, Ts, k_slip);
66  }
70  float getVelocity() const { return velocity; }
74  float getTimeCurve() const { return ad.t_end(); }
78  const Shape& getShape() const { return shape; }
82  const AccelDesigner& getAccelDesigner() const { return ad; }
83 
84  protected:
87  float velocity;
88 };
89 
90 } // namespace slalom
91 } // namespace ctrl
拘束条件を満たす曲線加減速の軌道を生成するクラス
Definition: accel_designer.h:33
float t_end() const
終点時刻 [s]
Definition: accel_designer.h:209
void reset(const float j_max, const float a_max, const float v_max, const float v_start, const float v_target, const float dist, const float x_start=0, const float t_start=0)
引数の拘束条件から曲線を生成する関数
Definition: accel_designer.h:70
slalom::Trajectory スラローム軌道を生成するクラス
Definition: trajectory.h:27
float getVelocity() const
並進速度を取得
Definition: trajectory.h:70
AccelDesigner ad
角速度用の曲線加速生成器
Definition: trajectory.h:86
void reset(const float velocity, const float th_start=0, const float t_start=0)
並進速度を設定して軌道を初期化する関数
Definition: trajectory.h:48
float getTimeCurve() const
ターンの合計時間を取得
Definition: trajectory.h:74
const AccelDesigner & getAccelDesigner() const
角速度設計器を取得
Definition: trajectory.h:82
Trajectory(const Shape &shape, const bool mirror_x=false)
コンストラクタ
Definition: trajectory.h:35
const Shape & getShape() const
スラローム形状を取得
Definition: trajectory.h:78
void update(State &state, const float t, const float Ts, const float k_slip=0) const
軌道の更新
Definition: trajectory.h:63
Shape shape
スラロームの形状
Definition: trajectory.h:85
float velocity
並進速度
Definition: trajectory.h:87
制御関係の名前空間
Definition: accel_curve.h:54
拘束条件からスラロームを軌道生成するライブラリ
Pose mirror_x() const
Definition: pose.h:27
float th
theta 成分 [rad]
Definition: pose.h:21
軌道制御の状態変数
Definition: state.h:20
slalom::Shape スラロームの形状を表す構造体
Definition: slalom.h:48
float v_ref
カーブ部分の基準速度 [m/s]
Definition: slalom.h:53
Pose total
前後の直線を含めた移動位置姿勢
Definition: slalom.h:49
Pose curve
カーブ部分の移動位置姿勢
Definition: slalom.h:50
static void integrate(const AccelDesigner &ad, State &s, const float v, const float t, const float Ts, const float k_slip=0)
軌道の積分を行う関数。ルンゲクッタ法を使用して数値積分を行う。
Definition: slalom.h:144
float dddth_max
最大角躍度の大きさ [rad/s/s/s]
Definition: slalom.h:54
float ddth_max
最大角加速度の大きさ [rad/s/s]
Definition: slalom.h:55
float dth_max
最大角速度の大きさ [rad/s]
Definition: slalom.h:56