当前位置: 首页 > news >正文

livox mid-70采集点云数据

 

 

#include "livox_mid70_sdk.h"
#include "livox_mid70_def.h"
#include <iostream>
#include <thread>
#include <chrono>
#include <cstring>// 设备状态枚举
typedef enum {kDeviceStateDisconnect = 0,kDeviceStateConnect = 1,kDeviceStateSampling = 2,
} Livox_mid70_DeviceState;// 设备信息结构
typedef struct {uint8_t handle;Livox_mid70_DeviceState device_state;DeviceInfo info;
} Livox_mid70_DeviceItem;// 全局变量
Livox_mid70_DeviceItem mid70_devices[kMaxLidarCount];
const char* livox_mid70_broadcast_code = "6565N8V00200631"; // 请替换为实际雷达广播码// 设备广播信息回调
void OnMid70DeviceBroadcast(const BroadcastDeviceInfo* info) {if (info == nullptr) return;printf("发现设备广播: %s\n", info->broadcast_code);
}// 设备状态变化回调
void OnMid70DeviceInfoChange(const DeviceInfo* info, DeviceEvent type) {if (info == nullptr) return;uint8_t handle = info->handle;if (handle >= kMaxLidarCount) return;if (type == kEventConnect) {mid70_devices[handle].device_state = kDeviceStateConnect;mid70_devices[handle].info = *info;printf("设备连接成功,句柄: %d\n", handle);}else if (type == kEventDisconnect) {mid70_devices[handle].device_state = kDeviceStateDisconnect;printf("设备断开连接,句柄: %d\n", handle);}
}// 点云数据回调函数
void GetMid70LidarData(uint8_t handle, LivoxEthPacket* data, uint32_t data_num, void* client_data) {if (data == nullptr) return;switch (data->data_type) {case kCartesian: {LivoxRawPoint* points = (LivoxRawPoint*)data->data;for (uint32_t i = 0; i < data_num; i++) {float x = points[i].x / 1000.0f;float y = points[i].y / 1000.0f;float z = points[i].z / 1000.0f;float reflectivity = points[i].reflectivity;printf("点云坐标: (%.3f, %.3f, %.3f), 反射率: %d\n", x, y, z, (int)reflectivity);}break;}case kSpherical: {LivoxSpherPoint* spherical_points = (LivoxSpherPoint*)data->data;for (uint32_t i = 0; i < data_num; i++) {float depth = spherical_points[i].depth / 1000.0f;float theta = spherical_points[i].theta / 100.0f;float phi = spherical_points[i].phi / 100.0f;float reflectivity = spherical_points[i].reflectivity;printf("球坐标: 距离=%.3fm, 方位角=%.2f°, 俯仰角=%.2f°, 反射率: %d\n",depth, theta, phi, (int)reflectivity);}break;}case kExtendCartesian: {// 扩展笛卡尔坐标系数据LivoxExtendRawPoint* extend_points = (LivoxExtendRawPoint*)data->data;for (uint32_t i = 0; i < data_num; i++) {float x = extend_points[i].x / 1000.0f;float y = extend_points[i].y / 1000.0f;float z = extend_points[i].z / 1000.0f;float reflectivity = extend_points[i].reflectivity;if (reflectivity > 0){std::cout << "扩展笛卡尔坐标: (" << x << ", " << y << ", " << z << "), 反射: " << reflectivity << "   , 标签: " << (int)extend_points[i].tag << std::endl;}//
        }break;}default:printf("未知数据类型: %d\n", (int)data->data_type);break;}
}int main() {printf("=== Livox Mid-70雷达点云采集程序 ===\n");printf("开始初始化Livox Mid-70雷达...\n");// 1. 初始化SDKif (!Init()) {printf("SDK初始化失败!\n");return -1;}printf("Livox SDK初始化完成\n");// 显示SDK版本信息
    LivoxSdkVersion livox_mid70_sdk_version;GetLivoxSdkVersion(&livox_mid70_sdk_version);printf("Livox SDK版本 %d.%d.%d\n", livox_mid70_sdk_version.major, livox_mid70_sdk_version.minor, livox_mid70_sdk_version.patch);// 初始化设备数组memset(mid70_devices, 0, sizeof(mid70_devices));// 2. 设置回调函数
    SetBroadcastCallback(OnMid70DeviceBroadcast);SetDeviceStateUpdateCallback(OnMid70DeviceInfoChange);// 3. 开始设备发现if (!Start()) {printf("启动设备发现失败!\n");Uninit();return -1;}printf("开始设备发现...\n");// 4. 等待设备准备就绪printf("等待设备初始化...\n");std::this_thread::sleep_for(std::chrono::milliseconds(2000));// 5. 添加设备连接uint8_t livox_mid70_handle = 0;livox_status result = AddLidarToConnect(livox_mid70_broadcast_code, &livox_mid70_handle);if (result == kStatusSuccess) {mid70_devices[livox_mid70_handle].handle = livox_mid70_handle;mid70_devices[livox_mid70_handle].device_state = kDeviceStateDisconnect;printf("添加设备成功,句柄: %d\n", livox_mid70_handle);}else {printf("添加设备失败! 请检查:\n");printf("1. 雷达是否上电\n");printf("2. 网络连接是否正常\n");printf("3. 广播码是否正确\n");Uninit();return -1;}// 6. 等待设备连接printf("等待设备连接...\n");int wait_count = 0;while (mid70_devices[livox_mid70_handle].device_state != kDeviceStateConnect && wait_count < 10) {std::this_thread::sleep_for(std::chrono::milliseconds(500));wait_count++;}if (mid70_devices[livox_mid70_handle].device_state != kDeviceStateConnect) {printf("设备连接超时!\n");Uninit();return -1;}// 7. 设置点云数据回调
    SetDataCallback(livox_mid70_handle, GetMid70LidarData, nullptr);printf("设置数据回调完成\n");// 8. 启动采样livox_status status = LidarStartSampling(livox_mid70_handle, nullptr, nullptr);if (status == kStatusSuccess) {printf("开始点云数据采集...\n");}else {printf("启动采样失败! 错误码: %d\n", status);Uninit();return -1;}// 9. 保持程序运行printf("程序运行中,采集10秒后自动停止...\n");printf("======================================\n");for (int i = 0; i < 10; i++) {printf("运行时间: %d秒\n", i + 1);std::this_thread::sleep_for(std::chrono::seconds(1));}// 10. 停止采样并清理资源printf("停止采样...\n");LidarStopSampling(livox_mid70_handle, nullptr, nullptr);Uninit();printf("程序正常结束\n");return 0;
}

 

微信图片_20251215011741_1359_5

 

 

 

 

 

 

 

 

 

###########################

http://www.jsqmd.com/news/90041/

相关文章:

  • PlugY插件:暗黑破坏神2单机体验的革命性增强
  • Pyarmor-Static-Unpack-1shot:无需运行即可处理加密Python脚本的解决方案
  • 报错分析:注册通知例程达上限
  • 哔哩下载姬DownKyi:打造个人专属B站内容宝库的终极方案
  • Calibre-Douban插件:一键获取豆瓣图书元数据的终极解决方案
  • Cursor AI Pro功能全解锁:3步突破试用限制的实战指南
  • TrafficMonitor插件系统:打造个性化Windows任务栏监控中心的完整指南
  • 基于Springboot学校物资管理系统【附源码+文档】
  • LumenPnP开源贴片机:解决小批量电子组装难题的智能方案
  • 百度网盘第三方客户端终极方案:告别限速的完整指南
  • AutoGPT水质检测报告生成器
  • GmsCore架构解构:从依赖注入到权限控制的逆向工程
  • Free-NTFS-for-Mac完全指南:苹果电脑免费读写NTFS磁盘终极方案
  • 基于微信小程序的在线家教预约系统毕业设计
  • 2025年12月最新降AI攻略!论文Ai率89%降到5%,低成本降低AI
  • 论文AIGC查重率高怎么办?如何降ai率?
  • Day28
  • 2025年12月最新降AI攻略!论文Ai率89%降到5%,毫不费力!
  • 如何快速下载B站视频:新手也能掌握的完整指南
  • ChanlunX技术突破:从核心引擎到实战应用的缠论算法工程实践
  • 【论文降AIGC率实用指南】论文Ai率89%降到5%,好不费力!
  • MarkText主题定制全攻略:从入门到精通的5个核心技巧
  • OpenAI发布全新安全推理模型:gpt-oss-safeguard系列赋能AI内容安全治理
  • C#核心技术四剑客:泛型、字典、文件IO与委托从入门到精通
  • openpilot驾驶新纪元:开源智能辅助系统深度体验指南
  • 还在为网易云灰掉的歌单发愁?这款OpenWrt插件让你告别版权限制!
  • Waifu2x视频放大分块技术:告别大文件处理困扰
  • 原神帧率解锁实战指南:突破60帧限制的完整解决方案
  • 阻塞队列:生产者-消费者模式
  • 2026元旦源码免费送