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

faster-lio仿真环境问题及解决

在按照 XTDrone 的文档步骤搭建 faster-lio 的仿真环境后,运行可能会出现各种报错问题,本篇仅就环境搭建的问题提供一些解决思路。

XTDrone 的环境搭建链接:https://www.yuque.com/xtdrone/manual_cn/livox_lio

出现雷达点少或没有点

W0717 14:52:06.377401 27941 laser_mapping.cc:280] No point, skip this scan!
W0717 14:52:06.401652 27941 laser_mapping.cc:454] Too few input point cloud!
W0717 14:52:06.401741 27941 laser_mapping.cc:280] No point, skip this scan!
W0717 14:52:06.511386 27941 laser_mapping.cc:280] No point, skip this scan!

这种情况就是雷达点太少或者特征点太少,一方面可以提高 px4 端的仿真模型的点数:

另一方面,可以减小 faster-lio 中的降采样体素大小的方式来增加特征点数:

需要注意的是,这个参数在 launch 文件中也会设置,两者保留其一即可。

创建容器过大

terminate called after throwing an instance of 'std::length_error'what():  cannot create std::vector larger than max_size()
[laserMapping-1] process has died [pid 71945, exit code -6, cmd /root/catkin_ws/devel/lib/faster_lio/run_mapping_online __name:=laserMapping __log:=/root/.ros/log/0dd4bb6c-62e2-11f0-8292-61405825c766/laserMapping-1.log].
log file: /root/.ros/log/0dd4bb6c-62e2-11f0-8292-61405825c766/laserMapping-1*.log

这个问题也是调试了一会才找到问题出在哪里,原因是在仿真中,使用的是 avia 的仿真模型,有时候会发出来点云数量为 0 的 msg,这样在雷达点云话题的回调函数中,创建相应的容器就会报错,我在avia雷达消息的回调函数中添加了一些打印信息,发现每次都是在点云数量为0时,就会紧接着报错:

于是在回调中做一些保护即可,部分代码如下,其实也就是添加了两句话:

void PointCloudPreprocess::AviaHandler(const livox_ros_driver::CustomMsg::ConstPtr &msg) {cloud_out_.clear();cloud_full_.clear();int plsize = msg->point_num;// ROS_INFO("point_num = %d", (int)msg->point_num);// 添加点云数据量过小时的保护if (plsize <= 10)return;cloud_out_.reserve(plsize);cloud_full_.resize(plsize);std::vector<bool> is_valid_pt(plsize, false);std::vector<uint> index(plsize - 1);for (uint i = 0; i < plsize - 1; ++i) {index[i] = i + 1;  // 从1开始}std::for_each(std::execution::par_unseq, index.begin(), index.end(), [&](const uint &i) {if ((msg->points[i].line < num_scans_) &&((msg->points[i].tag & 0x30) == 0x10 || (msg->points[i].tag & 0x30) == 0x00)) {if (i % point_filter_num_ == 0) {cloud_full_[i].x = msg->points[i].x;cloud_full_[i].y = msg->points[i].y;cloud_full_[i].z = msg->points[i].z;cloud_full_[i].intensity = msg->points[i].reflectivity;cloud_full_[i].curvature =msg->points[i].offset_time /float(1000000);  // use curvature as time of each laser points, curvature unit: msif ((abs(cloud_full_[i].x - cloud_full_[i - 1].x) > 1e-7) ||(abs(cloud_full_[i].y - cloud_full_[i - 1].y) > 1e-7) ||(abs(cloud_full_[i].z - cloud_full_[i - 1].z) > 1e-7) &&(cloud_full_[i].x * cloud_full_[i].x + cloud_full_[i].y * cloud_full_[i].y +cloud_full_[i].z * cloud_full_[i].z >(blind_ * blind_))) {is_valid_pt[i] = true;}}}});for (uint i = 1; i < plsize; i++) {if (is_valid_pt[i]) {cloud_out_.points.push_back(cloud_full_[i]);}}
}
http://www.dtcms.com/a/284871.html

相关文章:

  • 腾讯云服务上下载docker以及使用Rabbitmq的流程
  • Python网络爬虫——介绍
  • 【unitrix】 6.5 基础整数类型特征(base_int.rs)
  • Redis:哨兵(Sentinel)
  • MySQL的索引操作及底层结构浅析
  • 产品经理如何描述用户故事
  • modelscope ProxyError: HTTPSConnectionPool(host=‘www.modelscope.cn‘, port=443)
  • 作物长势产量预测yyds!遥感数据同化DSSAT模型,区域精准农业就靠它!
  • 27、鸿蒙Harmony Next开发:ArkTS并发(Promise和async/await和多线程并发TaskPool和Worker的使用)
  • Hyperledger Fabric:构建企业区块链网络的实践指南
  • 【实时Linux实战系列】硬件中断与实时性
  • 什么是GEO 和 SEO ?GEO 与 SEO 有什么区别?如何快速入门GEO?
  • 解决宝塔面板SSL报错 - AttributeError: module ‘acme_v2‘ has no attribute ‘acme_v2‘
  • 搜广推校招面经九十四
  • 神经网络构建
  • STM32之土壤湿度传感器模块
  • Toward the unification of kselftests and KUnit
  • MYSQL-进阶-锁
  • 离散与组合数学 杂记
  • 电子制造企业排产优化实战:用JVS智能排产的排产策略实现交期100%可控
  • OCR 与 Agent:智能协作的 “黄金搭档”
  • Spring Boot整合阿里云OSS:企业级文件存储最佳实践
  • ZYNQ UltraScale+ MPSoC芯片 pcie switch级联ssd高速存储方案
  • 基于springboot+vue+mysql平台的医疗病历交互系统(源码+论文)
  • 解析:视频创作中常见版权问题
  • JAVA原生实现SOAP POST调用
  • 【深度学习】神经网络过拟合与欠拟合-part5
  • 尚庭公寓----------分页查询
  • 外贸ERP软件有哪些?八大热门erp软件功能测评
  • FOC算法中SIMULINK一些常用模块(3)自动计算电机参数