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

cartographer发布畸变矫正后的scan数据

实现方式:
模仿源代码,在cartographer_ros写一个函数,以函数指针的方式传入cartographer后端,然后接收矫正后的scan数据,然后按照话题laserScan发布出来。
需要同时发布点云强度信息的,还要自己添加含有强度信息的代码。
核心转换代码如下:

  for (size_t i = 0; i < synchronized_data.ranges.size(); ++i) {const sensor::TimedRangefinderPoint& hit =synchronized_data.ranges[i].point_time;const Eigen::Vector3f origin_in_local =range_data_poses[i] *synchronized_data.origins.at(synchronized_data.ranges[i].origin_index);sensor::RangefinderPoint hit_in_local =range_data_poses[i] * sensor::ToRangefinderPoint(hit);const Eigen::Vector3f delta = hit_in_local.position - origin_in_local;const float range = delta.norm();if (range >= options_.min_range()) {if (range <= options_.max_range()) {hit_in_local.intensity = synchronized_data.ranges[i].intensity; //accumulated_range_data_.returns.push_back(hit_in_local);//transform::Rigid3f sensor_to_tracking = transform::Rigid3f::Translation(Eigen::Vector3f(synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[0],synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[1],synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[2]));undistortion_scan_data_.returns.push_back(sensor_to_tracking.inverse() *(range_data_poses[0].inverse() * hit_in_local));} else {hit_in_local.position =origin_in_local +options_.missing_data_ray_length() / range * delta;hit_in_local.intensity = synchronized_data.ranges[i].intensity; //    accumulated_range_data_.misses.push_back(hit_in_local);//transform::Rigid3f sensor_to_tracking = transform::Rigid3f::Translation(Eigen::Vector3f(synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[0],synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[1],synchronized_data.origins.at(synchronized_data.ranges[i].origin_index)[2]));undistortion_scan_data_.returns.push_back(sensor_to_tracking.inverse() *(range_data_poses[0].inverse() * hit_in_local));}}else{//hit_in_local.position = Eigen::Vector3f::Zero();//origin_in_local + 0.0 / range * delta;hit_in_local.intensity = 0; //    //accumulated_range_data_.misses.push_back(hit_in_local);//undistortion_scan_data_.returns.push_back(hit_in_local);}}

其他:改的地方其实挺多,因为
1.我把强度信息也传进去了。
2.对于注册返回的函数指针,为了不破坏原有的代码结构,都是自己添加新的接口。
3.因为源代码对于一些异常点进行了移除,而我要保留所有矫正后的点,所以也修改了部分代码。
4.最核心的就是数据转换,因为carto处理后的数据的坐标系是local的,所以要要逆变换回来。因为carto传入的数据考虑了激光头的外参数,所以传回来也要外参数逆变换回来。

好了,大家可以开心的使用畸变矫正后的scan话题了。

http://www.lryc.cn/news/98149.html

相关文章:

  • Idea中git push to origin/master was rejected错误解决方案
  • docker版jxTMS使用指南:自定义频率型动态管控
  • 【Docker】初识Docker以及Docker安装与阿里云镜像配置
  • C语言:动态内存管理
  • 如何往MySQL中插入100万条数据?
  • IntelliJ IDEA 2023.2 最新变化
  • 1300*B. T-primes
  • 重新C++系列之运算符重载
  • kotlin异常处理try-catch-finally
  • Pytorch在cuda、AMD DirectML和AMD CPU下性能比较
  • 哈工大计算机网络课程局域网详解之:交换机概念
  • Jenkins Pipeline的hasProperty函数
  • 芯片制造详解.净洁室的秘密.学习笔记(三)
  • 可解释的 AI:在transformer中可视化注意力
  • k8s Webhook 使用java springboot实现webhook 学习总结
  • JS逆向之猿人学爬虫第20题-wasm
  • 【双指针优化DP】The 2022 Hangzhou Normal U Summer Trials H
  • [论文笔记] LLM数据集——金融数据集
  • 在亚马逊平台,如何有效举报违规行为?
  • 深度学习入门教学——神经网络
  • 阿里Java开发手册~OOP 规约
  • 【Mysql数据库面试01】内连接 左连接 右连接 全连接
  • 事务隔离:为什么你改了我还看不见
  • 吴恩达ChatGPT《LangChain Chat with Your Data》笔记
  • https和http有什么区别
  • 振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测
  • linux基础学习
  • android 前端常用布局文件升级总结(二)
  • Linux复习——基础知识
  • 【数据结构】实验三:链表