livox mid360不使用ros接收雷达数据

embedded/2024/9/24 15:23:13/

源头还是使用官方的ROS版本的驱动修改得到的,一个不使用ROS的LIVOX-MID360的驱动

需要安装mid360的 SDK 

在.cpp中 std::string m_IP = "192.168.192.46"设置雷达的IP地址

config.json 文件中,修改 "cmd_data_ip" : "192.168.192.50", "push_msg_ip", "point_data_ip", "imu_data_ip" 为你的本机的IP地址

在pub_Handler的uint64_t PubHandler::GetEthPacketTimestamp(uint8_t timestamp_type, uint8_t* time_stamp, uint8_t size),通过timestamp_type 来设置获取道德数据的时间戳类型,本工程设置为获取硬件时间

完整代码的联系方式在文章最下方

#include "lds_lidar.h"
#include <iostream>
#include "LivoxMid360.h"
#include "rapidjson/document.h"
#include "rapidjson/prettywriter.h"
#include "rapidjson/stringbuffer.h"#include <fstream>
#include <iostream>// #include <pcl/visualization/cloud_viewer.h>using namespace livox_mid;LivoxMid360::LivoxMid360()
{
}LivoxMid360::~LivoxMid360()
{printf("delete livox mid360");
}
void LivoxMid360::PointCloudDataPollThread()
{std::future_status status;std::this_thread::sleep_for(std::chrono::seconds(3));do{std::vector<PointXyzlt> PointCloud;PointCloud.clear();uint64_t timestamp = 0;uint64_t timestampPrev=0;lddc->DistributePointCloudData(PointCloud, timestamp);if (timestampPrev!=timestamp){std::cout << "PointCloud------:" << PointCloud.size() << std::endl;}timestampPrev=timestamp;status = future_.wait_for(std::chrono::microseconds(0));} while (status == std::future_status::timeout);
}void LivoxMid360::ImuDataPollThread()
{std::future_status status;u_int64_t timestamp = 0;std::this_thread::sleep_for(std::chrono::seconds(3));do{livox_mid::ImuData imu_data;// std::vecto<livox_mid::ImuData> imu_data;lddc->DistributeImuData(imu_data);if (timestamp != imu_data.time_stamp){// std::cout << "ImuData------:" << imu_data.time_stamp << std::endl;}timestamp = imu_data.time_stamp;status = future_.wait_for(std::chrono::microseconds(0));} while (status == std::future_status::timeout);
}
void LivoxMid360::run()
{//    std::cout << "Livox Ros Driver Version: " << LIVOX_MID_DRIVER_VERSION_STRING << "\n";// signal(SIGINT, SignalHandler);LivoxLidarSdkVer _sdkversion;GetLivoxLidarSdkVer(&_sdkversion);if (_sdkversion.major < kSdkVersionMajorLimit){printf("The SDK version is too low");}// saveCfgFile();int xfer_format = kPointCloud2Msg;int multi_topic = 0;int data_src = kSourceRawLidar;double publish_freq = 10.0; /* Hz */int output_type = kOutputToRos;std::string frame_id = "livox_frame";bool lidar_bag = true;bool imu_bag = false;std::string m_IP = "192.168.192.46";int ret = 0;double mMaxLength = 1.2;const std::string &path = "Mid360/config/MID360_config.json";lddc = new Lddc(xfer_format, multi_topic, data_src, output_type,publish_freq, frame_id, lidar_bag, imu_bag, mMaxLength, m_IP);LdsLidar *read_lidar = LdsLidar::GetInstance(publish_freq);lddc->RegisterLds(static_cast<Lds *>(read_lidar));bool flag = true;if (!read_lidar->isInitialized())flag = read_lidar->InitLdsLidar(path);future_ = exit_signal_.get_future();if (flag){printf("lds lidar has init!");}else{printf("Init lds lidar fail!");// SLEEP(500);}std::thread pointclouddata_poll_thread_(&LivoxMid360::PointCloudDataPollThread, this);std::thread imudata_poll_thread_(&LivoxMid360::ImuDataPollThread, this);while (true){}
}int main()
{LivoxMid360 lm360;lm360.run();return 0;
}


http://www.ppmy.cn/embedded/112720.html

相关文章

Corrupt block relative dba: 0x02c0b382 (file 11, block 45954)

接前面断电故障处理2&#xff1a;oracle数据库断电无法启动恢复-CSDN博客 DM00 started with pid145, OS id16516, job SYS.SYS_IMPORT_TABLE_01 2024-09-13T20:05:22.33130208:00 ADVISORY: Please collect redo for investigation of ORA-8103. Use command: ALTER SYSTE…

浅谈Linux中的环回设备

什么是环回设备 环回设备&#xff08;loop device&#xff09; 是 Linux 系统中一种特殊的虚拟设备&#xff0c;它允许你将一个普通的文件当作块设备来操作。这意味着&#xff0c;借助环回设备&#xff0c;文件可以模拟为一个磁盘或分区&#xff0c;供系统读写。这种机制非常有…

校园管理新篇章:Spring Boot系统实现策略

第3章 系统分析 3.1 需求分析 校园管理系统主要是为了提高用户的工作效率和更方便快捷的满足用户&#xff0c;更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性&#xff0c;遵循开发的系…

Java许可政策再变,Oracle JDK 17 免费期将结束!

原文地址&#xff1a;https://www.infoworld.com/article/3478122/get-ready-for-more-java-licensing-changes.html Oracle JDK 17的许可协议将于9月变更回Oracle Technology Network License Agreement&#xff0c;这将迫使用户重新评估他们的使用策略。 有句老话说&#xf…

跟李沐学AI:长短期记忆网络LSTM

输入们、遗忘门和输出门 LSTM引入输入门、忘记门和输出门 输入门计算公式为&#xff1a;。 遗忘门计算公式为&#xff1a;。 输出门计算公式为&#xff1a;。 它们由三个具有sigmoid激活函数的全连接层处理&#xff0c; 以计算输入门、遗忘门和输出门的值。 因此&#xff0c…

mysql的zip解压缩版安装

文章目录 一、MySQL下载二、mysql解压缩版安装1、解压缩2、设置环境变量3、mysql初始化4、安装mysql服务5、启动mysql服务6、连接mysql7、修改初始密码8、安装完成 一、MySQL下载 下载网址&#xff1a;MySQL下载 本文以mysql8.4.2版本为例下载解压缩版。 二、mysql解压缩版安…

vue3使用provide和inject传递异步请求数据子组件接收不到

前言 一般接口返回的格式是数组或对象&#xff0c;使用reactive定义共享变量 父组件传递 const data reactive([])// 使用settimout模拟接口返回 setTimeout(() > {// 将接口返回的数据赋值给变量Object.assign(data, [{ id: 10000 }]) }, 3000);provide(shareData, dat…

算力服务器和GPU服务器的区别是什么?

随着互联网科技的快速发展&#xff0c;服务器的类型也变得多种多样了&#xff0c;今天小编就来为大家介绍一下算力服务器和GPU服务器还有他们之间的区别是什么&#xff1f; 算力服务器通常是指具有着较高计算能力的服务器&#xff0c;算力服务器一般都是用于处理大量的计算任务…