0
点赞
收藏
分享

微信扫一扫

Apollo\modules\planning\common\trajectory1d\ConstantJerkTrajectory1d类代码详解

概述

对constant_jerk_trajectory1d.cc和.h进行解析,来了解ConstantJerkTrajectory1d类的使用。

从名字字面意义来看是 常数加加速度1维轨迹类。

从代码来看该类实现的功能非常简单:
ConstantJerkTrajectory1d类其实主要就是实现车辆匀加加速度运动过程中,根据时间t对纵向相对位置s,速度v,加速度a等的插值计算功能。

constant_jerk_trajectory1d.h

#pragma once

#include <string>

#include "modules/planning/math/curve1d/curve1d.h"

namespace apollo {
namespace planning {

class ConstantJerkTrajectory1d : public Curve1d {
 public:
 //ConstantJerkTrajectory1d类带参构造函数
 //根据下面代码p0是初始纵向位置
 //v0是初速度,a0是初始加速度
 //j就是加加速度
 //param就是匀加加速运动持续总时间
  ConstantJerkTrajectory1d(const double p0, const double v0, const double a0,
                           const double jerk, const double param);
  //默认析构函数
  virtual ~ConstantJerkTrajectory1d() = default;
 //Apollo看到Evaluate里多半是插值,根据时间param即阶数order,实现匀加加速过程中对位移
//速度,加速度及加加速度的插值
  double Evaluate(const std::uint32_t order, const double param) const;

 //下面都是一些返回数据成员的函数,包括匀加加速度的时间,位移,速度,加速度,加加速度等
  double ParamLength() const;

  std::string ToString() const;

  double start_position() const;

  double start_velocity() const;

  double start_acceleration() const;

  double end_position() const;

  double end_velocity() const;

  double end_acceleration() const;

  double jerk() const;

 private:
  double p0_;
  double v0_;
  double a0_;

  double p1_;
  double v1_;
  double a1_;

  double param_;

  double jerk_;
};

}  // namespace planning
}  // namespace apollo

constant_jerk_trajectory1d.cc

#include "modules/planning/common/trajectory1d/constant_jerk_trajectory1d.h"

#include "cyber/common/log.h"
#include "modules/planning/common/planning_gflags.h"

namespace apollo {
namespace planning {
//ConstantJerkTrajectory1d类带参构造函数
//根据下面代码p0是初始纵向位置
//v0是初速度,a0是初始加速度
//j就是加加速度
//param就是匀加加速运动持续总时间
ConstantJerkTrajectory1d::ConstantJerkTrajectory1d(const double p0,
                                                   const double v0,
                                                   const double a0,
                                                   const double j,
                                                   const double param)
    : p0_(p0), v0_(v0), a0_(a0), param_(param), jerk_(j) { //参数用来初始化类成员
  //CHECK_GT判断   param > FLAGS_numerical_epsilon?
  //FLAGS_numerical_epsilon去modules\planning\common\planning_gflags.cc中
  //取出numerical_epsilon的值 1e-6,否则报错
  CHECK_GT(param, FLAGS_numerical_epsilon);
  //计算匀加加速运动的终点的相对纵向位置
  p1_ = Evaluate(0, param_); //根据时间零阶插值即为位移
  //计算匀加加速运动的终点的速度
  v1_ = Evaluate(1, param_);//根据时间1阶插值即为速度
  //计算匀加加速运动的终点的加速度
  a1_ = Evaluate(2, param_);//根据时间2阶插值即为加速度
}

//Apollo看到Evaluate里多半是插值,根据时间param即阶数order,实现匀加加速过程中对位移
//速度,加速度及加加速度的插值
double ConstantJerkTrajectory1d::Evaluate(const std::uint32_t order,
                                          const double param) const {
  switch (order) {
    case 0: {
      return p0_ + v0_ * param + 0.5 * a0_ * param * param +
             jerk_ * param * param * param / 6.0;
    }
    case 1: {
      return v0_ + a0_ * param + 0.5 * jerk_ * param * param;
    }
    case 2: {
      return a0_ + jerk_ * param;
    }
    case 3: {
      return jerk_;
    }
    default:
      return 0.0;
  }
}

//下面都是一些返回数据成员的函数,包括匀加加速度的时间,位移,速度,加速度,加加速度等
double ConstantJerkTrajectory1d::start_position() const { return p0_; }

double ConstantJerkTrajectory1d::start_velocity() const { return v0_; }

double ConstantJerkTrajectory1d::start_acceleration() const { return a0_; }

double ConstantJerkTrajectory1d::end_position() const { return p1_; }

double ConstantJerkTrajectory1d::end_velocity() const { return v1_; }

double ConstantJerkTrajectory1d::end_acceleration() const { return a1_; }

double ConstantJerkTrajectory1d::ParamLength() const { return param_; }

std::string ConstantJerkTrajectory1d::ToString() const { return ""; }

double ConstantJerkTrajectory1d::jerk() const { return jerk_; }

}  // namespace planning
}  // namespace apollo

举报

相关推荐

%1$@、 %2$@、 %1$d

Linux (D1

AdaptiveAvgPool1D

1. Kine3D-1简介

D1、HTML基础练习

PKUWC D1T3

D1. 388535 (Easy Version)

nerf-pytorch3D 代码详解

0 条评论