车辆参数信息

部分转自:https://www.tuicool.com/articles/UfIr6fM

import "modules/canbus/proto/chassis.proto";
import "modules/localization/proto/pose.proto";

message VehicleState {
  optional double x = 1 [default =0.0];            // 车辆世界ENU坐标系x坐标
  optional double y = 2 [default =0.0];            // 车辆世界ENU坐标系y坐标
  optional double z = 3 [default =0.0];            // 车辆世界ENU坐标系z坐标
  optional double timestamp = 4 [default =0.0];    // 时间戳信息
  optional double roll = 5 [default =0.0];         // 车辆姿态相对于世界坐标系x轴旋转角度
  optional double pitch = 6 [default =0.0];        // 车辆姿态相对于世界坐标系y轴旋转角度
  optional double yaw = 7 [default =0.0];          // 车辆姿态相对于世界坐标系z轴旋转角度
  optional double heading = 8 [default =0.0];      // 车辆速度方向
  optional double kappa = 9 [default =0.0];        // 车辆半径倒数1/R
  optional double linear_velocity = 10 [default =0.0];      // 车辆线速度
  optional double angular_velocity = 11 [default =0.0];     // 车辆角速度
  optional double linear_acceleration = 12 [default =0.0];  // 车辆线加速度
  optional apollo.canbus.Chassis.GearPosition gear = 13;    // 车辆齿轮状态,包含前进、倒车。停车、低速等状态
  optional apollo.canbus.Chassis.DrivingMode driving_mode = 14;  // 驾驶状态,包含手动驾驶、自动驾驶、转向、刹车与油门等状态
  optional apollo.localization.Pose pose = 15;     // 车辆姿态,包含坐标,局部到世界坐标系变换矩阵,线速度(矢量),线加速度(矢量)等信息。
}

class Chassis:

speed_mps  底盘速度

gear_location_  设置齿轮驱动,底盘的齿轮数据

engine_rpm 发动机转速

odometer_m_ 里程表

fuel_range_m  燃料范围

throttle_percentage: 0 油门百分比
brake_percentage: 0 刹车百分比
steering_percentage: -0.65058869 操舵
steering_torque_nm: -7.125    方向盘转矩
parking_brake: false  停车制动
driving_mode: EMERGENCY_MODE
error_code: NO_ERROR
gear_location: GEAR_DRIVE

 

class VehicleStateProvider://车辆状态类,包括基本信息和车辆状况

vehicle_state_.x()  x坐标

vehicle_state_.heading()  车辆的头部的偏角,这个是与X的夹角

vehicle_state_.roll() 欧拉滚转角

vehicle_state_.pitch() 欧拉螺距角

vehicle_state_.yaw() 获得车辆的偏航角。现在,使用航向而不是偏航角。航向角为东为零,偏航角为北为零@返回欧拉偏航角

vehicle_state_.linear_velocity()  线速度

vehicle_state_.angular_velocity() 角速度

vehicle_state_.linear_acceleration() 线加速度

pose {
  position {//距离
    x: 682523.70666380867  //经度
    y: 3111135.3617914952//纬度
    z: 66.2406011223793//海拔高度
  }
  orientation {//海拔朝向
    qx: -0.0026926400088655485
    qy: -0.012844194819580395
    qz: -0.40334199690238054
    qw: -0.9149551955609736
  }

}

 

轨迹结构

前面我们已经多次提到“轨迹”一次。我们知道,”轨迹“不同于“路径”,“轨迹”不仅仅包含了行驶路线,还要包含每个时刻的车辆的速度,加速度,方向转向等信息。

就和高精地图通过一系列的点来描述道路的中心线一样,车辆的行驶轨迹也是由一系列的点来描述的。具体的结构在proto文件中定义,如下所示:

// common/proto/pnc_point.proto

message PathPoint {
  optional double x = 1;
  optional double y = 2;
  optional double z = 3;
  optional double theta = 4;
  optional double kappa = 5;
  optional double s = 6;
  
  optional double dkappa = 7;
  optional double ddkappa = 8;
  optional string lane_id = 9;

  optional double x_derivative = 10;
  optional double y_derivative = 11;
}

message TrajectoryPoint {
  optional PathPoint path_point = 1;
  optional double v = 2;  // in [m/s]
  optional double a = 3;
  optional double relative_time = 4;
  optional double da = 5;
  optional double steer = 6;
}

轨迹中的点通过 TrajectoryPoint 这个结构来描述。它的字段说明如下:

  • path_pointPathPoint 类型数据。描述了一个点的位置,曲率,朝向,所属车道等信息。
  • v :描述车辆的速度。
  • a :描述车辆的加速度。
  • relative_time :描述车辆达到该点的相对时间(以轨迹的开始为起点)。
  • da :加速度的导数,也称之为jerk。
  • steer :车辆的前轮方向。

TrajectoryPoint 仅仅是一个点。而一条轨迹一定是由许多个点构成的。因此,描述轨迹的类 DiscretizedTrajectory 继承自 std::vector<common::TrajectoryPoint>

 

 

 

 

  • PointENU :描述了地图上的一个点。定位,感知,预测和决策模块都会使用这个数据结构。目前,Apollo地图使用 Universal Transverse Mercator坐标系统 。在一些情况下, z 字段可能会被忽略。
# modules/common/proto/geometry.proto

message PointENU {
  optional double x = 1 [default = nan];  // East from the origin, in meters.
  optional double y = 2 [default = nan];  // North from the origin, in meters.
  optional double z = 3 [default = 0.0];  // Up from the WGS-84 ellipsoid, in meters.
}
  • SLPoint :描述了Frenet坐标系上的一个点。 s 表示距离起点的纵向距离, l 表示距离中心线的侧向距离。
# modules/common/proto/pnc_point.proto

message SLPoint {
  optional double s = 1;
  optional double l = 2;
}
  • LaneWaypoint :描述了车道上的点。
// modules/map/pnc_map/path.h

using LaneInfoConstPtr = std::shared_ptr<const LaneInfo>;

struct LaneWaypoint {
  LaneWaypoint() = default;
  LaneWaypoint(LaneInfoConstPtr lane, const double s)
      : lane(CHECK_NOTNULL(lane)), s(s) {}
  LaneWaypoint(LaneInfoConstPtr lane, const double s, const double l)
      : lane(CHECK_NOTNULL(lane)), s(s), l(l) {}
  LaneInfoConstPtr lane = nullptr;
  double s = 0.0;
  double l = 0.0;

  std::string DebugString() const;
};
  • VehicleState :描述车辆状态,包含了自车位置,姿态,方向,速度,加速度等信息。
# modules/common/vehicle_state/proto/vehicle_state.proto

message VehicleState {
  optional double x = 1 [default = 0.0];
  optional double y = 2 [default = 0.0];
  optional double z = 3 [default = 0.0];
  optional double timestamp = 4 [default = 0.0];
  optional double roll = 5 [default = 0.0];
  optional double pitch = 6 [default = 0.0];
  optional double yaw = 7 [default = 0.0];
  optional double heading = 8 [default = 0.0];
  optional double kappa = 9 [default = 0.0];
  optional double linear_velocity = 10 [default = 0.0];
  optional double angular_velocity = 11 [default = 0.0];
  optional double linear_acceleration = 12 [default = 0.0];
  optional apollo.canbus.Chassis.GearPosition gear = 13;
  optional apollo.canbus.Chassis.DrivingMode driving_mode = 14;
  optional apollo.localization.Pose pose = 15;
}
roll, pitch 和 yaw 分布描述了车辆在纵向,侧向和垂直方向上的角度,具体如下图所示:

 

下面是 ReferenceLine 类中的数据成员:

// modules/planning/reference_line/reference_line.h

uint32_t priority_ = 0;
struct SpeedLimit {
  double start_s = 0.0;
  double end_s = 0.0;
  double speed_limit = 0.0;  // unit m/s
};
std::vector<SpeedLimit> speed_limit_;

std::vector<ReferencePoint> reference_points_;
hdmap::Path map_path_;

priority_ 是优先级,不过在 PublicRoadPlanner 中没有用到。 speed_limit_ 是限速数据,这两个我们暂时都不用关注。

reference_points_ 其实是从 map_path_ 得到,具体见ReferenceLine的构造函数。所以这两个数据的作用其实是一样的。

std::vector<ReferencePoint> 是一系列的点,点包含了位置的信息。因此这些点就是生成车辆行驶轨迹的基础数据。

ReferencePointMapPathPoint 继承而来。下面这幅图是 ReferencePoint 的类继承关系

  • 什么是ADCTrajectory?
    • ADCTrajectory的字面意思地自动驾驶车的轨迹, 在planning.proto中定义;
      • 主要有总路径的长度(total_path_length), 单位是米meters;
      • 总路径的时间(total_path_time), 单位是seconds;
      • 重复的轨迹点TrajectoryPoint,TrajectoryPoint中主要包含的有(PathPoint,线性的速度v,线性的加速度a,相对时间relative_time(从轨迹的开始的相对时间))。
        • TrajectoryPoint包含PathPoint和一些速度、加速度和时间相关的信息。
        • PathPoint主要包含了一些坐标、曲率、path开始的距离、lane的id, x方向的导数和y方向的导数。
      • 是否有紧急停车EStop;
      • 路径点PathPoint(没有速度信息)。
      • 是否重新规划is_replan;
      • 具体的档位位置GearPosition;
      • planning的决策结果DecisionResult,主要包含了主要决策(MainDecision)、目标决策(ObjectDecisions)和车辆信号(VehicleSignal);
        • MainDecision主要包含: 当前的任务是那个(MainCruise, MainStop, MainEmergencyStop, MainChangeLane, MainMissionComplete, MainNotReady, MainParking)和重复的TargetLane;
          • TargetLane主要包括了lane的id, 起点和终点限制的速度(speed_limit)。
        • ObjectDecisions就是多个ObjectDecision, 每个ObjectDecision中包含了一个字符串的id, 感知目标的id和一个目标的决策类型ObjectDecisionType;
          • ObjectDecisionType主要有几种类型: 忽略, 停止, 跟随, 避让, 超车, 绕行, 从旁边超过, avoid听让;
      • LatencyStats(潜在的状态): 主要包括了总时间(total_time_ms), 任务的状态(task_stats)和初始frame的时间init_frame_time_ms;
        • 其中task_stats主要包括了任务的名字和运行时间(time_ms);
      • routing相关的航向角和debug的控制选项;
      • ADCPathPoint(车辆路径的点) -- 主要包括x,y,z的三个坐标,曲率(curvature)和航向角(heading, 相对于绝对坐标系来说的)。
      • ADCTrajectoryPoint(Deprecated: replaced by apollo.common.TrajectoryPoint), 里面主要是一个些坐标, 速度, 加速度, 曲率, 曲率的变化率, 相对时间, theta值, 从第一个点开始的距离, sl坐标系中的位置。
      • 车辆的信号VehicleSignal, 主要包括(转向信号TurnSignal), 远光灯(high_beam), 近光灯(low_beam), 喇叭(horn)和应急灯(emergency_light)。
      • 道路右边的状态;
      • 沿车道中线参考线的lane ID;
      • 根据当前的计划结果设置engage的建议; -- 这是一个遇到critical时才给予的运行时建议。
      • 致命区域(CriticalRegion)。
      • 轨迹的类型(TrajectoryType) -- 不知道是什么类型, 正常的类型, 路径反馈的类型, 速度反馈的类型;
  • ScenarioFeature,是在scenario_feature.proto文件重定义的;
    • 主要包括了速度,加速度,航向角, 当前lane的id, lane被走过的距离, 左边相邻的laneid和lanes, 右边相邻的laneid和lanes, 连接处的距离和id, 障碍物的id。

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值