ApollomodulesplanningcommontrajectoryDiscretizedTrajectory类代码解析

ApollomodulesplanningcommontrajectoryDiscretizedTrajectory类代码解析,第1张

概述

对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 

#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不再解析。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存