使用livox mid 70提取特征点过程

参考链接

使用rviz显示bag数据

LOAM-Preprocessing

loam_livox

实现

第一版

读了一下驱动程序说明书

创建了ros环境,创建了demo功能包,创建了类,订阅话题"/livox/lidar"激光雷达数据,

不处理直接发布,发布话题"/full"

在rviz中查看。

说明书

首先,览沃 ROS 驱动程序可以看到广播码说明,luanch配置文件,我需要的是livox_lidar_rviz.launch连接览沃雷达设备,
向外发布 pointcloud2 格式的点云数据,自动加载rviz

览沃 ROS 驱动程序中的所有内部参数都位于 launch 文件中,常用的三个参数

参数名 详细说明 默认值
publish_freq 设置点云发布频率 浮点数据类型,推荐值 5.0,10.0,20.0,50.0 等。 10.0
multi_topic LiDAR 设备是否拥有独立的 topic 发布点云数据 0 -- 所有 LiDAR 设备共同使用同一个 topic 发送点云数据 1 -- 每个 LiDAR 设备各自拥有独立的 topic 发布点云数据 0
xfer_format 设置点云格式 0 -- 览沃 pointcloud2(PointXYZRTL) 点云格式 1 -- 览沃自定义点云数据格式 2 -- PCL库中标准 pointcloud2(pcl::PointXYZI) 点云格式 0

览沃 pointcloud2(PointXYZRTL) 点云格式,详细说明如下:

float32 x               # X axis, unit:m
float32 y               # Y axis, unit:m
float32 z               # Z axis, unit:m
float32 intensity       # the value is reflectivity, 0.0~255.0
uint8 tag               # livox tag
uint8 line              # laser number in lidar

直接连接 LiDAR 时,使用 livox_lidar_config.json 来配置 LiDAR 参数,可以把broadcast_code改为自己的设备

livox.launch中可以看到,

    <node pkg="loam_livox" type="livox_scanRegistration" name="livox_scanRegistration">
     <remap from="/laser_points_0" to="/livox/lidar" />
    </node>

仅仅查看订阅到的数据

#include "extract_feature.hpp"
void laserCloudHandler(const sensor_msgs::PointCloud2ConstPtr &laserCloudMsg) {
    ROS_INFO("牛");
}

int main(int argc, char** argv) {

    ros::init(argc, argv, "extract_feature");
    ros::NodeHandle nh;
    setlocale(LC_ALL, "");
    // Laser_feature laser_feature;   
    ros::Subscriber sub = nh.subscribe("/livox/lidar", 1000, laserCloudHandler);
    /*应该先订阅,回调函数处理,再发布呀构造函数中有三个话题*/

    ros::spin();
    return 0;
}

launch文件一句话,原神,启动!!!!

    <node pkg="demo" type="extract_feature" name="extract_feature" output="screen" />

订阅后直接发布

创建一个类Laser_feature,在其中进行相关操作。主函数变为

#include "extract_feature.hpp"

int main(int argc, char** argv) {

    ros::init(argc, argv, "extract_feature");
    Laser_feature laser_feature;   

    ros::spin();
    return 0;
}

就是整了个构造函数初始化,发布者和订阅者拿成员变量接收。直接将原始点云接收后发出。

    int init_ros_env(){
        ros::NodeHandle nh;
        m_sub_point_cloud = nh.subscribe<sensor_msgs::PointCloud2>("/livox/lidar", 10000, boost::bind(&Laser_feature::laserCloudHandler, this, _1));
        m_pub_livox_full = nh.advertise<sensor_msgs::PointCloud2>("/full", 10000);

        return 0;
    }

    void laserCloudHandler(const sensor_msgs::PointCloud2ConstPtr &laserCloudMsg){
        m_pub_livox_full.publish(*laserCloudMsg);
    }

此时打开rviz查看,可以将rviz的配置文件保存下来,保存到当前功能包的config文件夹下,然后在launch文件中增加

    <arg name="rviz" default="true" />
    <group if="$(arg rviz)">
        <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find demo)/config/default.rviz" />
    </group>

那么好,现在下面要做的就是在回调函数中处理数据,编写laserCloudHandler函数

第二版

posted @ 2024-10-23 15:34  万古长夜温剑神  阅读(27)  评论(0编辑  收藏  举报