Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定(未完成)

2023-05-16

Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定

  • 一、实现所用设备
  • 二、安装依赖、配环境
    • 2.1 依赖
    • 2.2 下载 Lidar + IMU 标定工具:lidar_align ,编译
    • 2.3 出现问题如下
    • 2.3 改写IMU
  • 三、录制数据

注意:制作某个算法所需 rosbag 前,先在已提供包下查看你所需数据类型等信息

rosbag info ***.bag

在这里插入图片描述

一、实现所用设备

系统环境:Ubuntu 18.04
激光雷达:Velodyne VLP-16
Imu : 3DM-GX4-25

二、安装依赖、配环境

2.1 依赖

sudo apt-get install libnlopt-dev

在这里插入图片描述

2.2 下载 Lidar + IMU 标定工具:lidar_align ,编译

链接有问题的请点击这里进行手动下载

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

在这里插入图片描述
在这里插入图片描述

2.3 出现问题如下

在这里插入图片描述
解决:将 lidar_align 文件夹下的 NLOPTConfig.cmake 复制到 ROS工作空间lidar_align_ws/src路径下面,再次编译catkin_make即可
在这里插入图片描述
在这里插入图片描述

2.3 改写IMU

1.需将里程计接口改写为 IMU 接口,未必能精确标定激光雷达和imu
在这里插入图片描述
2.在如上图文件中找到此块 odom 代码内容前后加/* */注释掉或者直接删除

/*types.push_back(std::string("geometry_msgs/TransformStamped"));
  rosbag::View view(bag, rosbag::TypeQuery(types));

  size_t tform_num = 0;
  for (const rosbag::MessageInstance& m : view) {
    std::cout << " Loading transform: \e[1m" << tform_num++
              << "\e[0m from ros bag" << '\r' << std::flush;

    geometry_msgs::TransformStamped transform_msg =
        *(m.instantiate<geometry_msgs::TransformStamped>());

    Timestamp stamp = transform_msg.header.stamp.sec * 1000000ll +
                      transform_msg.header.stamp.nsec / 1000ll;

    Transform T(Transform::Translation(transform_msg.transform.translation.x,
                                       transform_msg.transform.translation.y,
                                       transform_msg.transform.translation.z),
                Transform::Rotation(transform_msg.transform.rotation.w,
                                    transform_msg.transform.rotation.x,
                                    transform_msg.transform.rotation.y,
                                    transform_msg.transform.rotation.z));
    odom->addTransformData(stamp, T);
  }
  */

在这里插入图片描述
3.将上部分替换为以下 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);
	 }
	}

4.文件开头添加头文件

#include <sensor_msgs/Imu.h>

5.点击保存,关闭,再次编译catkin_make
在这里插入图片描述

三、录制数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定(未完成) 的相关文章

  • 【小程序系列】使用uView 自定义配置uni-app原生中的tabBar

    一 uView是什么 xff1f uView是uni app生态专用的UI框架 xff0c 是一个开源 免费的优秀框架 二 安装与配置 官方文档讲的很详细 xff0c 所以这里就直接引用 xff1a 安装与配置 三 使用步骤 在完成第二步
  • 【Vue3系列】 父组件调用子组件的方法-子组件向父组件传值

    一 xff1a 父组件调用子组件的方法 父组件 span class token operator lt span template span class token operator gt span span class token op
  • 【vue】笔记本默认设置125%或者150%缩放,导致布局错乱的解决方法

    目录 一 xff1a 为什么会出现有这个问题 xff1f 二 xff1a 有什么解决方案 xff1f 三 xff1a vue项目utils下新建js四 xff1a 全局导入App vue五 xff1a 重新进入项目六 xff1a 注意事项
  • 【Cocos creator】Cocos creator介绍和入门

    目录 一 工作流程二 安装和启动三 入门示例四 项目结构五 编辑器界面 Cocos Creator 是一个完整的游戏开发解决方案 xff0c 包含了 cocos2d x 引擎的 JavaScript 实现 xff0c 以及快速开发游戏所需求
  • 【Vue面试专题】50+道经典Vue面试题详解!

    目录 前言相关学习资源01 Vue组件之间通信方式有哪些02 v if和v for哪个优先级更高 xff1f 03 能说一说双向绑定使用和原理吗 xff1f 04 Vue中如何扩展一个组件05 子组件可以直接改变父组件的数据么 xff0c
  • 【Uni-App】点击分享,生成海报带二维码,保存到本地图片,写入文字

    目录 一 xff1a 需求二 xff1a 分析三 xff1a 准备工作1 qrcode准备2 并且在main js去挂载 四 xff1a 页面构建1 html2 data3 js 二维码嵌入文字 一 xff1a 需求 1 产品需要这个商品
  • 【Uni-App】uniapp使用uview实现弹出键盘输入密码/验证码功能

    目录 xff08 一 xff09 效果图 xff08 二 xff09 使用组件说明keyboard属性 xff1a keyboard事件 xff1a xff08 五 xff09 js代码实现 xff08 一 xff09 效果图 xff08
  • printf 缓冲区原理 (你想知道的C语言 1.4)

    Q 缓冲区究竟是什么概念 A 缓冲 顾名思义 表示可以酌情商量有回旋余地 可以想象一种只能强制遵守且说一不二的情形 xff0c 一种可以协商开发此消彼长的模式 区 理解成可以协助存储 处理的物理位置 xff0c 一般理解成内存 计算机科学的
  • 【面试题】京东面试查漏补缺

    目录 一 xff1a 笔试题1 如何获取URL中的参数方法一方法二 2 怎么平铺多维数组方法一方法二 xff1a 递归方法三 xff1a flat 和 flatMap 二 xff1a 面试题1 promise相关问题2 vue nextTi
  • 【Vue3】element-plus中el-tree的递归处理赋值回显问题

    目录 一 xff1a 先获取所有权限tree二 xff1a 在获取所有该角色能有的权限tree三 xff1a 递归处理勾选tree节点 由于项目是从0 1开始构建的 rbac都需要重新构建对接 所以涉及到了权限管理和菜单管理 一级菜单包含多
  • 【ChatGPT】体验一下ChatGPT

    体验一下ChatGPT 可以帮你写代码 写邮件 编故事的神器 最近OpenAI 发布了备受期待的原型通用 ChatGPT xff0c 这是一种基于对话的 AI 聊天界面 xff0c 算是GPT 3 Generative Pre traine
  • vant进度条框架报错,百家云移动端h5点播SDK, 二维码分享

    vant进度条框架报错 错误信息 xff1a Invalid prop type check failed for prop percentage Expected Number 网上查找问题原因 xff1a 1 xff0c 因为vant进
  • 51单片机上数码管的静态显示和动态显示

    一 TX1C数码管介绍 共阴极和共阳极数码管 xff0c 实验板上是共阴极数码管 xff0c 6位一体的数码管 连接原理图如下面两图 xff1a 连在一起的段线 xff08 段选线即abcdefgh xff09 控制数码管亮什么数字 xff
  • 51单片机的键盘检测原理

    一 独立键盘检测 1 按键的检测原理 单片机的I O口既可以作为输出也可以作为输入使用 xff0c 检测按键时用的是输入功能 把按键的一端接地 xff0c 另一端与单片机的某个I O口相连 xff0c 开始时先给该I O口赋一个高电平 xf
  • 51单片机上AD和DA操作

    一 ADC0804的操作 1 试验板上ADC0804的接线图 AD芯片上的第5管脚INTR没有接线 xff0c 因为该实验板读取A D数据没有用中断法 xff0c 所以可以不接该引脚 2 芯片的操作时序图如下 操作芯片时基本按照此顺序操作各
  • ESP32上对flash的读取操作

    通过按键控制一个LED灯的亮和灭 xff0c 每次重启时读上一次的状态 span class token macro property span class token directive hash span span class toke
  • 正点原子stm32F407学习笔记6——外部中断实验

    一 GPIO与中断线的映射关系 GPIO 的管脚GPIOx 0 GPIOx 15 x 61 A B C D E xff0c F G H I 分别对应中断线 0 15 这样每个中断线对应了最多 9 个 IO 口 xff0c 以线 0 为例 x
  • 通俗易懂的socket select模型讲解

    通俗易懂的socket select模型讲解 FFFF ireCore 前面一篇介绍了服务器端使用多线程的方式来处理多个客户端的请求的 xff0c 但是当客户端数量增多时线程数量会急剧增加 xff0c 导致消耗大量的资源 于是就引出了服务器
  • 【esp32学习之路7——硬件定时器】

    一 概述 ESP32 的定时器分为 2 组 xff0c 每组 2 个 ESP32 内置 4 个 64 bit 通用定时器 每个定时器包含一个 16 bit 预分频器和一个64 bit 可自动重新加载向上 xff0f 向下计数器 详情可参考乐
  • gcc编译器与Makefile入门

    在Windows下开发通常使用各种IDE xff0c 但在Linux下进行C编程编译代码的话需要用到GCC编译器 一 编译流程 GCC 编译器的编译流程是 xff1a 预处理 编译 汇编和链接 预处理就是展开所有的头文件 替换程序中的宏 解

随机推荐

  • Linux中HTTP的请求

    HTTP请求的步骤 xff1a 1 建立TCP 通信连接 2 制定HTTP协议例如 xff1a GET HTTP 1 1 r nHost www baidu com r n r n 3 发送制定好的HTTP协议 4 接收服务器所返回的数据
  • Ubuntu安装RealSense驱动SDK

    Ubuntu安装RealSense驱动SDK 参考链接 官方链接 1 添加key span class token function sudo span apt key adv span class token parameter vari
  • (2)LOAM的安装运行——安装及运行问题解决

    真是一言难尽 xff0c 安装一步一个坎 xff0c 算吧差不多花了一天时间 xff0c 还好最后成功啦 xff01 上一篇对PCL的安装及测试进行了介绍 xff0c 下面开始安装LOAM和利用bag运行 参照https blog csdn
  • http是什么_作用以及报文详情_http的常见状态码

    http是什么 xff1f 一 http的定义 xff1a http Hypertext transfer protocol 超文本传输协议 xff0c 通过浏览器和服务器进行数据交互 xff0c 进行超文本 xff08 文本 图片 视频等
  • C++ string与int类型的转换

    Int转String 1 int 43 39 0 39 为对应的ASCLL码 可以通过强制类型转换将ASCLL码转成对应的字符 int digit 61 1 cout lt lt digit 43 39 0 39 lt lt endl 49
  • 设计性大作业(1) 简单路由器程序的设计

    简单路由器程序设计实验的具体要求为 xff1a 可在虚拟机上实现 xff0c 源码和操作文档加企鹅2805531180 xff08 1 xff09 设计和实现一个路由器程序 xff0c 要求完成的路由器程序能和现有的路由器产品 xff08
  • 堆和栈的存放内容

    栈 栈存放的是基本数据类型 43 引用变量名 int a 61 1 这里的a和1都存放在栈中 String b 61 abc 这里只有b存放在栈中 xff0c 而 34 abc 34 则存放在堆中 堆 堆存放的是new出来的对象 上述的St
  • 大字节序和小字节序

    一 基本概念 大字节序和小字节序是数据存储规则 小字节序是高位数据存储在内存高位地址 xff0c 低位数据存储在低位地址 大字节序是高位数据存储在内存低位地址 xff0c 低位数据存储在高位地址 二 程序判断 include lt iost
  • IMU让无人机控制变得更轻松

    多翼无人机广泛应用于监视和侦察 航空摄影和测量 搜索和救援任务 通信中继和环境监测 目前无人机的手动控制大部分基于视觉反馈 xff0c 所以操作环境中的障碍物会造成干扰 因此 xff0c 需要其他感官反馈 xff0c 例如触觉 xff0c
  • DB2reorg 和runstats使用

    DB2中 xff0c 如果使用alter更改表结构后 xff0c 需要执行reorg 命令消除碎片 xff0c 进行重组 xff1b 创建索引后 xff0c 需要执行RUNSTATS更新统计信息 xff0c 使索引生效 xff1b 如果修改
  • HTTP的8种请求方式及常用请求方式的解析

    一 什么是HTTP xff1f HTTP xff0c 即超文本传输协议 xff0c 是一种实现客户端和服务器之间通信的响应协议 xff0c 它是用作客户端和服务器之间的请求 客户端 xff08 浏览器 xff09 会向服务器提交HTTP请求
  • 星网宇达(惯导+IMU)设备实现自动采点

    一 创建和打开gps Road txt文件 xff0c 准备往里写数据 FILE span class token operator span p span class token operator 61 span span class t
  • 车辆自动采点

    一 整体思路 xff1a 车辆自动踩点需要获取千寻差分数据 xff0c 差分数据有两种格式 xff1a 分别是GPGGA和GRHDT xff0c GPGGA内存在车辆经纬度定位信息 xff0c GRHDT内存在转向角信息 xff0c 分别进
  • 安卓实现串口通信

    1 串口通信232的接线 一般通讯使用232串口的话 xff0c 我们会用到2 3 5接口 xff0c 根据安卓平板的标记依次接线 xff08 小白注意 xff1a 接收端要与发送端接入 xff0c 不要根据名称一样就接线 xff09 2
  • vins-mono编译报错

    vins mono 报错 xff08 opencv3 gt opencv4 xff09 报错原因error CV RGB2GRAY was not declared in this scopeerror CV BGR2GRAY was no
  • http协议之libcurl

    一 libcurl简介 libcurl是一个跨平台的网络协议库 xff0c 支持http https ftp gopher telnet dict file 和ldap 协议 libcurl同样支持HTTPS证书授权 xff0c HTTP
  • Vue项目实现页面加载进度条&分布阶段去除console

    目录 进度条 xff08 1 xff09 下载nprogress依赖 xff08 2 xff09 在main js中导入nprogress包 xff08 3 xff09 在request拦截器中 xff0c 展示进度条 xff08 4 xf
  • Jeston XAVIER NX 使用sudo apt-get install 安装ros过程中出现以下问题

    the following packages have unmet dependencies ros noetic desktop full Depends ros noetic desktop but it is not going to
  • esp32(ardunio环境)+python实现网关

    esp32 ardunio环境 xff09 43 python实现网关 使用ardunio 和VScode 以ESP32为客户端 xff0c 电脑为服务端收发消息 硬件准备 1 ESP32开发板 xff0c 数据线 环境准备 ardunio
  • Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定(未完成)

    Ubuntu18 04下 用lidar align实现激光雷达VLP 16和Imu联合标定 一 实现所用设备二 安装依赖 配环境2 1 依赖2 2 下载 Lidar 43 IMU 标定工具 xff1a lidar align xff0c 编