IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Apollo |modules |planning |common |trajectory |DiscretizedTrajectory类代码解析 -> 正文阅读

[C++知识库]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不再解析。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:24:29  更:2022-04-26 11:27:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:28:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码