实测 ubuntu 20.04 使用 lidar_imu_calib 功能包 进行 激光雷达与imu标定
实测 ubuntu 20.04 使用 lidar_imu_calib 功能包 进行 激光雷达与imu标定
- 功能包介绍
- 功能包下载与编译
- 使用功能包
- 接入雷达和imu
- 录制 rosbag 文件
- 执行 lidar_imu_calib 功能包
功能包介绍
功能包名称:
lidar_imu_calib
功能包简介:
在基于3D激光雷达开发slam时,我们经常使用imu为匹配算法(icp, ndt)提供先验,所以需要校准lidar和imu之间的变换。对于匹配算法,transfom中的姿态比transform中的位置更重要 , 并且位置通常设置为 0。所以这个功能包只校准激光雷达和 imu 之间转换中的姿态分量。
功能包地址:
https://github.com/chennuo0125-HIT/lidar_imu_calib
功能包下载与编译
安装步骤:
mkdir -p catkin_ws/src
cd catkin_ws/src
git clone https://github.com/chennuo0125-HIT/lidar_imu_calib.git
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="ndt_omp;lidar_imu_calib"
此时会出现报错问题
报错内容:
/usr/include/pcl-1.10/pcl/common/impl/io.hpp: In function ‘void pcl::copyPointCloud(const pcl::PointCloud<PointT>&, const std::vector<pcl::PointIndices>&, pcl::PointCloud<PointOutT>&)’:
/usr/include/pcl-1.10/pcl/common/impl/io.hpp:272:16: error: use of ‘auto’ in lambda parameter declaration only available with ‘-std=c++14’ or ‘-std=gnu++14’272 | [](const auto& acc, const auto& index) { return index.indices.size() + acc; });| ^~~~
/usr/include/pcl-1.10/pcl/common/impl/io.hpp:272:33: error: use of ‘auto’ in lambda parameter declaration only available with ‘-std=c++14’ or ‘-std=gnu++14’272 | [](const auto& acc, const auto& index) { return index.indices.size() + acc; });| ^~~~
/usr/include/pcl-1.10/pcl/common/impl/io.hpp: In lambda function:
/usr/include/pcl-1.10/pcl/common/impl/io.hpp:272:61: error: request for member ‘indices’ in ‘index’, which is of non-class type ‘const int’272 | [](const auto& acc, const auto& index) { return index.indices.size() + acc; });| ^~~~~~~
In file included from /usr/include/pcl-1.10/pcl/io/pcd_io.h:44,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/src/lib/calibExRLidar2Imu.cpp:5:
/usr/include/pcl-1.10/pcl/io/file_io.h: At global scope:
/usr/include/pcl-1.10/pcl/io/file_io.h:235:8: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?235 | std::enable_if_t<std::is_floating_point<Type>::value>| ^~~~~~~~~~~| enable_if
In file included from /usr/include/pcl-1.10/pcl/io/pcd_io.h:44,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/src/lib/calibExRLidar2Imu.cpp:5:
/usr/include/pcl-1.10/pcl/io/file_io.h:252:8: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?252 | std::enable_if_t<std::is_integral<Type>::value>| ^~~~~~~~~~~| enable_if
/usr/include/pcl-1.10/pcl/io/file_io.h:266:18: error: expected initializer before ‘<’ token266 | copyValueString<std::int8_t> (const pcl::PCLPointCloud2 &cloud,| ^
/usr/include/pcl-1.10/pcl/io/file_io.h:280:18: error: expected initializer before ‘<’ token280 | copyValueString<std::uint8_t> (const pcl::PCLPointCloud2 &cloud,| ^
/usr/include/pcl-1.10/pcl/io/file_io.h:304:8: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?304 | std::enable_if_t<std::is_floating_point<Type>::value, bool>| ^~~~~~~~~~~| enable_if
/usr/include/pcl-1.10/pcl/io/file_io.h:317:8: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?317 | std::enable_if_t<std::is_integral<Type>::value, bool>| ^~~~~~~~~~~| enable_if
^CIn file included from /usr/include/c++/9/algorithm:62,from /usr/include/boost/smart_ptr/shared_ptr.hpp:39,from /usr/include/pcl-1.10/pcl/pcl_macros.h:69,from /usr/include/pcl-1.10/pcl/point_types.h:42,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/include/calibExRLidar2Imu.h:9,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/src/lib/calibExRLidar2Imu.cpp:1:
/usr/include/c++/9/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = __gnu_cxx::__normal_iterator<const pcl::Vertices*, std::vector<pcl::Vertices> >; _OIter = std::back_insert_iterator<std::vector<pcl::Vertices> >; _UnaryOperation = pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>]’:
/usr/include/pcl-1.10/pcl/PolygonMesh.h:55:24: required from here
/usr/include/c++/9/bits/stl_algo.h:4343:24: error: no match for call to ‘(pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>) (const pcl::Vertices&)’4343 | *__result = __unary_op(*__first);| ~~~~~~~~~~^~~~~~~~~~
In file included from /usr/include/pcl-1.10/pcl/common/io.h:50,from /usr/include/pcl-1.10/pcl/filters/filter.h:43,from /usr/include/pcl-1.10/pcl/filters/voxel_grid.h:43,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/include/calibExRLidar2Imu.h:11,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/src/lib/calibExRLidar2Imu.cpp:1:
/usr/include/pcl-1.10/pcl/PolygonMesh.h:45:22: note: candidate: ‘pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>’45 | [point_offset](auto polygon)| ^
/usr/include/pcl-1.10/pcl/PolygonMesh.h:45:22: note: no known conversion for argument 1 from ‘const pcl::Vertices’ to ‘int’
In file included from /usr/include/c++/9/numeric:62,from /usr/include/boost/random/discrete_distribution.hpp:18,from /usr/include/boost/random.hpp:63,from /usr/include/pcl-1.10/pcl/filters/boost.h:48,from /usr/include/pcl-1.10/pcl/filters/voxel_grid.h:42,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/include/calibExRLidar2Imu.h:11,from /home/jone/jone_ws/src/lidar_imu_calib/lidar_imu_calib/src/lib/calibExRLidar2Imu.cpp:1:
/usr/include/c++/9/bits/stl_numeric.h: In instantiation of ‘_Tp std::accumulate(_InputIterator, _InputIterator, _Tp, _BinaryOperation) [with _InputIterator = __gnu_cxx::__normal_iterator<const pcl::PCLPointField*, std::vector<pcl::PCLPointField> >; _Tp = std::__cxx11::basic_string<char>; _BinaryOperation = pcl::getFieldsList(const pcl::PCLPointCloud2&)::<lambda(const int&, const int&)>]’:
/usr/include/pcl-1.10/pcl/common/io.h:144:82: required from here
/usr/include/c++/9/bits/stl_numeric.h:166:22: error: no match for call to ‘(pcl::getFieldsList(const pcl::PCLPointCloud2&)::<lambda(const int&, const int&)>) (std::__cxx11::basic_string<char>&, const pcl::PCLPointField&)’166 | __init = __binary_op(_GLIBCXX_MOVE_IF_20(__init), *__first);| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
只截取了其中一段
报错原因:
ubuntu 20.04 的 ros版本是noetic 带的pcl是 pcl-1.10,这个版本和之前的有所不同
这么多错误就一个原因 : pcl-1.10需要用c++14及以上编译。
报错解决方法:
打开 lidar_imu_calib 文件夹下的 CMakeLists.txt
将第五行
add_compile_options(-std=c++11)
换成
add_compile_options(-std=c++14)
即可编译成功
使用功能包
接入雷达和imu
找个电源适配器,9-18v给雷达供电。雷达连接其连接器,网口接到ROS的工控机上即可
将工控机的网口配置为
ipv4,方式设置为手动
ip地址、掩码以及网关设置成下图
其中地址 不能为 192.168.1.201 ,这个是雷达的地址
运行雷达驱动程序
roslaunch velodyne_pointcloud VLP16_points.launch
imu模块的硬件连接很简单,usb给模块供电,并与pc通信,插上后
运行imu驱动程序
roslaunch fdilink_ahrs ahrs_data.launch
通过 rostopic list
指令,检查下消息是 否正确
图片中的/imu
/velodyne_points
就是两个传感器的消息名称
录制 rosbag 文件
通过
rosbag record /imu /velodyne_points
来录制两个传感器的消息
执行 lidar_imu_calib 功能包
上面的工作主要是给功能包准备数据,下面即可执行功能包了
首先需要 修改 配置文件
相关的参数没有config文件夹的yaml文件,是直接在其launch文件中设置的
将 /lidar_topic 和 /imu_topic 与/bag_file 修改成自己的
之后便可以运行功能包
roslaunch lidar_imu_calib calib_exR_lidar2imu.launch
功能包会显示添加 lidar 消息
最后会显示 lidar的消息数量和imu的数量 形成约束的数量
再等一下就会出现计算的结果
实测 ubuntu 20.04 使用 lidar_imu_calib 功能包 进行 激光雷达与imu标定相关推荐
- Ubuntu 20.04 + ROS Noetic + OpenCV 4.10编译kalibr相机标定功能包
环境:Ubuntu 20.04 + ROS Noetic + OpenCV:4.2.0 1.创建工作空间 mkdir -p kalibr_ws/src cd kalibr_ws/ source /op ...
- 命令行 笔记本键盘禁用_如何在 Ubuntu 20.04 上禁用坞站(dock) | Linux 中国
我发现它对于快速访问常用应用非常方便,但并非所有人都希望它额外占用屏幕上的一些空间. • 来源:linux.cn • 作者:Abhishek Prakash • 译者:geekpi • (本文字数:1 ...
- ubuntu 20.04配置Elasticfusion及问题解决(Kinect V2实测数据、TUM数据)
测试数据集+Kinect V2实时数据 已跑通,前后分别在4台电脑跑过,问题梳理比较多. Tips:编译过程中仔细阅读readme文件, 看看是不是有什么地方没注意到,能解决大部分问题. [源码] E ...
- ubuntu 20.04 ROS Noetic 无serial包解决方法
ubuntu 20.04 ROS Noetic 无serial包解决方法 在ros-noetic版本之前的ros-kinetic或者ros-meldic版本,进行串口通信的时候可以采用 sudo ap ...
- Ubuntu 20.04下使用IDEA配置tomcat10,及servlet导包后javax.servelet一直报错的解决方法
Ubuntu 20.04下使用IDEA配置tomcat10,servlet导包后javax.servelet一直报错的解决方法 前期有关tomcat的安装就不多详谈,网上教程一大把,就不多赘述了. ...
- Linux 之四 Ubuntu 20.04 WiFi 无法使用、设置无法显示、远程桌面、SSH、Git、PPA、FFmpeg 等各问题记录
安装 今天,在我的老 Acer 笔记本(11 年的老本)上安装了 Ubuntu 20.04 LTS 版本,以作为学习使用.安装到没啥难度,基本和 Windows 差不多 ,基本都是下一步就行.注意 ...
- linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...
Ubuntu 20.04将删除Amazon Web应用程序,原因就是这款应用很少有用户使用,但需要的用户也可另行安装.在过去的8年中,Amazon Web应用程序已成为Ubuntu桌面的一部分,现在, ...
- Ubuntu 20.04安装Ros Noetic及Ubuntu 18.04安装ROS Melodic(两版本详细填坑)
Ubuntu 20.04安装Ros Noetic及18.04安装ROS Melodic 表1-1 ROS的历史版本 1. 设置安装源 2. 添加秘钥 3. 更新列表 4. 开始安装 5. 配置ROS环 ...
- ubuntu安装python百度经验_如何在Ubuntu 20.04上安装Python 3.9(含python编译安装和使用Apt命令安装)...
在本文中,我们将向您展示在Ubuntu 20.04上安装Python 3.9的两种方法.第一种使用APT命令安装Python3.9,第二种是在Ubuntu20.04上编译安装Python 3.9.本教 ...
- ubuntu 20.04 ROS 环境下 使用 velodyne
ubuntu 20.04 ROS 环境下 使用 velodyne 系统环境配置 硬件连接 网口配置 运行驱动程序 通过rviz可视化点云 系统环境配置 安装ROS依赖 sudo apt install ...
最新文章
- 全浏览器兼容的DIV拖动效果
- Confluence 6 CSS 编辑技巧
- 关于文件格式和编码方式,乱码产生的原因?
- python 浏览器,轻量级Python Web浏览器
- 智能包装结构,提高可测性
- LeetCode 474. 一和零(01背包动态规划)
- CentOS设置静态IP
- 网页优化系列三:使用压缩后置viewstate
- java处理dealfilter_Java-DealString工具类
- spring中的ioc解决程序的耦合入门
- LearnOpenGL - 纹理贴图 源代码
- 为什么游戏加速器都会设置韩国节点
- 机器人运动学轨迹跟踪控制(Matlab实现)
- origin 快捷键
- Canny边缘检测非极大值抑制法在双立方插值(Bicubic)图像边缘优化
- “我在网红书店,从来不看书”
- 苹果输了官司,iPad会改名吗?
- 【硬见小百科】SMT工艺,是什么影响锡膏印刷的质量
- 当我们谈论Virtual DOM时,我们在说什么——etch源码解读
- DOS窗口下使用命令打开远程桌面连接
热门文章
- 用C++完成华氏温度换摄氏温度
- 信创办公--基于WPS的Word最佳实践系列(邮件合并实现邮件批量发送)
- 基于FPGA的循迹小车,控制器:Xilinx-Ego1
- OneNote for win10 无法加载笔记本
- JSchException: Algorithm negotiation fail
- 倾斜摄影实景三维与游戏的结合
- Android | Tangram动态页面之路(七)硬核的Virtualview
- reactnative布局与适配
- oracle导出表904错误,月光软件站 - 编程文档 - 数据库 - EXP-00008: ORACLE error 904 encountered的解决方法...
- Racket编程指南——24 命令行工具和你的编辑器选择