百度apollo自动驾驶planning代码学习-Apollo\modules\planning\common\trajectory\DiscretizedTrajectory类代码解析

概述

对discretized_trajectory.cc和.h进行解析,以及通过discretized_trajectory_test.cc测试用例来了解DiscretizedTrajectory类的使用。

TrajectoryPoint类,该类由.proto文件生成
proto文件位于modules\common\proto\pnc_point.proto
proto文件中的message TrajectoryPoint
每个TrajectoryPoint,包含x,y,heading,v,a,s,t,da,steer等信息
DiscretizedTrajectory类就是存放一系列TrajectoryPoint轨迹点的一个数据结构类,以及一些相关增删改以及根据时间插值,根据纵向位置s插值等操作

discretized_trajectory.h

#pragma once

#include <vector>

#include "cyber/common/log.h"
#include "modules/common/math/vec2d.h"
#include "modules/planning/proto/planning.pb.h"

namespace apollo {
namespace planning {

//声明DiscretizedTrajectory离散路径类,DiscretizedTrajectory类
//继承TrajectoryPoint类,该类由.proto文件生成
//proto文件位于modules\common\proto\pnc_point.proto 
//proto文件中的message TrajectoryPoint
//每个TrajectoryPoint,包含x,y,heading,v,a,s,t,da,steer等信息
//DiscretizedTrajectory类显然看来就是存放一系列轨迹点的一个数据
//结构类,以及一些相关的操作
class DiscretizedTrajectory : public std::vector<common::TrajectoryPoint> {
 public:
  //默认构造函数
  DiscretizedTrajectory() = default;

  /**
   * 通过proto的message trajectory类创建一个离散轨迹      
   * DiscretizedTrajectory
   * proto文件位于modules\common\proto\pnc_point.proto 
   */
  //带参构造函数
  //就是DiscretizedTrajectory类可以通过proto生成的
  //ADCTrajectory类对象初始化
  explicit DiscretizedTrajectory(const ADCTrajectory& trajectory);

  //带参构造函数
  //DiscretizedTrajectory类也可以直接用TrajectoryPoint的
  //vector进行初始化
  explicit DiscretizedTrajectory(
      const std::vector<common::TrajectoryPoint>& trajectory_points);

  //设置DiscretizedTrajectory离散路径类轨迹点
  //用轨迹点的vector去设置离散路径类DiscretizedTrajectory对象
  void SetTrajectoryPoints(
      const std::vector<common::TrajectoryPoint>& trajectory_points);

  //虚函数,默认析构函数
  virtual ~DiscretizedTrajectory() = default;

  //虚函数,返回离散轨迹的起始点
  virtual common::TrajectoryPoint StartPoint() const;

  //虚函数,返回离散轨迹的时间长度
  virtual double GetTemporalLength() const;

  //虚函数,返回离散轨迹的距离总长,即s的总长
  virtual double GetSpatialLength() const;

  //虚函数,根据其他代码解析经验Evaluate通常代表插值的意思,参数
  //是相对时间,推测作用应该是用相对时间去离散轨迹上插值出一个
  //轨迹点TrajectoryPoint,返回这个插值点
  virtual common::TrajectoryPoint Evaluate(const double relative_time) const;

  //用一个给定的相对时间relative_time,去离散轨迹类对象上查找时间刚好小于
  //relative_time的轨迹点,返回它的下标
  virtual size_t QueryLowerBoundPoint(const double relative_time,
                                      const double epsilon = 1.0e-5) const;

  //虚函数,输入参数是(x,y)大地坐标,然后去去离散轨迹类对象上查找距离最近点
  //返回最近点的下标
  virtual size_t QueryNearestPoint(const common::math::Vec2d& position) const;

  //作用几乎同上,不同的是在找最近点比较时,若轨迹上某点到自车的距离小于(上次比较最近
  //点距离+缓冲距离)的话,该店认为是更近的点,就是找最近点时还考虑了一个缓冲距离。
  size_t QueryNearestPointWithBuffer(const common::math::Vec2d& position,
                                     const double buffer) const;
  //在离散轨迹末尾增加一个轨迹点
  virtual void AppendTrajectoryPoint(
      const common::TrajectoryPoint& trajectory_point);

  //在离散轨迹起始增加一个轨迹点
  void PrependTrajectoryPoints(
      const std::vector<common::TrajectoryPoint>& trajectory_points) {
    if (!empty() && trajectory_points.size() > 1) {
      ACHECK(trajectory_points.back().relative_time() <
             front().relative_time());
    }
    insert(begin(), trajectory_points.begin(), trajectory_points.end());
  }

  //根据下标index去离散轨迹上找到这个轨迹点,并且返回
  const common::TrajectoryPoint& TrajectoryPointAt(const size_t index) const;

  //返回离散轨迹点的数量
  size_t NumOfPoints() const;

  //虚函数 清空离散数据点中的所有数据
  virtual void Clear();
};

//内联函数,返回离散轨迹点的个数
inline size_t DiscretizedTrajectory::NumOfPoints() const { return size(); }

//内联函数,清空离散数据点中的所有数据
inline void DiscretizedTrajectory::Clear() { clear(); }

}  // namespace planning
}  // namespace apollo

感觉.h文件已经把DiscretizedTrajectory类的作用介绍的很清楚了,该类的实现文件discretized_trajectory.cc和测试文件discretized_trajectory_test.cc不再解析。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wujiangzhu_xjtu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值