当前位置: 首页 > news >正文

apollo9.0park and go-adjust

这段代码是自动驾驶系统中“Park and Go”场景的“检查”阶段的实现。它主要负责在车辆准备从停车状态转换到行驶状态之前进行一系列检查。下面是对代码的详细解释和注释:

### 包含的头文件
```cpp
#include "modules/planning/scenarios/park_and_go/stage_check.h"
#include "cyber/common/log.h"
#include "modules/planning/planning_base/common/frame.h"
#include "modules/planning/scenarios/park_and_go/context.h"
#include "modules/planning/scenarios/park_and_go/util.h"
```
这些头文件包括了该阶段处理所需的类定义、日志功能、框架和实用工具函数。

### 命名空间
```cpp
namespace apollo {
namespace planning {
```
代码位于`apollo`项目的`planning`命名空间中。

### 使用声明
```cpp
using apollo::common::TrajectoryPoint;
```
使用`apollo::common::TrajectoryPoint`类,无需每次都写完整的命名空间。

### 主处理函数
```cpp
StageResult ParkAndGoStageCheck::Process(
    const TrajectoryPoint& planning_init_point, Frame* frame) {
  ADEBUG << "stage: Check";
  CHECK_NOTNULL(frame);
  CHECK_NOTNULL(context_);
```
- `Process`函数是检查阶段的主要逻辑处理函数。
- `ADEBUG`用于输出调试信息。
- `CHECK_NOTNULL`确保`frame`和`context_`指针非空。

```cpp
  ADCInitStatus();
  frame->mutable_open_space_info()->set_is_on_open_space_trajectory(true);
  StageResult result = ExecuteTaskOnOpenSpace(frame);
  if (result.HasError()) {
    AERROR << "ParkAndGoStageAdjust planning error";
    return result.SetStageStatus(StageStatusType::ERROR);
  }
```
- `ADCInitStatus()`初始化自动驾驶车辆(ADC)的状态。
- 设置当前帧为开放空间轨迹模式。
- 执行开放空间任务,并检查是否有错误。

```cpp
  bool ready_to_cruise =
      CheckADCReadyToCruise(injector_->vehicle_state(), frame,
                            GetContextAs<ParkAndGoContext>()->scenario_config);
  return FinishStage(ready_to_cruise);
}
```
- 检查自动驾驶车辆是否准备好巡航。
- 根据检查结果决定完成阶段。

### 完成阶段函数
```cpp
StageResult ParkAndGoStageCheck::FinishStage(const bool success) {
  if (success) {
    next_stage_ = "PARK_AND_GO_CRUISE";
  } else {
    next_stage_ = "PARK_AND_GO_ADJUST";
  }
  injector_->planning_context()
      ->mutable_planning_status()
      ->mutable_park_and_go()
      ->set_in_check_stage(false);
  return StageResult(StageStatusType::FINISHED);
}
```
- 根据成功与否决定下一阶段是巡航还是调整。
- 更新规划状态,标记检查阶段结束。
- 返回阶段完成的结果。

### 初始化自动驾驶车辆状态函数
```cpp
void ParkAndGoStageCheck::ADCInitStatus() {
  auto* park_and_go_status = injector_->planning_context()
                                 ->mutable_planning_status()
                                 ->mutable_park_and_go();
  park_and_go_status->Clear();
  park_and_go_status->mutable_adc_init_position()->set_x(
      injector_->vehicle_state()->x());
  park_and_go_status->mutable_adc_init_position()->set_y(
      injector_->vehicle_state()->y());
  park_and_go_status->mutable_adc_init_position()->set_z(0.0);
  park_and_go_status->set_adc_init_heading(
      injector_->vehicle_state()->heading());
  park_and_go_status->set_in_check_stage(true);
}
```
- 清除之前的状态信息。
- 设置自动驾驶车辆的当前位置和朝向。
- 标记当前处于检查阶段。

### 命名空间结束
```cpp
}  // namespace planning
}  // namespace apollo
```
结束`apollo::planning`命名空间。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python-爬虫实例(5):将进酒,杯莫停!
  • Covalent(CXT)运营商网络规模扩大 42%,以满足激增的需求
  • Java练习题 (2024.7.23)
  • C++面试题之判断一个变量是不是指针
  • JavaWeb(4)JavaScript入门2—— JS的对象和JSON
  • 【附源码】Python :校园导航与最短路径算法
  • 【数学建模】——前沿图与网络模型:新时代算法解析与应用
  • gitee的怎么上传项目
  • PowerShell 使用介绍
  • 【C++中的IO流和文件操作精讲】
  • 【RaspberryPi】树莓派系统UI优化
  • googleTest 源码主线框架性分析——TDD 01
  • 自动发卡机器人来看:生成式AI的未来,是聊天还是代理?
  • vue echarts 柱状图表,点击柱子,路由代参数(X轴坐标)跳转
  • 复杂网络的任意子节点的网络最短距离
  • 【React系列】如何构建React应用程序
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Codepen 每日精选(2018-3-25)
  • Consul Config 使用Git做版本控制的实现
  • EventListener原理
  • flutter的key在widget list的作用以及必要性
  • HTML5新特性总结
  • HTTP中的ETag在移动客户端的应用
  • JAVA_NIO系列——Channel和Buffer详解
  • Java精华积累:初学者都应该搞懂的问题
  • JS字符串转数字方法总结
  • ReactNative开发常用的三方模块
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • storm drpc实例
  • 从setTimeout-setInterval看JS线程
  • 记录:CentOS7.2配置LNMP环境记录
  • 全栈开发——Linux
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 小程序button引导用户授权
  • 移动端 h5开发相关内容总结(三)
  • 赢得Docker挑战最佳实践
  • 再次简单明了总结flex布局,一看就懂...
  • 阿里云ACE认证学习知识点梳理
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​用户画像从0到100的构建思路
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 计算机视觉入门
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (八)Flink Join 连接
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (黑马点评)二、短信登录功能实现
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (实战篇)如何缓存数据
  • (正则)提取页面里的img标签
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复