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`命名空间。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apollo 9.0是一个自动驾驶开发平台,它提供了一套完整的软硬件解决方案,用于开发和部署自动驾驶系统。交叉编译是在一种平台上生成在另一种平台上运行的可执行文件的过程。在Apollo 9.0中,交叉编译通常用于将代码从开发主机编译为目标平台上的可执行文件。 要进行Apollo 9.0的交叉编译,您需要按照以下步骤进行操作: 1. 配置交叉编译环境:首先,您需要安装目标平台的交叉编译工具链。这些工具链包括交叉编译器、链接器和库文件。您可以从目标平台的官方网站或开发者社区获取这些工具链。 2. 设置环境变量:将交叉编译工具链的路径添加到系统的环境变量中,以便在编译过程中能够正确地找到这些工具。 3. 配置构建系统:Apollo 9.0使用Bazel作为构建系统。您需要根据目标平台的要求,配置Bazel的构建规则和选项。这包括指定目标平台的架构、操作系统和其他相关参数。 4. 编译代码:使用Bazel命令行工具执行编译命令,将代码编译为目标平台上的可执行文件。根据您的需求,您可以选择编译整个Apollo 9.0系统,或者只编译特定的模块或组件。 5. 部署和测试:将编译生成的可执行文件部署到目标平台上,并进行测试和验证。确保代码在目标平台上能够正常运行,并满足性能和功能要求。 请注意,具体的交叉编译步骤可能因为您使用的目标平台和开发环境而有所不同。建议您参考Apollo 9.0的官方文档和开发者社区,以获取更详细和准确的交叉编译指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值