mid-360|环境配置及传感器特定方向点云数据提取

12 篇文章 1 订阅
9 篇文章 0 订阅

本文将使用mid360实现简单的识别前方有障碍物时无人机悬停功能

环境配置

新建文件夹用于存储SDK以及ROS包

git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd Livox-SDK2
mkdir build
cd build
cmake ..
make
sudo make install

完成sdk的安装
根目录下

git clone https://github.com/Livox-SDK/livox_ros_driver2.git ws_livox/src/livox_ros_driver2
cd src/livox_ros_driver2/
./build ROS1

完成ROS运行环境安装
修改本地以太网口ip地址为192.168.1.5
修改MID360_config.json文件中lidar_configs的ip为192.168.1.1xx其中xx为mid360sn号的后两位

执行

roslaunch livox_ros_driver2 rviz_MID360.launch 

在rviz界面中可以观察到点云数据即成功

获取特定方向点云数据

构造结构体用于存储点云数据

class PointCloud {
public:
    // 构造函数
    PointCloud() {}

    // 添加点的方法
    void addPoint(double x, double y, double z) {
        points.push_back({x, y, z});
    }

    // 获取点的数量
    size_t size() const {
        return points.size();
    }

    // 获取所有点的坐标
    std::vector<std::vector<double>> getPoints() const {
        return points;
    }

    // 打印所有点的坐标
    void printPoints() const {
        std::cout << "Points in the PointCloud:" << std::endl;
        int index = 1;
        for (const auto& point : points) {
            std::cout << "x: " << point[0] << "  y: " << point[1] << "  z: " << point[2] << "index:"<<index++<<std::endl;
        }
    }

    // 发布点云数据
    void publishPointCloud(ros::Publisher& pub,std::string frame_id) {
        // 创建 PointCloud2 消息
        sensor_msgs::PointCloud2 msg;
        msg.header.stamp = ros::Time::now();
        msg.header.frame_id = frame_id;
        msg.height = 1;
        msg.width = points.size();
        msg.is_dense = true;

        // 设置字段
        sensor_msgs::PointCloud2Modifier modifier(msg);
        modifier.setPointCloud2FieldsByString(1, "xyz");
        sensor_msgs::PointCloud2Iterator<float> iter_x(msg, "x");
        sensor_msgs::PointCloud2Iterator<float> iter_y(msg, "y");
        sensor_msgs::PointCloud2Iterator<float> iter_z(msg, "z");

        // 将点的坐标添加到消息中
        for (const auto& point : points) {
            *iter_x = point[0];
            *iter_y = point[1];
            *iter_z = point[2];
            ++iter_x; ++iter_y; ++iter_z;
        }

        // 发布消息
        publisher.publish(msg);
    }

private:
    // 存储点的坐标
    std::vector<std::vector<double>> points;
};

在主函数中接收/livox/lidar话题信息,并在回调函数中保存传感器前方112范围内的点云数据用于前方避障

void callbackPointCloud(const sensor_msgs::PointCloud2::ConstPtr& cloud) {
    PointCloud pointCloud;
    sensor_msgs::PointCloud2ConstIterator<float> iter_x(*cloud, "x");
    sensor_msgs::PointCloud2ConstIterator<float> iter_y(*cloud, "y");
    sensor_msgs::PointCloud2ConstIterator<float> iter_z(*cloud, "z");

    // Simulate some processing delay (adjust as needed)
    std::this_thread::sleep_for(std::chrono::seconds(1));
    int index=1;

    for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z) {
        if(*iter_x<2&&*iter_x>0.001&&std::abs(*iter_y)<0.5&&std::abs(*iter_z)<0.5)
            pointCloud.addPoint(*iter_x, *iter_y, *iter_z);
        // ROS_INFO("x: %.3f  y: %.3f  z: %.3f  index:%d", *iter_x, *iter_y, *iter_z, index++);
    }
    pointCloud.printPoints();

    // ros::Publisher 
    // 发布 PointCloud2 消息
    pointCloud.publishPointCloud(publisher, "livox_frame");
}

在rviz中调整显示的话题,可观察到仅有传感器前方区域的点云数据。
后续可对点云数目进行判断,大于某一个值时执行悬停或给定速度为0以完成简单的避障

TODO

解析特定方向点云数据,判断障碍物条件成立后,发送标志位至控制器进入悬停模式

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!关于Livox Mid-360激光雷达的测试,我可以提供一些基本的信息。 Livox Mid-360是一款高性能、高精度的激光雷达,适用于各种应用场景,包括自动驾驶、无人机、机器人等。它采用了Livox独特的扫描方式,可以实现高分辨率、高点云密度的数据获取。 在进行测试时,您可以考虑以下几个方面: 1. 功能测试:验证激光雷达的基本功能,包括扫描速度、角度范围、数据输出等。您可以通过连接激光雷达到计算机或其他设备,并使用相应的软件进行测试。 2. 数据质量测试:检查激光雷达输出的点云数据的质量,包括点云分辨率、噪声水平、距离精度等。可以将激光雷达放置在合适的环境中,观察并分析生成的点云数据。 3. 鲁棒性测试:测试激光雷达在不同环境下的性能表现,例如室内、室外、不同天气条件等。可以尝试在不同场景下进行测试,观察激光雷达的稳定性和可靠性。 4. 功能集成测试:将激光雷达与其他设备或系统进行集成测试,例如与导航系统、地图构建算法等。验证激光雷达在集成环境中的表现,并确保其与其他组件的兼容性。 请注意,在进行测试之前,确保您已经详细阅读了Livox Mid-360的用户手册,并按照指导进行操作。此外,根据您的具体需求,您可能需要进一步深入研究和测试Livox Mid-360的特性和性能。希望这些信息对您有所帮助!如果您有任何其他问题,我将很愿意继续帮助您。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值