Ubuntu16.04系统,在ROS中配置RealSence D435 ,并标定其与rplidar的外参


主要目的是为rplidar标定深度相机外参,为机器人导航的过程提供障碍物识别的功能,因此需要知道两者之间的静态变换。
用到的传感器:
RealSence D435
rplidar A2

主要分为两个步骤:
1 Ubuntu16.04系统下配置RealSence D435的ROS驱动
(rplidar A2的ROS驱动比较简单,自行百度)
2 标定深度相机与rplidar外参


1. 配置RealSence D435的ROS驱动和对应的SDK

1. 1 安装RealSence D435的SDK

SDK和ROS驱动官方均给出了源码安装和apt-get两种方式。apt-get操作简单,但是题主尝试反复多次安装,SDK都可以正常使用,但是ROS中启动相应节点一直报错(推断ros官方并没有及时将库中提前编译好的驱动文件,更新到与SDK匹配的版本),所以本文只介绍源码安装SDK和ROS包。

首先,从官网打开https://github.com/IntelRealSense/librealsense/releases.下载最新版本的SDK源码。注意,这里的对应版本需要检查:Ubuntu版本、kernel版本、Supported Devices等。题主采用的为Ubuntu16.04,kernel=4.15.0,D435型号(不是D435(i))。

写本文时的最新版本为Intel® RealSense™ SDK librealsense-2.50.0,建议下载最新的,ROS驱动的版本与SDK必须对应,github的ROS驱动的下面会写明要求,必须是哪一个版本的SDK,否则编译时会出错。与librealsense-2.50.0对应的版本是ROS Wrapper 2.0 for Intel® RealSense™ realsense-ros-2.3.2。

打开https://github.com/IntelRealSense/realsense-ros/releases.下载对应版本的ROS包。

开始安装SDK。先cd到下载的librealsense-2.50.0文件夹下,安装依赖项:

sudo apt-get install git libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libglfw3-dev
sudo apt-get install ros-kinetic-ddynamic-reconfigure*
sudo apt-get install intel-realsense-dfu*// 运行脚本./scripts/setup_udev_rules.sh
// 创建并运行patched模块
// 官网有这一步,下载巨慢,我直接跳过了没有影响后面,好像和内核版本有关
./scripts/patch-realsense-ubuntu-lts.sh

然后开始安装SDK,编译时间略长(安装时务必拔掉相机):

mkdir build && cd build
cmake ..
make -j8 //根据你cpu而定
sudo make install
//验证,进入官方启动器,开启左侧设备,有点云和图像安装成功
realsense-viewer

1. 2 安装RealSence D435的ROS驱动

新建一个ROS的工作空间,将源码放src中,开始编译ros驱动,记得把新devel变量路径写入~/.bashrc文件中:

cd catkin_ws/src/
catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
source ~/.bashrc

安装配置完成,运行launch文件,记得改一下rviz中的frame id,否则不会显示图像:

roslaunch realsense2_camera rs_camera.launch
rviz

最后添加想要的话题

由于题主是为了标定深度相机的点云坐标系与RPLIDAR坐标系,所以需要用到realsense的左红外相机图像来与雷达的点云进行标定,因此需要开启红外相机的图像话题同时关闭掉红外光辅助深度测量的功能,不关的话会影响成像效果,参考这一篇文章,重写一个launch文件达到上述目的。
链接: https://blog.csdn.net/qq_42928559/article/details/121747781

至此就完成了ROS下的配置安装。效果如图,依次是rgb,左右目红外以及深度图:

深度相机的点云坐标系定义在左目的红外相机,因此下一步标定rplidar与左目相机。

2. 标定D435和RPlidar的外部参数

继续更新了,找到一个可用的开源算法,但是效果不是很理想,也记录一下中间的主要问题。
开源算法是He Yijia在github中给出的,就是那位在深蓝讲VIO的老师,标定算法的原理可以参考:
https://zhuanlan.zhihu.com/p/137501892

github的地址如下:
https://github.com/MegviiRobot/CamLaserCalibraTool
该工具有以下特点(拷贝自github):

  1. 支持多 April tag 格式。 可以选择多 apriltag 的标定板 ( kalibr_tag.pdf ) 或者自己打印一个 apriltag 做标定板(apriltag.pdf)。
  2. 支持多种相机模型。radial-tangential (radtan) : (distortion_coeffs: [k1 k2 r1 r2]); equidistant (equi):distortion_coeffs: [k1 k2 k3 k4]). More info please visit kalibr website.
  3. 激光线自动检测,无须手标。会自动提取激光线中落在标定板上的激光点,前提是标定板在激光正前方 120 度范围内,并且激光前方 2m 范围内只会存在一个连续的直线线段,所以请你在空旷的地方采集数据,不然激光数据会提取错误。
  4. 利用标定板的边界约束,标定结果更加准确。这个是隐藏的功能,暂时未对外开放接口,需要你修改代码。

新建工作空间后拷贝对应代码,直接catkin_make编译,无需其他依赖项和库,April tag的相关库直接集成到了头文件中

mkdir LaserCameraCal_ws
mkdir ../src
cd src
git clone https://github.com/MegviiRobot/CamLaserCalibraTool
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release

rosbag record录制一段带有/camera和/scan的数据包,保证打印的标定板有充分的旋转和平移(值得强调的是,雷达的x方向必须和相机的z方向大致相同,因为程序中默认提取的是雷达x正前方的连续平面点云)。录制好数据包后记得在config文件中根据标定板的类型和尺寸更改对应的参数,详见config文件,同时更改bag文件的存放路径。随后开始标定程序运行:

roslaunch lasercamcal_ros kalibra_apriltag.launch

这一launch文件用于识别tag的位姿并将信息对应时间戳保存到一个txt文件中,为后续计算做准备。如图会识别到每一帧图像中标定板的空间位姿,题主封校没地方打印另一种标定板,只能先用这种单个的试试水,但是单个的定位精度真的很一般,也导致了后面标定精度比较差,建议有条件的打印github中提到的第一种标定板。(这一步运行结束后程序并不会自己结束,而是卡在那里需要手动ctrl+c关闭,此时已经生成了一个txt的中间文件,记录位姿)

继续下一步:

roslaunch lasercamcal_ros calibra_offline.launch

这一launch文件用于离线标定,可以自动提取标定板上的连续直线点云,感觉上构造的是点到平面的距离误差进行优化的,也是两步法先求得初始位姿再非线性优化估计准确外参,感兴趣可以看一下开篇那个知乎的问答。(这一部分也会弹出一个显示点云的窗口,不过我忘记截图了,emmm)
计算结束后会自动生成一个result文件在你设置的config路径下,作者还提供了一个重投影的debug程序帮助你查看标定效果,运行它同时播放bag文件,会得到下图的一个重投影效果:

roslaunch lasercamcal_ros debug.launch
rosbag play data.bag


题主的标定效果一般,最起码横滚角很明显不对劲,猜测可能是单个的标定板估计位姿精度确实有限,运行过程中有很多帧估计的坐标系都已经偏离图像中的平面了,有条件再打印一个大的标定板测试一下实验结果。

Ubuntu16.04 在ROS中配置RealSence D435 并标定深度相机与rplidar外参相关推荐

  1. ROS与深度相机入门教程:(1)Ubuntu16.04 在ROS中驱动Intel D435i深度相机

    Intel在Github上开源了支持所有RealSense系列相机的SDK,包括了D400.SR300系列深度相机和T265双目跟踪相机,支持Linux.Windows.Mac OS以及Android ...

  2. 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序

    [ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...

  3. ubuntu16.04 安装ros

    ubuntu16.04 安装ros 2018年04月30日 22:44:11 文刀过客 阅读数:512 标签: ros的安装 更多 个人分类: ROS 主要参考了以下两个帖子: https://blo ...

  4. 踩坑NVIDIA Jetson TX2、Ubuntu16.04、ROS Kinetic安装

    踩坑NVIDIA Jetson TX2.Ubuntu16.04.ROS Kinetic安装 摘要 一.NVIDIA Jetson TX2环境配置 1.1开机使用图形化界面 1.2刷机 1.3修改TX2 ...

  5. Ubuntu16.04安装ROS kinetic以及标定工具Kalibr流程

    Ubuntu16.04安装ROS kinetic以及标定工具Kalibr流程 一.安装ROS Kinetic 二.安装kalibr 编译期间可能遇到的问题及解决方案: 一.安装ROS Kinetic ...

  6. Ubuntu16.04下ROS Kinetic的安装(2022)

    文章目录 Ubuntu16.04下ROS Kinetic的安装(2022) 一.Ubuntu16.04配置 二.ROS Kinetic安装过程 1.软件中心配置 2.ROS的下载安装 2.1添加源和密 ...

  7. Ubuntu16.04 安装ROS Kinetic 究级详细教程

    Ubuntu16.04 安装ROS Kinetic 究级详细教程 1. "软件和更新"进行配置 1.1 Ubuntu Software 1.2 Other Software 2. ...

  8. Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources.list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS ...

  9. Ubuntu16.04安装ros残缺包

    由于工程项目对系统环境要求不同,安装ROS时,部分软件包没有安装,在执行程序时才报错,下面是执行程序中的问题以及相应解决方案,可以根据需求自行尝试. 1. 具体报错记不清了,大致是提示相应包找不到,根 ...

最新文章

  1. hp 380g9服务器用户手册,HP ProLiant DL380Gen9服务器用户指南
  2. STM32用USART发送字符串,以USART_FLAG_TXE和USART_FLAG_TC怎么用
  3. ISO base media file format---iso 基础媒体文件格式(专业名称)
  4. Qt 【遍历文件夹文件,为listwidgetItem设置图标】
  5. linux下的RPC
  6. Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程
  7. RocketMQ 实战-SpringBoot整合RocketMQ
  8. nodePPT初认识启动与手机控制
  9. (转帖)如何在DE2上安裝μClinux作業系統? (Nios II )
  10. 同济大学 线性代数 第六版 pdf_线性代数思维导图专题
  11. python词频统计中文_Python中文词频统计
  12. 阿里云大学Linux学习路线图(学+测)重磅上线!
  13. 软件测试面试题和简历模板(面试前准备篇)
  14. 2023蓝牙耳机性价比推荐:高品质蓝牙耳机盘点分享
  15. 5g的八大关键指标_5G的七大关键性能指标5G对生活的改变新5G时代的来临身边巨变...
  16. 2019年,线下营销有哪些重要趋势?
  17. 屏幕录制一键截图工具 FastStone Capture 9.0 绿色便携中文版
  18. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL
  19. Kudo介绍 + Spark\Python\Scala开发Kudu应用程序
  20. java-网页404(个例)

热门文章

  1. python 实现ssh爆破
  2. python微信聊天
  3. 用Mathematica实现各类积分图形区域绘制与积分计算及结果的快速检验方法(一)
  4. 父子进程之间的共享资源
  5. 同质图,异质图以及属性图
  6. Pandas 数据结构
  7. 程序员吃的是青春饭么?
  8. smtp outlook邮件发送非授权码模式
  9. 一次搞懂延迟任务及十种延迟任务的实现方式
  10. 蓝绿发布,灰度发布及滚动发布