我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用lidar_align进行激光雷达与IMU的外参标定(超详细教程)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用lidar_align进行激光雷达与IMU的外参标定(超详细教程)

下载lidar_align源码

ethz-asl/lidar_align: A simple method for finding the extrinsic calibration between a 3D lidar and a 6-dof pose sensor (github.com)icon-default.png?t=M85Bhttps://github.com/ethz-asl/lidar_align2、解压到ros工作空间目录下的class="lazy" data-src文件中

不知道如何创建ros工作空间的可以参考我另一篇博客:

ubuntu下如何创建ros工作空间、创建ros功能包、创建ros节点_╰︶ ̄ 莫等闲۩۩۩的博客-CSDN博客_ubuntu 创建工作空间icon-default.png?t=M85Bhttps://blog.csdn.net/qq_49959714/article/details/127028396?spm=1001.2014.3001.5501

 3、编译

sudo apt-get install libnlopt-devcd ~/catkin_wscatkin_make

此时编译可能会遇到一些问题,比如:

 CNake Error at /usr /share/cnake-3.10/Nodules/FindPackageHandlestandardArgs.cmake:137 (nessage);could NOT find NLOPT (missing: NLOPT_INCLUDE_DIR NLOPT_LIBRARY)
Call stack (most recent call first):
/usr/share/cnake-3.10/NModules/FindPackageHandleStandardArgs.cnake:378(_FPHSA_FAILURENLOPTConfig.cmake:65 (find_package_handle_standard_args)
CMakeLists.txt: 18 (find_package)
-- Configuring incomplete, errors occurred!
see also "/home/findlab/lidar_align-naster/build /CMakeFiles/CNakeoutput.log".See also "/hone /findlab/lidar_align-naster/build/CMakeFiles/CNakeError.log".

解决办法:

 在lidar_align-master文件夹中的CMakeLists.txt添加以下代码:

list(APPEND CMAKE_FIND_ROOT_PATH ${PROJECT_SOURCE_DIR})set (CMAKE_PREFIX_PATH "/usr/local/lib/cmake/nlopt")

 最后应该就编译成功了,如果还遇到编译问题,可以参考一下我另一篇博客,里面总结了几个可能遇到的问题解决办法:

(4条消息) ubuntu安装lidar_align时编译出错,激光雷达与IMU标定_╰︶ ̄ 莫等闲۩۩۩的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/qq_49959714/article/details/128086217?spm=1001.2014.3001.55014、启动

roscoresource devel/setup.bashroslaunch lidar_align lidar_align.launch

 此时可能会遇到一些问题

问题1:

解决办法:

修改launch文件,改为自己的bag路径

 问题2:

 解决办法:

修改loader.cpp文件

将以下代码放到该文件的对应位置,并将odom的代码删除或注释掉

std::vector types;  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());    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);    }  }

 

 问题3:

 解决办法:

在loader.h头文件中定义Imu消息即可

#include 

 然后再重新编译catkin_make

此时应该编译没问题了

再执行roslaunch lidar_align lidar_align.launch

可能还会再次遇到问题

 原因是点云序列号超出范围

解决办法:在sensor.h头文件中将keep_points_ratio的默认值0.01改小,比如改成0.001.

 最终成功标定了

 最终的标定结果文件存放在lidar_align目录下的results文件夹中

 

 

来源地址:https://blog.csdn.net/qq_49959714/article/details/128119029

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用lidar_align进行激光雷达与IMU的外参标定(超详细教程)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录