百度apollo自动驾驶planning代码学习-Apollo\modules\planning\common\trajectory1d\StandingStillTrajectory1d类代码详解

概述

对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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wujiangzhu_xjtu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值