概述
对standing_still_trajectory1d.cc和.h进行解析,来了解StandingStillTrajectory1d类的使用。
从名字字面意义来看是 驻车1维轨迹类?
standstill驻车,类似原地踩住刹车
从代码来看该类实现的功能:
参考我的前几篇各种1维轨迹类博客
PiecewiseJerkTrajectory1d类
PiecewiseAccelerationTrajectory1d类
ConstantJerkTrajectory1d类
ConstantDecelerationTrajectory1d类
StandingStillTrajectory1d类实现的功能和上述链接也非常类似,就是实现了原地驻车过程中,根据时间t去插值计算s,v,a,j
这还有必要吗?
原地驻车插值就两个重要参数,一个驻车位置fixed_position_(也就是驻车的纵向位置s),还有一个驻车时间duration_,其他v,a,j根本用不着插值都是0.0,下面代码里也是直接返回0,因为和前面几篇博客代码高度类似,不再重复解析,直接贴上相关代码。
*fixed_position_和duration_都是StandingStillTrajectory1d类的数据成员
standing_still_trajectory1d.h
#pragma once
#include <string>
#include "modules/planning/math/curve1d/curve1d.h"
namespace apollo {
namespace planning {
class StandingStillTrajectory1d : public Curve1d {
public:
StandingStillTrajectory1d(const double p, const double duration);
virtual ~StandingStillTrajectory1d() = default;
double ParamLength() const override;
std::string ToString() const override;
double Evaluate(const std::uint32_t order, const double param) const override;
private:
double Evaluate_s(const double t) const;
double Evaluate_v(const double t) const;
double Evaluate_a(const double t) const;
double Evaluate_j(const double t) const;
private:
double fixed_position_;
double duration_;
};
} // namespace planning
} // namespace apollo
standing_still_trajectory1d.cc
#include "modules/planning/common/trajectory1d/standing_still_trajectory1d.h"
namespace apollo {
namespace planning {
//默认构造函数,参数p,duration
StandingStillTrajectory1d::StandingStillTrajectory1d(const double p,
const double duration)
: fixed_position_(p), duration_(duration) {}
double StandingStillTrajectory1d::ParamLength() const { return duration_; }
std::string StandingStillTrajectory1d::ToString() const { return ""; }
double StandingStillTrajectory1d::Evaluate(const std::uint32_t order,
const double param) const {
// ACHECK(param <= duration_);
switch (order) {
case 0:
return Evaluate_s(param);
case 1:
return Evaluate_v(param);
case 2:
return Evaluate_a(param);
case 3:
return Evaluate_j(param);
}
return 0.0;
}
double StandingStillTrajectory1d::Evaluate_s(const double t) const {
return fixed_position_;
}
double StandingStillTrajectory1d::Evaluate_v(const double t) const {
return 0.0;
}
double StandingStillTrajectory1d::Evaluate_a(const double t) const {
return 0.0;
}
double StandingStillTrajectory1d::Evaluate_j(const double t) const {
return 0.0;
}
} // namespace planning
} // namespace apollo