文章目录
相关链接 |
---|
Apollo 6.0的高速下载地址、主要功能与融合模块文件夹结构(快速下载Apollo的源代码,纵观Apollo的历史新功能) |
Apollo 6.0的融合组件分析(fusion_component)(从融合组件开始分析,分为多个博客分层次地不断向下挖掘分析) |
Apollo 6.0融合模块常用结构体定义汇总(用于代码阅读时,结构体成员的速查) |
Apollo 6.0 所学及可能可改进问题(阐述作者发现的问题以及可能可以改进的方向,欢迎一起讨论) |
含义是作者基于代码猜测,持续更新。
常用结构体定义及其含义
结构体 Frame
文件链接: frame.h
struct alignas(16) Frame {
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Frame() {
sensor2world_pose.setIdentity(); }
void Reset() {
timestamp = 0.0;
objects.clear();
sensor2world_pose.setIdentity();
sensor_info.Reset();
lidar_frame_supplement.Reset();
radar_frame_supplement.Reset();
camera_frame_supplement.Reset();
}
// @brief sensor information
SensorInfo sensor_info; //传感器信息
double timestamp = 0.0; //帧时间戳
std::vector<std::shared_ptr<Object>> objects; //障碍物
Eigen::Affine3d sensor2world_pose; //时变的传感器到世界的仿射变换(可能与动态标定相关)
// sensor-specific frame supplements
LidarFrameSupplement lidar_frame_supplement; //结构体内主要包括是否开启和传感器原始数据的指针
RadarFrameSupplement radar_frame_supplement;
CameraFrameSupplement camera_frame_supplement;
UltrasonicFrameSupplement ultrasonic_frame_supplement;
};
结构体 SensorInfo
文件链接: sensor_meta.h)
struct SensorInfo {
std::string name = "UNKNONW_SENSOR"; //传感器名称
SensorType type = SensorType::UNKNOWN_SENSOR_TYPE; //传感器类型
SensorOrientation orientation = SensorOrientation::FRONT; //传感器安装位置
std::string frame_id = "UNKNOWN_FRAME_ID"; //?? 帧id字符串(可能与传感器数据帧的结构有关)
void Reset() {
name = "UNKNONW_SENSOR";
type = SensorType::UNKNOWN_SENSOR_TYPE;
orientation = SensorOrientation::FRONT;
frame_id = "UNKNOWN_FRAME_ID";
}
};
结构体 Object
文件链接: object.h
struct alignas(16) Object {
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Object();
std::string ToString() const;
void Reset();
// @brief object id per frame, required
int id = -1;
// @brief convex hull of the object, required
PointCloud<PointD> polygon;
// oriented boundingbox information
// @brief main direction of the object, required
Eigen::Vector3f direction = Eigen::Vector3f(1, 0, 0);
/*@brief the yaw angle, theta = 0.0 <=> direction(1, 0, 0),
currently roll and pitch are not considered,
make sure direction and theta are consistent, required
*/
float theta = 0.0f;
// @brief theta variance, required
float theta_variance = 0.0f;
// @brief center of the boundingbox (cx, cy, cz), required
Eigen::Vector3d center = Eigen::Vector3d(0, 0, 0);
// @brief covariance matrix of the center uncertainty, required
Eigen::Matrix3f center_uncertainty;
/* @brief size = [length, width, height] of boundingbox
length is the size of the main direction, required
*/
Eigen::Vector3f size = Eigen::Vector3f(0, 0, 0);
// @brief size variance, required
Eigen::Vector3f size_variance = Eigen::Vector3f(0, 0, 0);
// @brief anchor point, required
Eigen::Vector3d anchor_point = Eigen::Vector3d(0,