Skip to content

车辆状态

源码路径:modules/common/vehicle_state/

概述

vehicle_state 模块提供车辆当前状态的统一查询接口,融合定位(Localization)和底盘(Chassis)数据,输出包含位置、姿态、速度、加速度、曲率等完整车辆状态信息。规划和控制模块通过 VehicleStateProvider 获取车辆当前状态,是规划控制链路的基础数据源。

核心类

VehicleStateProvider

车辆状态提供者,融合定位和底盘数据维护完整的车辆状态。

cpp
class VehicleStateProvider {
 public:
  // 从定位和底盘消息更新状态
  Status Update(const localization::LocalizationEstimate& localization,
                const canbus::Chassis& chassis);

  // 从 protobuf 文件更新状态(离线模式)
  void Update(const std::string& localization_file,
              const std::string& chassis_file);

  // 位置
  double x() const;
  double y() const;
  double z() const;

  // 姿态
  double heading() const;
  double roll() const;
  double pitch() const;
  double yaw() const;
  double kappa() const;

  // 运动
  double linear_velocity() const;
  double angular_velocity() const;
  double linear_acceleration() const;

  // 底盘
  double gear() const;
  double steering_percentage() const;
  double timestamp() const;

  // 高级查询
  math::Vec2d EstimateFuturePosition(double t) const;
  math::Vec2d ComputeCOMPosition(double rear_to_com_distance) const;

  const VehicleState& vehicle_state() const;
  const localization::Pose& pose() const;
  const localization::Pose& original_pose() const;
};

源码modules/common/vehicle_state/vehicle_state_provider.hmodules/common/vehicle_state/vehicle_state_provider.cc

核心函数

VehicleStateProvider::Update()

融合定位和底盘数据更新车辆状态。

cpp
Status VehicleStateProvider::Update(
    const localization::LocalizationEstimate &localization,
    const canbus::Chassis &chassis) {
  // 1. 从定位提取位置、姿态、角速度、加速度
  ConstructExceptLinearVelocity(localization);

  // 2. 时间戳:优先 measurement_time,其次 header.timestamp_sec
  vehicle_state_.set_timestamp(localization.measurement_time());

  // 3. 档位:来自 chassis.gear_location()
  vehicle_state_.set_gear(chassis.gear_location());

  // 4. 线速度:来自 chassis.speed_mps()
  //    倒车时取反(除非 FLAGS_reverse_heading_vehicle_state 为 true)
  vehicle_state_.set_linear_velocity(chassis.speed_mps());

  // 5. 方向盘转角:来自 chassis.steering_percentage()
  vehicle_state_.set_steering_percentage(chassis.steering_percentage());

  // 6. 曲率:kappa = angular_velocity / linear_velocity
  //    速度 < 0.1 m/s 时 kappa 设为 0
  vehicle_state_.set_kappa(angular_velocity / linear_velocity);

  return Status::OK();
}

数据来源

字段来源说明
x/y/zLocalization位置坐标
headingLocalization航向角(四元数转换)
roll/pitch/yawLocalization欧拉角
angular_velocityLocalization角速度(z 轴)
linear_accelerationLocalization线加速度(y 轴)
linear_velocityChassis车速(倒车取反)
gearChassis档位
steering_percentageChassis方向盘转角百分比
kappa计算angular_velocity / linear_velocity

EstimateFuturePosition()

基于恒定角速度模型预测未来 t 秒后的位置。

cpp
math::Vec2d VehicleStateProvider::EstimateFuturePosition(const double t) const {
  // 角速度接近 0 时:直线运动
  //   dx = 0, dy = v * t
  // 角速度非零时:圆弧运动
  //   dx = -v/w * (1 - cos(w*t))
  //   dy = sin(w*t) * v/w
  // 使用四元数旋转到世界坐标
}

ComputeCOMPosition()

计算质心(Center of Mass)位置,根据后轴到质心距离偏移。

cpp
math::Vec2d VehicleStateProvider::ComputeCOMPosition(
    const double rear_to_com_distance) const {
  // 仅在前进或后退(由 FLAGS 控制)时偏移
  // 使用四元数旋转偏移向量后加到车辆位置
}

配置

gflags说明
FLAGS_reverse_heading_vehicle_state倒车时是否保持正速度(不取反)
FLAGS_state_transform_to_com_reverse倒车时是否变换到质心坐标
FLAGS_state_transform_to_com_drive前进时是否变换到质心坐标
FLAGS_enable_map_reference_unify是否启用地图参考坐标统一
FLAGS_use_navigation_mode导航模式下跳过定位更新

调用关系

  • 上游:定位模块发布 LocalizationEstimate;底盘模块发布 Chassis
  • 被依赖:规划模块(PlanningComponent)和控制模块(ControllerAgent)调用 Update() 后通过 getter 查询车辆状态
  • 依赖VehicleState protobuf、math::QuaternionToHeading()math::EulerAnglesZXYd

贡献者

页面历史