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

源头还是使用官方的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 来设置获取道德数据的时间戳类型,本工程设置为获取硬件时间

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

程序地址:激光雷达 Slam 三维地下隧道矿井建图算法

#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;
}

 程序地址:激光雷达 Slam 三维地下隧道矿井建图算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云-激光雷达-Slam-三维牙齿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值