CARLA
 
载入中...
搜索中...
未找到
PIDController.h
浏览该文件的文档.
1// Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8
9##include <algorithm> // 引入算法库
10
11#include "carla/trafficmanager/Constants.h" // 引入常量定义
12#include "carla/trafficmanager/DataStructures.h" // 引入数据结构定义
13
14namespace carla { // 定义命名空间 carla
15namespace traffic_manager { // 定义命名空间 traffic_manager
16
17namespace chr = std::chrono; // 为 std::chrono 起别名为 chr
18
19using namespace constants::PID; // 使用 constants::PID 命名空间中的内容
20
21using TimeInstance = chr::time_point<chr::system_clock, chr::nanoseconds>; // 定义时间实例类型
22
23namespace PID { // 定义命名空间 PID
24
25/// 此函数计算基于车辆当前状态变化的执行信号,以最小化 PID 错误。
26inline ActuationSignal RunStep(StateEntry present_state, // 当前状态
27 StateEntry previous_state, // 前一个状态
28 const std::vector<float> &longitudinal_parameters, // 纵向参数
29 const std::vector<float> &lateral_parameters) { // 横向参数
30
31 // 纵向 PID 计算。
32 const float expr_v =
33 longitudinal_parameters[0] * present_state.velocity_deviation + // 比例项
34 longitudinal_parameters[1] * (present_state.velocity_deviation + previous_state.velocity_deviation) * DT + // 积分项
35 longitudinal_parameters[2] * (present_state.velocity_deviation - previous_state.velocity_deviation) * INV_DT; // 微分项
36
37 float throttle; // 油门变量
38 float brake; // 刹车变量
39
40 if (expr_v > 0.0f) { // 如果计算得到的速度表达式大于零
41 throttle = std::min(expr_v, MAX_THROTTLE); // 油门取较小值
42 brake = 0.0f; // 刹车为零
43 } else { // 否则
44 throttle = 0.0f; // 油门为零
45 brake = std::min(std::abs(expr_v), MAX_BRAKE); // 刹车取较小值
46 }
47
48 // 横向 PID 计算。
49 float steer =
50 lateral_parameters[0] * present_state.angular_deviation + // 比例项
51 lateral_parameters[1] * (present_state.angular_deviation + previous_state.angular_deviation) * DT + // 积分项
52 lateral_parameters[2] * (present_state.angular_deviation - previous_state.angular_deviation) * INV_DT; // 微分项
53
54 steer = std::max(previous_state.steer - MAX_STEERING_DIFF, std::min(steer, previous_state.steer + MAX_STEERING_DIFF)); // 限制转向角度变化
55 steer = std::max(-MAX_STEERING, std::min(steer, MAX_STEERING)); // 限制转向范围
56
57 return ActuationSignal{throttle, brake, steer}; // 返回执行信号
58}
59
60} // namespace PID
61} // namespace traffic_manager
62} // namespace carla
ActuationSignal RunStep(StateEntry present_state, StateEntry previous_state, const std::vector< float > &longitudinal_parameters, const std::vector< float > &lateral_parameters)
此函数计算基于车辆当前状态变化的执行信号,以最小化 PID 错误。
chr::time_point< chr::system_clock, chr::nanoseconds > TimeInstance
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
用来保存驱动信号的结构
用来保存控制器状态的结构体