Auto commit

上级 169132e2
...@@ -65,7 +65,7 @@ POINT_CLOUD_REGISTER_POINT_STRUCT(velodyne_ros::Point, ...@@ -65,7 +65,7 @@ POINT_CLOUD_REGISTER_POINT_STRUCT(velodyne_ros::Point,
(float, time, time) (float, time, time)
(uint16_t, ring, ring) (uint16_t, ring, ring)
) )
//这段代码定义了一个名为velodyne_ros::Point的结构体,表示了Velodyne激光雷达采集到的点云数据,包括点云的三维坐标(x, y, z)、强度(intensity)、时间戳(time)、环号(ring)等信息。其中,PCL_ADD_POINT4D用于为结构体添加四元素坐标系,uint16_t表示无符号16位整数,EIGEN_ALIGN16和EIGEN_MAKE_ALIGNED_OPERATOR_NEW是为了保证内存对齐。最后,POINT_CLOUD_REGISTER_POINT_STRUCT宏用于在PCL(Point Cloud Library)中注册结构体,使其可以被PCL识别和使用。
namespace ouster_ros { namespace ouster_ros {
struct EIGEN_ALIGN16 Point { struct EIGEN_ALIGN16 Point {
PCL_ADD_POINT4D; PCL_ADD_POINT4D;
...@@ -80,58 +80,62 @@ namespace ouster_ros { ...@@ -80,58 +80,62 @@ namespace ouster_ros {
} // namespace ouster_ros } // namespace ouster_ros
// clang-format off // clang-format off
POINT_CLOUD_REGISTER_POINT_STRUCT(ouster_ros::Point, POINT_CLOUD_REGISTER_POINT_STRUCT(ouster_ros::Point, // 注册ouster_ros命名空间下的Point结构体
(float, x, x) (float, x, x) // 定义x坐标域,类型为float,名称为x
(float, y, y) (float, y, y) // 定义y坐标域,类型为float,名称为y
(float, z, z) (float, z, z) // 定义z坐标域,类型为float,名称为z
(float, intensity, intensity) (float, intensity, intensity) // 定义强度域,类型为float,名称为intensity
// use std::uint32_t to avoid conflicting with pcl::uint32_t // 使用std::uint32_t避免与pcl命名空间下的uint32_t冲突
(std::uint32_t, t, t) (std::uint32_t, t, t) // 定义时间戳域,类型为std::uint32_t,名称为t
(std::uint16_t, reflectivity, reflectivity) (std::uint16_t, reflectivity, reflectivity) // 定义反射率域,类型为std::uint16_t,名称为reflectivity
(std::uint8_t, ring, ring) (std::uint8_t, ring, ring) // 定义激光环号域,类型为std::uint8_t,名称为ring
(std::uint16_t, ambient, ambient) (std::uint16_t, ambient, ambient) // 定义环境光域,类型为std::uint16_t,名称为ambient
(std::uint32_t, range, range) (std::uint32_t, range, range) // 定义距离域,类型为std::uint32_t,名称为range
) )
class Preprocess class Preprocess
{ {
public: public:
// EIGEN_MAKE_ALIGNED_OPERATOR_NEW // EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Preprocess(); Preprocess(); // 构造函数
~Preprocess(); ~Preprocess(); // 析构函数
void process(const livox_ros_driver::CustomMsg::ConstPtr &msg, PointCloudXYZI::Ptr &pcl_out); void process(const livox_ros_driver::CustomMsg::ConstPtr &msg, PointCloudXYZI::Ptr &pcl_out); // 处理自定义消息类型的点云数据
void process(const sensor_msgs::PointCloud2::ConstPtr &msg, PointCloudXYZI::Ptr &pcl_out); void process(const sensor_msgs::PointCloud2::ConstPtr &msg, PointCloudXYZI::Ptr &pcl_out); // 处理普通消息类型的点云数据
void set(bool feat_en, int lid_type, double bld, int pfilt_num); void set(bool feat_en, int lid_type, double bld, int pfilt_num); // 设置特征开启状态、激光雷达类型、盲区半径和点云过滤阈值
// sensor_msgs::PointCloud2::ConstPtr pointcloud; // sensor_msgs::PointCloud2::ConstPtr pointcloud; (未被使用,可以忽略)
PointCloudXYZI pl_full, pl_corn, pl_surf;
PointCloudXYZI pl_buff[128]; //maximum 128 line lidar PointCloudXYZI pl_full, pl_corn, pl_surf; // 定义点云数据结构(全部点、角点、面点)
vector<orgtype> typess[128]; //maximum 128 line lidar PointCloudXYZI pl_buff[128]; // 定义点云缓存数组(最大支持128线激光雷达)
int lidar_type, point_filter_num, N_SCANS;; vector<orgtype> typess[128]; // 定义激光雷达点云类型数组(最大支持128线激光雷达)
double blind; int lidar_type, point_filter_num, N_SCANS; // 定义激光雷达类型、点云过滤阈值、扫描线数目
bool feature_enabled, given_offset_time; double blind; // 定义盲区半径
ros::Publisher pub_full, pub_surf, pub_corn; bool feature_enabled, given_offset_time; // 定义特征开启状态、偏移时间状态
ros::Publisher pub_full, pub_surf, pub_corn; // 定义发布器(发布全部点、角点、面点)
private: // 声明私有成员函数
void avia_handler(const livox_ros_driver::CustomMsg::ConstPtr &msg); private:
void oust64_handler(const sensor_msgs::PointCloud2::ConstPtr &msg); void avia_handler(const livox_ros_driver::CustomMsg::ConstPtr &msg); // 处理Livox Avia类型雷达数据的回调函数
void velodyne_handler(const sensor_msgs::PointCloud2::ConstPtr &msg); void oust64_handler(const sensor_msgs::PointCloud2::ConstPtr &msg); // 处理Velodyne Ouster64型号激光雷达数据的回调函数
void give_feature(PointCloudXYZI &pl, vector<orgtype> &types); void velodyne_handler(const sensor_msgs::PointCloud2::ConstPtr &msg); // 处理Velodyne VLP-16型号激光雷达数据的回调函数
void pub_func(PointCloudXYZI &pl, const ros::Time &ct); void give_feature(PointCloudXYZI &pl, vector<orgtype> &types); // 提取点云中的特征点
int plane_judge(const PointCloudXYZI &pl, vector<orgtype> &types, uint i, uint &i_nex, Eigen::Vector3d &curr_direct); void pub_func(PointCloudXYZI &pl, const ros::Time &ct); // 发布处理后的点云的函数
bool small_plane(const PointCloudXYZI &pl, vector<orgtype> &types, uint i_cur, uint &i_nex, Eigen::Vector3d &curr_direct); int plane_judge(const PointCloudXYZI &pl, vector<orgtype> &types, uint i, uint &i_nex, Eigen::Vector3d &curr_direct); // 判断平面点的函数
bool edge_jump_judge(const PointCloudXYZI &pl, vector<orgtype> &types, uint i, Surround nor_dir); bool small_plane(const PointCloudXYZI &pl, vector<orgtype> &types, uint i_cur, uint &i_nex, Eigen::Vector3d &curr_direct); // 判断小平面点的函数
bool edge_jump_judge(const PointCloudXYZI &pl, vector<orgtype> &types, uint i, Surround nor_dir); // 判断边缘点的函数
int group_size;
double disA, disB, inf_bound; // 声明私有成员变量
double limit_maxmid, limit_midmin, limit_maxmin; int group_size; // 平面点聚类时的最大聚类数量
double p2l_ratio; double disA, disB, inf_bound; // 平面点判定时的距离阈值、角度阈值、无穷远距离
double jump_up_limit, jump_down_limit; double limit_maxmid, limit_midmin, limit_maxmin; // 平面点判定时的角度阈值
double cos160; double p2l_ratio; // 平面点聚类时的最小点数占比
double edgea, edgeb; double jump_up_limit, jump_down_limit; // 跳变点判定时的高度差阈值
double smallp_intersect, smallp_ratio; double cos160; // 平面点判定时的角度cos值阈值
double vx, vy, vz; double edgea, edgeb; // 边缘点判定时的距离阈值与角度阈值
}; double smallp_intersect, smallp_ratio; // 小平面点判定时的交点距离阈值与占比阈值
\ No newline at end of file double vx, vy, vz; // 相对运动的速度
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册