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

利用lidar_align来进行lidar和imu标定

文章目录

  • 下载并安装lidar_align
  • 安装nlopt
  • 迁移NLOPTConfig.cmake
  • 修改loader.cpp文件
  • 编译并运行

下载并安装lidar_align

mkdir  -p  lidar_align/src
cd lidar_align/src
git clone https://github.com/ethz-asl/lidar_align.git

安装nlopt

git clone http://github.com/stevengj/nlopt
cd nlopt/
mkdir build
cd build
cmake ..
make
sudo make install

迁移NLOPTConfig.cmake

将 lidar_align/src/lidar_align/NLOPTConfig.cmake 文件移动到 lidar_align/src/ 下(与lidar_align同级)

修改loader.cpp文件

首先在该文件顶部添加 #include <sensor_msgs/Imu.h>,然后这个工具包原先是用来标定lidar和odom(里程计),所以需要将里程计接口替换为imu接口:
在这里插入图片描述
将上图中标记部分的代码注释掉,在注释之后位置添加:

types.push_back(std::string("sensor_msgs/Imu"));rosbag::View view(bag, rosbag::TypeQuery(types));size_t imu_num = 0;double shiftX=0,shiftY=0,shiftZ=0,velX=0,velY=0,velZ=0;ros::Time time;double timeDiff,lastShiftX,lastShiftY,lastShiftZ;for (const rosbag::MessageInstance& m : view){std::cout <<"Loading imu: \e[1m"<< imu_num++<<"\e[0m from ros bag"<<'\r'<< std::flush;sensor_msgs::Imu imu=*(m.instantiate<sensor_msgs::Imu>());Timestamp stamp = imu.header.stamp.sec * 1000000ll +imu.header.stamp.nsec / 1000ll;if(imu_num==1){time=imu.header.stamp;Transform T(Transform::Translation(0,0,0),Transform::Rotation(1,0,0,0));odom->addTransformData(stamp, T);}else{timeDiff=(imu.header.stamp-time).toSec();time=imu.header.stamp;velX=velX+imu.linear_acceleration.x*timeDiff;velY=velX+imu.linear_acceleration.y*timeDiff;velZ=velZ+(imu.linear_acceleration.z-9.801)*timeDiff;lastShiftX=shiftX;lastShiftY=shiftY;lastShiftZ=shiftZ;shiftX=lastShiftX+velX*timeDiff+imu.linear_acceleration.x*timeDiff*timeDiff/2;shiftY=lastShiftY+velY*timeDiff+imu.linear_acceleration.y*timeDiff*timeDiff/2;shiftZ=lastShiftZ+velZ*timeDiff+(imu.linear_acceleration.z-9.801)*timeDiff*timeDiff/2;Transform T(Transform::Translation(shiftX,shiftY,shiftZ),Transform::Rotation(imu.orientation.w,imu.orientation.x,imu.orientation.y,imu.orientation.z));odom->addTransformData(stamp, T);}}

编译并运行

cd lidar_align
catkin_make
source ./devel/setup.bash
roslaunch lidar_align lidar_align.launch

在这里插入图片描述

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

相关文章:

  • 牛客NC93 设计LRU缓存结构【hard 链表,Map Java】
  • 机器学习和深度学习 -- 李宏毅(笔记与个人理解1-6)
  • 低功耗全极霍尔开关芯片 D02,磁性开关点精确,对工艺和温度变化不敏感
  • 初识--数据结构
  • 人工智能前沿成科技竞争新高地
  • 【算法刷题day23】Leetcode:669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树
  • 设计一个会议管理系统100问?
  • 一文搞懂BI、ERP、MES、SCM、PLM、CRM、WMS、APS、SCADA、QMS
  • 全量知识系统 程序详细设计 之 先验逻辑-实现:从“平凡”回到“平凡” (QA 百度搜索)
  • 注解(Annotation) --java学习笔记
  • uniapp 小程序获取WiFi列表
  • 数据可视化-ECharts Html项目实战(11)
  • 【MySQL数据库 | 第二十四篇】Limit语句的性能问题和调优策略
  • 【数据结构】两两交换链表 复制带随机指针的链表
  • 网络安全流量平台_优缺点分析
  • 【c语言】自定义类型:结构体详解
  • 利用AbortController,取消正在发送的请求
  • dockerhub右键快速搜索脚本
  • 类似微信的以文搜图功能实现
  • Android 13.0 Launcher3定制化之最近任务的全部清除由左边移到下边显示
  • 成都数字产业园落地全生命周期服务方案, 让企业对成都发展更有信心
  • SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
  • opencv图像处理技术(形态学操作)
  • 如何构建数据指标体系
  • python统计分析——一般线性回归模型
  • 【cocos creator】【TS】贝塞尔曲线,地图之间显示曲线
  • COMFYUI换脸ReActor报错Value not in list: face_restore_model: ‘codeformer.pth‘解决
  • 深入理解Java中的字段与属性的区别
  • 【Locust分布式压力测试】
  • 富格林:出金异常警惕黑幕陷阱受骗